uview-plus 3.6.18 → 3.6.26

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 (35) hide show
  1. package/changelog.md +27 -0
  2. package/components/u-cascader/u-cascader.vue +5 -3
  3. package/components/u-choose/u-choose.vue +1 -1
  4. package/components/u-dragsort/u-dragsort.vue +45 -23
  5. package/components/u-form/u-form.vue +1 -1
  6. package/components/u-form-item/u-form-item.vue +20 -18
  7. package/components/u-goods-sku/u-goods-sku.vue +1 -1
  8. package/components/u-icon/icons.js +2 -1
  9. package/components/u-input/input.js +1 -1
  10. package/components/u-picker/props.js +10 -0
  11. package/components/u-picker/u-picker.vue +2 -0
  12. package/libs/util/gcanvas/bridge/bridge-weex.js +0 -0
  13. package/libs/util/gcanvas/context-2d/FillStyleLinearGradient.js +0 -0
  14. package/libs/util/gcanvas/context-2d/FillStylePattern.js +0 -0
  15. package/libs/util/gcanvas/context-2d/FillStyleRadialGradient.js +0 -0
  16. package/libs/util/gcanvas/context-2d/RenderingContext.js +0 -0
  17. package/libs/util/gcanvas/context-webgl/ActiveInfo.js +0 -0
  18. package/libs/util/gcanvas/context-webgl/Buffer.js +0 -0
  19. package/libs/util/gcanvas/context-webgl/Framebuffer.js +0 -0
  20. package/libs/util/gcanvas/context-webgl/GLenum.js +0 -0
  21. package/libs/util/gcanvas/context-webgl/GLmethod.js +0 -0
  22. package/libs/util/gcanvas/context-webgl/GLtype.js +0 -0
  23. package/libs/util/gcanvas/context-webgl/Program.js +0 -0
  24. package/libs/util/gcanvas/context-webgl/Renderbuffer.js +0 -0
  25. package/libs/util/gcanvas/context-webgl/RenderingContext.js +0 -0
  26. package/libs/util/gcanvas/context-webgl/Shader.js +0 -0
  27. package/libs/util/gcanvas/context-webgl/ShaderPrecisionFormat.js +0 -0
  28. package/libs/util/gcanvas/context-webgl/Texture.js +0 -0
  29. package/libs/util/gcanvas/context-webgl/UniformLocation.js +0 -0
  30. package/libs/util/gcanvas/context-webgl/classUtils.js +0 -0
  31. package/libs/util/gcanvas/env/canvas.js +0 -0
  32. package/libs/util/gcanvas/env/image.js +0 -0
  33. package/libs/util/gcanvas/env/tool.js +0 -0
  34. package/libs/util/gcanvas/index.js +0 -0
  35. package/package.json +1 -1
package/changelog.md CHANGED
@@ -1,3 +1,30 @@
1
+ ## 3.6.26(2025-12-16)
2
+ add: picker增加maskClass/maskStyle属性
3
+
4
+
5
+ ## 3.6.25(2025-12-15)
6
+ fix: 修复cascader对列表数据层级差异的兼容问题
7
+
8
+ ## 3.6.24(2025-12-14)
9
+ fix: 修复将empty组件的mode设置为wifi后图标不能显示的问题 #928
10
+
11
+ ## 3.6.23(2025-12-13)
12
+ fix: 修复cascader已选中三级菜单后再选择二级菜单时tabs报错问题
13
+
14
+ ## 3.6.22(2025-12-12)
15
+ fix: dragsort组件拖动抖动的问题
16
+
17
+ ## 3.6.21(2025-12-09)
18
+ fix: form-item初始化时机优化
19
+
20
+ ## 3.6.20(2025-12-08)
21
+ improvment: 优化form组件语法普适性
22
+
23
+ ## 3.6.19(2025-12-01)
24
+ fix: 修复商品SKU组件i18n
25
+
26
+ fix: Choose组件会有width警告提示 #915
27
+
1
28
  ## 3.6.18(2025-11-30)
2
29
  feature: upload组件file模式支持微信小程序chooseMessageFile的extension属性 #913
3
30
 
@@ -243,9 +243,11 @@
243
243
  this.$set(this.selectedValueIndexs, levelIndex, index);
244
244
 
245
245
  // 清除后续级别的选中值
246
- for (let i = levelIndex + 1; i < this.selectedValueIndexs.length; i++) {
247
- this.$set(this.selectedValueIndexs, i, undefined);
248
- }
246
+ this.selectedValueIndexs.splice(levelIndex + 1);
247
+ this.tabsIndex = Math.min(this.tabsIndex, levelIndex);
248
+
249
+ // 清除后续级别的列表
250
+ this.levelList.splice(levelIndex + 1);
249
251
 
250
252
  // 获取当前选中项
251
253
  const currentItem = this.levelList[levelIndex][index];
@@ -23,7 +23,7 @@
23
23
  :scroll-x="wrap === false"
24
24
  :class="['up-choose', wrap ? 'up-choose-wrap' : 'up-choose-nowrap']">
25
25
  <template :key="item.id" v-for="(item,index) in options">
26
- <view :style="{width: width, display: 'inline-block'}">
26
+ <view :style="{width: itemWidth, display: 'inline-block'}">
27
27
  <slot :item="item" :index="index">
28
28
  <up-tag :type="index == currentIndex ? 'primary' : 'info'"
29
29
  size="large" :plain="index == currentIndex ? false : true"
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <view class="u-dragsort"
3
- :class="[direction == 'horizontal' ? 'u-dragsort--horizontal' : '', direction == 'all' ? 'u-dragsort--all' : '']">
3
+ :class="[direction == 'horizontal' ? 'u-dragsort--horizontal' : '', direction == 'vertical' ? 'u-dragsort--vertical' : '', direction == 'all' ? 'u-dragsort--all' : '']">
4
4
  <movable-area class="u-dragsort-area" :style="movableAreaStyle">
5
5
  <movable-view v-for="(item, index) in list" :key="item.id" :id="`u-dragsort-item-${index}`"
6
6
  class="u-dragsort-item" :class="{ 'dragging': dragIndex === index }"
@@ -20,7 +20,7 @@
20
20
  <script>
21
21
  import { mpMixin } from '../../libs/mixin/mpMixin';
22
22
  import { mixin } from '../../libs/mixin/mixin';
23
- import { addStyle, addUnit, sleep } from '../../libs/function/index';
23
+ import { sleep } from '../../libs/function/index';
24
24
  export default {
25
25
  name: 'u-dragsort',
26
26
  // #ifdef MP
@@ -74,7 +74,7 @@ export default {
74
74
  };
75
75
  } else if (this.direction === 'horizontal') {
76
76
  return {
77
- height: '100%',
77
+ height: `${this.itemHeight}px`,
78
78
  width: `${this.list.length * this.itemWidth}px`
79
79
  };
80
80
  } else {
@@ -171,21 +171,42 @@ export default {
171
171
  },
172
172
  updatePositions() {
173
173
  // 更新所有项目的位置
174
- this.list.forEach((item, index) => {
174
+ this.list = this.list.map((item, index) => {
175
+ // 当前正在拖动的项目保持拖动位置不动,避免抖动
176
+ if (this.dragIndex === index) {
177
+ return {
178
+ ...item,
179
+ x: this.currentPosition.x,
180
+ y: this.currentPosition.y
181
+ }
182
+ }
183
+
175
184
  if (this.direction === 'vertical') {
176
- item.y = index * this.itemHeight;
177
- item.x = 0;
178
- } else if (this.direction === 'horizontal') {
179
- item.x = index * this.itemWidth;
180
- item.y = 0;
181
- } else {
182
- // all模式,网格布局
183
- const col = index % this.columns;
184
- const row = Math.floor(index / this.columns);
185
- item.x = col * this.itemWidth;
186
- item.y = row * this.itemHeight;
185
+ return {
186
+ ...item,
187
+ x: 0,
188
+ y: index * this.itemHeight
189
+ }
187
190
  }
188
- });
191
+
192
+ if (this.direction === 'horizontal') {
193
+ return {
194
+ ...item,
195
+ x: index * this.itemWidth,
196
+ y: 0
197
+ }
198
+ }
199
+
200
+ // all模式,网格布局
201
+ const col = index % this.columns
202
+ const row = Math.floor(index / this.columns)
203
+
204
+ return {
205
+ ...item,
206
+ x: col * this.itemWidth,
207
+ y: row * this.itemHeight
208
+ }
209
+ })
189
210
  },
190
211
  onTouchStart(index) {
191
212
  this.dragIndex = index;
@@ -330,12 +351,14 @@ export default {
330
351
  }
331
352
 
332
353
  .u-dragsort-item-content {
333
- padding: 0px;
334
- text-align: center;
354
+ padding: 0;
335
355
  box-sizing: border-box;
336
- padding-bottom: 6px;
337
- border-radius: 8rpx;
338
- transition: all 0.3s ease;
356
+ }
357
+ }
358
+
359
+ &.u-dragsort--vertical {
360
+ .u-dragsort-item {
361
+ height: auto;
339
362
  }
340
363
  }
341
364
 
@@ -347,9 +370,8 @@ export default {
347
370
  }
348
371
 
349
372
  .u-dragsort-item {
350
- display: flex;
351
373
  width: auto;
352
- height: 100%;
374
+ height: auto;
353
375
  }
354
376
  }
355
377
 
@@ -28,7 +28,7 @@
28
28
  * @example <up-form labelPosition="left" :model="model1" :rules="rules" ref="form1"></up-form>
29
29
  */
30
30
  export default {
31
- name: "u-form",
31
+ name: "up-form",
32
32
  mixins: [mpMixin, mixin, props],
33
33
  provide() {
34
34
  return {
@@ -1,10 +1,10 @@
1
1
  <template>
2
- <view class="u-form-item" :class="{'u-form-item--error':(!!message && parentData.errorType === 'message')}">
2
+ <view class="u-form-item" :class="{'u-form-item--error':(!!message && parentData['errorType'] === 'message')}">
3
3
  <view
4
4
  class="u-form-item__body"
5
5
  @tap="clickHandler"
6
6
  :style="[addStyle(customStyle), {
7
- flexDirection: (labelPosition || parentData.labelPosition) === 'left' ? 'row' : 'column'
7
+ flexDirection: (labelPosition || parentData['labelPosition']) === 'left' ? 'row' : 'column'
8
8
  }]"
9
9
  >
10
10
  <!-- 微信小程序中,将一个参数设置空字符串,结果会变成字符串"true" -->
@@ -12,10 +12,10 @@
12
12
  <!-- {{required}} -->
13
13
  <view
14
14
  class="u-form-item__body__left"
15
- v-if="required || leftIcon || label"
15
+ v-if="required || leftIcon != '' || label != ''"
16
16
  :style="{
17
- width: addUnit(labelWidth || parentData.labelWidth),
18
- marginBottom: (labelPosition || parentData.labelPosition) === 'left' ? 0 : '5px',
17
+ width: addUnit(labelWidth || parentData['labelWidth']),
18
+ marginBottom: (labelPosition || parentData['labelPosition']) === 'left' ? 0 : '5px',
19
19
  }"
20
20
  >
21
21
  <!-- 为了块对齐 -->
@@ -37,7 +37,7 @@
37
37
  <text
38
38
  class="u-form-item__body__left__content__label"
39
39
  :style="[parentData.labelStyle, {
40
- justifyContent: parentData.labelAlign === 'left' ? 'flex-start' : parentData.labelAlign === 'center' ? 'center' : 'flex-end'
40
+ justifyContent: parentData['labelAlign'] === 'left' ? 'flex-start' : parentData['labelAlign'] === 'center' ? 'center' : 'flex-end'
41
41
  }]"
42
42
  >{{ label }}</text>
43
43
  </view>
@@ -50,7 +50,7 @@
50
50
  </view>
51
51
  <view
52
52
  class="item__body__right__content__icon"
53
- v-if="$slots.right"
53
+ v-if="$slots['right']"
54
54
  >
55
55
  <slot name="right" />
56
56
  </view>
@@ -59,17 +59,17 @@
59
59
  </view>
60
60
  <slot name="error">
61
61
  <text
62
- v-if="!!message && parentData.errorType === 'message'"
62
+ v-if="!!message && parentData['errorType'] === 'message'"
63
63
  class="u-form-item__body__right__message"
64
64
  :style="{
65
- marginLeft: addUnit((labelPosition || parentData.labelPosition) === 'top' ? 0 : (labelWidth || parentData.labelWidth))
65
+ marginLeft: addUnit((labelPosition || parentData['labelPosition']) === 'top' ? 0 : (labelWidth || parentData['labelWidth']))
66
66
  }"
67
67
  >{{ message }}</text>
68
68
  </slot>
69
69
  <u-line
70
70
  v-if="borderBottom"
71
- :color="message && parentData.errorType === 'border-bottom' ? color.error : propsLine.color"
72
- :customStyle="`margin-top: ${message && parentData.errorType === 'message' ? '5px' : 0}`"
71
+ :color="message && parentData['errorType'] === 'border-bottom' ? color['error'] : propsLine['color']"
72
+ :customStyle="`margin-top: ${message && parentData['errorType'] === 'message' ? '5px' : 0}`"
73
73
  ></u-line>
74
74
  </view>
75
75
  </template>
@@ -98,7 +98,7 @@
98
98
  * @example <u-form-item label="姓名" prop="userInfo.name" borderBottom ref="item1"></u-form-item>
99
99
  */
100
100
  export default {
101
- name: 'u-form-item',
101
+ name: 'up-form-item',
102
102
  mixins: [mpMixin, mixin, props],
103
103
  data() {
104
104
  return {
@@ -127,7 +127,9 @@
127
127
  }
128
128
  },
129
129
  mounted() {
130
- this.init()
130
+ this.$nextTick(() => {
131
+ this.init()
132
+ })
131
133
  },
132
134
  emits: ["click"],
133
135
  watch: {
@@ -146,7 +148,7 @@
146
148
  // 父组件的实例
147
149
  this.updateParentData()
148
150
  if (!this.parent) {
149
- error('u-form-item需要结合u-form组件使用')
151
+ error('u-form-item需要结合up-form组件使用')
150
152
  }
151
153
  },
152
154
  // 手动设置校验的规则,如果规则中有函数的话,微信小程序中会过滤掉,所以只能手动调用设置规则
@@ -161,7 +163,7 @@
161
163
  // 获取父组件的参数
162
164
  updateParentData() {
163
165
  // 此方法写在mixin中
164
- this.getParentData('u-form');
166
+ this.getParentData('up-form');
165
167
  },
166
168
  // 移除u-form-item的校验结果
167
169
  clearValidate() {
@@ -170,9 +172,9 @@
170
172
  // 清空当前的组件的校验结果,并重置为初始值
171
173
  resetField() {
172
174
  // 找到原始值
173
- const value = getProperty(this.parent.originalModel, this.prop)
174
- // 将u-form的model的prop属性链还原原始值
175
- setProperty(this.parent.model, this.prop, value)
175
+ const value = getProperty(this.parent.$data['originalModel'], this.prop)
176
+ // 将up-form的model的prop属性链还原原始值
177
+ setProperty(this.parent.$props['model'], this.prop, value)
176
178
  // 移除校验结果
177
179
  this.message = null
178
180
  },
@@ -48,7 +48,7 @@
48
48
  </view>
49
49
 
50
50
  <view class="up-goods-sku__content__count">
51
- <view class="up-goods-sku__content__count__title">{{ t('"up.goodsSku.buyAmount"') }}</view>
51
+ <view class="up-goods-sku__content__count__title">{{ t('up.goodsSku.buyAmount') }}</view>
52
52
  <view class="up-goods-sku__content__count__control">
53
53
  <up-number-box
54
54
  v-model="buyNum"
@@ -203,6 +203,7 @@ export default {
203
203
  'uicon-empty-list': '\ue68b',
204
204
  'uicon-empty-page': '\ue627',
205
205
  'uicon-empty-order': '\ue639',
206
+ 'uicon-empty-wifi': '\ue668',
206
207
  'uicon-man': '\ue697',
207
208
  'uicon-woman': '\ue69c',
208
209
  'uicon-man-add': '\ue61c',
@@ -211,4 +212,4 @@ export default {
211
212
  'uicon-man-delete-fill': '\ue66a',
212
213
  'uicon-zh': '\ue70a',
213
214
  'uicon-en': '\ue692'
214
- }
215
+ }
@@ -44,7 +44,7 @@ export default {
44
44
  readonly: false,
45
45
  shape: 'square',
46
46
  formatter: null,
47
- cursorColor: '',
47
+ cursorColor: '#53c21d',
48
48
  passwordVisibilityToggle: true
49
49
  }
50
50
  }
@@ -147,6 +147,16 @@ export const props = defineMixin({
147
147
  pageInline:{
148
148
  type: Boolean,
149
149
  default: () => defProps.picker.pageInline
150
+ },
151
+ // 蒙层样式样式
152
+ maskClass: {
153
+ type: String,
154
+ defualt: ''
155
+ },
156
+ // 蒙层样式样式
157
+ maskStyle: {
158
+ type: String,
159
+ defualt: ''
150
160
  }
151
161
  }
152
162
  })
@@ -43,6 +43,8 @@
43
43
  <slot name="toolbar-bottom"></slot>
44
44
  <picker-view
45
45
  class="u-picker__view"
46
+ :mask-class="maskClass"
47
+ :mask-style="maskStyle"
46
48
  :indicatorStyle="`height: ${addUnit(itemHeight, 'px')}`"
47
49
  :value="innerIndex"
48
50
  :immediateChange="immediateChange"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "id": "uview-plus",
3
3
  "name": "uview-plus",
4
4
  "displayName": "零云®uview-plus3.0重磅发布,全面的Vue3鸿蒙跨端移动组件库,组件丰富维护更新稳定。",
5
- "version": "3.6.18",
5
+ "version": "3.6.26",
6
6
  "description": "零云®uview-plus已兼容vue3支持多语言,120+全面的组件和便捷的工具会让您信手拈来。近期新增拖动排序、条码、图片裁剪、下拉刷新、虚拟列表、签名、Markdown等。",
7
7
  "keywords": [
8
8
  "uview",