@hlw-uni/mp-vue 2.1.39 → 2.1.51

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.
@@ -7,7 +7,8 @@ export declare const THEME_CHANGE_EVENT = "hlw:theme-change";
7
7
  /**
8
8
  * 只注入会随主题变化的变量(字号档位、主题色、外观模式)。
9
9
  *
10
- * 语义排版 token(--text-title-size 等)是静态值、不随主题变化,
10
+ * 语义排版 token(--text-title-size 等)和业务视觉变量(如边框色)
11
+ * 是静态值、不随主题变化,
11
12
  * 放在项目的全局 CSS(static/css/style.scss)里作为 page{} 默认值即可,
12
13
  * 让业务侧可以自由 override,不被运行时注入覆盖。
13
14
  */
package/dist/index.js CHANGED
@@ -1485,12 +1485,22 @@ var __publicField = (obj, key, value) => {
1485
1485
  return vars;
1486
1486
  }
1487
1487
  const { varsToStyle } = useColor();
1488
+ const CSS_CONTROLLED_THEME_VARS = /* @__PURE__ */ new Set(["--border-color", "--border-color-light", "--border-color-focus"]);
1488
1489
  const THEME_CHANGE_EVENT = "hlw:theme-change";
1490
+ function omitCssControlledThemeVars(vars) {
1491
+ const next = {};
1492
+ Object.entries(vars).forEach(([name, value]) => {
1493
+ if (!CSS_CONTROLLED_THEME_VARS.has(name)) {
1494
+ next[name] = value;
1495
+ }
1496
+ });
1497
+ return next;
1498
+ }
1489
1499
  function buildThemeStyle() {
1490
1500
  return varsToStyle({
1491
1501
  ...getCurrentFontVars(),
1492
1502
  ...getCurrentThemeVars(),
1493
- ...getCurrentAppearanceVars()
1503
+ ...omitCssControlledThemeVars(getCurrentAppearanceVars())
1494
1504
  });
1495
1505
  }
1496
1506
  function useThemePageStyle() {
package/dist/index.mjs CHANGED
@@ -1484,12 +1484,22 @@ function getCurrentTypographyVars() {
1484
1484
  return vars;
1485
1485
  }
1486
1486
  const { varsToStyle } = useColor();
1487
+ const CSS_CONTROLLED_THEME_VARS = /* @__PURE__ */ new Set(["--border-color", "--border-color-light", "--border-color-focus"]);
1487
1488
  const THEME_CHANGE_EVENT = "hlw:theme-change";
1489
+ function omitCssControlledThemeVars(vars) {
1490
+ const next = {};
1491
+ Object.entries(vars).forEach(([name, value]) => {
1492
+ if (!CSS_CONTROLLED_THEME_VARS.has(name)) {
1493
+ next[name] = value;
1494
+ }
1495
+ });
1496
+ return next;
1497
+ }
1488
1498
  function buildThemeStyle() {
1489
1499
  return varsToStyle({
1490
1500
  ...getCurrentFontVars(),
1491
1501
  ...getCurrentThemeVars(),
1492
- ...getCurrentAppearanceVars()
1502
+ ...omitCssControlledThemeVars(getCurrentAppearanceVars())
1493
1503
  });
1494
1504
  }
1495
1505
  function useThemePageStyle() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hlw-uni/mp-vue",
3
- "version": "2.1.39",
3
+ "version": "2.1.51",
4
4
  "description": "hlw-uni 小程序运行时 — Vue 组件 + composables + theme + http + 工具集(合并自原 mp-core)",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -0,0 +1,17 @@
1
+ #添加小程序指引,可适配自定义导航栏
2
+
3
+ | 参数 | 说明 | 类型 | 默认值 | 其他 |
4
+ | :---- | :---- | :---- | :---- | :---- |
5
+ | navigationStyle | 顶部导航栏样式 | String | default | 可选值 custom |
6
+
7
+ #case
8
+ # 作者:douyin0516
9
+ ```vue
10
+ <template>
11
+ <view>
12
+ <hlw-add-mini :show="show" @close="close" />
13
+ </view>
14
+ </template>
15
+
16
+
17
+ ```
@@ -0,0 +1,110 @@
1
+ <template>
2
+ <view v-if="props.show" class="box" :style="{ top }">
3
+ <image class="close" :src="close_icon" @click="close" />
4
+ <view class="fs_12">
5
+ <view class="">点击右上方“···”</view>
6
+ <view class="">选择“添加到我的小程序”</view>
7
+ </view>
8
+ <image class="image" mode="widthfix" :src="add_miniprogram" />
9
+ <view class="fs_12">
10
+ <view class="">回到微信首页</view>
11
+ <view class="">向下拉动便可查看</view>
12
+ </view>
13
+ </view>
14
+ </template>
15
+
16
+ <script setup lang="ts">
17
+ import { computed } from "vue";
18
+
19
+ defineOptions({ name: "HlwAddMini" });
20
+
21
+ interface Props {
22
+ show?: boolean;
23
+ navigationStyle?: "default" | "custom";
24
+ }
25
+
26
+ const props = withDefaults(defineProps<Props>(), {
27
+ show: false,
28
+ navigationStyle: "default",
29
+ });
30
+
31
+ const emit = defineEmits<{ close: [] }>();
32
+
33
+ const assets = {
34
+ add_miniprogram:
35
+ 'data:image/png;base64,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',
36
+ close_icon:
37
+ 'data:image/png;base64,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',
38
+ };
39
+
40
+ const add_miniprogram = assets.add_miniprogram;
41
+ const close_icon = assets.close_icon;
42
+
43
+ const top = computed(() =>
44
+ props.navigationStyle === "custom" ? `${uni.getSystemInfoSync().statusBarHeight + 50}px` : "6px"
45
+ );
46
+
47
+ function close() {
48
+ emit("close");
49
+ }
50
+ </script>
51
+
52
+ <style lang="scss" scoped>
53
+ .box {
54
+ width: 388rpx;
55
+ height: 460rpx;
56
+ padding: 60rpx 30rpx 40rpx;
57
+ box-sizing: border-box;
58
+ background: rgba(31, 31, 31, 0.9);
59
+ color: #fff;
60
+ text-align: center;
61
+ font-size: 24rpx;
62
+ border-radius: 24rpx;
63
+ position: fixed;
64
+ right: 16px;
65
+ z-index: 32;
66
+ letter-spacing: 0.5px;
67
+ opacity: 0;
68
+ animation: float 0.5s ease forwards;
69
+
70
+ .fs_12 {
71
+ display: flex;
72
+ flex-direction: column;
73
+ gap: 10rpx;
74
+ }
75
+
76
+ &:before {
77
+ position: absolute;
78
+ content: '';
79
+ width: 0;
80
+ height: 0;
81
+ right: 52px;
82
+ top: -28rpx;
83
+ border: 14rpx solid transparent;
84
+ border-bottom: 20rpx solid #333;
85
+ }
86
+ .image {
87
+ margin: 30rpx 0;
88
+ width: 320rpx;
89
+ height: 160rpx;
90
+ border-radius: 8rpx;
91
+ }
92
+ .close {
93
+ position: absolute;
94
+ left: 20rpx;
95
+ top: 20rpx;
96
+ z-index: 2;
97
+ width: 44rpx;
98
+ height: 44rpx;
99
+ }
100
+ }
101
+ @keyframes float {
102
+ 0% {
103
+ opacity: 0;
104
+ }
105
+
106
+ 100% {
107
+ opacity: 1;
108
+ }
109
+ }
110
+ </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <view :class="`hlw-avatar hlw-avatar--${size ?? 'medium'}`">
2
+ <view :class="`hlw-avatar hlw-avatar--${size ?? 'medium'}`" :style="avatarStyle">
3
3
  <image
4
4
  v-if="src && !loadError"
5
5
  class="hlw-avatar__image"
@@ -23,6 +23,7 @@
23
23
  * src - 头像图片地址
24
24
  * name - 用户名称,用于提取首字母(图片缺失时显示)
25
25
  * size - 尺寸:small(56rpx) / medium(80rpx) / large(120rpx),默认 medium
26
+ * border - 边框宽度,单位 px;0 为无边框,默认 0
26
27
  *
27
28
  * @example
28
29
  * ```vue
@@ -35,9 +36,16 @@ const props = defineProps<{
35
36
  src?: string;
36
37
  name?: string;
37
38
  size?: 'small' | 'medium' | 'large';
39
+ border?: number;
38
40
  }>();
39
41
 
40
42
  const loadError = ref(false);
43
+ const avatarStyle = computed(() => {
44
+ const border = Math.max(0, Number(props.border ?? 0));
45
+ return {
46
+ border: border > 0 ? `${border}px solid #fff` : '0',
47
+ };
48
+ });
41
49
  const initial = computed(() => {
42
50
  if (!props.name) return '?';
43
51
  return props.name.charAt(0).toUpperCase();
@@ -46,6 +54,7 @@ const initial = computed(() => {
46
54
 
47
55
  <style scoped>
48
56
  .hlw-avatar {
57
+ box-sizing: border-box;
49
58
  border-radius: 50%;
50
59
  overflow: hidden;
51
60
  flex-shrink: 0;
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <view class="hlw-page">
2
+ <view :class="['hlw-page', attrs.class]" :style="attrs.style">
3
3
  <view class="hlw-page-header">
4
4
  <slot name="header">
5
5
  <hlw-header
@@ -43,7 +43,7 @@
43
43
  * - scrollToTop(): void 滚动到顶部(带动画)
44
44
  */
45
45
 
46
- import { nextTick, provide, ref } from "vue";
46
+ import { nextTick, provide, ref, useAttrs } from "vue";
47
47
 
48
48
  defineOptions({
49
49
  name: "HlwPage",
@@ -73,6 +73,7 @@ const props = withDefaults(defineProps<Props>(), {
73
73
  bodyClass: "",
74
74
  bodyStyle: "",
75
75
  });
76
+ const attrs = useAttrs();
76
77
 
77
78
  const scrollTop = ref(0);
78
79
  const scrollTo = ref(0);
@@ -102,7 +103,6 @@ provide("hlwPageScroll", {
102
103
  display: flex;
103
104
  flex-direction: column;
104
105
  overflow: hidden;
105
- background: var(--bg-page, #f6f6f6);
106
106
  color: var(--text-primary, #0f172a);
107
107
  }
108
108
 
@@ -7,16 +7,31 @@ import { getCurrentFontVars } from "./font";
7
7
  import { getCurrentThemeVars } from "./palette";
8
8
  import { getCurrentAppearanceVars } from "./appearance";
9
9
 
10
+ const CSS_CONTROLLED_THEME_VARS = new Set(["--border-color", "--border-color-light", "--border-color-focus"]);
11
+
10
12
  /**
11
13
  * @deprecated 历史事件名;现已改用 pinia store 响应式驱动,emit 不再有效。
12
14
  * 保留 export 仅为不破坏外部 import(不影响功能)。
13
15
  */
14
16
  export const THEME_CHANGE_EVENT = "hlw:theme-change";
15
17
 
18
+ function omitCssControlledThemeVars(vars: Record<string, string>) {
19
+ const next: Record<string, string> = {};
20
+
21
+ Object.entries(vars).forEach(([name, value]) => {
22
+ if (!CSS_CONTROLLED_THEME_VARS.has(name)) {
23
+ next[name] = value;
24
+ }
25
+ });
26
+
27
+ return next;
28
+ }
29
+
16
30
  /**
17
31
  * 只注入会随主题变化的变量(字号档位、主题色、外观模式)。
18
32
  *
19
- * 语义排版 token(--text-title-size 等)是静态值、不随主题变化,
33
+ * 语义排版 token(--text-title-size 等)和业务视觉变量(如边框色)
34
+ * 是静态值、不随主题变化,
20
35
  * 放在项目的全局 CSS(static/css/style.scss)里作为 page{} 默认值即可,
21
36
  * 让业务侧可以自由 override,不被运行时注入覆盖。
22
37
  */
@@ -24,7 +39,7 @@ export function buildThemeStyle(): string {
24
39
  return varsToStyle({
25
40
  ...getCurrentFontVars(),
26
41
  ...getCurrentThemeVars(),
27
- ...getCurrentAppearanceVars(),
42
+ ...omitCssControlledThemeVars(getCurrentAppearanceVars()),
28
43
  });
29
44
  }
30
45