@10yun/cv-mobile-ui 0.5.50 → 0.5.52
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/build/common_func.js +3 -1
- package/build/parse-create.js +17 -8
- package/build/parse-pages-pkg.js +10 -4
- package/empty-devtools.js +3 -0
- package/libs/aes.js +50 -0
- package/libs/bledefine/bledefine.js +51 -0
- package/libs/bledefine/ios-ble-statuscode.js +97 -0
- package/libs/nfc/hexiii-nfc.js +236 -0
- package/libs/nfc.js +179 -0
- package/libs/sdk/html2canvas.js +8 -0
- package/libs/sdk/sdk-h5.js +585 -0
- package/{plugins → libs}/storage2.js +0 -5
- package/{plugins → libs}/storage3.js +0 -4
- package/libs/validators/index.js +438 -0
- package/libs/weapp-qrcode.js +1108 -0
- package/package.json +2 -3
- package/ui-cv/components/cv-dialog-share/tui-share.vue +16 -16
- package/ui-cv/components/cv-mask-png/cv-mask-png.vue +27 -0
- package/ui-cv/components/cv-mask-svg/cv-mask-svg.vue +22 -0
- package/ui-cv/components/cv-mask-svg/mixins.js +131 -0
- package/ui-fireui/components/{fui-actionsheet/fui-actionsheet.vue → u-action-sheet/u-action-sheet.vue} +21 -21
- package/ui-fireui/components/{fui-alert/fui-alert.vue → u-alert/u-alert.vue} +13 -13
- package/ui-fireui/components/{fui-badge/fui-badge.vue → u-badge/u-badge.vue} +16 -16
- package/ui-fireui/components/{fui-bottom-navigation/fui-bottom-navigation.vue → u-bottom-navigation/u-bottom-navigation.vue} +47 -46
- package/ui-fireui/components/{fui-bottom-popup/fui-bottom-popup.vue → u-bottom-popup/u-bottom-popup.vue} +9 -8
- package/ui-fireui/components/{fui-bubble-popup/fui-bubble-popup.vue → u-bubble-popup/u-bubble-popup.vue} +19 -15
- package/ui-fireui/components/{fui-button/fui-button.vue → u-button/u-button.vue} +69 -69
- package/ui-fireui/components/u-button/u-button2.vue +553 -0
- package/ui-fireui/components/{fui-calendar/fui-calendar.vue → u-calendar/u-calendar.vue} +78 -78
- package/ui-fireui/components/u-calendar/u-calendar2.vue +801 -0
- package/ui-fireui/components/{fui-card/fui-card.vue → u-card/u-card.vue} +24 -24
- package/ui-fireui/components/{fui-cascade-selection/fui-cascade-selection.vue → u-cascade-selection/u-cascade-selection.vue} +32 -32
- package/ui-fireui/components/{fui-circular-progress/fui-circular-progress.vue → u-circular-progress/u-circular-progress.vue} +14 -6
- package/ui-fireui/components/{fui-collapse/fui-collapse.vue → u-collapse/u-collapse.vue} +19 -19
- package/ui-fireui/components/{fui-countdown/fui-countdown.vue → u-countdown/u-countdown.vue} +28 -28
- package/ui-fireui/components/{fui-datetime/fui-datetime.vue → u-datetime/u-datetime.vue} +51 -51
- package/ui-fireui/components/{fui-divider/fui-divider.vue → u-divider/u-divider.vue} +6 -6
- package/ui-fireui/components/{fui-drawer/fui-drawer.vue → u-drawer/u-drawer.vue} +11 -11
- package/ui-fireui/components/{fui-dropdown-list/fui-dropdown-list.vue → u-dropdown-list/u-dropdown-list.vue} +11 -6
- package/ui-fireui/components/{fui-fab/fui-fab.vue → u-fab/u-fab.vue} +30 -30
- package/ui-fireui/components/{fui-footer/fui-footer.vue → u-footer/u-footer.vue} +19 -15
- package/ui-fireui/components/{fui-grid/fui-grid.vue → u-grid/u-grid.vue} +13 -5
- package/ui-fireui/components/{fui-grid-item/fui-grid-item.vue → u-grid-item/u-grid-item.vue} +19 -19
- package/ui-fireui/components/{fui-icon/fui-icon.vue → u-icon/u-icon.vue} +191 -191
- package/ui-fireui/components/{fui-image-cropper/fui-image-cropper.vue → u-image-cropper/u-image-cropper.vue} +44 -44
- package/ui-fireui/components/{fui-image-group/fui-image-group.vue → u-image-group/u-image-group.vue} +7 -7
- package/ui-fireui/components/{fui-keyboard/fui-keyboard.vue → u-keyboard/u-keyboard.vue} +29 -32
- package/ui-fireui/components/{fui-keyboard-input/fui-keyboard-input.vue → u-keyboard-input/u-keyboard-input.vue} +9 -9
- package/ui-fireui/components/{fui-list-cell/fui-list-cell.vue → u-list-cell/u-list-cell.vue} +23 -23
- package/ui-fireui/components/{fui-list-view/fui-list-view.vue → u-list-view/u-list-view.vue} +11 -11
- package/ui-fireui/components/{fui-loading/fui-loading.vue → u-loading/u-loading.vue} +6 -6
- package/ui-fireui/components/{fui-loadmore/fui-loadmore.vue → u-loadmore/u-loadmore.vue} +15 -15
- package/ui-fireui/components/{fui-modal/fui-modal.vue → u-modal/u-modal.vue} +58 -58
- package/ui-fireui/components/{fui-navigation-bar/fui-navigation-bar.vue → u-navigation-bar/u-navigation-bar.vue} +11 -10
- package/ui-fireui/components/{fui-no-data/fui-no-data.vue → u-no-data/u-no-data.vue} +11 -11
- package/ui-fireui/components/{fui-nomore/fui-nomore.vue → u-nomore/u-nomore.vue} +10 -10
- package/ui-fireui/components/{fui-numberbox/fui-numberbox.vue → u-numberbox/u-numberbox.vue} +12 -12
- package/ui-fireui/components/{fui-numberbox-border/fui-numberbox-border.vue → u-numberbox-border/u-numberbox-border.vue} +10 -10
- package/ui-fireui/components/{fui-picture-cropper/fui-picture-cropper.vue → u-picture-cropper/u-picture-cropper.vue} +42 -42
- package/ui-fireui/components/u-picture-cropper/u-picture-cropper.wxs +582 -0
- package/ui-fireui/components/{fui-round-progress/fui-round-progress.vue → u-round-progress/u-round-progress.vue} +2 -2
- package/ui-fireui/components/{fui-scroll-top/fui-scroll-top.vue → u-scroll-top/u-scroll-top.vue} +21 -21
- package/ui-fireui/components/{fui-sharemodel/fui-sharemodel.vue → u-share-model/u-share-model.vue} +24 -24
- package/ui-fireui/components/{fui-skeleton/fui-skeleton.vue → u-skeleton/u-skeleton.vue} +22 -22
- package/ui-fireui/components/{fui-steps/fui-steps.vue → u-steps/u-steps.vue} +27 -27
- package/ui-fireui/components/{fui-sticky/fui-sticky.vue → u-sticky/u-sticky.vue} +4 -4
- package/ui-fireui/components/{fui-sticky-wxs/fui-sticky-wxs.vue → u-sticky-wxs/u-sticky-wxs.vue} +7 -7
- package/ui-fireui/components/u-sticky-wxs/u-sticky.wxs +46 -0
- package/ui-fireui/components/{fui-swipe-action/fui-swipe-action.vue → u-swipe-action/u-swipe-action.vue} +11 -11
- package/ui-fireui/components/{fui-tabbar/fui-tabbar.vue → u-tabbar/u-tabbar.vue} +26 -30
- package/ui-fireui/components/{fui-tabs/fui-tabs.vue → u-tabs/u-tabs.vue} +17 -17
- package/ui-fireui/components/{fui-tabs2/fui-tabs2.vue → u-tabs2/u-tabs2.vue} +17 -17
- package/ui-fireui/components/{fui-tag/fui-tag.vue → u-tag/u-tag.vue} +362 -374
- package/ui-fireui/components/{fui-time-axis/fui-time-axis.vue → u-time-axis/u-time-axis.vue} +3 -3
- package/ui-fireui/components/{fui-timeaxis-item/fui-timeaxis-item.vue → u-timeaxis-item/u-timeaxis-item.vue} +4 -4
- package/ui-fireui/components/{fui-tips/fui-tips.vue → u-tips/u-tips.vue} +20 -20
- package/ui-fireui/components/{fui-toast/fui-toast.vue → u-toast/u-toast.vue} +13 -13
- package/ui-fireui/components/{fui-top-dropdown/fui-top-dropdown.vue → u-top-dropdown/u-top-dropdown.vue} +8 -8
- package/ui-fireui/components/{fui-upload/fui-upload.vue → u-upload/u-upload.vue} +30 -30
- package/ui-fireui/components/u-upload2/u-upload.vue +464 -0
- package/ui-fireui/components/{fui-uploadsamll/fui-uploadsamll.vue → u-uploadsamll/u-uploadsamll.vue} +34 -34
- package/ui-fireui/css/thorui.css +589 -0
- package/ui-fireui/{fireui.css → index.css} +306 -268
- package/ui-fireui/nvue/u-circular-progress/gcanvas/bridge/bridge-weex.js +241 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-2d/FillStyleLinearGradient.js +18 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-2d/FillStylePattern.js +8 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-2d/FillStyleRadialGradient.js +17 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-2d/RenderingContext.js +666 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/ActiveInfo.js +11 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/Buffer.js +21 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/Framebuffer.js +21 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/GLenum.js +298 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/GLmethod.js +142 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/GLtype.js +23 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/Program.js +21 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/Renderbuffer.js +21 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/RenderingContext.js +1191 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/Shader.js +22 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/ShaderPrecisionFormat.js +11 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/Texture.js +22 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/UniformLocation.js +22 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/context-webgl/classUtils.js +3 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/env/canvas.js +74 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/env/image.js +96 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/env/tool.js +24 -0
- package/ui-fireui/nvue/u-circular-progress/gcanvas/index.js +47 -0
- package/ui-fireui/nvue/u-circular-progress/u-circular-progress.nvue +203 -0
- package/ui-fireui/nvue/u-icon/icons.js +188 -0
- package/ui-fireui/nvue/u-icon/u-icon.vue +78 -0
- package/uview-plus/components/u-grid/u-grid.vue +23 -1
- package/ui-fireui/components/fui-picture-cropper/fui-picture-cropper.wxs +0 -560
- package/ui-fireui/components/fui-rate/fui-rate.vue +0 -167
- package/ui-fireui/components/fui-sticky-wxs/fui-sticky.wxs +0 -44
- /package/ui-fireui/components/{fui-calendar/fui-calendar.js → u-calendar/u-calendar.js} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@10yun/cv-mobile-ui",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.52",
|
|
4
4
|
"description": "十云cvjs移动端ui,适用uniapp",
|
|
5
5
|
"author": "10yun",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -15,8 +15,7 @@
|
|
|
15
15
|
"scripts": {},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"clipboard": "^2.0.11",
|
|
18
|
-
"crypto-js": "^4.2.0"
|
|
19
|
-
"dayjs": "^1.11.13"
|
|
18
|
+
"crypto-js": "^4.2.0"
|
|
20
19
|
},
|
|
21
20
|
"browserslist": [
|
|
22
21
|
"Android >= 7",
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view class="container">
|
|
3
|
-
<text class="
|
|
4
|
-
<view class="
|
|
5
|
-
<view class="
|
|
6
|
-
<view class="
|
|
7
|
-
<text class="
|
|
3
|
+
<text class="up-share-title">分享到</text>
|
|
4
|
+
<view class="up-share-list">
|
|
5
|
+
<view class="up-share-item" hover-class="up-hover" :hover-stay-time="150" v-for="(item, index) in shareList" :key="index">
|
|
6
|
+
<view class="up-share-icon"><image :src="'/static/images/share/' + item.icon" class="up-icon-app"></image></view>
|
|
7
|
+
<text class="up-share-text">{{ item.name }}</text>
|
|
8
8
|
</view>
|
|
9
9
|
</view>
|
|
10
|
-
<view class="
|
|
10
|
+
<view class="up-btn-cancel" @tap="shareCancel"><text class="up-btn-text">取消</text></view>
|
|
11
11
|
</view>
|
|
12
12
|
</template>
|
|
13
13
|
<script>
|
|
@@ -46,7 +46,7 @@ export default {
|
|
|
46
46
|
background-color: #e8e8e8;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
.
|
|
49
|
+
.up-share-title {
|
|
50
50
|
font-size: 26rpx;
|
|
51
51
|
color: #7e7e7e;
|
|
52
52
|
text-align: center;
|
|
@@ -55,7 +55,7 @@ export default {
|
|
|
55
55
|
padding-bottom: 80rpx;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
.
|
|
58
|
+
.up-share-list {
|
|
59
59
|
width: 750rpx;
|
|
60
60
|
padding-left: 36rpx;
|
|
61
61
|
padding-right: 36rpx;
|
|
@@ -64,16 +64,16 @@ export default {
|
|
|
64
64
|
justify-content: space-between;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
.
|
|
67
|
+
.up-share-item {
|
|
68
68
|
width: 126rpx;
|
|
69
69
|
align-items: center;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
.
|
|
72
|
+
.up-share-item:active {
|
|
73
73
|
opacity: 0.6;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
.
|
|
76
|
+
.up-share-icon {
|
|
77
77
|
align-items: center;
|
|
78
78
|
justify-content: center;
|
|
79
79
|
background-color: #ffffff;
|
|
@@ -82,12 +82,12 @@ export default {
|
|
|
82
82
|
border-radius: 32rpx;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
.
|
|
85
|
+
.up-icon-app {
|
|
86
86
|
height: 68rpx;
|
|
87
87
|
width: 68rpx;
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
.
|
|
90
|
+
.up-share-text {
|
|
91
91
|
font-size: 24rpx;
|
|
92
92
|
line-height: 24rpx;
|
|
93
93
|
color: #7e7e7e;
|
|
@@ -95,7 +95,7 @@ export default {
|
|
|
95
95
|
padding-bottom: 20rpx;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
.
|
|
98
|
+
.up-btn-cancel {
|
|
99
99
|
width: 750rpx;
|
|
100
100
|
height: 100rpx;
|
|
101
101
|
position: fixed;
|
|
@@ -109,11 +109,11 @@ export default {
|
|
|
109
109
|
border-top-color: #eaeef1; */
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
.
|
|
112
|
+
.up-btn-cancle:active {
|
|
113
113
|
background-color: #eee;
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
.
|
|
116
|
+
.up-btn-text {
|
|
117
117
|
font-size: 34rpx;
|
|
118
118
|
color: #3e3e3e;
|
|
119
119
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<view class="cv-mask-icon" :style="iconStyle" @tap="$emit('click', $event)"></view>
|
|
3
|
+
</template>
|
|
4
|
+
<script>
|
|
5
|
+
import maskMixin from '../cv-mask-svg/mixins.js';
|
|
6
|
+
export default {
|
|
7
|
+
name: 'cvMaskPng',
|
|
8
|
+
mixins: [maskMixin],
|
|
9
|
+
data() {
|
|
10
|
+
return {
|
|
11
|
+
iconType: 'png'
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
</script>
|
|
16
|
+
<style scoped>
|
|
17
|
+
.cv-mask-icon {
|
|
18
|
+
/* 基础样式重置 */
|
|
19
|
+
display: inline-block;
|
|
20
|
+
vertical-align: middle;
|
|
21
|
+
cursor: pointer;
|
|
22
|
+
}
|
|
23
|
+
/* 悬浮颜色修改:直接切换背景色(精准高效) */
|
|
24
|
+
.cv-mask-icon:hover {
|
|
25
|
+
background-color: v-bind('hoverColor') !important;
|
|
26
|
+
}
|
|
27
|
+
</style>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<view class="mask-icon" :style="iconStyle" @tap="$emit('click', $event)"></view>
|
|
3
|
+
</template>
|
|
4
|
+
<script>
|
|
5
|
+
import maskMixin from './mixins.js';
|
|
6
|
+
export default {
|
|
7
|
+
name: 'cvMaskSvg',
|
|
8
|
+
mixins: [maskMixin]
|
|
9
|
+
};
|
|
10
|
+
</script>
|
|
11
|
+
<style scoped>
|
|
12
|
+
.cv-mask-icon {
|
|
13
|
+
/* 基础样式重置 */
|
|
14
|
+
display: inline-block;
|
|
15
|
+
vertical-align: middle;
|
|
16
|
+
cursor: pointer;
|
|
17
|
+
}
|
|
18
|
+
/* 悬浮颜色修改:直接切换背景色(精准高效) */
|
|
19
|
+
.cv-mask-icon:hover {
|
|
20
|
+
background-color: v-bind('hoverColor') !important;
|
|
21
|
+
}
|
|
22
|
+
</style>
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
emits: ['click'],
|
|
3
|
+
props: {
|
|
4
|
+
// 图标类型(对应远程 SVG 遮罩文件名)
|
|
5
|
+
name: {
|
|
6
|
+
type: String,
|
|
7
|
+
required: true,
|
|
8
|
+
validator: (v) => v.trim().length > 0
|
|
9
|
+
},
|
|
10
|
+
// 图标大小(小程序推荐rpx)
|
|
11
|
+
size: {
|
|
12
|
+
type: [Number, String],
|
|
13
|
+
default: 24
|
|
14
|
+
},
|
|
15
|
+
// 图标颜色(精准控制,无需滤镜)
|
|
16
|
+
color: {
|
|
17
|
+
type: String,
|
|
18
|
+
default: '#333333'
|
|
19
|
+
},
|
|
20
|
+
// 悬浮颜色
|
|
21
|
+
hoverColor: {
|
|
22
|
+
type: String,
|
|
23
|
+
default: ''
|
|
24
|
+
},
|
|
25
|
+
// 开启悬浮效果
|
|
26
|
+
hoverEffect: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
default: false
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
data() {
|
|
32
|
+
return {
|
|
33
|
+
iconType: 'svg'
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
computed: {
|
|
37
|
+
// 核心修改:将 图片资源 地址替换为 远程 地址(远程 CDN 存放 PNG、SVG 遮罩)
|
|
38
|
+
maskIconUrl() {
|
|
39
|
+
// 远程 CDN 根地址(可抽离为全局常量)
|
|
40
|
+
const cdnBase = 'https://10ui.cn/icons';
|
|
41
|
+
let processedName = this.name || '';
|
|
42
|
+
let iconPath = '';
|
|
43
|
+
|
|
44
|
+
// 步骤1:驼峰命名转连字符分隔(核心:匹配大写字母,添加前置-后转小写)
|
|
45
|
+
// 正则说明:
|
|
46
|
+
// [A-Z] 匹配所有大写字母(驼峰的标识)
|
|
47
|
+
// 替换为:'-' + 匹配到的大写字母(后续步骤2统一转小写,此处可先转小写也可后转)
|
|
48
|
+
processedName = processedName.replace(/([A-Z])/g, (match) => `-${match.toLowerCase()}`);
|
|
49
|
+
// 处理特殊情况:若字符串以-开头(如原名称以大写字母开头,如 Avatar → -avatar),去除首尾多余-
|
|
50
|
+
processedName = processedName.replace(/^-|-$/g, '');
|
|
51
|
+
|
|
52
|
+
// 步骤2:全部转换为小写(兼容混合大小写场景,如 avatar-Filled → avatar-filled)
|
|
53
|
+
processedName = processedName.toLowerCase().trim();
|
|
54
|
+
|
|
55
|
+
// 步骤3:定义正则,匹配末尾的 -filled(确保是整体,不分割)
|
|
56
|
+
const filledSuffixReg = /-filled$/;
|
|
57
|
+
const isFilledSuffix = filledSuffixReg.test(processedName);
|
|
58
|
+
|
|
59
|
+
if (isFilledSuffix) {
|
|
60
|
+
// 情况A:末尾带 -filled,需要拆分非-filled部分,保留-filled为整体
|
|
61
|
+
// 步骤:先截取除了末尾-filled之外的字符串,再处理分割,最后拼接-filled
|
|
62
|
+
const withoutFilled = processedName.slice(0, processedName.lastIndexOf('-filled'));
|
|
63
|
+
if (withoutFilled) {
|
|
64
|
+
// 非-filled部分有内容(如 xxxx-avatar-filled → withoutFilled = xxxx-avatar)
|
|
65
|
+
// 对非-filled部分按-分割,过滤空元素后拼接为路径
|
|
66
|
+
const pathArr = withoutFilled.split('-').filter((item) => item.trim().length > 0);
|
|
67
|
+
// 拼接:非-filled部分路径 + / + filled整体(如 xxxx/avatar + / + filled → xxxx/avatar-filled)
|
|
68
|
+
iconPath = `${pathArr.join('/')}-filled`;
|
|
69
|
+
} else {
|
|
70
|
+
// 非-filled部分无内容(如直接是 avatar-filled → withoutFilled 为空)
|
|
71
|
+
iconPath = processedName; // 直接使用整体,如 avatar-filled
|
|
72
|
+
}
|
|
73
|
+
} else {
|
|
74
|
+
// 情况B:末尾不带 -filled,正常按-分割拼接
|
|
75
|
+
if (processedName.includes('-')) {
|
|
76
|
+
const pathArr = processedName.split('-').filter((item) => item.trim().length > 0);
|
|
77
|
+
iconPath = pathArr.join('/');
|
|
78
|
+
} else {
|
|
79
|
+
iconPath = processedName;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// 处理 iconType,兼容大小写+默认值(保留原有逻辑)
|
|
84
|
+
const targetIconType = this.iconType?.toLowerCase() || 'png';
|
|
85
|
+
|
|
86
|
+
// 拼接最终 URL
|
|
87
|
+
switch (targetIconType) {
|
|
88
|
+
case 'svg':
|
|
89
|
+
return `${cdnBase}/${iconPath}.svg`;
|
|
90
|
+
case 'png':
|
|
91
|
+
return `${cdnBase}/png/${iconPath}.png`;
|
|
92
|
+
default:
|
|
93
|
+
return `${cdnBase}/png/${iconPath}.png`;
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
// 处理图标大小
|
|
97
|
+
iconSize() {
|
|
98
|
+
if (typeof this.size === 'string' && (this.size.includes('px') || this.size.includes('rpx'))) {
|
|
99
|
+
return this.size;
|
|
100
|
+
}
|
|
101
|
+
return `${parseFloat(this.size)}px`;
|
|
102
|
+
},
|
|
103
|
+
// 核心样式:mask-image + 背景色(控制颜色)
|
|
104
|
+
iconStyle() {
|
|
105
|
+
const baseStyle = {
|
|
106
|
+
// 图标大小:宽高一致
|
|
107
|
+
width: this.iconSize,
|
|
108
|
+
height: this.iconSize,
|
|
109
|
+
// 图标颜色:通过背景色控制(精准无偏差)
|
|
110
|
+
backgroundColor: this.color,
|
|
111
|
+
// 遮罩层: 引用远程 图片,保留 -webkit- 前缀兼容小程序
|
|
112
|
+
WebkitMaskImage: `url(${this.maskIconUrl})`,
|
|
113
|
+
maskImage: `url(${this.maskIconUrl})`,
|
|
114
|
+
// 遮罩属性: 保持形状完整,不拉伸
|
|
115
|
+
WebkitMaskSize: 'contain',
|
|
116
|
+
maskSize: 'contain',
|
|
117
|
+
WebkitMaskRepeat: 'no-repeat',
|
|
118
|
+
maskRepeat: 'no-repeat',
|
|
119
|
+
WebkitMaskPosition: 'center',
|
|
120
|
+
maskPosition: 'center'
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// 悬浮过渡效果
|
|
124
|
+
if (this.hoverEffect) {
|
|
125
|
+
baseStyle.transition = 'background-color 0.2s ease';
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return baseStyle;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view @touchmove.stop.prevent>
|
|
3
|
-
<view class="
|
|
4
|
-
<view class="
|
|
3
|
+
<view class="up-actionsheet" :class="{ 'up-actionsheet-show': show, 'up-actionsheet-radius': radius }">
|
|
4
|
+
<view class="up-actionsheet-tips" :style="{ fontSize: size + 'rpx', color: color }" v-if="tips">
|
|
5
5
|
{{ tips }}
|
|
6
6
|
</view>
|
|
7
|
-
<view :class="[isCancel ? '
|
|
7
|
+
<view :class="[isCancel ? 'up-operate-box' : '']">
|
|
8
8
|
<block v-for="(item, index) in itemList" :key="index">
|
|
9
9
|
<view
|
|
10
|
-
class="
|
|
11
|
-
:class="{ '
|
|
12
|
-
hover-class="
|
|
10
|
+
class="up-actionsheet-btn up-actionsheet-divider"
|
|
11
|
+
:class="{ 'up-btn-last': !isCancel && index == itemList.length - 1 }"
|
|
12
|
+
hover-class="up-actionsheet-hover"
|
|
13
13
|
:hover-stay-time="150"
|
|
14
14
|
:data-index="index"
|
|
15
15
|
:style="{ color: item.color || '#2B2B2B' }"
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
</block>
|
|
21
21
|
</view>
|
|
22
22
|
<view
|
|
23
|
-
class="
|
|
24
|
-
hover-class="
|
|
23
|
+
class="up-actionsheet-btn up-actionsheet-cancel"
|
|
24
|
+
hover-class="up-actionsheet-hover"
|
|
25
25
|
:hover-stay-time="150"
|
|
26
26
|
v-if="isCancel"
|
|
27
27
|
@tap="handleClickCancel"
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
取消
|
|
30
30
|
</view>
|
|
31
31
|
</view>
|
|
32
|
-
<view class="
|
|
32
|
+
<view class="up-actionsheet-mask" :class="{ 'up-mask-show': show }" @tap="handleClickMask"></view>
|
|
33
33
|
</view>
|
|
34
34
|
</template>
|
|
35
35
|
|
|
@@ -105,7 +105,7 @@ export default {
|
|
|
105
105
|
</script>
|
|
106
106
|
|
|
107
107
|
<style scoped>
|
|
108
|
-
.
|
|
108
|
+
.up-actionsheet {
|
|
109
109
|
width: 100%;
|
|
110
110
|
position: fixed;
|
|
111
111
|
left: 0;
|
|
@@ -120,18 +120,18 @@ export default {
|
|
|
120
120
|
min-height: 100rpx;
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
.
|
|
123
|
+
.up-actionsheet-radius {
|
|
124
124
|
border-top-left-radius: 20rpx;
|
|
125
125
|
border-top-right-radius: 20rpx;
|
|
126
126
|
overflow: hidden;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
.
|
|
129
|
+
.up-actionsheet-show {
|
|
130
130
|
transform: translate3d(0, 0, 0);
|
|
131
131
|
visibility: visible;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
.
|
|
134
|
+
.up-actionsheet-tips {
|
|
135
135
|
width: 100%;
|
|
136
136
|
padding: 40rpx 60rpx;
|
|
137
137
|
box-sizing: border-box;
|
|
@@ -142,11 +142,11 @@ export default {
|
|
|
142
142
|
justify-content: center;
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
.
|
|
145
|
+
.up-operate-box {
|
|
146
146
|
padding-bottom: 12rpx;
|
|
147
147
|
}
|
|
148
148
|
|
|
149
|
-
.
|
|
149
|
+
.up-actionsheet-btn {
|
|
150
150
|
width: 100%;
|
|
151
151
|
height: 100rpx;
|
|
152
152
|
background-color: #fff;
|
|
@@ -158,11 +158,11 @@ export default {
|
|
|
158
158
|
position: relative;
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
-
.
|
|
161
|
+
.up-btn-last {
|
|
162
162
|
padding-bottom: env(safe-area-inset-bottom);
|
|
163
163
|
}
|
|
164
164
|
|
|
165
|
-
.
|
|
165
|
+
.up-actionsheet-divider::before {
|
|
166
166
|
content: '';
|
|
167
167
|
width: 100%;
|
|
168
168
|
border-top: 1rpx solid #e7e7e7;
|
|
@@ -173,16 +173,16 @@ export default {
|
|
|
173
173
|
transform: scaleY(0.5);
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
.
|
|
176
|
+
.up-actionsheet-cancel {
|
|
177
177
|
color: #1a1a1a;
|
|
178
178
|
padding-bottom: env(safe-area-inset-bottom);
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
.
|
|
181
|
+
.up-actionsheet-hover {
|
|
182
182
|
background-color: #f7f7f9;
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
-
.
|
|
185
|
+
.up-actionsheet-mask {
|
|
186
186
|
position: fixed;
|
|
187
187
|
top: 0;
|
|
188
188
|
left: 0;
|
|
@@ -195,7 +195,7 @@ export default {
|
|
|
195
195
|
visibility: hidden;
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
.
|
|
198
|
+
.up-mask-show {
|
|
199
199
|
opacity: 1;
|
|
200
200
|
visibility: visible;
|
|
201
201
|
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view>
|
|
3
|
-
<view class="
|
|
4
|
-
<view class="
|
|
3
|
+
<view class="up-alert-class up-alert-box" :class="[show ? 'up-alert-show' : '']">
|
|
4
|
+
<view class="up-alert-content" :style="{ fontSize: size + 'rpx', color: color }">
|
|
5
5
|
<slot></slot>
|
|
6
6
|
</view>
|
|
7
7
|
<view
|
|
8
|
-
class="
|
|
8
|
+
class="up-alert-btn"
|
|
9
9
|
:style="{ color: btnColor }"
|
|
10
|
-
hover-class="
|
|
10
|
+
hover-class="up-alert-btn-hover"
|
|
11
11
|
:hover-stay-time="150"
|
|
12
12
|
@tap.stop="handleClick"
|
|
13
13
|
>
|
|
14
14
|
{{ btnText }}
|
|
15
15
|
</view>
|
|
16
16
|
</view>
|
|
17
|
-
<view class="
|
|
17
|
+
<view class="up-alert-mask" :class="[show ? 'up-alert-mask-show' : '']" @tap.stop="handleClickCancel"></view>
|
|
18
18
|
</view>
|
|
19
19
|
</template>
|
|
20
20
|
|
|
@@ -66,7 +66,7 @@ export default {
|
|
|
66
66
|
</script>
|
|
67
67
|
|
|
68
68
|
<style scoped>
|
|
69
|
-
.
|
|
69
|
+
.up-alert-box {
|
|
70
70
|
position: fixed;
|
|
71
71
|
width: 560rpx;
|
|
72
72
|
left: 50%;
|
|
@@ -80,12 +80,12 @@ export default {
|
|
|
80
80
|
z-index: 99998;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
.
|
|
83
|
+
.up-alert-show {
|
|
84
84
|
transform: translate(-50%, -50%) scale(1);
|
|
85
85
|
opacity: 1;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
.
|
|
88
|
+
.up-alert-mask {
|
|
89
89
|
position: fixed;
|
|
90
90
|
top: 0;
|
|
91
91
|
left: 0;
|
|
@@ -98,12 +98,12 @@ export default {
|
|
|
98
98
|
visibility: hidden;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
.
|
|
101
|
+
.up-alert-mask-show {
|
|
102
102
|
visibility: visible;
|
|
103
103
|
opacity: 1;
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
.
|
|
106
|
+
.up-alert-content {
|
|
107
107
|
text-align: center;
|
|
108
108
|
color: #333333;
|
|
109
109
|
padding: 98rpx 48rpx 92rpx 48rpx;
|
|
@@ -111,7 +111,7 @@ export default {
|
|
|
111
111
|
word-break: break-all;
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
.
|
|
114
|
+
.up-alert-btn {
|
|
115
115
|
width: 100%;
|
|
116
116
|
height: 90rpx;
|
|
117
117
|
display: flex;
|
|
@@ -124,11 +124,11 @@ export default {
|
|
|
124
124
|
line-height: 32rpx;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
.
|
|
127
|
+
.up-alert-btn-hover {
|
|
128
128
|
background-color: #f7f7f7;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
.
|
|
131
|
+
.up-alert-btn::before {
|
|
132
132
|
width: 100%;
|
|
133
133
|
content: '';
|
|
134
134
|
position: absolute;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view
|
|
3
|
-
:class="[dot ? '
|
|
3
|
+
:class="[dot ? 'up-badge-dot' : 'up-badge', 'up-' + type, !dot ? 'up-badge-scale' : '']"
|
|
4
4
|
:style="{ top: top, right: right, position: absolute ? 'absolute' : 'static', transform: getStyle, margin: margin }"
|
|
5
5
|
@tap="handleClick"
|
|
6
6
|
>
|
|
@@ -66,62 +66,62 @@ export default {
|
|
|
66
66
|
<style scoped>
|
|
67
67
|
/* color start*/
|
|
68
68
|
|
|
69
|
-
.
|
|
69
|
+
.up-primary {
|
|
70
70
|
background-color: #5677fc;
|
|
71
71
|
color: #fff;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
.
|
|
74
|
+
.up-danger {
|
|
75
75
|
background-color: #ed3f14;
|
|
76
76
|
color: #fff;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
.
|
|
79
|
+
.up-red {
|
|
80
80
|
background-color: #f74d54;
|
|
81
81
|
color: #fff;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
.
|
|
84
|
+
.up-warning {
|
|
85
85
|
background-color: #ff7900;
|
|
86
86
|
color: #fff;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
.
|
|
89
|
+
.up-green {
|
|
90
90
|
background-color: #19be6b;
|
|
91
91
|
color: #fff;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
.
|
|
94
|
+
.up-white {
|
|
95
95
|
background-color: #fff;
|
|
96
96
|
color: #333;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
.
|
|
99
|
+
.up-white_red {
|
|
100
100
|
background-color: #fff;
|
|
101
101
|
color: #f74d54;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
.
|
|
104
|
+
.up-white_primary {
|
|
105
105
|
background-color: #fff;
|
|
106
106
|
color: #5677fc;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
.
|
|
109
|
+
.up-white_green {
|
|
110
110
|
background-color: #fff;
|
|
111
111
|
color: #19be6b;
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
.
|
|
114
|
+
.up-white_warning {
|
|
115
115
|
background-color: #fff;
|
|
116
116
|
color: #ff7900;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
.
|
|
119
|
+
.up-black {
|
|
120
120
|
background-color: #000;
|
|
121
121
|
color: #fff;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
.
|
|
124
|
+
.up-gray {
|
|
125
125
|
background-color: #ededed;
|
|
126
126
|
color: #999;
|
|
127
127
|
}
|
|
@@ -130,13 +130,13 @@ export default {
|
|
|
130
130
|
|
|
131
131
|
/* badge start*/
|
|
132
132
|
|
|
133
|
-
.
|
|
133
|
+
.up-badge-dot {
|
|
134
134
|
height: 8px;
|
|
135
135
|
width: 8px;
|
|
136
136
|
border-radius: 50%;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
.
|
|
139
|
+
.up-badge {
|
|
140
140
|
font-size: 24rpx;
|
|
141
141
|
line-height: 24rpx;
|
|
142
142
|
height: 36rpx;
|
|
@@ -150,7 +150,7 @@ export default {
|
|
|
150
150
|
z-index: 10;
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
.
|
|
153
|
+
.up-badge-scale {
|
|
154
154
|
transform-origin: center center;
|
|
155
155
|
}
|
|
156
156
|
|