stellar-ui-v2 1.40.32 → 1.40.34

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.
Files changed (28) hide show
  1. package/components/ste-app-update/README.md +52 -5
  2. package/components/ste-app-update/method.js +188 -28
  3. package/components/ste-app-update/ste-app-update.vue +170 -4
  4. package/components/ste-checkbox/ste-checkbox.vue +57 -55
  5. package/components/ste-checkbox-group/ste-checkbox-group.vue +21 -6
  6. package/components/ste-drag-sort/README.md +124 -0
  7. package/components/ste-drag-sort/config.json +5 -0
  8. package/components/ste-drag-sort/ste-drag-sort.vue +706 -0
  9. package/components/ste-message-box/README.md +1 -1
  10. package/components/ste-message-box/ste-message-box.js +7 -5
  11. package/components/ste-message-box/ste-message-box.vue +364 -364
  12. package/components/ste-page-container/README.md +83 -83
  13. package/components/ste-page-container/WORKLOG-2026-03-12.md +229 -229
  14. package/components/ste-page-container/ste-page-container.vue +190 -190
  15. package/components/ste-popup/README.md +16 -16
  16. package/components/ste-popup/ste-popup.vue +392 -392
  17. package/components/ste-price/ste-price.vue +256 -256
  18. package/components/ste-radio/ste-radio.vue +53 -55
  19. package/components/ste-radio-group/ste-radio-group.vue +24 -9
  20. package/components/ste-search/ste-search.vue +576 -576
  21. package/components/ste-swipe-action/ste-swipe-action.vue +8 -8
  22. package/components/ste-swipe-action-group/ste-swipe-action-group.vue +5 -2
  23. package/components/ste-toast/README.md +1 -1
  24. package/components/ste-toast/ste-toast.js +67 -67
  25. package/components/ste-video/ste-video.vue +756 -756
  26. package/package.json +2 -2
  27. package/utils/System.js +19 -4
  28. package/utils/mixin.js +150 -0
@@ -1,190 +1,190 @@
1
- <template>
2
- <!-- #ifdef MP-WEIXIN -->
3
- <page-container
4
- :show="show"
5
- :duration="duration"
6
- :z-index="zIndex"
7
- :overlay="overlay"
8
- :position="position"
9
- :round="round"
10
- :close-on-slide-down="closeOnSlideDown"
11
- :overlay-style="overlayStyle"
12
- :custom-style="customStyle"
13
- :safe-area-inset-bottom="safeAreaInsetBottom"
14
- @beforeenter="emitEvent('beforeenter', $event)"
15
- @enter="emitEvent('enter', $event)"
16
- @afterenter="emitEvent('afterenter', $event)"
17
- @beforeleave="emitEvent('beforeleave', $event)"
18
- @leave="emitEvent('leave', $event)"
19
- @afterleave="emitEvent('afterleave', $event)"
20
- @clickoverlay="onClickOverlay"
21
- >
22
- <slot></slot>
23
- </page-container>
24
- <!-- #endif -->
25
-
26
- <!-- #ifndef MP-WEIXIN -->
27
- <ste-popup
28
- :show.sync="innerShow"
29
- :duration="duration"
30
- :zIndex="zIndex"
31
- :showMask="overlay"
32
- :position="popupPosition"
33
- :width="popupWidth"
34
- :height="popupHeight"
35
- :round="round"
36
- :isMaskClick="overlay"
37
- :showClose="false"
38
- @clickMask="onClickOverlay"
39
- @open-after="onPopupOpenAfter"
40
- >
41
- <view class="ste-page-container-content" :class="{ 'safe-area-bottom': safeAreaInsetBottom && position === 'bottom' }" :style="customStyle">
42
- <slot></slot>
43
- </view>
44
- </ste-popup>
45
- <!-- #endif -->
46
- </template>
47
-
48
- <script>
49
- /**
50
- * ste-page-container 页面容器
51
- * @description 微信小程序下使用原生 page-container,其他平台使用 ste-popup 兼容实现
52
- * @property {Boolean} show 是否显示容器
53
- * @property {Number} duration 动画时长,单位 ms
54
- * @property {Number} zIndex 层级
55
- * @property {Boolean} overlay 是否显示遮罩
56
- * @property {String} position 弹出位置,top/bottom/right/center
57
- * @property {Boolean} round 是否展示圆角
58
- * @property {Boolean} closeOnSlideDown 是否允许下滑关闭(仅微信小程序)
59
- * @property {String} overlayStyle 遮罩层样式(仅微信小程序)
60
- * @property {String} customStyle 容器样式
61
- * @property {Boolean} safeAreaInsetBottom 是否适配底部安全区
62
- */
63
- export default {
64
- group: '基础组件',
65
- title: 'PageContainer 页面容器',
66
- name: 'ste-page-container',
67
- props: {
68
- show: { type: Boolean, default: false },
69
- duration: { type: Number, default: 300 },
70
- zIndex: { type: [Number, String], default: 100 },
71
- overlay: { type: Boolean, default: true },
72
- position: {
73
- type: String,
74
- default: 'bottom',
75
- validator(value) {
76
- return ['top', 'bottom', 'right', 'center'].includes(value);
77
- },
78
- },
79
- round: { type: Boolean, default: false },
80
- closeOnSlideDown: { type: Boolean, default: false },
81
- overlayStyle: { type: String, default: '' },
82
- customStyle: { type: String, default: '' },
83
- safeAreaInsetBottom: { type: Boolean, default: false },
84
- },
85
- data() {
86
- return {
87
- innerShow: this.show,
88
- leaveTimer: null,
89
- };
90
- },
91
- computed: {
92
- popupPosition() {
93
- if (['top', 'bottom', 'right', 'center'].includes(this.position)) {
94
- return this.position;
95
- }
96
- return 'bottom';
97
- },
98
- popupWidth() {
99
- const customWidth = this.getCustomStyleValue('width');
100
- if (customWidth) return customWidth;
101
- if (this.popupPosition === 'right') return '80vw';
102
- return '100vw';
103
- },
104
- popupHeight() {
105
- const customHeight = this.getCustomStyleValue('height');
106
- if (customHeight) return customHeight;
107
- return 'auto';
108
- },
109
- },
110
- watch: {
111
- show(newVal) {
112
- // #ifndef MP-WEIXIN
113
- if (this.innerShow !== newVal) {
114
- this.innerShow = newVal;
115
- }
116
- this.triggerTransition(newVal);
117
- // #endif
118
- },
119
- innerShow(newVal) {
120
- // #ifndef MP-WEIXIN
121
- if (newVal !== this.show) this.$emit('update:show', newVal);
122
- // #endif
123
- },
124
- },
125
- beforeDestroy() {
126
- this.clearTimers();
127
- },
128
- created() {
129
- // #ifndef MP-WEIXIN
130
- if (this.show) this.triggerTransition(true);
131
- // #endif
132
- },
133
- methods: {
134
- getCustomStyleValue(property) {
135
- if (!this.customStyle) return '';
136
- const regexp = new RegExp(`(?:^|;)\\s*${property}\\s*:\\s*([^;]+)`, 'i');
137
- const match = this.customStyle.match(regexp);
138
- return match ? match[1].trim() : '';
139
- },
140
- emitEvent(eventName, e) {
141
- this.$emit(eventName, e);
142
- },
143
- onClickOverlay(e) {
144
- this.$emit('clickoverlay', e);
145
- },
146
- onPopupOpenAfter(e) {
147
- this.$emit('afterenter', e);
148
- },
149
- open() {
150
- this.$emit('update:show', true);
151
- },
152
- close() {
153
- this.$emit('update:show', false);
154
- },
155
- clearTimers() {
156
- if (this.leaveTimer) {
157
- clearTimeout(this.leaveTimer);
158
- this.leaveTimer = null;
159
- }
160
- },
161
- triggerTransition(show) {
162
- this.clearTimers();
163
- if (show) {
164
- this.$emit('beforeenter');
165
- this.$emit('enter');
166
- return;
167
- }
168
- this.$emit('beforeleave');
169
- this.$emit('leave');
170
- this.leaveTimer = setTimeout(() => {
171
- this.$emit('afterleave');
172
- this.leaveTimer = null;
173
- }, this.duration);
174
- },
175
- },
176
- };
177
- </script>
178
-
179
- <style lang="scss" scoped>
180
- .ste-page-container-content {
181
- width: 100%;
182
- height: 100%;
183
- }
184
-
185
- .safe-area-bottom {
186
- padding-bottom: constant(safe-area-inset-bottom);
187
- padding-bottom: env(safe-area-inset-bottom);
188
- box-sizing: border-box;
189
- }
190
- </style>
1
+ <template>
2
+ <!-- #ifdef MP-WEIXIN -->
3
+ <page-container
4
+ :show="show"
5
+ :duration="duration"
6
+ :z-index="zIndex"
7
+ :overlay="overlay"
8
+ :position="position"
9
+ :round="round"
10
+ :close-on-slide-down="closeOnSlideDown"
11
+ :overlay-style="overlayStyle"
12
+ :custom-style="customStyle"
13
+ :safe-area-inset-bottom="safeAreaInsetBottom"
14
+ @beforeenter="emitEvent('beforeenter', $event)"
15
+ @enter="emitEvent('enter', $event)"
16
+ @afterenter="emitEvent('afterenter', $event)"
17
+ @beforeleave="emitEvent('beforeleave', $event)"
18
+ @leave="emitEvent('leave', $event)"
19
+ @afterleave="emitEvent('afterleave', $event)"
20
+ @clickoverlay="onClickOverlay"
21
+ >
22
+ <slot></slot>
23
+ </page-container>
24
+ <!-- #endif -->
25
+
26
+ <!-- #ifndef MP-WEIXIN -->
27
+ <ste-popup
28
+ :show.sync="innerShow"
29
+ :duration="duration"
30
+ :zIndex="zIndex"
31
+ :showMask="overlay"
32
+ :position="popupPosition"
33
+ :width="popupWidth"
34
+ :height="popupHeight"
35
+ :round="round"
36
+ :isMaskClick="overlay"
37
+ :showClose="false"
38
+ @clickMask="onClickOverlay"
39
+ @open-after="onPopupOpenAfter"
40
+ >
41
+ <view class="ste-page-container-content" :class="{ 'safe-area-bottom': safeAreaInsetBottom && position === 'bottom' }" :style="customStyle">
42
+ <slot></slot>
43
+ </view>
44
+ </ste-popup>
45
+ <!-- #endif -->
46
+ </template>
47
+
48
+ <script>
49
+ /**
50
+ * ste-page-container 页面容器
51
+ * @description 微信小程序下使用原生 page-container,其他平台使用 ste-popup 兼容实现
52
+ * @property {Boolean} show 是否显示容器
53
+ * @property {Number} duration 动画时长,单位 ms
54
+ * @property {Number} zIndex 层级
55
+ * @property {Boolean} overlay 是否显示遮罩
56
+ * @property {String} position 弹出位置,top/bottom/right/center
57
+ * @property {Boolean} round 是否展示圆角
58
+ * @property {Boolean} closeOnSlideDown 是否允许下滑关闭(仅微信小程序)
59
+ * @property {String} overlayStyle 遮罩层样式(仅微信小程序)
60
+ * @property {String} customStyle 容器样式
61
+ * @property {Boolean} safeAreaInsetBottom 是否适配底部安全区
62
+ */
63
+ export default {
64
+ group: '基础组件',
65
+ title: 'PageContainer 页面容器',
66
+ name: 'ste-page-container',
67
+ props: {
68
+ show: { type: Boolean, default: false },
69
+ duration: { type: Number, default: 300 },
70
+ zIndex: { type: [Number, String], default: 100 },
71
+ overlay: { type: Boolean, default: true },
72
+ position: {
73
+ type: String,
74
+ default: 'bottom',
75
+ validator(value) {
76
+ return ['top', 'bottom', 'right', 'center'].includes(value);
77
+ },
78
+ },
79
+ round: { type: Boolean, default: false },
80
+ closeOnSlideDown: { type: Boolean, default: false },
81
+ overlayStyle: { type: String, default: '' },
82
+ customStyle: { type: String, default: '' },
83
+ safeAreaInsetBottom: { type: Boolean, default: false },
84
+ },
85
+ data() {
86
+ return {
87
+ innerShow: this.show,
88
+ leaveTimer: null,
89
+ };
90
+ },
91
+ computed: {
92
+ popupPosition() {
93
+ if (['top', 'bottom', 'right', 'center'].includes(this.position)) {
94
+ return this.position;
95
+ }
96
+ return 'bottom';
97
+ },
98
+ popupWidth() {
99
+ const customWidth = this.getCustomStyleValue('width');
100
+ if (customWidth) return customWidth;
101
+ if (this.popupPosition === 'right') return '80vw';
102
+ return '100vw';
103
+ },
104
+ popupHeight() {
105
+ const customHeight = this.getCustomStyleValue('height');
106
+ if (customHeight) return customHeight;
107
+ return 'auto';
108
+ },
109
+ },
110
+ watch: {
111
+ show(newVal) {
112
+ // #ifndef MP-WEIXIN
113
+ if (this.innerShow !== newVal) {
114
+ this.innerShow = newVal;
115
+ }
116
+ this.triggerTransition(newVal);
117
+ // #endif
118
+ },
119
+ innerShow(newVal) {
120
+ // #ifndef MP-WEIXIN
121
+ if (newVal !== this.show) this.$emit('update:show', newVal);
122
+ // #endif
123
+ },
124
+ },
125
+ beforeDestroy() {
126
+ this.clearTimers();
127
+ },
128
+ created() {
129
+ // #ifndef MP-WEIXIN
130
+ if (this.show) this.triggerTransition(true);
131
+ // #endif
132
+ },
133
+ methods: {
134
+ getCustomStyleValue(property) {
135
+ if (!this.customStyle) return '';
136
+ const regexp = new RegExp(`(?:^|;)\\s*${property}\\s*:\\s*([^;]+)`, 'i');
137
+ const match = this.customStyle.match(regexp);
138
+ return match ? match[1].trim() : '';
139
+ },
140
+ emitEvent(eventName, e) {
141
+ this.$emit(eventName, e);
142
+ },
143
+ onClickOverlay(e) {
144
+ this.$emit('clickoverlay', e);
145
+ },
146
+ onPopupOpenAfter(e) {
147
+ this.$emit('afterenter', e);
148
+ },
149
+ open() {
150
+ this.$emit('update:show', true);
151
+ },
152
+ close() {
153
+ this.$emit('update:show', false);
154
+ },
155
+ clearTimers() {
156
+ if (this.leaveTimer) {
157
+ clearTimeout(this.leaveTimer);
158
+ this.leaveTimer = null;
159
+ }
160
+ },
161
+ triggerTransition(show) {
162
+ this.clearTimers();
163
+ if (show) {
164
+ this.$emit('beforeenter');
165
+ this.$emit('enter');
166
+ return;
167
+ }
168
+ this.$emit('beforeleave');
169
+ this.$emit('leave');
170
+ this.leaveTimer = setTimeout(() => {
171
+ this.$emit('afterleave');
172
+ this.leaveTimer = null;
173
+ }, this.duration);
174
+ },
175
+ },
176
+ };
177
+ </script>
178
+
179
+ <style lang="scss" scoped>
180
+ .ste-page-container-content {
181
+ width: 100%;
182
+ height: 100%;
183
+ }
184
+
185
+ .safe-area-bottom {
186
+ padding-bottom: constant(safe-area-inset-bottom);
187
+ padding-bottom: env(safe-area-inset-bottom);
188
+ box-sizing: border-box;
189
+ }
190
+ </style>
@@ -112,22 +112,22 @@ export default {
112
112
  ### API
113
113
  #### 组件属性(Props)
114
114
 
115
- | 属性名 | 说明 | 类型 | 默认值 | 可选值 | 支持版本 |
116
- | --- | --- | --- | --- | --- | --- |
117
- | `show` | 是否显示弹出层,使用`sync`修饰符来双向绑定 | `Boolean` | `false` | - | - |
118
- | `backGround` | 内容容器的背景色 | `String` | `#ffffff` | - | - |
119
- | `showMask` | 是否显示遮罩 | `Boolean` | `true` | - | - |
120
- | `isMaskClick` | 是否可以点击遮罩层关闭 | `Boolean` | `true` | - | - |
121
- | `width` | 内容区宽度 | `Number/String` | `auto` | - | - |
122
- | `height` | 内容区高度 | `Number/String` | `auto` | - | - |
123
- | `position` | 弹出位置 | `String` | `center` | `top` `bottom` `left` `right` | - |
124
- | `round` | 是否圆角 | `Boolean` | `false` | - | - |
125
- | `showClose` | 是否右上角显示关闭图标 | `Boolean` | `true` | - | - |
126
- | `offsetX` | 根据弹出位置,设置X轴偏移量,单位px | `Number/String` | `0` | - | - |
127
- | `offsetY` | 根据弹出位置,设置Y轴偏移量,单位px | `Number/String` | `0` | - | - |
128
- | `duration` | 动画持续时间 | `Number` | `200` | - | - |
129
- | `zIndex` | 弹窗层级z-index | `Number` | `1000` | - | - |
130
- | `keepContent` | 隐藏后是否不销毁弹窗内容元素 | `Boolean` | `true` | - | `v1.10.1` |
115
+ | 属性名 | 说明 | 类型 | 默认值 | 可选值 | 支持版本 |
116
+ | --- | --- | --- | --- | --- | --- |
117
+ | `show` | 是否显示弹出层,使用`sync`修饰符来双向绑定 | `Boolean` | `false` | - | - |
118
+ | `backGround` | 内容容器的背景色 | `String` | `#ffffff` | - | - |
119
+ | `showMask` | 是否显示遮罩 | `Boolean` | `true` | - | - |
120
+ | `isMaskClick` | 是否可以点击遮罩层关闭 | `Boolean` | `true` | - | - |
121
+ | `width` | 内容区宽度 | `Number/String` | `auto` | - | - |
122
+ | `height` | 内容区高度 | `Number/String` | `auto` | - | - |
123
+ | `position` | 弹出位置 | `String` | `center` | `top` `bottom` `left` `right` | - |
124
+ | `round` | 是否圆角 | `Boolean` | `false` | - | - |
125
+ | `showClose` | 是否右上角显示关闭图标 | `Boolean` | `true` | - | - |
126
+ | `offsetX` | 根据弹出位置,设置X轴偏移量,单位px | `Number/String` | `0` | - | - |
127
+ | `offsetY` | 根据弹出位置,设置Y轴偏移量,单位px | `Number/String` | `0` | - | - |
128
+ | `duration` | 动画持续时间 | `Number` | `200` | - | - |
129
+ | `zIndex` | 弹窗层级z-index | `Number` | `1000` | - | - |
130
+ | `keepContent` | 隐藏后是否不销毁弹窗内容元素 | `Boolean` | `true` | - | `v1.10.1` |
131
131
  | `appendToBody`| 是否将弹窗挂载到body下(仅H5、APP有效) | `Boolean` | `false` | - | `v1.40.13`|
132
132
 
133
133
  #### 组件事件(Events)