Browse Source

Merge branch 'release/11.0' of https://code.fineres.com/scm/~carlson/design into release/11.0

release/11.0
Carlson 2 years ago
parent
commit
42dbcd84f2
  1. 4
      designer-realize/src/main/java/com/fr/design/actions/cell/AbstractCellElementAction.java
  2. 5
      designer-realize/src/main/java/com/fr/design/actions/columnrow/ColumnWidthAction.java
  3. 4
      designer-realize/src/main/java/com/fr/design/actions/columnrow/RowHeightAction.java
  4. 135
      designer-realize/src/main/java/com/fr/design/actions/replace/action/ITChecker.java
  5. 2
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java
  6. 4
      designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java
  7. 2
      designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java
  8. 31
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java
  9. 9
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java
  10. 51
      designer-realize/src/main/java/com/fr/quickeditor/CellQuickEditor.java
  11. 4
      designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellDSColumnEditor.java

4
designer-realize/src/main/java/com/fr/design/actions/cell/AbstractCellElementAction.java

@ -9,6 +9,7 @@ import com.fr.design.mainframe.ElementCasePane;
import com.fr.design.mainframe.theme.utils.DefaultThemedTemplateCellElementCase;
import com.fr.grid.GridUtils;
import com.fr.grid.selection.CellSelection;
import com.fr.quickeditor.CellQuickEditor;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.core.SheetUtils;
import com.fr.report.elementcase.TemplateElementCase;
@ -76,6 +77,9 @@ public abstract class AbstractCellElementAction extends CellSelectionAction {
}
}
}
if (!ePane.isSelectedOneCell()) {
CellQuickEditor.record(CellQuickEditor.multipleOperationType.FILTER);
}
ePane.fireTargetModified();
}

5
designer-realize/src/main/java/com/fr/design/actions/columnrow/ColumnWidthAction.java

@ -4,8 +4,8 @@
package com.fr.design.actions.columnrow;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.grid.selection.CellSelection;
import com.fr.quickeditor.CellQuickEditor;
import com.fr.report.elementcase.ElementCase;
import com.fr.stable.unit.UNIT;
@ -32,6 +32,9 @@ public class ColumnWidthAction extends ColumnRowSizingAction {
for (int i = 0; i < columns.length; i++) {
report.setColumnWidth(columns[i], len);
}
if (columns.length > 1) {
CellQuickEditor.record(CellQuickEditor.multipleOperationType.HEIHT_AND_COLUMN);
}
}
protected UNIT getIndexLen(int index, ElementCase report){

4
designer-realize/src/main/java/com/fr/design/actions/columnrow/RowHeightAction.java

@ -6,6 +6,7 @@ package com.fr.design.actions.columnrow;
import com.fr.design.mainframe.ElementCasePane;
import com.fr.grid.selection.CellSelection;
import com.fr.quickeditor.CellQuickEditor;
import com.fr.report.elementcase.ElementCase;
import com.fr.stable.unit.UNIT;
@ -32,6 +33,9 @@ public class RowHeightAction extends ColumnRowSizingAction {
for (int i = 0; i < rows.length; i++) {
report.setRowHeight(rows[i], len);
}
if (rows.length > 1) {
CellQuickEditor.record(CellQuickEditor.multipleOperationType.HEIHT_AND_COLUMN);
}
}
@Override

135
designer-realize/src/main/java/com/fr/design/actions/replace/action/ITChecker.java

@ -0,0 +1,135 @@
package com.fr.design.actions.replace.action;
import com.fr.design.actions.replace.info.Info;
import com.fr.design.i18n.Toolkit;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 校验JS公式控件组件
* 比较用户的所有对应类别的改动不论是否选中要替换只要整体类别改动过就算模板内容改动过
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-11-03
*/
public enum ITChecker {
/**
* 控件
*/
WIDGET_CHECK_TAG(Toolkit.i18nText("Fine-Design_Basic_Widget")),
/**
* 公式
*/
FORMULA_CHECK_TAG(Toolkit.i18nText("Fine-Design_Basic_Formula")),
/**
* JS
*/
JS_CHECK_TAG(Toolkit.i18nText("Fine-Design_Replace_JS")),
/**
* 组件
*/
COMPONENT_CHECK_TAG(Toolkit.i18nText("Fine-Design_Replace_Component"))
;
String name;
ITChecker(String name) {
this.name = name;
}
/**
* 匹配
*
* @param name 对应的检查类型
* @return 对应的检查checker
*/
@Nullable
public static ITChecker match(String name) {
ITChecker[] values = ITChecker.values();
for (ITChecker value : values) {
if (value.name.equals(name)) {
return value;
}
}
return null;
}
public static List<? extends Info> checkList = new ArrayList<>();
public static Map<String, Integer> appearTimesMap = new HashMap<>();
/**
* 更新对应的check列表
*
* @param list 查找后的searchList
*/
public static void updateCheckInfo(List<? extends Info> list) {
checkList = list;
updateCheckMapFromList(list);
}
/**
* 根据列表来更新对应元素的匹配Map
*
* @param list 更新后的checkList
*/
private static void updateCheckMapFromList(List<? extends Info> list) {
appearTimesMap.clear();
for (Info info : list) {
String showStr = info.getContent().getOldShowStr();
if (appearTimesMap.containsKey(showStr)) {
//如果已经存过了就个数+1
appearTimesMap.put(showStr, appearTimesMap.get(showStr) + 1);
} else {
//没有的话就把个数初始化为1个
appearTimesMap.put(showStr, 1);
}
}
}
/**
* 判断是否修改过
*
* @param list 重新获取的当前模板最新的list
* @return 修改过返回true
*/
public boolean isChanged(List<? extends Info> list) {
if (list.size() != checkList.size()) {
//如果总的数据的数量变了,就说明肯定修改过,没必要再进行下一步
return true;
}
return isChangedCheckByMap(list);
}
/**
* 通过检查Map来比较是否修改过
*
* @param list 传入的用于比较的list
* @return 修改过则返回true
*/
private boolean isChangedCheckByMap(List<? extends Info> list) {
for (Info info : list) {
String showStr = info.getContent().getOldShowStr();
if (appearTimesMap.containsKey(showStr)) {
//如果map中存在对应的值,就抵消,个数-1
appearTimesMap.put(showStr, appearTimesMap.get(showStr) - 1);
if (appearTimesMap.get(showStr) < 0) {
//如果map中的值小于0了,就说明数量对不上,修改过
return true;
}
} else {
//如果存在map中没存的值就没必要继续下去了,肯定改过
return true;
}
}
return false;
}
}

2
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/component/ComponentType.java

@ -340,7 +340,7 @@ public enum ComponentType implements DealWithInfoValue {
String str = widget.getWidgetName();
info.updateOldStr(widget.getWidgetName(), findStr);
ShowValueUtils.updateAfterReplaceStr(info, str, findStr, replaceStr);
widget.setWidgetName(widget.getWidgetName().replaceAll(findStr, replaceStr));
widget.setWidgetName(ShowValueUtils.replaceAll(widget.getWidgetName(), findStr, replaceStr));
}
}

4
designer-realize/src/main/java/com/fr/design/actions/replace/info/ComponentInfo.java

@ -3,6 +3,7 @@ package com.fr.design.actions.replace.info;
import com.fr.design.actions.replace.action.content.component.ComponentType;
import com.fr.design.actions.replace.action.content.component.SearchComponentAction;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.actions.replace.utils.ShowValueUtils;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.JTemplate;
import com.fr.form.ui.Widget;
@ -92,7 +93,8 @@ public class ComponentInfo implements Info {
}
SearchComponentAction.getInstance().search4Infos(jTemplate);
List<ComponentInfo> list = SearchComponentAction.getInstance().getComponentInfos();
String replacedName = ((Widget)this.getContent().getReplaceObject()).getWidgetName().replace(searchStr, replaceStr);
String replacedName = ShowValueUtils.replaceAll(((Widget)this.getContent().getReplaceObject()).getWidgetName(), searchStr, replaceStr);
for (ComponentInfo info : list) {
String widgetName = ((Widget)info.getContent().getReplaceObject()).getWidgetName();
if (StringUtils.equals(replacedName, widgetName)) {

2
designer-realize/src/main/java/com/fr/design/actions/replace/info/WidgetInfo.java

@ -156,7 +156,7 @@ public class WidgetInfo implements Info, DealWithInfoValue {
return false;
}
if (!this.isWaterMark() && this.isNeed2Check()) {
String replacedName = ((Widget)this.getContent().getReplaceObject()).getWidgetName().replace(searchStr, replaceStr);
String replacedName = ShowValueUtils.replaceAll(((Widget)this.getContent().getReplaceObject()).getWidgetName(), searchStr, replaceStr);
for (WidgetName name : CheckUtils.getNeed2CheckWidgetsName(jTemplate)) {
String widgetName = name.getName();
if (StringUtils.equals(replacedName, widgetName)) {

31
designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java

@ -1,6 +1,7 @@
package com.fr.design.actions.replace.ui;
import com.fr.design.actions.replace.action.ITChecker;
import com.fr.design.actions.replace.action.ShowSearchResultAction;
import com.fr.design.actions.replace.action.setting.SettingController;
@ -37,6 +38,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import static com.fr.design.actions.replace.ui.ITTableEditorPane.editTable;
import static com.fr.design.actions.replace.ui.ITTableEditorPane.getEditTable;
/**
@ -210,10 +212,13 @@ public class ITReplaceMainDialog extends UIDialog {
* 模板内容替换相关
*/
private void replace4Content() {
String type = ((UITextField) (northPane.getFindCombobox().getEditor().getEditorComponent())).getText();
String searchStr = ((UITextField) (northPane.getFindInputCombobox().getEditor().getEditorComponent())).getText();
String replaceStr = ((UITextField) (northPane.getReplaceInputCombobox().getEditor().getEditorComponent())).getText();
clearContentCount();
if (isITReplaceValid() && checkTemplateChanged(searchContentResultList)) {
if (isITReplaceValid() && checkTemplateChanged(searchContentResultList, type)) {
ShowSearchResultAction searchAction = ShowSearchResultAction.match(GeneralUtils.objectToString(northPane.getFindCombobox().getSelectedItem()));
ITChecker.updateCheckInfo(searchAction.addMatchResult(searchStr, searchAction.showSearchValue(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate())));
if (StringUtils.equals(getSearchStr(), searchStr)) {
String str = GeneralUtils.objectToString(northPane.getFindCombobox().getSelectedItem());
//如果是控件或组件才要进行合法性校验
@ -257,7 +262,9 @@ public class ITReplaceMainDialog extends UIDialog {
if (!info.getContent().isWrongful() && info.getContent().isSelected()) {
info.setValue(info, searchStr, replaceStr, info.getContent().getOperatorArray());
}
info.getContent().setReplaced(true);
if (info.getContent().isSelected()) {
info.getContent().setReplaced(true);
}
}
northPane.getResultLabel().setText(ShowValueUtils.getResultTip(searchContentResultList.size(), contentReplaceCount, contentReplaceFailedCount));
southPanel.getTableEditorPane().update();
@ -338,10 +345,18 @@ public class ITReplaceMainDialog extends UIDialog {
}
private Boolean checkTemplateChanged(List<? extends Info> searchResultList) {
for (Info info : searchResultList) {
if (!info.getContent().isReplaced() && !info.checkValid()) {
return false;
private Boolean checkTemplateChanged(List<? extends Info> searchResultList, String type) {
ITChecker checker = ITChecker.match(type);
//对于JS、控件、组件、公式进行全量校验,不只针对当前选中的地方,这边先这样处理
if (checker != null) {
ShowSearchResultAction searchAction = ShowSearchResultAction.match(GeneralUtils.objectToString(northPane.getFindCombobox().getSelectedItem()));
return !checker.isChanged(searchAction.addMatchResult(searchStr, searchAction.showSearchValue(HistoryTemplateListCache.getInstance().getCurrentEditingTemplate())));
} else {
//其他地方走各自的校验逻辑
for (Info info : searchResultList) {
if (!info.getContent().isReplaced() && !info.checkValid()) {
return false;
}
}
}
return true;
@ -436,7 +451,9 @@ public class ITReplaceMainDialog extends UIDialog {
ShowSearchResultAction searchAction = ShowSearchResultAction.match(GeneralUtils.objectToString(northPane.getFindCombobox().getSelectedItem()));
//搜索
if (searchAction != null) {
searchContentResultList = searchAction.addMatchResult(searchStr, searchAction.showSearchValue(jTemplate));
List<? extends Info> showValueList = searchAction.showSearchValue(jTemplate);
searchContentResultList = searchAction.addMatchResult(searchStr, showValueList);
ITChecker.updateCheckInfo(searchContentResultList);
itTableEditor.add(searchContentResultList);
northPane.getResultLabel().setText(ShowValueUtils.getResultTip(searchContentResultList.size(), contentReplaceCount, contentReplaceFailedCount));
}

9
designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceNorthPanel.java

@ -5,6 +5,7 @@ import com.fr.design.actions.replace.action.setting.SettingContent;
import com.fr.design.actions.replace.action.setting.SettingController;
import com.fr.design.data.datapane.TableDataComboBox;
import com.fr.design.gui.ibutton.UIButton;
import com.fr.design.gui.icheckbox.UICheckBox;
import com.fr.design.gui.icombobox.UIComboBox;
import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.ilable.UILabel;
@ -51,7 +52,7 @@ public class ITReplaceNorthPanel {
private UILabel resultLabel;
private UIComboBox findCombobox;
private UIComboBox rangeCombobox;
private JCheckBox matchRadioButton;
private UICheckBox matchRadioButton;
private UILabel iconLabel;
private UIComboBox findInputCombobox;
private UIComboBox replaceInputCombobox;
@ -201,7 +202,7 @@ public class ITReplaceNorthPanel {
super.setEditor(new ITComboBoxEditor());
}
};
matchRadioButton = new JCheckBox(Toolkit.i18nText("Fine-Design_Replace_WildCard"));
matchRadioButton = new UICheckBox(Toolkit.i18nText("Fine-Design_Replace_WildCard"));
matchRadioButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
@ -702,11 +703,11 @@ public class ITReplaceNorthPanel {
this.rangeCombobox = rangeCombobox;
}
public JCheckBox getMatchRadioButton() {
public UICheckBox getMatchRadioButton() {
return matchRadioButton;
}
public void setMatchRadioButton(JCheckBox checkBox) {
public void setMatchRadioButton(UICheckBox checkBox) {
this.matchRadioButton = checkBox;
}

51
designer-realize/src/main/java/com/fr/quickeditor/CellQuickEditor.java

@ -455,6 +455,9 @@ public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> {
if (updateStyle) {
// 防止频繁触发保存
if (!tc.isSelectedOneCell()) {
record(multipleOperationType.FORMAT);
}
fireTargetModified();
}
@ -469,4 +472,52 @@ public abstract class CellQuickEditor extends QuickEditor<ElementCasePane> {
return formatPane;
}
/**
* 用于适配记录批量操作的埋点数据
* 真正的埋点提交方案在云端运维插件中
*
* @param type 批量操作修改类型
* @return 批量修改类型名称用于云端运维埋点记录
*/
public static String record(multipleOperationType type) {
return type.getType();
}
/**
* 批量操作的类型
*/
public enum multipleOperationType {
/**
* 批量修改格式
*/
FORMAT("format"),
/**
* 批量修改数据列的数据设置
*/
TYPE_OF_DATA("type-of-data"),
/**
* 批量修改过滤条件
*/
FILTER("filter"),
/**
* 批量修改行高列宽
*/
HEIHT_AND_COLUMN("row-height-and-column-width");
private final String type;
multipleOperationType(String type) {
this.type = type;
}
public String getType() {
return type;
}
}
}

4
designer-realize/src/main/java/com/fr/quickeditor/cellquick/CellDSColumnEditor.java

@ -319,10 +319,12 @@ public class CellDSColumnEditor extends CellQuickEditor {
public void itemStateChanged(ItemEvent e) {
CellSelection selection = (CellSelection) tc.getSelection();
Set<TemplateCellElement> allCellElements = selection.getCellElements();
groupPane.update(allCellElements);
if (e == null || e.getStateChange() == ItemEvent.DESELECTED) {
//分组-高级-自定义点确定的时候传进来null的e,但是这时候应该触发保存
groupPane.update(allCellElements);
if (!tc.isSelectedOneCell()) {
CellQuickEditor.record(multipleOperationType.TYPE_OF_DATA);
}
fireTargetModified();
}
}

Loading…
Cancel
Save