@hlw-uni/mp-vue 1.1.18 → 1.1.19

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.
@@ -50,4 +50,38 @@ export interface HlwMenuItem {
50
50
  * @default true
51
51
  */
52
52
  visible?: boolean;
53
+ /**
54
+ * 微信小程序 `<button open-type>` 能力。设置后菜单项用 `<button>` 渲染,
55
+ * 支持触发客服会话、获取手机号、分享等原生能力。
56
+ *
57
+ * 常用值:
58
+ * - `contact` — 打开客服会话(需在后台配置客服)
59
+ * - `share` — 触发分享
60
+ * - `getPhoneNumber` — 获取手机号
61
+ * - `launchApp` — 打开 App(仅 App 内)
62
+ *
63
+ * 参考:https://developers.weixin.qq.com/miniprogram/dev/component/button.html
64
+ */
65
+ openType?: string;
66
+ /**
67
+ * 会话来源,`openType="contact"` 时有效。
68
+ */
69
+ sessionFrom?: string;
70
+ /**
71
+ * 会话内消息卡片标题,`openType="contact"` 时有效。
72
+ */
73
+ sendMessageTitle?: string;
74
+ /**
75
+ * 会话内消息卡片点击跳转小程序路径,`openType="contact"` 时有效。
76
+ */
77
+ sendMessagePath?: string;
78
+ /**
79
+ * 会话内消息卡片图片,`openType="contact"` 时有效。
80
+ */
81
+ sendMessageImg?: string;
82
+ /**
83
+ * 是否显示会话内消息卡片,`openType="contact"` 时有效。
84
+ * @default false
85
+ */
86
+ showMessageCard?: boolean;
53
87
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hlw-uni/mp-vue",
3
- "version": "1.1.18",
3
+ "version": "1.1.19",
4
4
  "description": "hlw-uni Vue 组件库 — 供小程序业务方使用的 UI 组件集合",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -23,6 +23,34 @@
23
23
  </view>
24
24
  </navigator>
25
25
 
26
+ <button
27
+ v-else-if="item.openType"
28
+ class="hlw-menu-item hlw-menu-item-btn"
29
+ hover-class="hlw-menu-item--active"
30
+ :open-type="item.openType"
31
+ :session-from="item.sessionFrom"
32
+ :send-message-title="item.sendMessageTitle"
33
+ :send-message-path="item.sendMessagePath"
34
+ :send-message-img="item.sendMessageImg"
35
+ :show-message-card="item.showMessageCard"
36
+ @click="handleClick(item)"
37
+ @contact="handleContact(item, $event)"
38
+ @getphonenumber="handleGetPhoneNumber(item, $event)"
39
+ >
40
+ <view class="hlw-menu-left">
41
+ <view class="hlw-menu-icon" :class="`hlw-menu-icon--${item.iconTheme || 'slate'}`">
42
+ <text :class="item.icon"></text>
43
+ </view>
44
+ <text class="hlw-menu-label">{{ item.label }}</text>
45
+ </view>
46
+ <view class="hlw-menu-right">
47
+ <text v-if="item.loading" class="i-fa6-solid-circle-notch hlw-menu-spin hlw-menu-muted"></text>
48
+ <text v-if="item.value" class="hlw-menu-value">{{ item.value }}</text>
49
+ <text v-if="item.tag" class="hlw-menu-tag" :class="[`hlw-menu-tag--${item.tagTheme || 'rose'}`, item.tagPulse ? 'hlw-menu-tag-pulse' : '']">{{ item.tag }}</text>
50
+ <text class="i-fa6-solid-chevron-right hlw-menu-arrow"></text>
51
+ </view>
52
+ </button>
53
+
26
54
  <view v-else class="hlw-menu-item" hover-class="hlw-menu-item--active" @click="handleClick(item)">
27
55
  <view class="hlw-menu-left">
28
56
  <view class="hlw-menu-icon" :class="`hlw-menu-icon--${item.iconTheme || 'slate'}`">
@@ -141,6 +169,14 @@ const emit = defineEmits<{
141
169
  * @param item 被点击的菜单项
142
170
  */
143
171
  click: [item: HlwMenuItem];
172
+ /**
173
+ * `openType="contact"` 的菜单项,打开客服会话时触发。
174
+ */
175
+ contact: [item: HlwMenuItem, event: unknown];
176
+ /**
177
+ * `openType="getPhoneNumber"` 的菜单项,获取手机号回调时触发。
178
+ */
179
+ getphonenumber: [item: HlwMenuItem, event: unknown];
144
180
  }>();
145
181
 
146
182
  const visibleItems = computed(() => props.items.filter((item) => item.visible !== false));
@@ -148,6 +184,14 @@ const visibleItems = computed(() => props.items.filter((item) => item.visible !=
148
184
  const handleClick = (item: HlwMenuItem) => {
149
185
  emit("click", item);
150
186
  };
187
+
188
+ const handleContact = (item: HlwMenuItem, event: unknown) => {
189
+ emit("contact", item, event);
190
+ };
191
+
192
+ const handleGetPhoneNumber = (item: HlwMenuItem, event: unknown) => {
193
+ emit("getphonenumber", item, event);
194
+ };
151
195
  </script>
152
196
 
153
197
  <style lang="scss" scoped>
@@ -195,6 +239,23 @@ const handleClick = (item: HlwMenuItem) => {
195
239
  }
196
240
  }
197
241
 
242
+ /* open-type button 模式:去除微信 button 原生样式 */
243
+ .hlw-menu-item-btn {
244
+ width: 100%;
245
+ margin: 0;
246
+ padding: 24rpx 32rpx;
247
+ background: transparent;
248
+ color: inherit;
249
+ font-size: inherit;
250
+ line-height: inherit;
251
+ border-radius: 0;
252
+ text-align: left;
253
+
254
+ &::after {
255
+ border: none;
256
+ }
257
+ }
258
+
198
259
  .hlw-menu-divider {
199
260
  margin: 0 32rpx;
200
261
  height: 0;
@@ -52,4 +52,38 @@ export interface HlwMenuItem {
52
52
  * @default true
53
53
  */
54
54
  visible?: boolean;
55
+ /**
56
+ * 微信小程序 `<button open-type>` 能力。设置后菜单项用 `<button>` 渲染,
57
+ * 支持触发客服会话、获取手机号、分享等原生能力。
58
+ *
59
+ * 常用值:
60
+ * - `contact` — 打开客服会话(需在后台配置客服)
61
+ * - `share` — 触发分享
62
+ * - `getPhoneNumber` — 获取手机号
63
+ * - `launchApp` — 打开 App(仅 App 内)
64
+ *
65
+ * 参考:https://developers.weixin.qq.com/miniprogram/dev/component/button.html
66
+ */
67
+ openType?: string;
68
+ /**
69
+ * 会话来源,`openType="contact"` 时有效。
70
+ */
71
+ sessionFrom?: string;
72
+ /**
73
+ * 会话内消息卡片标题,`openType="contact"` 时有效。
74
+ */
75
+ sendMessageTitle?: string;
76
+ /**
77
+ * 会话内消息卡片点击跳转小程序路径,`openType="contact"` 时有效。
78
+ */
79
+ sendMessagePath?: string;
80
+ /**
81
+ * 会话内消息卡片图片,`openType="contact"` 时有效。
82
+ */
83
+ sendMessageImg?: string;
84
+ /**
85
+ * 是否显示会话内消息卡片,`openType="contact"` 时有效。
86
+ * @default false
87
+ */
88
+ showMessageCard?: boolean;
55
89
  }