@hlw-uni/mp-vue 2.1.70 → 2.1.97
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/README.md +230 -386
- package/dist/app.d.ts +1 -1
- package/dist/core/index.d.ts +3 -0
- package/dist/core/{theme.d.ts → theme/index.d.ts} +6 -1
- package/dist/hlw.d.ts +1 -10
- package/dist/index.d.ts +2 -2
- package/dist/index.js +834 -804
- package/dist/index.mjs +836 -806
- package/dist/utils/ad/index.d.ts +61 -0
- package/dist/{composables/utils → utils/common}/index.d.ts +1 -24
- package/dist/{composables → utils}/device/index.d.ts +7 -8
- package/dist/utils/index.d.ts +5 -0
- package/dist/{composables → utils}/navigator/index.d.ts +14 -30
- package/dist/{composables → utils}/request/client.d.ts +2 -8
- package/dist/{composables → utils}/request/index.d.ts +1 -1
- package/dist/{composables → utils}/request/service.d.ts +2 -2
- package/package.json +1 -1
- package/src/app.ts +2 -2
- package/src/components/hlw-add-mini/README.md +56 -9
- package/src/components/hlw-add-mini/index.vue +12 -9
- package/src/components/hlw-avatar-upload/index.vue +103 -0
- package/src/components/hlw-back-top/index.vue +1 -1
- package/src/components/hlw-button/index.vue +5 -16
- package/src/components/hlw-canvas/index.vue +7 -7
- package/src/components/hlw-cell/index.vue +1 -1
- package/src/components/{hlw-custom/hlw-custom.vue → hlw-custom-service/hlw-custom-service.vue} +27 -15
- package/src/components/hlw-empty/index.vue +14 -0
- package/src/components/hlw-header/index.vue +1 -1
- package/src/components/hlw-menu/index.vue +40 -37
- package/src/components/hlw-nav-bar/index.vue +23 -8
- package/src/components/hlw-nickname/index.vue +185 -0
- package/src/components/hlw-notice-bar/index.vue +23 -0
- package/src/components/hlw-page/index.vue +19 -1
- package/src/components/hlw-paging/index.vue +36 -0
- package/src/components/hlw-popup/index.vue +23 -0
- package/src/components/hlw-reward-ad/index.vue +133 -0
- package/src/components/hlw-search/index.vue +25 -0
- package/src/components/hlw-sheet/index.vue +1 -1
- package/src/components/hlw-status-bar/index.vue +113 -0
- package/src/components/hlw-tag/index.vue +22 -0
- package/src/core/index.ts +3 -0
- package/src/{composables → core}/msg/index.ts +0 -1
- package/src/{composables → core}/refs/index.ts +0 -1
- package/src/core/theme/index.ts +115 -0
- package/src/hlw.ts +1 -21
- package/src/index.ts +3 -11
- package/src/utils/ad/README.md +114 -0
- package/src/utils/ad/index.ts +234 -0
- package/src/{composables/utils → utils/common}/index.ts +1 -27
- package/src/{composables → utils}/device/index.ts +13 -21
- package/src/utils/index.ts +5 -0
- package/src/{composables → utils}/navigator/index.ts +30 -31
- package/src/{composables → utils}/request/client.ts +3 -11
- package/src/{composables → utils}/request/index.ts +1 -1
- package/src/{composables → utils}/request/service.ts +5 -6
- package/src/{composables → utils}/request/types.ts +0 -1
- package/dist/composables/ad/index.d.ts +0 -42
- package/dist/composables/index.d.ts +0 -11
- package/src/composables/ad/README.md +0 -58
- package/src/composables/ad/index.ts +0 -227
- package/src/composables/device/README.md +0 -50
- package/src/composables/index.ts +0 -38
- package/src/composables/msg/README.md +0 -79
- package/src/composables/navigator/README.md +0 -71
- package/src/composables/refs/README.md +0 -40
- package/src/composables/request/README.md +0 -124
- package/src/composables/share/README.md +0 -53
- package/src/composables/utils/README.md +0 -81
- package/src/core/theme.ts +0 -62
- /package/dist/{composables → core}/msg/index.d.ts +0 -0
- /package/dist/{composables → core}/refs/index.d.ts +0 -0
- /package/dist/{composables → core}/share/index.d.ts +0 -0
- /package/dist/{composables → utils}/request/adapters/alist.d.ts +0 -0
- /package/dist/{composables → utils}/request/adapters/base.d.ts +0 -0
- /package/dist/{composables → utils}/request/adapters/cos.d.ts +0 -0
- /package/dist/{composables → utils}/request/adapters/index.d.ts +0 -0
- /package/dist/{composables → utils}/request/adapters/oss.d.ts +0 -0
- /package/dist/{composables → utils}/request/adapters/qiniu.d.ts +0 -0
- /package/dist/{composables → utils}/request/types.d.ts +0 -0
- /package/src/{composables → core}/share/index.ts +0 -0
- /package/src/{composables → utils}/request/adapters/alist.ts +0 -0
- /package/src/{composables → utils}/request/adapters/base.ts +0 -0
- /package/src/{composables → utils}/request/adapters/cos.ts +0 -0
- /package/src/{composables → utils}/request/adapters/index.ts +0 -0
- /package/src/{composables → utils}/request/adapters/oss.ts +0 -0
- /package/src/{composables → utils}/request/adapters/qiniu.ts +0 -0
package/README.md
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
# @hlw-uni/mp-vue
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<img src="https://img.shields.io/badge/version-2.1.59-blue.svg" alt="Version">
|
|
5
4
|
<img src="https://img.shields.io/badge/vue-3.x-emerald.svg" alt="Vue 3">
|
|
6
5
|
<img src="https://img.shields.io/badge/typescript-supported-blue.svg" alt="TypeScript">
|
|
7
6
|
<img src="https://img.shields.io/badge/platform-uni--app-red.svg" alt="uni-app">
|
|
8
7
|
</p>
|
|
9
8
|
|
|
10
9
|
> **hlw-uni 小程序运行时核心组件与工具包**
|
|
11
|
-
>
|
|
10
|
+
> 整合了核心 UI 组件库、全局个性化主题控制、高可用网络请求封装、Vue 核心 Hooks 以及常用无状态工具函数。
|
|
12
11
|
|
|
13
12
|
---
|
|
14
13
|
|
|
15
|
-
##
|
|
14
|
+
## ✨ 特性
|
|
16
15
|
|
|
17
|
-
-
|
|
18
|
-
- 📐
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- 🧩
|
|
22
|
-
- 🛠️
|
|
16
|
+
- 🚀 **响应式 & 声明式** — 全面拥抱 Vue 3 Composition API 与 `<script setup>`。
|
|
17
|
+
- 📐 **完全类型安全** — 100% 采用 TypeScript 编写,提供精确的类型推导与卓越的 IDE 自动补全。
|
|
18
|
+
- 🎨 **动态主题机制** — 基于 CSS 变量的极简主题管理,支持应用级与页面级动态刷新,自动更新系统导航栏配色。
|
|
19
|
+
- 🔗 **统一导出机制** — 统一通过 `@hlw-uni/mp-vue` 单一出口导出,无需零散引入,支持高效的 Tree-shaking。
|
|
20
|
+
- 🧩 **easycom 自动按需引入** — 完美融入 uni-app `easycom` 生态,UI 组件即写即用,零体积负担。
|
|
21
|
+
- 🛠️ **清晰的架构分离** — 严格划分 `core/`(有状态生命周期 Hooks)与 `utils/`(纯无状态静态工具函数),杜绝代码逻辑耦合。
|
|
23
22
|
|
|
24
23
|
---
|
|
25
24
|
|
|
@@ -29,18 +28,16 @@
|
|
|
29
28
|
|
|
30
29
|
```bash
|
|
31
30
|
pnpm add @hlw-uni/mp-vue
|
|
32
|
-
# 或者使用 npm / yarn
|
|
33
|
-
npm install @hlw-uni/mp-vue
|
|
34
31
|
```
|
|
35
32
|
|
|
36
33
|
> [!NOTE]
|
|
37
|
-
>
|
|
34
|
+
> **依赖项要求**
|
|
38
35
|
> - `vue >= 3.4.0`
|
|
39
|
-
> - `pinia >= 2.0.0` (
|
|
36
|
+
> - `pinia >= 2.0.0` (主题管理状态存储)
|
|
40
37
|
|
|
41
|
-
### 2.
|
|
38
|
+
### 2. pages.json 自动注册配置
|
|
42
39
|
|
|
43
|
-
在业务项目的 `pages.json` 中配置 `easycom`,即可在页面中直接使用 `hlw-`
|
|
40
|
+
在业务项目的 `pages.json` 中配置 `easycom`,即可在页面中直接使用 `hlw-` 开头的 UI 组件,**无需手动 import 注册**:
|
|
44
41
|
|
|
45
42
|
```json
|
|
46
43
|
{
|
|
@@ -58,500 +55,347 @@ npm install @hlw-uni/mp-vue
|
|
|
58
55
|
|
|
59
56
|
---
|
|
60
57
|
|
|
61
|
-
##
|
|
58
|
+
## 🧱 核心设计架构
|
|
62
59
|
|
|
63
|
-
|
|
60
|
+
类库严格区分为 **`core/`**(有状态,依赖 Vue 响应式与生命周期 API)与 **`utils/`**(纯无状态,提供命令式调用及内联支持)两大模块,并在包根目录统一导出:
|
|
64
61
|
|
|
65
|
-
在小程序的 `main.ts` 或 `main.js` 中收敛并初始化 Vue 实例:
|
|
66
|
-
|
|
67
|
-
```ts
|
|
68
|
-
import { useApp } from '@hlw-uni/mp-vue';
|
|
69
|
-
import { createPinia } from 'pinia';
|
|
70
|
-
import App from './App.vue';
|
|
71
|
-
|
|
72
|
-
const app = useApp();
|
|
73
|
-
|
|
74
|
-
// 注册插件
|
|
75
|
-
app.use(createPinia());
|
|
76
|
-
|
|
77
|
-
// 生成符合 uni-app 约定的 createApp 入口
|
|
78
|
-
export const createApp = app.install(App);
|
|
79
62
|
```
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
// 3. $request HTTP 客户端
|
|
95
|
-
const res = await hlw.$request.get("/config");
|
|
96
|
-
|
|
97
|
-
// 4. $utils 公共工具箱
|
|
98
|
-
hlw.$utils.copy("复制的文本");
|
|
63
|
+
mp-vue/src/
|
|
64
|
+
├── core/ # Vue 核心(有状态,依赖 Vue 响应式与生命周期 API)
|
|
65
|
+
│ ├── theme/ # 个性化主题与外观控制 (useTheme, initTheme)
|
|
66
|
+
│ ├── msg/ # 交互反馈 (useMsg, hlw.$msg)
|
|
67
|
+
│ ├── refs/ # 动态模板 Ref 集合收集 (useRefs)
|
|
68
|
+
│ └── share/ # 小程序页面分享控制 (useShare)
|
|
69
|
+
├── utils/ # 纯无状态工具集(无生命周期依赖,支持直接/内联调用)
|
|
70
|
+
│ ├── ad/ # 广告控制器 (setAdPopup, showAdPopup, setAdReward, showAdReward)
|
|
71
|
+
│ ├── common/ # 公共工具函数 (copy, paste, saveImageUrl, saveVideoUrl, download 等)
|
|
72
|
+
│ ├── navigator/ # 路由跳转 (navigate, navigateTo, redirectTo, switchTab, reLaunch, navigateBack, navigateToMiniProgram)
|
|
73
|
+
│ ├── device/ # 设备信息获取 (getDevice, getDeviceQuery, clearDeviceCache)
|
|
74
|
+
│ └── request/ # 全局网络请求 (request 单例, useUpload, BaseService 服务基类)
|
|
75
|
+
├── directives/ # 自定义指令 (vCopy 自动复制指令)
|
|
76
|
+
└── app.ts # 应用根上下文入口 (useApp)
|
|
99
77
|
```
|
|
100
78
|
|
|
101
79
|
---
|
|
102
80
|
|
|
103
|
-
## 🎨
|
|
81
|
+
## 🎨 核心模块 (`core/`)
|
|
104
82
|
|
|
105
|
-
`
|
|
83
|
+
### 1. 主题与外观管理 — `useTheme()` / `initTheme()`
|
|
106
84
|
|
|
107
|
-
|
|
85
|
+
提供小程序应用及页面层级的主题、字号、字体风格动态刷新能力,并可自动根据主题深浅调整系统导航栏/状态栏前景色(如 `mono-theme` 与 `color-theme` 自动设为白色前景色):
|
|
108
86
|
|
|
109
87
|
```vue
|
|
110
88
|
<script setup lang="ts">
|
|
111
|
-
import {
|
|
112
|
-
|
|
113
|
-
|
|
89
|
+
import { useTheme } from "@hlw-uni/mp-vue";
|
|
90
|
+
|
|
91
|
+
// 获取当前主题、字号类名、字体类名,以及设置函数
|
|
92
|
+
const {
|
|
93
|
+
theme,
|
|
94
|
+
fontSizeClass,
|
|
95
|
+
fontFamilyClass,
|
|
96
|
+
setFontSize,
|
|
97
|
+
setFontFamily
|
|
98
|
+
} = useTheme();
|
|
114
99
|
</script>
|
|
115
100
|
|
|
116
101
|
<template>
|
|
117
|
-
<!--
|
|
118
|
-
<hlw-page :
|
|
119
|
-
<view class="
|
|
102
|
+
<!-- 将主题相关 CSS Class 应用于页面最外层容器 -->
|
|
103
|
+
<hlw-page :class="[theme, fontSizeClass, fontFamilyClass]" title="主题设置">
|
|
104
|
+
<view class="content">
|
|
105
|
+
<text class="text-demo">当前正使用个性化外观配置</text>
|
|
106
|
+
<button @tap="setFontSize('large')">放大字体</button>
|
|
107
|
+
</view>
|
|
120
108
|
</hlw-page>
|
|
121
109
|
</template>
|
|
122
|
-
|
|
123
|
-
<style scoped lang="scss">
|
|
124
|
-
.demo-card {
|
|
125
|
-
color: var(--primary-color);
|
|
126
|
-
background: var(--primary-light);
|
|
127
|
-
font-size: var(--font-base);
|
|
128
|
-
border-radius: var(--radius-md);
|
|
129
|
-
}
|
|
130
|
-
</style>
|
|
131
110
|
```
|
|
132
111
|
|
|
133
|
-
|
|
112
|
+
在 `App.vue` 初始化阶段,可以使用 `initTheme()` 设定初始主题:
|
|
134
113
|
|
|
135
|
-
|
|
114
|
+
```ts
|
|
115
|
+
import { initTheme } from "@hlw-uni/mp-vue";
|
|
136
116
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
import { computed } from "vue";
|
|
140
|
-
import { useThemePageStyle } from "@hlw-uni/mp-vue";
|
|
141
|
-
import { useThemeStore } from "@/store";
|
|
142
|
-
|
|
143
|
-
const { themePageStyle } = useThemePageStyle();
|
|
144
|
-
const themeStore = useThemeStore();
|
|
145
|
-
|
|
146
|
-
const pageStyle = computed(() => {
|
|
147
|
-
return [
|
|
148
|
-
themePageStyle.value,
|
|
149
|
-
`--page-bg: ${themeStore.primaryColor}10`,
|
|
150
|
-
`--card-shadow: 0 12rpx 40rpx ${themeStore.primaryColor}22`,
|
|
151
|
-
`--brand-text-color: #0f172a`,
|
|
152
|
-
].join(";");
|
|
117
|
+
onLaunch(() => {
|
|
118
|
+
initTheme("mono-theme");
|
|
153
119
|
});
|
|
154
|
-
</script>
|
|
155
|
-
|
|
156
|
-
<template>
|
|
157
|
-
<hlw-page :style="pageStyle" title="自定义主题">
|
|
158
|
-
<view class="custom-card">高度扩展</view>
|
|
159
|
-
</hlw-page>
|
|
160
|
-
</template>
|
|
161
120
|
```
|
|
162
121
|
|
|
163
|
-
|
|
122
|
+
### 2. 交互式反馈 — `useMsg()` / 全局 `hlw.$msg`
|
|
164
123
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
### 💬 消息提示 — `useMsg()`
|
|
168
|
-
|
|
169
|
-
统一且高度简化的 Toast、Loading 与原生模态弹窗。
|
|
124
|
+
封装并规整了小程序原生的 Toast、Loading 与 Promise 化的 Modal 确认弹窗。支持在 setup 内部使用 `useMsg()`,亦支持在非 setup 环境中通过全局 `hlw.$msg` 直接调用:
|
|
170
125
|
|
|
171
126
|
```ts
|
|
172
|
-
import { useMsg } from
|
|
127
|
+
import { useMsg, hlw } from "@hlw-uni/mp-vue";
|
|
173
128
|
|
|
174
129
|
const msg = useMsg();
|
|
175
130
|
|
|
176
131
|
// 1. Toast 轻提示
|
|
177
|
-
msg.toast("
|
|
132
|
+
msg.toast("操作成功");
|
|
133
|
+
hlw.$msg.toast("非 setup 阶段直接调用");
|
|
134
|
+
|
|
178
135
|
msg.success("保存成功");
|
|
179
136
|
msg.error("提交失败");
|
|
180
137
|
|
|
181
|
-
// 2. Loading
|
|
182
|
-
msg.showLoading("
|
|
183
|
-
// 异步操作结束后关闭
|
|
138
|
+
// 2. Loading 等待框(带遮罩防穿透点击)
|
|
139
|
+
msg.showLoading("数据同步中...");
|
|
184
140
|
msg.hideLoading();
|
|
185
141
|
|
|
186
|
-
// 3. Promise
|
|
187
|
-
const
|
|
188
|
-
const
|
|
189
|
-
title: "
|
|
190
|
-
content: "
|
|
142
|
+
// 3. Promise 风格确认弹窗
|
|
143
|
+
const handleDelete = async () => {
|
|
144
|
+
const confirm = await msg.confirm({
|
|
145
|
+
title: "安全警告",
|
|
146
|
+
content: "此操作将永久删除该资源,是否继续?",
|
|
191
147
|
confirmColor: "#ef4444"
|
|
192
148
|
});
|
|
193
|
-
if (
|
|
194
|
-
//
|
|
149
|
+
if (confirm) {
|
|
150
|
+
// 执行删除操作
|
|
195
151
|
}
|
|
196
152
|
};
|
|
197
153
|
```
|
|
198
154
|
|
|
199
|
-
###
|
|
155
|
+
### 3. 小程序页面分享 — `useShare()`
|
|
200
156
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
```ts
|
|
204
|
-
import { useNavigate } from '@hlw-uni/mp-vue';
|
|
205
|
-
|
|
206
|
-
const router = useNavigate();
|
|
207
|
-
|
|
208
|
-
// 基础路由跳转 (保留当前页)
|
|
209
|
-
router.to("/pages/detail/index?id=100");
|
|
210
|
-
|
|
211
|
-
// 页面重定向 (关闭当前页)
|
|
212
|
-
router.redirect("/pages/login/index");
|
|
213
|
-
|
|
214
|
-
// 切换 TabBar 页面
|
|
215
|
-
router.tab("/pages/mine/index");
|
|
216
|
-
|
|
217
|
-
// 干净重启 (关闭所有页面)
|
|
218
|
-
router.reLaunch("/pages/index/index");
|
|
219
|
-
|
|
220
|
-
// 返回上一页
|
|
221
|
-
router.back();
|
|
222
|
-
// 返回指定层级
|
|
223
|
-
router.back(2);
|
|
224
|
-
|
|
225
|
-
// 跳转到其他小程序
|
|
226
|
-
router.miniProgram("wx_appid_xxxxx", {
|
|
227
|
-
path: "pages/home/index",
|
|
228
|
-
envVersion: "release"
|
|
229
|
-
});
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
### 📤 微信分享 — `useShare()`
|
|
233
|
-
|
|
234
|
-
优雅地在 `<script setup>` 中配置小程序卡片和朋友圈分享:
|
|
157
|
+
在 setup 中以声明式极简控制当前页面的微信转发卡片及朋友圈分享配置:
|
|
235
158
|
|
|
236
159
|
```vue
|
|
237
160
|
<script setup lang="ts">
|
|
238
161
|
import { useShare } from "@hlw-uni/mp-vue";
|
|
239
162
|
|
|
240
|
-
//
|
|
163
|
+
// 声明分享配置,自动劫持当前页面的分享与朋友圈按钮事件
|
|
241
164
|
useShare({
|
|
242
165
|
title: "推荐你体验这个超棒的小程序!",
|
|
243
|
-
path: "/pages/index/index?from=
|
|
166
|
+
path: "/pages/index/index?from=share_button",
|
|
244
167
|
imageUrl: "https://example.com/share-cover.png"
|
|
245
168
|
});
|
|
246
169
|
</script>
|
|
247
170
|
```
|
|
248
171
|
|
|
249
|
-
###
|
|
172
|
+
### 4. 动态模板 Ref 集合 — `useRefs()`
|
|
250
173
|
|
|
251
|
-
|
|
174
|
+
用于在 `v-for` 循环渲染中动态收集 DOM 节点或组件实例的 Ref 引用:
|
|
252
175
|
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
const request = useRequest();
|
|
257
|
-
|
|
258
|
-
// 1. 配置全局参数
|
|
259
|
-
request.setBaseURL("https://api.example.com");
|
|
176
|
+
```vue
|
|
177
|
+
<script setup lang="ts">
|
|
178
|
+
import { useRefs } from "@hlw-uni/mp-vue";
|
|
260
179
|
|
|
261
|
-
|
|
262
|
-
const cancelReq = request.onRequest((config) => {
|
|
263
|
-
config.headers = {
|
|
264
|
-
...config.headers,
|
|
265
|
-
"Authorization": `Bearer ${uni.getStorageSync("token")}`,
|
|
266
|
-
};
|
|
267
|
-
return config;
|
|
268
|
-
});
|
|
180
|
+
const { refs, setRef } = useRefs<any>();
|
|
269
181
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
const profile = await request.get<UserProfile>("/user/profile");
|
|
276
|
-
|
|
277
|
-
// 4. 面向服务封装 (BaseService)
|
|
278
|
-
@ServicePrefix("api")
|
|
279
|
-
@ServiceNamespace("member")
|
|
280
|
-
class MemberService extends BaseService {
|
|
281
|
-
getProfile() {
|
|
282
|
-
return this.get<UserProfile>("/profile"); // 自动拼接成 /api/member/profile
|
|
182
|
+
const handleScroll = (index: number) => {
|
|
183
|
+
const targetComponent = refs.value[index];
|
|
184
|
+
if (targetComponent) {
|
|
185
|
+
// 调用组件实例上的方法
|
|
186
|
+
targetComponent.scrollIntoView();
|
|
283
187
|
}
|
|
284
|
-
}
|
|
188
|
+
};
|
|
189
|
+
</script>
|
|
285
190
|
|
|
286
|
-
|
|
191
|
+
<template>
|
|
192
|
+
<view v-for="(item, index) in list" :key="item.id">
|
|
193
|
+
<custom-item :ref="el => setRef(el, index)" />
|
|
194
|
+
</view>
|
|
195
|
+
</template>
|
|
287
196
|
```
|
|
288
197
|
|
|
289
198
|
---
|
|
290
199
|
|
|
291
|
-
##
|
|
292
|
-
|
|
293
|
-
`@hlw-uni/mp-vue` 内置了多达 27 个高频易用组件。以下重点介绍核心高频组件的 API 与用法。
|
|
200
|
+
## 🛠️ 纯无状态工具集 (`utils/`)
|
|
294
201
|
|
|
295
|
-
###
|
|
202
|
+
### 1. 路由与导航跳转 — `navigator`
|
|
296
203
|
|
|
297
|
-
|
|
204
|
+
全面接管 uni-app 原生路由 API,内置路由降级、安全异常捕获与失败自动提示。
|
|
298
205
|
|
|
299
|
-
|
|
206
|
+
```ts
|
|
207
|
+
import {
|
|
208
|
+
navigateTo,
|
|
209
|
+
redirectTo,
|
|
210
|
+
switchTab,
|
|
211
|
+
reLaunch,
|
|
212
|
+
navigateBack,
|
|
213
|
+
navigateToMiniProgram
|
|
214
|
+
} from "@hlw-uni/mp-vue";
|
|
215
|
+
|
|
216
|
+
// 保留当前页,跳转至指定路径
|
|
217
|
+
navigateTo("/pages/detail/index?id=123");
|
|
218
|
+
|
|
219
|
+
// 关闭当前页,重定向跳转
|
|
220
|
+
redirectTo("/pages/auth/login");
|
|
221
|
+
|
|
222
|
+
// 切换至 TabBAR 导航页
|
|
223
|
+
switchTab("/pages/home/index");
|
|
224
|
+
|
|
225
|
+
// 关闭所有页面,重启并打开指定页
|
|
226
|
+
reLaunch("/pages/index/index");
|
|
227
|
+
|
|
228
|
+
// 返回上级页面(默认 1 层)
|
|
229
|
+
navigateBack();
|
|
230
|
+
navigateBack(2); // 返回上两级页面
|
|
231
|
+
|
|
232
|
+
// 打开外部小程序
|
|
233
|
+
navigateToMiniProgram("wxxxxxxxxx", {
|
|
234
|
+
path: "pages/main/index",
|
|
235
|
+
envVersion: "release"
|
|
236
|
+
});
|
|
237
|
+
```
|
|
300
238
|
|
|
301
|
-
|
|
302
|
-
| :--- | :--- | :--- | :--- |
|
|
303
|
-
| `title` | `string` | `""` | 页面标题,设置后渲染默认页头 `hlw-header` |
|
|
304
|
-
| `isBack` | `boolean` | `false` | 是否显示返回按钮 |
|
|
305
|
-
| `bgClass` | `string` | `""` | 传递给 `hlw-header` 的背景 class |
|
|
306
|
-
| `bodyClass` | `string \| object \| array` | `""` | 内层 body 的 class,常用于设置 flex 或 gap 间距 |
|
|
307
|
-
| `bodyStyle` | `string \| object` | `""` | 内层 body 的自定义样式 |
|
|
239
|
+
### 2. 网络请求封装 — `request` & `BaseService`
|
|
308
240
|
|
|
309
|
-
|
|
241
|
+
高性能的 HTTP 请求客户端,支持多拦截器链、自动携带设备头信息、对象服务化组织等。
|
|
310
242
|
|
|
311
|
-
```
|
|
312
|
-
|
|
313
|
-
<hlw-page title="用户设置" :is-back="true" body-class="p-4 gap-4">
|
|
314
|
-
<!-- 自定义页头 (可选) -->
|
|
315
|
-
<template #header>
|
|
316
|
-
<view class="custom-header">自定义头部</view>
|
|
317
|
-
</template>
|
|
318
|
-
|
|
319
|
-
<!-- 页面内容 -->
|
|
320
|
-
<view class="setting-list">
|
|
321
|
-
<view>选项一</view>
|
|
322
|
-
</view>
|
|
323
|
-
|
|
324
|
-
<!-- 底部悬浮/固定栏 (不随页面滚动) -->
|
|
325
|
-
<template #footer>
|
|
326
|
-
<view class="footer-bar">
|
|
327
|
-
<hlw-button block>保存修改</hlw-button>
|
|
328
|
-
</view>
|
|
329
|
-
</template>
|
|
330
|
-
</hlw-page>
|
|
331
|
-
</template>
|
|
332
|
-
```
|
|
243
|
+
```ts
|
|
244
|
+
import { request, BaseService, ServicePrefix, ServiceNamespace } from "@hlw-uni/mp-vue";
|
|
333
245
|
|
|
334
|
-
|
|
246
|
+
// 1. 全局基础 URL 配置
|
|
247
|
+
request.setBaseURL("https://api.hlw.com");
|
|
335
248
|
|
|
336
|
-
|
|
249
|
+
// 2. 配置请求/响应拦截器
|
|
250
|
+
request.onRequest((config) => {
|
|
251
|
+
config.headers = {
|
|
252
|
+
...config.headers,
|
|
253
|
+
"Authorization": `Bearer ${uni.getStorageSync("token")}`
|
|
254
|
+
};
|
|
255
|
+
return config;
|
|
256
|
+
});
|
|
337
257
|
|
|
338
|
-
|
|
258
|
+
// 3. 直接调用 API
|
|
259
|
+
const data = await request.get("/user/info");
|
|
339
260
|
|
|
340
|
-
|
|
261
|
+
// 4. 面向服务组织封装(基类配合装饰器)
|
|
262
|
+
@ServicePrefix("v1")
|
|
263
|
+
@ServiceNamespace("order")
|
|
264
|
+
class OrderService extends BaseService {
|
|
265
|
+
getList(page: number) {
|
|
266
|
+
// 自动拼接为: /v1/order/list
|
|
267
|
+
return this.get("/list", { page });
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
export const orderService = new OrderService();
|
|
271
|
+
```
|
|
341
272
|
|
|
342
|
-
|
|
343
|
-
| :--- | :--- | :--- | :--- |
|
|
344
|
-
| `type` | `ButtonType` | `"primary"` | 按钮类型,可选 `primary \| success \| warning \| danger \| error \| info \| outline \| text \| ghost` |
|
|
345
|
-
| `size` | `"small" \| "medium" \| "large"` | `"medium"` | 按钮尺寸 |
|
|
346
|
-
| `loading` | `boolean` | `false` | 是否开启加载状态,开启后按钮禁用并展示 Spinner |
|
|
347
|
-
| `disabled` | `boolean` | `false` | 是否禁用按钮 |
|
|
348
|
-
| `block` | `boolean` | `false` | 是否独占整行(宽度 100%) |
|
|
349
|
-
| `round` | `boolean` | `false` | 是否为高圆角胶囊形态 |
|
|
350
|
-
| `icon` | `string` | `""` | 按钮图标类名 |
|
|
351
|
-
| `bgColor` | `string` | `""` | 自定义背景颜色(覆盖 type) |
|
|
352
|
-
| `textColor` | `string` | `""` | 自定义文字颜色 |
|
|
353
|
-
| `url` | `string` | `""` | 快捷页面跳转目标地址 |
|
|
354
|
-
| `navigateType` | `NavigateType` | `"navigateTo"` | 路由方式,可选 `navigateTo \| redirectTo \| switchTab \| reLaunch \| navigateBack` |
|
|
355
|
-
| `openType` | `string` | `""` | 小程序原生的开放动作类型,如 `share`, `contact`, `getPhoneNumber` 等 |
|
|
273
|
+
### 3. 微信广告控制助手 — `ad`
|
|
356
274
|
|
|
357
|
-
|
|
275
|
+
高度优化的插屏与激励视频广告助手,支持提前静默异步预加载、防止回调重叠、自动管理加载状态。
|
|
358
276
|
|
|
359
|
-
```
|
|
360
|
-
|
|
361
|
-
<hlw-button type="success" round>成功按钮</hlw-button>
|
|
277
|
+
```ts
|
|
278
|
+
import { setAdPopup, showAdPopup, setAdReward, showAdReward } from "@hlw-uni/mp-vue";
|
|
362
279
|
|
|
363
|
-
|
|
364
|
-
|
|
280
|
+
// 1. 插屏广告配置与延迟展示
|
|
281
|
+
setAdPopup("adunit-popup-xxxx");
|
|
282
|
+
await showAdPopup(2000); // 延迟 2000ms 自动展示已加载的插屏广告
|
|
365
283
|
|
|
366
|
-
|
|
367
|
-
|
|
284
|
+
// 2. 激励视频广告配置(完美支持 Promise 化播放状态响应)
|
|
285
|
+
setAdReward("adunit-reward-xxxx", (res) => {
|
|
286
|
+
if (res.ok && res.isEnded) {
|
|
287
|
+
// 成功播放完毕,在此分发业务奖励
|
|
288
|
+
}
|
|
289
|
+
});
|
|
368
290
|
|
|
369
|
-
|
|
370
|
-
|
|
291
|
+
// 立即唤起激励视频广告播放
|
|
292
|
+
const res = await showAdReward(() => {
|
|
293
|
+
// 广告拉起成功回调,可用于关闭页面的 Loading 等待框
|
|
294
|
+
});
|
|
371
295
|
```
|
|
372
296
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
### 📋 3. 高级菜单组件 — `hlw-menu`
|
|
376
|
-
|
|
377
|
-
高度可定制的数据驱动菜单组件,支持列表模式和宫格网格模式。高度适配微信小程序的客服、获取手机号等 `openType` 功能。
|
|
297
|
+
### 4. 设备与系统元数据 — `device`
|
|
378
298
|
|
|
379
|
-
|
|
299
|
+
标准化、可缓存的高效设备元数据获取。消除了不同端、不同版本小程序获取系统属性的 API 碎片化问题。
|
|
380
300
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
| `items` | `HlwMenuItem[]` | `[]` | 菜单数据列表 |
|
|
384
|
-
| `title` | `string` | `""` | 卡片标题,有值时在菜单上方展示标题及分割线 |
|
|
385
|
-
| `mode` | `"list" \| "grid"` | `"list"` | 布局模式,可选列表或宫格模式 |
|
|
386
|
-
| `columns` | `number` | `4` | 宫格列数,仅在 `mode="grid"` 时有效 |
|
|
387
|
-
| `border` | `boolean` | `true` | 是否展示卡片容器外边框 |
|
|
301
|
+
```ts
|
|
302
|
+
import { getDevice, getDeviceQuery } from "@hlw-uni/mp-vue";
|
|
388
303
|
|
|
389
|
-
|
|
304
|
+
// 获取标准化设备数据结构
|
|
305
|
+
const device = getDevice();
|
|
306
|
+
console.log(device.platform, device.device_brand, device.system);
|
|
390
307
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
icon: string; // 图标 class
|
|
394
|
-
iconTheme?: string; // 图标色彩主题:orange, purple, wechat, blue, slate 等
|
|
395
|
-
label: string; // 菜单标签文案
|
|
396
|
-
url?: string; // 跳转链接,配置后点击自动跳转,无需绑定 click 事件
|
|
397
|
-
value?: string; // 右侧纯文本(仅列表模式)
|
|
398
|
-
tag?: string; // 右侧彩色标签/右上角徽标
|
|
399
|
-
tagTheme?: string; // 标签颜色:rose, orange, blue, wechat, red
|
|
400
|
-
tagPulse?: boolean; // 标签是否具有呼吸呼吸灯闪烁动画
|
|
401
|
-
loading?: boolean; // 是否展示加载状态
|
|
402
|
-
visible?: boolean; // 是否渲染该子项,控制动态显隐
|
|
403
|
-
openType?: string; // 小程序原生 open-type 动作
|
|
404
|
-
}
|
|
308
|
+
// 获取已转化为 URL-encoded 参数的设备数据,常用于拼接到请求 Query 头中
|
|
309
|
+
const queryStr = getDeviceQuery();
|
|
405
310
|
```
|
|
406
311
|
|
|
407
|
-
|
|
312
|
+
### 5. 公共工具库 — `common`
|
|
408
313
|
|
|
409
|
-
|
|
410
|
-
<script setup lang="ts">
|
|
411
|
-
import type { HlwMenuItem } from "@hlw-uni/mp-vue";
|
|
412
|
-
|
|
413
|
-
const serviceMenus: HlwMenuItem[] = [
|
|
414
|
-
{ icon: "i-fa6-solid-user", label: "个人资料", url: "/pages/profile/index", iconTheme: "blue" },
|
|
415
|
-
{ icon: "i-fa6-solid-bell", label: "系统通知", value: "未读 3 条", iconTheme: "orange", tag: "HOT", tagPulse: true },
|
|
416
|
-
{ icon: "i-fa6-solid-headset", label: "在线客服", openType: "contact", iconTheme: "wechat" },
|
|
417
|
-
{ icon: "i-fa6-solid-gear", label: "设置中心", url: "/pages/setting/index", iconTheme: "slate" },
|
|
418
|
-
];
|
|
419
|
-
</script>
|
|
314
|
+
包含系统剪贴板交互、支持权限预检测的多媒体资源(图片、视频)一键下载并保存到系统相册等实用工具。
|
|
420
315
|
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
316
|
+
```ts
|
|
317
|
+
import {
|
|
318
|
+
copy,
|
|
319
|
+
paste,
|
|
320
|
+
saveImageUrl,
|
|
321
|
+
saveVideoUrl,
|
|
322
|
+
toQuery,
|
|
323
|
+
withQuery
|
|
324
|
+
} from "@hlw-uni/mp-vue";
|
|
325
|
+
|
|
326
|
+
// 1. 剪贴板读取与写入
|
|
327
|
+
await copy("复制的内容", true); // 第二参数决定是否弹出“复制成功”提示
|
|
328
|
+
const text = await paste();
|
|
329
|
+
|
|
330
|
+
// 2. 保存网络多媒体资源至手机相册(自动拦截未授权状态,弹出引导设置提示)
|
|
331
|
+
const successImg = await saveImageUrl("https://img.hlw.com/logo.jpg");
|
|
332
|
+
const successVideo = await saveVideoUrl("https://img.hlw.com/video.mp4");
|
|
333
|
+
|
|
334
|
+
// 3. 安全 URL 参数拼接
|
|
335
|
+
const newUrl = withQuery("/pages/index", "id=1&name=hlw");
|
|
336
|
+
const query = toQuery({ id: 1, name: "hlw", temp: null }); // "id=1&name=hlw"
|
|
428
337
|
```
|
|
429
338
|
|
|
430
339
|
---
|
|
431
340
|
|
|
432
|
-
|
|
341
|
+
## ⚡ 自定义 Vue 指令 (`directives`)
|
|
433
342
|
|
|
434
|
-
|
|
343
|
+
### `v-copy` 点击复制指令
|
|
435
344
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
| 属性名 | 类型 | 默认值 | 说明 |
|
|
439
|
-
| :--- | :--- | :--- | :--- |
|
|
440
|
-
| `loadingText` | `string` | `"加载中..."` | 加载提示文案 |
|
|
441
|
-
| `emptyText` | `string` | `"暂无数据"` | 空状态提示文案 |
|
|
442
|
-
| `emptyImage` | `string` | `""` | 自定义空状态图片地址 |
|
|
443
|
-
| `useDefaultLoading` | `boolean` | `true` | 是否使用内置的 `hlw-loading` 插槽 |
|
|
444
|
-
| `useDefaultEmpty` | `boolean` | `true` | 是否使用内置的 `hlw-empty` 插槽 |
|
|
445
|
-
|
|
446
|
-
#### 示例
|
|
345
|
+
在模板标签上声明此指令,点击元素即可自动将绑定值复制到手机系统剪贴板,并触发微提示,无需绑定多余事件:
|
|
447
346
|
|
|
448
347
|
```vue
|
|
449
|
-
<script setup lang="ts">
|
|
450
|
-
import { ref } from "vue";
|
|
451
|
-
import type { HlwPagingRef } from "@hlw-uni/mp-vue";
|
|
452
|
-
|
|
453
|
-
interface Article {
|
|
454
|
-
id: number;
|
|
455
|
-
title: string;
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
const paging = ref<HlwPagingRef<Article> | null>(null);
|
|
459
|
-
const dataList = ref<Article[]>([]);
|
|
460
|
-
|
|
461
|
-
const onQuery = async (pageNo: number, pageSize: number) => {
|
|
462
|
-
try {
|
|
463
|
-
const res = await fetchArticleList({ page: pageNo, limit: pageSize });
|
|
464
|
-
// 渲染并控制页数判定
|
|
465
|
-
paging.value?.completeByNoMore(res.list, res.list.length < pageSize);
|
|
466
|
-
} catch (err) {
|
|
467
|
-
paging.value?.completeByError(err);
|
|
468
|
-
}
|
|
469
|
-
};
|
|
470
|
-
</script>
|
|
471
|
-
|
|
472
348
|
<template>
|
|
473
|
-
<
|
|
474
|
-
|
|
475
|
-
v-
|
|
476
|
-
|
|
477
|
-
empty-text="还没有发表任何文章"
|
|
478
|
-
@query="onQuery"
|
|
479
|
-
>
|
|
480
|
-
<view v-for="item in dataList" :key="item.id" class="article-item p-4 border-b">
|
|
481
|
-
{{ item.title }}
|
|
482
|
-
</view>
|
|
483
|
-
</hlw-paging>
|
|
349
|
+
<view class="user-info">
|
|
350
|
+
<!-- 点击直接复制 ID 文本 -->
|
|
351
|
+
<text v-copy="userId" class="uid-text">用户ID: {{ userId }}</text>
|
|
352
|
+
</view>
|
|
484
353
|
</template>
|
|
485
354
|
```
|
|
486
355
|
|
|
487
356
|
---
|
|
488
357
|
|
|
489
|
-
##
|
|
358
|
+
## 📦 easycom UI 组件全景索引 (27个内置组件)
|
|
490
359
|
|
|
491
|
-
|
|
360
|
+
以下为 `@hlw-uni/mp-vue` 内置的部分核心 UI 组件简表:
|
|
492
361
|
|
|
493
|
-
|
|
|
362
|
+
| 组件名称 | 目录定位 | 说明 |
|
|
494
363
|
| :--- | :--- | :--- |
|
|
495
|
-
|
|
|
496
|
-
|
|
|
497
|
-
|
|
|
498
|
-
|
|
|
499
|
-
|
|
|
500
|
-
|
|
|
501
|
-
|
|
|
502
|
-
|
|
|
503
|
-
|
|
|
504
|
-
|
|
|
505
|
-
|
|
|
506
|
-
| 🏜️ `hlw-empty` | 空状态 | 精美质感的空态图标及提示文案,支持挂载自定义引导动作按钮 |
|
|
507
|
-
| 🧭 `hlw-header` | 自定义导航栏 | 对小程序原生导航栏的完美替代,支持沉浸式状态栏与返回动作 |
|
|
508
|
-
| 🖼️ `hlw-image` | 增强图片 | 支持平滑过渡加载效果、支持懒加载及骨架图占位的 Image 增强版 |
|
|
509
|
-
| 🔄 `hlw-loading` | 加载指示器 | 统一风格的加载转圈动效及文案提示 |
|
|
510
|
-
| 🍔 `hlw-menu` | 多功能菜单 | 数据驱动,列表模式/宫格模式自由切换,高度适配 `openType` |
|
|
511
|
-
| 💬 `hlw-modal` | 模态弹窗 | 轻量的确认与提示弹窗组件 |
|
|
512
|
-
| 📢 `hlw-notice-bar` | 滚动通告栏 | 经典的横向滚动滚动条,用于突发通告、重要广播等 |
|
|
513
|
-
| 🎁 `hlw-notice-popup` | 通告弹窗 | 页面初始化时弹出的卡片式全局公告、优惠券或活动图 |
|
|
514
|
-
| 🏢 `hlw-page` | 页面核心骨架 | 收敛顶部导航栏、底部固定栏与中间高度自适应页面的核心基础件 |
|
|
515
|
-
| 📜 `hlw-paging` | 分页滚动组件 | 基于 `z-paging` 深度打通,无缝管理下拉刷新与上拉加载 |
|
|
516
|
-
| 🎪 `hlw-popup` | 基础弹窗 | 支持上、下、中等各种方位的轻量级弹窗蒙层容器 |
|
|
517
|
-
| 🔍 `hlw-search` | 搜索栏 | 高颜值的小程序搜索输入框,支持一键清空、聚焦回调等 |
|
|
518
|
-
| 🗃️ `hlw-sheet` | 动作面板 | 从页面底部升起的动作面板或选项操作菜单 (Action Sheet) |
|
|
519
|
-
| 💀 `hlw-skeleton` | 骨架屏 | 高质感微光渐变波纹效果的占位加载骨架屏 |
|
|
520
|
-
| 📑 `hlw-tabs` | 横向选项卡 | 自动计算高亮的切换栏,支持文字或含数字徽标的选项 |
|
|
521
|
-
| 🔖 `hlw-tag` | 标签 | 多种色彩、填充模式(实心、镂空)的小标签 |
|
|
364
|
+
| **`hlw-page`** | `components/hlw-page` | **核心页面骨架组件**。统一承载页面导航、滚动视图区与底部固定栏。 |
|
|
365
|
+
| **`hlw-button`** | `components/hlw-button` | **语义化增强按钮**。支持路由快捷绑定、状态机 loading 及小程序开放能力。 |
|
|
366
|
+
| **`hlw-paging`** | `components/hlw-paging` | **高性能分页滚动容器**。基于 z-paging 整合内置 loading 和空状态。 |
|
|
367
|
+
| **`hlw-header`** | `components/hlw-header` | **自定义沉浸式导航栏**。支持各类自定义动作、按钮与插槽。 |
|
|
368
|
+
| **`hlw-avatar`** | `components/hlw-avatar` | **增强用户头像**。图片加载失败时自动平滑降级显示文字首字母。 |
|
|
369
|
+
| **`hlw-skeleton`** | `components/hlw-skeleton` | **渐变骨架占位屏**。带优雅扫光动画效果的 UI 占位图。 |
|
|
370
|
+
| **`hlw-loading`** | `components/hlw-loading` | **组件级加载指示器**。统一的高品质微动效 loading。 |
|
|
371
|
+
| **`hlw-empty`** | `components/hlw-empty` | **通用空状态面板**。内置优雅插图,支持各种状态文案定制。 |
|
|
372
|
+
| **`hlw-popup`** | `components/hlw-popup` | **弹窗基类容器**。支持上、下、中等各种动画过渡的全局蒙层容器。 |
|
|
373
|
+
| **`hlw-tabs`** | `components/hlw-tabs` | **滚动标签页选项卡**。自动平滑计算高亮下滑线位置。 |
|
|
374
|
+
| **`hlw-tag`** | `components/hlw-tag` | **语义标签组件**。内置多种主题颜色、胶囊型及镂空风格。 |
|
|
522
375
|
|
|
523
376
|
---
|
|
524
377
|
|
|
525
|
-
## 💻
|
|
378
|
+
## 💻 团队本地开发说明
|
|
526
379
|
|
|
527
|
-
|
|
380
|
+
若您需要参与本组件库的修改、维护与新特性迭代,请遵循以下工程流程:
|
|
528
381
|
|
|
529
|
-
### 1.
|
|
382
|
+
### 1. 启动热编译 (Watch Mode)
|
|
530
383
|
|
|
531
384
|
```bash
|
|
532
385
|
pnpm dev
|
|
533
|
-
# 此时 vite 会监听 src 下所有文件的变动,并自动热重构同步到 dist 目录
|
|
534
386
|
```
|
|
387
|
+
此时 Vite 将启动监听构建,自动将 `src/` 的变更即时打包同步至 `dist/` 临时构建目录,使本地消费链路保持实时更新。
|
|
535
388
|
|
|
536
|
-
### 2.
|
|
389
|
+
### 2. 生成生产级分发包
|
|
390
|
+
|
|
391
|
+
在合并主分支或发版前,须执行生产级打包编译,产出经高度优化、体积极致压缩且带全量类型定义的包产物:
|
|
537
392
|
|
|
538
393
|
```bash
|
|
539
394
|
pnpm build
|
|
540
|
-
# 将生成高度优化、体积极致精简的 CommonJS、ESModule 以及 .d.ts 类型声明产物
|
|
541
|
-
```
|
|
542
|
-
|
|
543
|
-
### 3. 构建产物结构
|
|
544
|
-
|
|
545
|
-
```
|
|
546
|
-
mp-vue/
|
|
547
|
-
├── dist/
|
|
548
|
-
│ ├── index.js # CommonJS 格式产物
|
|
549
|
-
│ ├── index.mjs # ESModule 格式产物 (供现代打包器 Tree-shaking 使用)
|
|
550
|
-
│ └── index.d.ts # 自动生成的 TS 全量类型声明文件
|
|
551
395
|
```
|
|
552
396
|
|
|
553
397
|
---
|
|
554
398
|
|
|
555
|
-
## 📄
|
|
399
|
+
## 📄 许可声明
|
|
556
400
|
|
|
557
|
-
|
|
401
|
+
本仓库为**内部私有组件库**。仅授权应用于 `hlw-uni` 关联小程序的协作与业务研发。未经许可,严禁分发或公开上传至公共 NPM 仓库或共享平台。
|