yoqw/web/cms/app/components/status-toggle-button.js
2020-07-03 15:40:31 +08:00

87 lines
2.9 KiB
JavaScript

import BaseComponent from './basic-component';
import { computed } from '@ember/object';
import { alias } from '@ember/object/computed';
import { addObserver } from '@ember/object/observers';
import { assign } from '@ember/polyfills';
export default BaseComponent.extend({
tagName: 'a',
attributeBindings: ['title', 'data-original-title', 'role', 'data-rel'],
role: 'button',
'data-rel': 'tooltip',
'enabled-text': '启用',
enabledText: alias('enabled-text'),
'disabled-text': '禁用',
disabledText: alias('disabled-text'),
'enabled-op': 'enable',
enabledOp: alias('enabled-op'),
'disabled-op': 'disable',
disabledOp: alias('disabled-op'),
'enabled-icon': 'fa-ban',
'disabled-icon': 'fa-check',
'enabled-class': 'btn-warning',
'disabled-class': 'btn-success',
field: 'active',
title: computed('enabled', function() {
const me = this;
return me.get('enabled') ?
me.get('disabled-text') :
me.get('enabled-text');
}),
'data-original-title': alias('title'),
'iconOnly': alias('icon-only'),
op: computed('enabled', function() {
const me = this;
return me.get('enabled') ?
me.get('disabled-op') || me.get('disabled-text')
: me.get('enabled-op') || me.get('enabled-text');
}),
'icon-size-class': '',
iconSizeClass: alias('icon-size-class'),
didReceiveAttrs() {
const me = this;
// me.enabled = alias('model.' + me.get('field'));
const field = me.getFieldPath();
me.set('enabled', me.get(field));
addObserver(me, field, function() {
me.set('enabled', me.get(field));
});
if (me.get('icon-only')) {
me.setProperties({
'icon-size-class': 'bigger-130',
'classNameBindings': ['enabled:orange:light-green']
});
}
else {
me.setProperties({
classNames: ['btn', 'btn-xs'],
classNameBindings: [
['enabled',
me.get('enabled-class'),
me.get('disabled-class')].join(':')]
});
}
},
click() {
const me = this;
const onClick = me.get('on-click');
onClick ? onClick() : me.doUpdate();
},
doUpdate() {
const me = this;
me.get('dialog').confirm('确认要' + me.get('title') + '吗?', () => {
const model = me.get('model');
const value = !me.get('enabled');
me.set('model.' + me.get('field'), value);
me.get('service').ajaxPost('update-field',
assign({id: model.id, field: me.get('field'), value: value},
me.get('params') || {}));
});
},
getFieldPath() {
const me = this;
return 'model.' + (me.get('field') || 'enabled');
}
});