This commit is contained in:
devezhao-mac 2018-12-28 23:09:48 +08:00
parent 2f168462b7
commit 983f1c4304
15 changed files with 78 additions and 67 deletions

View file

@ -352,7 +352,9 @@ public class UserStore {
} else {
store(newDept);
getDepartment(parent).addChild(newDept);
if (parent != null) {
getDepartment(parent).addChild(newDept);
}
}
}

View file

@ -136,7 +136,7 @@ public class MetadataSorter {
fields = (Field[]) ArrayUtils.addAll(simpleFields2, sysFields2);
// 返回全部类型
if (allowed == null) {
if (allowed == null || allowed.length == 0) {
List<Field> list = new ArrayList<>();
for (Field field : fields) {
if (!MetadataHelper.isSystemField(field)) {

View file

@ -179,7 +179,7 @@ public class AttchementAwareObserver extends OperatingObserver {
Record att = EntityHelper.forNew(EntityHelper.Attachment, context.getOperator());
att.setInt("belongEntity", record.getEntity().getEntityCode());
att.setString("belongField", field.getName());
att.setString("relatedRecord", record.getPrimary().toLiteral());
att.setID("relatedRecord", record.getPrimary());
att.setString("filePath", filePath);
String ext = FilenameUtils.getExtension(filePath);
if (StringUtils.isNotBlank(ext)) {

View file

@ -128,11 +128,11 @@ public class ReferenceSearch extends BaseControll {
nameField2 = "&" + nameField2;
}
String sql = "select {0},{1} from {2} where ({1} like '%{3}%'";
String sql = "select {0},{1} from {2} where ( {1} like ''%{3}%''";
sql = MessageFormat.format(sql,
metaFieldEntity.getPrimaryField().getName(), nameField2, metaFieldEntity.getName(), q);
if (metaEntity.containsField(EntityHelper.QuickCode) && StringUtils.isAlphanumericSpace(q)) {
sql += MessageFormat.format(" or quickCode like '{0}%' )", q);
sql += MessageFormat.format(" or quickCode like ''{0}%'' )", q);
} else {
sql += " )";
}

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd">
<diskStore path="java.io.tmpdir" />
<defaultCache

View file

@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE metadata-config PUBLIC "-//persist4j/Metadata 0.3"
"https://raw.githubusercontent.com/devezhao/persist4j/master/src/main/resources/metadata.dtd">
<metadata-config schema-name-optimize="true"
default-parent="SystemCommon">
<metadata-config schema-name-optimize="true" default-parent="SystemCommon">
<entity name="SystemCommon" type-code="000">
<field name="createdBy" type="reference" ref-entity="User" nullable="false" creatable="false" updatable="false" description="创建人" />
@ -43,9 +42,8 @@
<field name="privilegesId" type="primary" />
<field name="roleId" type="reference" ref-entity="Role" cascade="delete" nullable="false" updatable="false" />
<field name="entity" type="int" default-value="0" nullable="false" updatable="false" description="哪个实体" />
<field name="zeroKey" type="string" description="其他权限KEY" />
<field name="zeroKey" type="string" max-length="50" description="其他权限KEY" />
<field name="definition" type="string" max-length="100" description="权限定义" />
<index field-list="roleId" />
<index type="unique" field-list="roleId,entity,zeroKey" />
</entity>
@ -86,7 +84,7 @@
<field name="refEntity" type="string" max-length="100" />
<field name="cascade" type="string" max-length="20" default-value="ignore" />
<field name="comments" type="string" max-length="200" />
<field name="extConfig" type="string" max-length="1000" description="更多扩展配置JSON格式KV" />
<field name="extConfig" type="string" max-length="600" description="更多扩展配置JSON格式KV" />
<index type="unique" field-list="belongEntity,fieldName" />
<index type="unique" field-list="belongEntity,physicalName" />
</entity>
@ -106,7 +104,7 @@
<field name="belongEntity" type="string" max-length="100" nullable="false" updatable="false" />
<field name="type" type="string" max-length="20" nullable="false" updatable="false" description="FORM,DATALIST,NAVI" />
<field name="config" type="text" description="JSON格式配置" nullable="false" />
<field name="applyTo" type="string" default-value="SELF" description="应用到哪些人,可选值: ALL/SELF/$MemberID(U/D/R)" />
<field name="applyTo" type="string" max-length="420" default-value="SELF" description="应用到哪些人,可选值: ALL/SELF/$MemberID(U/D/R)" />
</entity>
<entity name="FilterConfig" type-code="014" description="过滤条件配置">
@ -114,7 +112,7 @@
<field name="filterName" type="string" max-length="100" nullable="false" />
<field name="belongEntity" type="string" max-length="100" nullable="false" updatable="false" />
<field name="config" type="text" description="JSON格式配置" nullable="false" />
<field name="applyTo" type="string" default-value="SELF" description="应用到哪些人,可选值: ALL/SELF/$MemberID(U/D/R)" />
<field name="applyTo" type="string" max-length="420" default-value="SELF" description="应用到哪些人,可选值: ALL/SELF/$MemberID(U/D/R)" />
</entity>
<entity name="ViewAddonsConfig" type-code="015" description="视图页相关配置">
@ -129,7 +127,7 @@
<field name="dashboardId" type="primary" />
<field name="title" type="string" max-length="100" nullable="false" />
<field name="config" type="text" description="JSON格式配置" nullable="false" />
<field name="shareTo" type="string" default-value="SELF" description="共享给哪些人,可选值: ALL/SELF/$MemberID(U/D/R)" />
<field name="shareTo" type="string" max-length="420" default-value="SELF" description="共享给哪些人,可选值: ALL/SELF/$MemberID(U/D/R)" />
</entity>
<entity name="ChartConfig" type-code="017" description="图表配置">
@ -158,25 +156,26 @@
<entity name="Notification" type-code="022" description="通知消息">
<field name="messageId" type="primary" />
<field name="messageType" type="small-int" default-value="0" updatable="false" />
<field name="fromUser" type="reference" ref-entity="User" nullable="false" updatable="false" />
<field name="toUser" type="reference" ref-entity="User" nullable="false" updatable="false" />
<field name="message" type="string" max-length="600" updatable="false" />
<field name="messageRich" type="text" max-length="6000" updatable="false" />
<field name="message" type="string" max-length="1000" updatable="false" />
<field name="relatedRecord" type="any-reference" updatable="false" description="相关业务记录" />
<field name="unread" type="bool" default-value="T" />
<index field-list="toUser,unread" />
<index field-list="toUser,unread,createdOn" />
</entity>
<entity name="Attachment" type-code="023" description="附件">
<field name="attachmentId" type="primary" />
<field name="belongEntity" type="small-int" default-value="0" updatable="false" />
<field name="belongField" type="string" max-length="" updatable="false" />
<field name="relatedRecord" type="string" max-length="20" updatable="false" description="相关业务记录" />
<field name="filePath" type="string" max-length="100" nullable="false" />
<field name="belongField" type="string" max-length="100" updatable="false" />
<field name="relatedRecord" type="any-reference" updatable="false" description="相关业务记录" />
<field name="filePath" type="string" max-length="200" nullable="false" />
<field name="fileType" type="string" max-length="20" />
<field name="fileSize" type="int" default-value="0" description="in KB" />
<field name="inFolder" type="reference" ref-entity="AttachmentFolder" cascade="remove-links" />
<index field-list="belongEntity,belongField,filePath"/>
<index field-list="relatedRecord"/>
<index field-list="inFolder,createdOn"/>
</entity>
<entity name="AttachmentFolder" type-code="024" description="附件目录">

View file

@ -15,7 +15,7 @@
</listener>
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
@ -27,10 +27,19 @@
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>etagFilter</filter-name>
<filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>etagFilter</filter-name>
<url-pattern>/user/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

View file

@ -14,7 +14,7 @@
<link rel="stylesheet" type="text/css" href="${baseUrl}/assets/css/rb-base.css">
<link rel="stylesheet" type="text/css" href="${baseUrl}/assets/css/rb-page.css">
<meta name="rb.env" content="<%=AppUtils.devMode() ? "dev" : "production"%>">
<meta name="rb.baseUrl" content="${pageContext.request.contextPath}">
<meta name="rb.baseUrl" content="${baseUrl}">
<meta name="rb.storageUrl" content="<%=SystemConfiguration.getStorageUrl()%>">
<%if (AppUtils.isAdminUser(request)){%>
<meta name="rb.isAdminUser" content="true">

View file

@ -38,12 +38,12 @@ $(document).ready(function(){
maximumSelectionLength: 1,
allowClear: true,
ajax: {
url: rb.baseUrl + '/commons/search',
url: rb.baseUrl + '/app/entity/search',
delay: 300,
data: function(params) {
let query = {
entity: 'Department',
fields: 'name',
qfields: 'name',
q: params.term,
}
return query

View file

@ -38,12 +38,12 @@ $(document).ready(function(){
maximumSelectionLength: 1,
allowClear: true,
ajax: {
url: rb.baseUrl + '/commons/search',
url: rb.baseUrl + '/app/entity/search',
delay: 300,
data: function(params) {
let query = {
entity: 'Role',
fields: 'name',
qfields: 'name',
q: params.term,
}
return query

View file

@ -33,7 +33,7 @@ $(document).ready(function(){
$('.J_dash-select').click( ()=>{ })
$('.J_dash-new').click( ()=>{ renderRbcomp(<DlgDashAdd />) })
$('.J_dash-edit').click(()=>{ renderRbcomp(<DlgDashSettings dashid={dashid} title={d[1]} shareToAll={d[4] == 'ALL'} />) })
$('.J_chart-new').click(()=>{ renderRbcomp(<DlgAddChart dashid={dashid} />) })
$('.J_chart-new').click(()=>{ add_chart() })
$('.J_chart-select').click(()=>{ })
}))
})
@ -45,6 +45,10 @@ $(window).resize(() => {
}, 200, 'resize-charts')
})
const add_chart = ()=>{
renderRbcomp(<DlgAddChart dashid={dashid} />)
}
let gridster = null
let gridster_undata = true
let render_dashboard = function(cfg){
@ -116,7 +120,7 @@ class DlgAddChart extends RbFormHandler {
super(props)
}
render() {
return (<RbModal title="添加图表" ref="dlg" destroyOnHide={false}>
return (<RbDialog title="添加图表" ref="dlg">
<form>
<div className="form-group row">
<label className="col-sm-3 col-form-label text-sm-right">图表数据来源</label>
@ -130,7 +134,7 @@ class DlgAddChart extends RbFormHandler {
</div>
</div>
</form>
</RbModal>)
</RbDialog>)
}
componentDidMount() {
let that = this
@ -139,15 +143,15 @@ class DlgAddChart extends RbFormHandler {
$(res.data).each(function(){
$('<option value="' + this.name + '">' + this.label + '</option>').appendTo(entity_el)
})
this.select2 = entity_el.select2({
this.__select2 = entity_el.select2({
language: 'zh-CN',
placeholder: '选择数据源',
placeholder: '选择数据源',
width: '100%'
})
})
}
next() {
let e = this.select2.val()
let e = this.__select2.val()
if (!!!e) return
location.href = rb.baseUrl + '/dashboard/chart-design?source=' + e + '&dashid=' + this.props.dashid
}
@ -158,7 +162,7 @@ class DlgDashSettings extends RbFormHandler {
super(props)
}
render() {
return (<RbModal title="仪表盘设置" ref="dlg" destroyOnHide={false}>
return (<RbDialog title="仪表盘设置" ref="dlg">
<form>
<div className="form-group row">
<label className="col-sm-3 col-form-label text-sm-right">名称</label>
@ -181,7 +185,7 @@ class DlgDashSettings extends RbFormHandler {
</div>
</div>
</form>
</RbModal>)
</RbDialog>)
}
save() {
let _data = { shareTo: this.state.shareToAll == true ? 'ALL' : 'SELF', title: this.state.title || '默认仪表盘' }
@ -200,7 +204,7 @@ class DlgDashAdd extends RbFormHandler {
super(props)
}
render() {
return (<RbModal title="添加仪表盘" ref="dlg" destroyOnHide={true}>
return (<RbDialog title="添加仪表盘" ref="dlg">
<form>
<div className="form-group row">
<label className="col-sm-3 col-form-label text-sm-right">名称</label>
@ -223,7 +227,7 @@ class DlgDashAdd extends RbFormHandler {
</div>
</div>
</form>
</RbModal>)
</RbDialog>)
}
save() {
let _data = { title: this.state.title || '我的仪表盘' }

View file

@ -4,29 +4,27 @@
(function($) {
$.fn.extend({
'button': function(state) {
var el = $(this)
if (el.prop('nodeName') != 'BUTTON') return this
if (state == 'loading') {
el.attr('disabled', true)
var loadingText = el.data('loading-text')
if (loadingText){
var that = this
this.__loadingTextTimer = setTimeout(function(){
that.__textHold = el.html()
el.text(loadingText)
}, 200)
}
} else if (state == 'reset') {
el.attr('disabled', false)
if (this.__loadingTextTimer) {
clearTimeout(this.__loadingTextTimer)
this.__loadingTextTimer = null
if (this.__textHold) {
el.html(this.__textHold)
return this.each(function(){
var el = $(this)
if (el.prop('nodeName') != 'BUTTON') return
if (state == 'loading') {
el.attr('disabled', true)
var loadingText = el.data('loading-text')
if (loadingText){
this.__loadingTextTimer = setTimeout(()=>{
this.__textHold = el.html()
el.text(loadingText)
}, 200)
}
} else if (state == 'reset') {
el.attr('disabled', false)
if (this.__loadingTextTimer) {
clearTimeout(this.__loadingTextTimer)
this.__loadingTextTimer = null
if (this.__textHold) el.html(this.__textHold)
}
}
}
return this
})
}
})

View file

@ -6,7 +6,7 @@ class RbDialog extends React.Component {
}
render() {
let inFrame = !!!this.props.children
return (<div className="modal rbmodal colored-header colored-header-primary" ref="rbmodal">
return (<div className="modal rbmodal colored-header colored-header-primary" tabIndex="-1" ref="rbmodal">
<div className="modal-dialog" style={{ maxWidth:(this.props.width || 680) + 'px' }}>
<div className="modal-content">
<div className="modal-header modal-header-colored">

View file

@ -36,7 +36,7 @@
<div class="tab-pane active" id="ENTITY">
<select class="form-control form-control-sm J_menuEntity">
<option value="">请选择关联项</option>
<optgroup label="实体"></optgroup>
<optgroup label="业务实体"></optgroup>
</select>
</div>
<div class="tab-pane" id="URL">

View file

@ -22,8 +22,6 @@ import org.dom4j.Element;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.rebuild.server.metadata.EntityHelper;
import cn.devezhao.persist4j.Entity;
import cn.devezhao.persist4j.PersistManagerFactory;
import cn.devezhao.persist4j.engine.PersistManagerFactoryImpl;
@ -45,7 +43,7 @@ public class SchemaGen {
CTX = new ClassPathXmlApplicationContext(new String[] { "application-ctx.xml", });
PMF = CTX.getBean(PersistManagerFactoryImpl.class);
// genAll();
genAll();
// gen(EntityHelper.MetaEntity);
// gen(EntityHelper.MetaField);
// gen(EntityHelper.PickList);
@ -54,9 +52,9 @@ public class SchemaGen {
// gen(EntityHelper.ViewAddonsConfig);
// gen(EntityHelper.LayoutConfig);
// gen(EntityHelper.FilterConfig);
gen(EntityHelper.ShareAccess);
// gen(EntityHelper.ShareAccess);
// gen(EntityHelper.SystemConfig);
gen(EntityHelper.Notification);
// gen(EntityHelper.Notification);
// gen(EntityHelper.User);
// gen(EntityHelper.DashboardConfig);
// gen(EntityHelper.ChartConfig);