|
|
@@ -0,0 +1,100 @@
|
|
|
+/**
|
|
|
+ * Created by zhouy on 2018/10/17.
|
|
|
+ */
|
|
|
+Ext.define('saas.view.core.form.MultiCombo', {
|
|
|
+ extend: 'Ext.form.field.Trigger',
|
|
|
+ alias: 'widget.multicombo',
|
|
|
+ editable : false,
|
|
|
+ displayField:'display',
|
|
|
+ valueField:'value',
|
|
|
+ matchFieldWidth: true,
|
|
|
+ cachedConfig: {
|
|
|
+ menuAlign: 'tl-bl?',
|
|
|
+ destroyMenu: true
|
|
|
+ },
|
|
|
+ initComponent: function() {
|
|
|
+ var me = this;
|
|
|
+ me.callParent(arguments);
|
|
|
+ },
|
|
|
+ onTriggerClick:function(f){
|
|
|
+ this.showMenu();
|
|
|
+ },
|
|
|
+ getMenu: function() {
|
|
|
+ var me = this;
|
|
|
+
|
|
|
+ if (!me.menu) {
|
|
|
+
|
|
|
+ me.menu = Ext.create('Ext.menu.Menu',{
|
|
|
+ hideOnParentHide: false,
|
|
|
+ items: me.getMenuItems()
|
|
|
+ //listners
|
|
|
+ });
|
|
|
+ me.fireEvent('menucreate', me, me.menu);
|
|
|
+ }
|
|
|
+ return me.menu;
|
|
|
+ },
|
|
|
+ getMenuItems:function(){
|
|
|
+ var me = this,
|
|
|
+ i = 0,
|
|
|
+ item,
|
|
|
+ items = me.datas;
|
|
|
+ itemsLn = me.datas.length,
|
|
|
+ menuItems = [];
|
|
|
+ for (; i < itemsLn; i++) {
|
|
|
+ item = items[i];
|
|
|
+ menuItem = new Ext.menu.CheckItem({
|
|
|
+ text: item[1],
|
|
|
+ checked: item.checked,
|
|
|
+ checkValue:item[0],
|
|
|
+ hideOnClick: false,
|
|
|
+ checkHandler: this.onCheckChange,
|
|
|
+ scope: this
|
|
|
+ });
|
|
|
+ menuItems.push(menuItem);
|
|
|
+ }
|
|
|
+ return menuItems.length ? menuItems : null;
|
|
|
+ },
|
|
|
+ onCheckChange:function(checkItem, checked){
|
|
|
+ var items=this.menu.items.items,
|
|
|
+ rawV,v;
|
|
|
+ Ext.Array.each(items,function(item){
|
|
|
+ if(item.checked){
|
|
|
+ rawV=rawV?rawV+','+item.text:item.text;
|
|
|
+ v=v?v+","+"'"+item.checkValue+"'":"'"+item.checkValue+"'";
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.setRawValue(rawV);
|
|
|
+ this.value=v;
|
|
|
+ },
|
|
|
+
|
|
|
+ showMenu: function (e, menu) {
|
|
|
+ var isPointerEvent = !e || e.pointerType;
|
|
|
+
|
|
|
+ menu = menu || this.getMenu();
|
|
|
+ /**
|
|
|
+ * menu上边框样式待处理
|
|
|
+ * */
|
|
|
+ if (menu) {
|
|
|
+ if (menu.isVisible()) {
|
|
|
+ // Click/tap toggles the menu visibility.
|
|
|
+ if (isPointerEvent) {
|
|
|
+ menu.hide();
|
|
|
+ } else {
|
|
|
+ menu.focus();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ menu.autoFocus = !isPointerEvent;
|
|
|
+ if(this.matchFieldWidth){
|
|
|
+ menu.setWidth(this.bodyEl.getWidth());
|
|
|
+ }
|
|
|
+ if (menu.isMenu) {
|
|
|
+ menu.showBy(this.inputEl, this.getMenuAlign(),[-1, 0]);
|
|
|
+ } else if (menu.isViewportMenu) {
|
|
|
+ menu.setDisplayed(!menu.getDisplayed());
|
|
|
+ } else {
|
|
|
+ menu.show();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+});
|