fix: RbAlertBox dismiss (#692)

* fix: RbAlertBox dismiss

* be: AutoApproval
This commit is contained in:
REBUILD 企业管理系统 2023-12-11 11:37:45 +08:00 committed by GitHub
parent 9e9ceb063d
commit bb233dca10
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 23 additions and 31 deletions

2
@rbv

@ -1 +1 @@
Subproject commit a4de177b845e1ae7d47881be646aff468d9e09fc Subproject commit a207cc6fbf3d074b656b22025cb1eec27583be6e

View file

@ -7,9 +7,9 @@
## 项目特色 ## 项目特色
**_REBUILD 通过创新的业务流程引擎帮助你快速搭建各类企业管理系统,全图形化配置无需了解技术。_** **_相较于同类产品REBUILD 更侧重于业务需求实现,而非基础的技术框架或项目启动模板。_**
REBUILD 侧重于业务需求实现,而非基础技术框架或项目启动模板,通过 REBUILD 可以真正实现零代码快速搭建!无需编程、无需编译代码,甚至无需了解任何技术 「开放式设计」是 REBUILD 的重要设计理念。得益于研发团队成熟的 B 端产品经验,我们实现了对企业日常各类需求的可配置化管理。全图形化系统设计搭建,所见即所得
更多详情介绍 [https://getrebuild.com/](https://getrebuild.com/) 更多详情介绍 [https://getrebuild.com/](https://getrebuild.com/)
@ -89,7 +89,7 @@ REBUILD 对于开发环境的要求非常简单,由于使用 Java 开发,因
## 授权 License ## 授权 License
REBUILD 使用 GPL-3.0 开源许可和商业授权双重授权协议,使用将被视为你自愿承诺接受 [协议](https://getrebuild.com/legal/service-terms) 之所有条款。 REBUILD 使用 GPL-3.0 开源许可和商业授权双重授权协议,使用将被视为你自愿承诺接受 [用户服务协议](https://getrebuild.com/legal/service-terms) 之所有条款。
REBUILD uses the GPL-3.0 open source license and commercial license dual license agreement. Use will be deemed your voluntary commitment to accept all terms of the [Agreement](https://getrebuild.com/legal/service-terms). REBUILD uses the GPL-3.0 open source license and commercial license dual license agreement. Use will be deemed your voluntary commitment to accept all terms of the [Agreement](https://getrebuild.com/legal/service-terms).

View file

@ -10,7 +10,7 @@
</parent> </parent>
<groupId>com.rebuild</groupId> <groupId>com.rebuild</groupId>
<artifactId>rebuild</artifactId> <artifactId>rebuild</artifactId>
<version>3.5.0-beta4</version> <version>3.5.0</version>
<name>rebuild</name> <name>rebuild</name>
<description>Building your business-systems freely!</description> <description>Building your business-systems freely!</description>
<url>https://getrebuild.com/</url> <url>https://getrebuild.com/</url>

View file

@ -74,11 +74,11 @@ public class Application implements ApplicationListener<ApplicationStartedEvent>
/** /**
* Rebuild Version * Rebuild Version
*/ */
public static final String VER = "3.5.0-beta4"; public static final String VER = "3.5.0";
/** /**
* Rebuild Build [MAJOR]{1}[MINOR]{2}[PATCH]{2}[BUILD]{2} * Rebuild Build [MAJOR]{1}[MINOR]{2}[PATCH]{2}[BUILD]{2}
*/ */
public static final int BUILD = 3050004; public static final int BUILD = 3050005;
static { static {
// Driver for DB // Driver for DB

View file

@ -13,6 +13,8 @@ import com.rebuild.core.Application;
import com.rebuild.core.UserContextHolder; import com.rebuild.core.UserContextHolder;
import com.rebuild.core.metadata.MetadataHelper; import com.rebuild.core.metadata.MetadataHelper;
import com.rebuild.core.privileges.UserService; import com.rebuild.core.privileges.UserService;
import com.rebuild.core.service.approval.ApprovalHelper;
import com.rebuild.core.service.approval.ApprovalState;
import com.rebuild.core.service.approval.ApprovalStepService; import com.rebuild.core.service.approval.ApprovalStepService;
import com.rebuild.core.service.general.OperatingContext; import com.rebuild.core.service.general.OperatingContext;
import com.rebuild.core.service.trigger.ActionContext; import com.rebuild.core.service.trigger.ActionContext;
@ -68,7 +70,13 @@ public class AutoApproval extends TriggerAction implements LazyWaitDetailsFinish
return FLAG_LAZY; return FLAG_LAZY;
} }
ID recordId = operatingContext.getFixedRecordId(); final ID recordId = operatingContext.getFixedRecordId();
ApprovalState currentState = ApprovalHelper.getApprovalState(recordId);
if (currentState == ApprovalState.PROCESSING || currentState == ApprovalState.APPROVED) {
return TriggerResult.wran("Ignored state");
}
String useApproval = ((JSONObject) actionContext.getActionContent()).getString("useApproval"); String useApproval = ((JSONObject) actionContext.getActionContent()).getString("useApproval");
// 优先使用当前用户 // 优先使用当前用户

View file

@ -5372,10 +5372,6 @@ div.dataTables_wrapper.compact div.dataTables_oper .btn-space {
border-radius: 6px; border-radius: 6px;
} }
.alert-mb-0 > .alert {
margin-bottom: 0;
}
.datetimepicker table tr .disabled, .datetimepicker table tr .disabled,
.datetimepicker table tr .disabled:hover { .datetimepicker table tr .disabled:hover {
color: #b3b3b3 !important; color: #b3b3b3 !important;

View file

@ -446,12 +446,12 @@ class RbAlertBox extends React.Component {
if (!icon) icon = type === 'success' ? 'check' : type === 'danger' ? 'close-circle-o' : 'info-outline' if (!icon) icon = type === 'success' ? 'check' : type === 'danger' ? 'close-circle-o' : 'info-outline'
return ( return (
<div className={`alert alert-icon alert-icon-border alert-dismissible alert-sm alert-${type}`} ref={(c) => (this._element = c)}> <div className={`alert alert-icon alert-icon-border alert-dismissible alert-sm alert-${type} ${props.className || ''}`} ref={(c) => (this._element = c)}>
<div className="icon"> <div className="icon">
<i className={`zmdi zmdi-${icon}`} /> <i className={`zmdi zmdi-${icon}`} />
</div> </div>
<div className="message"> <div className="message">
<a className="close" onClick={() => this._handleClose()} title={$L('关闭')}> <a className="close" onClick={() => this._handleClose()} title={$L('关闭')} data-dismiss="alert">
<i className="zmdi zmdi-close" /> <i className="zmdi zmdi-close" />
</a> </a>
<div>{props.message || 'INMESSAGE'}</div> <div>{props.message || 'INMESSAGE'}</div>
@ -461,7 +461,7 @@ class RbAlertBox extends React.Component {
} }
_handleClose() { _handleClose() {
$unmount($(this._element).parent(), 10, true) // $unmount($(this._element).parent(), 10, true)
typeof this.props.onClose === 'function' && this.props.onClose() typeof this.props.onClose === 'function' && this.props.onClose()
} }
} }

View file

@ -634,9 +634,7 @@ class BatchApprove extends BatchOperator {
<label className="text-bold">{$L('批注')}</label> <label className="text-bold">{$L('批注')}</label>
<textarea className="form-control form-control-sm row2x" name="approveRemark" placeholder={$L('输入批注 (可选)')} maxLength="600" onChange={this.handleChange} /> <textarea className="form-control form-control-sm row2x" name="approveRemark" placeholder={$L('输入批注 (可选)')} maxLength="600" onChange={this.handleChange} />
</div> </div>
<div className="alert-mb-0"> <RbAlertBox message={$L('仅处于待你审批且允许批量审批的记录才能审批成功')} className="mb-0" />
<RbAlertBox message={$L('仅处于待你审批且允许批量审批的记录才能审批成功')} />
</div>
</div> </div>
) )
} }

View file

@ -727,13 +727,13 @@ var $createUploader = function (input, next, complete, error) {
var $initUploader = $createUploader var $initUploader = $createUploader
/** /**
* 卸载 React 组件 * 卸载 React 组件顶级组件才能卸载
*/ */
var $unmount = function (container, delay, keepContainer) { var $unmount = function (container, delay, keepContainer) {
if (!container) return if (!container) return
var $c = $(container) var $c = $(container)
setTimeout(function () { setTimeout(function () {
ReactDOM.unmountComponentAtNode($c[0]) ReactDOM.unmountComponentAtNode($c[0]) // return is unmounted
if (keepContainer !== true && $c.prop('tagName') !== 'BODY') $c.remove() if (keepContainer !== true && $c.prop('tagName') !== 'BODY') $c.remove()
}, delay || 1000) }, delay || 1000)
} }

View file

@ -384,17 +384,7 @@ class DlgSpecFields extends RbModalHandler {
return ( return (
<RbModal title={$L('指定字段')} ref={(c) => (this._dlg = c)} disposeOnHide width="780"> <RbModal title={$L('指定字段')} ref={(c) => (this._dlg = c)} disposeOnHide width="780">
<div className="p-1"> <div className="p-1">
<div className="alert alert-warning alert-icon alert-icon-border alert-dismissible alert-sm"> <RbAlertBox message={$L('指定字段被更新时触发默认为全部字段')} />
<div className="icon">
<span className="zmdi zmdi-info-outline" />
</div>
<div className="message">
<a className="close" data-dismiss="alert">
<span className="zmdi zmdi-close" />
</a>
<p>{$L('指定字段被更新时触发默认为全部字段')}</p>
</div>
</div>
<div className="row " ref={(c) => (this._fields = c)}> <div className="row " ref={(c) => (this._fields = c)}>
{(this.state.fields || []).map((item) => { {(this.state.fields || []).map((item) => {