hy-app 0.4.5 → 0.4.6
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/components/hy-calendar/month.vue +2 -2
- package/components/hy-list/hy-list.vue +6 -4
- package/components/hy-loading/hy-loading.vue +10 -8
- package/components/hy-loading/index.scss +14 -5
- package/components/hy-navbar/hy-navbar.vue +62 -58
- package/components/hy-rate/hy-rate.vue +1 -0
- package/components/hy-search/hy-search.vue +1 -1
- package/components/hy-search/index.scss +1 -0
- package/components/hy-toast/hy-toast.vue +1 -0
- package/components/hy-watermark/hy-watermark.vue +2 -1
- package/libs/api/http.ts +1 -1
- package/libs/composables/useToast.ts +6 -6
- package/libs/css/theme.scss +1 -1
- package/libs/css/vars.scss +2 -2
- package/libs/utils/utils.ts +27 -0
- package/package.json +2 -2
|
@@ -384,7 +384,7 @@ export default {
|
|
|
384
384
|
// 获取月份数据区域的宽度,因为nvue不支持百分比,所以无法通过css设置每个日期item的宽度
|
|
385
385
|
getWrapperWidth() {
|
|
386
386
|
// #ifndef APP-NVUE
|
|
387
|
-
getRect(".hy-calendar--month__wrapper").then((size) => {
|
|
387
|
+
getRect(".hy-calendar--month__wrapper", false, this).then((size) => {
|
|
388
388
|
this.width = size.width;
|
|
389
389
|
});
|
|
390
390
|
// #endif
|
|
@@ -413,7 +413,7 @@ export default {
|
|
|
413
413
|
// $uGetRect为uView自带的节点查询简化方法,详见文档介绍:https://ijry.github.io/uview-plus/js/getRect.html
|
|
414
414
|
// 组件内部一般用this.$uGetRect,对外的为uni.$u.getRect,二者功能一致,名称不同
|
|
415
415
|
return new Promise((resolve) => {
|
|
416
|
-
getRect(`.${el}
|
|
416
|
+
getRect(`.${el}`, false, this).then((size) => {
|
|
417
417
|
resolve(size);
|
|
418
418
|
});
|
|
419
419
|
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
ref="hyVirtualContainer"
|
|
4
4
|
@scroll="onScroll"
|
|
5
5
|
@scrolltolower="scrollToLower"
|
|
6
|
-
:lower-threshold="showDivider ?
|
|
6
|
+
:lower-threshold="showDivider ? 100 : 50"
|
|
7
7
|
:scroll-y="true"
|
|
8
8
|
scroll-with-animation
|
|
9
9
|
class="hy-virtual-container"
|
|
@@ -60,7 +60,8 @@
|
|
|
60
60
|
</template>
|
|
61
61
|
<!--加载更多样式-->
|
|
62
62
|
</view>
|
|
63
|
-
|
|
63
|
+
<slot v-if="$slots.footer" name="footer"></slot>
|
|
64
|
+
<hy-divider :text="load" v-else-if="showDivider"></hy-divider>
|
|
64
65
|
</scroll-view>
|
|
65
66
|
</template>
|
|
66
67
|
|
|
@@ -81,15 +82,16 @@ import {
|
|
|
81
82
|
getCurrentInstance,
|
|
82
83
|
nextTick,
|
|
83
84
|
onMounted,
|
|
84
|
-
type PropType,
|
|
85
85
|
reactive,
|
|
86
86
|
ref,
|
|
87
87
|
useSlots,
|
|
88
88
|
watch,
|
|
89
89
|
} from "vue";
|
|
90
|
-
import type { CSSProperties } from "vue";
|
|
90
|
+
import type { CSSProperties, PropType } from "vue";
|
|
91
91
|
import { addUnit, getPx, getRect } from "../../libs";
|
|
92
92
|
import type { IListEmits } from "./typing";
|
|
93
|
+
// 组件
|
|
94
|
+
import HyDivider from "@/package/components/hy-divider/hy-divider.vue";
|
|
93
95
|
|
|
94
96
|
/**
|
|
95
97
|
* 实现只展示可视内容的dom,减少dom创建,优化滚动性能
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view
|
|
3
|
-
class="hy-loading-icon"
|
|
4
|
-
:style="customStyle"
|
|
5
|
-
:class="[vertical && 'hy-loading-icon__vertical']"
|
|
6
3
|
v-if="show"
|
|
4
|
+
:style="customStyle"
|
|
5
|
+
:class="['hy-loading-icon', `hy-loading-icon__${direction}`]"
|
|
7
6
|
>
|
|
8
7
|
<view
|
|
9
8
|
v-if="!webviewHide"
|
|
@@ -34,7 +33,7 @@
|
|
|
34
33
|
</view>
|
|
35
34
|
<text
|
|
36
35
|
v-if="text"
|
|
37
|
-
class="hy-loading-icon__text"
|
|
36
|
+
:class="['hy-loading-icon__text', `hy-loading-icon__${direction}--text`]"
|
|
38
37
|
:style="{
|
|
39
38
|
fontSize: addUnit(textSize),
|
|
40
39
|
color: textColor,
|
|
@@ -84,10 +83,13 @@ const props = defineProps({
|
|
|
84
83
|
type: String,
|
|
85
84
|
default: "#909399",
|
|
86
85
|
},
|
|
87
|
-
/**
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
/**
|
|
87
|
+
* 文字和图标是否垂直排列
|
|
88
|
+
* @values row,column
|
|
89
|
+
* */
|
|
90
|
+
direction: {
|
|
91
|
+
type: String as PropType<HyApp.DirectionType>,
|
|
92
|
+
default: "row",
|
|
91
93
|
},
|
|
92
94
|
/** 模式选择,见官网说明 */
|
|
93
95
|
mode: {
|
|
@@ -3,13 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
@include b(loading-icon) {
|
|
6
|
-
@include flex(row);
|
|
7
6
|
align-items: center;
|
|
8
7
|
justify-content: center;
|
|
9
8
|
color: #c8c9cc;
|
|
10
9
|
|
|
11
10
|
@include e(text) {
|
|
12
|
-
margin-left: 4px;
|
|
13
11
|
color: $hy-text-color--grey;
|
|
14
12
|
font-size: 14px;
|
|
15
13
|
line-height: 20px;
|
|
@@ -37,8 +35,20 @@
|
|
|
37
35
|
}
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
@include
|
|
41
|
-
flex
|
|
38
|
+
@include e(row) {
|
|
39
|
+
@include flex(row);
|
|
40
|
+
|
|
41
|
+
@include m(text) {
|
|
42
|
+
margin-left: $hy-border-margin-padding-base;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@include e(column) {
|
|
47
|
+
@include flex(column);
|
|
48
|
+
|
|
49
|
+
@include m(text) {
|
|
50
|
+
margin-top: $hy-border-margin-padding-base;
|
|
51
|
+
}
|
|
42
52
|
}
|
|
43
53
|
}
|
|
44
54
|
|
|
@@ -60,7 +70,6 @@
|
|
|
60
70
|
}
|
|
61
71
|
|
|
62
72
|
@include e(vertical, text) {
|
|
63
|
-
margin: 6px 0 0;
|
|
64
73
|
color: $hy-text-color--grey;
|
|
65
74
|
}
|
|
66
75
|
|
|
@@ -7,79 +7,83 @@
|
|
|
7
7
|
height: addUnit(getPx(height) + statusBarHeight),
|
|
8
8
|
}"
|
|
9
9
|
></view>
|
|
10
|
-
<view
|
|
10
|
+
<view
|
|
11
|
+
:class="[fixed && 'hy-navbar__fixed']"
|
|
12
|
+
:style="{ backgroundColor: bgColor }"
|
|
13
|
+
>
|
|
11
14
|
<HyStatusBar v-if="safeAreaInsetTop" :bgColor="bgColor"></HyStatusBar>
|
|
12
15
|
<view
|
|
13
16
|
:class="[border && 'hy-border__bottom', 'hy-navbar__content']"
|
|
14
17
|
:style="{
|
|
15
18
|
height: addUnit(height),
|
|
16
|
-
backgroundColor: bgColor,
|
|
17
19
|
}"
|
|
18
20
|
>
|
|
21
|
+
<!-- 左边 -->
|
|
22
|
+
<slot v-if="$slots.left" name="left"></slot>
|
|
19
23
|
<view
|
|
24
|
+
v-else
|
|
20
25
|
class="hy-navbar__content__left"
|
|
21
26
|
hover-class="hy-navbar__content__left--hover"
|
|
22
27
|
hover-start-time="150"
|
|
23
28
|
@tap="leftClick"
|
|
24
29
|
>
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
</text>
|
|
41
|
-
</slot>
|
|
30
|
+
<HyIcon
|
|
31
|
+
v-if="leftIcon"
|
|
32
|
+
:name="leftIcon"
|
|
33
|
+
:size="leftIconSize"
|
|
34
|
+
:color="leftIconColor"
|
|
35
|
+
></HyIcon>
|
|
36
|
+
<text
|
|
37
|
+
v-if="leftText"
|
|
38
|
+
:style="{
|
|
39
|
+
color: leftIconColor,
|
|
40
|
+
}"
|
|
41
|
+
class="hy-navbar__content__left--text"
|
|
42
|
+
>
|
|
43
|
+
{{ leftText }}
|
|
44
|
+
</text>
|
|
42
45
|
</view>
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
</
|
|
46
|
+
<!-- 左边 -->
|
|
47
|
+
|
|
48
|
+
<!-- 中间 -->
|
|
49
|
+
<slot v-if="$slots.center" name="center"></slot>
|
|
50
|
+
<view v-else class="hy-navbar__content__center">
|
|
51
|
+
<text
|
|
52
|
+
class="hy-navbar__content__center--title"
|
|
53
|
+
:style="[
|
|
54
|
+
{
|
|
55
|
+
width: addUnit(titleWidth),
|
|
56
|
+
color: titleColor,
|
|
57
|
+
},
|
|
58
|
+
titleStyle,
|
|
59
|
+
]"
|
|
60
|
+
>
|
|
61
|
+
{{ title }}
|
|
62
|
+
</text>
|
|
63
|
+
<text
|
|
64
|
+
class="hy-navbar__content__center--sub"
|
|
65
|
+
:style="[
|
|
66
|
+
{
|
|
67
|
+
width: addUnit(titleWidth),
|
|
68
|
+
color: titleColor,
|
|
69
|
+
},
|
|
70
|
+
titleStyle,
|
|
71
|
+
]"
|
|
72
|
+
>
|
|
73
|
+
{{ sub }}
|
|
74
|
+
</text>
|
|
75
|
+
</view>
|
|
76
|
+
<!-- 中间 -->
|
|
77
|
+
|
|
78
|
+
<!-- 右边 -->
|
|
79
|
+
<slot v-if="$slots.right" name="right"></slot>
|
|
80
|
+
<view class="hy-navbar__content__right" v-else @tap="rightClick">
|
|
81
|
+
<HyIcon v-if="rightIcon" :name="rightIcon" size="20"></HyIcon>
|
|
82
|
+
<text v-if="rightText" class="hy-navbar__content__right--text">{{
|
|
83
|
+
rightText
|
|
84
|
+
}}</text>
|
|
82
85
|
</view>
|
|
86
|
+
<!-- 右边 -->
|
|
83
87
|
</view>
|
|
84
88
|
</view>
|
|
85
89
|
</view>
|
|
@@ -532,11 +532,12 @@ function drawTextOffScreen(
|
|
|
532
532
|
color: string,
|
|
533
533
|
canvas: HTMLCanvasElement,
|
|
534
534
|
) {
|
|
535
|
+
console.log(fontSize, "离屏");
|
|
535
536
|
ctx.textBaseline = "middle";
|
|
536
537
|
ctx.textAlign = "center";
|
|
537
538
|
ctx.translate(contentWidth / 2, contentWidth / 2);
|
|
538
539
|
ctx.rotate((Math.PI / 180) * rotate);
|
|
539
|
-
ctx.font = `${fontStyle} normal ${fontWeight} ${fontSize}px ${fontFamily}`;
|
|
540
|
+
ctx.font = `${fontStyle} normal ${fontWeight} ${fontSize}px/${contentHeight}px ${fontFamily}`;
|
|
540
541
|
ctx.fillStyle = color;
|
|
541
542
|
ctx.fillText(content, 0, 0);
|
|
542
543
|
ctx.restore();
|
package/libs/api/http.ts
CHANGED
|
@@ -14,17 +14,17 @@ let toastInstance: any = null;
|
|
|
14
14
|
*/
|
|
15
15
|
export const useToast = () => {
|
|
16
16
|
const show = (msg: string, opt?: ToastOptions) =>
|
|
17
|
-
openToast({ message: msg, icon: false, ...opt });
|
|
17
|
+
openToast({ message: msg, icon: false, type: "", ...opt });
|
|
18
18
|
const info = (msg: string, opt?: ToastOptions) =>
|
|
19
|
-
openToast({ message: msg, type: "info", ...opt });
|
|
19
|
+
openToast({ message: msg, type: "info", icon: true, ...opt });
|
|
20
20
|
const success = (msg: string, opt?: ToastOptions) =>
|
|
21
|
-
openToast({ message: msg, type: "success", ...opt });
|
|
21
|
+
openToast({ message: msg, type: "success", icon: true, ...opt });
|
|
22
22
|
const error = (msg: string, opt?: ToastOptions) =>
|
|
23
|
-
openToast({ message: msg, type: "error", ...opt });
|
|
23
|
+
openToast({ message: msg, type: "error", icon: true, ...opt });
|
|
24
24
|
const warning = (msg: string, opt?: ToastOptions) =>
|
|
25
|
-
openToast({ message: msg, type: "warning", ...opt });
|
|
25
|
+
openToast({ message: msg, type: "warning", icon: true, ...opt });
|
|
26
26
|
const primary = (msg: string, opt?: ToastOptions) =>
|
|
27
|
-
openToast({ message: msg, type: "primary", ...opt });
|
|
27
|
+
openToast({ message: msg, type: "primary", icon: true, ...opt });
|
|
28
28
|
const loading = (msg: string = "加载中...", opt?: ToastOptions) =>
|
|
29
29
|
openToast({ message: msg, loading: true, ...opt });
|
|
30
30
|
const close = (all?: boolean) => closeToast();
|
package/libs/css/theme.scss
CHANGED
|
@@ -32,7 +32,7 @@ $hy-text-color--3: var(--hy-text-color--3, #929295) !default; // 一般用于浅
|
|
|
32
32
|
$hy-text-color--4: var(--hy-text-color--4, rgba(0, 0, 0, 0.1)) !default; // 一般用于浅色
|
|
33
33
|
$hy-icon-color: var(--hy-icon-color, #606266) !default; // 一般用于icon
|
|
34
34
|
$hy-text-color--grey: var(--hy-text-color--grey, #999) !default; // 辅助灰色,如加载更多的提示信息
|
|
35
|
-
$hy-text-color--placeholder: var(--hy-text-color--placeholder, #
|
|
35
|
+
$hy-text-color--placeholder: var(--hy-text-color--placeholder, #909399) !default; // 输入框提示颜色
|
|
36
36
|
$hy-text-color--disabled: var(--hy-text-color--disabled, #c0c0c0) !default; // 禁用文字颜色
|
|
37
37
|
$hy-border-color: var(--hy-border-color, #c0c0c0) !default; // 边框颜色
|
|
38
38
|
$hy-text-color--hover: var(--hy-text-color--hover, #58595b)!default; // 点击状态文字颜色
|
package/libs/css/vars.scss
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
--hy-text-color--4: rgba(0, 0, 0, 0.1);
|
|
8
8
|
--hy-icon-color: #999;
|
|
9
9
|
--hy-text-color--grey: #67676c;
|
|
10
|
-
--hy-text-color--placeholder:
|
|
10
|
+
--hy-text-color--placeholder: #909399;
|
|
11
11
|
--hy-text-color--disabled: rgba(0, 0, 0, 0.25);
|
|
12
12
|
|
|
13
13
|
--hy-background: #f8f8f8;
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
--hy-text-color--4: rgba(255, 255, 255, 0.1);
|
|
41
41
|
--hy-icon-color: #FFFFFF;
|
|
42
42
|
--hy-text-color--grey: #98989f;
|
|
43
|
-
--hy-text-color--placeholder:
|
|
43
|
+
--hy-text-color--placeholder: #909399;
|
|
44
44
|
--hy-text-color--disabled: rgba(255, 255, 255, 0.25);
|
|
45
45
|
|
|
46
46
|
--hy-background: #1b1b1f;
|
package/libs/utils/utils.ts
CHANGED
|
@@ -372,6 +372,32 @@ const objectToUrlParams = (params: Record<string, any>): string => {
|
|
|
372
372
|
.join("&"); // 使用 & 拼接所有参数
|
|
373
373
|
};
|
|
374
374
|
|
|
375
|
+
/**
|
|
376
|
+
* @description 地址栏参数转换对象
|
|
377
|
+
* @param paramStr - 字符串参数
|
|
378
|
+
* @returns 返回转换对象
|
|
379
|
+
*/
|
|
380
|
+
const urlParamsToObject = (paramStr: string): AnyObject => {
|
|
381
|
+
const params: AnyObject = {};
|
|
382
|
+
// 去掉字符串两端的可能的空格
|
|
383
|
+
paramStr = paramStr.trim();
|
|
384
|
+
// 如果字符串以?开头,去掉它
|
|
385
|
+
if (paramStr.startsWith("?")) {
|
|
386
|
+
paramStr = paramStr.substring(1);
|
|
387
|
+
}
|
|
388
|
+
// 按&分割字符串,得到键值对数组
|
|
389
|
+
const pairs = paramStr.split("&");
|
|
390
|
+
for (let i = 0; i < pairs.length; i++) {
|
|
391
|
+
const pair = pairs[i];
|
|
392
|
+
// 按=分割键值对
|
|
393
|
+
const [key, ...valueParts] = pair.split("=");
|
|
394
|
+
const value = valueParts.join("=");
|
|
395
|
+
// 将键值对存入对象
|
|
396
|
+
params[decodeURIComponent(key)] = decodeURIComponent(value);
|
|
397
|
+
}
|
|
398
|
+
return params;
|
|
399
|
+
};
|
|
400
|
+
|
|
375
401
|
/**
|
|
376
402
|
* 获取 [min,max]的随机数
|
|
377
403
|
* Math.floor(Math.random()*10) 可均衡获取 0 到 9 的随机整数
|
|
@@ -486,6 +512,7 @@ export {
|
|
|
486
512
|
deepClone,
|
|
487
513
|
bytesToSize,
|
|
488
514
|
objectToUrlParams,
|
|
515
|
+
urlParamsToObject,
|
|
489
516
|
random,
|
|
490
517
|
range,
|
|
491
518
|
getRect,
|