diff --git a/.gitignore b/.gitignore index 78f328560..5821b6b7e 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,4 @@ hs_err_pid* /.production/package-lock.json /.production/_temp/ /.production/build/ +/.production/ diff --git a/pom.xml b/pom.xml index a38a5c330..1fc9659b9 100644 --- a/pom.xml +++ b/pom.xml @@ -103,6 +103,11 @@ spring-websocket ${spring.version} + + org.springframework.data + spring-data-redis + 2.1.2.RELEASE + org.aspectj aspectjweaver @@ -144,9 +149,14 @@ 2.9.0 - org.springframework.data - spring-data-redis - 2.1.2.RELEASE + jstl + jstl + 1.2 + + + taglibs + standard + 1.1.2 diff --git a/src/main/java/com/rebuild/server/entityhub/Entity2Schema.java b/src/main/java/com/rebuild/server/entityhub/Entity2Schema.java index 1525013bd..6185dc6eb 100644 --- a/src/main/java/com/rebuild/server/entityhub/Entity2Schema.java +++ b/src/main/java/com/rebuild/server/entityhub/Entity2Schema.java @@ -73,6 +73,11 @@ public class Entity2Schema extends Field2Schema { } } + final boolean isSlave = StringUtils.isNotBlank(masterEntity); + if (isSlave && !MetadataHelper.containsEntity(masterEntity)) { + throw new ModificationMetadataException("无效主实体 : " + masterEntity); + } + String physicalName = "T__" + entityName.toUpperCase(); Object maxTypeCode[] = Application.createQueryNoFilter( @@ -88,7 +93,7 @@ public class Entity2Schema extends Field2Schema { if (StringUtils.isNotBlank(comments)) { record.setString("comments", comments); } - if (StringUtils.isNotBlank(masterEntity)) { + if (isSlave) { record.setString("masterEntity", masterEntity); } record.setString("nameField", EntityHelper.createdOn); @@ -103,14 +108,16 @@ public class Entity2Schema extends Field2Schema { createBuiltinField(tempEntity, EntityHelper.createdOn, "创建时间", DisplayType.DATETIME, null, null, null); createBuiltinField(tempEntity, EntityHelper.modifiedBy, "修改人", DisplayType.REFERENCE, null, "User", null); createBuiltinField(tempEntity, EntityHelper.modifiedOn, "修改时间", DisplayType.DATETIME, null, null, null); - createBuiltinField(tempEntity, EntityHelper.owningUser, "所属用户", DisplayType.REFERENCE, null, "User", null); - createBuiltinField(tempEntity, EntityHelper.owningDept, "所属部门", DisplayType.REFERENCE, null, "Department", null); // 明细实体关联字段 - if (masterEntity != null) { + // 明细实体无所属用户或部门,使用主实体的 + if (isSlave) { String masterLabel = EasyMeta.valueOf(masterEntity).getLabel(); String masterField = masterEntity + "Id"; createBuiltinField(tempEntity, masterField, masterLabel, DisplayType.REFERENCE, "引用主记录(" + masterLabel + ")", masterEntity, CascadeModel.Delete); + } else { + createBuiltinField(tempEntity, EntityHelper.owningUser, "所属用户", DisplayType.REFERENCE, null, "User", null); + createBuiltinField(tempEntity, EntityHelper.owningDept, "所属部门", DisplayType.REFERENCE, null, "Department", null); } boolean schemaReady = schema2Database(tempEntity); diff --git a/src/main/java/com/rebuild/server/helper/manager/DefaultValueManager.java b/src/main/java/com/rebuild/server/helper/manager/DefaultValueManager.java index 7edf24abd..7e9a5c037 100644 --- a/src/main/java/com/rebuild/server/helper/manager/DefaultValueManager.java +++ b/src/main/java/com/rebuild/server/helper/manager/DefaultValueManager.java @@ -28,6 +28,8 @@ import org.apache.commons.logging.LogFactory; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.rebuild.server.entityhub.DisplayType; +import com.rebuild.server.entityhub.EasyMeta; import com.rebuild.server.metadata.MetadataHelper; import cn.devezhao.persist4j.Entity; @@ -50,8 +52,15 @@ public class DefaultValueManager { * @param defaultVals */ public static void setFieldsValue(Entity entity, JSON formModel, JSON defaultVals) { - Map valueReady = new HashMap<>(); + final JSONArray elements = ((JSONObject) formModel).getJSONArray("elements"); + // Invalid Model + if (elements == null) { + return; + } + Map valuesReady = new HashMap<>(); + + // 客户端传递 JSONObject fromClient = (JSONObject) defaultVals; for (Map.Entry e : fromClient.entrySet()) { String field = e.getKey(); @@ -61,38 +70,58 @@ public class DefaultValueManager { continue; } - // 引用字段实体 + // 引用字段实体。&EntityName if (field.startsWith("&")) { - if (!ID.isId(value.toString())) { + final Object idLabel[] = readyReferenceValue(value); + if (idLabel == null) { continue; } - ID sourceRecord = ID.valueOf(value.toString()); - String recordLabel = FieldValueWrapper.getLabel(sourceRecord); - final Object idLabel[] = new Object[] { sourceRecord.toLiteral(), recordLabel }; - Entity source = MetadataHelper.getEntity(field.substring(1)); Field[] reftoFields = MetadataHelper.getReferenceToFields(source, entity); for (Field rtf : reftoFields) { - valueReady.put(rtf.getName(), idLabel); + valuesReady.put(rtf.getName(), idLabel); } } else if (entity.containsField(field)) { - // TODO ... + EasyMeta fieldMeta = EasyMeta.valueOf(entity.getField(field)); + if (fieldMeta.getDisplayType() == DisplayType.REFERENCE) { + final Object idLabel[] = readyReferenceValue(value); + if (idLabel != null) { + valuesReady.put(field, idLabel); + } + } + + // TODO 填充其他字段值 ... } } - if (valueReady.isEmpty()) { + // TODO 后台设置的,应该在后台处理 ??? + + if (valuesReady.isEmpty()) { return; } - - JSONArray elements = ((JSONObject) formModel).getJSONArray("elements"); for (Object o : elements) { JSONObject item = (JSONObject) o; String field = item.getString("field"); - if (valueReady.containsKey(field)) { - item.put("value", valueReady.get(field)); + if (valuesReady.containsKey(field)) { + item.put("value", valuesReady.get(field)); + valuesReady.remove(field); } } } + /** + * @param value + * @return + */ + private static Object[] readyReferenceValue(Object value) { + if (!ID.isId(value.toString())) { + return null; + } + + ID id = ID.valueOf(value.toString()); + String label = FieldValueWrapper.getLabel(id); + return new Object[] { id.toLiteral(), label }; + } + } diff --git a/src/main/java/com/rebuild/server/helper/manager/ViewFeatManager.java b/src/main/java/com/rebuild/server/helper/manager/ViewFeatManager.java index d51517c3e..29da72b5c 100644 --- a/src/main/java/com/rebuild/server/helper/manager/ViewFeatManager.java +++ b/src/main/java/com/rebuild/server/helper/manager/ViewFeatManager.java @@ -19,6 +19,7 @@ along with this program. If not, see . package com.rebuild.server.helper.manager; import java.util.ArrayList; +import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -54,7 +55,17 @@ public class ViewFeatManager { * @return */ public static JSON getViewTab(String entity, ID user) { - return getViewFeat(entity, TYPE_TAB, user); + JSON tabs = getViewFeat(entity, TYPE_TAB, user); + + // 明细实体(如有) + Entity entityMeta = MetadataHelper.getEntity(entity); + if (entityMeta.getSlaveEntity() != null) { + String shows[] = EasyMeta.getEntityShows(entityMeta.getSlaveEntity()); + JSON tabsAll = (JSON) JSON.toJSON(new String[][] { shows }); + ((JSONArray) tabsAll).fluentAddAll((Collection) tabs); + tabs = tabsAll; + } + return tabs; } /** @@ -76,12 +87,17 @@ public class ViewFeatManager { final Object FEAT[] = getRaw(entity, type); final Permission RoC = TYPE_TAB.equals(type) ? BizzPermission.READ : BizzPermission.CREATE; - // TODO 未配置则使用全部相关项 ??? + // 未配置则使用全部相关项 if (FEAT == null) { Entity entityMeta = MetadataHelper.getEntity(entity); + Set refs = new HashSet<>(); for (Field field : entityMeta.getReferenceToFields()) { Entity e = field.getOwnEntity(); + // 过滤明细实体 + if (e.getMasterEntity() != null) { + continue; + } if (Application.getSecurityManager().allowed(user, e.getEntityCode(), RoC)) { refs.add(EasyMeta.getEntityShows(e)); } diff --git a/src/main/java/com/rebuild/server/query/AdvFilterParser.java b/src/main/java/com/rebuild/server/query/AdvFilterParser.java index 4c31b1729..8596ecf34 100644 --- a/src/main/java/com/rebuild/server/query/AdvFilterParser.java +++ b/src/main/java/com/rebuild/server/query/AdvFilterParser.java @@ -37,6 +37,8 @@ import com.alibaba.fastjson.JSONObject; import com.rebuild.server.Application; import com.rebuild.server.bizz.UserHelper; import com.rebuild.server.bizz.privileges.Department; +import com.rebuild.server.entityhub.DisplayType; +import com.rebuild.server.entityhub.EasyMeta; import com.rebuild.server.metadata.EntityHelper; import com.rebuild.server.metadata.MetadataHelper; @@ -138,6 +140,9 @@ public class AdvFilterParser { } final Field fieldMeta = rootEntity.getField(field); // TODO 级联字段 + if (EasyMeta.valueOf(fieldMeta).getDisplayType() == DisplayType.PICKLIST) { + field = "&" + field; + } final String op = item.getString("op"); StringBuffer sb = new StringBuffer(field) @@ -187,7 +192,7 @@ public class AdvFilterParser { // 占位 {1} if (value.matches("\\{\\d+\\}")) { if (values == null) { - LOG.warn("Invalid item of advfilter : " + item.toJSONString()); + LOG.warn("Invalid item of AdvFilter : " + item.toJSONString()); return null; } diff --git a/src/main/java/com/rebuild/web/PageControll.java b/src/main/java/com/rebuild/web/PageControll.java index 191a188d7..a288af716 100644 --- a/src/main/java/com/rebuild/web/PageControll.java +++ b/src/main/java/com/rebuild/web/PageControll.java @@ -75,12 +75,8 @@ public abstract class PageControll { */ protected ModelAndView createModelAndView(String page, String entity, ID user) { ModelAndView mv = createModelAndView(page); - Entity entityMeta = MetadataHelper.getEntity(entity); - EasyMeta easy = new EasyMeta(entityMeta); - mv.getModel().put("entityName", easy.getName()); - mv.getModel().put("entityLabel", easy.getLabel()); - mv.getModel().put("entityIcon", easy.getIcon()); + putEntityMeta(mv, entityMeta); if (EntityHelper.hasPrivilegesField(entityMeta)) { Privileges priv = Application.getSecurityManager().getPrivileges(user, entityMeta.getEntityCode()); @@ -111,16 +107,10 @@ public abstract class PageControll { */ protected ModelAndView createModelAndView(String page, ID record, ID user) { ModelAndView mv = createModelAndView(page); + Entity entity = MetadataHelper.getEntity(record.getEntityCode()); + putEntityMeta(mv, entity); - Entity entityMeta = MetadataHelper.getEntity(record.getEntityCode()); - EasyMeta easy = new EasyMeta(entityMeta); - mv.getModel().put("entityName", easy.getName()); - mv.getModel().put("entityLabel", easy.getLabel()); - mv.getModel().put("entityIcon", easy.getIcon()); - - // TODO 验证记录权限 - - if (EntityHelper.hasPrivilegesField(entityMeta)) { + if (EntityHelper.hasPrivilegesField(entity)) { Permission[] actions = new Permission[] { BizzPermission.CREATE, BizzPermission.DELETE, @@ -140,6 +130,38 @@ public abstract class PageControll { return mv; } + /** + * @param into + * @param entity + */ + protected void putEntityMeta(ModelAndView into, Entity entity) { + EasyMeta easyMeta = EasyMeta.valueOf(entity); + into.getModel().put("entityName", easyMeta.getName()); + into.getModel().put("entityLabel", easyMeta.getLabel()); + into.getModel().put("entityIcon", easyMeta.getIcon()); + + EasyMeta master = null; + EasyMeta slave = null; + if (entity.getMasterEntity() != null) { + master = EasyMeta.valueOf(entity.getMasterEntity()); + slave = EasyMeta.valueOf(entity); + } else if (entity.getSlaveEntity() != null) { + master = EasyMeta.valueOf(entity); + slave = EasyMeta.valueOf(entity.getSlaveEntity()); + } else { + into.getModel().put("masterEntity", easyMeta.getName()); + } + + if (master != null && slave != null) { + into.getModel().put("masterEntity", master.getName()); + into.getModel().put("masterEntityLabel", master.getLabel()); + into.getModel().put("masterEntityIcon", master.getIcon()); + into.getModel().put("slaveEntity", slave.getName()); + into.getModel().put("slaveEntityLabel", slave.getLabel()); + into.getModel().put("slaveEntityIcon", slave.getIcon()); + } + } + // -- /** @@ -156,7 +178,7 @@ public abstract class PageControll { * * @param request */ - public static void setPageAttribute(ModelAndView modelAndView) { - modelAndView.getModel().put("baseUrl", ServerListener.getContextPath()); + public static void setPageAttribute(ModelAndView into) { + into.getModel().put("baseUrl", ServerListener.getContextPath()); } } diff --git a/src/main/java/com/rebuild/web/admin/entity/MetaEntityControll.java b/src/main/java/com/rebuild/web/admin/entity/MetaEntityControll.java index 23ce338ca..63b573c5b 100644 --- a/src/main/java/com/rebuild/web/admin/entity/MetaEntityControll.java +++ b/src/main/java/com/rebuild/web/admin/entity/MetaEntityControll.java @@ -69,12 +69,13 @@ public class MetaEntityControll extends BaseControll { Entity entityMeta = MetadataHelper.getEntity(entity); mv.getModel().put("nameField", entityMeta.getNameField().getName()); + if (entityMeta.getMasterEntity() != null) { mv.getModel().put("masterEntity", entityMeta.getMasterEntity().getName()); - mv.getModel().put("masterEntityLabel", EasyMeta.getLabel(entityMeta.getMasterEntity())); + mv.getModel().put("slaveEntity", entityMeta.getName()); } else if (entityMeta.getSlaveEntity() != null) { + mv.getModel().put("masterEntity", entityMeta.getName()); mv.getModel().put("slaveEntity", entityMeta.getSlaveEntity().getName()); - mv.getModel().put("slaveEntityLabel", EasyMeta.getLabel(entityMeta.getSlaveEntity())); } return mv; @@ -90,6 +91,10 @@ public class MetaEntityControll extends BaseControll { public void listEntity(HttpServletRequest request, HttpServletResponse response) throws IOException { List> ret = new ArrayList<>(); for (Entity entity : MetadataSorter.sortEntities(true)) { + if (entity.getMasterEntity() != null) { + continue; + } + EasyMeta easyMeta = new EasyMeta(entity); Map map = new HashMap<>(); map.put("entityName", easyMeta.getName()); @@ -97,9 +102,8 @@ public class MetaEntityControll extends BaseControll { map.put("comments", easyMeta.getComments()); map.put("icon", easyMeta.getIcon()); map.put("builtin", easyMeta.isBuiltin()); - if (entity.getMasterEntity() != null) { - map.put("masterEntity", entity.getMasterEntity()); - map.put("masterEntityLabel", EasyMeta.getLabel(entity.getMasterEntity())); + if (entity.getSlaveEntity() != null) { + map.put("slaveEntity", entity.getSlaveEntity().getName()); } ret.add(map); } @@ -114,9 +118,20 @@ public class MetaEntityControll extends BaseControll { String label = reqJson.getString("label"); String comments = reqJson.getString("comments"); String masterEntity = reqJson.getString("masterEntity"); - if (StringUtils.isNotBlank(masterEntity) && !MetadataHelper.containsEntity(masterEntity)) { - writeFailure(response, "无效主实体 : " + masterEntity); - return; + if (StringUtils.isNotBlank(masterEntity)) { + if (!MetadataHelper.containsEntity(masterEntity)) { + writeFailure(response, "无效主实体 : " + masterEntity); + return; + } + + Entity master = MetadataHelper.getEntity(masterEntity); + if (master.getMasterEntity() != null) { + writeFailure(response, "明细实体不能作为主实体"); + return; + } else if (master.getSlaveEntity() != null) { + writeFailure(response, "选择的主实体已被 " + EasyMeta.getLabel(master.getSlaveEntity()) + " 使用"); + return; + } } String entityName = null; diff --git a/src/main/java/com/rebuild/web/admin/entity/ViewFeatControll.java b/src/main/java/com/rebuild/web/admin/entity/ViewFeatControll.java index 795898a42..35ac045d7 100644 --- a/src/main/java/com/rebuild/web/admin/entity/ViewFeatControll.java +++ b/src/main/java/com/rebuild/web/admin/entity/ViewFeatControll.java @@ -90,6 +90,10 @@ public class ViewFeatControll extends BaseControll implements LayoutConfig { Set refs = new HashSet<>(); for (Field field : entityMeta.getReferenceToFields()) { Entity e = field.getOwnEntity(); + // 过滤明细实体,因为明细实体会默认就有 + if (e.getMasterEntity() != null) { + continue; + } refs.add(new String[] { e.getName(), EasyMeta.getLabel(e) }); } diff --git a/src/main/java/com/rebuild/web/base/entity/GeneralEntityControll.java b/src/main/java/com/rebuild/web/base/entity/GeneralEntityControll.java index 167354cea..ad85a464b 100644 --- a/src/main/java/com/rebuild/web/base/entity/GeneralEntityControll.java +++ b/src/main/java/com/rebuild/web/base/entity/GeneralEntityControll.java @@ -36,6 +36,7 @@ import com.rebuild.server.metadata.MetadataHelper; import com.rebuild.web.BaseControll; import cn.devezhao.commons.web.ServletUtils; +import cn.devezhao.persist4j.Entity; import cn.devezhao.persist4j.engine.ID; /** @@ -52,16 +53,22 @@ public class GeneralEntityControll extends BaseControll { public ModelAndView pageView(@PathVariable String entity, @PathVariable String id, HttpServletRequest request) throws IOException { ID user = getRequestUser(request); + Entity thatEntity = MetadataHelper.getEntity(entity); + ID record = ID.valueOf(id); - ModelAndView mv = createModelAndView("/general-entity/record-view.jsp", record, user); + ModelAndView mv = null; + if (thatEntity.getMasterEntity() != null) { + mv = createModelAndView("/general-entity/slave-view.jsp", record, user); + } else { + mv = createModelAndView("/general-entity/record-view.jsp", record, user); + + JSON vtab = ViewFeatManager.getViewTab(entity, user); + mv.getModel().put("ViewTabs", vtab); + JSON vadd = ViewFeatManager.getViewAdd(entity, user); + mv.getModel().put("ViewAdds", vadd); + } mv.getModel().put("id", record); - JSON vtab = ViewFeatManager.getViewTab(entity, user); - mv.getModel().put("ViewTabs", vtab); - - JSON vadd = ViewFeatManager.getViewAdd(entity, user); - mv.getModel().put("ViewAdds", vadd); - return mv; } diff --git a/src/main/java/com/rebuild/web/base/entity/GeneralListControll.java b/src/main/java/com/rebuild/web/base/entity/GeneralListControll.java index c58de9418..ddfb7d339 100644 --- a/src/main/java/com/rebuild/web/base/entity/GeneralListControll.java +++ b/src/main/java/com/rebuild/web/base/entity/GeneralListControll.java @@ -37,7 +37,6 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.rebuild.server.Application; -import com.rebuild.server.entityhub.EasyMeta; import com.rebuild.server.helper.manager.DataListManager; import com.rebuild.server.helper.manager.LayoutManager; import com.rebuild.server.metadata.EntityHelper; @@ -67,32 +66,18 @@ public class GeneralListControll extends BaseControll implements LayoutConfig { @RequestMapping("list") public ModelAndView pageList(@PathVariable String entity, HttpServletRequest request) throws IOException { ID user = getRequestUser(request); - ModelAndView mv = createModelAndView("/general-entity/record-list.jsp", entity, user); + Entity thatEntity = MetadataHelper.getEntity(entity); + + ModelAndView mv = null; + if (thatEntity.getMasterEntity() != null) { + mv = createModelAndView("/general-entity/slave-list.jsp", entity, user); + } else { + mv = createModelAndView("/general-entity/record-list.jsp", entity, user); + } + JSON config = DataListManager.getColumnLayout(entity, getRequestUser(request)); mv.getModel().put("DataListConfig", JSON.toJSONString(config)); - EasyMeta master = null; - EasyMeta slave = null; - Entity that = MetadataHelper.getEntity(entity); - if (that.getMasterEntity() != null) { - master = EasyMeta.valueOf(that.getMasterEntity()); - slave = EasyMeta.valueOf(that); - } else if (that.getSlaveEntity() != null) { - master = EasyMeta.valueOf(that); - slave = EasyMeta.valueOf(that.getSlaveEntity()); - } else { - mv.getModel().put("masterEntity", that.getName()); - } - - if (master != null && slave != null) { - mv.getModel().put("masterEntity", master.getName()); - mv.getModel().put("masterEntityLabel", master.getLabel()); - mv.getModel().put("masterEntityIcon", master.getIcon()); - mv.getModel().put("slaveEntity", slave.getName()); - mv.getModel().put("slaveEntityLabel", slave.getLabel()); - mv.getModel().put("slaveEntityIcon", slave.getIcon()); - } - return mv; } diff --git a/src/main/webapp/_include/Head.jsp b/src/main/webapp/_include/Head.jsp index 94afa471f..dcc28ba58 100644 --- a/src/main/webapp/_include/Head.jsp +++ b/src/main/webapp/_include/Head.jsp @@ -1,5 +1,4 @@ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ page import="com.rebuild.web.admin.AdminEntryControll"%> <%@ page import="com.rebuild.server.helper.SystemConfiguration"%> <%@ page import="com.rebuild.utils.AppUtils"%> diff --git a/src/main/webapp/_include/NavLeft.jsp b/src/main/webapp/_include/NavLeft.jsp index 276ed6ff9..2ce49ccdd 100644 --- a/src/main/webapp/_include/NavLeft.jsp +++ b/src/main/webapp/_include/NavLeft.jsp @@ -1,12 +1,10 @@ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ page import="cn.devezhao.commons.CodecUtils"%> -<%@ page import="org.apache.commons.lang.StringUtils"%> -<%@ page import="com.rebuild.server.ServerListener"%> <%@ page import="com.alibaba.fastjson.JSONObject"%> <%@ page import="com.alibaba.fastjson.JSONArray"%> <%@ page import="com.rebuild.server.helper.manager.NavManager"%> <% final String activeNav = request.getParameter("activeNav"); +final JSONArray navArray = NavManager.getNavForPortal(request); %>
diff --git a/src/main/webapp/_include/NavLeftAdmin.jsp b/src/main/webapp/_include/NavLeftAdmin.jsp index 5ef128f75..f39ece5f0 100644 --- a/src/main/webapp/_include/NavLeftAdmin.jsp +++ b/src/main/webapp/_include/NavLeftAdmin.jsp @@ -1,5 +1,4 @@ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<% final String activeNav = request.getParameter("activeNav"); %>
diff --git a/src/main/webapp/_include/NavTop.jsp b/src/main/webapp/_include/NavTop.jsp index 6c958542b..2c0fe1a6e 100644 --- a/src/main/webapp/_include/NavTop.jsp +++ b/src/main/webapp/_include/NavTop.jsp @@ -1,4 +1,5 @@ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ page import="com.rebuild.web.admin.AdminEntryControll"%> <%@ page import="com.rebuild.utils.AppUtils"%> <%@ page import="com.rebuild.server.Application"%> @@ -8,6 +9,7 @@ <% final User currentUser = Application.getUserStore().getUser(AppUtils.getRequestUser(request)); final String showName = UserHelper.getShowName(currentUser); +final boolean isAdmin = currentUser.isAdmin(); %>
- <%@ include file="/_include/Foot.jsp"%> diff --git a/src/main/webapp/admin/entity/entity-edit.jsp b/src/main/webapp/admin/entity/entity-edit.jsp index c59190c61..a1aaf119f 100644 --- a/src/main/webapp/admin/entity/entity-edit.jsp +++ b/src/main/webapp/admin/entity/entity-edit.jsp @@ -1,4 +1,5 @@ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> @@ -44,6 +45,12 @@ a#entityIcon:hover{opacity:0.8}
基本信息
+ + +
@@ -73,18 +80,6 @@ a#entityIcon:hover{opacity:0.8}

好的主显字段应能够清晰的表示记录本身,如客户中的客户名称或订单中的订单编号

- -
- - -
@@ -118,7 +113,8 @@ $(document).ready(function(){ const metaId = '${entityMetaId}' if (!!!metaId) $('.footer .alert').removeClass('hide') else $('.footer .J_action').removeClass('hide') - if (!!'${masterEntity}') $('.J_masterEntity').removeClass('hide') + + $('.J_tab-${entityName} a').addClass('active') let _btn = $('.J_save').click(function(){ if (!!!metaId) return @@ -151,7 +147,7 @@ $(document).ready(function(){ disabled: not, title: not ? '此字段(类型)不能作为主显字段' : '' } - }); + }) $('#nameField').select2({ language: 'zh-CN', placeholder: '选择字段', diff --git a/src/main/webapp/admin/entity/entity-grid.jsp b/src/main/webapp/admin/entity/entity-grid.jsp index ba1f83205..06bbda8d1 100644 --- a/src/main/webapp/admin/entity/entity-grid.jsp +++ b/src/main/webapp/admin/entity/entity-grid.jsp @@ -60,7 +60,7 @@ let render_entity = function(item){ tmp.find('span').text(item.entityLabel) tmp.find('p').text(item.comments || '-') if (item.builtin == true) $('内建').appendTo(tmp.find('a.card')) - if (!!item.masterEntity) $('明细').appendTo(tmp.find('a.card')) + if (!!item.slaveEntity) $('明细').appendTo(tmp.find('a.card')) return tmp } diff --git a/src/main/webapp/admin/entity/entity-new.jsp b/src/main/webapp/admin/entity/entity-new.jsp index 7e33ffebc..987cf3ffd 100644 --- a/src/main/webapp/admin/entity/entity-new.jsp +++ b/src/main/webapp/admin/entity/entity-new.jsp @@ -61,7 +61,7 @@ $(document).ready(function(){ sbtn.button('loading') $.post(rb.baseUrl + '/admin/entity/entity-new', _data, function(res){ if (res.error_code == 0) parent.location.href = rb.baseUrl + '/admin/entity/' +res.data + '/base' - else { sbrn.button('reset'); rb.notice(res.error_msg, 'danger') } + else { sbtn.button('reset'); rb.notice(res.error_msg, 'danger') } }) }) diff --git a/src/main/webapp/admin/entity/field-new.jsp b/src/main/webapp/admin/entity/field-new.jsp index abf8d822f..b2cc33073 100644 --- a/src/main/webapp/admin/entity/field-new.jsp +++ b/src/main/webapp/admin/entity/field-new.jsp @@ -1,5 +1,4 @@ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ page import="com.rebuild.server.entityhub.DisplayType"%> diff --git a/src/main/webapp/assets/css/rb-page.css b/src/main/webapp/assets/css/rb-page.css index ae94ea40d..fd18e4ba8 100644 --- a/src/main/webapp/assets/css/rb-page.css +++ b/src/main/webapp/assets/css/rb-page.css @@ -26,6 +26,9 @@ .btn.btn-link:hover { color: #0d5bdd !important; } +.btn .icon.x14{ + font-size: 1.431rem +} .navbar-nav .dropdown>.nav-link:hover>.icon, .bottom-widget>a:hover>.icon { opacity: 0.8; } @@ -215,6 +218,9 @@ a { .hide { display: none !important; } +.clearfix { + clear: both; +} .mlr-auto { margin-left: auto !important; margin-right: auto !important; @@ -578,9 +584,12 @@ i.split.ui-draggable-dragging { -ms-user-select: none; user-select: none; } -.main-content>.nav-tabs-classic+.card.card-table { +.main-content>.nav-tabs-classic+.card { border-top-left-radius: 0; border-top-right-radius: 0; + border-top: 2px solid #fff; +} +.main-content>.nav-tabs-classic+.card.card-table{ border-top: 2px solid #4285f4; } .main-content>.nav-tabs-classic>li.nav-item a.nav-link { @@ -953,7 +962,8 @@ i.split.ui-draggable-dragging { } .adv-filter .item.dialog-footer { margin: 0 -30px; - margin-bottom: -10px; + margin-bottom: -5px; + padding-top: 20px; } /* height = 34px .adv-filter .select2-container--default .select2-selection--single, .adv-filter .select2-container--default .select2-selection--multiple { diff --git a/src/main/webapp/assets/css/view-page.css b/src/main/webapp/assets/css/view-page.css index d6718bafc..cfafe1068 100644 --- a/src/main/webapp/assets/css/view-page.css +++ b/src/main/webapp/assets/css/view-page.css @@ -95,22 +95,31 @@ html, body { color: #aaa; cursor: help; } -.view-metas { +.view-operating { padding-left: 30px; } -.view-metas>div { +.view-operating>div { margin-bottom: 15px !important; } -.view-metas .row, .view-metas .form-line { +.view-operating .row, .view-operating .form-line { margin-bottom: 10px; } -.view-metas dt { +.view-operating dt { font-weight: normal; } .view-action { margin-top: 33px; } -.view-action .btn { +.view-action .col-6 { + margin-bottom: .769231rem; +} +.view-action .col-6:nth-child(odd) { + padding-right: 0.384615rem; +} +.view-action .col-6:nth-child(even) { + padding-left: 0.384615rem; +} +.view-action .col-6 .btn { width: 100% } .view-action.noaction { diff --git a/src/main/webapp/assets/js/rb-advfilter.jsx b/src/main/webapp/assets/js/rb-advfilter.jsx index 09d454e9c..24c17b4c6 100644 --- a/src/main/webapp/assets/js/rb-advfilter.jsx +++ b/src/main/webapp/assets/js/rb-advfilter.jsx @@ -51,16 +51,17 @@ class AdvFilter extends React.Component {
{rb.isAdminUser !== true ? null :
-
} {OperBtns} -
- - -
+
: (
{OperBtns}
) }
diff --git a/src/main/webapp/assets/js/rb-base.js b/src/main/webapp/assets/js/rb-base.js index adfc2957a..318e39591 100644 --- a/src/main/webapp/assets/js/rb-base.js +++ b/src/main/webapp/assets/js/rb-base.js @@ -198,4 +198,26 @@ const $storage = { let random_times = 0 const $random = function(){ return new Date().getTime() + '-' + random_times++ +} + +// 计算分页 +//@tp 总计页面 +//@cp 当前页面 +const $pages = function(tp, cp){ + let pages = [] + if (tp <= 8){ + for (var i = 1; i <= tp; i++) pages.push(i) + return pages + } + if (cp > tp) cp = tp + if (cp <= 4) cp = 4 + var begin = cp - 2, end = cp + 3 + if (begin < 1) begin = 1 + if (end > tp) end = tp + if (begin > 1) pages.push(1) + if (begin > 2) pages.push('.') + for (var i = begin; i < end; i++) pages.push(i) + if (end <= tp - 1) pages.push('.') + if (end <= tp) pages.push(tp) + return pages } \ No newline at end of file diff --git a/src/main/webapp/assets/js/rb-forms.jsx b/src/main/webapp/assets/js/rb-forms.jsx index 670b770d1..12aa37787 100644 --- a/src/main/webapp/assets/js/rb-forms.jsx +++ b/src/main/webapp/assets/js/rb-forms.jsx @@ -101,9 +101,7 @@ class RbForm extends React.Component { constructor(props) { super(props) this.state = { ...props } - this.isNew = !!!props.$$$parent.state.id - this.__FormData = {} this.setFieldValue = this.setFieldValue.bind(this) } @@ -396,6 +394,8 @@ class RbFormDateTime extends RbFormElement { } componentDidMount() { super.componentDidMount() + if (this.state.viewMode == true) return + let format = (this.props.datetimeFormat || this.props.dateFormat).replace('mm', 'ii').toLowerCase() let minView = 0 switch (format.length) { @@ -465,6 +465,8 @@ class RbFormImage extends RbFormElement { } componentDidMount() { super.componentDidMount() + if (this.state.viewMode == true) return + let that = this let mprogress $(that.refs['upload-input']).html5Uploader({ @@ -530,6 +532,8 @@ class RbFormFile extends RbFormElement { } componentDidMount() { super.componentDidMount() + if (this.state.viewMode == true) return + let that = this let mprogress $(that.refs['upload-input']).html5Uploader({ @@ -575,6 +579,8 @@ class RbFormPickList extends RbFormElement { } componentDidMount() { super.componentDidMount() + if (this.state.viewMode == true) return + let select2 = $(this.refs['field-value']).select2({ language: 'zh-CN', placeholder: '选择' + this.props.label, @@ -618,6 +624,8 @@ class RbFormReference extends RbFormElement { } componentDidMount() { super.componentDidMount() + if (this.state.viewMode == true) return + let that = this let select2 = $(this.refs['field-value']).select2({ language: 'zh-CN', diff --git a/src/main/webapp/assets/js/rb-list.jsx b/src/main/webapp/assets/js/rb-list.jsx index 4c76a2454..d701e0a1b 100644 --- a/src/main/webapp/assets/js/rb-list.jsx +++ b/src/main/webapp/assets/js/rb-list.jsx @@ -292,7 +292,7 @@ class RbListPagination extends React.Component { let props = this.props this.pageTotal = Math.ceil(props.rowTotal / props.pageSize) if (this.pageTotal <= 0) this.pageTotal = 1 - const pages = $calcPages(this.pageTotal, props.pageNo) + const pages = $pages(this.pageTotal, props.pageNo) return (
diff --git a/src/main/webapp/assets/js/rb-page.js b/src/main/webapp/assets/js/rb-page.js index 8b4641fdd..901664958 100644 --- a/src/main/webapp/assets/js/rb-page.js +++ b/src/main/webapp/assets/js/rb-page.js @@ -41,6 +41,7 @@ $(function(){ } }) +// 导航菜单 const __initNavs = function(){ let isOffcanvas = $('.rb-offcanvas-menu').length > 0 @@ -133,35 +134,10 @@ const __checkMessage = function(){ $('.rb-notifications span.badge').text('0') __checkMessage_status = 0 } - setTimeout(__checkMessage, 3000) + setTimeout(__checkMessage, 3000 * (rb.env == 'dev' ? 10 : 1)) }) } -// 是否在管理员页 -const $inAdminPage = location.href.indexOf('/admin/') > -1 - -// 计算分页 -// @tp 总计页面 -// @cp 当前页面 -const $calcPages = function(tp, cp){ - let pages = [] - if (tp <= 8){ - for (var i = 1; i <= tp; i++) pages.push(i) - return pages - } - if (cp > tp) cp = tp - if (cp <= 4) cp = 4 - var begin = cp - 2, end = cp + 3 - if (begin < 1) begin = 1 - if (end > tp) end = tp - if (begin > 1) pages.push(1) - if (begin > 2) pages.push('.') - for (var i = begin; i < end; i++) pages.push(i) - if (end <= tp - 1) pages.push('.') - if (end <= tp) pages.push(tp) - return pages -} - // @mbg = .btn-group const $cleanMenu = function(mbg){ mbg = $(mbg) diff --git a/src/main/webapp/assets/js/rb-view.jsx b/src/main/webapp/assets/js/rb-view.jsx index 259969229..b8a5704c3 100644 --- a/src/main/webapp/assets/js/rb-view.jsx +++ b/src/main/webapp/assets/js/rb-view.jsx @@ -91,13 +91,18 @@ const RbViewPage = { $('.J_edit').click(function(){ rb.RbFormModal({ id: id, title: `编辑${entity[1]}`, entity: entity[0], icon: entity[2] }) }) - $('.J_assign').click(function(){ rb.AssignDialog({ entity: entity[0], ids: [id] }) }) $('.J_share').click(function(){ rb.ShareDialog({ entity: entity[0], ids: [id] }) }) + $('.J_adds-slave').click(function(){ + let defaultValues = {} + defaultValues['&' + entity[0]] = id + let _this = $(this) + rb.RbFormModal({ title: '添加明细', entity: _this.data('entity'), icon: _this.data('icon'), defaultValues: defaultValues }) + }) // Privileges if (ep) { @@ -128,7 +133,7 @@ const RbViewPage = { if (k == 'owningUser'){ $('' + _data[k][1] + '').appendTo('.J_' + k) } else if (k == 'shareTo'){ - $('' + (_data[k] == 0 ? '无' : ('已共享给' + _data[k] + '位用户')) + '').appendTo('.J_' + k) + $('' + (_data[k] == 0 ? '无' : ('已共享给 ' + _data[k] + ' 位用户')) + '').appendTo('.J_' + k) } else { $('' + _data[k] + '').appendTo('.J_' + k) } diff --git a/src/main/webapp/commons/search-icon.jsp b/src/main/webapp/commons/search-icon.jsp index b3b9ea896..23dc951e4 100644 --- a/src/main/webapp/commons/search-icon.jsp +++ b/src/main/webapp/commons/search-icon.jsp @@ -19,7 +19,7 @@ @@ -89,9 +83,9 @@ diff --git a/src/main/webapp/general-entity/record-view.jsp b/src/main/webapp/general-entity/record-view.jsp index 46325b674..35c98db69 100644 --- a/src/main/webapp/general-entity/record-view.jsp +++ b/src/main/webapp/general-entity/record-view.jsp @@ -1,4 +1,5 @@ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> @@ -30,12 +31,12 @@
-
+
-
+
-
+
-
+ +
+ +
+
+
-