Browse Source

Pull request #10190: REPORT-75998 完善搜索报表填报属性,修改接口名称,注释掉搜索服务器相关的逻辑

Merge in DESIGN/design from ~DESTINY.LIN/design:feature/x to feature/x

* commit '49ac7e25e38f59e5f7b7c992d44cc5ea19576bbf':
  REPORT-75998 调整格式
  REPORT-75998 完善搜索报表填报属性,修改接口名称
feature/x
Destiny.Lin-林锦龙 2 years ago
parent
commit
1b7c7cf994
  1. 2
      designer-base/src/main/java/com/fr/design/actions/help/replace/ITReplaceOperator.java
  2. 2
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaReplaceObject.java
  3. 13
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaTag.java
  4. 3
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java
  5. 16
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaManager.java
  6. 18
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java
  7. 6
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java
  8. 91
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/present/SearchPresentHighlightAction.java
  9. 70
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/value/SearchValueHighlightAction.java
  10. 101
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java
  11. 3
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java
  12. 3
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java
  13. 1
      designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java
  14. 4
      designer-realize/src/main/java/com/fr/design/actions/replace/info/base/SearchTag.java
  15. 1
      designer-realize/src/main/java/com/fr/design/actions/replace/ui/ITReplaceMainDialog.java
  16. 4
      designer-realize/src/main/java/com/fr/design/actions/replace/utils/ReplaceOperator.java

2
designer-base/src/main/java/com/fr/design/actions/help/replace/ITReplaceHelper.java → designer-base/src/main/java/com/fr/design/actions/help/replace/ITReplaceOperator.java

@ -8,7 +8,7 @@ package com.fr.design.actions.help.replace;
* @version 11.0
* created by Destiny.Lin on 2022-09-27
*/
public interface ITReplaceHelper {
public interface ITReplaceOperator {
/**

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

@ -196,7 +196,7 @@ public enum FormulaReplaceObject implements DealWithInfoValue {
/**
* present
*/
PRESENT("Present") {
FORMULA_PRESENT("FormulaPresent") {
@Override
public Map<String, String> getValue(Object... o) {
HashMap<String, String> map = new HashMap<>();

13
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/FormulaTag.java

@ -1,6 +1,7 @@
package com.fr.design.actions.replace.action.content.formula;
import com.fr.chart.chartdata.MeterReportDefinition;
import com.fr.data.VerifyItem;
import com.fr.design.actions.replace.info.DealWithInfoValue;
import com.fr.design.actions.replace.info.Info;
import com.fr.design.actions.replace.info.base.SearchTag;
@ -92,6 +93,18 @@ public enum FormulaTag implements DealWithInfoValue {
definition.setEndAreaName(ShowValueUtils.replaceAll(GeneralUtils.objectToString(definition.getEndAreaName()), findStr, replaceStr));
}
}
},
/**
* 模板填报属性数据校验提示
*/
WRITE_ATTR_MESSAGE(SearchTag.WRITE_ATTR_MESSAGE) {
@Override
public void setValue(Info info, String findStr, String replaceStr, List<Pair<Integer, Integer>> operatorArray) {
if (info.getContent().getHoldObject() instanceof VerifyItem) {
VerifyItem item = (VerifyItem) info.getContent().getHoldObject();
item.setMessage(ShowValueUtils.replaceAll(item.getMessage(), findStr, replaceStr));
}
}
};
int index;

3
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/cell/SearchCellFormulaAction.java

@ -106,6 +106,9 @@ public class SearchCellFormulaAction implements SearchCellFormula {
//处理HighlightAction
SearchHighlightFormulaAction searchHighlightAction = SearchHighlightFormulaAction.getInstance();
ITContent newContent = ITContent.copy(cellInfo.getContent());
newContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"),
highlightGroup.getHighlight(i).getName());
searchHighlightAction.dealWithHighlightAction(newContent, formulaInfos, highlightAction);
}
}

16
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/SearchHighlightFormulaManager.java

@ -3,6 +3,8 @@ package com.fr.design.actions.replace.action.content.formula.highlight;
import com.fr.design.actions.replace.action.SearchAction;
import com.fr.design.actions.replace.action.SearchManager;
import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction;
import com.fr.design.actions.replace.action.content.formula.highlight.present.SearchPresentHighlightAction;
import com.fr.design.actions.replace.action.content.formula.highlight.value.SearchValueHighlightAction;
import java.util.HashMap;
import java.util.Map;
@ -17,19 +19,23 @@ import java.util.Map;
public class SearchHighlightFormulaManager implements SearchManager {
private Map<String, SearchHighlightFormula> highlightType = new HashMap<>();
public static final String HYPERLINK_HIGHLIGHT_ACTION = "HyperlinkHighlightAction";
public static final String PRESENT_HIGHLIGHT_ACTION = "PresentHighlightAction";
public static final String VALUE_HIGHLIGHT_ACTION = "ValueHighlightAction";
private SearchHighlightFormulaManager() {
//这边控件类型不做处理,在SearchWidgetFormulaAction统一处理即可
//条件属性-超级链接
register(HYPERLINK_HIGHLIGHT_ACTION, SearchJSHighlightAction.getInstance());
//条件属性-...
// TODO: 2022/9/14 条件属性的其他类型
//条件属性-形态
register(PRESENT_HIGHLIGHT_ACTION, SearchPresentHighlightAction.getInstance());
//条件属性-新值
register(VALUE_HIGHLIGHT_ACTION, SearchValueHighlightAction.getInstance());
}
@Override
public void registerAction(String tag, SearchAction searchAction) {
if (searchAction instanceof SearchHighlightFormula){
if (searchAction instanceof SearchHighlightFormula) {
register(tag, (SearchHighlightFormula) searchAction);
}
}
@ -42,7 +48,7 @@ public class SearchHighlightFormulaManager implements SearchManager {
/**
* 注册
*
* @param tag 用于匹配的类型tag
* @param tag 用于匹配的类型tag
* @param searchHighlightFormula 对应的实现类
*/
private void register(String tag, SearchHighlightFormula searchHighlightFormula) {

18
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchCommit2DBJSFormulaAction.java

@ -11,6 +11,7 @@ import com.fr.js.Commit2DBJavaScript;
import com.fr.js.JavaScript;
import com.fr.write.DBManipulation;
import com.fr.write.DMLConfigJob;
import com.fr.write.NameSubmitJob;
import com.fr.write.config.ColumnConfig;
import com.fr.write.config.DMLConfig;
@ -41,7 +42,14 @@ public class SearchCommit2DBJSFormulaAction implements SearchJSFormula {
}
}
private void dealWithDBManipulation(List<FormulaInfo> formulaInfos, ITContent content, DBManipulation dbManipulation) {
/**
* 处理DBManipulation
*
* @param formulaInfos
* @param content
* @param dbManipulation
*/
public void dealWithDBManipulation(List<FormulaInfo> formulaInfos, ITContent content, DBManipulation dbManipulation) {
DMLConfig dmlConfig = dbManipulation.getDmlConfig();
//值中的公式
dealWithColumnValue(formulaInfos, content, dmlConfig);
@ -66,12 +74,14 @@ public class SearchCommit2DBJSFormulaAction implements SearchJSFormula {
private void dealWithSubmitJob(List<FormulaInfo> formulaInfos, ITContent content, DMLConfig dmlConfig) {
for (int i = 0, len = dmlConfig.getSubmitJobCount(); i < len; i++) {
//这边自定义事件不需要处理,只处理提交事件
if (dmlConfig.getSubmitJob(i) instanceof DMLConfigJob) {
NameSubmitJob job = dmlConfig.getNameSubmitJob(i);
if (job != null && job.getSubmitJob() instanceof DMLConfigJob) {
ITContent newContent = ITContent.copy(content);
newContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_Write_Submit_Event")
Toolkit.i18nText("Fine-Design_Basic_Write_Submit_Event"),
job.getName()
);
dealWithDBManipulation(formulaInfos, newContent, (((DMLConfigJob) dmlConfig.getSubmitJob(i)).getDBManipulation()));
dealWithDBManipulation(formulaInfos, newContent, (((DMLConfigJob) job.getSubmitJob()).getDBManipulation()));
}
}
}

6
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/javascript/SearchJSHighlightAction.java

@ -34,11 +34,7 @@ public class SearchJSHighlightAction implements SearchJSFormula {
for (int i = 0; i < nameJavaScriptGroup.size(); i++) {
//单元格条件属性-属性-超级链接里面参数的公式统一判断获取一下
ITContent newContent = ITContent.copy(content);
newContent.addOtherPos(
Toolkit.i18nText("Fine-Design_Basic_Cell"),
Toolkit.i18nText("Fine-Design_Basic_Condition_Attributes"),
nameJavaScriptGroup.getNameHyperlink(i).getName()
);
newContent.addOtherPos(nameJavaScriptGroup.getNameHyperlink(i).getName());
addFormulaInfosFromJSPara(formulaInfos, newContent, nameJavaScriptGroup.getNameHyperlink(i).getJavaScript());
}
}

91
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/present/SearchPresentHighlightAction.java

@ -0,0 +1,91 @@
package com.fr.design.actions.replace.action.content.formula.highlight.present;
import com.fr.base.Formula;
import com.fr.base.present.DictPresent;
import com.fr.base.present.FormulaPresent;
import com.fr.design.actions.replace.action.content.formula.highlight.SearchHighlightFormula;
import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchJSHighlightAction;
import com.fr.design.actions.replace.action.content.formula.widget.DictionaryType;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.report.cell.TemplateCellElement;
import com.fr.report.cell.cellattr.highlight.HighlightAction;
import com.fr.report.cell.cellattr.highlight.PresentHighlightAction;
import java.util.List;
/**
* 条件属性-属性-形态
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-09-27
*/
public class SearchPresentHighlightAction implements SearchHighlightFormula {
private SearchPresentHighlightAction() {
}
@Override
public void dealWithHighlightAction(ITContent content, List<FormulaInfo> formulaInfos, HighlightAction highlightAction) {
if (highlightAction instanceof PresentHighlightAction) {
ITContent newContent = ITContent.copy(content);
newContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Present"));
PresentHighlightAction action = (PresentHighlightAction) highlightAction;
//公式形态
if (action.getPresent() instanceof FormulaPresent) {
newContent.setReplaceObject(action.getPresent());
formulaInfos.add(new FormulaInfo(newContent));
} else if (action.getPresent() instanceof DictPresent) {
//数据字典
DictPresent present = (DictPresent) action.getPresent();
if (present.getDictionary() != null) {
DictionaryType type = DictionaryType.match(present.getDictionary().getClass().getSimpleName());
if (type != null) {
type.searchFormulaFromDictionary(newContent, formulaInfos, present.getDictionary());
}
}
} else if (action.getValue() instanceof Formula) {
//普通
newContent.setReplaceObject(action.getValue());
formulaInfos.add(new FormulaInfo(newContent));
}
}
}
/**
* 获取单例
*
* @return
*/
public static SearchPresentHighlightAction getInstance() {
return SearchPresentHighlightActionEnum.SINGLETON.getInstance();
}
/**
* 枚举实现单例
*/
private enum SearchPresentHighlightActionEnum {
/**
* 单例实现
*/
SINGLETON;
private SearchPresentHighlightAction instance;
SearchPresentHighlightActionEnum() {
instance = new SearchPresentHighlightAction();
}
/**
* 拿到对象
*
* @return
*/
public SearchPresentHighlightAction getInstance() {
return instance;
}
}
}

70
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/highlight/value/SearchValueHighlightAction.java

@ -0,0 +1,70 @@
package com.fr.design.actions.replace.action.content.formula.highlight.value;
import com.fr.base.Formula;
import com.fr.design.actions.replace.action.content.formula.highlight.SearchHighlightFormula;
import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchMobileHyperlinkFormulaAction;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.report.cell.cellattr.highlight.HighlightAction;
import com.fr.report.cell.cellattr.highlight.ValueHighlightAction;
import java.util.List;
/**
* 条件属性-新值-公式
*
* @author Destiny.Lin
* @version 11.0
* created by Destiny.Lin on 2022-09-27
*/
public class SearchValueHighlightAction implements SearchHighlightFormula {
private SearchValueHighlightAction() {
}
@Override
public void dealWithHighlightAction(ITContent content, List<FormulaInfo> formulaInfos, HighlightAction highlightAction) {
if (highlightAction instanceof ValueHighlightAction) {
ValueHighlightAction action = (ValueHighlightAction) highlightAction;
if (action.getValue() instanceof Formula) {
ITContent valueContent = ITContent.copy(content);
valueContent.addOtherPos(Toolkit.i18nText("Fine-Design_Report_New_Value"));
valueContent.setReplaceObject(action.getValue());
formulaInfos.add(new FormulaInfo(valueContent));
}
}
}
/**
* 获取单例
*
* @return
*/
public static SearchValueHighlightAction getInstance() {
return SearchValueHighlightActionEnum.SINGLETON.getInstance();
}
/**
* 枚举实现单例
*/
private enum SearchValueHighlightActionEnum {
/**
* 单例实现
*/
SINGLETON;
private SearchValueHighlightAction instance;
SearchValueHighlightActionEnum() {
instance = new SearchValueHighlightAction();
}
/**
* 拿到对象
*
* @return
*/
public SearchValueHighlightAction getInstance() {
return instance;
}
}
}

101
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/formula/template/SearchTemplateFormulaAction.java

@ -5,11 +5,22 @@ import com.fr.base.Parameter;
import com.fr.base.ParameterConfig;
import com.fr.base.io.AttrMark;
import com.fr.base.iofile.attr.WatermarkAttr;
import com.fr.data.Verifier;
import com.fr.data.VerifyItem;
import com.fr.design.actions.replace.action.content.formula.highlight.javascript.SearchCommit2DBJSFormulaAction;
import com.fr.design.actions.replace.info.FormulaInfo;
import com.fr.design.actions.replace.info.base.ITContent;
import com.fr.design.i18n.Toolkit;
import com.fr.design.mainframe.JTemplate;
import com.fr.main.impl.WorkBook;
import com.fr.report.core.ReportUtils;
import com.fr.report.report.Report;
import com.fr.report.worksheet.WorkSheet;
import com.fr.report.write.BuiltInSQLSubmiter;
import com.fr.report.write.ReportWriteAttr;
import com.fr.report.write.SubmitVisitor;
import com.fr.report.write.ValueVerifier;
import com.fr.stable.CommonUtils;
import java.util.List;
@ -33,8 +44,79 @@ public class SearchTemplateFormulaAction implements SearchTemplateFormula {
ITContent content = new ITContent();
content.setTemplateName(jTemplate.getTemplateName());
content.setJumpAble(false);
//参数
searchTemplateParaFormula(jTemplate, formulaInfos, content);
//水印
searchTemplateWaterMarkFormula(jTemplate, formulaInfos, content);
//报表填报属性
searchTemplateWriteAttrFormula(jTemplate, formulaInfos, content);
}
private void searchTemplateWriteAttrFormula(JTemplate jTemplate, List<FormulaInfo> formulaInfos, ITContent content) {
if (jTemplate.getTarget() instanceof WorkBook) {
WorkBook workBook = (WorkBook) jTemplate.getTarget();
for (int i = 0, len = workBook.getReportCount(); i < len; i++) {
Report report = workBook.getReport(i);
if (report instanceof WorkSheet) {
ITContent sheetContent = ITContent.copy(content);
sheetContent.setSheetName(workBook.getReportName(i));
sheetContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Report_Write_Attributes"));
dealWorkSheetAttr(formulaInfos, sheetContent, (WorkSheet) report);
}
}
}
}
private void dealWorkSheetAttr(List<FormulaInfo> formulaInfos, ITContent sheetContent, WorkSheet report) {
ReportWriteAttr attr = report.getAttributeTarget(ReportWriteAttr.XML_TAG);
if (attr != null) {
//提交
for (int i = 0, len = attr.getSubmitVisitorCount(); i < len; i++) {
SubmitVisitor visitor = attr.getSubmitVisitor(i);
ITContent submitContent = ITContent.copy(sheetContent);
submitContent.addOtherPos(Toolkit.i18nText("FIne-Design_Basic_Submit"));
dealBuiltSQLSubmiter4Formula(formulaInfos, submitContent, visitor);
}
//数据校验
for (int i = 0, len = attr.getValueVerifierCount(); i < len; i++) {
Verifier verifier = attr.getVerifier(i);
if (verifier instanceof ValueVerifier) {
ITContent content = ITContent.copy(sheetContent);
content.addOtherPos(Toolkit.i18nText("Fine-Design_Report_Verify_Data_Verify"));
dealValueVerifier4Formula(formulaInfos, content, (ValueVerifier) verifier);
}
}
}
}
private void dealValueVerifier4Formula(List<FormulaInfo> formulaInfos, ITContent content, ValueVerifier verifier) {
ITContent verifyContent = ITContent.copy(content);
verifyContent.addOtherPos(verifier.getName());
for (int i = 0, len = verifier.getVerifyItemsCount(); i < len; i++) {
VerifyItem item = verifier.getVerifyItem(i);
if (item.getFormula() != null) {
ITContent formulaContent = ITContent.copy(verifyContent);
formulaContent.setReplaceObject(item.getFormula());
formulaInfos.add(new FormulaInfo(formulaContent));
}
if (CommonUtils.canBeFormula(item.getMessage())) {
ITContent messageContent = ITContent.copy(verifyContent);
messageContent.setReplaceObject(item.getMessage());
messageContent.setHoldObject(item);
formulaInfos.add(new FormulaInfo(messageContent));
}
}
}
private void dealBuiltSQLSubmiter4Formula(List<FormulaInfo> formulaInfos, ITContent submitContent, SubmitVisitor visitor) {
if (visitor instanceof BuiltInSQLSubmiter) {
BuiltInSQLSubmiter submiter = (BuiltInSQLSubmiter) visitor;
ITContent content = ITContent.copy(submitContent);
content.addOtherPos(submiter.getName());
SearchCommit2DBJSFormulaAction.getInstance().dealWithDBManipulation(formulaInfos, content, submiter.getDBManipulation());
}
}
@Override
@ -60,15 +142,16 @@ public class SearchTemplateFormulaAction implements SearchTemplateFormula {
}
}
Parameter[] globalParameters = ParameterConfig.getInstance().getGlobalParameters();
for (Parameter parameter : globalParameters) {
if (parameter.getValue() instanceof Formula) {
ITContent paraContent = ITContent.copy(content);
paraContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Parameter_Source_Type_Server"));
paraContent.setReplaceObject(parameter);
formulaInfos.add(new FormulaInfo(paraContent));
}
}
////全局类二期再做
//Parameter[] globalParameters = ParameterConfig.getInstance().getGlobalParameters();
//for (Parameter parameter : globalParameters) {
// if (parameter.getValue() instanceof Formula) {
// ITContent paraContent = ITContent.copy(content);
// paraContent.addOtherPos(Toolkit.i18nText("Fine-Design_Basic_Parameter_Source_Type_Server"));
// paraContent.setReplaceObject(parameter);
// formulaInfos.add(new FormulaInfo(paraContent));
// }
//}
}
/**

3
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/js/SearchWebJSAction.java

@ -59,7 +59,8 @@ public class SearchWebJSAction implements SearchJS {
private void addJSInfos2ListFromWeb(JTemplate jTemplate, List<JSInfo> jsInfos) {
dealServerWebAttr(jTemplate, jsInfos);
////服务器相关二期再做
//dealServerWebAttr(jTemplate, jsInfos);
dealTemplateWebAttr(jTemplate, jsInfos);
}

3
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/sql/SearchSQLAction.java

@ -36,7 +36,8 @@ public class SearchSQLAction implements SearchAction {
content.setTemplateName(jTemplate.getTemplateName());
content.setJumpAble(false);
addModelDataInfos2Array(jTemplate, content, sqlInfos);
addServerDataInfos2Array(content, sqlInfos);
////服务器的数据二期再查询
//addServerDataInfos2Array(content, sqlInfos);
setSqlInfos(sqlInfos);
}

1
designer-realize/src/main/java/com/fr/design/actions/replace/info/ReplaceObject.java

@ -2,7 +2,6 @@ package com.fr.design.actions.replace.info;
import com.fr.data.impl.DBTableData;
import com.fr.design.actions.replace.utils.ShowValueUtils;
import com.fr.design.data.DesignTableDataManager;
import com.fr.form.event.Listener;
import com.fr.js.JavaScriptImpl;
import com.fr.js.NameJavaScript;

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

@ -32,6 +32,10 @@ public class SearchTag {
* 终点区域名
*/
public static final int CHART_AREA_END_NAME = 5;
/**
* 模板填报属性数据校验提示
*/
public static final int WRITE_ATTR_MESSAGE = 6;
}

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

@ -1,7 +1,6 @@
package com.fr.design.actions.replace.ui;
import com.fr.design.actions.help.replace.ITReplaceHelper;
import com.fr.design.actions.replace.action.ShowSearchResultAction;
import com.fr.design.actions.replace.info.Info;

4
designer-realize/src/main/java/com/fr/design/actions/replace/utils/ReplaceOperator.java

@ -1,6 +1,6 @@
package com.fr.design.actions.replace.utils;
import com.fr.design.actions.help.replace.ITReplaceHelper;
import com.fr.design.actions.help.replace.ITReplaceOperator;
import com.fr.design.actions.replace.ui.ITReplaceMainDialog;
/**
@ -10,7 +10,7 @@ import com.fr.design.actions.replace.ui.ITReplaceMainDialog;
* @version 11.0
* created by Destiny.Lin on 2022-09-27
*/
public class ReplaceOperator implements ITReplaceHelper {
public class ReplaceOperator implements ITReplaceOperator {
/**
* 关闭面板

Loading…
Cancel
Save