diff --git a/src/main/webapp/assets/js/assign-share.jsx b/src/main/webapp/assets/js/assign-share.jsx index 17dbb60a3..58de7e57c 100644 --- a/src/main/webapp/assets/js/assign-share.jsx +++ b/src/main/webapp/assets/js/assign-share.jsx @@ -1,5 +1,5 @@ // ~~ 分派 -class DlgAssign extends RbDialogHandler { +class DlgAssign extends RbModalHandler { constructor(props) { super(props) this.onView = !!window.RbViewPage @@ -7,7 +7,7 @@ class DlgAssign extends RbDialogHandler { this.typeName = '分派' } render() { - return ( + return (
{this.onView == true ? null : (
@@ -44,7 +44,7 @@ class DlgAssign extends RbDialogHandler {
-
) + ) } componentDidMount() { $(this.refs['toUser']).select2({ @@ -127,13 +127,13 @@ class DlgShare extends DlgAssign { } // ~~ 管理共享 -class DlgUnShare extends RbDialogHandler { +class DlgUnShare extends RbModalHandler { constructor(props) { super(props) this.state.selectAccess = [] } render(){ - return ( + return (
    {(this.state.sharingList ||[]).map((item)=>{ @@ -150,7 +150,7 @@ class DlgUnShare extends RbDialogHandler {
-
) + ) } componentDidMount() { $.get(`${rb.baseUrl}/app/entity/sharing-list?id=${this.props.id}`, (res)=>{ diff --git a/src/main/webapp/assets/js/bizuser/user-view.jsx b/src/main/webapp/assets/js/bizuser/user-view.jsx index 432e7d919..85f108ead 100644 --- a/src/main/webapp/assets/js/bizuser/user-view.jsx +++ b/src/main/webapp/assets/js/bizuser/user-view.jsx @@ -46,14 +46,14 @@ const toggleDisabled = function(disabled){ } // 变更部门 -class DlgChangeDept extends RbDialogHandler { +class DlgChangeDept extends RbModalHandler { constructor(props) { super(props) this.type = 'Department' this.typeName = '部门' } render(){ - return ( + return (
@@ -68,7 +68,7 @@ class DlgChangeDept extends RbDialogHandler {
-
) + ) } componentDidMount() { let that = this diff --git a/src/main/webapp/assets/js/charts/chart-design.jsx b/src/main/webapp/assets/js/charts/chart-design.jsx index 9508160ba..53c2d2de4 100644 --- a/src/main/webapp/assets/js/charts/chart-design.jsx +++ b/src/main/webapp/assets/js/charts/chart-design.jsx @@ -38,15 +38,12 @@ $(document).ready(() => { } }).disableSelection() - let dlg_filter let saveFilter = function(filter){ - dlg_filter.hide() esourceFilter = filter render_preview() } $('.J_filter').click(()=>{ - if (dlg_filter) dlg_filter.show() - else dlg_filter = renderRbcomp() + renderRbcomp() }) let cts = $('.chart-type > a').click(function(){ @@ -93,7 +90,7 @@ $(window).resize(() => { }) const CTs = { SUM:'求和', AVG:'平均值', MAX:'最大值', MIN:'最小值', COUNT:'计数', Y:'按年', Q:'按季', M:'按月', D:'按日', H:'按时' } -let axis_props = null +let dlgAxisProps let add_axis = ((target, axis) => { let el = $($('#axis-ietm').html()).appendTo($(target)) let fName = null @@ -149,9 +146,13 @@ let add_axis = ((target, axis) => { _this.addClass('text-primary') render_preview() } else { - let state = { axisEl: el, isNumAxis: isNumAxis, label: el.attr('data-label'), scale: el.attr('data-scale') } - if (axis_props) axis_props.show(state) - else axis_props = renderRbcomp() + let state = { isNumAxis: isNumAxis, label: el.attr('data-label'), scale: el.attr('data-scale') } + state.callback = (s)=>{ + el.attr({ 'data-label': s.label, 'data-scale': s.scale }) + render_preview() + } + if (dlgAxisProps) dlgAxisProps.show(state) + else dlgAxisProps = renderRbcomp() } }) if (!!calc) el.find('.dropdown-menu li[data-calc="' + calc + '"]').addClass('text-primary') @@ -246,26 +247,24 @@ let __build_axisItem = ((item, isNum) => { return x }) -class DlgAxisProps extends React.Component { +class DlgAxisProps extends RbFormHandler { constructor(props) { super(props) - this.state = { ...props } - this.changeVal = this.changeVal.bind(this) } render() { - return ( -
+ return ( +
- +
{this.state.isNumAxis !== true ? null :
- @@ -277,26 +276,15 @@ class DlgAxisProps extends React.Component { }
- + + this.hide()}>取消
- ) - } - changeVal(e) { - let id = e.target.dataset.id - let vvv = {} - vvv[id] = e.target.value - this.setState({ ...vvv }) + ) } saveProps() { - this.state.axisEl.attr({ 'data-label': this.state['label'], 'data-scale': this.state['scale'] }) - this.refs['dlg'].hide() - render_preview() - } - show(state) { - this.setState({ ...state }, () => { - this.refs['dlg'].show() - }) + this.state.callback(this.state) + this.hide() } } \ No newline at end of file diff --git a/src/main/webapp/assets/js/charts/dashboard.jsx b/src/main/webapp/assets/js/charts/dashboard.jsx index a6f665278..a5c1b032e 100644 --- a/src/main/webapp/assets/js/charts/dashboard.jsx +++ b/src/main/webapp/assets/js/charts/dashboard.jsx @@ -127,7 +127,7 @@ class DlgAddChart extends RbFormHandler { super(props) } render() { - return ( + return (
@@ -141,7 +141,7 @@ class DlgAddChart extends RbFormHandler {
- ) + ) } componentDidMount() { let that = this @@ -169,7 +169,7 @@ class DlgDashSettings extends RbFormHandler { super(props) } render() { - return ( + return (
@@ -192,7 +192,7 @@ class DlgDashSettings extends RbFormHandler {
- ) +
) } save() { let _data = { shareTo: this.state.shareToAll == true ? 'ALL' : 'SELF', title: this.state.title || '默认仪表盘' } @@ -211,7 +211,7 @@ class DlgDashAdd extends RbFormHandler { super(props) } render() { - return ( + return (
@@ -234,7 +234,7 @@ class DlgDashAdd extends RbFormHandler {
-
) +
) } save() { let _data = { title: this.state.title || '我的仪表盘' } diff --git a/src/main/webapp/assets/js/rb-advfilter.jsx b/src/main/webapp/assets/js/rb-advfilter.jsx index ed03dc0cb..03d4f4129 100644 --- a/src/main/webapp/assets/js/rb-advfilter.jsx +++ b/src/main/webapp/assets/js/rb-advfilter.jsx @@ -15,10 +15,10 @@ class AdvFilter extends React.Component { this.childrenRef = [] } render() { - let needSave = this.props.needSave == true + let showSave = this.props.showSave == true let operBtns = ( -
- +
+
) @@ -49,7 +49,7 @@ class AdvFilter extends React.Component {
} - {needSave ? + {showSave ?
{rb.isAdminUser !== true ? null :
@@ -68,8 +68,7 @@ class AdvFilter extends React.Component {
) - - if (this.props.inModal) return ({advFilter}) + if (this.props.inModal) return {advFilter} else return advFilter } componentDidMount() { @@ -178,22 +177,22 @@ class AdvFilter extends React.Component { confirm() { let adv = this.toFilterJson() if (!!!adv) return - if (this.props.confirm) this.props.confirm(adv, this.state.filterName, this.state.applyToAll) + else if (this.props.confirm) this.props.confirm(adv, this.state.filterName, this.state.applyToAll) else{ $.post(rb.baseUrl + '/app/entity/advfilter/test-parse', JSON.stringify(adv), function(res){ if (res.error_code == 0) console.log(JSON.stringify(adv) + '\n>> ' + res.data) else rb.notice(res.error_msg, 'danger') }) } + if (this.props.inModal) this.refs['dlg'].hide() } show(state) { if (this.props.inModal) this.refs['dlg'].show(state) } - hide(callCancel) { + hide() { if (this.props.inModal) this.refs['dlg'].hide() - // callback - if (callCancel == true && this.props.cancel) this.props.cancel() + if (this.props.cancel) this.props.cancel() } } diff --git a/src/main/webapp/assets/js/rb-components.jsx b/src/main/webapp/assets/js/rb-components.jsx index 31af17194..2400cb66f 100644 --- a/src/main/webapp/assets/js/rb-components.jsx +++ b/src/main/webapp/assets/js/rb-components.jsx @@ -1,5 +1,5 @@ -// ~~ Dialog 兼容子元素和 iFrame -class RbDialog extends React.Component { +// ~~ Modal 兼容子元素和 iFrame +class RbModal extends React.Component { constructor(props) { super(props) this.state = { ...props } @@ -51,12 +51,12 @@ class RbDialog extends React.Component { else height += 45; // .main-content's padding root.find('.modal-body').height(height) that.setState({ frameLoad: false }) - }, 100, 'RbDialog-resize') + }, 100, 'RbModal-resize') } } -//~~ Dialog 处理器 -class RbDialogHandler extends React.Component { +//~~ Modal 处理器 +class RbModalHandler extends React.Component { constructor(props) { super(props) this.state = { ...props } @@ -77,7 +77,7 @@ class RbDialogHandler extends React.Component { } // ~~ Form 处理器 -class RbFormHandler extends RbDialogHandler { +class RbFormHandler extends RbModalHandler { constructor(props) { super(props) this.handleChange = this.handleChange.bind(this) @@ -92,73 +92,6 @@ class RbFormHandler extends RbDialogHandler { } } -// ~~ 弹出窗口 -class RbModal extends React.Component { - constructor(props) { - super(props) - this.state = { ...props, inLoad: true, isDestroy: false } - } - render() { - return (this.state.isDestroy == true ? null : -
-
-
-
-

{this.state.title || 'RbModal'}

- -
-
- {this.props.children || } - -
-
-
-
- ) - } - componentDidMount() { - if (this.props.children) this.setState({ inLoad: false }) - this.show(this.props.onShow) - } - resize() { - if (!!!this.state.url) return // 非 iframe 无需 resize - - let root = $(this.refs['rbmodal']) - let that = this - $setTimeout(function(){ - let iframe = root.find('iframe') - let height = iframe.contents().find('.main-content').height() - if (height == 0) height = iframe.contents().find('body').height() - else height += 45; // .main-content's padding - root.find('.modal-body').height(height) - that.setState({ inLoad: false }) - }, 100, 'RbModal-resize') - } - show(callback) { - let that = this - this.setState({ isDestroy: false }, function(){ - $(that.refs['rbmodal']).modal({ show: true, backdrop: 'static' }) - typeof callback == 'function' && callback(that) - }) - } - hide(){ - let root = $(this.refs['rbmodal']) - let warp = root.parent() - root.modal('hide') - let destroy = true - if (this.props.destroyOnHide == false) destroy = false - else root.modal('dispose') - this.setState({ isDestroy: destroy, inLoad: destroy }, ()=>{ - if (destroy == true) { - setTimeout(() => { warp.remove() }, 200) - } - - // 如果还有其他 modal 处于 open 态, 则保持 modal-open,否则主窗口滚动条会消失 - if ($('.rbmodal.show').length > 0) $(document.body).addClass('modal-open') - }) - } -} - // ~~ 提示框 class RbAlert extends React.Component { constructor(props) { @@ -267,23 +200,27 @@ let rb = rb || {} rb.__currentModal rb.__currentModalCache = {} +// @url - URL in iframe +// @title +// @ext - more props rb.modal = function(url, title, ext) { ext = ext || {} - if (ext.destroyOnHide !== true) ext.destroyOnHide = false // default false - if (ext.destroyOnHide === false && !!rb.__currentModalCache[url]) { + ext.disposeOnHide = ext.disposeOnHide === true // default false + if (ext.disposeOnHide === false && !!rb.__currentModalCache[url]) { rb.__currentModal = rb.__currentModalCache[url] rb.__currentModal.show() - return rb.__currentModal } else { - rb.__currentModal = renderRbcomp() - if (ext.destroyOnHide === false) rb.__currentModalCache[url] = rb.__currentModal - return rb.__currentModal + rb.__currentModal = renderRbcomp() + if (ext.disposeOnHide == false){ // No cache + rb.__currentModalCache[url] = rb.__currentModal + } } + return rb.__currentModal } rb.modalHide = function(url){ if (url){ - let m = rb.__currentModalCache[url] - if (m) m.hide() + let c = rb.__currentModalCache[url] + if (c) c.hide() else console.warn('No Modal found by url-key : ' + url) } else if (rb.__currentModal) { rb.__currentModal.hide() @@ -291,25 +228,31 @@ rb.modalHide = function(url){ } rb.modalResize = function(url){ if (url){ - let m = rb.__currentModalCache[url] - if (m) m.resize() + let c = rb.__currentModalCache[url] + if (c) m.resize() else console.warn('No Modal found by url-key : ' + url) } else if (rb.__currentModal){ rb.__currentModal.resize() } } -rb.alert = function(message, title_ext, ext){ - let title = title_ext - if ($.type(title_ext) == 'object'){ +// @message +// @titleExt - title or ext +// @ext - more props +rb.alert = function(message, titleExt, ext){ + let title = titleExt + if ($.type(titleExt) == 'object'){ title = null - ext = title_ext + ext = titleExt } ext = ext || {} if (ext.html == true) return renderRbcomp() else return renderRbcomp() } +//@message +//@type - danger, warning or null +//@ext - more props rb.notice = function(message, type, ext){ if (top != self && parent.rb && parent.rb.notice){ parent.rb.notice(message, type, ext) diff --git a/src/main/webapp/assets/js/rb-forms.jsx b/src/main/webapp/assets/js/rb-forms.jsx index 36a424336..4d3d62362 100644 --- a/src/main/webapp/assets/js/rb-forms.jsx +++ b/src/main/webapp/assets/js/rb-forms.jsx @@ -848,7 +848,7 @@ class RbViewModal extends React.Component { // 如果还有其他 rbview 处于 open 态, 则保持 modal-open if ($('.rbview.show').length > 0) $(document.body).addClass('modal-open').css({ 'padding-right': 17 }) // subView always dispose - if (that.state.destroyOnHide == true) { + if (that.state.disposeOnHide == true) { root.modal('dispose') let warp = root.parent().parent() that.setState({ isDestroy: true }, function(){ @@ -909,7 +909,7 @@ rb.RbViewModal = function(props, subView) { let viewUrl = `${rb.baseUrl}/app/${props.entity}/view/${props.id}` if (subView == true){ rb.RbViewModalHide(props.id) - let m = renderRbcomp() + let m = renderRbcomp() rb.__currentRbFormModalCache[props.id] = m return m } diff --git a/src/main/webapp/assets/js/rb-list.jsx b/src/main/webapp/assets/js/rb-list.jsx index ecadf1db8..d40b6421d 100644 --- a/src/main/webapp/assets/js/rb-list.jsx +++ b/src/main/webapp/assets/js/rb-list.jsx @@ -568,7 +568,6 @@ const AdvFilters = { $.post(url, JSON.stringify(filter), function(res){ if (res.error_code == 0){ rb.notice('过滤项已保存', 'success') - that.__modal.hide() that.loadFilters() } else rb.notice(res.error_msg, 'danger') }) @@ -576,14 +575,14 @@ const AdvFilters = { showAdvFilter(id) { this.__cfgid = id - let props = { entity: this.__entity, inModal: true, needSave: true, confirm: this.saveFilter, destroyOnHide: true } + let props = { entity: this.__entity, inModal: true, showSave: true, confirm: this.saveFilter } if (!!!id){ - this.__modal = renderRbcomp() + renderRbcomp() }else{ let that = this $.get(rb.baseUrl + '/app/entity/advfilter/get?id=' + id, function(res){ let _data = res.data - that.__modal = renderRbcomp() + renderRbcomp() }) } } diff --git a/src/main/webapp/assets/js/user-settings.jsx b/src/main/webapp/assets/js/user-settings.jsx index 5f930a004..bf730e002 100644 --- a/src/main/webapp/assets/js/user-settings.jsx +++ b/src/main/webapp/assets/js/user-settings.jsx @@ -43,7 +43,7 @@ class DlgChangePasswd extends RbFormHandler { super(props) } render(){ - return ( + return (
@@ -70,7 +70,7 @@ class DlgChangePasswd extends RbFormHandler {
-
) +
) } post() { let s = this.state @@ -94,7 +94,7 @@ class DlgChangeEmail extends RbFormHandler { this.state = { ...this.state, vcodeDisabled: false, vcodeCountdown: '获取验证码' } } render(){ - return ( + return (
@@ -118,7 +118,7 @@ class DlgChangeEmail extends RbFormHandler {
-
) +
) } sendVCode() { let s = this.state