From bce59769e96691317a9d261dbfd798dfdd97e534 Mon Sep 17 00:00:00 2001 From: "Link.Zhao" Date: Tue, 23 Aug 2022 14:39:23 +0800 Subject: [PATCH 1/2] =?UTF-8?q?REPORT-78625=E3=80=90=E8=BF=90=E8=90=A5?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=8C=96=E4=BA=8C=E6=9C=9F=E3=80=91=E4=BA=A4?= =?UTF-8?q?=E4=BA=92=E9=97=AE=E9=A2=98=E9=9B=86=E5=90=88=201=E3=80=81?= =?UTF-8?q?=E6=94=B9=E4=BA=86=E7=82=B9ui=202=E3=80=81=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E7=82=B9=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../alphafine/component/AlphaFineFrame.java | 6 ++- .../model/TemplateResourceDetail.java | 5 ++- .../preview/TemplateResourceDetailPane.java | 40 ++++++++++++++----- .../alphafine/preview/TemplateShopPane.java | 35 +++++++++++++--- .../impl/ProductNewsSearchManager.java | 16 ++++---- 5 files changed, 76 insertions(+), 26 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java index d653fae953..09cfbaf8a8 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java @@ -252,7 +252,7 @@ public class AlphaFineFrame extends JFrame { new LoadingRightSearchResultPane() ); - this.templateResourceSearchWorkerManager = new TemplateResourceSearchWorkerManager( + templateResourceSearchWorkerManager = new TemplateResourceSearchWorkerManager( CellType.TEMPLATE_SHOP, searchTextBean -> { return TemplateResourceSearchManager.getInstance().getSearchResult(searchTextBean.getSearchText()); @@ -658,6 +658,8 @@ public class AlphaFineFrame extends JFrame { boolean networkError; if (selectedTab.getCellType() == CellType.PRODUCT_NEWS) { networkError = productNewsSearchWorkerManager.isNetWorkError(); + } else if (selectedTab.getCellType() == CellType.TEMPLATE_SHOP) { + networkError = templateResourceSearchWorkerManager.isNetWorkError(); } else { networkError = currentSearchWorkerManager.isNetWorkError(); } @@ -669,6 +671,8 @@ public class AlphaFineFrame extends JFrame { boolean searchOver; if (selectedTab.getCellType() == CellType.PRODUCT_NEWS) { searchOver = productNewsSearchWorkerManager.isSearchOver(); + } else if (selectedTab.getCellType() == CellType.TEMPLATE_SHOP) { + searchOver = templateResourceSearchWorkerManager.isSearchOver(); } else { searchOver = currentSearchWorkerManager.isSearchOver(); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java index 74b470d53e..2f34534406 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java @@ -27,7 +27,7 @@ public class TemplateResourceDetail { private String[] tagsId; private List tagsName; private double price; - private String parentPkgName; + private String parentPkgName = ""; private String resourceUrl; public static final String ID = "id"; @@ -176,11 +176,12 @@ public class TemplateResourceDetail { // 3请求标签信息 detail.setTagsName(helper.getTemplateTagsByTemplateTagIds(detail.getTagsId())); + return detail; } catch (Exception e) { FineLoggerFactory.getLogger().error(e, e.getMessage()); } - return detail; + return null; } /** diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java index fe2e1bbc52..083b21d8cc 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java @@ -1,20 +1,25 @@ package com.fr.design.mainframe.alphafine.preview; -import com.fr.design.gui.ibutton.UIButton; +import com.fr.design.constants.UIConstants; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.i18n.Toolkit; +import com.fr.design.mainframe.alphafine.AlphaFineConstants; import com.fr.design.mainframe.alphafine.action.StartUseAction; import com.fr.design.mainframe.alphafine.component.TemplateResourceImagePanel; import com.fr.design.mainframe.alphafine.model.TemplateResourceDetail; import com.fr.design.utils.BrowseUtils; import javax.swing.BorderFactory; +import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.List; @@ -33,13 +38,15 @@ public class TemplateResourceDetailPane extends JPanel { private static final int IMAGE_HEIGHT = 170; private static final int IMAGE_WIDTH= 310; - private static final int SCROLL_PANE_WIDTH = 320; - private static final int SCROLL_PANE_HEIGHT = 150; + private static final int SCROLL_PANE_WIDTH = 315; + private static final int SCROLL_PANE_HEIGHT = 135; private static final int CONTENT_PANE_WIDTH = 320; private static final int CONTENT_PANE_HEIGHT = 180; private static final int DETAIL_PANE_HEIGHT = 110; private static final int TEXT_SCROLL_PANE_HEIGHT = 500; - private static final int PANE_WIDTH = 640; + private static final int PANE_WIDTH = 635; + private static final int BUTTON_WIDTH = 68; + private static final int BUTTON_HEIGHT = 20; private static final String GOTO_DETAIL = Toolkit.i18nText("Fine-Design_Report_AlphaFine_Template_Detail_GOTO_DETAIL"); private static final String START_USE = Toolkit.i18nText("Fine-Design_Report_AlphaFine_Template_Detail_START_USE"); @@ -55,6 +62,7 @@ public class TemplateResourceDetailPane extends JPanel { private static final Color INFO_PANE_BACKGROUND = new Color(0xf9f9f9); private static final Color INFO_PANE_FOREGROUND = new Color(0x5b5b5c); + private static final Color MORE_INFO_LINK = new Color(0x419bf9); public TemplateResourceDetailPane(TemplateResourceDetail detail) { @@ -93,7 +101,7 @@ public class TemplateResourceDetailPane extends JPanel { operatePane = new JPanel(new FlowLayout(FlowLayout.LEFT)); JLabel emptyLabel = new JLabel(); - emptyLabel.setPreferredSize(new Dimension(140, 25)); + emptyLabel.setPreferredSize(new Dimension(145, 25)); JLabel priceLabel = new JLabel(); priceLabel.setForeground(Color.RED); if (data.getPrice() == 0) { @@ -113,7 +121,7 @@ public class TemplateResourceDetailPane extends JPanel { JLabel createLinkLabel() { JLabel linkLabel = new JLabel(GOTO_DETAIL); linkLabel.setBackground(Color.WHITE); - linkLabel.setForeground(Color.BLUE); + linkLabel.setForeground(MORE_INFO_LINK); linkLabel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { @@ -129,9 +137,23 @@ public class TemplateResourceDetailPane extends JPanel { BrowseUtils.browser(url); } - UIButton createStartUseButton() { - UIButton starUseButton = new UIButton(START_USE); + JButton createStartUseButton() { + JButton starUseButton = new JButton(START_USE) { + @Override + public void paintComponent(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2d.setColor(UIConstants.FLESH_BLUE); + g2d.fillRoundRect(0, 0, getWidth(), getHeight(), 4, 4); + super.paintComponent(g2d); + } + }; + starUseButton.setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); + starUseButton.setForeground(Color.WHITE); + starUseButton.setFont(AlphaFineConstants.MEDIUM_FONT); starUseButton.addActionListener(new StartUseAction(data)); + starUseButton.setPreferredSize(new Dimension(BUTTON_WIDTH, BUTTON_HEIGHT)); + starUseButton.setContentAreaFilled(false); return starUseButton; } @@ -160,7 +182,7 @@ public class TemplateResourceDetailPane extends JPanel { content.setForeground(INFO_PANE_FOREGROUND); content.setPreferredSize(new Dimension(SCROLL_PANE_WIDTH - 10, TEXT_SCROLL_PANE_HEIGHT)); infoScrollPane = new UIScrollPane(content); - infoScrollPane.setPreferredSize(new Dimension(SCROLL_PANE_WIDTH, SCROLL_PANE_HEIGHT - 25)); + infoScrollPane.setPreferredSize(new Dimension(SCROLL_PANE_WIDTH, SCROLL_PANE_HEIGHT)); infoScrollPane.setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); } diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateShopPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateShopPane.java index 7acb305372..fb0181ddd3 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateShopPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateShopPane.java @@ -29,6 +29,7 @@ public class TemplateShopPane extends JPanel { public static final String PAGE_PANEL = "pagePane"; public static final String DETAIL_PANEL = "detailPane"; public static final String LOADING_PANEL = "loadingPane"; + public static final String FAILED_PANEL = "failedPane"; private String currentCard = Strings.EMPTY; private static final String SLASH = "/"; @@ -37,6 +38,7 @@ public class TemplateShopPane extends JPanel { private JPanel pagePane; private JPanel detailPane; private JPanel loadingPane; + private JPanel failedPane; private TemplateShopPane() { setLayout(cardLayout); @@ -96,12 +98,20 @@ public class TemplateShopPane extends JPanel { } catch (Exception e) { FineLoggerFactory.getLogger().error(e, e.getMessage()); } - // detailpane初始化 - detailPane = new TemplateResourceDetailPane(detail); - // 切换 - INSTANCE.add(detailPane, DETAIL_PANEL); - switchCard(DETAIL_PANEL); + + if (detail == null) { + setRetryAction(resource); + switchCard(FAILED_PANEL); + } else { + // detailpane初始化 + detailPane = new TemplateResourceDetailPane(detail); + // 切换 + INSTANCE.add(detailPane, DETAIL_PANEL); + switchCard(DETAIL_PANEL); + } } + + }.execute(); } @@ -119,6 +129,9 @@ public class TemplateShopPane extends JPanel { UILabel resourceLabel = new UILabel(resourceName); resourceLabel.setForeground(AlphaFineConstants.LABEL_SELECTED); + + labelNamePane.removeAll(); + labelNamePane.add(tabLabel); labelNamePane.add(slash); labelNamePane.add(resourceLabel); @@ -153,6 +166,18 @@ public class TemplateShopPane extends JPanel { return new SearchLoadingPane(); } + private void setRetryAction(TemplateResource resource) { + if (failedPane != null) { + INSTANCE.remove(failedPane); + } + failedPane = createFailedPane(resource); + INSTANCE.add(failedPane, FAILED_PANEL); + } + + private JPanel createFailedPane(TemplateResource resource) { + return new NetWorkFailedPane(()->{this.searchAndShowDetailPane(resource);}); + } + } \ No newline at end of file diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ProductNewsSearchManager.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ProductNewsSearchManager.java index deee28c35d..9611217589 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ProductNewsSearchManager.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/search/manager/impl/ProductNewsSearchManager.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.concurrent.Executors; @@ -104,7 +103,7 @@ public class ProductNewsSearchManager { } } - filterByDesignerId(productNewsList); + productNewsList = filterByDesignerId(productNewsList); return productNewsList; } @@ -120,9 +119,9 @@ public class ProductNewsSearchManager { HashMap> userGroupInfoCache = new HashMap<>(); //遍历资源,获取target下的所有用户组信息,检查是否包含设计器id - Iterator iterator = list.iterator(); - while (iterator.hasNext()) { - List targets = iterator.next().getTarget(); + List newsList = new ArrayList<>(); + for (ProductNews productNews : list) { + List targets = productNews.getTarget(); boolean targetsContainDesignerId = false; @@ -140,12 +139,11 @@ public class ProductNewsSearchManager { } } - - if (!targetsContainDesignerId) { - iterator.remove(); + if (targetsContainDesignerId) { + newsList.add(productNews); } } - return list; + return newsList; } /** From 9963592c7db46232d4c0a07897150ac765a6ecd1 Mon Sep 17 00:00:00 2001 From: "Link.Zhao" Date: Tue, 23 Aug 2022 21:28:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?REPORT-78815=E3=80=90=E8=BF=90=E8=90=A5?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=8C=96=E4=BA=8C=E6=9C=9F=E3=80=91=E8=AF=A6?= =?UTF-8?q?=E7=BB=86=E4=BF=A1=E6=81=AF=E9=87=8C=E7=9A=84=E8=B6=85=E9=93=BE?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E7=82=B9=E5=87=BB=20REPORT-78825=E3=80=90?= =?UTF-8?q?=E8=BF=90=E8=90=A5=E4=BA=A7=E5=93=81=E5=8C=96=E4=BA=8C=E6=9C=9F?= =?UTF-8?q?=E3=80=91=E4=BA=8C=E7=BA=A7=E9=A1=B5=E9=9D=A2=E7=82=B9=E5=87=BB?= =?UTF-8?q?tab=E5=90=8D=E8=BF=94=E5=9B=9E=EF=BC=8C=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E7=9A=84=E5=90=8D=E7=A7=B0=E6=98=BE=E7=A4=BA=E9=A2=9C=E8=89=B2?= =?UTF-8?q?=E4=B8=8D=E5=AF=B9=201=E3=80=81=E4=BF=AE=E6=94=B9ui=202?= =?UTF-8?q?=E3=80=81=E4=BF=AE=E6=94=B9=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/dialog/link/MessageWithLink.java | 35 +++++- .../com/fr/design/utils/LinkStrUtils.java | 4 + .../alphafine/component/AlphaFineFrame.java | 32 +++-- .../model/TemplateResourceDetail.java | 34 +++++- .../preview/TemplateResourceDetailPane.java | 114 ++++++++++-------- 5 files changed, 152 insertions(+), 67 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java index d412fb682d..3e41750585 100644 --- a/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java +++ b/designer-base/src/main/java/com/fr/design/dialog/link/MessageWithLink.java @@ -22,7 +22,12 @@ import static com.fr.design.utils.LinkStrUtils.LABEL; * Created by hades on 2020/10/23 */ public class MessageWithLink extends JEditorPane { - + + private static final String HTML_BODY = " 的话,将会自动点击匹配 url @@ -69,6 +74,34 @@ public class MessageWithLink extends JEditorPane { this(frontMessage, linkName, link, backMessage, color, font, LABEL.getForeground()); } + public MessageWithLink(String htmlText, Font font) { + this(setHtmlFont(htmlText, font)); + } + + + + /** + * 将指定的字体赋给html文本 + * 任何失败,返回原html文本 + * */ + private static String setHtmlFont(String htmlText, Font font) { + + try { + int bodyIndex = htmlText.indexOf(HTML_BODY); + StringBuilder sb = new StringBuilder(); + String left = htmlText.substring(0, bodyIndex + HTML_BODY.length()); + String right = htmlText.substring(bodyIndex + HTML_BODY.length()); + sb.append(left); + sb.append(String.format(HTML_STYLE_FORMAT, LinkStrUtils.generateStyle(Color.WHITE, font, Color.BLACK))); + sb.append(right); + return sb.toString(); + } catch (Exception e) { + FineLoggerFactory.getLogger().error(e, e.getMessage()); + } + + return htmlText; + } + public MessageWithLink(String frontMessage, String linkName, String link, String backMessage, Color backgroundColor, Font font, Color fontColor) { super("text/html", "" + frontMessage + "" + linkName + "" + backMessage + ""); diff --git a/designer-base/src/main/java/com/fr/design/utils/LinkStrUtils.java b/designer-base/src/main/java/com/fr/design/utils/LinkStrUtils.java index b7f8217b44..2bb245b449 100644 --- a/designer-base/src/main/java/com/fr/design/utils/LinkStrUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/LinkStrUtils.java @@ -42,6 +42,10 @@ public class LinkStrUtils { return "" + text + ""; } + + public static String generateLinkTagWithoutUnderLine(String link, String text) { + return "" + text + ""; + } public static String generateStyle(Color backgroundColor, Font font, Color fontColor) { diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java index 09cfbaf8a8..bfd40aea32 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/component/AlphaFineFrame.java @@ -438,11 +438,7 @@ public class AlphaFineFrame extends JFrame { labelPane.setBorder(BorderFactory.createEmptyBorder(0, 20, 0, 20)); labelPane.setBackground(Color.WHITE); labelContentPane = new JPanel(new BorderLayout()); - tabLabel = new UILabel(PRODUCT_NEWS); - tabLabel.setForeground(AlphaFineConstants.FOREGROUND_COLOR_6); - tabLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); - tabLabel.setPreferredSize(new Dimension(60, 30)); - tabLabel.setForeground(AlphaFineConstants.LABEL_SELECTED); + tabLabel = createTabLabel(PRODUCT_NEWS); labelWestPane = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0)); labelWestPane.add(tabLabel); labelContentPane.add(labelWestPane, BorderLayout.WEST); @@ -491,6 +487,14 @@ public class AlphaFineFrame extends JFrame { return showPane; } + private UILabel createTabLabel(String labelName) { + UILabel label = new UILabel(labelName); + label.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); + label.setPreferredSize(new Dimension(60, 30)); + label.setForeground(AlphaFineConstants.LABEL_SELECTED); + return label; + } + public JPanel getLabelWestPane() { return labelWestPane; } @@ -588,6 +592,7 @@ public class AlphaFineFrame extends JFrame { private void refreshLabelPane() { labelWestPane.removeAll(); + tabLabel.setForeground(AlphaFineConstants.LABEL_SELECTED); labelWestPane.add(tabLabel); } @@ -696,17 +701,20 @@ public class AlphaFineFrame extends JFrame { if (searchResultList != null) { searchResultList.requestFocus(); } - boolean hasSearchResult = true; - if (selectedTab.getCellType() == CellType.PRODUCT_NEWS) { - hasSearchResult = productNewsSearchWorkerManager.hasSearchResult(); - } else { - hasSearchResult = currentSearchWorkerManager.hasSearchResult(); - } - if (!hasSearchResult) { + if (!hasSearchResult()) { showResult(CellType.NO_RESULT.getFlagStr4None()); } + } + private boolean hasSearchResult() { + if (selectedTab.getCellType() == CellType.PRODUCT_NEWS) { + return productNewsSearchWorkerManager.hasSearchResult(); + } else if (selectedTab.getCellType() == CellType.TEMPLATE_SHOP) { + return templateResourceSearchWorkerManager.hasSearchResult(); + } else { + return currentSearchWorkerManager.hasSearchResult(); + } } private void initSearchTextField() { diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java index 2f34534406..5065f6a2b4 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java @@ -23,11 +23,13 @@ public class TemplateResourceDetail { private final TemplateResource root; private String info; private String vendor; + private String htmlText; private List detailInfo; private String[] tagsId; private List tagsName; private double price; private String parentPkgName = ""; + private String parentPkgUrl; private String resourceUrl; public static final String ID = "id"; @@ -38,6 +40,7 @@ public class TemplateResourceDetail { public static final String PRICE = "price"; public static final String NAME = "name"; public static final String PARENT_NAME = "parentName"; + public static final String PARENT_URL = "parentUrl"; public static final String TAGS_NAME = "tagsName"; public static final String URL = "url"; @@ -88,6 +91,16 @@ public class TemplateResourceDetail { return tagsName; } + public String getTagsString() { + StringBuilder sb = new StringBuilder(); + if (tagsName != null) { + for (String tag : tagsName) { + sb.append(tag + " "); + } + } + return sb.toString(); + } + public void setTagsName(List tagsName) { this.tagsName = tagsName; } @@ -120,6 +133,21 @@ public class TemplateResourceDetail { this.resourceUrl = resourceUrl; } + public String getHtmlText() { + return htmlText; + } + + public void setHtmlText(String htmlText) { + this.htmlText = htmlText; + } + + public String getParentPkgUrl() { + return parentPkgUrl; + } + + public void setParentPkgUrl(String parentPkgUrl) { + this.parentPkgUrl = parentPkgUrl; + } public static TemplateResourceDetail createByTemplateResource(TemplateResource root) { return Builder.buildByResource(root); @@ -141,11 +169,12 @@ public class TemplateResourceDetail { JSONObject resource = embedResources.getJSONObject(i); if (resourceId.equals(resource.getString(ID))) { detail.setInfo(resource.getString(INFO)); - detail.setDetailInfo(parseDetailInfo(resource.getString(DETAIL_INFO))); + detail.setHtmlText(resource.getString(DETAIL_INFO)); detail.setVendor(resource.getString(VENDOR)); detail.setPrice(resource.getDouble(PRICE)); detail.setResourceUrl(resource.getString(URL)); detail.setParentPkgName(resource.getString(PARENT_NAME)); + detail.setParentPkgUrl(resource.getString(PARENT_URL)); detail.setTagsName(Arrays.asList(resource.getString(TAGS_NAME).split(","))); break; } @@ -162,7 +191,7 @@ public class TemplateResourceDetail { // 1请求详细信息 JSONObject info = helper.getTemplateInfoById(resourceId); detail.setInfo(info.getString(INFO)); - detail.setDetailInfo(parseDetailInfo(info.getString(DETAIL_INFO))); + detail.setHtmlText(info.getString(DETAIL_INFO)); detail.setVendor(info.getString(VENDOR)); detail.setTagsId(info.getString(TAGS_ID).split(",")); detail.setPrice(info.getDouble(PRICE)); @@ -172,6 +201,7 @@ public class TemplateResourceDetail { JSONObject parentPkginfo = helper.getTemplateParentPackageByTemplateId(resourceId); if (parentPkginfo != null) { detail.setParentPkgName(parentPkginfo.getString(NAME)); + detail.setParentPkgUrl(FineMarketClientHelper.getInstance().getTemplateUrlById(parentPkginfo.getString(ID))); } // 3请求标签信息 diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java index 083b21d8cc..8d0ef703bf 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/preview/TemplateResourceDetailPane.java @@ -1,6 +1,7 @@ package com.fr.design.mainframe.alphafine.preview; import com.fr.design.constants.UIConstants; +import com.fr.design.dialog.link.MessageWithLink; import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.i18n.Toolkit; import com.fr.design.mainframe.alphafine.AlphaFineConstants; @@ -8,12 +9,14 @@ import com.fr.design.mainframe.alphafine.action.StartUseAction; import com.fr.design.mainframe.alphafine.component.TemplateResourceImagePanel; import com.fr.design.mainframe.alphafine.model.TemplateResourceDetail; import com.fr.design.utils.BrowseUtils; +import com.fr.design.utils.LinkStrUtils; +import com.fr.stable.StringUtils; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; -import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; @@ -22,7 +25,6 @@ import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.util.List; public class TemplateResourceDetailPane extends JPanel { @@ -37,12 +39,12 @@ public class TemplateResourceDetailPane extends JPanel { private static final int IMAGE_HEIGHT = 170; - private static final int IMAGE_WIDTH= 310; + private static final int IMAGE_WIDTH = 310; private static final int SCROLL_PANE_WIDTH = 315; private static final int SCROLL_PANE_HEIGHT = 135; private static final int CONTENT_PANE_WIDTH = 320; private static final int CONTENT_PANE_HEIGHT = 180; - private static final int DETAIL_PANE_HEIGHT = 110; + private static final int DETAIL_PANE_HEIGHT = 95; private static final int TEXT_SCROLL_PANE_HEIGHT = 500; private static final int PANE_WIDTH = 635; private static final int BUTTON_WIDTH = 68; @@ -64,26 +66,36 @@ public class TemplateResourceDetailPane extends JPanel { private static final Color INFO_PANE_FOREGROUND = new Color(0x5b5b5c); private static final Color MORE_INFO_LINK = new Color(0x419bf9); + private static final String HTML_FORMAT = "%s"; + private static final String DETAIL_INFO_HTML_FORMAT = "

" + DETAIL_INFO + "

%s"; + private static final String HTML_P_TAG_FORMAT = "

%s

"; + + public TemplateResourceDetailPane(TemplateResourceDetail detail) { this.data = detail; initComponent(); this.setLayout(new FlowLayout(FlowLayout.LEFT)); - this.setBorder(BorderFactory.createEmptyBorder(10,20,0,20)); + this.setBorder(BorderFactory.createEmptyBorder(10, 20, 0, 20)); this.add(imagePane); this.add(contentPane); this.add(detailInfoPane); this.setBackground(Color.WHITE); + SwingUtilities.invokeLater(()->{scrollToTop();}); } - public void refresh() { - + /** + * scrollPane创建后会拉到最底下,初始化的时候手动拉到顶 + */ + public void scrollToTop() { + infoScrollPane.getVerticalScrollBar().setValue(0); + detailInfoPane.getVerticalScrollBar().setValue(0); } private void initComponent() { createImagePane(); createContentPane(); - createDetailInfoPane(); + createDetailInfoScrollPane(); } private void createContentPane() { @@ -97,6 +109,9 @@ public class TemplateResourceDetailPane extends JPanel { contentPane.setBackground(Color.WHITE); } + /** + * 操作区:查看详情,立即使用 + */ private void createOperatePane() { operatePane = new JPanel(new FlowLayout(FlowLayout.LEFT)); @@ -118,6 +133,9 @@ public class TemplateResourceDetailPane extends JPanel { } + /** + * 查看详情 + */ JLabel createLinkLabel() { JLabel linkLabel = new JLabel(GOTO_DETAIL); linkLabel.setBackground(Color.WHITE); @@ -132,11 +150,17 @@ public class TemplateResourceDetailPane extends JPanel { return linkLabel; } - // 方便埋点 + /** + * 方便埋点 + */ void openResourceUrl(String url) { BrowseUtils.browser(url); } + + /** + * “立即使用” 按钮 + */ JButton createStartUseButton() { JButton starUseButton = new JButton(START_USE) { @Override @@ -148,7 +172,7 @@ public class TemplateResourceDetailPane extends JPanel { super.paintComponent(g2d); } }; - starUseButton.setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); + starUseButton.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); starUseButton.setForeground(Color.WHITE); starUseButton.setFont(AlphaFineConstants.MEDIUM_FONT); starUseButton.addActionListener(new StartUseAction(data)); @@ -157,62 +181,48 @@ public class TemplateResourceDetailPane extends JPanel { return starUseButton; } + private void createImagePane() { + imagePane = new TemplateResourceImagePanel(data.getRoot(), IMAGE_WIDTH, IMAGE_HEIGHT); + } + /** + * 基本信息页 + */ private void createInfoScrollPane() { - JLabel content = new JLabel(); - content.setHorizontalAlignment(SwingConstants.LEFT); - content.setVerticalAlignment(SwingConstants.TOP); - StringBuilder sb = new StringBuilder(); - sb.append("

"); - sb.append(VENDOR + data.getVendor() + LF); + StringBuilder sb = new StringBuilder(); - List tags = data.getTagsName(); - sb.append(TAGS); - for (String tag : tags) { - sb.append(tag + SPACE); + // 开发者 + sb.append(String.format(HTML_P_TAG_FORMAT, VENDOR + data.getVendor())); + // 标签 + sb.append(String.format(HTML_P_TAG_FORMAT, TAGS + data.getTagsString())); + // 所属模板包 + if (!StringUtils.isEmpty(data.getParentPkgName())) { + sb.append(String.format(HTML_P_TAG_FORMAT, PARENT_PACKAGE + LinkStrUtils.generateLinkTagWithoutUnderLine(data.getParentPkgUrl(), data.getParentPkgName()))); } - sb.append(LF); + // 信息 + sb.append(String.format(HTML_P_TAG_FORMAT, data.getInfo())); - sb.append(PARENT_PACKAGE + data.getParentPkgName() + LF); - sb.append(data.getInfo()); - sb.append("

"); - content.setText(sb.toString()); + + MessageWithLink content = new MessageWithLink(String.format(HTML_FORMAT, sb)); content.setBackground(INFO_PANE_BACKGROUND); content.setForeground(INFO_PANE_FOREGROUND); - content.setPreferredSize(new Dimension(SCROLL_PANE_WIDTH - 10, TEXT_SCROLL_PANE_HEIGHT)); infoScrollPane = new UIScrollPane(content); infoScrollPane.setPreferredSize(new Dimension(SCROLL_PANE_WIDTH, SCROLL_PANE_HEIGHT)); - infoScrollPane.setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); - } - - - - private void createImagePane() { - imagePane = new TemplateResourceImagePanel(data.getRoot(), IMAGE_WIDTH, IMAGE_HEIGHT); + infoScrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); } - private void createDetailInfoPane() { - - JLabel content = new JLabel(); - content.setHorizontalAlignment(SwingConstants.LEFT); - content.setVerticalAlignment(SwingConstants.TOP); - - StringBuilder sb = new StringBuilder(); - sb.append("

"); - sb.append(DETAIL_INFO + LF); - - List detailInfos = data.getDetailInfo(); - for (String info : detailInfos) { - sb.append(info); - } - sb.append("

"); - content.setText(sb.toString()); - content.setPreferredSize(new Dimension(PANE_WIDTH - 20, TEXT_SCROLL_PANE_HEIGHT)); - content.setBackground(Color.WHITE); + /** + * 详细信息页 + */ + private void createDetailInfoScrollPane() { + MessageWithLink content = new MessageWithLink(String.format(DETAIL_INFO_HTML_FORMAT, data.getHtmlText())); detailInfoPane = new UIScrollPane(content); detailInfoPane.setPreferredSize(new Dimension(PANE_WIDTH, DETAIL_PANE_HEIGHT)); detailInfoPane.setBackground(Color.WHITE); - detailInfoPane.setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); + detailInfoPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); } + + + } \ No newline at end of file