@whitesev/pops 2.0.8 → 2.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5843,40 +5843,44 @@ System.register('pops', [], (function (exports) {
5843
5843
  value: "select-1",
5844
5844
  text: "单选1",
5845
5845
  isHTML: false,
5846
- disable() {
5847
- return false;
5846
+ disable(value, allSelectedInfo) {
5847
+ return (allSelectedInfo.findIndex((it) => ["select-5"].includes(it.value)) !== -1);
5848
5848
  },
5849
5849
  },
5850
5850
  {
5851
5851
  value: "select-2",
5852
5852
  text: "单选2",
5853
5853
  isHTML: false,
5854
- disable() {
5855
- return false;
5854
+ disable(value, allSelectedInfo) {
5855
+ return (allSelectedInfo.findIndex((it) => ["select-5"].includes(it.value)) !== -1);
5856
5856
  },
5857
5857
  },
5858
5858
  {
5859
5859
  value: "select-3",
5860
5860
  text: "单选3",
5861
5861
  isHTML: false,
5862
- disable() {
5863
- return false;
5862
+ disable(value, allSelectedInfo) {
5863
+ return (allSelectedInfo.findIndex((it) => ["select-2", "select-5"].includes(it.value)) !== -1);
5864
5864
  },
5865
5865
  },
5866
5866
  {
5867
5867
  value: "select-4",
5868
5868
  text: "单选4",
5869
5869
  isHTML: false,
5870
- disable() {
5871
- return false;
5870
+ disable(value, allSelectedInfo) {
5871
+ return (allSelectedInfo.findIndex((it) => ["select-3", "select-5"].includes(it.value)) !== -1);
5872
5872
  },
5873
5873
  },
5874
5874
  {
5875
5875
  value: "select-5",
5876
- text: "单选5",
5876
+ text(value, allSelectedInfo) {
5877
+ return allSelectedInfo.findIndex((it) => ["select-4"].includes(it.value)) !== -1
5878
+ ? "单选5-禁用"
5879
+ : "单选5";
5880
+ },
5877
5881
  isHTML: false,
5878
- disable() {
5879
- return false;
5882
+ disable(value, allSelectedInfo) {
5883
+ return (allSelectedInfo.findIndex((it) => ["select-4"].includes(it.value)) !== -1);
5880
5884
  },
5881
5885
  },
5882
5886
  ],
@@ -7604,6 +7608,8 @@ System.register('pops', [], (function (exports) {
7604
7608
  $suffix: void 0,
7605
7609
  /** 下拉箭头图标 */
7606
7610
  $suffixIcon: void 0,
7611
+ /** 下拉列表弹窗的下拉列表容器 */
7612
+ $selectContainer: void 0,
7607
7613
  },
7608
7614
  $data: {
7609
7615
  /** 默认值 */
@@ -7615,7 +7621,7 @@ System.register('pops', [], (function (exports) {
7615
7621
  this.initDefault();
7616
7622
  this.inintEl();
7617
7623
  this.initPlaceHolder();
7618
- this.updateTagElement();
7624
+ this.initTagElement();
7619
7625
  this.setSelectContainerClickEvent();
7620
7626
  },
7621
7627
  /** 初始化默认值 */
@@ -7627,7 +7633,7 @@ System.register('pops', [], (function (exports) {
7627
7633
  text: dataItem.text,
7628
7634
  value: dataItem.value,
7629
7635
  isHTML: Boolean(dataItem.isHTML),
7630
- disable: dataItem.disable,
7636
+ disable: dataItem.disable?.bind(dataItem),
7631
7637
  });
7632
7638
  }
7633
7639
  });
@@ -7663,18 +7669,15 @@ System.register('pops', [], (function (exports) {
7663
7669
  });
7664
7670
  this.$el.$selectedPlaceHolderWrapper.appendChild($placeholder);
7665
7671
  },
7666
- /** 初始化tag */
7667
- updateTagElement() {
7672
+ /** 初始化tag元素 */
7673
+ initTagElement() {
7668
7674
  // 遍历数据,寻找对应的值
7669
7675
  formConfig.data.forEach((dataItem) => {
7670
7676
  let findValue = this.$data.selectInfo.find((item) => item.value === dataItem.value);
7671
7677
  if (findValue) {
7672
- // 选中的值和获取的所有的值相同
7673
- let selectedInfo = this.createSelectedItem({
7674
- text: dataItem.text,
7675
- isHTML: dataItem.isHTML,
7676
- });
7677
- this.addSelectedItem(selectedInfo.$tag);
7678
+ // 存在对应的值
7679
+ let selectedInfo = this.createSelectedTagItem(dataItem);
7680
+ this.addSelectedTagItem(selectedInfo.$tag);
7678
7681
  this.setSelectedItemCloseIconClickEvent({
7679
7682
  $tag: selectedInfo.$tag,
7680
7683
  $closeIcon: selectedInfo.$closeIcon,
@@ -7689,7 +7692,7 @@ System.register('pops', [], (function (exports) {
7689
7692
  * 生成一个tag项
7690
7693
  * @param data 配置
7691
7694
  */
7692
- createSelectedItem(data) {
7695
+ createSelectedTagItem(data) {
7693
7696
  const $selectedItem = popsDOMUtils.createElement("div", {
7694
7697
  className: "el-select__selected-item el-select__choose_tag",
7695
7698
  innerHTML: /*html*/ `
@@ -7710,11 +7713,14 @@ System.register('pops', [], (function (exports) {
7710
7713
  const $tagText = $selectedItem.querySelector(".el-select__tags-text");
7711
7714
  /** 关闭图标 */
7712
7715
  const $closeIcon = $selectedItem.querySelector(".el-icon.el-tag__close");
7716
+ let text = typeof data.text === "function"
7717
+ ? data.text(data, this.$data.selectInfo)
7718
+ : data.text;
7713
7719
  if (data.isHTML) {
7714
- PopsSafeUtils.setSafeHTML($tagText, data.text);
7720
+ PopsSafeUtils.setSafeHTML($tagText, text);
7715
7721
  }
7716
7722
  else {
7717
- $tagText.innerText = data.text;
7723
+ $tagText.innerText = text;
7718
7724
  }
7719
7725
  return {
7720
7726
  $tag: $selectedItem,
@@ -7723,9 +7729,10 @@ System.register('pops', [], (function (exports) {
7723
7729
  };
7724
7730
  },
7725
7731
  /**
7726
- * 添加选中项元素
7732
+ * 添加选中项的tag元素
7733
+ * @param $tag 添加的元素
7727
7734
  */
7728
- addSelectedItem($ele) {
7735
+ addSelectedTagItem($tag) {
7729
7736
  // 往前添加
7730
7737
  // 去除前面的空白
7731
7738
  this.setSectionIsNear();
@@ -7733,26 +7740,26 @@ System.register('pops', [], (function (exports) {
7733
7740
  let $prev = this.$el.$selectedInputWrapper.previousElementSibling;
7734
7741
  if ($prev) {
7735
7742
  // 存在前一个元素,添加到前面的元素的后面
7736
- popsDOMUtils.after($prev, $ele);
7743
+ popsDOMUtils.after($prev, $tag);
7737
7744
  }
7738
7745
  else {
7739
7746
  // 不存在前一个元素,添加到最前面
7740
- popsDOMUtils.before(this.$el.$selectedInputWrapper, $ele);
7747
+ popsDOMUtils.before(this.$el.$selectedInputWrapper, $tag);
7741
7748
  }
7742
7749
  }
7743
7750
  else if (this.$el.$section.contains(this.$el.$selectedPlaceHolderWrapper)) {
7744
7751
  let $prev = this.$el.$selectedPlaceHolderWrapper.previousElementSibling;
7745
7752
  if ($prev) {
7746
7753
  // 存在前一个元素,添加到前面的元素的后面
7747
- popsDOMUtils.after($prev, $ele);
7754
+ popsDOMUtils.after($prev, $tag);
7748
7755
  }
7749
7756
  else {
7750
7757
  // 不存在前一个元素,添加到最前面
7751
- popsDOMUtils.before(this.$el.$selectedPlaceHolderWrapper, $ele);
7758
+ popsDOMUtils.before(this.$el.$selectedPlaceHolderWrapper, $tag);
7752
7759
  }
7753
7760
  }
7754
7761
  else {
7755
- this.$el.$section.appendChild($ele);
7762
+ this.$el.$section.appendChild($tag);
7756
7763
  }
7757
7764
  // 隐藏元素
7758
7765
  this.hideInputWrapper();
@@ -7765,142 +7772,239 @@ System.register('pops', [], (function (exports) {
7765
7772
  .forEach(($ele) => {
7766
7773
  $ele.remove();
7767
7774
  });
7768
- this.updateTagElement();
7775
+ this.initTagElement();
7769
7776
  },
7770
7777
  /**
7771
7778
  * 选中的值改变的回调
7772
- * @param currentSelectInfo 当前的选中信息
7779
+ * @param selectedDataList 当前的选中信息
7773
7780
  */
7774
- selectValueChangeCallBack(currentSelectInfo) {
7781
+ selectValueChangeCallBack(selectedDataList) {
7782
+ // 动态更新禁用状态
7783
+ this.updateSelectItem();
7775
7784
  if (typeof formConfig.callback === "function") {
7776
- formConfig.callback(currentSelectInfo || this.$data.selectInfo);
7785
+ formConfig.callback(selectedDataList || this.$data.selectInfo);
7777
7786
  }
7778
7787
  },
7779
- /** 设置下拉列表的点击事件 */
7780
- setSelectContainerClickEvent() {
7781
- const that = this;
7782
- popsDOMUtils.on(this.$el.$container, "click", (event) => {
7783
- /** 弹窗的选中的值 */
7784
- let selectedInfo = [];
7785
- selectedInfo = selectedInfo.concat(that.$data.selectInfo);
7786
- /**
7787
- * 设置项选中
7788
- * @param $ele
7789
- */
7790
- function setItemSelected($ele) {
7791
- $ele.classList.add("select-item-is-selected");
7792
- }
7793
- /**
7794
- * 设置项取消选中
7795
- * @param $ele
7796
- */
7797
- function removeItemSelected($ele) {
7798
- $ele.classList.remove("select-item-is-selected");
7788
+ /**
7789
+ * 更新选项弹窗内的所有选项元素的状态
7790
+ *
7791
+ * + 更新禁用状态
7792
+ * + 更新选中状态
7793
+ */
7794
+ updateSelectItem() {
7795
+ this.getAllSelectItemInfo(false).forEach(($selectInfo) => {
7796
+ const { data, $select } = $selectInfo;
7797
+ // 更新文字
7798
+ this.setSelectItemText(data, $selectInfo.$select);
7799
+ // 更新禁用状态
7800
+ if (typeof data.disable === "function" &&
7801
+ data.disable(data.value, this.$data.selectInfo)) {
7802
+ // 禁用
7803
+ this.setSelectItemDisabled($select);
7804
+ // 移除选中信息
7805
+ this.removeSelectedInfo(data, false);
7806
+ // 移除选中状态
7807
+ this.removeSelectItemSelected($select);
7799
7808
  }
7800
- /**
7801
- * 添加选中信息
7802
- */
7803
- function addSelectedInfo($ele) {
7804
- let info = getSelectedInfo($ele);
7805
- let findValue = selectedInfo.find((item) => item.value === info.value);
7806
- if (!findValue) {
7807
- selectedInfo.push({
7808
- value: info.value,
7809
- text: info.text,
7810
- isHTML: Boolean(info.isHTML),
7811
- disable: info.disable,
7812
- });
7813
- }
7814
- that.selectValueChangeCallBack(selectedInfo);
7809
+ else {
7810
+ // 取消禁用
7811
+ this.removeSelectItemDisabled($select);
7815
7812
  }
7816
- /**
7817
- * 移除选中信息
7818
- */
7819
- function removeSelectedInfo($ele) {
7820
- let info = getSelectedInfo($ele);
7821
- let findIndex = selectedInfo.findIndex((item) => item.value === info.value);
7822
- if (findIndex !== -1) {
7823
- selectedInfo.splice(findIndex, 1);
7824
- }
7825
- that.selectValueChangeCallBack(selectedInfo);
7813
+ // 更新选中状态
7814
+ let findValue = this.$data.selectInfo.find((it) => it.value === data.value);
7815
+ if (findValue) {
7816
+ this.setSelectItemSelected($select);
7826
7817
  }
7827
- /**
7828
- * 判断该项是否选中
7829
- * @param $ele
7830
- */
7831
- function isSelected($ele) {
7832
- return $ele.classList.contains("select-item-is-selected");
7818
+ else {
7819
+ this.removeSelectItemSelected($select);
7833
7820
  }
7834
- /**
7835
- * 获取选中的项的信息
7836
- */
7837
- function getSelectedInfo($ele) {
7838
- return Reflect.get($ele, "data-info");
7821
+ });
7822
+ },
7823
+ /**
7824
+ * 设置选项元素选中
7825
+ * @param $select 选项元素
7826
+ */
7827
+ setSelectItemSelected($select) {
7828
+ if (this.isSelectItemSelected($select))
7829
+ return;
7830
+ $select.classList.add("select-item-is-selected");
7831
+ },
7832
+ /**
7833
+ * 移除选项元素选中
7834
+ * @param $select 选项元素
7835
+ */
7836
+ removeSelectItemSelected($select) {
7837
+ $select.classList.remove("select-item-is-selected");
7838
+ },
7839
+ /**
7840
+ * 判断选项元素是否选中
7841
+ * @param $select
7842
+ */
7843
+ isSelectItemSelected($select) {
7844
+ return $select.classList.contains("select-item-is-selected");
7845
+ },
7846
+ /**
7847
+ * 添加选中信息
7848
+ * @param dataList 选择项列表的数据
7849
+ * @param $select 选项元素
7850
+ */
7851
+ addSelectedItemInfo(dataList, $select) {
7852
+ let info = this.getSelectedItemInfo($select);
7853
+ let findValue = dataList.find((item) => item.value === info.value);
7854
+ if (!findValue) {
7855
+ dataList.push({
7856
+ value: info.value,
7857
+ text: info.text,
7858
+ isHTML: Boolean(info.isHTML),
7859
+ disable: info.disable?.bind(info),
7860
+ });
7861
+ }
7862
+ this.selectValueChangeCallBack(dataList);
7863
+ },
7864
+ /**
7865
+ * 获取选中的项的信息
7866
+ * @param $select 选项元素
7867
+ */
7868
+ getSelectedItemInfo($select) {
7869
+ return Reflect.get($select, "data-info");
7870
+ },
7871
+ /**
7872
+ * 移除选中信息
7873
+ * @param dataList 选择项的数据
7874
+ * @param $select 选项元素
7875
+ */
7876
+ removeSelectedItemInfo(dataList, $select) {
7877
+ let info = this.getSelectedItemInfo($select);
7878
+ let findIndex = dataList.findIndex((item) => item.value === info.value);
7879
+ if (findIndex !== -1) {
7880
+ dataList.splice(findIndex, 1);
7881
+ }
7882
+ this.selectValueChangeCallBack(dataList);
7883
+ },
7884
+ /**
7885
+ * 获取所有选项的信息
7886
+ * @param [onlySelected=true] 是否仅获取选中的项的信息
7887
+ * + true (默认)仅获取选中项的信息
7888
+ * + false 获取所有选择项的信息
7889
+ */
7890
+ getAllSelectItemInfo(onlySelected = true) {
7891
+ return Array.from(this.$el.$selectContainer?.querySelectorAll(".select-item") ?? [])
7892
+ .map(($select) => {
7893
+ let data = this.getSelectedItemInfo($select);
7894
+ let result = {
7895
+ /** 选项信息数据 */
7896
+ data: data,
7897
+ /** 选项元素 */
7898
+ $select: $select,
7899
+ };
7900
+ if (onlySelected) {
7901
+ // 仅选中
7902
+ let isSelected = this.isSelectItemSelected($select);
7903
+ if (isSelected) {
7904
+ return result;
7905
+ }
7906
+ return;
7839
7907
  }
7840
- /**
7841
- * 获取所有选中的项的信息
7842
- */
7843
- function getAllSelectedInfo() {
7844
- return Array.from($selectContainer.querySelectorAll(".select-item"))
7845
- .map(($ele) => {
7846
- if (isSelected($ele)) {
7847
- return getSelectedInfo($ele);
7848
- }
7849
- })
7850
- .filter((item) => {
7851
- return item != null;
7852
- });
7908
+ else {
7909
+ return result;
7853
7910
  }
7854
- /**
7855
- * 创建一个选择项元素
7856
- */
7857
- function createSelectItemElement(dataInfo) {
7858
- let $item = popsDOMUtils.createElement("li", {
7859
- className: "select-item",
7860
- innerHTML: /*html*/ `<span>${dataInfo.text}</span>`,
7861
- });
7862
- Reflect.set($item, "data-info", dataInfo);
7863
- return $item;
7911
+ })
7912
+ .filter((item) => {
7913
+ return item != null;
7914
+ });
7915
+ },
7916
+ /**
7917
+ * 创建一个选择项元素
7918
+ * @param data 选择项的数据
7919
+ */
7920
+ createSelectItemElement(data) {
7921
+ let $select = popsDOMUtils.createElement("li", {
7922
+ className: "select-item",
7923
+ innerHTML: /*html*/ `
7924
+ <span class="select-item-text"></span>
7925
+ `,
7926
+ });
7927
+ this.setSelectItemText(data, $select);
7928
+ Reflect.set($select, "data-info", data);
7929
+ return $select;
7930
+ },
7931
+ /**
7932
+ * 设置选择项的文字
7933
+ * @param data 选择项的数据
7934
+ * @param $select 选择项元素
7935
+ */
7936
+ setSelectItemText(data, $select) {
7937
+ let text = typeof data.text === "function"
7938
+ ? data.text(data.value, this.$data.selectInfo)
7939
+ : data.text;
7940
+ let $selectSpan = $select.querySelector(".select-item-text");
7941
+ if (data.isHTML) {
7942
+ PopsSafeUtils.setSafeHTML($selectSpan, text);
7943
+ }
7944
+ else {
7945
+ $selectSpan.innerText = text;
7946
+ }
7947
+ },
7948
+ /**
7949
+ * 设置选择项的禁用状态
7950
+ * @param $select 选择项元素
7951
+ */
7952
+ setSelectItemDisabled($select) {
7953
+ $select.setAttribute("aria-disabled", "true");
7954
+ $select.setAttribute("disabled", "true");
7955
+ },
7956
+ /**
7957
+ * 移除选择项的禁用状态
7958
+ * @param $select 选择项元素
7959
+ */
7960
+ removeSelectItemDisabled($select) {
7961
+ $select.removeAttribute("aria-disabled");
7962
+ $select.removeAttribute("disabled");
7963
+ },
7964
+ /**
7965
+ * 判断选择项是否禁用
7966
+ * @param $select 选择项元素
7967
+ */
7968
+ isSelectItemDisabled($select) {
7969
+ return $select.hasAttribute("disabled") || $select.ariaDisabled;
7970
+ },
7971
+ /**
7972
+ * 设置选择项的点击事件
7973
+ * @param dataList 选中的信息列表
7974
+ * @param $select 选择项元素
7975
+ */
7976
+ setSelectElementClickEvent(dataList, $select) {
7977
+ popsDOMUtils.on($select, "click", (event) => {
7978
+ popsDOMUtils.preventEvent(event);
7979
+ if (this.isSelectItemDisabled($select)) {
7980
+ return;
7864
7981
  }
7865
- /**
7866
- * 设置选择项的禁用状态
7867
- */
7868
- function setSelectItemDisabled($el) {
7869
- $el.setAttribute("aria-disabled", "true");
7982
+ if (typeof formConfig.clickCallBack === "function") {
7983
+ let allSelectedInfo = this.getAllSelectItemInfo().map((it) => it.data);
7984
+ let clickResult = formConfig.clickCallBack(event, allSelectedInfo);
7985
+ if (typeof clickResult === "boolean" && !clickResult) {
7986
+ return;
7987
+ }
7870
7988
  }
7871
- /**
7872
- * 移除选择项的禁用状态
7873
- */
7874
- function removeSelectItemDisabled($el) {
7875
- $el.removeAttribute("aria-disabled");
7876
- $el.removeAttribute("disabled");
7989
+ // 修改选中状态
7990
+ if (this.isSelectItemSelected($select)) {
7991
+ this.removeSelectItemSelected($select);
7992
+ this.removeSelectedItemInfo(dataList, $select);
7877
7993
  }
7878
- /**
7879
- * 设置选择项的点击事件
7880
- */
7881
- function setSelectElementClickEvent($ele) {
7882
- popsDOMUtils.on($ele, "click", (event) => {
7883
- popsDOMUtils.preventEvent(event);
7884
- if ($ele.hasAttribute("disabled") || $ele.ariaDisabled) {
7885
- return;
7886
- }
7887
- if (typeof formConfig.clickCallBack === "function") {
7888
- let clickResult = formConfig.clickCallBack(event, getAllSelectedInfo());
7889
- if (typeof clickResult === "boolean" && !clickResult) {
7890
- return;
7891
- }
7892
- }
7893
- // 修改选中状态
7894
- if (isSelected($ele)) {
7895
- removeItemSelected($ele);
7896
- removeSelectedInfo($ele);
7897
- }
7898
- else {
7899
- setItemSelected($ele);
7900
- addSelectedInfo($ele);
7901
- }
7902
- });
7994
+ else {
7995
+ this.setSelectItemSelected($select);
7996
+ this.addSelectedItemInfo(dataList, $select);
7903
7997
  }
7998
+ });
7999
+ },
8000
+ /**
8001
+ * 设置下拉列表的点击事件
8002
+ */
8003
+ setSelectContainerClickEvent() {
8004
+ const that = this;
8005
+ popsDOMUtils.on(this.$el.$container, "click", (event) => {
8006
+ /** 弹窗的选中的值 */
8007
+ let selectedInfo = that.$data.selectInfo;
7904
8008
  let { style, ...userConfirmDetails } = formConfig.selectConfirmDialogDetails || {};
7905
8009
  let confirmDetails = popsUtils.assign({
7906
8010
  title: {
@@ -7922,6 +8026,7 @@ System.register('pops', [], (function (exports) {
7922
8026
  callback(details, event) {
7923
8027
  that.$data.selectInfo = [...selectedInfo];
7924
8028
  that.updateSelectTagItem();
8029
+ that.$el.$selectContainer = null;
7925
8030
  details.close();
7926
8031
  },
7927
8032
  },
@@ -7932,6 +8037,7 @@ System.register('pops', [], (function (exports) {
7932
8037
  originalRun();
7933
8038
  that.$data.selectInfo = [...selectedInfo];
7934
8039
  that.updateSelectTagItem();
8040
+ that.$el.$selectContainer = null;
7935
8041
  },
7936
8042
  clickEvent: {
7937
8043
  toClose: true,
@@ -7997,30 +8103,23 @@ System.register('pops', [], (function (exports) {
7997
8103
  }, userConfirmDetails);
7998
8104
  let $dialog = pops.alert(confirmDetails);
7999
8105
  let $selectContainer = $dialog.$shadowRoot.querySelector(".select-container");
8106
+ this.$el.$selectContainer = $selectContainer;
8000
8107
  // 配置选项元素
8001
8108
  formConfig.data.forEach((item) => {
8002
- let $select = createSelectItemElement(item);
8109
+ let $select = this.createSelectItemElement(item);
8003
8110
  // 添加到confirm中
8004
8111
  $selectContainer.appendChild($select);
8005
8112
  // 设置每一项的点击事件
8006
- setSelectElementClickEvent($select);
8007
- // 设置禁用状态
8008
- if (typeof item.disable === "function" &&
8009
- item.disable(item.value)) {
8010
- setSelectItemDisabled($select);
8011
- // 后续不设置元素的选中状态
8012
- return;
8013
- }
8014
- // 移除禁用状态
8015
- removeSelectItemDisabled($select);
8016
- let findValue = selectedInfo.find((value) => value.value === item.value);
8017
- if (findValue) {
8018
- setItemSelected($select);
8019
- }
8113
+ this.setSelectElementClickEvent(selectedInfo, $select);
8020
8114
  });
8115
+ // 动态更新禁用状态
8116
+ this.updateSelectItem();
8021
8117
  });
8022
8118
  },
8023
- /** 设置关闭图标的点击事件 */
8119
+ /**
8120
+ * 设置关闭图标的点击事件
8121
+ * @param data 选中的信息
8122
+ */
8024
8123
  setSelectedItemCloseIconClickEvent(data) {
8025
8124
  popsDOMUtils.on(data.$closeIcon, "click", (event) => {
8026
8125
  popsDOMUtils.preventEvent(event);
@@ -8029,13 +8128,15 @@ System.register('pops', [], (function (exports) {
8029
8128
  $tag: data.$tag,
8030
8129
  $closeIcon: data.$closeIcon,
8031
8130
  value: data.value,
8032
- text: data.text,
8131
+ text: typeof data.text === "function"
8132
+ ? data.text.bind(data)
8133
+ : data.text,
8033
8134
  });
8034
8135
  if (typeof result === "boolean" && !result) {
8035
8136
  return;
8036
8137
  }
8037
8138
  }
8038
- this.removeSelectedItem(data.$tag);
8139
+ this.removeSelectedTagItem(data.$tag);
8039
8140
  this.removeSelectedInfo({
8040
8141
  value: data.value,
8041
8142
  text: data.text,
@@ -8055,13 +8156,21 @@ System.register('pops', [], (function (exports) {
8055
8156
  this.removeSectionIsNear();
8056
8157
  }
8057
8158
  },
8058
- /** 移除选中项元素 */
8059
- removeSelectedItem($ele) {
8060
- $ele.remove();
8159
+ /**
8160
+ * 移除选中项元素
8161
+ */
8162
+ removeSelectedTagItem($tag) {
8163
+ $tag.remove();
8061
8164
  this.checkTagEmpty();
8062
8165
  },
8063
- /** 移除选中的信息 */
8064
- removeSelectedInfo(data) {
8166
+ /**
8167
+ * 从保存的已选中的信息列表中移除目标信息
8168
+ * @param data 需要移除的信息
8169
+ * @param [triggerValueChangeCallBack=true] 是否触发值改变的回调
8170
+ * + true (默认)触发值改变的回调
8171
+ * + false 不触发值改变的回调
8172
+ */
8173
+ removeSelectedInfo(data, triggerValueChangeCallBack = true) {
8065
8174
  for (let index = 0; index < this.$data.selectInfo.length; index++) {
8066
8175
  const selectInfo = this.$data.selectInfo[index];
8067
8176
  if (selectInfo.value === data.value) {
@@ -8069,7 +8178,7 @@ System.register('pops', [], (function (exports) {
8069
8178
  break;
8070
8179
  }
8071
8180
  }
8072
- this.selectValueChangeCallBack();
8181
+ triggerValueChangeCallBack && this.selectValueChangeCallBack();
8073
8182
  },
8074
8183
  /** 显示输入框 */
8075
8184
  showInputWrapper() {
@@ -9918,6 +10027,7 @@ System.register('pops', [], (function (exports) {
9918
10027
  useShadowRoot: true,
9919
10028
  target: null,
9920
10029
  content: "默认文字",
10030
+ isDiffContent: false,
9921
10031
  position: "top",
9922
10032
  className: "",
9923
10033
  isFixed: false,
@@ -10043,6 +10153,19 @@ System.register('pops', [], (function (exports) {
10043
10153
  if (text == null) {
10044
10154
  text = this.getContent();
10045
10155
  }
10156
+ if (this.$data.config.isDiffContent) {
10157
+ let contentPropKey = "data-content";
10158
+ // @ts-ignore
10159
+ let originContentText = this.$el.$content[contentPropKey];
10160
+ if (typeof originContentText === "string") {
10161
+ if (originContentText === text) {
10162
+ // 内容未改变,不修改避免渲染
10163
+ return;
10164
+ }
10165
+ }
10166
+ // @ts-ignore
10167
+ this.$el.$content[contentPropKey] = text;
10168
+ }
10046
10169
  PopsSafeUtils.setSafeHTML(this.$el.$content, text);
10047
10170
  }
10048
10171
  /**