xiamaofa
7 months ago
48 changed files with 10613 additions and 1 deletions
@ -0,0 +1,122 @@
|
||||
|
||||
apply plugin: 'java' |
||||
|
||||
|
||||
ext { |
||||
/** |
||||
* 项目中依赖的jar的路径 |
||||
* 1.如果依赖的jar需要打包到zip中,放置在lib根目录下 |
||||
* 2.如果依赖的jar仅仅是编译时需要,防止在lib下子目录下即可 |
||||
*/ |
||||
libPath = "$projectDir/../webroot/WEB-INF/lib" |
||||
|
||||
/** |
||||
* 是否对插件的class进行加密保护,防止反编译 |
||||
*/ |
||||
guard = true |
||||
|
||||
def pluginInfo = getPluginInfo() |
||||
pluginPre = "fine-plugin" |
||||
pluginName = pluginInfo.id |
||||
pluginVersion = pluginInfo.version |
||||
|
||||
outputPath = "$projectDir/../webroot/WEB-INF/plugins/plugin-" + pluginName + "-1.0/classes" |
||||
} |
||||
|
||||
group = 'com.fr.plugin' |
||||
version = '10.0' |
||||
sourceCompatibility = '8' |
||||
|
||||
sourceSets { |
||||
main { |
||||
java.outputDir = file(outputPath) |
||||
output.resourcesDir = file(outputPath) |
||||
} |
||||
} |
||||
|
||||
ant.importBuild("encrypt.xml") |
||||
//定义ant变量 |
||||
ant.projectDir = projectDir |
||||
ant.references["compile.classpath"] = ant.path { |
||||
fileset(dir: libPath, includes: '**/*.jar') |
||||
fileset(dir: ".",includes:"**/*.jar" ) |
||||
} |
||||
|
||||
classes.dependsOn('clean') |
||||
|
||||
task copyFiles(type: Copy,dependsOn: 'classes'){ |
||||
from outputPath |
||||
into "$projectDir/classes" |
||||
} |
||||
|
||||
task preJar(type:Copy,dependsOn: guard ? 'compile_encrypt_javas' : 'compile_plain_javas'){ |
||||
from "$projectDir/classes" |
||||
into "$projectDir/transform-classes" |
||||
include "**/*.*" |
||||
} |
||||
jar.dependsOn("preJar") |
||||
|
||||
task makeJar(type: Jar,dependsOn: preJar){ |
||||
from fileTree(dir: "$projectDir/transform-classes") |
||||
baseName pluginPre |
||||
appendix pluginName |
||||
version pluginVersion |
||||
destinationDir = file("$buildDir/libs") |
||||
|
||||
doLast(){ |
||||
delete file("$projectDir/classes") |
||||
delete file("$projectDir/transform-classes") |
||||
} |
||||
} |
||||
|
||||
task copyFile(type: Copy,dependsOn: ["makeJar"]){ |
||||
from "$buildDir/libs" |
||||
from("$projectDir/lib") { |
||||
include "*.jar" |
||||
} |
||||
from "$projectDir/plugin.xml" |
||||
into file("$buildDir/temp/plugin") |
||||
} |
||||
|
||||
task zip(type:Zip,dependsOn:["copyFile"]){ |
||||
from "$buildDir/temp/plugin" |
||||
destinationDir file("$buildDir/install") |
||||
baseName pluginPre |
||||
appendix pluginName |
||||
version pluginVersion |
||||
} |
||||
|
||||
//控制build时包含哪些文件,排除哪些文件 |
||||
processResources { |
||||
// exclude everything |
||||
// 用*.css没效果 |
||||
// exclude '**/*.css' |
||||
// except this file |
||||
// include 'xx.xml' |
||||
} |
||||
|
||||
/*读取plugin.xml中的version*/ |
||||
def getPluginInfo(){ |
||||
def xmlFile = file("plugin.xml") |
||||
if (!xmlFile.exists()) { |
||||
return ["id":"none", "version":"1.0.0"] |
||||
} |
||||
def plugin = new XmlParser().parse(xmlFile) |
||||
def version = plugin.version[0].text() |
||||
def id = plugin.id[0].text() |
||||
return ["id":id,"version":version] |
||||
} |
||||
|
||||
repositories { |
||||
mavenLocal() |
||||
maven { |
||||
url = uri('http://mvn.finedevelop.com/repository/maven-public/') |
||||
} |
||||
} |
||||
|
||||
dependencies { |
||||
//使用本地jar |
||||
implementation fileTree(dir: 'lib', include: ['**/*.jar']) |
||||
implementation fileTree(dir: libPath, include: ['**/*.jar']) |
||||
} |
||||
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
<project> |
||||
<target name="compile_encrypt_javas" depends="copyFiles"> |
||||
<echo message="加密文件"/> |
||||
<echo message="${projectDir}"/> |
||||
<taskdef name="pretreatment" classname="com.fr.plugin.pack.PluginPretreatmentTask"> |
||||
<classpath refid="compile.classpath"/> |
||||
</taskdef> |
||||
<pretreatment baseDir="${projectDir}"/> |
||||
</target> |
||||
<target name="compile_plain_javas" depends="copyFiles"> |
||||
</target> |
||||
</project> |
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<plugin> |
||||
<id>com.eco.plugin.zgtpbxdate</id> |
||||
<name><![CDATA[日期控件]]></name> |
||||
<active>yes</active> |
||||
<version>1.0.1</version> |
||||
<env-version>11.0~11.0</env-version> |
||||
<jartime>2022-09-28</jartime> |
||||
<vendor>wink</vendor> |
||||
<description><![CDATA[日期控件]]></description> |
||||
<change-notes><![CDATA[ |
||||
|
||||
]]></change-notes> |
||||
<main-package>com.eco.plugin.zgtpbxdate</main-package> |
||||
<prefer-packages> |
||||
<prefer-package>com.fanruan.api</prefer-package> |
||||
</prefer-packages> |
||||
<lifecycle-monitor class="com.eco.plugin.zgtpbxdate.PluginMonitor"/> |
||||
<extra-report> |
||||
<JavaScriptFileHandler class="com.eco.plugin.zgtpbxdate.VSJSFileHandler"/> |
||||
<CssFileHandler class="com.eco.plugin.zgtpbxdate.VSCSSFileHandler"/> |
||||
</extra-report> |
||||
<extra-core> |
||||
<LocaleFinder class="com.eco.plugin.zgtpbxdate.LocaleFinder"/> |
||||
</extra-core> |
||||
<extra-designer> |
||||
<FormWidgetOptionProvider class="com.eco.plugin.zgtpbxdate.provider.VueFormOptionProvider"/> |
||||
<ParameterWidgetOptionProvider class="com.eco.plugin.zgtpbxdate.provider.VueParameterWidgetOptionProvider"/> |
||||
<CellWidgetOptionProvider class="com.eco.plugin.zgtpbxdate.provider.VSCellWidgetOptionProvider"/> |
||||
</extra-designer> |
||||
<function-recorder class="com.eco.plugin.zgtpbxdate.LocaleFinder"/> |
||||
</plugin> |
@ -0,0 +1,36 @@
|
||||
/* |
||||
* Copyright (C), 2018-2020 |
||||
* Project: starter |
||||
* FileName: LocaleFinder |
||||
* Author: Louis |
||||
* Date: 2020/8/31 22:19 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate; |
||||
|
||||
import com.fr.intelli.record.Focus; |
||||
import com.fr.intelli.record.Original; |
||||
import com.fr.record.analyzer.EnableMetrics; |
||||
import com.fr.stable.fun.impl.AbstractLocaleFinder; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <LocaleFinder> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
@EnableMetrics |
||||
public class LocaleFinder extends AbstractLocaleFinder { |
||||
public static final String PLUGIN_ID = "com.eco.plugin.zgtpbxdate"; |
||||
|
||||
@Override |
||||
@Focus(id = PLUGIN_ID, text = "Plugin-abege", source = Original.PLUGIN) |
||||
public String find() { |
||||
return "com/eco/plugin/zgtpbxdate/locale/lang"; |
||||
} |
||||
|
||||
@Override |
||||
public int currentAPILevel() { |
||||
return CURRENT_LEVEL; |
||||
} |
||||
} |
@ -0,0 +1,51 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: PluginMonitor |
||||
* Author: Louis |
||||
* Date: 2021/3/30 15:10 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.pane.VueDateEditorFormDefinePane; |
||||
import com.eco.plugin.zgtpbxdate.widget.VueDateEditor; |
||||
import com.fr.design.widget.Appearance; |
||||
import com.fr.design.widget.FormWidgetDefinePaneFactoryBase; |
||||
import com.fr.plugin.context.PluginContext; |
||||
import com.fr.plugin.context.PluginMarker; |
||||
import com.fr.plugin.manage.PluginManager; |
||||
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||
|
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <PluginMonitor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class PluginMonitor extends AbstractPluginLifecycleMonitor { |
||||
|
||||
public PluginMonitor() { |
||||
} |
||||
|
||||
public static void pluginForbid(PluginMarker pluginMarker) { |
||||
PluginManager.getController().forbid(pluginMarker, pluginTaskResult -> { |
||||
}); |
||||
// LogKit.error(I18nKit.getLocText("Plugin-abege_Licence_Expired"));
|
||||
} |
||||
|
||||
@Override |
||||
public void beforeStop(PluginContext pluginContext) { |
||||
} |
||||
|
||||
@Override |
||||
public void afterRun(PluginContext pluginContext) { |
||||
if (!pluginContext.isAvailable()) { |
||||
pluginForbid(pluginContext.getMarker()); |
||||
return; |
||||
} |
||||
// FormWidget定义日期控件外观
|
||||
FormWidgetDefinePaneFactoryBase.registerDefinePane(VueDateEditor.class, new Appearance(VueDateEditorFormDefinePane.class, "VueDateDefine")); |
||||
} |
||||
} |
@ -0,0 +1,15 @@
|
||||
package com.eco.plugin.zgtpbxdate; |
||||
|
||||
import com.fr.stable.fun.impl.AbstractCssFileHandler; |
||||
|
||||
public class VSCSSFileHandler extends AbstractCssFileHandler { |
||||
@Override |
||||
public String[] pathsForFiles() { |
||||
return new String[]{ |
||||
"com/eco/plugin/zgtpbxdate/css/base.css", |
||||
"com/eco/plugin/zgtpbxdate/css/datepicker.css", |
||||
"com/eco/plugin/zgtpbxdate/css/iconfont.css", |
||||
"com/eco/plugin/zgtpbxdate/css/custom.css", |
||||
}; |
||||
} |
||||
} |
@ -0,0 +1,26 @@
|
||||
package com.eco.plugin.zgtpbxdate; |
||||
|
||||
import com.fr.plugin.context.PluginContexts; |
||||
import com.fr.stable.fun.impl.AbstractJavaScriptFileHandler; |
||||
|
||||
//@Authorize(callSignKey = PLUGIN_ID)
|
||||
public class VSJSFileHandler extends AbstractJavaScriptFileHandler { |
||||
|
||||
public VSJSFileHandler() { |
||||
} |
||||
|
||||
@Override |
||||
public String[] pathsForFiles() { |
||||
if (!PluginContexts.currentContext().isAvailable()) { |
||||
PluginMonitor.pluginForbid(PluginContexts.currentContext().getMarker()); |
||||
return new String[]{}; |
||||
} |
||||
return new String[]{ |
||||
"/com/eco/plugin/zgtpbxdate/js/moment.min.js", |
||||
"/com/eco/plugin/zgtpbxdate/js/datepicker.all.js", |
||||
"/com/eco/plugin/zgtpbxdate/js/datepicker.en.js", |
||||
"/com/eco/plugin/zgtpbxdate/js/custom.js", |
||||
"/com/eco/plugin/zgtpbxdate/js/vuedatetime.js", |
||||
}; |
||||
} |
||||
} |
@ -0,0 +1,29 @@
|
||||
package com.eco.plugin.zgtpbxdate; |
||||
|
||||
import com.fr.decision.webservice.v10.plugin.helper.PluginUtils; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.plugin.context.PluginMarker; |
||||
import com.fr.plugin.manage.PluginManager; |
||||
import com.fr.stable.fun.Service; |
||||
import com.fr.web.utils.WebUtils; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
|
||||
public class VSMapService implements Service { |
||||
@Override |
||||
public String actionOP() { |
||||
return "restartInit"; |
||||
} |
||||
|
||||
@Override |
||||
public void process(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String op, String cmd) throws Exception { |
||||
PluginMarker pluginMarker = PluginUtils.createPluginMarker("com.fr.plugin.m.tree_1.0.0"); |
||||
PluginManager.getController().forbid(pluginMarker, pluginTaskResult -> { |
||||
}); |
||||
PluginManager.getController().enable(pluginMarker, pluginTaskResult -> { |
||||
}); |
||||
WebUtils.printAsJSON(httpServletResponse, new JSONObject()); |
||||
return; |
||||
} |
||||
} |
@ -0,0 +1,47 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: AccessibleFormulaVueEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/26 9:09 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.accessibles; |
||||
|
||||
import com.fr.base.BaseFormula; |
||||
import com.fr.design.dialog.BasicDialog; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.formula.FormulaFactory; |
||||
import com.fr.design.formula.UIFormula; |
||||
import com.fr.design.mainframe.widget.wrappers.FormulaWrapper; |
||||
|
||||
import javax.swing.*; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <AccessibleFormulaVueEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class AccessibleFormulaVueEditor extends BaseAccessibleVueEditor { |
||||
private UIFormula formulaPane; |
||||
|
||||
public AccessibleFormulaVueEditor() { |
||||
super(new FormulaWrapper(), new FormulaWrapper(), true); |
||||
} |
||||
|
||||
protected void showEditorPane() { |
||||
if (this.formulaPane == null) { |
||||
this.formulaPane = FormulaFactory.createFormulaPane(); |
||||
} |
||||
|
||||
BasicDialog var1 = this.formulaPane.showLargeWindow(SwingUtilities.getWindowAncestor(this), new DialogActionAdapter() { |
||||
public void doOk() { |
||||
AccessibleFormulaVueEditor.this.setValue(AccessibleFormulaVueEditor.this.formulaPane.update()); |
||||
AccessibleFormulaVueEditor.this.fireStateChanged(); |
||||
} |
||||
}); |
||||
this.formulaPane.populate((BaseFormula) this.getValue()); |
||||
var1.setVisible(true); |
||||
} |
||||
} |
@ -0,0 +1,227 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: VueAccessibleEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/25 21:58 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.accessibles; |
||||
|
||||
import com.fr.base.BaseUtils; |
||||
import com.fr.design.Exception.ValidationException; |
||||
import com.fr.design.constants.UIConstants; |
||||
import com.fr.design.designer.properties.Decoder; |
||||
import com.fr.design.designer.properties.Encoder; |
||||
import com.fr.design.dialog.BasicPane; |
||||
import com.fr.design.dialog.FineJOptionPane; |
||||
import com.fr.design.event.UIObserverListener; |
||||
import com.fr.design.gui.ibutton.UIButton; |
||||
import com.fr.design.gui.ibutton.UIButtonUI; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.mainframe.widget.accessibles.AccessibleEditor; |
||||
import com.fr.design.mainframe.widget.editors.ITextComponent; |
||||
import com.fr.design.mainframe.widget.editors.TextField; |
||||
import com.fr.design.utils.gui.GUIPaintUtils; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import javax.swing.plaf.ButtonUI; |
||||
import java.awt.*; |
||||
import java.awt.event.ActionEvent; |
||||
import java.awt.event.ActionListener; |
||||
import java.util.ArrayList; |
||||
import java.util.Iterator; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <VueAccessibleEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class BaseAccessibleVueEditor extends BasicPane implements AccessibleEditor { |
||||
protected Encoder encoder; |
||||
protected ITextComponent txtValue; |
||||
private ArrayList<ChangeListener> listeners = new ArrayList(); |
||||
private boolean showButton; |
||||
private Decoder decoder; |
||||
private UIButton btPopup; |
||||
|
||||
public BaseAccessibleVueEditor(Encoder var1, Decoder var2, boolean var3) { |
||||
this.showButton = var3; |
||||
this.encoder = var1; |
||||
this.decoder = var2; |
||||
this.initComponents(); |
||||
// this.txtValue.setEditable(var2 != null);
|
||||
this.txtValue.setEditable(false); |
||||
((JComponent) this.txtValue).setOpaque(true); |
||||
((JComponent) this.txtValue).setBorder(BorderFactory.createLineBorder(Color.lightGray)); |
||||
((JComponent) this.txtValue).setBackground(Color.WHITE); |
||||
} |
||||
|
||||
public static void showMessage(String var0, Component var1) { |
||||
FineJOptionPane.showMessageDialog(var1, var0, "Validation Error", 0); |
||||
} |
||||
|
||||
public void requestFocus() { |
||||
super.requestFocus(); |
||||
if (this.decoder != null) { |
||||
((JComponent) this.txtValue).requestFocus(); |
||||
} else if (this.showButton) { |
||||
this.btPopup.requestFocus(); |
||||
} |
||||
|
||||
} |
||||
|
||||
protected ITextComponent createTextField() { |
||||
return new TextField() { |
||||
public void registerChangeListener(UIObserverListener var1) { |
||||
} |
||||
|
||||
public boolean shouldResponseChangeListener() { |
||||
return false; |
||||
} |
||||
}; |
||||
} |
||||
|
||||
private void initComponents() { |
||||
this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 1)); |
||||
this.txtValue = this.createTextField(); |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
this.txtValue.addActionListener(new ActionListener() { |
||||
public void actionPerformed(ActionEvent var1) { |
||||
BaseAccessibleVueEditor.this.txtValueActionPerformed(var1); |
||||
} |
||||
}); |
||||
this.add((JComponent) this.txtValue, "Center"); |
||||
this.setOpaque(false); |
||||
if (this.showButton) { |
||||
this.btPopup = new UIButton() { |
||||
public ButtonUI getUI() { |
||||
return new UIButtonUI() { |
||||
protected boolean isPressed(AbstractButton var1) { |
||||
return model.isArmed() && model.isPressed(); |
||||
} |
||||
|
||||
protected void doExtraPainting(UIButton var1, Graphics2D var2, int var3, int var4, String var5) { |
||||
if (this.isPressed(var1) && var1.isPressedPainted()) { |
||||
GUIPaintUtils.fillPressed(var2, 0, 0, var3, var4, var1.isRoundBorder(), var1.getRectDirection(), var1.isDoneAuthorityEdited(var5), UIConstants.COMBOBOX_BTN_PRESS); |
||||
} else if (this.isRollOver(var1)) { |
||||
GUIPaintUtils.fillRollOver(var2, 0, 0, var3, var4, var1.isRoundBorder(), var1.getRectDirection(), var1.isDoneAuthorityEdited(var5), var1.isPressedPainted(), UIConstants.COMBOBOX_BTN_ROLLOVER); |
||||
} else if (var1.isNormalPainted()) { |
||||
GUIPaintUtils.fillNormal(var2, 0, 0, var3, var4, var1.isRoundBorder(), var1.getRectDirection(), var1.isDoneAuthorityEdited(var5), var1.isPressedPainted(), UIConstants.COMBOBOX_BTN_NORMAL); |
||||
} |
||||
|
||||
} |
||||
}; |
||||
} |
||||
}; |
||||
this.initPopupButton(); |
||||
this.btPopup.addActionListener(new ActionListener() { |
||||
public void actionPerformed(ActionEvent var1) { |
||||
BaseAccessibleVueEditor.this.showEditorPane(); |
||||
} |
||||
}); |
||||
this.add(this.btPopup, "East"); |
||||
} |
||||
|
||||
} |
||||
|
||||
protected String title4PopupWindow() { |
||||
return "Base"; |
||||
} |
||||
|
||||
protected void showEditorPane() { |
||||
} |
||||
|
||||
protected void initPopupButton() { |
||||
if (!this.isComboButton()) { |
||||
this.btPopup.setIcon(new ImageIcon(UIConstants.ACCESSIBLE_EDITOR_DOT)); |
||||
this.btPopup.setPreferredSize(new Dimension(20, 20)); |
||||
} else { |
||||
this.btPopup.setRolloverEnabled(true); |
||||
this.btPopup.setFocusPainted(false); |
||||
this.btPopup.setPreferredSize(new Dimension(15, 19)); |
||||
this.btPopup.setBorderPainted(false); |
||||
this.btPopup.setContentAreaFilled(false); |
||||
this.btPopup.setMargin(new Insets(0, 0, 0, 0)); |
||||
this.btPopup.setIcon(BaseUtils.readIcon("/com/fr/design/images/form/designer/drop_up.png")); |
||||
this.btPopup.setPressedIcon(BaseUtils.readIcon("/com/fr/design/images/form/designer/drop_down.png")); |
||||
this.btPopup.setRolloverIcon(BaseUtils.readIcon("/com/fr/design/images/form/designer/drop_over.png")); |
||||
} |
||||
|
||||
} |
||||
|
||||
protected boolean isComboButton() { |
||||
return false; |
||||
} |
||||
|
||||
private void txtValueActionPerformed(ActionEvent var1) { |
||||
try { |
||||
this.validateValue(); |
||||
this.fireStateChanged(); |
||||
} catch (ValidationException var3) { |
||||
showMessage(var3.getMessage(), this); |
||||
this.txtValue.selectAll(); |
||||
((JComponent) this.txtValue).requestFocus(); |
||||
} |
||||
|
||||
} |
||||
|
||||
public Component getEditor() { |
||||
return this; |
||||
} |
||||
|
||||
public Object getValue() { |
||||
return this.decoder.decode(this.txtValue.getText()); |
||||
} |
||||
|
||||
public void setValue(Object var1) { |
||||
if (this.encoder != null) { |
||||
this.txtValue.setText(this.encoder.encode(var1)); |
||||
} |
||||
|
||||
this.txtValue.setValue(var1); |
||||
} |
||||
|
||||
public void addChangeListener(ChangeListener var1) { |
||||
if (!this.listeners.contains(var1)) { |
||||
this.listeners.add(var1); |
||||
} |
||||
|
||||
} |
||||
|
||||
public void removeChangeListener(ChangeListener var1) { |
||||
if (this.listeners.contains(var1)) { |
||||
this.listeners.remove(var1); |
||||
} |
||||
|
||||
} |
||||
|
||||
protected void fireStateChanged() { |
||||
ChangeEvent var1 = new ChangeEvent(this); |
||||
Iterator var2 = this.listeners.iterator(); |
||||
|
||||
while (var2.hasNext()) { |
||||
ChangeListener var3 = (ChangeListener) var2.next(); |
||||
var3.stateChanged(var1); |
||||
} |
||||
|
||||
} |
||||
|
||||
public Encoder getEncoder() { |
||||
return this.encoder; |
||||
} |
||||
|
||||
public void setEncoder(Encoder var1) { |
||||
this.encoder = var1; |
||||
} |
||||
|
||||
public void validateValue() throws ValidationException { |
||||
if (this.decoder != null) { |
||||
this.decoder.validate(this.txtValue.getText()); |
||||
} |
||||
|
||||
} |
||||
} |
@ -0,0 +1,217 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: XVueDateEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/8 11:46 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.creator; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.editors.*; |
||||
import com.eco.plugin.zgtpbxdate.widget.VueDateEditor; |
||||
import com.fr.design.designer.creator.CRPropertyDescriptor; |
||||
import com.fr.design.designer.creator.XDirectWriteEditor; |
||||
import com.fr.design.designer.creator.XLayoutContainer; |
||||
import com.fr.design.designer.creator.XWScaleLayout; |
||||
import com.fr.design.form.util.XCreatorConstants; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.mainframe.widget.editors.WidgetValueEditor; |
||||
import com.fr.form.ui.WidgetValue; |
||||
import com.fr.form.ui.concept.data.ValueInitializer; |
||||
import com.fr.general.DateUtils; |
||||
import com.fr.stable.ArrayUtils; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.stable.core.PropertyChangeAdapter; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.beans.IntrospectionException; |
||||
import java.util.Date; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <XVueDateEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class XVueDateEditor extends XDirectWriteEditor { |
||||
private static final long serialVersionUID = -8713302762570916556L; |
||||
public static final String SHOW_DATE = "showDate"; |
||||
public static final String FIRST_DAY_OF_WEEK = "firstDayOfWeek"; |
||||
public static final String CONFIGURATION_ITEM = "configurationItem"; |
||||
public static final String DATE_FORMAT = "dateFormat"; |
||||
public static final String RETURN_FORMAT = "returnFormat"; |
||||
public static final String RETURN_TYPE = "returnType"; |
||||
public static final String DATE_SEPARATOR = "dateSeparator"; |
||||
private UITextField textField; |
||||
private LimpidButton btn; |
||||
|
||||
public XVueDateEditor(VueDateEditor dateEditor, Dimension dimension) { |
||||
super(dateEditor, dimension); |
||||
} |
||||
|
||||
/** |
||||
* 控件的属性列表 |
||||
* |
||||
* @return 此控件所用的属性列表 |
||||
* @throws IntrospectionException 异常 |
||||
*/ |
||||
@Override |
||||
public CRPropertyDescriptor[] supportedDescriptor() throws IntrospectionException { |
||||
CRPropertyDescriptor widgetValueCRP = new CRPropertyDescriptor("widgetValue", this.data.getClass()) |
||||
.setI18NName(Toolkit.i18nText("Fine-Design_Form_Widget_Value")) |
||||
.setEditorClass(WidgetValueEditor.class) |
||||
.putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced") |
||||
.setPropertyChangeListener(new PropertyChangeAdapter() { |
||||
@Override |
||||
public void propertyChange() { |
||||
initFieldText(); |
||||
} |
||||
}); |
||||
// CRPropertyDescriptor formatTextCRP = new CRPropertyDescriptor("formatText", this.data.getClass())
|
||||
// .setI18NName(Toolkit.i18nText("Fine-Design_Report_Engine_Format"))
|
||||
// .setEditorClass(formatClass()).setRendererClass(DateCellRenderer.class)
|
||||
// .putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced");
|
||||
// 日期格式
|
||||
CRPropertyDescriptor dateFormatAttr = new CRPropertyDescriptor(DATE_FORMAT, this.data.getClass()) |
||||
// .setEditorClass(VueDateFormatEditor.class)
|
||||
.setEditorClass(DateFormatEditor.class) |
||||
.setI18NName(Toolkit.i18nText("Plugin-abege-Date_Format")) |
||||
.putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced"); |
||||
// 显示日期格式
|
||||
CRPropertyDescriptor showDateCRP = new CRPropertyDescriptor(SHOW_DATE, this.data.getClass()) |
||||
.setEditorClass(ShowDateEditor.class) |
||||
.setI18NName(Toolkit.i18nText("Plugin-abege-Design_Form_Show_Date")) |
||||
.putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced"); |
||||
// 返回格式
|
||||
CRPropertyDescriptor returnFormatCRP = new CRPropertyDescriptor(RETURN_FORMAT, this.data.getClass()) |
||||
.setEditorClass(ShowDateEditor.class) |
||||
.setI18NName(Toolkit.i18nText("Plugin-abege-Design_Form_Return_Format")) |
||||
.putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced"); |
||||
// 周起始日
|
||||
CRPropertyDescriptor firstDayOfWeekAttr = new CRPropertyDescriptor(FIRST_DAY_OF_WEEK, this.data.getClass()) |
||||
.setEditorClass(FirstDayOfWeekEditor.class) |
||||
.setI18NName(Toolkit.i18nText("Plugin-abege-Design_Form_Week_Start_Date")) |
||||
.putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced"); |
||||
// 返回类型
|
||||
CRPropertyDescriptor returnTypeAttr = new CRPropertyDescriptor(RETURN_TYPE, this.data.getClass()) |
||||
.setEditorClass(ReturnTypeEditor.class) |
||||
.setI18NName(Toolkit.i18nText("Plugin-abege-Design_Form_Return_Type")) |
||||
.putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced"); |
||||
// 数组拼接符
|
||||
CRPropertyDescriptor dateSeparatorCRP = new CRPropertyDescriptor(DATE_SEPARATOR, this.data.getClass()).setI18NName( |
||||
Toolkit.i18nText("Plugin-abege-Design_Form_Date_Separator")).putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, |
||||
"Fine-Design_Basic_Advanced"); |
||||
// 配置项
|
||||
CRPropertyDescriptor configurationItemCRP = new CRPropertyDescriptor(CONFIGURATION_ITEM, this.data.getClass()) |
||||
.setEditorClass(ConfigurationItemEditor.class) |
||||
.setI18NName(Toolkit.i18nText("Plugin-abege-Design_Form_Configuration_Item")) |
||||
.putKeyValue(XCreatorConstants.PROPERTY_CATEGORY, "Fine-Design_Basic_Advanced"); |
||||
|
||||
CRPropertyDescriptor[] crp = new CRPropertyDescriptor[]{widgetValueCRP, dateFormatAttr, showDateCRP, returnFormatCRP, |
||||
firstDayOfWeekAttr, returnTypeAttr, dateSeparatorCRP, configurationItemCRP}; |
||||
return ArrayUtils.addAll(super.supportedDescriptor(), crp); |
||||
} |
||||
|
||||
// protected Class formatClass() {
|
||||
// return DateFormatEditor.class;
|
||||
// }
|
||||
|
||||
private void initFieldText() { |
||||
VueDateEditor dateEditor = (VueDateEditor) data; |
||||
if (dateEditor.getWidgetValue() != null) { |
||||
ValueInitializer widgetValue = dateEditor.getWidgetValue(); |
||||
//控件值.toString
|
||||
String valueStr = widgetValue.toString(); |
||||
//控件值
|
||||
Object value = widgetValue.getValue(); |
||||
//格式
|
||||
String format = dateEditor.getFormatText(); |
||||
|
||||
if (value instanceof Date) { |
||||
valueStr = DateUtils.getDate2Str(format, (Date) value); |
||||
} |
||||
|
||||
//日期控件默认值
|
||||
if (StringUtils.isEmpty(valueStr)) { |
||||
// valueStr = DateUtils.getDate2Str(format, new Date());
|
||||
// valueStr =
|
||||
// DateUtilSelf.getNow();
|
||||
valueStr = ""; |
||||
dateEditor.setWidgetValue(new WidgetValue(new Date())); |
||||
} |
||||
textField.setText(valueStr); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
protected void initXCreatorProperties() { |
||||
super.initXCreatorProperties(); |
||||
initFieldText(); |
||||
} |
||||
|
||||
@Override |
||||
protected JComponent initEditor() { |
||||
if (editor == null) { |
||||
editor = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
editor.add(textField = new UITextField(5), BorderLayout.CENTER); |
||||
btn = new LimpidButton(StringUtils.EMPTY, this.getIconPath(), toData().isVisible() ? FULL_OPACITY : HALF_OPACITY); |
||||
btn.setPreferredSize(new Dimension(21, 21)); |
||||
editor.add(btn, BorderLayout.EAST); |
||||
textField.setOpaque(false); |
||||
editor.setBackground(Color.WHITE); |
||||
} |
||||
return editor; |
||||
} |
||||
|
||||
@Override |
||||
protected String getIconName() { |
||||
return "date_16.png"; |
||||
} |
||||
|
||||
protected void makeVisible(boolean visible) { |
||||
btn.makeVisible(visible); |
||||
} |
||||
|
||||
/** |
||||
* 获取当前XCreator的一个封装父容器 |
||||
* |
||||
* @param widgetName 当前组件名 |
||||
* @return 封装的父容器 |
||||
* @date 2014-11-25-下午4:47:23 |
||||
*/ |
||||
protected XLayoutContainer getCreatorWrapper(String widgetName) { |
||||
return new XWScaleLayout(); |
||||
} |
||||
|
||||
/** |
||||
* 将当前对象添加到父容器中 |
||||
* |
||||
* @param parentPanel 父容器组件 |
||||
* @date 2014-11-25-下午4:57:55 |
||||
*/ |
||||
protected void addToWrapper(XLayoutContainer parentPanel, int width, int minHeight) { |
||||
this.setSize(width, minHeight); |
||||
parentPanel.add(this); |
||||
} |
||||
|
||||
/** |
||||
* 此控件在自适应布局要保持原样高度 |
||||
* |
||||
* @return 是则返回true |
||||
*/ |
||||
@Override |
||||
public boolean shouldScaleCreator() { |
||||
return true; |
||||
} |
||||
|
||||
/** |
||||
* data属性改变触发其他操作 |
||||
*/ |
||||
public void firePropertyChange() { |
||||
initFieldText(); |
||||
} |
||||
} |
@ -0,0 +1,66 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: ConfigurationItemEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/18 16:38 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.editors; |
||||
|
||||
|
||||
import com.fr.design.Exception.ValidationException; |
||||
import com.fr.design.gui.itextarea.UITextArea; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.mainframe.widget.editors.AbstractPropertyEditor; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.border.Border; |
||||
import javax.swing.event.DocumentEvent; |
||||
import javax.swing.event.DocumentListener; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <ConfigurationItemEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ConfigurationItemEditor extends AbstractPropertyEditor { |
||||
private static final int CONTENT_PANE_COLUMNS = 25; |
||||
private JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
private UITextArea textField = new UITextArea(5, CONTENT_PANE_COLUMNS); |
||||
|
||||
public ConfigurationItemEditor() { |
||||
this.panel.add(this.textField, "Center"); |
||||
this.textField.setBorder((Border) null); |
||||
this.textField.getDocument().addDocumentListener(new DocumentListener() { |
||||
public void removeUpdate(DocumentEvent var1) { |
||||
ConfigurationItemEditor.this.firePropertyChanged(); |
||||
} |
||||
|
||||
public void insertUpdate(DocumentEvent var1) { |
||||
ConfigurationItemEditor.this.firePropertyChanged(); |
||||
} |
||||
|
||||
public void changedUpdate(DocumentEvent var1) { |
||||
ConfigurationItemEditor.this.firePropertyChanged(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
public Object getValue() { |
||||
return this.textField.getText(); |
||||
} |
||||
|
||||
public void setValue(Object var1) { |
||||
this.textField.setText((String) var1); |
||||
} |
||||
|
||||
public Component getCustomEditor() { |
||||
return this.textField; |
||||
} |
||||
|
||||
public void validateValue() throws ValidationException { |
||||
} |
||||
} |
@ -0,0 +1,86 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: DateFormatEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/24 16:44 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.editors; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.items.DateFormatItems; |
||||
import com.eco.plugin.zgtpbxdate.pane.DateFormatPane; |
||||
import com.fr.design.Exception.ValidationException; |
||||
import com.fr.design.mainframe.widget.editors.AbstractPropertyEditor; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import java.awt.*; |
||||
import java.beans.PropertyChangeEvent; |
||||
import java.beans.PropertyChangeListener; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <DateFormatEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class DateFormatEditor extends AbstractPropertyEditor { |
||||
private final DateFormatPane dateFormatPane; |
||||
|
||||
public DateFormatEditor() { |
||||
this.dateFormatPane = new DateFormatPane(); |
||||
this.initComponents(); |
||||
} |
||||
|
||||
private void initComponents() { |
||||
this.dateFormatPane.addPropertyChangeListener("value", new PropertyChangeListener() { |
||||
@Override |
||||
public void propertyChange(PropertyChangeEvent evt) { |
||||
DateFormatEditor.this.firePropertyChanged(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
@Override |
||||
public void validateValue() throws ValidationException { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public Object getValue() { |
||||
String value = this.dateFormatPane.update(); |
||||
return value; |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(Object value) { |
||||
if (StringUtils.equals(String.valueOf(value), DateFormatItems.YEAR)) { |
||||
this.dateFormatPane.populate(0, 0); |
||||
} else if (StringUtils.equals(String.valueOf(value), DateFormatItems.MONTH)) { |
||||
this.dateFormatPane.populate(0, 1); |
||||
} else if (StringUtils.equals(String.valueOf(value), DateFormatItems.DATE)) { |
||||
this.dateFormatPane.populate(0, 2); |
||||
} else if (StringUtils.equals(String.valueOf(value), DateFormatItems.DATES)) { |
||||
this.dateFormatPane.populate(0, 3); |
||||
} else if (StringUtils.equals(String.valueOf(value), DateFormatItems.WEEK)) { |
||||
this.dateFormatPane.populate(0, 4); |
||||
} else if (StringUtils.equals(String.valueOf(value), DateFormatItems.DATERANGE)) { |
||||
this.dateFormatPane.populate(0, 5); |
||||
} else if (StringUtils.equals(String.valueOf(value), DateFormatItems.DATERANGEWEEK)) { |
||||
this.dateFormatPane.populate(0, 6); |
||||
} else if (StringUtils.equals(String.valueOf(value), DateFormatItems.DATERANGEMONTH)) { |
||||
this.dateFormatPane.populate(0, 7); |
||||
} else if (StringUtils.equals(String.valueOf(value), DateFormatItems.DATETIME)) { |
||||
this.dateFormatPane.populate(1, 0); |
||||
} else if (StringUtils.equals(String.valueOf(value), DateFormatItems.DATETIMERANGE)) { |
||||
this.dateFormatPane.populate(1, 1); |
||||
} else { |
||||
this.dateFormatPane.populate(0, 2); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public Component getCustomEditor() { |
||||
return this.dateFormatPane; |
||||
} |
||||
} |
@ -0,0 +1,81 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: DateTypeEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/15 8:53 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.editors; |
||||
|
||||
|
||||
import com.fr.design.Exception.ValidationException; |
||||
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.mainframe.widget.editors.AbstractPropertyEditor; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import java.awt.*; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <DateTypeEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class DateTypeEditor extends AbstractPropertyEditor { |
||||
public static final String DATE = "date"; |
||||
public static final String DATETIME = "datetime"; |
||||
private static final Map<String, String> ITEMS = new HashMap<String, String>() { |
||||
{ |
||||
put(Toolkit.i18nText("Plugin-abege-Date_Type_Date"), DATE); |
||||
put(Toolkit.i18nText("Plugin-abege-Date_Type_DateTime"), DATETIME); |
||||
} |
||||
}; |
||||
protected UIButtonGroup<String> buttonGroup; |
||||
|
||||
|
||||
public DateTypeEditor() { |
||||
this.buttonGroup = new UIButtonGroup<>(ITEMS.keySet().toArray(new String[0])); |
||||
this.initButtonGroupLookAndFeel(); |
||||
} |
||||
|
||||
@Override |
||||
public void validateValue() throws ValidationException { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public Object getValue() { |
||||
if (ComparatorUtils.equals(this.buttonGroup.getSelectedIndex(), 0)) { |
||||
return DATE; |
||||
} else if (ComparatorUtils.equals(this.buttonGroup.getSelectedIndex(), 1)) { |
||||
return DATETIME; |
||||
} else { |
||||
return DATE; |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(Object value) { |
||||
if (StringUtils.equals(String.valueOf(value), DATE)) { |
||||
this.buttonGroup.setSelectedIndex(0); |
||||
} else if (StringUtils.equals(String.valueOf(value), DATETIME)) { |
||||
this.buttonGroup.setSelectedIndex(1); |
||||
} else { |
||||
this.buttonGroup.setSelectedIndex(0); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public Component getCustomEditor() { |
||||
return this.buttonGroup; |
||||
} |
||||
|
||||
private void initButtonGroupLookAndFeel() { |
||||
this.buttonGroup.addActionListener(e -> DateTypeEditor.this.firePropertyChanged()); |
||||
} |
||||
} |
@ -0,0 +1,50 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: FirstDayOfWeekEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/15 8:41 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.editors; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.items.FirstDayOfWeekItems; |
||||
import com.fr.design.designer.properties.items.Item; |
||||
import com.fr.design.designer.properties.items.ItemProvider; |
||||
import com.fr.design.mainframe.widget.editors.ComboEditor; |
||||
|
||||
import java.util.Vector; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <FirstDayOfWeekEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class FirstDayOfWeekEditor extends ComboEditor { |
||||
public FirstDayOfWeekEditor() { |
||||
this((ItemProvider) (new FirstDayOfWeekItems())); |
||||
} |
||||
|
||||
public FirstDayOfWeekEditor(ItemProvider itemProvider) { |
||||
this(itemProvider.getItems()); |
||||
} |
||||
|
||||
public FirstDayOfWeekEditor(Item[] items) { |
||||
super(items); |
||||
} |
||||
|
||||
public FirstDayOfWeekEditor(Vector<Item> items) { |
||||
super(items); |
||||
} |
||||
|
||||
public Object getValue() { |
||||
Item selectedItem = (Item) this.comboBox.getSelectedItem(); |
||||
return selectedItem.getValue(); |
||||
} |
||||
|
||||
public void setValue(Object obj) { |
||||
Item var2 = new Item("", obj); |
||||
this.comboBox.setSelectedItem(var2); |
||||
} |
||||
} |
@ -0,0 +1,79 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: ReturnTypeEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/12 11:16 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.editors; |
||||
|
||||
import com.fr.design.Exception.ValidationException; |
||||
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.mainframe.widget.editors.AbstractPropertyEditor; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import java.awt.*; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <ReturnTypeEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ReturnTypeEditor extends AbstractPropertyEditor { |
||||
public static final String STRING = "string"; |
||||
public static final String DATE = "date"; |
||||
private static final Map<String, String> ITEMS = new HashMap<String, String>() { |
||||
{ |
||||
put(Toolkit.i18nText("Plugin-abege-Design_Form_Return_Type_String"), STRING); |
||||
put(Toolkit.i18nText("Plugin-abege-Design_Form_Return_Type_Date"), DATE); |
||||
} |
||||
}; |
||||
protected UIButtonGroup<String> buttonGroup; |
||||
|
||||
public ReturnTypeEditor() { |
||||
this.buttonGroup = new UIButtonGroup<>(ITEMS.keySet().toArray(new String[0])); |
||||
this.initButtonGroupLookAndFeel(); |
||||
} |
||||
|
||||
@Override |
||||
public void validateValue() throws ValidationException { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public Object getValue() { |
||||
if (ComparatorUtils.equals(this.buttonGroup.getSelectedIndex(), 0)) { |
||||
return STRING; |
||||
} else if (ComparatorUtils.equals(this.buttonGroup.getSelectedIndex(), 1)) { |
||||
return DATE; |
||||
} else { |
||||
return STRING; |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void setValue(Object value) { |
||||
if (StringUtils.equals(String.valueOf(value), STRING)) { |
||||
this.buttonGroup.setSelectedIndex(0); |
||||
} else if (StringUtils.equals(String.valueOf(value), DATE)) { |
||||
this.buttonGroup.setSelectedIndex(1); |
||||
} else { |
||||
this.buttonGroup.setSelectedIndex(0); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public Component getCustomEditor() { |
||||
return this.buttonGroup; |
||||
} |
||||
|
||||
private void initButtonGroupLookAndFeel() { |
||||
this.buttonGroup.addActionListener(e -> ReturnTypeEditor.this.firePropertyChanged()); |
||||
} |
||||
} |
@ -0,0 +1,24 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: ShowDateEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/25 16:56 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.editors; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.accessibles.AccessibleFormulaVueEditor; |
||||
import com.fr.design.mainframe.widget.accessibles.AccessiblePropertyEditor; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <ShowDateEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ShowDateEditor extends AccessiblePropertyEditor { |
||||
public ShowDateEditor() { |
||||
super(new AccessibleFormulaVueEditor()); |
||||
} |
||||
} |
@ -0,0 +1,157 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: ShowDateFormulaEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/29 12:01 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.editors; |
||||
|
||||
import com.fr.base.BaseFormula; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.editor.editor.Editor; |
||||
import com.fr.design.formula.FormulaFactory; |
||||
import com.fr.design.formula.UIFormula; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.DocumentListener; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <ShowDateFormulaEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ShowDateFormulaEditor extends Editor<BaseFormula> { |
||||
private BaseFormula formula; |
||||
private UITextField currentTextField; |
||||
private ShowPaneListener listener; |
||||
|
||||
public ShowDateFormulaEditor() { |
||||
this(""); |
||||
} |
||||
|
||||
public ShowDateFormulaEditor(String var1) { |
||||
this(var1, (BaseFormula) null); |
||||
} |
||||
|
||||
public ShowDateFormulaEditor(String var1, BaseFormula var2) { |
||||
this.formula = BaseFormula.createFormulaBuilder().build(); |
||||
this.listener = new ShowPaneListener(); |
||||
if (var2 != null) { |
||||
this.formula = var2; |
||||
} |
||||
|
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
// JPanel var3 = FRGUIPaneFactory.createBorderLayout_S_Pane();
|
||||
this.currentTextField = new UITextField(); |
||||
this.currentTextField.setText(this.formula.getContent()); |
||||
// var3.add(this.currentTextField, "Center");
|
||||
this.currentTextField.setEditable(false); |
||||
this.currentTextField.addMouseListener(this.listener); |
||||
// this.add(var3, "Center");
|
||||
this.add(this.currentTextField, "Center"); |
||||
this.setName(var1); |
||||
} |
||||
|
||||
public void setColumns(int var1) { |
||||
this.currentTextField.setColumns(var1); |
||||
} |
||||
|
||||
public void selected() { |
||||
this.showFormulaPane(); |
||||
} |
||||
|
||||
public void setEnabled(boolean var1) { |
||||
super.setEnabled(var1); |
||||
this.currentTextField.setEnabled(var1); |
||||
} |
||||
|
||||
protected void showFormulaPane() { |
||||
final UIFormula var1 = FormulaFactory.createFormulaPaneWhenReserveFormula(); |
||||
var1.populate(this.formula); |
||||
var1.showLargeWindow(SwingUtilities.getWindowAncestor(this), new DialogActionAdapter() { |
||||
public void doOk() { |
||||
ShowDateFormulaEditor.this.formula = var1.update(); |
||||
ShowDateFormulaEditor.this.setValue(ShowDateFormulaEditor.this.formula); |
||||
ShowDateFormulaEditor.this.fireStateChanged(); |
||||
} |
||||
}).setVisible(true); |
||||
} |
||||
|
||||
public BaseFormula getFormula() { |
||||
return this.formula; |
||||
} |
||||
|
||||
public UITextField getUITextField() { |
||||
return this.currentTextField; |
||||
} |
||||
|
||||
public BaseFormula getValue() { |
||||
return this.formula != null && "=".equals(this.formula.getContent()) ? null : this.formula; |
||||
} |
||||
|
||||
public void setValue(BaseFormula var1) { |
||||
if (var1 == null) { |
||||
var1 = BaseFormula.createFormulaBuilder().build(); |
||||
} |
||||
|
||||
this.formula = var1; |
||||
this.currentTextField.setText(var1.toString()); |
||||
} |
||||
|
||||
public void addDocumentListener(DocumentListener var1) { |
||||
this.currentTextField.getDocument().addDocumentListener(var1); |
||||
} |
||||
|
||||
public String getIconName() { |
||||
return "type_formula"; |
||||
} |
||||
|
||||
public boolean accept(Object var1) { |
||||
return var1 instanceof BaseFormula; |
||||
} |
||||
|
||||
public void reset() { |
||||
this.currentTextField.setText("="); |
||||
this.formula = BaseFormula.createFormulaBuilder().build(); |
||||
} |
||||
|
||||
public void clearData() { |
||||
this.reset(); |
||||
} |
||||
|
||||
public void enableEditor(boolean var1) { |
||||
this.setEnabled(var1); |
||||
this.currentTextField.setEnabled(var1); |
||||
if (!var1) { |
||||
this.currentTextField.removeMouseListener(this.listener); |
||||
} else { |
||||
int var2 = this.currentTextField.getMouseListeners().length; |
||||
|
||||
for (int var3 = 0; var3 < var2; ++var3) { |
||||
this.currentTextField.removeMouseListener(this.listener); |
||||
} |
||||
|
||||
this.currentTextField.addMouseListener(this.listener); |
||||
} |
||||
|
||||
} |
||||
|
||||
private class ShowPaneListener extends MouseAdapter { |
||||
private ShowPaneListener() { |
||||
} |
||||
|
||||
public void mousePressed(MouseEvent var1) { |
||||
if (ShowDateFormulaEditor.this.currentTextField.isEnabled()) { |
||||
ShowDateFormulaEditor.this.showFormulaPane(); |
||||
} |
||||
|
||||
} |
||||
} |
||||
} |
@ -0,0 +1,50 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: DateFormatEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/15 10:10 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.editors; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.items.DateFormatItems; |
||||
import com.fr.design.designer.properties.items.Item; |
||||
import com.fr.design.designer.properties.items.ItemProvider; |
||||
import com.fr.design.mainframe.widget.editors.ComboEditor; |
||||
|
||||
import java.util.Vector; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <DateFormatEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class VueDateFormatEditor extends ComboEditor { |
||||
public VueDateFormatEditor() { |
||||
this((ItemProvider) (new DateFormatItems())); |
||||
} |
||||
|
||||
public VueDateFormatEditor(ItemProvider itemProvider) { |
||||
this(itemProvider.getItems()); |
||||
} |
||||
|
||||
public VueDateFormatEditor(Item[] items) { |
||||
super(items); |
||||
} |
||||
|
||||
public VueDateFormatEditor(Vector<Item> items) { |
||||
super(items); |
||||
} |
||||
|
||||
public Object getValue() { |
||||
Item selectedItem = (Item) this.comboBox.getSelectedItem(); |
||||
return selectedItem.getValue(); |
||||
} |
||||
|
||||
public void setValue(Object obj) { |
||||
Item var2 = new Item("", obj); |
||||
this.comboBox.setSelectedItem(var2); |
||||
} |
||||
} |
@ -0,0 +1,50 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: DateTimeFormatEditor |
||||
* Author: Louis |
||||
* Date: 2021/11/15 10:54 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.editors; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.items.DateTimeFormatItems; |
||||
import com.fr.design.designer.properties.items.Item; |
||||
import com.fr.design.designer.properties.items.ItemProvider; |
||||
import com.fr.design.mainframe.widget.editors.ComboEditor; |
||||
|
||||
import java.util.Vector; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <DateTimeFormatEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class VueDateTimeFormatEditor extends ComboEditor { |
||||
public VueDateTimeFormatEditor() { |
||||
this((ItemProvider) (new DateTimeFormatItems())); |
||||
} |
||||
|
||||
public VueDateTimeFormatEditor(ItemProvider itemProvider) { |
||||
this(itemProvider.getItems()); |
||||
} |
||||
|
||||
public VueDateTimeFormatEditor(Item[] items) { |
||||
super(items); |
||||
} |
||||
|
||||
public VueDateTimeFormatEditor(Vector<Item> items) { |
||||
super(items); |
||||
} |
||||
|
||||
public Object getValue() { |
||||
Item selectedItem = (Item) this.comboBox.getSelectedItem(); |
||||
return selectedItem.getValue(); |
||||
} |
||||
|
||||
public void setValue(Object obj) { |
||||
Item var2 = new Item("", obj); |
||||
this.comboBox.setSelectedItem(var2); |
||||
} |
||||
} |
@ -0,0 +1,58 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: DateFormatItems |
||||
* Author: Louis |
||||
* Date: 2021/11/15 10:11 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.items; |
||||
|
||||
import com.fr.design.designer.properties.items.Item; |
||||
import com.fr.design.designer.properties.items.ItemProvider; |
||||
import com.fr.design.i18n.Toolkit; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <DateFormatItems> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class DateFormatItems implements ItemProvider { |
||||
public static final String DATE = "date"; |
||||
public static final String YEAR = "year"; |
||||
public static final String MONTH = "month"; |
||||
public static final String DATES = "dates"; |
||||
public static final String WEEK = "week"; |
||||
public static final String DATERANGE = "daterange"; |
||||
public static final String DATERANGEWEEK = "daterangeweek"; |
||||
public static final String DATERANGEMONTH = "daterangemonth"; |
||||
public static final String DATETIME = "datetime"; |
||||
public static final String DATETIMERANGE = "datetimerange"; |
||||
public static Item[] DATE_ITEMS = new Item[]{ |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_Year"), YEAR), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_Month"), MONTH), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_Date"), DATE), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_Dates"), DATES), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_Week"), WEEK), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateRange"), DATERANGE), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateRangeWeek"), DATERANGEWEEK), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateRangeMonth"), DATERANGEMONTH), |
||||
// new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateTime"), "datetime"),
|
||||
// new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateTimeRange"), "datetimerange"),
|
||||
// new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateRange"), "daterange"),
|
||||
}; |
||||
public static Item[] TIME_ITEMS = new Item[]{ |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateTime"), DATETIME), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateTimeRange"), DATETIMERANGE), |
||||
// new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateRange"), "daterange"),
|
||||
}; |
||||
|
||||
public DateFormatItems() { |
||||
} |
||||
|
||||
@Override |
||||
public Item[] getItems() { |
||||
return DATE_ITEMS; |
||||
} |
||||
} |
@ -0,0 +1,35 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: DateTimeFormatItems |
||||
* Author: Louis |
||||
* Date: 2021/11/15 10:55 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.items; |
||||
|
||||
import com.fr.design.designer.properties.items.Item; |
||||
import com.fr.design.designer.properties.items.ItemProvider; |
||||
import com.fr.design.i18n.Toolkit; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <DateTimeFormatItems> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class DateTimeFormatItems implements ItemProvider { |
||||
public static Item[] DATETIME_ITEMS = new Item[]{ |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateTime"), "datetime"), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateTimeRange"), "datetimerange"), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Date_Format_DateRange"), "daterange"), |
||||
}; |
||||
|
||||
public DateTimeFormatItems() { |
||||
} |
||||
|
||||
@Override |
||||
public Item[] getItems() { |
||||
return DATETIME_ITEMS; |
||||
} |
||||
} |
@ -0,0 +1,55 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: FirstDayOfWeekItems |
||||
* Author: Louis |
||||
* Date: 2021/11/15 8:42 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.items; |
||||
|
||||
import com.fr.design.designer.properties.items.Item; |
||||
import com.fr.design.designer.properties.items.ItemProvider; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.i18n.Toolkit; |
||||
|
||||
import javax.swing.*; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <FirstDayOfWeekItems> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class FirstDayOfWeekItems implements ItemProvider { |
||||
public static final int SUNDAY = 7; |
||||
public static Item[] VALUE_ITEMS = new Item[]{ |
||||
new Item(Toolkit.i18nText("Plugin-abege-Week_Start_Date_Monday"), 1), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Week_Start_Date_Tuesday"), 2), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Week_Start_Date_Wednesday"), 3), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Week_Start_Date_Thursday"), 4), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Week_Start_Date_Friday"), 5), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Week_Start_Date_Saturday"), 6), |
||||
new Item(Toolkit.i18nText("Plugin-abege-Week_Start_Date_Sunday"), SUNDAY), |
||||
}; |
||||
|
||||
public FirstDayOfWeekItems() { |
||||
} |
||||
|
||||
@Override |
||||
public Item[] getItems() { |
||||
return VALUE_ITEMS; |
||||
} |
||||
|
||||
public static UIComboBox getUIComboBox() { |
||||
return initUIComboBox(VALUE_ITEMS); |
||||
} |
||||
|
||||
private static UIComboBox initUIComboBox(Item[] items) { |
||||
DefaultComboBoxModel model = new DefaultComboBoxModel(); |
||||
for (Item item : items) { |
||||
model.addElement(item); |
||||
} |
||||
return new UIComboBox(model); |
||||
} |
||||
} |
@ -0,0 +1,186 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: ReturnFormatPane |
||||
* Author: Louis |
||||
* Date: 2021/11/24 16:47 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.pane; |
||||
|
||||
|
||||
import com.eco.plugin.zgtpbxdate.items.DateFormatItems; |
||||
import com.eco.plugin.zgtpbxdate.widget.VueDateEditor; |
||||
import com.fr.design.designer.properties.items.Item; |
||||
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.ChangeEvent; |
||||
import javax.swing.event.ChangeListener; |
||||
import java.awt.*; |
||||
|
||||
import static com.fr.design.layout.FRGUIPaneFactory.createBorderLayout; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <ReturnFormatPane> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class DateFormatPane extends JPanel { |
||||
private CardLayout cardLayout; |
||||
private JPanel customPane; |
||||
private String[] tabTitles; |
||||
private UIComboBox currentFormatComboBox; |
||||
private UIComboBox dateFormatComboBox; |
||||
private UIComboBox timeFormatComboBox; |
||||
private UIButtonGroup<String> formatHeadGroup; |
||||
|
||||
public DateFormatPane() { |
||||
this.initComponents(); |
||||
} |
||||
|
||||
private void initComponents() { |
||||
this.setLayout(createBorderLayout()); |
||||
this.dateFormatComboBox = initUIComboBox(DateFormatItems.DATE_ITEMS); |
||||
this.dateFormatComboBox.setSelectedIndex(2); |
||||
this.dateFormatComboBox.addActionListener(e -> this.firePropertyChange("dateFormatValue", null, this.update())); |
||||
this.timeFormatComboBox = initUIComboBox(DateFormatItems.TIME_ITEMS); |
||||
this.timeFormatComboBox.setSelectedIndex(0); |
||||
this.timeFormatComboBox.addActionListener(e -> this.firePropertyChange("dateFormatValue", null, this.update())); |
||||
this.cardLayout = new CardLayout(); |
||||
this.customPane = new JPanel(cardLayout); |
||||
JPanel dateFormatPane = createFormatPane(dateFormatComboBox); |
||||
JPanel timeFormatPane = createFormatPane(timeFormatComboBox); |
||||
customPane.add(dateFormatPane, Toolkit.i18nText("Plugin-abege-Date_Type_Date")); |
||||
customPane.add(timeFormatPane, Toolkit.i18nText("Plugin-abege-Date_Type_DateTime")); |
||||
this.tabTitles = new String[]{Toolkit.i18nText("Plugin-abege-Date_Type_Date"), Toolkit.i18nText("Plugin-abege-Date_Type_DateTime")}; |
||||
this.formatHeadGroup = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Plugin-abege-Date_Type_Date"), Toolkit.i18nText("Plugin-abege-Date_Type_DateTime")}); |
||||
this.formatHeadGroup.addChangeListener(new ChangeListener() { |
||||
@Override |
||||
public void stateChanged(ChangeEvent e) { |
||||
int newSelectedIndex = formatHeadGroup.getSelectedIndex(); |
||||
cardLayout.show(customPane, tabTitles[newSelectedIndex]); |
||||
if (newSelectedIndex == 0) { |
||||
currentFormatComboBox = dateFormatComboBox; |
||||
} else { |
||||
currentFormatComboBox = timeFormatComboBox; |
||||
} |
||||
} |
||||
}); |
||||
this.add(formatHeadGroup, BorderLayout.NORTH); |
||||
this.add(customPane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
private JPanel createFormatPane(UIComboBox formatComboBox) { |
||||
JPanel jPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
jPanel.add(formatComboBox, BorderLayout.CENTER); |
||||
return jPanel; |
||||
} |
||||
|
||||
private UIComboBox initUIComboBox(Item[] items) { |
||||
DefaultComboBoxModel model = new DefaultComboBoxModel(); |
||||
for (Item item : items) { |
||||
model.addElement(item); |
||||
} |
||||
return new UIComboBox(model); |
||||
} |
||||
|
||||
public void populate(String dateFormat) { |
||||
if (StringUtils.equals(dateFormat, DateFormatItems.YEAR)) { |
||||
this.populate(0, 0); |
||||
} else if (StringUtils.equals(dateFormat, DateFormatItems.MONTH)) { |
||||
this.populate(0, 1); |
||||
} else if (StringUtils.equals(dateFormat, DateFormatItems.DATE)) { |
||||
this.populate(0, 2); |
||||
} else if (StringUtils.equals(dateFormat, DateFormatItems.DATES)) { |
||||
this.populate(0, 3); |
||||
} else if (StringUtils.equals(dateFormat, DateFormatItems.WEEK)) { |
||||
this.populate(0, 4); |
||||
} else if (StringUtils.equals(dateFormat, DateFormatItems.DATERANGE)) { |
||||
this.populate(0, 5); |
||||
} else if (StringUtils.equals(dateFormat, DateFormatItems.DATERANGEWEEK)) { |
||||
this.populate(0, 6); |
||||
} else if (StringUtils.equals(dateFormat, DateFormatItems.DATERANGEMONTH)) { |
||||
this.populate(0, 7); |
||||
} else if (StringUtils.equals(dateFormat, DateFormatItems.DATETIME)) { |
||||
this.populate(1, 0); |
||||
} else if (StringUtils.equals(dateFormat, DateFormatItems.DATETIMERANGE)) { |
||||
this.populate(1, 1); |
||||
} else { |
||||
this.populate(0, 2); |
||||
} |
||||
} |
||||
|
||||
public void populate(int formatHead, int formatIndex) { |
||||
this.formatHeadGroup.setSelectedIndex(formatHead); |
||||
if (ComparatorUtils.equals(formatHead, 0)) { |
||||
this.cardLayout.show(this.customPane, this.tabTitles[formatHead]); |
||||
this.currentFormatComboBox = this.dateFormatComboBox; |
||||
this.dateFormatComboBox.setSelectedIndex(formatIndex); |
||||
this.timeFormatComboBox.setSelectedIndex(0); |
||||
} else if (ComparatorUtils.equals(formatHead, 1)) { |
||||
this.cardLayout.show(this.customPane, this.tabTitles[formatHead]); |
||||
this.currentFormatComboBox = this.timeFormatComboBox; |
||||
this.dateFormatComboBox.setSelectedIndex(0); |
||||
this.timeFormatComboBox.setSelectedIndex(formatIndex); |
||||
} |
||||
} |
||||
|
||||
public String update() { |
||||
if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 0)) { |
||||
return DateFormatItems.YEAR; |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 1)) { |
||||
return DateFormatItems.MONTH; |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 2)) { |
||||
return DateFormatItems.DATE; |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 3)) { |
||||
return DateFormatItems.DATES; |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 4)) { |
||||
return DateFormatItems.WEEK; |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 5)) { |
||||
return DateFormatItems.DATERANGE; |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 6)) { |
||||
return DateFormatItems.DATERANGEWEEK; |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 7)) { |
||||
return DateFormatItems.DATERANGEMONTH; |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 1) && ComparatorUtils.equals(this.timeFormatComboBox.getSelectedIndex(), 0)) { |
||||
return DateFormatItems.DATETIME; |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 1) && ComparatorUtils.equals(this.timeFormatComboBox.getSelectedIndex(), 1)) { |
||||
return DateFormatItems.DATETIMERANGE; |
||||
} else { |
||||
return DateFormatItems.DATE; |
||||
} |
||||
} |
||||
|
||||
public void update(VueDateEditor dateEditor) { |
||||
if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 0)) { |
||||
dateEditor.setDateFormat(DateFormatItems.YEAR); |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 1)) { |
||||
dateEditor.setDateFormat(DateFormatItems.MONTH); |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 2)) { |
||||
dateEditor.setDateFormat(DateFormatItems.DATE); |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 3)) { |
||||
dateEditor.setDateFormat(DateFormatItems.DATES); |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 4)) { |
||||
dateEditor.setDateFormat(DateFormatItems.WEEK); |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 5)) { |
||||
dateEditor.setDateFormat(DateFormatItems.DATERANGE); |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 6)) { |
||||
dateEditor.setDateFormat(DateFormatItems.DATERANGEWEEK); |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 0) && ComparatorUtils.equals(this.dateFormatComboBox.getSelectedIndex(), 7)) { |
||||
dateEditor.setDateFormat(DateFormatItems.DATERANGEMONTH); |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 1) && ComparatorUtils.equals(this.timeFormatComboBox.getSelectedIndex(), 0)) { |
||||
dateEditor.setDateFormat(DateFormatItems.DATETIME); |
||||
} else if (ComparatorUtils.equals(this.formatHeadGroup.getSelectedIndex(), 1) && ComparatorUtils.equals(this.timeFormatComboBox.getSelectedIndex(), 1)) { |
||||
dateEditor.setDateFormat(DateFormatItems.DATETIMERANGE); |
||||
} else { |
||||
dateEditor.setDateFormat(DateFormatItems.DATE); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,220 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: ReturnFormatPane |
||||
* Author: Louis |
||||
* Date: 2021/11/29 15:01 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.pane; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.items.DateFormatItems; |
||||
import com.eco.plugin.zgtpbxdate.widget.VueDateEditor; |
||||
import com.fr.base.BaseFormula; |
||||
import com.fr.design.editor.editor.*; |
||||
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.mainframe.widget.editors.DataBindingEditor; |
||||
import com.fr.design.mainframe.widget.editors.DataTableEditor; |
||||
import com.fr.design.mainframe.widget.editors.ServerDataBindingEditor; |
||||
import com.fr.design.mainframe.widget.editors.ServerDataTableEditor; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <ReturnFormatPane> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ReturnFormatPane extends JPanel { |
||||
private UIButtonGroup widgetValueHead; |
||||
private Editor[] editor; |
||||
private JPanel customPane; |
||||
private CardLayout cardLayout; |
||||
|
||||
public ReturnFormatPane() { |
||||
this.editor = createWidgetValueEditor(new int[]{1, 3}, true); |
||||
this.setLayout(new BorderLayout(0, 4)); |
||||
this.cardLayout = new CardLayout(); |
||||
this.customPane = new JPanel(this.cardLayout); |
||||
String[] editorNames = new String[this.editor.length]; |
||||
for (int i = 0; i < this.editor.length; ++i) { |
||||
this.customPane.add(this.editor[i], this.editor[i].getName()); |
||||
editorNames[i] = this.editor[i].getName(); |
||||
} |
||||
this.widgetValueHead = new UIButtonGroup(editorNames); |
||||
this.add(this.widgetValueHead, BorderLayout.NORTH); |
||||
this.add(this.customPane, BorderLayout.CENTER); |
||||
} |
||||
|
||||
public static Editor createWidgetValueEditorByType(int editorType, boolean var1) { |
||||
switch (editorType) { |
||||
case 0: |
||||
return new DoubleEditor(); |
||||
case 1: |
||||
return new TextEditor(); |
||||
case 2: |
||||
return (Editor) (var1 ? new ServerDataBindingEditor() : new DataBindingEditor()); |
||||
case 3: |
||||
return new FormulaEditor(Toolkit.i18nText("Fine-Design_Report_Parameter_Formula")); |
||||
case 4: |
||||
return new DateEditor(true, Toolkit.i18nText("Fine-Design_Basic_Date")); |
||||
case 5: |
||||
return new BooleanEditor(false); |
||||
case 6: |
||||
return (Editor) (var1 ? new ServerDataTableEditor() : new DataTableEditor()); |
||||
default: |
||||
return null; |
||||
} |
||||
} |
||||
|
||||
public static Editor[] createWidgetValueEditor(int[] editorTypes, boolean var1) { |
||||
Editor[] editors = new Editor[editorTypes.length]; |
||||
for (int var4 = 0; var4 < editorTypes.length; ++var4) { |
||||
editors[var4] = createWidgetValueEditorByType(editorTypes[var4], var1); |
||||
} |
||||
return editors; |
||||
} |
||||
|
||||
public void attributeChange() { |
||||
int var1 = this.widgetValueHead.getSelectedIndex(); |
||||
if (var1 == -1) { |
||||
var1 = 0; |
||||
this.widgetValueHead.setSelectedIndex(var1); |
||||
} |
||||
|
||||
if (ComparatorUtils.equals(this.editor[var1].getName(), Toolkit.i18nText("Fine-Design_Basic_Widget_Field"))) { |
||||
this.customPane.setPreferredSize(new Dimension(100, 47)); |
||||
} else { |
||||
this.customPane.setPreferredSize(new Dimension(100, 20)); |
||||
} |
||||
|
||||
this.cardLayout.show(this.customPane, this.editor[var1].getName()); |
||||
} |
||||
|
||||
public void update(VueDateEditor dateEditor, boolean isShowDate) { |
||||
this.attributeChange(); |
||||
int selectedIndex = this.widgetValueHead.getSelectedIndex(); |
||||
Editor editor = this.editor[selectedIndex]; |
||||
Object value = editor.getValue(); |
||||
if (isShowDate) { |
||||
updateShowDate(dateEditor, value); |
||||
} else { |
||||
updateReturnFormat(dateEditor, value); |
||||
} |
||||
} |
||||
|
||||
private void updateShowDate(VueDateEditor dateEditor, Object value) { |
||||
if (value == null) { |
||||
return; |
||||
} |
||||
if (value instanceof BaseFormula) { |
||||
dateEditor.setShowDate(""); |
||||
dateEditor.setShowDateFM((BaseFormula) value); |
||||
} else if (value instanceof String) { |
||||
dateEditor.setShowDate(String.valueOf(value)); |
||||
dateEditor.setShowDateFM(null); |
||||
} else { |
||||
dateEditor.setShowDate(String.valueOf(value)); |
||||
dateEditor.setShowDateFM(null); |
||||
} |
||||
} |
||||
|
||||
private void updateReturnFormat(VueDateEditor dateEditor, Object value) { |
||||
if (value == null) { |
||||
return; |
||||
} |
||||
if (value instanceof BaseFormula) { |
||||
dateEditor.setReturnFormat(""); |
||||
dateEditor.setReturnFormatFM((BaseFormula) value); |
||||
} else if (value instanceof String) { |
||||
dateEditor.setReturnFormat(String.valueOf(value)); |
||||
dateEditor.setReturnFormatFM(null); |
||||
} else { |
||||
dateEditor.setReturnFormat(String.valueOf(value)); |
||||
dateEditor.setReturnFormatFM(null); |
||||
} |
||||
} |
||||
|
||||
public void populateShowDate(VueDateEditor dateEditor) { |
||||
if (StringUtils.isNotBlank(dateEditor.getShowDate())) { |
||||
this.populate(dateEditor.getShowDate()); |
||||
} else if (dateEditor.getShowDateFM() != null) { |
||||
this.populate(dateEditor.getShowDateFM()); |
||||
} |
||||
} |
||||
|
||||
public void populateShowDate(Object dateFormat) { |
||||
if (dateFormat == null) { |
||||
return; |
||||
} |
||||
String str; |
||||
switch (String.valueOf(dateFormat)) { |
||||
case DateFormatItems.YEAR: |
||||
str = "yyyy"; |
||||
break; |
||||
case DateFormatItems.MONTH: |
||||
str = "yyyy-MM"; |
||||
break; |
||||
case DateFormatItems.DATE: |
||||
str = "yyyy-MM-dd"; |
||||
break; |
||||
case DateFormatItems.WEEK: |
||||
str = "yyyy-WW"; |
||||
break; |
||||
case DateFormatItems.DATERANGE: |
||||
str = "yyyy-MM-dd"; |
||||
break; |
||||
case DateFormatItems.DATERANGEWEEK: |
||||
str = "yyyy-WW"; |
||||
break; |
||||
case DateFormatItems.DATERANGEMONTH: |
||||
str = "yyyy-MM"; |
||||
break; |
||||
case DateFormatItems.DATES: |
||||
str = "yyyy-MM-dd"; |
||||
break; |
||||
case DateFormatItems.DATETIME: |
||||
str = "yyyy-MM-dd hh:mm:ss"; |
||||
break; |
||||
case DateFormatItems.DATETIMERANGE: |
||||
str = "yyyy-MM-dd hh:mm:ss"; |
||||
break; |
||||
default: |
||||
str = "yyyy-MM-dd"; |
||||
} |
||||
this.populate(str); |
||||
} |
||||
|
||||
public void populateReturnFormat(VueDateEditor dateEditor) { |
||||
if (StringUtils.isNotBlank(dateEditor.getReturnFormat())) { |
||||
this.populate(dateEditor.getReturnFormat()); |
||||
} else if (dateEditor.getReturnFormatFM() != null) { |
||||
this.populate(dateEditor.getReturnFormatFM()); |
||||
} |
||||
} |
||||
|
||||
public void populate(Object value) { |
||||
for (int i = 0; i < this.editor.length; ++i) { |
||||
if (this.editor[i].accept(value)) { |
||||
this.setCardValue(i, value); |
||||
break; |
||||
} |
||||
} |
||||
this.attributeChange(); |
||||
} |
||||
|
||||
private void setCardValue(int var1, Object var2) { |
||||
this.widgetValueHead.setSelectedIndex(var1); |
||||
this.editor[var1].setValue(var2); |
||||
for (int i = 0; i < this.editor.length; ++i) { |
||||
if (var1 != i) { |
||||
this.editor[i].setValue((Object) null); |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,92 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: ShowDatePane |
||||
* Author: Louis |
||||
* Date: 2021/11/28 23:22 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.pane; |
||||
|
||||
import com.fr.base.BaseFormula; |
||||
import com.fr.design.dialog.DialogActionAdapter; |
||||
import com.fr.design.formula.FormulaFactory; |
||||
import com.fr.design.formula.UIFormula; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
|
||||
import javax.swing.*; |
||||
import javax.swing.event.DocumentListener; |
||||
import java.awt.event.MouseAdapter; |
||||
import java.awt.event.MouseEvent; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <ShowDatePane> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class ShowDatePane extends JPanel { |
||||
private final UITextField currentTextField; |
||||
private BaseFormula formula; |
||||
private ShowPaneListener listener; |
||||
|
||||
public ShowDatePane() { |
||||
this.formula = BaseFormula.createFormulaBuilder().build(); |
||||
this.listener = new ShowPaneListener(); |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
this.currentTextField = new UITextField(); |
||||
this.currentTextField.setText(this.formula.getContent()); |
||||
this.currentTextField.setEditable(false); |
||||
this.currentTextField.addMouseListener(this.listener); |
||||
this.add(this.currentTextField, "Center"); |
||||
this.setName(Toolkit.i18nText("Fine-Design_Report_Parameter_Formula")); |
||||
} |
||||
|
||||
protected void showFormulaPane() { |
||||
final UIFormula reserveFormula = FormulaFactory.createFormulaPaneWhenReserveFormula(); |
||||
reserveFormula.populate(this.formula); |
||||
reserveFormula.showLargeWindow(SwingUtilities.getWindowAncestor(this), new DialogActionAdapter() { |
||||
public void doOk() { |
||||
ShowDatePane.this.formula = reserveFormula.update(); |
||||
} |
||||
}).setVisible(true); |
||||
} |
||||
|
||||
public BaseFormula update() { |
||||
return this.formula != null && "=".equals(this.formula.getContent()) ? null : this.formula; |
||||
} |
||||
|
||||
public void populate(BaseFormula value) { |
||||
if (value == null) { |
||||
value = BaseFormula.createFormulaBuilder().build(); |
||||
} |
||||
this.formula = value; |
||||
this.currentTextField.setText(value.toString()); |
||||
} |
||||
|
||||
public BaseFormula getFormula() { |
||||
return this.formula; |
||||
} |
||||
|
||||
public UITextField getUITextField() { |
||||
return this.currentTextField; |
||||
} |
||||
|
||||
public void addDocumentListener(DocumentListener var1) { |
||||
this.currentTextField.getDocument().addDocumentListener(var1); |
||||
} |
||||
|
||||
private class ShowPaneListener extends MouseAdapter { |
||||
private ShowPaneListener() { |
||||
} |
||||
|
||||
public void mousePressed(MouseEvent var1) { |
||||
if (ShowDatePane.this.currentTextField.isEnabled()) { |
||||
ShowDatePane.this.showFormulaPane(); |
||||
} |
||||
|
||||
} |
||||
} |
||||
} |
@ -0,0 +1,160 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: VueDateEditorDefinePane |
||||
* Author: Louis |
||||
* Date: 2021/11/28 12:52 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.pane; |
||||
|
||||
|
||||
import com.eco.plugin.zgtpbxdate.items.FirstDayOfWeekItems; |
||||
import com.eco.plugin.zgtpbxdate.pane.self.DirectWriteEditorDefinePane; |
||||
import com.eco.plugin.zgtpbxdate.widget.VueDateEditor; |
||||
import com.fr.design.designer.IntervalConstants; |
||||
import com.fr.design.designer.creator.XCreator; |
||||
import com.fr.design.designer.properties.items.Item; |
||||
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itextarea.UITextArea; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.widget.ui.designer.WaterMarkDictPane; |
||||
import com.fr.design.widget.ui.designer.component.FormWidgetValuePane; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.beans.PropertyChangeEvent; |
||||
import java.beans.PropertyChangeListener; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <表单和参数控件设置界面类VueDateEditorDefinePane> |
||||
* 在PluginMonitor中,通过FormWidgetDefinePaneFactoryBase注册 |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class VueDateEditorFormDefinePane extends DirectWriteEditorDefinePane<VueDateEditor> { |
||||
private static final int CONTENT_PANE_COLUMNS = 25; |
||||
private WaterMarkDictPane waterMarkDictPane; |
||||
private FormWidgetValuePane formWidgetValuePane; |
||||
|
||||
private DateFormatPane dateFormatPane; |
||||
private ReturnFormatPane showDatePane; |
||||
private ReturnFormatPane returnFormatPane; |
||||
private UIComboBox firstDayOfWeekComboBox; |
||||
private UIButtonGroup<String> returnTypeComboBox; |
||||
private UITextField dateSeparatorTextField; |
||||
private UITextArea configurationItemTextArea; |
||||
|
||||
public VueDateEditorFormDefinePane(XCreator xCreator) { |
||||
super(xCreator); |
||||
} |
||||
|
||||
@Override |
||||
public String title4PopupWindow() { |
||||
return "VueDate"; |
||||
} |
||||
|
||||
@Override |
||||
protected JPanel setFirstContentPane() { |
||||
// 水印
|
||||
this.waterMarkDictPane = new WaterMarkDictPane(); |
||||
// 控件值
|
||||
UILabel widgetValueLabel = new UILabel(Toolkit.i18nText("Fine-Design_Form_Estate_Widget_Value")); |
||||
widgetValueLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.formWidgetValuePane = new FormWidgetValuePane(this.creator.toData(), false); |
||||
// 类型/格式
|
||||
UILabel formatLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Date_Format")); |
||||
formatLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.dateFormatPane = new DateFormatPane(); |
||||
this.dateFormatPane.addPropertyChangeListener("dateFormatValue", new PropertyChangeListener() { |
||||
@Override |
||||
public void propertyChange(PropertyChangeEvent evt) { |
||||
VueDateEditorFormDefinePane.this.showDatePane.populateShowDate(evt.getNewValue()); |
||||
} |
||||
}); |
||||
// 显示日期格式
|
||||
UILabel showDateLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Show_Date")); |
||||
showDateLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.showDatePane = new ReturnFormatPane(); |
||||
// 返回格式
|
||||
UILabel returnFormatLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Return_Format")); |
||||
returnFormatLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.returnFormatPane = new ReturnFormatPane(); |
||||
// 周起始日
|
||||
UILabel firstDayOfWeekLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Week_Start_Date")); |
||||
firstDayOfWeekLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.firstDayOfWeekComboBox = FirstDayOfWeekItems.getUIComboBox(); |
||||
// 返回类型
|
||||
UILabel returnTypeLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Return_Type")); |
||||
returnTypeLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.returnTypeComboBox = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Basic_Date"), Toolkit.i18nText("Fine-Design_Basic_String")}); |
||||
// 数组拼接符
|
||||
UILabel dateSeparatorLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Date_Separator")); |
||||
dateSeparatorLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.dateSeparatorTextField = new UITextField(); |
||||
// 配置项
|
||||
UILabel configurationItemLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Configuration_Item")); |
||||
configurationItemLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.configurationItemTextArea = new UITextArea(5, CONTENT_PANE_COLUMNS); |
||||
|
||||
double f = TableLayout.FILL; |
||||
double p = TableLayout.PREFERRED; |
||||
Component[][] components = new Component[][]{ |
||||
/* |
||||
{new UILabel(Toolkit.i18nText("Fine-Design_Form_Label_Name")), this.labelNameTextField}, |
||||
{widgetValueLabel, this.formWidgetValuePane}, |
||||
{formatLabel, this.dateFormatPane}, |
||||
{showDateLabel, this.showDatePane}, |
||||
{returnFormatLabel, this.returnFormatPane}, |
||||
{firstDayOfWeekLabel, this.firstDayOfWeekComboBox}, |
||||
{returnTypeLabel, this.returnTypeComboBox}, |
||||
{dateSeparatorLabel, this.dateSeparatorTextField}, |
||||
{configurationItemLabel, this.configurationItemTextArea}, |
||||
{new UILabel(Toolkit.i18nText("Fine-Design_Form_WaterMark")), this.waterMarkDictPane}, |
||||
{new UILabel(Toolkit.i18nText("Fine-Design_Form_Font_Size")), this.fontSizePane} // 字体大小
|
||||
*/ |
||||
}; |
||||
double[] rowSize = new double[]{p, p, p, p, p, p, p, p, p, p, p, p, p}; |
||||
double[] columnSize = new double[]{p, f}; |
||||
int[][] rowCount = new int[][]{{1, 1}, {1, 3}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; |
||||
JPanel componentsPane = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L2, IntervalConstants.INTERVAL_L1); |
||||
JPanel firstContentPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
firstContentPane.add(componentsPane); |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
protected void populateSubDirectWriteEditorBean(VueDateEditor dateEditor) { |
||||
this.waterMarkDictPane.populate(dateEditor); |
||||
this.formWidgetValuePane.populate(dateEditor); |
||||
this.dateFormatPane.populate(dateEditor.getDateFormat()); |
||||
this.showDatePane.populateShowDate(dateEditor); |
||||
this.returnFormatPane.populateReturnFormat(dateEditor); |
||||
this.firstDayOfWeekComboBox.setSelectedItem(new Item("", dateEditor.getFirstDayOfWeek())); |
||||
this.returnTypeComboBox.setSelectedIndex(dateEditor.getReturnTypeInt()); |
||||
this.dateSeparatorTextField.setText(dateEditor.getDateSeparator()); |
||||
this.configurationItemTextArea.setText(dateEditor.getConfigurationItem()); |
||||
} |
||||
|
||||
@Override |
||||
protected VueDateEditor updateSubDirectWriteEditorBean() { |
||||
VueDateEditor dateEditor = (VueDateEditor) this.creator.toData(); |
||||
this.waterMarkDictPane.update(dateEditor); |
||||
this.formWidgetValuePane.update(dateEditor); |
||||
this.dateFormatPane.update(dateEditor); |
||||
this.showDatePane.update(dateEditor, true); |
||||
this.returnFormatPane.update(dateEditor, false); |
||||
dateEditor.setFirstDayOfWeek(this.firstDayOfWeekComboBox.getSelectedItem()); |
||||
dateEditor.setReturnType(this.returnTypeComboBox.getSelectedIndex()); |
||||
dateEditor.setDateSeparator(this.dateSeparatorTextField.getText()); |
||||
dateEditor.setConfigurationItem(this.configurationItemTextArea.getText()); |
||||
return dateEditor; |
||||
} |
||||
} |
@ -0,0 +1,135 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: VueDateEditorPane |
||||
* Author: Louis |
||||
* Date: 2021/11/8 16:38 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.pane; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.items.FirstDayOfWeekItems; |
||||
import com.eco.plugin.zgtpbxdate.widget.VueDateEditor; |
||||
import com.fr.design.designer.IntervalConstants; |
||||
import com.fr.design.designer.properties.items.Item; |
||||
import com.fr.design.gui.ibutton.UIButtonGroup; |
||||
import com.fr.design.gui.icombobox.UIComboBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itextarea.UITextArea; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.TableLayout; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.widget.ui.DirectWriteEditorDefinePane; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.beans.PropertyChangeEvent; |
||||
import java.beans.PropertyChangeListener; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <单元格日期控件设置界面类VueDateEditorPane> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class VueDateEditorPane extends DirectWriteEditorDefinePane<VueDateEditor> { |
||||
private static final int CONTENT_PANE_COLUMNS = 25; |
||||
|
||||
private DateFormatPane dateFormatPane; |
||||
private ReturnFormatPane showDatePane; |
||||
private ReturnFormatPane returnFormatPane; |
||||
private UIComboBox firstDayOfWeekComboBox; |
||||
private UIButtonGroup<String> returnTypeComboBox; |
||||
private UITextField dateSeparatorTextField; |
||||
private UITextArea configurationItemTextArea; |
||||
|
||||
public VueDateEditorPane() { |
||||
} |
||||
|
||||
@Override |
||||
protected String title4PopupWindow() { |
||||
return "VueDate"; |
||||
} |
||||
|
||||
@Override |
||||
protected JPanel setSecondContentPane() { |
||||
// 类型/格式
|
||||
UILabel formatLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Date_Format")); |
||||
formatLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.dateFormatPane = new DateFormatPane(); |
||||
this.dateFormatPane.addPropertyChangeListener("dateFormatValue", new PropertyChangeListener() { |
||||
@Override |
||||
public void propertyChange(PropertyChangeEvent evt) { |
||||
VueDateEditorPane.this.showDatePane.populateShowDate(evt.getNewValue()); |
||||
} |
||||
}); |
||||
// 显示日期格式
|
||||
UILabel showDateLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Show_Date")); |
||||
showDateLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.showDatePane = new ReturnFormatPane(); |
||||
// 返回格式
|
||||
UILabel returnFormatLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Return_Format")); |
||||
returnFormatLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.returnFormatPane = new ReturnFormatPane(); |
||||
// 周起始日
|
||||
UILabel firstDayOfWeekLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Week_Start_Date")); |
||||
firstDayOfWeekLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.firstDayOfWeekComboBox = FirstDayOfWeekItems.getUIComboBox(); |
||||
// 返回类型
|
||||
UILabel returnTypeLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Return_Type")); |
||||
returnTypeLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.returnTypeComboBox = new UIButtonGroup<>(new String[]{Toolkit.i18nText("Fine-Design_Basic_Date"), Toolkit.i18nText("Fine-Design_Basic_String")}); |
||||
// 数组拼接符
|
||||
UILabel dateSeparatorLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Date_Separator")); |
||||
dateSeparatorLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.dateSeparatorTextField = new UITextField(); |
||||
// 配置项
|
||||
UILabel configurationItemLabel = new UILabel(Toolkit.i18nText("Plugin-abege-Design_Form_Configuration_Item")); |
||||
configurationItemLabel.setVerticalAlignment(SwingConstants.TOP); |
||||
this.configurationItemTextArea = new UITextArea(5, CONTENT_PANE_COLUMNS); |
||||
|
||||
double f = TableLayout.FILL; |
||||
double p = TableLayout.PREFERRED; |
||||
Component[][] components = new Component[][]{ |
||||
new Component[]{formatLabel, this.dateFormatPane}, |
||||
new Component[]{showDateLabel, this.showDatePane}, |
||||
new Component[]{returnFormatLabel, this.returnFormatPane}, |
||||
new Component[]{firstDayOfWeekLabel, this.firstDayOfWeekComboBox}, |
||||
new Component[]{returnTypeLabel, this.returnTypeComboBox}, |
||||
new Component[]{dateSeparatorLabel, this.dateSeparatorTextField}, |
||||
new Component[]{dateSeparatorLabel, this.dateSeparatorTextField}, |
||||
new Component[]{configurationItemLabel, this.configurationItemTextArea}, |
||||
new Component[]{this.waterMarkDictPane, null} |
||||
}; |
||||
double[] rowSize = {p, p, p, p, p, p, p, p, p, p, p}; |
||||
double[] columnSize = {p, f}; |
||||
int[][] rowCount = {{1, 3}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; |
||||
JPanel panel = TableLayoutHelper.createGapTableLayoutPane(components, rowSize, columnSize, rowCount, IntervalConstants.INTERVAL_L2, IntervalConstants.INTERVAL_L1); |
||||
return panel; |
||||
} |
||||
|
||||
@Override |
||||
protected void populateSubDirectWriteEditorBean(VueDateEditor dateEditor) { |
||||
this.dateFormatPane.populate(dateEditor.getDateFormat()); |
||||
this.showDatePane.populateShowDate(dateEditor); |
||||
this.returnFormatPane.populateReturnFormat(dateEditor); |
||||
this.firstDayOfWeekComboBox.setSelectedItem(new Item("", dateEditor.getFirstDayOfWeek())); |
||||
this.returnTypeComboBox.setSelectedIndex(dateEditor.getReturnTypeInt()); |
||||
this.dateSeparatorTextField.setText(dateEditor.getDateSeparator()); |
||||
this.configurationItemTextArea.setText(dateEditor.getConfigurationItem()); |
||||
} |
||||
|
||||
@Override |
||||
protected VueDateEditor updateSubDirectWriteEditorBean() { |
||||
VueDateEditor dateEditor = new VueDateEditor(); |
||||
this.dateFormatPane.update(dateEditor); |
||||
this.showDatePane.update(dateEditor, true); |
||||
this.returnFormatPane.update(dateEditor, false); |
||||
dateEditor.setFirstDayOfWeek(this.firstDayOfWeekComboBox.getSelectedItem()); |
||||
dateEditor.setReturnType(this.returnTypeComboBox.getSelectedIndex()); |
||||
dateEditor.setDateSeparator(this.dateSeparatorTextField.getText()); |
||||
dateEditor.setConfigurationItem(this.configurationItemTextArea.getText()); |
||||
return dateEditor; |
||||
} |
||||
} |
@ -0,0 +1,88 @@
|
||||
package com.eco.plugin.zgtpbxdate.pane.self; |
||||
|
||||
import com.fr.design.designer.creator.XCreator; |
||||
import com.fr.design.gui.icheckbox.UICheckBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.utils.gui.GUICoreUtils; |
||||
import com.fr.design.widget.ui.designer.component.FormWidgetValuePane; |
||||
import com.fr.form.ui.DirectWriteEditor; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
|
||||
public abstract class DirectWriteEditorDefinePane<T extends DirectWriteEditor> extends FieldEditorDefinePane<T> { |
||||
public UICheckBox directWriteCheckBox; |
||||
protected FormWidgetValuePane formWidgetValuePane; |
||||
|
||||
public DirectWriteEditorDefinePane(XCreator var1) { |
||||
super(var1); |
||||
} |
||||
|
||||
protected JPanel setFirstContentPane() { |
||||
JPanel var1 = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
UILabel var2 = new UILabel(Toolkit.i18nText("Fine-Design_Form_Estate_Widget_Value")); |
||||
var2.setVerticalAlignment(1); |
||||
this.formWidgetValuePane = new FormWidgetValuePane(this.creator.toData(), false); |
||||
Component[] var3 = new Component[]{this.createRepeatCheckBox(), null}; |
||||
Component[] var4 = this.createDictPane(); |
||||
Component[] var5 = this.createWaterMarkPane(); |
||||
double var6 = -1.0D; |
||||
double var8 = -2.0D; |
||||
Component[][] var10 = new Component[][]{{new UILabel(Toolkit.i18nText("Fine-Design_Form_Label_Name")), this.labelNameTextField}, {var2, this.formWidgetValuePane}, var4, var3, var5, {new UILabel(Toolkit.i18nText("Fine-Design_Form_Font_Size")), this.fontSizePane}}; |
||||
double[] var11 = new double[]{var8, var8, var8, var8, var8, var8, var8, var8}; |
||||
double[] var12 = new double[]{var8, var6}; |
||||
int[][] var13 = new int[][]{{1, 1}, {1, 3}, {1, 1}, {1, 1}, {1, 1}, {1, 1}}; |
||||
JPanel var14 = TableLayoutHelper.createGapTableLayoutPane(var10, var11, var12, var13, 25.0D, 10.0D); |
||||
var1.add(var14, "North"); |
||||
JPanel var15 = this.createOtherPane(); |
||||
if (var15 != null) { |
||||
var1.add(var15, "Center"); |
||||
} |
||||
|
||||
return var1; |
||||
} |
||||
|
||||
public UICheckBox createRepeatCheckBox() { |
||||
return null; |
||||
} |
||||
|
||||
public Component[] createWaterMarkPane() { |
||||
return new Component[]{null, null}; |
||||
} |
||||
|
||||
protected Component[] createDictPane() { |
||||
return new Component[]{null, null}; |
||||
} |
||||
|
||||
public JPanel createOtherPane() { |
||||
return null; |
||||
} |
||||
|
||||
public JPanel setValidatePane() { |
||||
this.directWriteCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Form_Allow_Edit"), false); |
||||
this.directWriteCheckBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); |
||||
JPanel var1 = FRGUIPaneFactory.createY_AXISBoxInnerContainer_S_Pane(); |
||||
var1.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0)); |
||||
JPanel var2 = GUICoreUtils.createFlowPane(new JComponent[]{this.directWriteCheckBox}, 0, 0); |
||||
var1.add(var2); |
||||
return var1; |
||||
} |
||||
|
||||
protected void populateSubFieldEditorBean(T var1) { |
||||
// this.directWriteCheckBox.setSelected(var1.isDirectEdit());
|
||||
this.populateSubDirectWriteEditorBean(var1); |
||||
} |
||||
|
||||
protected abstract void populateSubDirectWriteEditorBean(T var1); |
||||
|
||||
protected T updateSubFieldEditorBean() { |
||||
DirectWriteEditor var1 = this.updateSubDirectWriteEditorBean(); |
||||
// var1.setDirectEdit(this.directWriteCheckBox.isSelected());
|
||||
return (T) var1; |
||||
} |
||||
|
||||
protected abstract T updateSubDirectWriteEditorBean(); |
||||
} |
@ -0,0 +1,136 @@
|
||||
package com.eco.plugin.zgtpbxdate.pane.self; |
||||
|
||||
import com.fr.design.ExtraDesignClassManager; |
||||
import com.fr.design.beans.ErrorMsgTextFieldAdapter; |
||||
import com.fr.design.beans.UITextFieldAdapter; |
||||
import com.fr.design.designer.creator.*; |
||||
import com.fr.design.foldablepane.UIExpandablePane; |
||||
import com.fr.design.fun.TextFieldAdapterProvider; |
||||
import com.fr.design.gui.icheckbox.UICheckBox; |
||||
import com.fr.design.gui.ilable.UILabel; |
||||
import com.fr.design.gui.itextfield.UITextField; |
||||
import com.fr.design.i18n.Toolkit; |
||||
import com.fr.design.layout.FRGUIPaneFactory; |
||||
import com.fr.design.layout.TableLayoutHelper; |
||||
import com.fr.design.widget.ui.designer.AbstractDataModify; |
||||
import com.fr.design.widget.ui.designer.component.FontSizeComboPane; |
||||
import com.fr.form.ui.FieldEditor; |
||||
import com.fr.log.FineLoggerFactory; |
||||
|
||||
import javax.swing.*; |
||||
import java.awt.*; |
||||
import java.awt.event.ItemEvent; |
||||
import java.awt.event.ItemListener; |
||||
|
||||
public abstract class FieldEditorDefinePane<T extends FieldEditor> extends AbstractDataModify<T> { |
||||
protected UICheckBox allowBlankCheckBox; |
||||
protected ErrorMsgTextFieldAdapter errorMsgTextField; |
||||
protected JPanel validatePane; |
||||
protected FontSizeComboPane fontSizePane; |
||||
protected UITextField labelNameTextField; |
||||
|
||||
public FieldEditorDefinePane(XCreator var1) { |
||||
super(var1); |
||||
this.initComponents(); |
||||
} |
||||
|
||||
protected void initComponents() { |
||||
this.setLayout(FRGUIPaneFactory.createBorderLayout()); |
||||
this.labelNameTextField = new UITextField(); |
||||
this.allowBlankCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Form_Allow_Null")); |
||||
this.allowBlankCheckBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); |
||||
this.fontSizePane = new FontSizeComboPane(); |
||||
JPanel var1 = this.setFirstContentPane(); |
||||
|
||||
if (var1 != null) { |
||||
JPanel var2 = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
var2.add(var1, "Center"); |
||||
var1.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); |
||||
UIExpandablePane var3 = new UIExpandablePane(Toolkit.i18nText("Fine-Design_Report_Advanced"), 280, 20, var2); |
||||
this.add(var3, "North"); |
||||
} |
||||
|
||||
// this.addValidatePane();
|
||||
} |
||||
|
||||
public void populateBean(T var1) { |
||||
this.allowBlankCheckBox.setSelected(var1.isAllowBlank()); |
||||
// this.errorMsgTextField.setText(var1.getErrorMessage());
|
||||
this.fontSizePane.setValue(var1.getFontSize()); |
||||
this.labelNameTextField.setText(var1.getLabelName()); |
||||
this.populateSubFieldEditorBean(var1); |
||||
} |
||||
|
||||
protected abstract void populateSubFieldEditorBean(T var1); |
||||
|
||||
public T updateBean() { |
||||
FieldEditor var1 = this.updateSubFieldEditorBean(); |
||||
var1.setAllowBlank(this.allowBlankCheckBox.isSelected()); |
||||
// var1.setErrorMessage(this.errorMsgTextField.getText());
|
||||
var1.setFontSize(this.fontSizePane.getValue()); |
||||
var1.setLabelName(this.labelNameTextField.getText()); |
||||
return (T) var1; |
||||
} |
||||
|
||||
protected void initErrorMsgPane() { |
||||
TextFieldAdapterProvider var1 = (TextFieldAdapterProvider)ExtraDesignClassManager.getInstance().getSingle("TextFieldAdapterProvider"); |
||||
if (var1 == null) { |
||||
this.errorMsgTextField = new UITextFieldAdapter(); |
||||
} else { |
||||
try { |
||||
this.errorMsgTextField = var1.createTextFieldAdapter(); |
||||
} catch (Exception var3) { |
||||
FineLoggerFactory.getLogger().error(var3.getMessage(), var3); |
||||
this.errorMsgTextField = new UITextFieldAdapter(); |
||||
} |
||||
|
||||
} |
||||
} |
||||
|
||||
protected abstract T updateSubFieldEditorBean(); |
||||
|
||||
protected abstract JPanel setFirstContentPane(); |
||||
|
||||
public void checkValid() throws Exception { |
||||
} |
||||
|
||||
protected void addValidatePane() { |
||||
this.initErrorMsgPane(); |
||||
this.validatePane = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
UILabel var1 = new UILabel(Toolkit.i18nText("Fine-Design_Basic_Widget_Error_Tip")); |
||||
JPanel var2 = FRGUIPaneFactory.createBorderLayout_S_Pane(); |
||||
final JPanel var3 = TableLayoutHelper.createGapTableLayoutPane(new Component[][]{{var1, this.errorMsgTextField.getErrorMsgTextField()}}, 1, 10.0D, 6.0D); |
||||
var3.setBorder(BorderFactory.createEmptyBorder(5, 12, 0, 0)); |
||||
var2.add(var3, "Center"); |
||||
this.allowBlankCheckBox.addItemListener(new ItemListener() { |
||||
public void itemStateChanged(ItemEvent var1) { |
||||
boolean var2 = FieldEditorDefinePane.this.allowBlankCheckBox.isSelected(); |
||||
var3.setVisible(!var2); |
||||
} |
||||
}); |
||||
Component[][] var4 = new Component[][]{{this.allowBlankCheckBox}, {var2}}; |
||||
JPanel var5 = TableLayoutHelper.createGapTableLayoutPane(var4, 1, 5.0D, 0.0D); |
||||
var5.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0)); |
||||
this.validatePane.add(var5, "North"); |
||||
JPanel var6 = this.setValidatePane(); |
||||
if (var6 != null) { |
||||
this.validatePane.add(var6, "Center"); |
||||
} |
||||
|
||||
UIExpandablePane var7 = new UIExpandablePane(Toolkit.i18nText("Fine-Design_Basic_Validate"), 280, 20, this.validatePane); |
||||
this.add(var7, "Center"); |
||||
} |
||||
|
||||
public XLayoutContainer getParent(XCreator var1) { |
||||
XLayoutContainer var2 = XCreatorUtils.getParentXLayoutContainer(var1); |
||||
if (var1.acceptType(new Class[]{XWFitLayout.class}) || var1.acceptType(new Class[]{XWParameterLayout.class})) { |
||||
var2 = null; |
||||
} |
||||
|
||||
return var2; |
||||
} |
||||
|
||||
public JPanel setValidatePane() { |
||||
return null; |
||||
} |
||||
} |
@ -0,0 +1,37 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: VSCellWidgetOptionProvider |
||||
* Author: Louis |
||||
* Date: 2021/11/5 16:32 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.provider; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.pane.VueDateEditorPane; |
||||
import com.eco.plugin.zgtpbxdate.widget.VueDateEditor; |
||||
import com.fr.design.beans.BasicBeanPane; |
||||
import com.fr.design.fun.impl.AbstractCellWidgetOptionProvider; |
||||
import com.fr.form.ui.Widget; |
||||
|
||||
|
||||
public class VSCellWidgetOptionProvider extends AbstractCellWidgetOptionProvider { |
||||
@Override |
||||
public Class<? extends Widget> classForWidget() { |
||||
return VueDateEditor.class; |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends BasicBeanPane<? extends Widget>> appearanceForWidget() { |
||||
return VueDateEditorPane.class; |
||||
} |
||||
|
||||
@Override |
||||
public String iconPathForWidget() { |
||||
return "com/fr/design/images/buttonicon/widget/date_16.png"; |
||||
} |
||||
|
||||
@Override |
||||
public String nameForWidget() { |
||||
return "自定义日期控件"; |
||||
} |
||||
} |
@ -0,0 +1,40 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: VueFormOptionProvider |
||||
* Author: Louis |
||||
* Date: 2021/11/8 11:46 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.provider; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.creator.XVueDateEditor; |
||||
import com.eco.plugin.zgtpbxdate.widget.VueDateEditor; |
||||
import com.fr.design.fun.impl.AbstractFormWidgetOptionProvider; |
||||
import com.fr.form.ui.Widget; |
||||
|
||||
|
||||
public class VueFormOptionProvider extends AbstractFormWidgetOptionProvider { |
||||
|
||||
public VueFormOptionProvider() { |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends Widget> classForWidget() { |
||||
return VueDateEditor.class; |
||||
} |
||||
|
||||
@Override |
||||
public Class<?> appearanceForWidget() { |
||||
return XVueDateEditor.class; |
||||
} |
||||
|
||||
@Override |
||||
public String iconPathForWidget() { |
||||
return "com/fr/design/images/buttonicon/widget/date_16.png"; |
||||
} |
||||
|
||||
@Override |
||||
public String nameForWidget() { |
||||
return "自定义日期控件"; |
||||
} |
||||
} |
@ -0,0 +1,37 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: VueParameterWidgetOptionProvider |
||||
* Author: Louis |
||||
* Date: 2021/11/5 16:32 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.provider; |
||||
|
||||
import com.eco.plugin.zgtpbxdate.creator.XVueDateEditor; |
||||
import com.eco.plugin.zgtpbxdate.widget.VueDateEditor; |
||||
import com.fr.design.fun.impl.AbstractParameterWidgetOptionProvider; |
||||
import com.fr.form.ui.Widget; |
||||
|
||||
public class VueParameterWidgetOptionProvider extends AbstractParameterWidgetOptionProvider { |
||||
|
||||
@Override |
||||
public Class<? extends Widget> classForWidget() { |
||||
return VueDateEditor.class; |
||||
} |
||||
|
||||
@Override |
||||
public Class<?> appearanceForWidget() { |
||||
return XVueDateEditor.class; |
||||
} |
||||
|
||||
@Override |
||||
public String iconPathForWidget() { |
||||
return "com/fr/design/images/buttonicon/widget/date_16.png"; |
||||
} |
||||
|
||||
@Override |
||||
public String nameForWidget() { |
||||
return "自定义日期控件"; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,235 @@
|
||||
package com.eco.plugin.zgtpbxdate.utils; |
||||
|
||||
import java.sql.Timestamp; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.ArrayList; |
||||
import java.util.Calendar; |
||||
import java.util.Date; |
||||
import java.util.List; |
||||
|
||||
public class DateUtilSelf { |
||||
|
||||
/** |
||||
* 获取当前时间 格式 yyyy-MM-dd HH:mm:ss |
||||
* @return |
||||
*/ |
||||
public static String getNow() { |
||||
return DateToString(new Date(),"yyyy-MM-dd"); |
||||
} |
||||
|
||||
/** |
||||
* 日期转换为日期字符串 |
||||
* @param date |
||||
* @param formatStr |
||||
* @return String |
||||
*/ |
||||
public static String DateToString(Date date,String formatStr) { |
||||
SimpleDateFormat sdf = new SimpleDateFormat(formatStr); |
||||
String dateStr = sdf.format(date).toString(); |
||||
|
||||
return dateStr; |
||||
} |
||||
|
||||
/** |
||||
* 日期字符串转换日期 |
||||
* @param dateStr |
||||
* @param formatStr |
||||
* @return Date |
||||
*/ |
||||
public static Date strToDate(String dateStr,String formatStr){ |
||||
SimpleDateFormat sdf = new SimpleDateFormat(formatStr); |
||||
Date date = null; |
||||
|
||||
try { |
||||
date = sdf.parse(dateStr); |
||||
} |
||||
catch(Exception e) { |
||||
} |
||||
|
||||
return date; |
||||
} |
||||
|
||||
/** |
||||
* Date转Timestamp |
||||
* @param date |
||||
* @return |
||||
*/ |
||||
public static Timestamp dateToTimestamp(Date date) { |
||||
Date transDate = DateUtilSelf.strToDate(DateUtilSelf.DateToString(date, "yyyy-MM-dd hh:mm:ss"),"yyyy-MM-dd hh:mm:ss"); |
||||
|
||||
Timestamp timestamp = new Timestamp(transDate.getTime()); |
||||
return timestamp; |
||||
} |
||||
|
||||
/** |
||||
* Date字符串转Timestamp |
||||
* @param dateStr |
||||
* @param format |
||||
* @return |
||||
*/ |
||||
public static Timestamp strToTimestamp(String dateStr,String format) { |
||||
Date date = strToDate(dateStr,format); |
||||
Timestamp timestamp = new Timestamp(date.getTime()); |
||||
return timestamp; |
||||
} |
||||
|
||||
/** |
||||
* 获取两个日期字符串之间的天数 |
||||
* @param startDateStr |
||||
* @param endDateStr |
||||
* @param formatStr |
||||
* @return |
||||
*/ |
||||
public static int getDays(String startDateStr,String endDateStr,String formatStr) { |
||||
|
||||
Date startDate = strToDate(startDateStr,formatStr); |
||||
Date endDate = strToDate(endDateStr,formatStr); |
||||
|
||||
long startTime = startDate.getTime(); |
||||
long endTime = endDate.getTime(); |
||||
|
||||
int days = (int) ((endTime - startTime)/(60*60*24*1000)); |
||||
|
||||
return days; |
||||
} |
||||
|
||||
/** |
||||
* 获取给定时间之前之后的时间 |
||||
* @param type |
||||
* @param dateStr |
||||
* @param count |
||||
* @param formatStr |
||||
* @return |
||||
*/ |
||||
public static String getAfterDateStr(int type,String dateStr,int count,String formatStr) { |
||||
Date startDate = strToDate(dateStr,formatStr); |
||||
|
||||
Calendar calendar = Calendar.getInstance(); |
||||
calendar.setTime(startDate); |
||||
|
||||
calendar.add(type, count); |
||||
|
||||
String endDateStr = DateToString(calendar.getTime(),formatStr); |
||||
|
||||
return endDateStr; |
||||
} |
||||
|
||||
/** |
||||
* 获取给定时间之前之后的时间 |
||||
* @param type |
||||
* @param date |
||||
* @param count |
||||
* @param formatStr |
||||
* @return |
||||
*/ |
||||
public static String getAfterDateStr(int type,Date date,int count,String formatStr) { |
||||
|
||||
Calendar calendar = Calendar.getInstance(); |
||||
calendar.setTime(date); |
||||
|
||||
calendar.add(type, count); |
||||
|
||||
String endDateStr = DateToString(calendar.getTime(),formatStr); |
||||
|
||||
return endDateStr; |
||||
} |
||||
|
||||
/** |
||||
* 获取给定时间之前之后的时间 |
||||
* @param type |
||||
* @param date |
||||
* @param count |
||||
* @return |
||||
*/ |
||||
public static Date getAfterDateStr(int type,Date date,int count) { |
||||
Calendar dateResult = Calendar.getInstance(); |
||||
dateResult.setTime(date); |
||||
dateResult.add(type, count); |
||||
return dateResult.getTime(); |
||||
} |
||||
|
||||
/** |
||||
* 时间戳转日期 |
||||
* @param timestamp |
||||
* @return |
||||
*/ |
||||
public static Date timestampToDate(Timestamp timestamp) { |
||||
Date date = new Date(timestamp.getTime()); |
||||
|
||||
return date; |
||||
} |
||||
|
||||
/** |
||||
* 时间戳转时间字符串 |
||||
* @param timestamp |
||||
* @param format 日期格式 |
||||
* @return |
||||
*/ |
||||
public static String timestampToStr(Timestamp timestamp,String format) { |
||||
Date date = timestampToDate(timestamp); |
||||
|
||||
String timeStr = DateToString(date, format); |
||||
|
||||
return timeStr; |
||||
} |
||||
|
||||
/** |
||||
* 获取所给日期length天内每s一天的日期 |
||||
* @param date 所给日期(yyyy-MM-dd) |
||||
* @param length 长度 |
||||
* @return |
||||
*/ |
||||
public static List<String> getDateList(String date,int length){ |
||||
List<String> dateList = new ArrayList<String>(); |
||||
String format = "yyyy-MM-dd"; |
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
||||
//获取length天后的日期
|
||||
|
||||
String targetDate = getAfterDateStr(Calendar.DATE,date,length,format); |
||||
|
||||
Date start = null; |
||||
Date end = null; |
||||
|
||||
if(length >= 0) { |
||||
start = strToDate(date,format); |
||||
end = strToDate(targetDate,format); |
||||
}else { |
||||
start = strToDate(targetDate,format); |
||||
end = strToDate(date,format); |
||||
} |
||||
|
||||
Calendar calBegin = Calendar.getInstance(); |
||||
calBegin.setTime(start); |
||||
Calendar calEnd = Calendar.getInstance(); |
||||
calEnd.setTime(end); |
||||
|
||||
while (end.after(calBegin.getTime())) { |
||||
calBegin.add(Calendar.DATE, 1); |
||||
String dayStr = sdf.format(calBegin.getTime()); |
||||
dateList.add(dayStr); |
||||
} |
||||
|
||||
return dateList; |
||||
} |
||||
|
||||
/** |
||||
* 比较startDate是否在endDate之前 |
||||
* @param startDate |
||||
* @param endDate |
||||
* @param format |
||||
* @return 0 两个日期相等 <0 开始日期在结束日期之前 >0 开始日期在结束日期之后 |
||||
*/ |
||||
public static int comparisonDate(String startDate,String endDate,String format) { |
||||
Date start = strToDate(startDate,format); |
||||
Date end = strToDate(endDate,format); |
||||
|
||||
return start.compareTo(end); |
||||
} |
||||
|
||||
//获取当前日期年、月、日、时、分、秒
|
||||
public static int getCount(int type){ |
||||
Calendar calendar = Calendar.getInstance(); |
||||
|
||||
return calendar.get(type); |
||||
} |
||||
} |
@ -0,0 +1,559 @@
|
||||
/* |
||||
* Copyright (C), 2018-2021 |
||||
* Project: starter |
||||
* FileName: VueDateEditorWidget |
||||
* Author: Louis |
||||
* Date: 2021/11/5 16:32 |
||||
*/ |
||||
package com.eco.plugin.zgtpbxdate.widget; |
||||
|
||||
|
||||
import com.eco.plugin.zgtpbxdate.editors.DateTypeEditor; |
||||
import com.eco.plugin.zgtpbxdate.editors.ReturnTypeEditor; |
||||
import com.eco.plugin.zgtpbxdate.items.FirstDayOfWeekItems; |
||||
import com.fr.base.BaseFormula; |
||||
import com.fr.base.ParameterMapNameSpace; |
||||
import com.fr.base.Utils; |
||||
import com.fr.data.core.FormatField; |
||||
import com.fr.design.designer.properties.items.Item; |
||||
import com.fr.form.FormUtils; |
||||
import com.fr.form.ui.DataControl; |
||||
import com.fr.form.ui.DirectWriteEditor; |
||||
import com.fr.form.ui.Widget; |
||||
import com.fr.form.ui.WidgetValue; |
||||
import com.fr.form.ui.concept.data.ValueInitializer; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.general.DateUtils; |
||||
import com.fr.json.JSONArray; |
||||
import com.fr.json.JSONException; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.script.Calculator; |
||||
import com.fr.stable.ArrayUtils; |
||||
import com.fr.stable.CommonUtils; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.stable.UtilEvalError; |
||||
import com.fr.stable.core.NodeVisitor; |
||||
import com.fr.stable.script.CalculatorProvider; |
||||
import com.fr.stable.web.Repository; |
||||
import com.fr.stable.web.SessionProvider; |
||||
import com.fr.stable.xml.XMLPrintWriter; |
||||
import com.fr.stable.xml.XMLableReader; |
||||
import com.fr.web.utils.WebUtils; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.text.SimpleDateFormat; |
||||
import java.util.Collections; |
||||
import java.util.Date; |
||||
import java.util.HashSet; |
||||
import java.util.Set; |
||||
|
||||
import static com.eco.plugin.zgtpbxdate.creator.XVueDateEditor.*; |
||||
|
||||
/** |
||||
* <Function Description><br> |
||||
* <VueDateEditor> |
||||
* |
||||
* @author wink |
||||
* @since 1.0.0 |
||||
*/ |
||||
public class VueDateEditor extends DirectWriteEditor implements DataControl { |
||||
private static final long serialVersionUID = 1406480833692359017L; |
||||
public static String oldDateTimeWidgetTag = "com.fr.report.web.ui.DateTimeEditor"; |
||||
public static String oldDateTimeFormat = "yyyy-MM-dd HH:mm"; |
||||
public static final String SHOW_DATE_FM = "showDateFM"; |
||||
public static final String RETURN_FORMAT_FM = "returnFormatFM"; |
||||
private String startDate; |
||||
private String endDate; |
||||
private BaseFormula startDateFM; |
||||
private BaseFormula endDateFM; |
||||
// private String formatText = "yyyy-MM-dd";
|
||||
// private String formatText = "yyyy-MM-dd hh:mm:ss";
|
||||
private ValueInitializer widgetValue = new WidgetValue(); |
||||
// 日期类型和格式
|
||||
private String dateFormat = DateTypeEditor.DATE; |
||||
// 显示日期格式
|
||||
private String showDate; |
||||
private BaseFormula showDateFM; |
||||
// 返回格式
|
||||
private String returnFormat; |
||||
private BaseFormula returnFormatFM; |
||||
// 周起始日
|
||||
private int firstDayOfWeek = FirstDayOfWeekItems.SUNDAY; |
||||
// 返回类型
|
||||
private String returnType = ReturnTypeEditor.STRING; |
||||
// 数组拼接符
|
||||
private String dateSeparator = ","; |
||||
// 配置项
|
||||
private String configurationItem = ""; |
||||
|
||||
public VueDateEditor() { |
||||
} |
||||
|
||||
@Override |
||||
public String getXType() { |
||||
return "custom_datetime"; |
||||
} |
||||
|
||||
@Override |
||||
public String getFormatText() { |
||||
return this.showDate; |
||||
} |
||||
|
||||
public void setFormatText(String showDate) { |
||||
this.showDate = showDate; |
||||
} |
||||
|
||||
@Override |
||||
public int[] getValueType() { |
||||
return new int[]{TYPE_DATE, TYPE_FORMULA, TYPE_DATABINDING}; |
||||
} |
||||
|
||||
@Override |
||||
public ValueInitializer getWidgetValue() { |
||||
return this.widgetValue; |
||||
} |
||||
|
||||
@Override |
||||
public void setWidgetValue(ValueInitializer valueInitializer) { |
||||
this.widgetValue = valueInitializer; |
||||
} |
||||
|
||||
@Override |
||||
public String[] dependence(CalculatorProvider calculator) { |
||||
Set<String> hashSet = new HashSet<>(); |
||||
if (this.widgetValue != null) { |
||||
Collections.addAll(hashSet, this.widgetValue.dependence(calculator)); |
||||
} |
||||
Collections.addAll(hashSet, FormUtils.getDependence(this.getStartDate(), calculator)); |
||||
Collections.addAll(hashSet, FormUtils.getDependence(this.getEndDate(), calculator)); |
||||
return hashSet.toArray(new String[0]); |
||||
} |
||||
|
||||
public Object getStartDateValue(Calculator calculator) throws Exception { |
||||
if (this.startDateFM != null) { |
||||
return calculator.eval(this.startDateFM); |
||||
} else { |
||||
return this.startDate != null ? DateUtils.string2Date(this.startDate, true) : null; |
||||
} |
||||
} |
||||
|
||||
public Object getEndDateValue(Calculator calculator) throws Exception { |
||||
if (this.endDateFM != null) { |
||||
return calculator.eval(this.endDateFM); |
||||
} else { |
||||
return this.endDate != null ? DateUtils.string2Date(this.endDate, true) : null; |
||||
} |
||||
} |
||||
|
||||
public Object getStartDate() { |
||||
if (this.startDateFM != null) { |
||||
return this.startDateFM; |
||||
} else { |
||||
return this.startDate != null ? DateUtils.string2Date(this.startDate, true) : null; |
||||
} |
||||
} |
||||
|
||||
public void setStartDate(Object startDate) { |
||||
if (startDate instanceof BaseFormula) { |
||||
this.startDateFM = (BaseFormula) startDate; |
||||
this.startDate = null; |
||||
} else if (startDate instanceof Date) { |
||||
this.startDateFM = null; |
||||
this.startDate = DateUtils.getDate2Str("MM/dd/yyyy", (Date) startDate); |
||||
} else { |
||||
this.startDateFM = null; |
||||
this.startDate = null; |
||||
} |
||||
|
||||
} |
||||
|
||||
public Object getEndDate() { |
||||
if (this.endDateFM != null) { |
||||
return this.endDateFM; |
||||
} else { |
||||
return this.endDate != null ? DateUtils.string2Date(this.endDate, true) : null; |
||||
} |
||||
} |
||||
|
||||
public void setEndDate(Object endDate) { |
||||
if (endDate instanceof BaseFormula) { |
||||
this.endDateFM = (BaseFormula) endDate; |
||||
this.endDate = null; |
||||
} else if (endDate instanceof Date) { |
||||
this.endDateFM = null; |
||||
this.endDate = DateUtils.getDate2Str("MM/dd/yyyy", (Date) endDate); |
||||
} else { |
||||
this.endDateFM = null; |
||||
this.endDate = null; |
||||
} |
||||
|
||||
} |
||||
|
||||
public String getStartText() { |
||||
return this.startDate; |
||||
} |
||||
|
||||
public void setStartText(String startText) { |
||||
this.startDate = startText; |
||||
} |
||||
|
||||
public String getEndText() { |
||||
return this.endDate; |
||||
} |
||||
|
||||
public void setEndText(String endText) { |
||||
this.endDate = endText; |
||||
} |
||||
|
||||
public BaseFormula getStartDateFM() { |
||||
return this.startDateFM; |
||||
} |
||||
|
||||
public void setStartDateFM(BaseFormula formula) { |
||||
this.startDateFM = formula; |
||||
} |
||||
|
||||
public BaseFormula getEndDateFM() { |
||||
return this.endDateFM; |
||||
} |
||||
|
||||
public void setEndDateFM(BaseFormula formula) { |
||||
this.endDateFM = formula; |
||||
} |
||||
|
||||
@Override |
||||
public void createValueResult(CalculatorProvider calculator, JSONObject widgetResult) { |
||||
if (this.widgetValue != null) { |
||||
calculator.setAttribute(Widget.NAME, this.getWidgetName().toUpperCase()); |
||||
Object result = this.getWidgetValue().executeResult(calculator); |
||||
if (StringUtils.equals(this.returnType, ReturnTypeEditor.STRING) |
||||
&& result instanceof Date && this.showDate != null) { |
||||
result = (new SimpleDateFormat(this.showDate)).format((Date) result); |
||||
} |
||||
widgetResult.put(this.widgetName.toUpperCase(), result == null ? "" : result); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public String getDataBindDefaultValue(CalculatorProvider calculator) { |
||||
if (this.widgetValue == null) { |
||||
this.setWidgetValue(new WidgetValue()); |
||||
} |
||||
|
||||
Object result = this.getWidgetValue().executeResult(calculator); |
||||
if (result == null) { |
||||
return null; |
||||
} else { |
||||
return result instanceof Date && this.showDate != null ? (new SimpleDateFormat(this.showDate)).format((Date) result) : Utils.objectToString(result); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public JSONObject createJSONConfig(Repository repository, Calculator calculator, NodeVisitor nodeVisitor) throws JSONException { |
||||
JSONObject config = super.createJSONConfig(repository, calculator, nodeVisitor); |
||||
config.put("allowBlank", this.allowBlank); |
||||
Object value = config.get("value"); |
||||
if (value == null) { |
||||
config.remove("value"); |
||||
} else if (value instanceof Date) { |
||||
config.put("value", (new JSONObject()).put("date_milliseconds", ((Date) value).getTime())); |
||||
} |
||||
|
||||
if (StringUtils.isNotEmpty(this.showDate)) { |
||||
config.put("format", this.showDate); |
||||
if (!ArrayUtils.contains(FormatField.getInstance().getDateFormatArray(), this.showDate)) { |
||||
config.put("customFormat", true); |
||||
} |
||||
} |
||||
try { |
||||
if (StringUtils.isNotEmpty(this.startDate)) { |
||||
config.put("startDate", this.value2Config(this.startDate, calculator)); |
||||
} else if (this.startDateFM != null) { |
||||
config.put("startDate", this.value2Config(calculator.evalValue(this.startDateFM.getContent()), calculator)); |
||||
} |
||||
|
||||
if (StringUtils.isNotEmpty(this.endDate)) { |
||||
config.put("endDate", this.value2Config(this.endDate, calculator)); |
||||
} else if (this.endDateFM != null) { |
||||
config.put("endDate", this.value2Config(calculator.evalValue(this.endDateFM.getContent()), calculator)); |
||||
} |
||||
|
||||
if (StringUtils.isNotBlank(this.getDateFormat())) { |
||||
config.put(DATE_FORMAT, this.getDateFormat()); |
||||
} |
||||
if (StringUtils.isNotBlank(this.getShowDate())) { |
||||
config.put(SHOW_DATE, this.getShowDate()); |
||||
} |
||||
if (!CommonUtils.isNull(this.getShowDateFM())) { |
||||
config.put(SHOW_DATE, calculator.evalValue(this.getShowDateFM())); |
||||
} |
||||
if (StringUtils.isNotBlank(this.getReturnFormat())) { |
||||
config.put(RETURN_FORMAT, this.getReturnFormat()); |
||||
} |
||||
if (!CommonUtils.isNull(this.getReturnFormatFM())) { |
||||
config.put(RETURN_FORMAT, calculator.evalValue(this.getReturnFormatFM())); |
||||
} |
||||
} catch (UtilEvalError e) { |
||||
// LogKit.error(e.getMessage(), e);
|
||||
} |
||||
config.put(FIRST_DAY_OF_WEEK, this.getFirstDayOfWeek()); |
||||
|
||||
if (StringUtils.isNotBlank(this.getReturnType())) { |
||||
config.put(RETURN_TYPE, this.getReturnType()); |
||||
} |
||||
|
||||
if (StringUtils.isNotBlank(this.getDateSeparator())) { |
||||
config.put(DATE_SEPARATOR, this.getDateSeparator()); |
||||
} |
||||
|
||||
if (StringUtils.isNotBlank(this.getConfigurationItem())) { |
||||
config.put(CONFIGURATION_ITEM, this.getConfigurationItem()); |
||||
} |
||||
|
||||
String[] dependence = this.dependence(calculator); |
||||
if (!ArrayUtils.isEmpty(dependence)) { |
||||
config.put("dependence", dependence); |
||||
} |
||||
return config; |
||||
} |
||||
|
||||
@Override |
||||
public JSONArray createJSONData(SessionProvider sessionProvider, Calculator calculator, HttpServletRequest request) throws Exception { |
||||
JSONArray data = super.createJSONData(sessionProvider, calculator, request); |
||||
ParameterMapNameSpace parameterMapNameSpace = ParameterMapNameSpace.create(sessionProvider.getOriginalParameterMap()); |
||||
DependenceNameSpace dependenceNameSpace = new DependenceNameSpace(WebUtils.getHTTPRequestParameter(request, "dependence")); |
||||
calculator.pushNameSpace(parameterMapNameSpace); |
||||
calculator.pushNameSpace(dependenceNameSpace); |
||||
JSONObject dateJson = JSONObject.create(); |
||||
dateJson.put("startDate", this.value2Config(this.getStartDateValue(calculator), calculator)); |
||||
dateJson.put("endDate", this.value2Config(this.getEndDateValue(calculator), calculator)); |
||||
data.put(dateJson); |
||||
calculator.removeNameSpace(parameterMapNameSpace); |
||||
calculator.removeNameSpace(dependenceNameSpace); |
||||
return data; |
||||
} |
||||
|
||||
@Override |
||||
public Object value2Config(Object value, CalculatorProvider calculator) { |
||||
String config; |
||||
if (value instanceof Date) { |
||||
config = (new SimpleDateFormat(this.showDate)).format((Date) value); |
||||
} else if (value == null) { |
||||
config = ""; |
||||
} else { |
||||
String str = Utils.objectToString(value); |
||||
try { |
||||
Date var5 = DateUtils.string2Date(str, false); |
||||
config = (new SimpleDateFormat(this.showDate)).format(var5); |
||||
} catch (Exception e) { |
||||
config = value.toString(); |
||||
} |
||||
} |
||||
return config; |
||||
} |
||||
|
||||
@Override |
||||
public String[] supportedEvents() { |
||||
return new String[]{"afterinit", "afteredit", "stopedit"}; |
||||
} |
||||
|
||||
@Override |
||||
public boolean equals(Object obj) { |
||||
return obj instanceof VueDateEditor && super.equals(obj) |
||||
&& ComparatorUtils.equals(this.startDate, ((VueDateEditor) obj).startDate) |
||||
&& ComparatorUtils.equals(this.endDate, ((VueDateEditor) obj).endDate) |
||||
&& StringUtils.equals(this.returnType, ((VueDateEditor) obj).returnType); |
||||
} |
||||
|
||||
@Override |
||||
public void readXML(XMLableReader reader) { |
||||
super.readXML(reader); |
||||
if (reader.isChildNode()) { |
||||
String tagName = reader.getTagName(); |
||||
if ("DateAttr".equals(tagName)) { |
||||
String element; |
||||
if ((element = reader.getAttrAsString("format", null)) != null) { |
||||
this.setFormatText(element); |
||||
} |
||||
if ((element = reader.getAttrAsString("start", null)) != null) { |
||||
this.startDate = element; |
||||
} else if ((element = reader.getAttrAsString("startdatefm", null)) != null) { |
||||
this.startDateFM = BaseFormula.createFormulaBuilder().build(element); |
||||
} |
||||
if ((element = reader.getAttrAsString("end", null)) != null) { |
||||
this.endDate = element; |
||||
} else if ((element = reader.getAttrAsString("enddatefm", null)) != null) { |
||||
this.endDateFM = BaseFormula.createFormulaBuilder().build(element); |
||||
} |
||||
this.setShowDate(reader.getAttrAsString(SHOW_DATE, "")); |
||||
this.setShowDateFM(BaseFormula.createFormulaBuilder().build(reader.getAttrAsString(SHOW_DATE_FM, ""))); |
||||
this.setReturnFormat(reader.getAttrAsString(RETURN_FORMAT, "")); |
||||
this.setReturnFormatFM(BaseFormula.createFormulaBuilder().build(reader.getAttrAsString(RETURN_FORMAT_FM, ""))); |
||||
this.setFirstDayOfWeek(reader.getAttrAsInt(FIRST_DAY_OF_WEEK, FirstDayOfWeekItems.SUNDAY)); |
||||
this.setReturnType(reader.getAttrAsString(RETURN_TYPE, ReturnTypeEditor.STRING)); |
||||
this.setDateFormat(reader.getAttrAsString(DATE_FORMAT, DateTypeEditor.DATE)); |
||||
this.setDateSeparator(reader.getAttrAsString(DATE_SEPARATOR, "")); |
||||
this.setConfigurationItem(reader.getAttrAsString(CONFIGURATION_ITEM, "")); |
||||
} else if ("widgetValue".equals(tagName)) { |
||||
this.widgetValue = new WidgetValue(); |
||||
reader.readXMLObject(this.widgetValue); |
||||
} |
||||
} |
||||
if (ComparatorUtils.equals(reader.getAttrAsString("class", null), oldDateTimeWidgetTag) && reader.getAttrAsString("format", (String) null) == null) { |
||||
this.setFormatText(oldDateTimeFormat); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void writeXML(XMLPrintWriter writer) { |
||||
super.writeXML(writer); |
||||
writer.startTAG("DateAttr"); |
||||
if (!ComparatorUtils.equals(this.getFormatText(), this.getDefaultFormatText())) { |
||||
writer.attr("format", this.getFormatText()); |
||||
} |
||||
|
||||
if (StringUtils.isNotEmpty(this.startDate)) { |
||||
writer.attr("start", this.startDate); |
||||
} else if (this.startDateFM != null) { |
||||
writer.attr("startdatefm", this.startDateFM.getContent()); |
||||
} |
||||
|
||||
if (StringUtils.isNotEmpty(this.endDate)) { |
||||
writer.attr("end", this.endDate); |
||||
} else if (this.endDateFM != null) { |
||||
writer.attr("enddatefm", this.endDateFM.getContent()); |
||||
} |
||||
|
||||
if (StringUtils.isNotBlank(this.getDateFormat())) { |
||||
writer.attr(DATE_FORMAT, this.getDateFormat()); |
||||
} |
||||
if (StringUtils.isNotBlank(this.getShowDate())) { |
||||
writer.attr(SHOW_DATE, this.getShowDate()); |
||||
} |
||||
if (this.getShowDateFM() != null && StringUtils.isNotBlank(this.getShowDateFM().getContent())) { |
||||
writer.attr(SHOW_DATE_FM, this.getShowDateFM().getContent()); |
||||
} |
||||
if (StringUtils.isNotBlank(this.getReturnFormat())) { |
||||
writer.attr(RETURN_FORMAT, this.getReturnFormat()); |
||||
} |
||||
if (this.getReturnFormatFM() != null && StringUtils.isNotBlank(this.getReturnFormatFM().getContent())) { |
||||
writer.attr(RETURN_FORMAT_FM, this.getReturnFormatFM().getContent()); |
||||
} |
||||
writer.attr(FIRST_DAY_OF_WEEK, this.getFirstDayOfWeek()); |
||||
if (StringUtils.isNotBlank(this.getReturnType())) { |
||||
writer.attr(RETURN_TYPE, this.getReturnType()); |
||||
} |
||||
if (StringUtils.isNotBlank(this.getDateSeparator())) { |
||||
writer.attr(DATE_SEPARATOR, this.getDateSeparator()); |
||||
} |
||||
if (StringUtils.isNotBlank(this.getConfigurationItem())) { |
||||
writer.attr(CONFIGURATION_ITEM, this.getConfigurationItem()); |
||||
} |
||||
|
||||
writer.end(); |
||||
if (this.widgetValue != null) { |
||||
this.widgetValue.writeXML(writer); |
||||
} |
||||
} |
||||
|
||||
protected String getDefaultFormatText() { |
||||
return "yyyy-MM-dd"; |
||||
} |
||||
|
||||
public String getShowDate() { |
||||
return showDate; |
||||
} |
||||
|
||||
public void setShowDate(String showDate) { |
||||
this.showDate = showDate; |
||||
} |
||||
|
||||
public BaseFormula getShowDateFM() { |
||||
return showDateFM; |
||||
} |
||||
|
||||
public void setShowDateFM(BaseFormula showDateFM) { |
||||
this.showDateFM = showDateFM; |
||||
} |
||||
|
||||
public int getFirstDayOfWeek() { |
||||
return firstDayOfWeek; |
||||
} |
||||
|
||||
public void setFirstDayOfWeek(Object firstDayOfWeek) { |
||||
Item selectedItem = (Item) firstDayOfWeek; |
||||
this.firstDayOfWeek = Integer.parseInt(String.valueOf(selectedItem.getValue())); |
||||
} |
||||
|
||||
public void setFirstDayOfWeek(int firstDayOfWeek) { |
||||
this.firstDayOfWeek = firstDayOfWeek; |
||||
} |
||||
|
||||
public String getConfigurationItem() { |
||||
return configurationItem; |
||||
} |
||||
|
||||
public void setConfigurationItem(String configurationItem) { |
||||
this.configurationItem = configurationItem; |
||||
} |
||||
|
||||
public String getDateFormat() { |
||||
return dateFormat; |
||||
} |
||||
|
||||
public void setDateFormat(String dateFormat) { |
||||
this.dateFormat = dateFormat; |
||||
} |
||||
|
||||
public String getReturnFormat() { |
||||
return returnFormat; |
||||
} |
||||
|
||||
public void setReturnFormat(String returnFormat) { |
||||
this.returnFormat = returnFormat; |
||||
} |
||||
|
||||
public BaseFormula getReturnFormatFM() { |
||||
return returnFormatFM; |
||||
} |
||||
|
||||
public void setReturnFormatFM(BaseFormula returnFormatFM) { |
||||
this.returnFormatFM = returnFormatFM; |
||||
} |
||||
|
||||
public int getReturnTypeInt() { |
||||
if (StringUtils.equals(this.returnType, ReturnTypeEditor.DATE)) { |
||||
return 0; |
||||
} else if (StringUtils.equals(this.returnType, ReturnTypeEditor.STRING)) { |
||||
return 1; |
||||
} else { |
||||
return 1; |
||||
} |
||||
} |
||||
|
||||
public String getReturnType() { |
||||
return returnType; |
||||
} |
||||
|
||||
public void setReturnType(int returnType) { |
||||
if (ComparatorUtils.equals(returnType, 0)) { |
||||
this.returnType = ReturnTypeEditor.DATE; |
||||
} else if (ComparatorUtils.equals(returnType, 1)) { |
||||
this.returnType = ReturnTypeEditor.STRING; |
||||
} else { |
||||
this.returnType = ReturnTypeEditor.STRING; |
||||
} |
||||
} |
||||
|
||||
public void setReturnType(String returnType) { |
||||
this.returnType = returnType; |
||||
} |
||||
|
||||
public String getDateSeparator() { |
||||
return dateSeparator; |
||||
} |
||||
|
||||
public void setDateSeparator(String dateSeparator) { |
||||
this.dateSeparator = dateSeparator; |
||||
} |
||||
} |
@ -0,0 +1,65 @@
|
||||
.wrapper{ |
||||
max-width: 100%; |
||||
width: 800px; |
||||
margin: 0 auto; |
||||
} |
||||
.htmleaf-links{ |
||||
padding: 20px 0; |
||||
text-align: center; |
||||
} |
||||
.text-center { |
||||
text-align: center; |
||||
} |
||||
.related { |
||||
margin-top: 50px; |
||||
/* color: #fff; */ |
||||
/* background: #494A5F; */ |
||||
text-align: center; |
||||
font-size: 1.25em; |
||||
padding: 0.5em 0; |
||||
overflow: hidden; |
||||
} |
||||
|
||||
.related > a { |
||||
vertical-align: top; |
||||
width: calc(100% - 20px); |
||||
max-width: 340px; |
||||
display: inline-block; |
||||
text-align: center; |
||||
margin: 20px 10px; |
||||
padding: 25px; |
||||
/* font-family: "Microsoft YaHei","宋体","Segoe UI", "Lucida Grande", Helvetica, Arial,sans-serif, FreeSans, Arimo; */ |
||||
} |
||||
.related a { |
||||
display: inline-block; |
||||
text-align: left; |
||||
margin: 20px auto; |
||||
padding: 10px 20px; |
||||
/* opacity: 0.8; */ |
||||
-webkit-transition: opacity 0.3s; |
||||
transition: opacity 0.3s; |
||||
-webkit-backface-visibility: hidden; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
.related a:hover, |
||||
.related a:active { |
||||
opacity: 1; |
||||
} |
||||
|
||||
.related a img { |
||||
max-width: 100%; |
||||
/* opacity: 0.8; */ |
||||
border-radius: 4px; |
||||
} |
||||
.related a:hover img, |
||||
.related a:active img { |
||||
opacity: 1; |
||||
} |
||||
.related h3{font-family: "Microsoft YaHei", sans-serif;font-size: 1.2em} |
||||
.related a h3 { |
||||
font-size: 0.85em; |
||||
font-weight: 500; |
||||
margin-top: 0.15em; |
||||
/* color: #fff; */ |
||||
} |
@ -0,0 +1,25 @@
|
||||
.c999 { |
||||
color: #999; |
||||
font-size: 12px; |
||||
} |
||||
.c-datepicker-picker__footer{ |
||||
display: flex; |
||||
flex-direction: row; |
||||
} |
||||
.my-button{ |
||||
width: auto; |
||||
height: 23px; |
||||
line-height: 22px; |
||||
margin: 10px 6px 10px 6px; |
||||
border: 1px solid #409EFF; |
||||
color: #409EFF; |
||||
background-color: #E2F4F6; |
||||
min-width: 20px; |
||||
border-radius: 4px; |
||||
cursor: pointer; |
||||
display: inline-flex; |
||||
align-items: center; |
||||
justify-content: center; |
||||
padding-left: 5px; |
||||
padding-right: 5px; |
||||
} |
File diff suppressed because one or more lines are too long
@ -0,0 +1 @@
|
||||
@font-face{font-family:"kxiconfont";src:url("iconfont.eot?t=1534989522363");src:url("iconfont.eot?t=1534989522363#iefix") format("embedded-opentype"),url("data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAVIAAsAAAAACDAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8j0g/Y21hcAAAAYAAAABsAAABuLPUtGhnbHlmAAAB7AAAAUwAAAG8Fx4wJ2hlYWQAAAM4AAAALwAAADYSZ6+haGhlYQAAA2gAAAAcAAAAJAfeA4dobXR4AAADhAAAAA4AAAAYGAAAAGxvY2EAAAOUAAAADgAAAA4BYADIbWF4cAAAA6QAAAAfAAAAIAETAEFuYW1lAAADxAAAAUUAAAJtPlT+fXBvc3QAAAUMAAAAOwAAAE2wPds5eJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeST7zZW7438AQw9zA0AAUZgTJAQDk6QxJeJztkdENgCAMRA8BYwwL+IMM4ATOIGv45dxdA9urY3jkNddL048CIAOIyqEkIDwIMN2aBuYRK/OEU/tF3wTIJk36GHTVHRU4Uegm3R65dcavwnp9XbbLOXZnqQ5vuzucaY79kXQH6QUQEheSeJxdjj9Lw1AUxd9JmsSQVKtNG4ekSrXp1kATG0HtEKij+AWEIhgUXJxcHdx0dqj45yOog6OFqoOD4OLQb+BQN3Hz6nuW0uobHvf33jnnHgbGj9STnpnCmI5AxxwsNPfoDDv72EWTLulCSIRO3pZ6bIxNCqWmw0YtLA0GaZpufCzRvY91E4t0PYRzrPn0QB0O6dn0KAxz33nulMiNdJShWspgsPEmHI9Y8enKpKcRMLApdi6jzokn/4F+5+8PqSubTGUaYzzut6vU9ajlIRHXMQ48bJWoRa0SjkQV7rmTO3LMDDbPQu4ah1aAXUdUQVbV1GK5grIXRvyhVrX5T97SVB8LoVdUXU5BNap5EmtTKkXtNikKrQZx46QRJ67juMlwbN7mZ/KvhpE1dUWOFSHuW77qgeO6TvLftXH4ksnlMp+n2kS6wKv+ANtFbjx4nGNgZGBgAOJlq92M4/ltvjJwszCAwPUlppcQ9P99LAzMTkAuBwMTSBQALeQKjwB4nGNgZGBgbvjfwBDDwgACQJKRARWwAQBHDAJveJxjYWBgYMGCAQFoABkAAAAAAAAAFABAAG4AiADeAAB4nGNgZGBgYGMwZWBmAAEmIOYCQgaG/2A+AwAOXgFVAHicZY9NTsMwEIVf+gekEqqoYIfkBWIBKP0Rq25YVGr3XXTfpk6bKokjx63UA3AejsAJOALcgDvwSCebNpbH37x5Y08A3OAHHo7fLfeRPVwyO3INF7gXrlN/EG6QX4SbaONVuEX9TdjHM6bCbXRheYPXuGL2hHdhDx18CNdwjU/hOvUv4Qb5W7iJO/wKt9Dx6sI+5l5XuI1HL/bHVi+cXqnlQcWhySKTOb+CmV7vkoWt0uqca1vEJlODoF9JU51pW91T7NdD5yIVWZOqCas6SYzKrdnq0AUb5/JRrxeJHoQm5Vhj/rbGAo5xBYUlDowxQhhkiMro6DtVZvSvsUPCXntWPc3ndFsU1P9zhQEC9M9cU7qy0nk6T4E9XxtSdXQrbsuelDSRXs1JErJCXta2VELqATZlV44RelzRiT8oZ0j/AAlabsgAAAB4nGNgYoAALgbsgI2RiZGZkYWRlZGNkZ2BJSc1rYQlJ7G4hDUtswhIFmWmZ5SwJufkJ2czMAAApPgJ/AA=") format("woff"),url("iconfont.ttf?t=1534989522363") format("truetype"),url("iconfont.svg?t=1534989522363#iconfont") format("svg")}.kxiconfont{font-family:"kxiconfont" !important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-left:before{content:"\e619"}.icon-last:before{content:"\e61e"}.icon-first:before{content:"\e620"}.icon-right:before{content:"\e64d"}.icon-clock:before{content:"\e61f"} |
@ -0,0 +1,214 @@
|
||||
// 计算某个日期距离今天有多少天
|
||||
function calculateDays(date) { |
||||
const today = new Date(); // 获取今天的日期
|
||||
const inputDate = new Date(date); // 将传入的日期字符串转换为日期对象
|
||||
// 将日期转换为时间戳,并计算日期差距的毫秒数
|
||||
const diff = inputDate.getTime() - today.getTime(); |
||||
// 将毫秒数转换为天数差距
|
||||
const days = Math.floor(diff / (1000 * 60 * 60 * 24)); |
||||
return days + 1; |
||||
} |
||||
//获取去年第一天到现在一共多少天
|
||||
function lastYearFToToday(){ |
||||
var now = new Date(); |
||||
var lastYear = now.getFullYear() - 1; |
||||
var firstDayLastYear = new Date(lastYear, 0, 1); |
||||
var diff = Math.floor((now - firstDayLastYear) / (1000 * 60 * 60 * 24)); |
||||
return diff |
||||
} |
||||
//获取年初到现在一共多少天
|
||||
function lastYearLToToday(){ |
||||
// 获取当前时间的年份
|
||||
var currentYear = new Date().getFullYear(); |
||||
// 构造去年最后一天的日期
|
||||
var lastDayOfLastYear = new Date(currentYear - 1, 11, 31); // 11表示12月,因为月份是从0开始的
|
||||
// 计算去年最后一天距离现在的天数
|
||||
var timeDiff = new Date() - lastDayOfLastYear; |
||||
var daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24)); |
||||
return daysDiff |
||||
} |
||||
|
||||
//获取当前时间距离明年第一天还有多少天
|
||||
function toDayToNextYear(){ |
||||
// 获取当前日期
|
||||
var currentDate = new Date(); |
||||
// 获取明年第一天的日期
|
||||
var nextYear = currentDate.getFullYear() + 1; |
||||
var firstDayOfYear = new Date(nextYear, 0, 1); |
||||
// 计算当前时间距离明年第一天的时间差(以天为单位)
|
||||
var timeDifference = Math.ceil((firstDayOfYear - currentDate) / (1000 * 60 * 60 * 24)); |
||||
return timeDifference - 1 |
||||
} |
||||
|
||||
//获取上个季度第一天的具体日期
|
||||
function getLastQuarterFirstDay() { |
||||
var today = new Date(); // 获取当前日期
|
||||
var year = today.getFullYear(); // 获取当前年份
|
||||
var month = today.getMonth(); // 获取当前月份
|
||||
|
||||
// 计算前一个季度的月份范围
|
||||
var startMonth, endMonth; |
||||
if(month >= 0 && month <= 2) { // 第一季度
|
||||
startMonth = 9; // 上一年的10月
|
||||
endMonth = 11; // 上一年的12月
|
||||
year--; // 年份减1
|
||||
} else if(month >= 3 && month <= 5) { // 第二季度
|
||||
startMonth = 0; // 1月
|
||||
endMonth = 2; // 3月
|
||||
} else if(month >= 6 && month <= 8) { // 第三季度
|
||||
startMonth = 3; // 4月
|
||||
endMonth = 5; // 6月
|
||||
} else { // 第四季度
|
||||
startMonth = 6; // 7月
|
||||
endMonth = 8; // 9月
|
||||
} |
||||
|
||||
// 创建日期对象
|
||||
var firstDay = new Date(year, startMonth, 1); |
||||
return firstDay.toLocaleDateString(); |
||||
} |
||||
|
||||
|
||||
//获取上个季度最后一天距离今天有多少天
|
||||
function getDaysToLastDayOfPreviousQuarter() { |
||||
var today = new Date(); |
||||
var currentMonth = today.getMonth(); |
||||
var currentQuarter = Math.floor(currentMonth / 3); // 获取当前季度
|
||||
var lastQuarterLastMonth = (currentQuarter - 1) * 3 + 2; // 上个季度的最后一个月
|
||||
var lastQuarterLastDay = new Date(today.getFullYear(), lastQuarterLastMonth + 1, 0).getDate(); // 上个季度的最后一天
|
||||
|
||||
var timeDiff = Math.ceil((today - new Date(today.getFullYear(), lastQuarterLastMonth, lastQuarterLastDay)) / (1000 * 60 * 60 * 24)); |
||||
return timeDiff |
||||
} |
||||
|
||||
//js获取本季度最后一天距离今天有多少天
|
||||
function getDaysToThisDayOfPreviousQuarter() { |
||||
const currentDate = new Date(); |
||||
const currentMonth = currentDate.getMonth() + 1; // 注意月份范围是0-11,所以需要+1
|
||||
const currentYear = currentDate.getFullYear(); |
||||
let lastDay; |
||||
|
||||
if (currentMonth >= 1 && currentMonth <= 3) { |
||||
// 第一季度
|
||||
lastDay = new Date(currentYear, 2, 31); // 本季度最后一天为3月的31号
|
||||
} else if (currentMonth >= 4 && currentMonth <= 6) { |
||||
// 第二季度
|
||||
lastDay = new Date(currentYear, 5, 30); // 本季度最后一天为6月的30号
|
||||
} else if (currentMonth >= 7 && currentMonth <= 9) { |
||||
// 第三季度
|
||||
lastDay = new Date(currentYear, 8, 30); // 本季度最后一天为9月的30号
|
||||
} else if (currentMonth >= 10 && currentMonth <= 12) { |
||||
// 第四季度
|
||||
lastDay = new Date(currentYear, 11, 31); // 本季度最后一天为12月的31号
|
||||
} |
||||
|
||||
const year = lastDay.getFullYear(); |
||||
const month = lastDay.getMonth() + 1; |
||||
const day = lastDay.getDate(); |
||||
|
||||
return `${year}/${month}/${day}`; |
||||
} |
||||
|
||||
//上月第一天距离今天
|
||||
function getLastMonthToToday() { |
||||
// 获取今天的日期
|
||||
var today = new Date(); |
||||
// 获取上个月的年份和月份
|
||||
var year, month; |
||||
if (today.getMonth() === 0) { |
||||
year = today.getFullYear() - 1; |
||||
month = 12; |
||||
} else { |
||||
year = today.getFullYear(); |
||||
month = today.getMonth(); |
||||
} |
||||
// 构建上个月第一天的日期对象
|
||||
var firstDayOfLastMonth = new Date(year, month - 1, 1); |
||||
// 计算上个月第一天距离今天的天数
|
||||
var daysDiff = Math.ceil((today - firstDayOfLastMonth) / (1000 * 60 * 60 * 24)); |
||||
return daysDiff |
||||
} |
||||
function getDaysFromFirstDayOfMonth() { |
||||
var today = new Date(); // 获取当前日期
|
||||
var firstDay = new Date(today.getFullYear(), today.getMonth(), 1); // 获取本月第一天
|
||||
var timeDiff = today.getTime() - firstDay.getTime(); // 计算时间差
|
||||
var dayDiff = Math.ceil(timeDiff / (1000 * 3600 * 24)); // 将时间差转换为天数
|
||||
return dayDiff; |
||||
} |
||||
|
||||
//获取本月最后一天距离今天有多少天
|
||||
function getDaysUntilLastDayOfMonth() { |
||||
// 获取当前日期
|
||||
var today = new Date(); |
||||
var lastDayOfMonth = new Date(today.getFullYear(), today.getMonth()+1, 0); |
||||
var diff = lastDayOfMonth.getDate() - today.getDate(); |
||||
return diff; |
||||
} |
||||
|
||||
//修改左边快捷键的样式
|
||||
function changeUI(index = 0){ //多个日期组件同时存在一个页面时,改变这个值切换要修改哪个日期的快捷键
|
||||
e = window.event||e; |
||||
var obj = e.srcElement || e.target; |
||||
|
||||
if($(obj).is(".c-datepicker-range-separator")){ |
||||
return ; |
||||
} |
||||
|
||||
let pickers = $(".c-datepicker-popper") |
||||
let id = "changeUi"+index; |
||||
pickers[index].id = id; |
||||
$(`#${id} .c-datepicker-picker__sidebar`).children().appendTo(`#${id} .c-datepicker-picker__footer`); |
||||
$(`#${id} .c-datepicker-picker__sidebar`).remove() |
||||
let old = $(`#${id} .c-datepicker-picker__footer`).children() |
||||
for(let i=0;i<old.length;i++){ |
||||
// old[i].className = 'c-datepicker-picker__shortcut my-button'
|
||||
let txt = old[i].innerHTML |
||||
|
||||
|
||||
if(txt && txt.indexOf('清空') == -1) { |
||||
old[i].className = 'c-datepicker-picker__shortcut my-button' |
||||
}else{ |
||||
old[i].className = old[i].className + ' c-datepicker-picker__shortcut my-button' |
||||
} |
||||
|
||||
if(txt && txt.indexOf('确定') > -1) old[i].remove() |
||||
// if(txt && txt.indexOf('清空') > -1) old[i].remove()
|
||||
} |
||||
|
||||
$("#"+id).css({"display":"block"}); |
||||
|
||||
$("body").one("click",function(){ |
||||
$("#"+id).css({"display":"none"}); |
||||
}) |
||||
} |
||||
|
||||
var DATAPICKERAPI = { |
||||
// 快捷选项option,参数day是距离今天是天数
|
||||
rangeShortcutOption1: [{ |
||||
name: '今天', |
||||
day: '0,0', |
||||
}, { |
||||
name: '昨天', |
||||
day: '-1,-1', |
||||
}, { |
||||
name: '本月', |
||||
day: '-'+(getDaysFromFirstDayOfMonth()-1)+','+ getDaysUntilLastDayOfMonth(), |
||||
}, { |
||||
name: '上月', |
||||
day: '-'+ (getLastMonthToToday()-1) +',-' + getDaysFromFirstDayOfMonth(), |
||||
}, { |
||||
name: '本季度', |
||||
day:'-' +(getDaysToLastDayOfPreviousQuarter() -2)+','+ calculateDays( getDaysToThisDayOfPreviousQuarter() ), |
||||
}, { |
||||
name: '上季度', |
||||
day: calculateDays( getLastQuarterFirstDay() ) +', -' + (getDaysToLastDayOfPreviousQuarter()-1), |
||||
}, { |
||||
name: '当年', |
||||
// day: '-'+ (lastYearLToToday()-1) +', '+ toDayToNextYear(),
|
||||
day: '-'+ (lastYearLToToday()-1) +', 0', |
||||
}, { |
||||
name: '去年', |
||||
day:'-'+lastYearFToToday() + ', -'+lastYearLToToday(), |
||||
}], |
||||
}; |
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,26 @@
|
||||
/** |
||||
* Simplified Chinese translation for bootstrap-datetimepicker |
||||
* Yuan Cheung <advanimal@gmail.com> |
||||
*/ |
||||
;(function($){ |
||||
$.fn.datePicker.dates['en'] = { |
||||
days: ["Sun", 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], |
||||
months: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], |
||||
now: "now", |
||||
clear: 'clear', |
||||
headerYearLink:'', |
||||
units: ['-', ''], |
||||
button: ["confirm", "cancel"], |
||||
confirm: 'confirm', |
||||
cancel: 'cancel', |
||||
chooseDay: 'Choose Day', |
||||
chooseTime: 'Choose Time', |
||||
begin: 'Start Time', |
||||
end: 'End Time', |
||||
prevYear: 'prevYear', |
||||
prevMonth: 'prevMonth', |
||||
nextYear: 'nextYear', |
||||
nextMonth: 'nextMonth', |
||||
zero: '0:00' |
||||
}; |
||||
}(jQuery)); |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,242 @@
|
||||
var i = 0; |
||||
|
||||
window.onload=function (){ |
||||
var timer = setInterval(function(){ |
||||
var dom = $(".c-datepicker-date-editor"); |
||||
if(dom.length > 0){ |
||||
$('.J-datepicker-range-day').datePicker({ |
||||
hasShortcut: true, |
||||
format: 'YYYY-MM-DD', |
||||
isRange: true, |
||||
shortcutOptions: DATAPICKERAPI.rangeShortcutOption1 |
||||
}); |
||||
clearInterval(timer) |
||||
} |
||||
}, 500) |
||||
} |
||||
; |
||||
;(function ($) { |
||||
FR.VueDateTimeEditor = FR.extend(FR.DateTimeEditor, { |
||||
_defaultConfig: function () { |
||||
return $.extend(FR.VueDateTimeEditor.superclass._defaultConfig.apply(), { |
||||
format: "yyyy-MM-dd", |
||||
directEdit: true |
||||
}) |
||||
}, |
||||
uuid: function () { |
||||
var s = []; |
||||
var hexDigits = "0123456789abcdef"; |
||||
for (var i = 0; i < 12; i++) { |
||||
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); |
||||
} |
||||
var uuid = 'vue' + s.join(""); |
||||
return uuid; |
||||
}, |
||||
_init: function () { |
||||
try { |
||||
FR.VueDateTimeEditor.superclass._init.apply(this, arguments); |
||||
this._hideView(); |
||||
// FR.$defaultImport('/com/fr/plugin/abege/css/index.min.css', 'css');
|
||||
var dom = this.element; |
||||
var id = this.options.location = this.options.location || this.uuid(); |
||||
$(dom).attr("id", id); |
||||
var d = $("#" + id) |
||||
if (d[0]) { |
||||
this._realInit(); |
||||
} else { |
||||
this._initMe(); |
||||
} |
||||
|
||||
this.editComp.keydown(function (c) { |
||||
a.editComp[0].realValue = null |
||||
}); |
||||
$(this.editComp).keyup(function () { |
||||
if ($(this).val() == a.oriText) { |
||||
return |
||||
} |
||||
a.isValidateInput(); |
||||
a.oriText = $(this).val(); |
||||
a.fireEvent(FR.Events.AFTEREDIT) |
||||
}); |
||||
} catch (e) { |
||||
console.error(e); |
||||
} |
||||
}, |
||||
onTriggerClick: function (a) { |
||||
if (!this.isEnabled()) { |
||||
return |
||||
} |
||||
if (document.activeElement != this.editComp[0]) { |
||||
this.editComp.focus() |
||||
} |
||||
if (this.isExpanded()) { |
||||
if (FR.Browser.isIE8() && this.$view.css("visibility") == "hidden") { |
||||
this.$view.css("visibility", "visible") |
||||
} else { |
||||
this.$view.show() |
||||
} |
||||
} else { |
||||
this.$view.empty(); |
||||
this._createCalendar() |
||||
} |
||||
}, |
||||
reportEdit: function () { |
||||
var that = this; |
||||
setTimeout(function () { |
||||
that.fireEvent(FR.Events.AFTEREDIT); |
||||
}, 300) |
||||
}, |
||||
_realInit: function () { |
||||
this._showView(); |
||||
$(this.element).css("overflow", "unset") |
||||
var opt = this.options; |
||||
var id = opt.location; |
||||
opt.index = i; |
||||
var width = opt.width; |
||||
var eachWidth = width/2.5 |
||||
var height = opt.height |
||||
var dom = $('#' + id); |
||||
$(dom).html("<div style='width:"+width+"px;height:"+height+"px;line-height: "+height+"px' class=\"c-datepicker-date-editor J-datepicker-range-day \" onclick=\"changeUI("+i+")\">\n" + |
||||
" <input id=\"startTime"+i+"\" style='width:"+eachWidth+"px;color:black' placeholder=\"开始日期\" name=\"\" class=\"c-datepicker-data-input only-date\" value=\"\" readonly>\n" + |
||||
" <span class=\"c-datepicker-range-separator only-date\">~</span>\n" + |
||||
" <input id=\"endTime"+i+"\" style='width:"+eachWidth+"px;color:black' placeholder=\"结束日期\" name=\"\" class=\"c-datepicker-data-input only-date\" value=\"\" readonly>\n" + |
||||
" </div>"); |
||||
|
||||
i++; |
||||
|
||||
}, |
||||
_initMe: function () { |
||||
var id = this.options.location; |
||||
var that = this; |
||||
var intc = setTimeout(function () { |
||||
var dom = $("#" + id); |
||||
|
||||
if (dom[0]) { |
||||
that._realInit(); |
||||
} else { |
||||
that._initMe(); |
||||
} |
||||
}, 100) |
||||
}, |
||||
setText: function (text) { |
||||
this.editComp.val(1111); |
||||
}, |
||||
_hideView: function () { |
||||
if (FR.Browser.isIE8()) { |
||||
this.element.css("visibility", "hidden"); |
||||
} else { |
||||
this.element.hide(); |
||||
} |
||||
}, |
||||
_showView: function () { |
||||
if (FR.Browser.isIE8()) { |
||||
this.element.css("visibility", "show"); |
||||
} else { |
||||
var id = this.options.location; |
||||
$("#" + id).show(); |
||||
} |
||||
}, |
||||
setValue: function (value) { |
||||
try { |
||||
if (value) { |
||||
this.app.$refs.vueDateTime.value = value; |
||||
} |
||||
} catch (e) { |
||||
console.error(e); |
||||
} |
||||
}, |
||||
startEditing: function () { |
||||
this._showView() |
||||
}, |
||||
stopEditing: function () { |
||||
}, |
||||
getValue: function () { |
||||
var opt = this.options; |
||||
var id = opt.index; |
||||
let startTime = $('#startTime'+id).val(); |
||||
let endTime = $('#endTime'+id).val(); |
||||
var tmpDateArr = []; |
||||
|
||||
console.info(startTime); |
||||
if(startTime){ |
||||
tmpDateArr.push(startTime); |
||||
}else{ |
||||
tmpDateArr.push(""); |
||||
} |
||||
|
||||
|
||||
if(endTime){ |
||||
tmpDateArr.push(endTime); |
||||
}else{ |
||||
tmpDateArr.push(""); |
||||
} |
||||
|
||||
if(!startTime && !endTime){ |
||||
var tmpDateArr = []; |
||||
} |
||||
|
||||
if (this.options.returnType === 'string') { |
||||
return tmpDateArr; |
||||
} else { |
||||
var format = this.options.format; |
||||
var result = FR.date2Str(tmpDate, format); |
||||
return (result == null) ? "" : result; |
||||
} |
||||
}, |
||||
}); |
||||
$.shortcut("custom_datetime", FR.VueDateTimeEditor); |
||||
|
||||
|
||||
})(jQuery); |
||||
(function ($) { |
||||
!(function () { |
||||
try { |
||||
var provider = BI.Providers.getProvider("report.controller.provider"); |
||||
} catch (e) { |
||||
return; |
||||
} |
||||
var ImplClass = provider.getImpl(); |
||||
var Widget = BI.inherit(ImplClass, { |
||||
mounted: function () { |
||||
this.widget = FR.createWidget(BI.extend({}, this.options, { |
||||
type: 'custom_datetime', |
||||
renderEl: this.element[0], |
||||
})); |
||||
|
||||
Widget.superclass.mounted.apply(this, arguments); |
||||
}, |
||||
isValidate: function () { |
||||
return true; |
||||
}, |
||||
focusDown: function () { |
||||
return (this.widget && this.widget.focusDown.apply(this.widget, arguments)) |
||||
}, |
||||
getValue: function () { |
||||
return (this.widget && this.widget.getValue.apply(this.widget, arguments)) |
||||
}, |
||||
reset: function () { |
||||
return (this.widget && this.widget.reset.apply(this.widget, arguments)) |
||||
}, |
||||
preGetValidation: function () { |
||||
return {result: this.isValidate.apply(this, arguments)} |
||||
}, |
||||
postGetValidation: function () { |
||||
return {result: this.isValidate.apply(this, arguments)} |
||||
}, |
||||
setInteractValue: function () { |
||||
this.widget && this.widget.setValue.apply(this.widget, arguments) |
||||
}, |
||||
setControllerValue: function () { |
||||
this.widget && this.widget.setValue.apply(this.widget, arguments) |
||||
}, |
||||
resize: function (width, height) { |
||||
this.widget && this.widget.doResize({ |
||||
width: width, height: height |
||||
}); |
||||
} |
||||
}); |
||||
Widget.xtype = "custom_datetime"; |
||||
BI.shortcut(Widget.xtype, Widget); |
||||
provider.set('custom_datetime', Widget.xtype); |
||||
})(); |
||||
})(jQuery); |
@ -0,0 +1,32 @@
|
||||
Plugin-abege=Vue Date Picker Plugin |
||||
Plugin-abege_Licence_Expired=Vue Date Picker Plugin Licence Expired |
||||
Plugin-abege-Date_Format=Type/Format |
||||
Plugin-abege-Date_Format_Year=year |
||||
Plugin-abege-Date_Format_Month=month |
||||
Plugin-abege-Date_Format_Date=date |
||||
Plugin-abege-Date_Format_Dates=dates |
||||
Plugin-abege-Date_Format_Week=week |
||||
Plugin-abege-Date_Format_DateRange=daterange |
||||
Plugin-abege-Date_Format_DateRangeWeek=daterangeweek |
||||
Plugin-abege-Date_Format_DateRangeMonth=daterangemonth |
||||
Plugin-abege-Date_Format_DateTime=datetime |
||||
Plugin-abege-Date_Format_DateTimeRange=datetimerange |
||||
Plugin-abege-Design_Form_Date_Type=Type/Format |
||||
Plugin-abege-Date_Type_Date=Date |
||||
Plugin-abege-Date_Type_DateTime=DateTime |
||||
Plugin-abege-Design_Form_Start_Date=Start Date |
||||
Plugin-abege-Design_Form_Show_Date=Show Date |
||||
Plugin-abege-Design_Form_Return_Format=Return Format |
||||
Plugin-abege-Design_Form_Week_Start_Date=Week Start Date |
||||
Plugin-abege-Week_Start_Date_Monday=Monday |
||||
Plugin-abege-Week_Start_Date_Tuesday=Tuesday |
||||
Plugin-abege-Week_Start_Date_Wednesday=Wednesday |
||||
Plugin-abege-Week_Start_Date_Thursday=Thursday |
||||
Plugin-abege-Week_Start_Date_Friday=Friday |
||||
Plugin-abege-Week_Start_Date_Saturday=Saturday |
||||
Plugin-abege-Week_Start_Date_Sunday=Sunday |
||||
Plugin-abege-Design_Form_Return_Type=Return Type |
||||
Plugin-abege-Design_Form_Return_Type_String=String |
||||
Plugin-abege-Design_Form_Return_Type_Date=Date |
||||
Plugin-abege-Design_Form_Date_Separator=Date Separator |
||||
Plugin-abege-Design_Form_Configuration_Item=Configuration Item |
@ -0,0 +1,32 @@
|
||||
Plugin-abege=Vue\u65E5\u671F\u9009\u62E9\u5668\u63D2\u4EF6 |
||||
Plugin-abege_Licence_Expired=Vue\u65E5\u671F\u9009\u62E9\u5668\u63D2\u4EF6\u8BB8\u53EF\u8FC7\u671F |
||||
Plugin-abege-Date_Format=\u7C7B\u578B/\u683C\u5F0F |
||||
Plugin-abege-Date_Format_Year=year |
||||
Plugin-abege-Date_Format_Month=month |
||||
Plugin-abege-Date_Format_Date=date |
||||
Plugin-abege-Date_Format_Dates=dates |
||||
Plugin-abege-Date_Format_Week=week |
||||
Plugin-abege-Date_Format_DateRange=daterange |
||||
Plugin-abege-Date_Format_DateRangeWeek=daterangeweek |
||||
Plugin-abege-Date_Format_DateRangeMonth=daterangemonth |
||||
Plugin-abege-Date_Format_DateTime=datetime |
||||
Plugin-abege-Date_Format_DateTimeRange=datetimerange |
||||
Plugin-abege-Design_Form_Date_Type=\u7C7B\u578B/\u683C\u5F0F |
||||
Plugin-abege-Date_Type_Date=\u65E5\u671F\u578B |
||||
Plugin-abege-Date_Type_DateTime=\u65F6\u95F4\u578B |
||||
Plugin-abege-Design_Form_Start_Date=\u5F00\u59CB\u65E5\u671F |
||||
Plugin-abege-Design_Form_Show_Date=\u663E\u793A\u683C\u5F0F |
||||
Plugin-abege-Design_Form_Return_Format=\u8FD4\u56DE\u683C\u5F0F |
||||
Plugin-abege-Design_Form_Week_Start_Date=\u5468\u8D77\u59CB\u65E5 |
||||
Plugin-abege-Week_Start_Date_Monday=\u5468\u4E00 |
||||
Plugin-abege-Week_Start_Date_Tuesday=\u5468\u4E8C |
||||
Plugin-abege-Week_Start_Date_Wednesday=\u5468\u4E09 |
||||
Plugin-abege-Week_Start_Date_Thursday=\u5468\u56DB |
||||
Plugin-abege-Week_Start_Date_Friday=\u5468\u4E94 |
||||
Plugin-abege-Week_Start_Date_Saturday=\u5468\u516D |
||||
Plugin-abege-Week_Start_Date_Sunday=\u5468\u65E5 |
||||
Plugin-abege-Design_Form_Return_Type=\u8FD4\u56DE\u7C7B\u578B |
||||
Plugin-abege-Design_Form_Return_Type_String=\u5B57\u7B26\u4E32 |
||||
Plugin-abege-Design_Form_Return_Type_Date=\u65E5\u671F |
||||
Plugin-abege-Design_Form_Date_Separator=\u6570\u7EC4\u62FC\u63A5\u7B26 |
||||
Plugin-abege-Design_Form_Configuration_Item=\u914D\u7F6E\u9879 |
Loading…
Reference in new issue