sard-uniapp 1.19.0 → 1.19.1

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## [1.19.1](https://github.com/sutras/sard-uniapp/compare/v1.19.0...v1.19.1) (2025-06-11)
2
+
3
+
4
+ ### Features
5
+
6
+ * dropdown 新增 before-close 属性 ([fca24ac](https://github.com/sutras/sard-uniapp/commit/fca24ac536bc3840fbc9562fde4992f864968080))
7
+
8
+
9
+
1
10
  # [1.19.0](https://github.com/sutras/sard-uniapp/compare/v1.18.0...v1.19.0) (2025-06-10)
2
11
 
3
12
 
package/README.md CHANGED
@@ -25,7 +25,7 @@
25
25
 
26
26
  ## 特性
27
27
 
28
- - 🧩 80+个高质量组件,覆盖移动端主流场景
28
+ - 🧩 90+个高质量组件,覆盖移动端主流场景
29
29
  - 💪 支持一套代码同时开发 H5 / 小程序 / App
30
30
  - 🌿 支持按需引入和 `Tree Shaking`
31
31
  - 📖 详尽的文档和案例展示
@@ -24,7 +24,8 @@ export interface DropdownOption {
24
24
  value?: any;
25
25
  }
26
26
  export type DropdownCloseType = 'overlay' | 'away' | 'other-button' | 'option' | 'button';
27
- export type DropdownBeforeClose = (type: DropdownCloseType) => any | Promise<any>;
27
+ export type DropdownBeforeClose = (type: DropdownCloseType) => any;
28
+ export type DropdownBeforeOpen = () => any;
28
29
  export interface DropdownItemProps {
29
30
  rootStyle?: StyleValue;
30
31
  rootClass?: string;
@@ -37,6 +38,7 @@ export interface DropdownItemProps {
37
38
  separator?: string;
38
39
  placeholder?: string;
39
40
  beforeClose?: DropdownBeforeClose;
41
+ beforeOpen?: DropdownBeforeOpen;
40
42
  }
41
43
  export declare const defaultDropdownItemProps: {
42
44
  options: () => never[];
@@ -130,7 +130,8 @@ export default _defineComponent({
130
130
  visible: { type: Boolean, required: false },
131
131
  separator: { type: String, required: false },
132
132
  placeholder: { type: String, required: false },
133
- beforeClose: { type: Function, required: false }
133
+ beforeClose: { type: Function, required: false },
134
+ beforeOpen: { type: Function, required: false }
134
135
  }, defaultDropdownItemProps),
135
136
  emits: ["update:model-value", "change", "update:visible", "before-enter", "enter", "after-enter", "enter-cancelled", "before-leave", "leave", "after-leave", "leave-cancelled", "visible-hook"],
136
137
  setup(__props, { expose: __expose, emit: __emit }) {
@@ -228,12 +229,30 @@ export default _defineComponent({
228
229
  }
229
230
  setInnerVisible(false);
230
231
  };
232
+ let isOpening = false;
233
+ const perhapsOpen = () => {
234
+ if (isOpening) {
235
+ return;
236
+ }
237
+ if (isFunction(props.beforeOpen)) {
238
+ const result = props.beforeOpen();
239
+ if (isObject(result) && isFunction(result.then)) {
240
+ isOpening = true;
241
+ return result.then(() => {
242
+ setInnerVisible(true);
243
+ }).catch(noop);
244
+ } else if (result === false) {
245
+ return;
246
+ }
247
+ }
248
+ setInnerVisible(true);
249
+ };
231
250
  const onItemClick = () => {
232
251
  if (!context.disabled && !props.disabled) {
233
252
  if (innerVisible.value) {
234
253
  perhapsClose("button");
235
254
  } else {
236
- setInnerVisible(true);
255
+ perhapsOpen();
237
256
  }
238
257
  }
239
258
  };
@@ -275,6 +294,7 @@ export default _defineComponent({
275
294
  onVisibleHook: (name) => {
276
295
  if (name === "before-enter") {
277
296
  increaseZIndex();
297
+ isOpening = false;
278
298
  }
279
299
  if (name === "after-leave") {
280
300
  wholeVisible.value = false;
@@ -330,7 +350,11 @@ export default _defineComponent({
330
350
  return isClosing;
331
351
  }, set isClosing(v) {
332
352
  isClosing = v;
333
- }, perhapsClose, onItemClick, onOptionClick, onOverlayClick, onAwayClick, hide, zIndex, increaseZIndex, realVisible, transitionClass, onTransitionEnd, popupClass, popupStyle, currentLabel, currentArrow, popupEffect, dropdownItemClass, dropdownItemStyle, get classNames() {
353
+ }, perhapsClose, get isOpening() {
354
+ return isOpening;
355
+ }, set isOpening(v) {
356
+ isOpening = v;
357
+ }, perhapsOpen, onItemClick, onOptionClick, onOverlayClick, onAwayClick, hide, zIndex, increaseZIndex, realVisible, transitionClass, onTransitionEnd, popupClass, popupStyle, currentLabel, currentArrow, popupEffect, dropdownItemClass, dropdownItemStyle, get classNames() {
334
358
  return classNames;
335
359
  }, get isNullish() {
336
360
  return isNullish;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "id": "sard-uniapp",
3
3
  "name": "sard-uniapp",
4
4
  "displayName": "sard-uniapp",
5
- "version": "1.19.0",
5
+ "version": "1.19.1",
6
6
  "description": "sard-uniapp 是一套基于 Uniapp + Vue3 框架开发的兼容多端的 UI 组件库",
7
7
  "main": "index.js",
8
8
  "scripts": {