Browse Source

提交开源任务材料

10.0
LAPTOP-SB56SG4Q\86185 4 years ago
parent
commit
b7ca4df3f1
  1. 5
      README.md
  2. BIN
      lib/finekit-10.0.jar
  3. 22
      plugin.xml
  4. 62
      src/main/java/com/fr/plugin/third/party/jsdifeh/components/FileDef.java
  5. 19
      src/main/java/com/fr/plugin/third/party/jsdifeh/components/WebResourceProvider.java
  6. 81
      src/main/java/com/fr/plugin/third/party/jsdifeh/config/CustomDataConfig.java
  7. 22
      src/main/java/com/fr/plugin/third/party/jsdifeh/config/DataConfigInitializeMonitor.java
  8. 63
      src/main/java/com/fr/plugin/third/party/jsdifeh/http/CustomConfigHttpHandler.java
  9. 14
      src/main/java/com/fr/plugin/third/party/jsdifeh/http/CustomHttpHandlerProvider.java
  10. 15
      src/main/java/com/fr/plugin/third/party/jsdifeh/http/CustomURLAliasProvider.java
  11. 97
      src/main/java/com/fr/plugin/third/party/jsdifeh/http/EntryTreeHttpHandler.java
  12. 56
      src/main/java/com/fr/plugin/third/party/jsdifeh/http/RequestWrapper.java
  13. 154
      src/main/java/com/fr/plugin/third/party/jsdifeh/http/SessionGlobalRequestFilterProvider.java
  14. 21
      src/main/resources/com/fr/plugin/third/party/jsdifeh/web/main.css
  15. 782
      src/main/resources/com/fr/plugin/third/party/jsdifeh/web/main.js
  16. BIN
      扁平化主题菜单定制插件.pdf

5
README.md

@ -1,3 +1,6 @@
# open-JSD-8547
JSD-8547 开源任务材料
JSD-8547 扁平主题\
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\
仅作为开发者学习参考使用!禁止用于任何商业用途!\
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系hugh处理。

BIN
lib/finekit-10.0.jar

Binary file not shown.

22
plugin.xml

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin>
<id>com.fr.plugin.third.party.jsdifeh</id>
<name><![CDATA[扁平化主题菜单定制]]></name>
<active>yes</active>
<version>0.7</version>
<env-version>10.0</env-version>
<jartime>2019-01-01</jartime>
<vendor>fr.open</vendor>
<description><![CDATA[]]></description>
<change-notes><![CDATA[]]></change-notes>
<prefer-packages>
<prefer-package>*</prefer-package>
</prefer-packages>
<extra-decision>
<GlobalRequestFilterProvider class="com.fr.plugin.third.party.jsdifeh.http.SessionGlobalRequestFilterProvider"/>
<WebResourceProvider class="com.fr.plugin.third.party.jsdifeh.components.WebResourceProvider"/>
<HttpHandlerProvider class="com.fr.plugin.third.party.jsdifeh.http.CustomHttpHandlerProvider"/>
<URLAliasProvider class="com.fr.plugin.third.party.jsdifeh.http.CustomURLAliasProvider"/>
</extra-decision>
<function-recorder class="com.fr.plugin.third.party.jsdifeh.config.DataConfigInitializeMonitor"/>
<lifecycle-monitor class="com.fr.plugin.third.party.jsdifeh.config.DataConfigInitializeMonitor"/>
</plugin>

62
src/main/java/com/fr/plugin/third/party/jsdifeh/components/FileDef.java

@ -0,0 +1,62 @@
package com.fr.plugin.third.party.jsdifeh.components;
import com.fanruan.api.log.LogKit;
import com.fr.decision.config.AppearanceConfig;
import com.fr.plugin.context.PluginContexts;
import com.fr.web.struct.Component;
import com.fr.web.struct.Filter;
import com.fr.web.struct.browser.RequestClient;
import com.fr.web.struct.category.ScriptPath;
import com.fr.web.struct.category.StylePath;
public class FileDef extends Component {
public static final FileDef KEY = new FileDef();
private FileDef() {
}
/**
* 返回需要引入的JS脚本路径
*
* @param client 请求客户端描述
* @return JS脚本路径
*/
@Override
public ScriptPath script(RequestClient client) {
return ScriptPath.build("com/fr/plugin/third/party/jsdifeh/web/main.js");
}
/**
* 返回需要引入的CSS样式路径
*
* @param client 请求客户端描述
* @return CSS样式路径
*/
@Override
public StylePath style(RequestClient client) {
// //如果不需要就直接返回 StylePath.EMPTY;
return StylePath.build("com/fr/plugin/third/party/jsdifeh/web/main.css");
}
@Override
public Filter filter() {
return new Filter() {
public boolean accept() {
//添加认证
if (!PluginContexts.currentContext().isAvailable()) {
LogKit.error("The jsdifeh plugin trial is over, please purchase a license");
return false;
}
String loginPageId = AppearanceConfig.getInstance().getThemeId();
if ("modern".equalsIgnoreCase(loginPageId)) {
return true;
}
//System.out.println(loginPageId);
return false;
}
};
}
}

19
src/main/java/com/fr/plugin/third/party/jsdifeh/components/WebResourceProvider.java

@ -0,0 +1,19 @@
package com.fr.plugin.third.party.jsdifeh.components;
import com.fr.decision.fun.impl.AbstractWebResourceProvider;
import com.fr.decision.web.MainComponent;
import com.fr.stable.fun.Authorize;
import com.fr.web.struct.Atom;
@Authorize(callSignKey = "com.fr.plugin.third.party.jsdifeh")
public class WebResourceProvider extends AbstractWebResourceProvider {
@Override
public Atom attach() {
return MainComponent.KEY;
}
@Override
public Atom client() {
return FileDef.KEY;
}
}

81
src/main/java/com/fr/plugin/third/party/jsdifeh/config/CustomDataConfig.java

@ -0,0 +1,81 @@
package com.fr.plugin.third.party.jsdifeh.config;
import com.fr.config.*;
import com.fr.config.holder.Conf;
import com.fr.config.holder.factory.Holders;
import java.awt.*;
/**
* 配置数据保存
*/
@Visualization(category = "扁平化主题菜单定制配置")
public class CustomDataConfig extends DefaultConfiguration {
public String getNameSpace() {
return this.getClass().getName();
}
private static volatile CustomDataConfig config = null;
public static CustomDataConfig getInstance() {
if (config == null) {
config = ConfigContext.getConfigInstance(CustomDataConfig.class);
}
return config;
}
@Identifier(value = "globalDirectoryCover", name = "全局目录封面", description = "", status = Status.SHOW)
private Conf<Boolean> globalDirectoryCover = Holders.simple(false);
@Identifier(value = "fontSize", name = "字体大小", description = "", status = Status.SHOW)
private Conf<Integer> fontSize = Holders.simple(12);
@Identifier(value = "fontBold", name = "字体加粗", description = "", status = Status.SHOW)
private Conf<Boolean> fontBold = Holders.simple(false);
@Identifier(value = "fontColor", name = "字体颜色", description = "", status = Status.SHOW)
private Conf<Color> fontColor = Holders.simple(Color.BLACK);
public Boolean isGlobalDirectoryCover() {
return globalDirectoryCover.get();
}
public void setGlobalDirectoryCover(Boolean globalDirectoryCover) {
this.globalDirectoryCover.set(globalDirectoryCover);
}
public Integer getFontSize() {
return fontSize.get();
}
public void setFontSize(Integer fontSize) {
this.fontSize.set(fontSize);
}
public Boolean isFontBold() {
return fontBold.get();
}
public void setFontBold(Boolean fontBold) {
this.fontBold.set(fontBold);
}
public Color getFontColor() {
return fontColor.get();
}
public void setFontColor(Color value) {
this.fontColor.set(value);
}
@Override
public Object clone() throws CloneNotSupportedException {
CustomDataConfig cloned = (CustomDataConfig) super.clone();
cloned.fontSize = (Conf<Integer>) fontSize.clone();
cloned.fontBold = (Conf<Boolean>) fontBold.clone();
cloned.fontColor = (Conf<Color>) fontColor.clone();
cloned.globalDirectoryCover = (Conf<Boolean>) globalDirectoryCover.clone();
return cloned;
}
}

22
src/main/java/com/fr/plugin/third/party/jsdifeh/config/DataConfigInitializeMonitor.java

@ -0,0 +1,22 @@
package com.fr.plugin.third.party.jsdifeh.config;
import com.fr.intelli.record.Focus;
import com.fr.intelli.record.Original;
import com.fr.plugin.context.PluginContext;
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor;
import com.fr.record.analyzer.EnableMetrics;
@EnableMetrics
public class DataConfigInitializeMonitor extends AbstractPluginLifecycleMonitor {
@Override
@Focus(id = "com.fr.plugin.third.party.jsdifeh", text = "plugin-jsd-ifeh", source = Original.PLUGIN)
public void afterRun(PluginContext pluginContext) {
CustomDataConfig.getInstance();
}
@Override
public void beforeStop(PluginContext pluginContext) {
}
}

63
src/main/java/com/fr/plugin/third/party/jsdifeh/http/CustomConfigHttpHandler.java

@ -0,0 +1,63 @@
package com.fr.plugin.third.party.jsdifeh.http;
import com.fr.decision.fun.impl.BaseHttpHandler;
import com.fr.json.JSONObject;
import com.fr.plugin.third.party.jsdifeh.config.CustomDataConfig;
import com.fr.third.springframework.web.bind.annotation.RequestMethod;
import com.fr.web.utils.WebUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.Color;
/**
*
*/
public class CustomConfigHttpHandler extends BaseHttpHandler {
@Override
public RequestMethod getMethod() {
return RequestMethod.GET;
}
@Override
public String getPath() {
return "/jsdifeh/config";
}
@Override
public boolean isPublic() {
return true;
}
@Override
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception {
res.setContentType("application/json; charset=utf-8");
JSONObject configJson = new JSONObject();
String fontSize = CustomDataConfig.getInstance().getFontSize() + "px";
int fontWeight = 400;
if (CustomDataConfig.getInstance().isFontBold()) {
fontWeight = 700;
}
String fontColor = toHexColor(CustomDataConfig.getInstance().getFontColor());
configJson.put("fontSize", fontSize);
configJson.put("fontWeight", fontWeight);
configJson.put("fontColor", fontColor);
WebUtils.printAsJSON(res, configJson);
}
private String toHexColor(Color color) {
String value = "#" + toHex(color.getRed()) + toHex(color.getGreen()) + toHex(color.getBlue());
value = value.toLowerCase();
return value;
}
private String toHex(int value) {
String hex = Integer.toHexString(value);
if (hex.length() <= 1) {
hex = "0" + hex;
}
return hex;
}
}

14
src/main/java/com/fr/plugin/third/party/jsdifeh/http/CustomHttpHandlerProvider.java

@ -0,0 +1,14 @@
package com.fr.plugin.third.party.jsdifeh.http;
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider;
import com.fr.decision.fun.impl.BaseHttpHandler;
public class CustomHttpHandlerProvider extends AbstractHttpHandlerProvider {
@Override
public BaseHttpHandler[] registerHandlers() {
return new BaseHttpHandler[]{
new CustomConfigHttpHandler(),
new EntryTreeHttpHandler()
};
}
}

15
src/main/java/com/fr/plugin/third/party/jsdifeh/http/CustomURLAliasProvider.java

@ -0,0 +1,15 @@
package com.fr.plugin.third.party.jsdifeh.http;
import com.fr.decision.fun.impl.AbstractURLAliasProvider;
import com.fr.decision.webservice.url.alias.URLAlias;
import com.fr.decision.webservice.url.alias.URLAliasFactory;
public class CustomURLAliasProvider extends AbstractURLAliasProvider {
@Override
public URLAlias[] registerAlias() {
return new URLAlias[]{
URLAliasFactory.createPluginAlias("/jsdifeh/config", "/jsdifeh/config", true),
URLAliasFactory.createPluginAlias("/jsdifeh/entry/tree", "/jsdifeh/entry/tree", true)
};
}
}

97
src/main/java/com/fr/plugin/third/party/jsdifeh/http/EntryTreeHttpHandler.java

@ -0,0 +1,97 @@
package com.fr.plugin.third.party.jsdifeh.http;
import com.fanruan.api.util.StringKit;
import com.fr.decision.fun.impl.BaseHttpHandler;
import com.fr.decision.webservice.bean.entry.DirectoryBean;
import com.fr.decision.webservice.bean.entry.EntryBean;
import com.fr.decision.webservice.v10.entry.EntryService;
import com.fr.json.JSONArray;
import com.fr.json.JSONObject;
import com.fr.json.revise.EmbedJson;
import com.fr.plugin.third.party.jsdifeh.config.CustomDataConfig;
import com.fr.third.fasterxml.jackson.core.JsonProcessingException;
import com.fr.third.springframework.web.bind.annotation.RequestMethod;
import com.fr.web.controller.decision.api.config.AppearanceResource;
import com.fr.web.utils.WebUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
*
*/
public class EntryTreeHttpHandler extends BaseHttpHandler {
@Override
public RequestMethod getMethod() {
return RequestMethod.GET;
}
@Override
public String getPath() {
return "/jsdifeh/entry/tree";
}
@Override
public boolean isPublic() {
return true;
}
@Override
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception {
res.setContentType("application/json; charset=utf-8");
List<EntryBean> entryBeans = EntryService.getInstance().getEntryTree(req);
boolean globalOption = CustomDataConfig.getInstance().isGlobalDirectoryCover();
String coverId = "";
if (globalOption) {
coverId = getGlobalCoverId();
}
JSONObject dataJson = getDataJson(entryBeans, globalOption, coverId);
WebUtils.printAsJSON(res, dataJson);
//AppearanceResource
}
private String getGlobalCoverId() throws Exception {
String coverId = "";
List<DirectoryBean> directoryBeans = EntryService.getInstance().getEntrysWithCoverIcon("decision-directory-root");
if ((directoryBeans == null) || (directoryBeans.size() <= 0)) {
return "";
}
String globalName = "全局目录封面";
DirectoryBean directoryBean;
for (int i = 0, max = directoryBeans.size() - 1; i <= max; i++) {
directoryBean = directoryBeans.get(i);
if (globalName.equalsIgnoreCase(directoryBean.getText())) {
coverId = directoryBean.getCover();
break;
}
}
if (StringKit.isEmpty(coverId)) {
coverId = "";
}
return coverId;
}
private JSONObject getDataJson(List<EntryBean> entryBeans, boolean globalOption, String coverId) throws JsonProcessingException {
JSONArray dirJsons = new JSONArray();
JSONObject dataJson = new JSONObject();
dataJson.put("data", dirJsons);
if ((entryBeans == null) || (entryBeans.size() <= 0)) {
return dataJson;
}
JSONObject jsonObject;
EntryBean entryBean;
for (int i = 0, max = entryBeans.size() - 1; i <= max; i++) {
entryBean = entryBeans.get(i);
jsonObject = new JSONObject(EmbedJson.MAPPER.writeValueAsString(entryBean));
if (globalOption) {
jsonObject.put("cover", coverId);
}
dirJsons.add(jsonObject);
}
return dataJson;
}
}

56
src/main/java/com/fr/plugin/third/party/jsdifeh/http/RequestWrapper.java

@ -0,0 +1,56 @@
package com.fr.plugin.third.party.jsdifeh.http;
import com.fr.general.IOUtils;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.*;
public class RequestWrapper extends HttpServletRequestWrapper {
private final String body;
public RequestWrapper(HttpServletRequest request) throws IOException {
super(request);
try {
InputStream inputStream = request.getInputStream();
body = IOUtils.inputStream2String(inputStream);
} catch (IOException ex) {
throw ex;
}
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());
ServletInputStream servletInputStream = new ServletInputStream() {
public boolean isFinished() {
return false;
}
public boolean isReady() {
return false;
}
public void setReadListener(ReadListener readListener) {
}
public int read() throws IOException {
return byteArrayInputStream.read();
}
};
return servletInputStream;
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(this.getInputStream()));
}
public String getBody() {
return this.body;
}
}

154
src/main/java/com/fr/plugin/third/party/jsdifeh/http/SessionGlobalRequestFilterProvider.java

@ -0,0 +1,154 @@
package com.fr.plugin.third.party.jsdifeh.http;
import com.fanruan.api.log.LogKit;
import com.fanruan.api.util.StringKit;
import com.fr.decision.authority.AuthorityContext;
import com.fr.decision.authority.data.Authority;
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider;
import com.fr.decision.webservice.bean.entry.DirectoryBean;
import com.fr.decision.webservice.bean.entry.EntryBean;
import com.fr.decision.webservice.utils.ControllerFactory;
import com.fr.decision.webservice.v10.entry.EntryService;
import com.fr.decision.webservice.v10.user.UserService;
import com.fr.json.JSONObject;
import com.fr.plugin.third.party.jsdifeh.config.CustomDataConfig;
import com.fr.stable.web.Device;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public class SessionGlobalRequestFilterProvider extends AbstractGlobalRequestFilterProvider {
private String globalMenuId = "";
@Override
public void init(FilterConfig filterConfig) {
this.globalMenuId = getGlobalMenuId();
}
@Override
public String filterName() {
return "com.fr.plugin.third.party.jsdifeh";
}
@Override
public String[] urlPatterns() {
return new String[]{"/decision", "/decision/*"};
}
@Override
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) {
try {
String fullUrl = getRequestFullUrl(req);
String method = req.getMethod();
LogKit.info("扁平化主题菜单定制,请求链接:" + method + " " + fullUrl);
if (!"PUT".equals(method)) {
filterChain.doFilter(req, res);
return;
}
String url = req.getRequestURL().toString();
if (url.indexOf("/decision/v10/config/appearance/entry/style") < 0) {
filterChain.doFilter(req, res);
return;
}
boolean globalOption = CustomDataConfig.getInstance().isGlobalDirectoryCover();
if (!globalOption) {
filterChain.doFilter(req, res);
return;
}
RequestWrapper requestWrapper = new RequestWrapper(req);
String reqBody = requestWrapper.getBody();
if (StringKit.isEmpty(reqBody)) {
filterChain.doFilter(requestWrapper, res);
return;
}
JSONObject bodyJson = new JSONObject(reqBody);
String menuId = bodyJson.getString("id");
if (StringKit.isEmpty(menuId)) {
filterChain.doFilter(requestWrapper, res);
return;
}
if (!StringKit.equalsIgnoreCase(menuId, this.globalMenuId)) {
filterChain.doFilter(requestWrapper, res);
return;
}
String coverId = bodyJson.getString("cover");
updateAllCover(coverId);
filterChain.doFilter(requestWrapper, res);
} catch (Exception e) {
LogKit.error("扁平化主题菜单定制出错," + e.getMessage(), e);
}
}
private void updateAllCover(String coverId) throws Exception {
List<EntryBean> entryBeans = getAllEntryTree();
EntryBean entryBean;
for (int i = 0, max = entryBeans.size() - 1; i <= max; i++) {
entryBean = entryBeans.get(i);
if (entryBean.getEntryType() == 3) {
continue;
}
editEntryCover(entryBean.getId(), coverId);
}
}
private List<EntryBean> getAllEntryTree() throws Exception {
String userId = UserService.getInstance().getAdminUserIdList().get(0);
return ControllerFactory.getInstance().getEntryController(userId).getEntryTree(userId, Device.PC);
}
private void editEntryCover(String menuId, String coverId) throws Exception {
Authority var2 = (Authority) AuthorityContext.getInstance().getAuthorityController().getById(menuId);
var2.setCoverId(coverId);
AuthorityContext.getInstance().getAuthorityController().update(var2);
}
private String getRequestFullUrl(HttpServletRequest req) {
if (req == null) {
return "";
}
String query = req.getQueryString();
if ("null".equalsIgnoreCase(query) || StringKit.isEmpty(query)) {
query = "";
} else {
query = "?" + query;
}
String url = req.getRequestURL().toString() + query;
return url;
}
private String getGlobalMenuId() {
String menuId = "";
try {
List<DirectoryBean> directoryBeans = EntryService.getInstance().getEntrysWithCoverIcon("decision-directory-root");
if ((directoryBeans == null) || (directoryBeans.size() <= 0)) {
return "";
}
String globalName = "全局目录封面";
DirectoryBean directoryBean;
for (int i = 0, max = directoryBeans.size() - 1; i <= max; i++) {
directoryBean = directoryBeans.get(i);
if (globalName.equalsIgnoreCase(directoryBean.getText())) {
menuId = directoryBean.getId();
break;
}
}
if (StringKit.isEmpty(menuId)) {
menuId = "";
}
} catch (Exception e) {
LogKit.error("扁平化主题菜单定制,获取全局目录封面菜单ID出错," + e.getMessage());
}
return menuId;
}
}

21
src/main/resources/com/fr/plugin/third/party/jsdifeh/web/main.css

@ -0,0 +1,21 @@
.jsdifeh-report-name{
position: absolute;
z-index: 1000;
width: 208px !important;
top: 60px !important;
left: 5px !important;
}
.jsdifeh-zoom-in {
width: 70px !important;
}
.jsdifeh-tabs {
left: 70px !important;
}
.jsdifeh-report-name > .bi-text{
white-space: normal !important;
text-align:center !important;
}

782
src/main/resources/com/fr/plugin/third/party/jsdifeh/web/main.js

@ -0,0 +1,782 @@
Dec.Utils = Dec.Utils || {};
Dec.Utils_jsdifeh = Dec.Utils_jsdifeh || {};
Dec.Utils_jsdifeh.config = {};
BI.extend(Dec.Utils_jsdifeh, {
getConfig: function (e) {
Dec.reqGet("/url/jsdifeh/config", "", e)
},
getCompleteDirectoryTree: function (e) {
Dec.reqGet("/url/jsdifeh/entry/tree", "", e)
}
});
!(function () {
var e = BI.inherit(BI.Widget, {
props: {
$testId: "dec-frame-modern-main-cards-section",
entryName: null,
items: [],
el: {
type: "dec.frame.modern.main_cards.section.card_item",
//width: 150,
//height: 135
width: 218,
height: 135
},
fontSize: "12px",
fontWeight: 400,
fontColor: "#000000"
},
beforeRender: function (callback) {
// 在执行render创建子组件之前的钩子函数
var i = this;
Dec.Utils_jsdifeh.getConfig(function (e) {
//debugger;
var config = e;
i.options.fontSize = config.fontSize;
i.options.fontWeight = config.fontWeight;
i.options.fontColor = config.fontColor;
callback();
})
},
render: function () {
var t = this
, e = this.options;
return BI.isNull(e.entryName) ? {
type: "bi.vertical",
hgap: 10,
items: [{
type: "bi.button_group",
chooseType: -1,
items: this._createItems(e.items),
layouts: [{
type: "bi.left",
rgap: 10,
bgap: 10
}],
listeners: [{
eventName: "EVENT_CHANGE",
action: function (e) {
t.handleSelect(e)
}
}]
}]
} : {
type: "bi.vertical",
hgap: 10,
vgap: 10,
items: [{
type: "bi.label",
text: e.entryName,
textAlign: "left",
cls: "bi-font-bold bi-border-bottom dec-frame-text dec-frame-split-border",
height: 36
}, {
type: "bi.button_group",
chooseType: -1,
items: this._createItems(e.items),
layouts: [{
type: "bi.left",
rgap: 10,
bgap: 10
}],
listeners: [{
eventName: "EVENT_CHANGE",
action: function (e) {
t.handleSelect(e)
}
}]
}]
}
},
_createItems: function (e) {
var _i = this;
var items = BI.map(e, function (e, t) {
return BI.extend({
footer: {
el: {
baseCls: "jsdifeh-report-name",
//cls: _i._getFontWeightBold(),
type: "bi.label",
text: t.text,
//textAlign: "center",
//whiteSpace: "normal",
css: {
"font-size": _i.options.fontSize,
"font-weight": _i.options.fontWeight,
"color": _i.options.fontColor
}
},
height: 0
},
title: t.textTitle || t.text
},
this.options.el, t)
}, this);
return items;
},
_getFontWeightBold: function () {
if (this.options.fontWeight == 700) {
return "dec-font-weight-bold";
}
return "";
},
handleSelect: function (i) {
var e = BI.find(this.options.items, function (e, t) {
return t.id === i
});
BI.Providers.getProvider("dec.provider.tab_pane").behaviour("addCardByName", e.id, BI.extend({
text: e.text,
value: e.id,
entry: e.entryType,
entryDetails: e,
cardType: {
src: e.iframeSrc
}
}, e)),
this.fireEvent("EVENT_CHANGE", i)
}
});
BI.shortcut("dec.frame.modern.main_cards.section_jsdifeh", e)
})();
!(function () {
var e = BI.inherit(BI.BasicButton, {
props: {
cls: "dec-frame-modern-zoomer-zoom-in dec-tab-bar jsdifeh-zoom-in",
$testId: "dec-frame-modern-zoomer-zoom-in"
}, _store: function () {
return BI.Models.getModel("dec.model.frame.modern.zoomer.zoom_in_out")
}, render: function () {
this.options;
return {
//type: "bi.icon_button",
//cls: "modern-zoom-in-font",
//title: "返回目录",
type: "bi.label",
text: "返回目录",
textAlign: "center",
}
}, doClick: function () {
this.store.zoomIn(), BI.FullScreen.isFullScreen() && BI.FullScreen.exitFullScreen()
}
});
BI.shortcut("dec.frame.modern.zoom_in_jsdifeh", e)
})();
!(function () {
var e = BI.inherit(BI.BasicButton, {
props: {
baseCls: "dec-frame-modern-zoom-out dec-frame-panel",
$testId: "dec-frame-modern-zoom-out",
width: 70,
height: 44
}, _store: function () {
return BI.Models.getModel("dec.model.frame.modern.zoomer.zoom_in_out")
}, render: function () {
var e = this.options;
return {
//type: "bi.icon_label", cls: "modern-zoom-out-font", height: e.height, width: e.width
type: "bi.label",
text: "返回报表",
textAlign: "center",
height: e.height,
width: e.width
}
}, doClick: function () {
this.fireEvent("EVENT_CHANGE"), this.store.zoomOut()
}
});
BI.shortcut("dec.frame.modern.zoom_out_jsdifeh", e)
})();
!(function () {
var e = function () {
this.registerCustomPanelMenu = function (e, t) {
BI.config("dec.constant.frame.modern.aside.tabs", function (e) {
return e.concat([t])
})
};
var i = null;
this.$get = function () {
return BI.inherit(BI.OB, {
createCard: function (i) {
var e = BI.Constants.getConstant("dec.constant.workbench.panel.tabs"),
n = {type: "dec.frame.modern.main_cards.flatten_entry_list"};
return BI.some(e, function (e, t) {
t.value === i && (n = BI.extend({}, t, {type: t.cardType}))
}, this), n
}, registerEntryPaneInstance: function (e) {
i = e
}, behaviour: function (e) {
var t = Array.prototype.slice.call(arguments, 1);
return i[e].apply(i, t)
}, initConfig: function (e) {
BI.config("dec.constant.menu.items", function (e) {
return BI.some(e, function (e, t) {
if ("directory" === t.value) return t.cardType = "dec.frame.modern", !0
}), e
}), BI.config("dec.provider.tab_pane", function (e) {
// debugger;
e.registerTabPaneComponent({
buttons: {
left: [{
type: "dec.frame.modern.zoom_in_jsdifeh",
width: 70,
height: 30
}]
}
})
})
}
})
}
};
BI.provider("dec.provider.frame.modern_jsdifeh", e);
})();
!(function () {
var e = BI.inherit(BI.Widget, {
props: {baseCls: "dec-frame-modern", $testId: "dec-frame-modern", resizeable: !0}, _store: function () {
return BI.Models.getModel("dec.model.frame.modern")
}, watch: {
isPin: function (e) {
this.resizer.setResizeable(e)
}
}, created: function () {
BI.Providers.getProvider("dec.provider.frame.modern_jsdifeh").registerEntryPaneInstance(this)
}, render: function () {
var t = this;
this.options;
this._assertZommerRender();
var e = BI.get(BI.Providers.getProvider("dec.provider.layout").getLayoutConfig(), "config4Frame.center");
return {
type: "dec.common.drag_resize",
$value: "frame-modern",
ref: function (e) {
t.resizer = e
},
resizeable: this.model.isPin,
open: this.model.isPin,
leftWidth: e.left.width || 240,
maxSize: e.left.maxSize,
minSize: e.left.minSize,
content: {type: "dec.frame.modern.main_cards", vgap: 10},
popup: {type: "dec.frame.modern.aside", entryMode: this.model.themeConfig.entryMode},
listeners: [{
eventName: "EVENT_RESIZE", action: function (e) {
BI.Cache.setItem(DecCst.Web.Cache.DIRECTORY_WIDTH, e)
}
}]
}
}, _assertZommerRender: function () {
this.tabContainer = BI.createWidget({type: "dec.frame.modern.zoomer"}), BI.createWidget({
type: "bi.absolute",
element: "#wrapper",
items: [{el: this.tabContainer, top: "100%", left: "100%"}]
})
}, keepalive: function () {
return !0
}, beforeDestroy: function () {
this.tabContainer && this.tabContainer.destroy(), Dec.tabPaneModel.openedTabs = []
}
});
BI.shortcut("dec.frame.modern_jsdifeh", e);
})();
!(function () {
var i = BI.inherit(BI.Widget, {
props: {baseCls: "dec-frame-tab-pane", $testId: "dec-frame-tab-pane", buttons: {left: [], right: []}},
_store: function () {
return BI.Models.getModel("dec.model.frame.tab_pane", this.options)
},
watch: {
tabs: function (e) {
this._populate(e)
}, activeCard: function (e) {
BI.isNull(e) || (this.isCardExisted(e.value) || this._addCardByName(e.value, e), this._showCardByName(e.value, e))
}, inactiveTabs: function () {
BI.each(this.model.inactiveTabs, function (e, t) {
this._deleteCardByName(t)
}, this)
}
},
render: function () {
var t = this, e = this.options;
return {
type: "bi.absolute", items: [{
el: {
type: "dec.frame.tab_pane.card.display", ref: function (e) {
t.cards = e
}, items: BI.isNotNull(this.model.activeCard) ? [this.model.activeCard] : []
}, left: 0, right: 0, bottom: 0, top: 31
}, {
el: {
type: "bi.htape",
height: 30,
cls: "dec-frame-tab-pane-tabs-container dec-frame-tab-pane-split-line",
$testId: "dec-frame-tab-pane-tabs-container",
ref: function (e) {
t.header = e
},
items: e.buttons.left.concat([{
type: "dec.frame.tab_pane.tabs",
baseCls: "jsdifeh-tabs",
items: this.model.tabs,
ref: function (e) {
t.tabs = e
}
}]).concat(e.buttons.right)
}, top: 0, left: 0, right: 0
}]
}
},
_addCardByName: function (e, t) {
this.cards.addCardByName(e, t)
},
_showCardByName: function (e, t) {
this.cards.showCardByName(e, t), this.tabs.setValue(e)
},
_deleteCardByName: function (e) {
this.cards.deleteCardByName(e)
},
_populate: function (e) {
this.tabs.populate(e)
},
_dealWithTabsFullScreen: function (e) {
var t = this, i = null;
function n(e) {
BI.isNull(i) && (i = setTimeout(function () {
e()
}, 300))
}
function o() {
clearTimeout(i), i = null
}
e ? (this.cards.element.css({top: 0}), this.header.element.css("opacity", 0), this.header.element.css({top: -29}), this.header.element.hover(function () {
o(), BI.FullScreen.isFullScreen() && n(function () {
t.header.element.css("opacity", 1), t.header.element.css({top: 0})
})
}, function () {
o(), n(function () {
BI.FullScreen.isFullScreen() && (t.header.element.css("opacity", 0), t.header.element.css({top: -29}))
})
})) : (o(), this.header.element.unbind("mouseenter").unbind("mouseleave"), this.header.element.css("opacity", 1), this.header.element.css({top: 0}), this.cards.element.css({top: 31}))
},
fullscreen: function (e) {
var t = this;
e ? BI.FullScreen.requestFullScreen(this, function (e) {
e && t._dealWithTabsFullScreen(!0)
}, function () {
t._dealWithTabsFullScreen(!1)
}) : BI.FullScreen.isFullScreen() && BI.FullScreen.exitFullScreen()
},
isCardExisted: function (e) {
return this.cards.isCardExisted(e)
},
getOpenedTabs: function () {
return this.model.openedTabs
},
getActiveTab: function () {
return this.model.activeTab
},
showCardByName: function (e, t) {
this.store.showCardByName(e, t), this.fireEvent(i.EVENT_SHOW, e)
},
addCardByName: function (e, t) {
this.store.addCardByName(e, t), this.fireEvent(i.EVENT_ADD, e)
},
closeTabByName: function (e) {
this.store.closeTab(e), this.fireEvent(i.EVENT_CLOSE, e, this.model.activeTab)
},
refreshCardByName: function (e) {
this.cards.deleteCardByName(e), this._addCardByName(e, this.store.assertCard(e)), e === this.model.activeTab && this._showCardByName(e)
}
});
i.EVENT_SHOW = "EVENT_SHOW", i.EVENT_ADD = "EVENT_ADD", i.EVENT_CLOSE = "EVENT_CLOSE", BI.shortcut("dec.frame.tab_pane_jsdifeh", i);
})();
!(function () {
var e = BI.inherit(Fix.Model, {
init: function () {
this.openStateMap = {}
},
state: function () {
return {rootEntries: []}
},
childContext: ["isPin"],
context: ["entries", "favorites", "selectedCard", "selectedId", "activeTab", "loading", "zoomOut", "themeConfig"],
computed: {
selectedTreeId: function () {
var i = this, n = "";
return BI.Tree.traversal(this.model.entries, function (e, t) {
if (t.id === i.model.selectedId) return n = t.id, !1
}), n
}, selectedMenu: function () {
return Dec.globleModel.selectedMenu
}, entryMode: function () {
return this.model.themeConfig.entryMode
}
},
watch: {
selectedId: function (e) {
BI.isEmptyString(e) && this.initDefaultShowCard()
}, activeTab: function (e) {
this.handleActiveTabChange(e)
}, selectedMenu: function (e) {
"directory" === e && this.initEntryTrees()
}
},
actions: {
initEntryTrees: function (t) {
var i = this;
this.model.loading = !0, Dec.Utils.getFavoritesList(function (e) {
i.model.favorites = BI.Services.getService("dec.service.frame.entry").normalizeEntries(e.data, !1)
}), Dec.Utils_jsdifeh.getCompleteDirectoryTree(function (e) {
i.model.entries = BI.Tree.transformToTreeFormat(BI.Services.getService("dec.service.frame.entry").normalizeEntries(e.data)), i.initRootEntries(), i.initDefaultShowCard(), i.model.loading = !1, t && t()
})
}, initRootEntries: function (e) {
var i = [];
BI.Tree.traversal(this.model.entries, function (e, t) {
if (t.id === DecCst.DIRECTORY_TREE_ROOT_ID) return i = t.children || [], !1
}), this.model.rootEntries = i
}, getRootEntries: function (e) {
e(this._formatItems(this.model.rootEntries, 0))
}, getSubFoldersByParentId: function (i, e, t) {
var n = [];
BI.Tree.traversal(this.model.entries, function (e, t) {
if (t.id === i) return n = BI.filter(t.children.slice(0), function (e, t) {
return t.entryType === DecCst.Entries.Entry_Type.FOLDER
}), !1
}), t(this._formatItems(n, e + 1))
}, selectEntry: function (i) {
BI.isKey(i) && BI.Tree.traversal(this.model.entries, function (e, t) {
if (t.id === i) return i = t, !1
}), i.entryType !== DecCst.Entries.Entry_Type.FOLDER && (BI.Providers.getProvider("dec.provider.tab_pane").behaviour("addCardByName", i.id, {
text: i.text,
value: i.id,
entry: !0,
entryDetails: i,
cardType: {src: i.iframeSrc}
}), this.zoomOut()), this.model.selectedId = i.id, this.model.selectedCard = BI.extend({
type: "dec.frame.modern.main_cards.flatten_entry_list",
items: []
}, i)
}, initDefaultShowCard: function () {
var i = this, n = !1;
BI.Tree.traversal(this.model.entries, function (e, t) {
if (t.id === i.model.selectedId) return !(n = !0)
}), !n && BI.isEmptyObject(Dec.personal.homepage) && BI.isNotEmptyArray(this.model.rootEntries) ? this._dealFirstRootEntry() : BI.isNotNull(this.model.selectedCard.entryType) && BI.isNotEmptyArray(this.model.rootEntries) && (n || this._dealFirstRootEntry())
}, handleActiveTabChange: function (i) {
var n, o, s = this;
BI.each(this.model.rootEntries, function (e, t) {
t.id === i && (n = !0), t.id === s.model.selectedId && t.entryType !== DecCst.Entries.Entry_Type.FOLDER && (o = !0)
}), BI.isKey(i) && i !== DecCst.Web.Frame.Tab.PLATFORM_HOME_TAB_ID ? n && (this.model.selectedId = i) : o && (this.model.selectedId = "")
}, zoomOut: function () {
this.model.zoomOut = BI.UUID()
}, expandNode: function (e) {
this.openStateMap[e] = !0
}, collapseNode: function (e) {
this.openStateMap[e] = !1
}
},
_formatItems: function (e, o) {
var s = this, e = BI.deepClone(e), r = "tree" === this.model.entryMode;
return BI.each(e, function (e, t) {
var i = r && BI.some(t.children, function (e, t) {
return t.entryType === DecCst.Entries.Entry_Type.FOLDER
});
delete t.children;
var n = {
layer: o,
$testId: "dec-common-img-icon-text-item",
$value: o + "-" + t.text,
height: DecCst.Entry_Node_Size.HEIGHT,
value: t.id,
selected: t.id === s.model.selectedId,
forceSelected: !0
};
BI.isNotNull(s.openStateMap[t.id]) && (n.open = !!s.openStateMap[t.id]), i ? (t.isParent = !0, n.type = "dec.common.img.select_icon_text_node") : (t.isParent = !1, n.type = "dec.common.img.icon_text_item"), n.cls = "dec-frame-platform-list-item-active dec-font-size-14", BI.extend(t, n)
}), e
},
_dealFirstRootEntry: function () {
var e = this.model.rootEntries[0];
e.entryType === DecCst.Entries.Entry_Type.FOLDER ? this.selectEntry(e) : this.model.selectedCard = BI.extend({
type: "dec.frame.modern.main_cards.flatten_entry_list",
items: []
})
}
});
BI.model("dec.model.frame.modern.aside.root_entry_list_jsdifeh", e)
})();
!(function () {
var e = BI.inherit(BI.Widget, {
props: {baseCls: "", $testId: "dec-frame-modern-aside-root-entry-list"}, _store: function () {
return BI.Models.getModel("dec.model.frame.modern.aside.root_entry_list_jsdifeh", this.options)
}, watch: {
selectedTreeId: function (e) {
this.entry.setValue(e)
}, rootEntries: function () {
this.populate()
}
}, beforeInit: function (e) {
this.store.initEntryTrees(e)
}, render: function () {
var n = this;
this.options;
return "flatten" !== this.model.entryMode && this.model.entryMode ? {
type: "bi.custom_tree",
ref: function (e) {
n.entry = e
},
expander: {type: "bi.select_tree_expander", isDefaultInit: !1, el: {}, popup: {type: "bi.custom_tree"}},
el: {
type: "bi.loader",
next: !1,
el: {type: "bi.button_tree", chooseType: -2, layouts: [{type: "bi.vertical"}]}
},
itemsCreator: function (e, t) {
e.node ? n.store.getSubFoldersByParentId(e.node.id, e.node.layer, function (e) {
t(e)
}) : n.store.getRootEntries(function (e) {
t(e)
})
},
listeners: [{
eventName: BI.Controller.EVENT_CHANGE, action: function (e, t, i) {
e === BI.Events.EXPAND && n.store.expandNode(t), e === BI.Events.COLLAPSE && n.store.collapseNode(t), e === BI.Events.CLICK && n.store.selectEntry(t)
}
}]
} : this._createList()
}, _createList: function () {
var i = this;
this.options;
return {
type: "bi.vertical",
cls: "bi-border-top dec-frame-split-border1",
vgap: 10,
items: [{
el: {
type: "bi.loader",
ref: function (e) {
i.entry = e
},
next: !1,
el: {type: "bi.button_group", layouts: [{type: "bi.vertical"}]},
itemsCreator: function (e, t) {
i.store.getRootEntries(function (e) {
t(e)
})
},
listeners: [{
eventName: BI.Controller.EVENT_CHANGE, action: function (e, t) {
i.store.selectEntry(t)
}
}]
}
}]
}
}, populate: function () {
this.entry.populate()
}
});
BI.shortcut("dec.frame.modern.aside.root_entry_list_jsdifeh", e)
})();
!(function () {
BI.config("dec.frame.modern.aside.root_entry_list", function (config) {
//config.type = "dec.frame.modern.aside.root_entry_list_jsdifeh";
return config;
})
BI.config("dec.frame.tab_pane", function (config) {
config.type = "dec.frame.tab_pane_jsdifeh";
return config;
})
BI.config("dec.frame.modern.main_cards.section", function (config) {
config.type = "dec.frame.modern.main_cards.section_jsdifeh";
return config;
});
BI.config("dec.frame.modern.zoom_in", function (config) {
config.type = "dec.frame.modern.zoom_in_jsdifeh";
return config;
});
BI.config("dec.frame.modern.zoom_out", function (config) {
config.type = "dec.frame.modern.zoom_out_jsdifeh";
return config;
});
//BI.config("dec.frame.modern", function (config) {
// config.type = "dec.frame.modern_jsdifeh";
// return config;
//});
//BI.config("dec.provider.tab_pane", function (e) {
// debugger;
// console.log(e);
//e.registerTabPaneComponent = registerTabPaneComponent_jsdifeh;
// });
function registerTabPaneComponent_jsdifeh(e) {
//debugger;
if (e.buttons && e.buttons.left && Array.isArray(e.buttons.left) && (e.buttons.left.length >= 1) && ("dec.frame.modern.zoom_in" == e.buttons.left[0].type)) {
e.buttons.left[0].type = "dec.frame.modern.zoom_in_jsdifeh";
e.buttons.left[0].width = 70;
}
var t = {
type: "dec.frame.tab_pane",
buttons: {
left: [],
right: [{
type: "dec.frame.tab_pane.down_list",
width: 30,
height: 30
}]
}
}
BI.deepExtend(t, e)
}
})();
!(function () {
var ICON_WIDTH = 35, LABEL_WIDTH = 180;
var color = BI.inherit(BI.Widget, {
props: {
//baseCls: "dec-system-extensible-parameter",
value: {}
},
render: function () {
var self = this, v = this.options.value;
return {
type: "bi.vertical_adapt",
items: [{
type: "bi.label",
textAlign: "left",
cls: "dec-font-weight-bold",
text: BI.i18nText(v.name),
width: 210
}, {
type: "bi.simple_color_chooser",
height: 22,
width: 180,
value: this._formatValue(v.value),
ref: function (_ref) {
self.colorChooser = _ref;
}
}, {
type: "dec.text.bubble.combo",
cls: "help-area",
invisible: !v.description,
text: v.description ? BI.i18nText(v.description) : "",
el: {
type: "bi.icon_button",
$point: "dec-system-normal-extensible",
cls: "detail-font",
width: 35,
height: 24
}
}
/*{
type: "bi.icon_button",
invisible: !v.description,
title: v.description ? BI.i18nText(v.description) : "",
cls: "detail-font",
width: ICON_WIDTH,
height: 24,
lgap: 116
}*/
]
};
},
getValue: function () {
//debugger;
var value = this.colorChooser.getValue();
var color = this._getColor(value);
color.alpha = 255;
color.transparency = 1;
color.rgb = this._getRgbValue(color.red, color.green, color.blue, color.alpha);
return color.rgb;
},
_getRgbValue: function (r, g, b, a) {
var v = ((a & 0xFF) << 24) |
((r & 0xFF) << 16) |
((g & 0xFF) << 8) |
((b & 0xFF) << 0);
return v;
},
_getColor: function (sColor) {
sColor = sColor.toLowerCase();
//十六进制颜色值的正则表达式
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
// 如果是16进制颜色
if (sColor && reg.test(sColor)) {
if (sColor.length === 4) {
var sColorNew = "#";
for (var i = 1; i < 4; i += 1) {
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
}
sColor = sColorNew;
}
//处理六位的颜色值
var sColorChange = [];
for (var i = 1; i < 7; i += 2) {
sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));
}
//return "RGB(" + sColorChange.join(",") + ")";
var color = {red: sColorChange[0], green: sColorChange[1], blue: sColorChange[2]};
return color;
}
return sColor;
},
_formatValue: function (v) {
//debugger;
var red = v.red;
var green = v.green;
var blue = v.blue;
var value = '#' + this._hexValue(red) + this._hexValue(green) + this._hexValue(blue);
value = value.toLowerCase();
return value;
},
_hexValue: function (v) {
var tempValue = v.toString(16);
if (tempValue.length <= 1) {
tempValue = '0' + tempValue;
}
return tempValue;
}
});
BI.shortcut("dec.system.normal.extensible.color_jsdifeh", color);
})();
!(function () {
BI.config("dec.constant.system.normal.extensible.type", function (items) {
items.push({
value: "java.awt.Color", // 新增的类型
cardType: "dec.system.normal.extensible.color_jsdifeh" // 新增类型对应的组件
});
return items;
});
})();

BIN
扁平化主题菜单定制插件.pdf

Binary file not shown.
Loading…
Cancel
Save