text: BI.DynamicYearQuarterCombo = BI.inherit(BI.Widget, {
  
      props: {
          baseCls: "bi-year-quarter-combo bi-border bi-focus-shadow",
          behaviors: {},
          min: "1900-01-01", // 最小日期
          max: "2099-12-31", // 最大日期
          height: 22
      },
  
      _init: function () {
          BI.DynamicYearQuarterCombo.superclass._init.apply(this, arguments);
          var self = this, o = this.options;
          this.storeValue = o.value;
          self.storeTriggerValue = "";
          this.trigger = BI.createWidget({
              type: "bi.dynamic_year_quarter_trigger",
              min: o.min,
              max: o.max,
              height: o.height,
              value: o.value || ""
          });
          this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN, function () {
              self.combo.isViewVisible() && self.combo.hideView();
          });
          this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_START, function () {
              self.combo.isViewVisible() && self.combo.hideView();
          });
          this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_STOP, function () {
              self.combo.showView();
          });
          this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_ERROR, function () {
              self.combo.isViewVisible() && self.combo.hideView();
          });
          this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_CONFIRM, function () {
              // 没看出来干啥的，先去掉
              // if (self.combo.isViewVisible()) {
              //     return;
              // }
              var dateStore = self.storeTriggerValue;
              var dateObj = self.trigger.getKey();
              if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) {
                  self.storeValue = self.trigger.getValue();
                  self.setValue(self.trigger.getValue());
              }
              self._checkDynamicValue(self.storeValue);
              self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM);
          });
          this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_FOCUS, function () {
              self.storeTriggerValue = self.trigger.getKey();
          });
  
          this.combo = BI.createWidget({
              type: "bi.combo",
              container: o.container,
              isNeedAdjustHeight: false,
              isNeedAdjustWidth: false,
              el: this.trigger,
              popup: {
                  minWidth: 85,
                  stopPropagation: false,
                  el: {
                      type: "bi.dynamic_year_quarter_popup",
                      ref: function () {
                          self.popup = this;
                      },
                      listeners: [{
                          eventName: BI.DynamicYearQuarterPopup.EVENT_CHANGE,
                          action: function () {
                              self.setValue(self.popup.getValue());
                              self.combo.hideView();
                              self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM);
                          }
                      }, {
                          eventName: BI.DynamicYearQuarterPopup.BUTTON_CLEAR_EVENT_CHANGE,
                          action: function () {
                              self.setValue();
                              self.combo.hideView();
                              self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM);
                          }
                      }, {
                          eventName: BI.DynamicYearQuarterPopup.BUTTON_lABEL_EVENT_CHANGE,
                          action: function () {
                              var date = BI.getDate();
                              self.setValue({type: BI.DynamicYearMonthCombo.Static, value: {year: date.getFullYear(), quarter: BI.getQuarter(date)}});
                              self.combo.hideView();
                              self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);
                          }
                      }, {
                          eventName: BI.DynamicYearQuarterPopup.BUTTON_OK_EVENT_CHANGE,
                          action: function () {
                              self.setValue(self.popup.getValue());
                              self.combo.hideView();
                              self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);
                          }
                      }],
                      behaviors: o.behaviors,
                      min: o.min,
                      max: o.max
                  },
                  value: o.value || ""
              }
          });
          this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {
              self.popup.setValue(self.storeValue);
              self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_BEFORE_POPUPVIEW);
          });
  
          BI.createWidget({
              type: "bi.htape",
              element: this,
              ref: function () {
                  self.comboWrapper = this;
              },
              items: [{
                  el: {
                      type: "bi.icon_button",
                      cls: "bi-trigger-icon-button date-change-h-font",
                      width: 24,
                      height: 24,
                      ref: function () {
                          self.changeIcon = this;
                      }
                  },
                  width: 24
              }, this.combo]
          });
          this._checkDynamicValue(o.value);
      },
  
      _checkDynamicValue: function (v) {
          var type = null;
          if (BI.isNotNull(v)) {
              type = v.type;
          }
          switch (type) {
              case BI.DynamicYearQuarterCombo.Dynamic:
                  this.changeIcon.setVisible(true);
                  this.comboWrapper.attr("items")[0].width = 24;
                  this.comboWrapper.resize();
                  break;
              default:
                  this.comboWrapper.attr("items")[0].width = 0;
                  this.comboWrapper.resize();
                  this.changeIcon.setVisible(false);
                  break;
          }
      },
  
      setValue: function (v) {
          this.storeValue = v;
          this.trigger.setValue(v);
          this._checkDynamicValue(v);
      },
  
      getValue: function () {
          return this.storeValue;
      }
  
  });
  BI.DynamicYearQuarterCombo.EVENT_CONFIRM = "EVENT_CONFIRM";
  BI.DynamicYearQuarterCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW";
  BI.shortcut("bi.dynamic_year_quarter_combo", BI.DynamicYearQuarterCombo);
  
  BI.extend(BI.DynamicYearQuarterCombo, {
      Static: 1,
      Dynamic: 2
  });