@uxda/appkit 4.3.8 → 4.3.12
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/.eslintrc.mjs +7 -7
- package/COMPONENT_USAGE.md +1523 -1523
- package/PROJECT_DOCS.md +142 -142
- package/README.md +187 -187
- package/babel.config.js +12 -12
- package/dist/appkit.css +63 -15
- package/dist/index.js +881 -259
- package/package.json +79 -79
- package/project.config.json +15 -15
- package/project.tt.json +13 -13
- package/rollup.config.mjs +78 -78
- package/src/Appkit.ts +72 -72
- package/src/balance/api/endpoints.ts +133 -133
- package/src/balance/api/index.ts +118 -118
- package/src/balance/components/AccountView.vue +770 -770
- package/src/balance/components/BalanceCard.vue +210 -210
- package/src/balance/components/BalanceReminder.vue +84 -84
- package/src/balance/components/ConsumptionFilter.vue +218 -218
- package/src/balance/components/ConsumptionRules.vue +68 -68
- package/src/balance/components/DateFilter.vue +259 -259
- package/src/balance/components/DateRange.vue +111 -111
- package/src/balance/components/ListFilter.vue +62 -62
- package/src/balance/components/ListFilterPicker.vue +191 -191
- package/src/balance/components/PromoterCard.vue +308 -307
- package/src/balance/components/SecondBalance.vue +77 -77
- package/src/balance/components/Tip.vue +45 -45
- package/src/balance/components/index.ts +8 -8
- package/src/balance/types.ts +99 -99
- package/src/components/bt-cropper/index.vue +730 -730
- package/src/components/bt-cropper/utils/calcCropper.js +42 -42
- package/src/components/bt-cropper/utils/calcImagePosition.js +23 -23
- package/src/components/bt-cropper/utils/calcImageSize.js +37 -37
- package/src/components/bt-cropper/utils/calcPointDistance.js +12 -12
- package/src/components/bt-cropper/utils/calcRightAndBottom.js +7 -7
- package/src/components/bt-cropper/utils/ratio.js +3 -3
- package/src/components/bt-cropper/utils/tools.js +25 -25
- package/src/components/dd-area/index.vue +225 -225
- package/src/components/dd-icon/doc.md +21 -21
- package/src/components/dd-icon/index.vue +23 -23
- package/src/components/dd-notice-bar/index.vue +78 -78
- package/src/components/dd-search/doc.md +34 -34
- package/src/components/dd-search/index.vue +168 -168
- package/src/components/dd-selector/index.vue +124 -124
- package/src/components/dd-skeleton/doc.md +19 -19
- package/src/components/dd-skeleton/index.vue +36 -36
- package/src/global.ts +6 -6
- package/src/index.ts +101 -101
- package/src/main.scss +1 -1
- package/src/notice/api/endpoints.ts +54 -54
- package/src/notice/api/index.ts +121 -121
- package/src/notice/components/NoticeBanner.vue +247 -247
- package/src/notice/components/NoticeEntry.vue +99 -99
- package/src/notice/components/NoticeList.vue +311 -311
- package/src/notice/components/NoticeList2.vue +401 -400
- package/src/notice/components/NoticePopup.vue +163 -163
- package/src/notice/components/index.ts +6 -6
- package/src/notice/components/useCommonList.ts +87 -86
- package/src/notice/components/useNotice.ts +35 -35
- package/src/notice/index.ts +1 -1
- package/src/notice/types.ts +25 -25
- package/src/payment/api/config.ts +7 -7
- package/src/payment/api/endpoints.ts +98 -96
- package/src/payment/api/index.ts +108 -107
- package/src/payment/components/AmountPicker.vue +90 -90
- package/src/payment/components/RechargeResult.vue +68 -69
- package/src/payment/components/RechargeView.vue +195 -191
- package/src/payment/components/RightsPicker.vue +105 -105
- package/src/payment/components/TradeView.vue +573 -363
- package/src/payment/components/UserAgreement.vue +234 -234
- package/src/payment/components/index.ts +22 -22
- package/src/payment/index.ts +5 -5
- package/src/payment/services/index.ts +16 -16
- package/src/payment/services/invoke-recharge.ts +25 -25
- package/src/payment/services/request-payment.ts +132 -130
- package/src/payment/types.ts +34 -33
- package/src/register/components/SelfRegistration.vue +233 -233
- package/src/register/components/index.ts +2 -2
- package/src/scenarios/components/SharePoster.vue +364 -364
- package/src/scenarios/components/index.ts +2 -2
- package/src/scenarios/components/poster-paste.vue +93 -93
- package/src/scenarios/components/share-poster.md +273 -273
- package/src/shared/components/AppDrawer.vue +53 -53
- package/src/shared/components/AppVerify.vue +137 -128
- package/src/shared/components/DeviceVersion.vue +78 -78
- package/src/shared/components/EmptyView.vue +33 -33
- package/src/shared/components/OcrBank.vue +202 -0
- package/src/shared/components/OcrBusinessLicense.vue +120 -137
- package/src/shared/components/OcrIcon.vue +267 -229
- package/src/shared/components/OcrInvoice.vue +322 -0
- package/src/shared/components/PageHeader.vue +84 -84
- package/src/shared/components/index.ts +10 -8
- package/src/shared/composables/index.ts +10 -9
- package/src/shared/composables/useAmount.ts +46 -46
- package/src/shared/composables/useCompress.ts +64 -0
- package/src/shared/composables/useCountdown.ts +46 -46
- package/src/shared/composables/useCrypto.ts +76 -76
- package/src/shared/composables/useDeviceEnv.ts +26 -26
- package/src/shared/composables/useDragBox.ts +97 -97
- package/src/shared/composables/useEncode.ts +43 -43
- package/src/shared/composables/useLogger.ts +144 -144
- package/src/shared/composables/useSafeArea.ts +46 -46
- package/src/shared/composables/useTabbar.ts +24 -24
- package/src/shared/composables/useUpload.ts +106 -61
- package/src/shared/composables/useValidator.ts +32 -32
- package/src/shared/composables/useWxAuth.ts +48 -48
- package/src/shared/http/Http.ts +149 -148
- package/src/shared/http/index.ts +1 -1
- package/src/shared/http/types.ts +163 -163
- package/src/shared/index.ts +9 -9
- package/src/shared/tracking/directives/index.ts +40 -40
- package/src/shared/tracking/examples/page-tracking-template.vue +27 -27
- package/src/shared/tracking/tracking-sdk.ts +0 -1
- package/src/shared/weixin/index.ts +9 -9
- package/src/shared/weixin/jssdk.ts +104 -103
- package/src/shared/weixin/payment.ts +38 -38
- package/src/styles/vars.scss +3 -3
- package/src/user/api/endpoints.ts +17 -17
- package/src/user/api/index.ts +123 -123
- package/src/user/components/LoginSetting.vue +114 -114
- package/src/user/components/UserAuth.vue +218 -218
- package/src/user/components/UserBinding.vue +277 -277
- package/src/user/components/UserBindingSuccess.vue +80 -80
- package/src/user/components/UserEntry.vue +139 -139
- package/src/user/components/UserFeedback.vue +428 -427
- package/src/user/components/UserFeedbackEntry.vue +175 -175
- package/src/user/components/UserHeadCrop.vue +65 -65
- package/src/user/components/UserInfo.vue +711 -709
- package/src/user/components/UserResourceEmpty.vue +75 -75
- package/src/user/components/index.ts +23 -23
- package/src/user/index.ts +1 -1
- package/src/utils/utils.ts +33 -33
- package/tsconfig.json +30 -30
- package/types/global.d.ts +24 -22
- package/types/vue.d.ts +10 -10
- package/dist/assets/asset-DcH8Kg-2 +0 -1
package/COMPONENT_USAGE.md
CHANGED
|
@@ -1,1523 +1,1523 @@
|
|
|
1
|
-
# Appkit 组件使用规则
|
|
2
|
-
|
|
3
|
-
本文档详细说明 Appkit 中各组件的使用方法、属性、事件和注意事项。
|
|
4
|
-
|
|
5
|
-
## 目录
|
|
6
|
-
|
|
7
|
-
### 支付模块 (Payment)
|
|
8
|
-
- [TradeView - 权益充值视图](#tradeview---权益充值视图)
|
|
9
|
-
- [RechargeView - 云豆充值视图](#rechargeview---云豆充值视图)
|
|
10
|
-
- [AmountPicker - 金额选择器](#amountpicker---金额选择器)
|
|
11
|
-
- [RightsPicker - 权益选择器](#rightspicker---权益选择器)
|
|
12
|
-
- [RechargeResult - 充值结果页](#rechargeresult---充值结果页)
|
|
13
|
-
- [UserAgreement - 用户协议](#useragreement---用户协议)
|
|
14
|
-
|
|
15
|
-
### 余额模块 (Balance)
|
|
16
|
-
- [AccountView - 账户总览](#accountview---账户总览)
|
|
17
|
-
- [BalanceCard - 余额卡片](#balancecard---余额卡片)
|
|
18
|
-
- [BalanceReminder - 余额提醒](#balancereminder---余额提醒)
|
|
19
|
-
|
|
20
|
-
### 消息通知模块 (Notice)
|
|
21
|
-
- [NoticeBanner - 通知横幅](#noticebanner---通知横幅)
|
|
22
|
-
- [NoticeList - 消息列表](#noticelist---消息列表)
|
|
23
|
-
- [NoticeEntry - 消息入口](#noticeentry---消息入口)
|
|
24
|
-
- [NoticePopup - 通知弹窗](#noticepopup---通知弹窗)
|
|
25
|
-
|
|
26
|
-
### 用户模块 (User)
|
|
27
|
-
- [UserInfo - 用户信息](#userinfo---用户信息)
|
|
28
|
-
- [UserAuth - 用户认证](#userauth---用户认证)
|
|
29
|
-
- [UserBinding - 账号绑定](#userbinding---账号绑定)
|
|
30
|
-
|
|
31
|
-
### 注册模块 (Register)
|
|
32
|
-
- [SelfRegistration - 自助注册](#selfregistration---自助注册)
|
|
33
|
-
|
|
34
|
-
### 业务场景 (Scenarios)
|
|
35
|
-
- [SharePoster - 分享海报](#shareposter---分享海报)
|
|
36
|
-
|
|
37
|
-
### 通用基础组件 (Components)
|
|
38
|
-
- [DdSearch - 搜索框](#ddsearch---搜索框)
|
|
39
|
-
- [DdIcon - 图标组件](#ddicon---图标组件)
|
|
40
|
-
- [DdSkeleton - 骨架屏](#ddskeleton---骨架屏)
|
|
41
|
-
- [DdNoticeBar - 滚动通告栏](#ddnoticebar---滚动通告栏)
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## TradeView - 权益充值视图
|
|
46
|
-
|
|
47
|
-
**功能描述**: 提供权益充值金额选择、云豆支付和组合支付(云豆+微信)的完整支付流程。
|
|
48
|
-
|
|
49
|
-
### 导入方式
|
|
50
|
-
|
|
51
|
-
```typescript
|
|
52
|
-
import { TradeView } from '@uxda/appkit/payment'
|
|
53
|
-
// 或
|
|
54
|
-
import TradeView from '@uxda/appkit/payment/components/TradeView.vue'
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### Props
|
|
58
|
-
|
|
59
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
60
|
-
|--------|------|------|--------|------|
|
|
61
|
-
| `headerApp` | `string` | ✅ | - | header头中的appcode,一般情况下与app参数一致,当无应用权限时,此参数为空 |
|
|
62
|
-
| `app` | `string` | ✅ | - | 应用标识,用于区分不同应用(如:'corporateStar'、'riskQueryMulti') |
|
|
63
|
-
| `tenant` | `string` | ✅ | - | 租户ID |
|
|
64
|
-
| `payFinishJumpUrl` | `string` | ❌ | `''` | H5支付完成后跳转地址 |
|
|
65
|
-
|
|
66
|
-
### Events
|
|
67
|
-
|
|
68
|
-
| 事件名 | 参数类型 | 说明 |
|
|
69
|
-
|--------|----------|------|
|
|
70
|
-
| `complete` | `{ result: boolean \| any, type: string }` | 支付完成时触发<br/>- `result`: 支付结果<br/>- `type`: 支付类型('bean' | 'wePay' | 'combined')<br/> - `'bean'`: 纯云豆支付<br/> - `'wePay'`: 纯微信支付<br/> - `'combined'`: 组合支付(云豆+微信) |
|
|
71
|
-
| `agree` | - | 用户点击协议链接时触发,可用于打开协议详情页 |
|
|
72
|
-
|
|
73
|
-
### Slots
|
|
74
|
-
|
|
75
|
-
| 插槽名 | 说明 |
|
|
76
|
-
|--------|------|
|
|
77
|
-
| `banner` | 自定义横幅内容,通常用于展示促销信息或活动内容 |
|
|
78
|
-
|
|
79
|
-
### 使用示例
|
|
80
|
-
|
|
81
|
-
```vue
|
|
82
|
-
<template>
|
|
83
|
-
<trade-view
|
|
84
|
-
header-app="loankitMp"
|
|
85
|
-
app="corporateStar"
|
|
86
|
-
tenant="1"
|
|
87
|
-
pay-finish-jump-url="/pages/success/index"
|
|
88
|
-
@complete="handlePayComplete"
|
|
89
|
-
@agree="handleAgreeClick"
|
|
90
|
-
>
|
|
91
|
-
<template #banner>
|
|
92
|
-
<div class="promotion-banner">
|
|
93
|
-
<p>同样价格,看更多数据</p>
|
|
94
|
-
<p>了解AI审批一启明星的全面升级版</p>
|
|
95
|
-
</div>
|
|
96
|
-
</template>
|
|
97
|
-
</trade-view>
|
|
98
|
-
</template>
|
|
99
|
-
|
|
100
|
-
<script setup>
|
|
101
|
-
import { TradeView } from '@uxda/appkit/payment'
|
|
102
|
-
|
|
103
|
-
const handlePayComplete = ({ result, type }) => {
|
|
104
|
-
console.log('支付完成', { result, type })
|
|
105
|
-
if (result) {
|
|
106
|
-
// 支付成功处理
|
|
107
|
-
if (type === 'bean') {
|
|
108
|
-
// 纯云豆支付成功
|
|
109
|
-
} else if (type === 'wePay') {
|
|
110
|
-
// 纯微信支付成功
|
|
111
|
-
} else if (type === 'combined') {
|
|
112
|
-
// 组合支付成功
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
const handleAgreeClick = () => {
|
|
118
|
-
// 打开协议详情页
|
|
119
|
-
Taro.navigateTo({
|
|
120
|
-
url: '/pages/agreement/index'
|
|
121
|
-
})
|
|
122
|
-
}
|
|
123
|
-
</script>
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### 功能特性
|
|
127
|
-
|
|
128
|
-
#### 1. 云豆支付模式
|
|
129
|
-
|
|
130
|
-
- **纯云豆支付**: 当用户选择云豆支付且余额充足时,直接使用云豆完成支付
|
|
131
|
-
- **组合支付**: 当用户选择云豆支付但余额不足时,自动启用组合支付模式
|
|
132
|
-
- 先扣减全部云豆余额
|
|
133
|
-
- 剩余金额通过微信支付完成
|
|
134
|
-
|
|
135
|
-
#### 2. 余额不足提示
|
|
136
|
-
|
|
137
|
-
当启用组合支付时,组件会自动显示:
|
|
138
|
-
- 余额不足警告:`"云豆余额不足,还需额外支付XX元"`
|
|
139
|
-
- 风险提示:`"请在支付完成前确保元豆余额不被消耗,否则本次权益可能购买失败"`
|
|
140
|
-
|
|
141
|
-
#### 3. 待支付金额计算
|
|
142
|
-
|
|
143
|
-
- 纯云豆支付(余额充足): 显示 `¥0`
|
|
144
|
-
- 组合支付(余额不足): 显示额外需要支付的金额
|
|
145
|
-
- 纯微信支付: 显示全额
|
|
146
|
-
|
|
147
|
-
#### 4. 协议确认
|
|
148
|
-
|
|
149
|
-
- 纯云豆支付且余额充足: 不显示协议复选框(无需额外支付)
|
|
150
|
-
- 组合支付或纯微信支付: 必须勾选协议才能继续
|
|
151
|
-
|
|
152
|
-
### 注意事项
|
|
153
|
-
|
|
154
|
-
1. **环境要求**
|
|
155
|
-
- H5环境:必须在微信浏览器中打开
|
|
156
|
-
- 小程序环境:需要配置微信登录权限
|
|
157
|
-
|
|
158
|
-
2. **数据获取**
|
|
159
|
-
- 组件挂载后会自动调用接口获取:
|
|
160
|
-
- 用户云豆余额
|
|
161
|
-
- 权益套餐列表
|
|
162
|
-
- 根据 `app` 参数自动选择对应的权益类型:
|
|
163
|
-
- `'corporateStar'` → `'riskQueryCompany'`
|
|
164
|
-
- 其他 → `'riskQueryMulti'`
|
|
165
|
-
|
|
166
|
-
3. **支付流程**
|
|
167
|
-
- 纯云豆支付:点击购买 → 确认对话框 → 调用云豆支付接口
|
|
168
|
-
- 组合支付:点击购买 → 确认对话框 → 关闭对话框 → 调用微信支付接口(后端自动处理云豆扣减)
|
|
169
|
-
- 纯微信支付:点击购买 → 直接调用微信支付接口
|
|
170
|
-
|
|
171
|
-
4. **错误处理**
|
|
172
|
-
- 组件内部已处理常见错误(网络错误、支付失败等)
|
|
173
|
-
- 通过 `complete` 事件返回结果,由父组件决定后续操作
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## RechargeView - 云豆充值视图
|
|
178
|
-
|
|
179
|
-
**功能描述**: 提供云豆充值金额选择和微信支付功能。
|
|
180
|
-
|
|
181
|
-
### 导入方式
|
|
182
|
-
|
|
183
|
-
```typescript
|
|
184
|
-
import { RechargeView } from '@uxda/appkit/payment'
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### Props
|
|
188
|
-
|
|
189
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
190
|
-
|--------|------|------|--------|------|
|
|
191
|
-
| `app` | `string` | ✅ | - | 应用标识 |
|
|
192
|
-
| `tenant` | `string` | ✅ | - | 租户ID |
|
|
193
|
-
| `payFinishJumpUrl` | `string` | ❌ | `''` | H5支付完成后跳转地址 |
|
|
194
|
-
|
|
195
|
-
### Events
|
|
196
|
-
|
|
197
|
-
| 事件名 | 参数类型 | 说明 |
|
|
198
|
-
|--------|----------|------|
|
|
199
|
-
| `complete` | `boolean \| any` | 支付完成时触发,返回支付结果 |
|
|
200
|
-
| `agree` | - | 用户点击协议链接时触发 |
|
|
201
|
-
|
|
202
|
-
### 使用示例
|
|
203
|
-
|
|
204
|
-
```vue
|
|
205
|
-
<template>
|
|
206
|
-
<recharge-view
|
|
207
|
-
app="loankitMp"
|
|
208
|
-
tenant="1"
|
|
209
|
-
pay-finish-jump-url="/pages/recharge-success/index"
|
|
210
|
-
@complete="handleRechargeComplete"
|
|
211
|
-
@agree="handleAgreeClick"
|
|
212
|
-
/>
|
|
213
|
-
</template>
|
|
214
|
-
|
|
215
|
-
<script setup>
|
|
216
|
-
import { RechargeView } from '@uxda/appkit/payment'
|
|
217
|
-
|
|
218
|
-
const handleRechargeComplete = (result) => {
|
|
219
|
-
if (result) {
|
|
220
|
-
console.log('充值成功')
|
|
221
|
-
// 跳转到成功页或刷新余额
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
</script>
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
### 注意事项
|
|
228
|
-
|
|
229
|
-
1. 组件会自动获取充值金额列表
|
|
230
|
-
2. 必须勾选协议才能进行支付
|
|
231
|
-
3. H5环境需要在微信浏览器中打开
|
|
232
|
-
|
|
233
|
-
---
|
|
234
|
-
|
|
235
|
-
## AmountPicker - 金额选择器
|
|
236
|
-
|
|
237
|
-
**功能描述**: 用于云豆充值场景的金额选择网格组件。
|
|
238
|
-
|
|
239
|
-
### 导入方式
|
|
240
|
-
|
|
241
|
-
```typescript
|
|
242
|
-
import { AmountPicker } from '@uxda/appkit/payment'
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
### Props
|
|
246
|
-
|
|
247
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
248
|
-
|--------|------|------|--------|------|
|
|
249
|
-
| `items` | `Amount[]` | ✅ | `[]` | 金额选项列表 |
|
|
250
|
-
| `selected` | `number` | ❌ | `0` | 当前选中的索引 |
|
|
251
|
-
|
|
252
|
-
### 类型定义
|
|
253
|
-
|
|
254
|
-
```typescript
|
|
255
|
-
type Amount = {
|
|
256
|
-
token: number, // 云豆数量
|
|
257
|
-
amount: number // 支付金额(元)
|
|
258
|
-
}
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
### Events
|
|
262
|
-
|
|
263
|
-
| 事件名 | 参数类型 | 说明 |
|
|
264
|
-
|--------|----------|------|
|
|
265
|
-
| `change` | `number` | 选择改变时触发,返回选中的索引 |
|
|
266
|
-
|
|
267
|
-
### 使用示例
|
|
268
|
-
|
|
269
|
-
```vue
|
|
270
|
-
<template>
|
|
271
|
-
<amount-picker
|
|
272
|
-
:items="amountList"
|
|
273
|
-
:selected="selectedIndex"
|
|
274
|
-
@change="handleAmountChange"
|
|
275
|
-
/>
|
|
276
|
-
</template>
|
|
277
|
-
|
|
278
|
-
<script setup>
|
|
279
|
-
import { ref } from 'vue'
|
|
280
|
-
import { AmountPicker } from '@uxda/appkit/payment'
|
|
281
|
-
|
|
282
|
-
const amountList = ref([
|
|
283
|
-
{ token: 100, amount: 100 },
|
|
284
|
-
{ token: 500, amount: 500 },
|
|
285
|
-
{ token: 1000, amount: 1000 }
|
|
286
|
-
])
|
|
287
|
-
|
|
288
|
-
const selectedIndex = ref(0)
|
|
289
|
-
|
|
290
|
-
const handleAmountChange = (index) => {
|
|
291
|
-
selectedIndex.value = index
|
|
292
|
-
console.log('选中金额:', amountList.value[index])
|
|
293
|
-
}
|
|
294
|
-
</script>
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
### 样式说明
|
|
298
|
-
|
|
299
|
-
- 3列网格布局
|
|
300
|
-
- 选中项有橙色渐变边框和背景
|
|
301
|
-
- 显示云豆图标和金额
|
|
302
|
-
|
|
303
|
-
---
|
|
304
|
-
|
|
305
|
-
## RightsPicker - 权益选择器
|
|
306
|
-
|
|
307
|
-
**功能描述**: 用于权益充值场景的权益套餐选择网格组件。
|
|
308
|
-
|
|
309
|
-
### 导入方式
|
|
310
|
-
|
|
311
|
-
```typescript
|
|
312
|
-
import { RightsPicker, type Amount } from '@uxda/appkit/payment'
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
### Props
|
|
316
|
-
|
|
317
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
318
|
-
|--------|------|------|--------|------|
|
|
319
|
-
| `items` | `Amount[]` | ✅ | `[]` | 权益套餐列表 |
|
|
320
|
-
| `selected` | `number` | ❌ | `0` | 当前选中的索引 |
|
|
321
|
-
|
|
322
|
-
### 类型定义
|
|
323
|
-
|
|
324
|
-
```typescript
|
|
325
|
-
export type Amount = {
|
|
326
|
-
id: string, // 套餐ID
|
|
327
|
-
paymentAmount: number, // 支付金额(元)
|
|
328
|
-
paymentDesc: string, // 套餐描述(标签文本)
|
|
329
|
-
priceRightNum: number // 权益数量(笔数)
|
|
330
|
-
}
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
### Events
|
|
334
|
-
|
|
335
|
-
| 事件名 | 参数类型 | 说明 |
|
|
336
|
-
|--------|----------|------|
|
|
337
|
-
| `change` | `number` | 选择改变时触发,返回选中的索引 |
|
|
338
|
-
|
|
339
|
-
### 使用示例
|
|
340
|
-
|
|
341
|
-
```vue
|
|
342
|
-
<template>
|
|
343
|
-
<rights-picker
|
|
344
|
-
:items="rightsList"
|
|
345
|
-
:selected="selectedIndex"
|
|
346
|
-
@change="handleRightsChange"
|
|
347
|
-
/>
|
|
348
|
-
</template>
|
|
349
|
-
|
|
350
|
-
<script setup>
|
|
351
|
-
import { ref } from 'vue'
|
|
352
|
-
import { RightsPicker, type Amount } from '@uxda/appkit/payment'
|
|
353
|
-
|
|
354
|
-
const rightsList = ref<Amount[]>([
|
|
355
|
-
{
|
|
356
|
-
id: '1',
|
|
357
|
-
paymentAmount: 100,
|
|
358
|
-
paymentDesc: '推荐',
|
|
359
|
-
priceRightNum: 10
|
|
360
|
-
},
|
|
361
|
-
{
|
|
362
|
-
id: '2',
|
|
363
|
-
paymentAmount: 500,
|
|
364
|
-
paymentDesc: '热销',
|
|
365
|
-
priceRightNum: 50
|
|
366
|
-
}
|
|
367
|
-
])
|
|
368
|
-
|
|
369
|
-
const selectedIndex = ref(0)
|
|
370
|
-
|
|
371
|
-
const handleRightsChange = (index) => {
|
|
372
|
-
selectedIndex.value = index
|
|
373
|
-
}
|
|
374
|
-
</script>
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
### 样式说明
|
|
378
|
-
|
|
379
|
-
- 3列网格布局
|
|
380
|
-
- 每个选项显示:
|
|
381
|
-
- 标签(如"推荐"、"热销")
|
|
382
|
-
- 权益数量(笔数)
|
|
383
|
-
- 支付金额
|
|
384
|
-
- 选中项有橙色渐变边框和背景
|
|
385
|
-
|
|
386
|
-
---
|
|
387
|
-
|
|
388
|
-
## RechargeResult - 充值结果页
|
|
389
|
-
|
|
390
|
-
**功能描述**: 展示充值或购买成功/失败的结果页面。
|
|
391
|
-
|
|
392
|
-
### 导入方式
|
|
393
|
-
|
|
394
|
-
```typescript
|
|
395
|
-
import { RechargeResult } from '@uxda/appkit/payment'
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
### Props
|
|
399
|
-
|
|
400
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
401
|
-
|--------|------|------|--------|------|
|
|
402
|
-
| `type` | `string` | ❌ | `'recharge'` | 结果类型<br/>- `'recharge'`: 充值<br/>- `'trade'`: 购买 |
|
|
403
|
-
| `payMethod` | `string` | ❌ | `''` | 支付方式<br/>- `'bean'`: 云豆支付<br/>- `'wePay'`: 微信支付 |
|
|
404
|
-
|
|
405
|
-
### Events
|
|
406
|
-
|
|
407
|
-
| 事件名 | 参数类型 | 说明 |
|
|
408
|
-
|--------|----------|------|
|
|
409
|
-
| `dismiss` | - | 点击返回按钮时触发 |
|
|
410
|
-
|
|
411
|
-
### 使用示例
|
|
412
|
-
|
|
413
|
-
```vue
|
|
414
|
-
<template>
|
|
415
|
-
<recharge-result
|
|
416
|
-
type="trade"
|
|
417
|
-
pay-method="combined"
|
|
418
|
-
@dismiss="handleDismiss"
|
|
419
|
-
/>
|
|
420
|
-
</template>
|
|
421
|
-
|
|
422
|
-
<script setup>
|
|
423
|
-
import { RechargeResult } from '@uxda/appkit/payment'
|
|
424
|
-
|
|
425
|
-
const handleDismiss = () => {
|
|
426
|
-
// 返回上一页或跳转到指定页面
|
|
427
|
-
Taro.navigateBack()
|
|
428
|
-
}
|
|
429
|
-
</script>
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
### 显示内容
|
|
433
|
-
|
|
434
|
-
根据 `type` 和 `payMethod` 组合显示不同的文案:
|
|
435
|
-
|
|
436
|
-
| type | payMethod | 标题 | 副标题 |
|
|
437
|
-
|------|-----------|------|--------|
|
|
438
|
-
| `recharge` | - | "充值成功" | "云豆将在1分钟之内到账" |
|
|
439
|
-
| `recharge` | `bean` | "充值成功" | "权益已到账" |
|
|
440
|
-
| `trade` | - | "购买成功" | "权益将在1分钟之内到账" |
|
|
441
|
-
| `trade` | `bean` | "购买成功" | "权益已到账" |
|
|
442
|
-
|
|
443
|
-
---
|
|
444
|
-
|
|
445
|
-
## UserAgreement - 用户协议
|
|
446
|
-
|
|
447
|
-
**功能描述**: 展示《大道云平台云豆充值服务协议》的完整内容。
|
|
448
|
-
|
|
449
|
-
### 导入方式
|
|
450
|
-
|
|
451
|
-
```typescript
|
|
452
|
-
import { UserAgreement } from '@uxda/appkit/payment'
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
### Props
|
|
456
|
-
|
|
457
|
-
无
|
|
458
|
-
|
|
459
|
-
### Events
|
|
460
|
-
|
|
461
|
-
无
|
|
462
|
-
|
|
463
|
-
### 使用示例
|
|
464
|
-
|
|
465
|
-
```vue
|
|
466
|
-
<template>
|
|
467
|
-
<user-agreement />
|
|
468
|
-
</template>
|
|
469
|
-
|
|
470
|
-
<script setup>
|
|
471
|
-
import { UserAgreement } from '@uxda/appkit/payment'
|
|
472
|
-
</script>
|
|
473
|
-
```
|
|
474
|
-
|
|
475
|
-
### 使用场景
|
|
476
|
-
|
|
477
|
-
通常作为独立页面使用,当用户点击协议链接时跳转到此页面:
|
|
478
|
-
|
|
479
|
-
```vue
|
|
480
|
-
<template>
|
|
481
|
-
<view>
|
|
482
|
-
<trade-view @agree="handleAgree" />
|
|
483
|
-
</view>
|
|
484
|
-
</template>
|
|
485
|
-
|
|
486
|
-
<script setup>
|
|
487
|
-
import Taro from '@tarojs/taro'
|
|
488
|
-
|
|
489
|
-
const handleAgree = () => {
|
|
490
|
-
Taro.navigateTo({
|
|
491
|
-
url: '/pages/agreement/index'
|
|
492
|
-
})
|
|
493
|
-
}
|
|
494
|
-
</script>
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
---
|
|
498
|
-
|
|
499
|
-
## 组合使用示例
|
|
500
|
-
|
|
501
|
-
### 完整的权益购买流程
|
|
502
|
-
|
|
503
|
-
```vue
|
|
504
|
-
<template>
|
|
505
|
-
<view class="trade-page">
|
|
506
|
-
<!-- 权益选择与支付 -->
|
|
507
|
-
<trade-view
|
|
508
|
-
v-if="!showResult"
|
|
509
|
-
header-app="loankitMp"
|
|
510
|
-
app="corporateStar"
|
|
511
|
-
tenant="1"
|
|
512
|
-
@complete="handlePayComplete"
|
|
513
|
-
@agree="showAgreement"
|
|
514
|
-
>
|
|
515
|
-
<template #banner>
|
|
516
|
-
<div class="promotion-banner">
|
|
517
|
-
<h3>同样价格,看更多数据</h3>
|
|
518
|
-
<p>了解AI审批一启明星的全面升级版</p>
|
|
519
|
-
</div>
|
|
520
|
-
</template>
|
|
521
|
-
</trade-view>
|
|
522
|
-
|
|
523
|
-
<!-- 支付结果页 -->
|
|
524
|
-
<recharge-result
|
|
525
|
-
v-if="showResult"
|
|
526
|
-
type="trade"
|
|
527
|
-
:pay-method="payMethod"
|
|
528
|
-
@dismiss="handleDismiss"
|
|
529
|
-
/>
|
|
530
|
-
</view>
|
|
531
|
-
</template>
|
|
532
|
-
|
|
533
|
-
<script setup>
|
|
534
|
-
import { ref } from 'vue'
|
|
535
|
-
import { TradeView, RechargeResult } from '@uxda/appkit/payment'
|
|
536
|
-
import Taro from '@tarojs/taro'
|
|
537
|
-
|
|
538
|
-
const showResult = ref(false)
|
|
539
|
-
const payMethod = ref('')
|
|
540
|
-
|
|
541
|
-
const handlePayComplete = ({ result, type }) => {
|
|
542
|
-
if (result) {
|
|
543
|
-
payMethod.value = type === 'bean' ? 'bean' : 'wePay'
|
|
544
|
-
showResult.value = true
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
const showAgreement = () => {
|
|
549
|
-
Taro.navigateTo({
|
|
550
|
-
url: '/pages/agreement/index'
|
|
551
|
-
})
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
const handleDismiss = () => {
|
|
555
|
-
showResult.value = false
|
|
556
|
-
// 可以刷新余额或返回上一页
|
|
557
|
-
}
|
|
558
|
-
</script>
|
|
559
|
-
```
|
|
560
|
-
|
|
561
|
-
---
|
|
562
|
-
|
|
563
|
-
## 常见问题
|
|
564
|
-
|
|
565
|
-
### Q1: 组合支付时,云豆余额如何扣减?
|
|
566
|
-
|
|
567
|
-
A: 当用户选择云豆支付但余额不足时,系统会自动启用组合支付。在调用微信支付接口时,后端会自动:
|
|
568
|
-
1. 先扣减用户全部云豆余额
|
|
569
|
-
2. 计算剩余需要支付的金额
|
|
570
|
-
3. 发起微信支付请求(金额为剩余部分)
|
|
571
|
-
|
|
572
|
-
### Q2: 如何判断支付类型?
|
|
573
|
-
|
|
574
|
-
A: 通过 `complete` 事件的 `type` 参数判断:
|
|
575
|
-
- `'bean'`: 纯云豆支付
|
|
576
|
-
- `'wePay'`: 纯微信支付
|
|
577
|
-
- `'combined'`: 组合支付
|
|
578
|
-
|
|
579
|
-
### Q3: 协议复选框何时显示?
|
|
580
|
-
|
|
581
|
-
A:
|
|
582
|
-
- 纯云豆支付且余额充足:不显示(无需额外支付)
|
|
583
|
-
- 组合支付:显示(需要微信支付)
|
|
584
|
-
- 纯微信支付:显示(需要微信支付)
|
|
585
|
-
|
|
586
|
-
### Q4: H5环境支付失败怎么办?
|
|
587
|
-
|
|
588
|
-
A: 确保:
|
|
589
|
-
1. 在微信浏览器中打开
|
|
590
|
-
2. 已正确配置 `payFinishJumpUrl`
|
|
591
|
-
3. 检查网络连接和接口权限
|
|
592
|
-
|
|
593
|
-
### Q5: 如何自定义横幅内容?
|
|
594
|
-
|
|
595
|
-
A: 使用 `banner` 插槽:
|
|
596
|
-
|
|
597
|
-
```vue
|
|
598
|
-
<trade-view>
|
|
599
|
-
<template #banner>
|
|
600
|
-
<div class="custom-banner">
|
|
601
|
-
<!-- 自定义内容 -->
|
|
602
|
-
</div>
|
|
603
|
-
</template>
|
|
604
|
-
</trade-view>
|
|
605
|
-
```
|
|
606
|
-
|
|
607
|
-
---
|
|
608
|
-
|
|
609
|
-
## 更新日志
|
|
610
|
-
|
|
611
|
-
### v1.1.0 (最新)
|
|
612
|
-
- ✅ 新增组合支付功能(云豆+微信)
|
|
613
|
-
- ✅ 新增余额不足警告提示
|
|
614
|
-
- ✅ 优化待支付金额计算逻辑
|
|
615
|
-
- ✅ 完善确认对话框显示内容
|
|
616
|
-
|
|
617
|
-
### v1.0.0
|
|
618
|
-
- ✅ 基础支付功能
|
|
619
|
-
- ✅ 云豆支付支持
|
|
620
|
-
- ✅ 微信支付支持
|
|
621
|
-
|
|
622
|
-
---
|
|
623
|
-
|
|
624
|
-
# 余额模块组件使用规则
|
|
625
|
-
|
|
626
|
-
## AccountView - 账户总览
|
|
627
|
-
|
|
628
|
-
**功能描述**: 展示用户账户余额、权益信息及收支明细的完整账户页面。
|
|
629
|
-
|
|
630
|
-
### 导入方式
|
|
631
|
-
|
|
632
|
-
```typescript
|
|
633
|
-
import { AccountView } from '@uxda/appkit/balance'
|
|
634
|
-
```
|
|
635
|
-
|
|
636
|
-
### Props
|
|
637
|
-
|
|
638
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
639
|
-
|--------|------|------|--------|------|
|
|
640
|
-
| `app` | `string` | ✅ | `''` | 应用标识 |
|
|
641
|
-
|
|
642
|
-
### Events
|
|
643
|
-
|
|
644
|
-
| 事件名 | 参数类型 | 说明 |
|
|
645
|
-
|--------|----------|------|
|
|
646
|
-
| `recharge` | - | 点击充值按钮时触发 |
|
|
647
|
-
| `trade` | `item: any` | 点击权益充值按钮时触发,返回权益项信息 |
|
|
648
|
-
|
|
649
|
-
### 使用示例
|
|
650
|
-
|
|
651
|
-
```vue
|
|
652
|
-
<template>
|
|
653
|
-
<account-view
|
|
654
|
-
app="loankitMp"
|
|
655
|
-
@recharge="handleRecharge"
|
|
656
|
-
@trade="handleTrade"
|
|
657
|
-
/>
|
|
658
|
-
</template>
|
|
659
|
-
|
|
660
|
-
<script setup>
|
|
661
|
-
import { AccountView } from '@uxda/appkit/balance'
|
|
662
|
-
|
|
663
|
-
const handleRecharge = () => {
|
|
664
|
-
// 跳转到充值页面
|
|
665
|
-
Taro.navigateTo({
|
|
666
|
-
url: '/pages/recharge/index'
|
|
667
|
-
})
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
const handleTrade = (item) => {
|
|
671
|
-
// 跳转到权益充值页面
|
|
672
|
-
Taro.navigateTo({
|
|
673
|
-
url: `/pages/trade/index?id=${item.id}`
|
|
674
|
-
})
|
|
675
|
-
}
|
|
676
|
-
</script>
|
|
677
|
-
```
|
|
678
|
-
|
|
679
|
-
### 功能特性
|
|
680
|
-
|
|
681
|
-
1. **余额展示**: 显示云豆总余额
|
|
682
|
-
2. **权益展示**: 展示各类权益(企明星、AI审批、电子签约等)
|
|
683
|
-
3. **收支明细**: 支持查看收支明细,包含筛选和分页功能
|
|
684
|
-
4. **规则说明**: 支持查看消费规则说明
|
|
685
|
-
|
|
686
|
-
### 注意事项
|
|
687
|
-
|
|
688
|
-
- 组件挂载后会自动获取余额和权益信息
|
|
689
|
-
- 支持下拉刷新余额数据
|
|
690
|
-
- 收支明细支持时间筛选和多条件筛选
|
|
691
|
-
|
|
692
|
-
---
|
|
693
|
-
|
|
694
|
-
## BalanceCard - 余额卡片
|
|
695
|
-
|
|
696
|
-
**功能描述**: 用于在首页或个人中心展示余额的卡片组件。
|
|
697
|
-
|
|
698
|
-
### 导入方式
|
|
699
|
-
|
|
700
|
-
```typescript
|
|
701
|
-
import { BalanceCard } from '@uxda/appkit/balance'
|
|
702
|
-
```
|
|
703
|
-
|
|
704
|
-
### Props
|
|
705
|
-
|
|
706
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
707
|
-
|--------|------|------|--------|------|
|
|
708
|
-
| `app` | `string` | ✅ | `''` | 应用标识 |
|
|
709
|
-
|
|
710
|
-
### Events
|
|
711
|
-
|
|
712
|
-
| 事件名 | 参数类型 | 说明 |
|
|
713
|
-
|--------|----------|------|
|
|
714
|
-
| `drill` | - | 点击账户明细时触发 |
|
|
715
|
-
| `recharge` | - | 点击充值按钮时触发 |
|
|
716
|
-
|
|
717
|
-
### 使用示例
|
|
718
|
-
|
|
719
|
-
```vue
|
|
720
|
-
<template>
|
|
721
|
-
<balance-card
|
|
722
|
-
app="loankitMp"
|
|
723
|
-
@drill="handleDrill"
|
|
724
|
-
@recharge="handleRecharge"
|
|
725
|
-
/>
|
|
726
|
-
</template>
|
|
727
|
-
|
|
728
|
-
<script setup>
|
|
729
|
-
import { BalanceCard } from '@uxda/appkit/balance'
|
|
730
|
-
|
|
731
|
-
const handleDrill = () => {
|
|
732
|
-
Taro.navigateTo({
|
|
733
|
-
url: '/pages/account/index'
|
|
734
|
-
})
|
|
735
|
-
}
|
|
736
|
-
|
|
737
|
-
const handleRecharge = () => {
|
|
738
|
-
Taro.navigateTo({
|
|
739
|
-
url: '/pages/recharge/index'
|
|
740
|
-
})
|
|
741
|
-
}
|
|
742
|
-
</script>
|
|
743
|
-
```
|
|
744
|
-
|
|
745
|
-
### 暴露方法
|
|
746
|
-
|
|
747
|
-
| 方法名 | 说明 |
|
|
748
|
-
|--------|------|
|
|
749
|
-
| `reload` | 重新加载余额数据 |
|
|
750
|
-
|
|
751
|
-
```vue
|
|
752
|
-
<script setup>
|
|
753
|
-
import { ref } from 'vue'
|
|
754
|
-
import { BalanceCard } from '@uxda/appkit/balance'
|
|
755
|
-
|
|
756
|
-
const balanceCardRef = ref()
|
|
757
|
-
|
|
758
|
-
const refreshBalance = () => {
|
|
759
|
-
balanceCardRef.value?.reload()
|
|
760
|
-
}
|
|
761
|
-
</script>
|
|
762
|
-
|
|
763
|
-
<template>
|
|
764
|
-
<balance-card ref="balanceCardRef" app="loankitMp" />
|
|
765
|
-
</template>
|
|
766
|
-
```
|
|
767
|
-
|
|
768
|
-
---
|
|
769
|
-
|
|
770
|
-
## BalanceReminder - 余额提醒
|
|
771
|
-
|
|
772
|
-
**功能描述**: 当余额不足时显示的提示弹窗组件。
|
|
773
|
-
|
|
774
|
-
### 导入方式
|
|
775
|
-
|
|
776
|
-
```typescript
|
|
777
|
-
import { BalanceReminder } from '@uxda/appkit/balance'
|
|
778
|
-
```
|
|
779
|
-
|
|
780
|
-
### Props
|
|
781
|
-
|
|
782
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
783
|
-
|--------|------|------|--------|------|
|
|
784
|
-
| `modelValue` | `boolean` | ✅ | `false` | 控制弹窗显示/隐藏(v-model) |
|
|
785
|
-
| `buttonText` | `string` | ❌ | `'去充值'` | 按钮文本 |
|
|
786
|
-
| `tip` | `string` | ❌ | `'您的账户可用余额不足,请充值后再进行查询'` | 提示文本 |
|
|
787
|
-
|
|
788
|
-
### Events
|
|
789
|
-
|
|
790
|
-
| 事件名 | 参数类型 | 说明 |
|
|
791
|
-
|--------|----------|------|
|
|
792
|
-
| `update:modelValue` | `boolean` | v-model 更新事件 |
|
|
793
|
-
| `recharge` | - | 点击充值按钮时触发 |
|
|
794
|
-
|
|
795
|
-
### 使用示例
|
|
796
|
-
|
|
797
|
-
```vue
|
|
798
|
-
<template>
|
|
799
|
-
<balance-reminder
|
|
800
|
-
v-model="showReminder"
|
|
801
|
-
button-text="立即充值"
|
|
802
|
-
tip="余额不足,请充值"
|
|
803
|
-
@recharge="handleRecharge"
|
|
804
|
-
/>
|
|
805
|
-
</template>
|
|
806
|
-
|
|
807
|
-
<script setup>
|
|
808
|
-
import { ref } from 'vue'
|
|
809
|
-
import { BalanceReminder } from '@uxda/appkit/balance'
|
|
810
|
-
|
|
811
|
-
const showReminder = ref(false)
|
|
812
|
-
|
|
813
|
-
const handleRecharge = () => {
|
|
814
|
-
showReminder.value = false
|
|
815
|
-
Taro.navigateTo({
|
|
816
|
-
url: '/pages/recharge/index'
|
|
817
|
-
})
|
|
818
|
-
}
|
|
819
|
-
</script>
|
|
820
|
-
```
|
|
821
|
-
|
|
822
|
-
---
|
|
823
|
-
|
|
824
|
-
# 消息通知模块组件使用规则
|
|
825
|
-
|
|
826
|
-
## NoticeBanner - 通知横幅
|
|
827
|
-
|
|
828
|
-
**功能描述**: 页面顶部或嵌入式的通告栏,支持多条消息轮播和强制弹窗。
|
|
829
|
-
|
|
830
|
-
### 导入方式
|
|
831
|
-
|
|
832
|
-
```typescript
|
|
833
|
-
import { NoticeBanner } from '@uxda/appkit/notice'
|
|
834
|
-
```
|
|
835
|
-
|
|
836
|
-
### Props
|
|
837
|
-
|
|
838
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
839
|
-
|--------|------|------|--------|------|
|
|
840
|
-
| `app` | `string` | ✅ | `''` | 应用标识 |
|
|
841
|
-
| `bannerStyle` | `any` | ❌ | `''` | 横幅样式 |
|
|
842
|
-
| `fixed` | `boolean` | ❌ | `false` | 是否固定定位 |
|
|
843
|
-
| `device` | `string` | ❌ | `'MINI'` | 设备类型 |
|
|
844
|
-
|
|
845
|
-
### Events
|
|
846
|
-
|
|
847
|
-
| 事件名 | 参数类型 | 说明 |
|
|
848
|
-
|--------|----------|------|
|
|
849
|
-
| `detail` | `item: any` | 点击详情时触发 |
|
|
850
|
-
| `close` | - | 关闭横幅时触发 |
|
|
851
|
-
| `view` | `link: string` | 查看附件时触发 |
|
|
852
|
-
| `popup` | `hasPopup: boolean` | 弹窗状态变化时触发 |
|
|
853
|
-
| `hasBanner` | `hasBanner: boolean` | 横幅状态变化时触发 |
|
|
854
|
-
|
|
855
|
-
### 使用示例
|
|
856
|
-
|
|
857
|
-
```vue
|
|
858
|
-
<template>
|
|
859
|
-
<notice-banner
|
|
860
|
-
app="loankitMp"
|
|
861
|
-
:fixed="true"
|
|
862
|
-
@detail="handleDetail"
|
|
863
|
-
@view="handleView"
|
|
864
|
-
/>
|
|
865
|
-
</template>
|
|
866
|
-
|
|
867
|
-
<script setup>
|
|
868
|
-
import { NoticeBanner } from '@uxda/appkit/notice'
|
|
869
|
-
|
|
870
|
-
const handleDetail = (item) => {
|
|
871
|
-
// 跳转到消息详情页
|
|
872
|
-
Taro.navigateTo({
|
|
873
|
-
url: `/pages/notice/detail?id=${item.id}`
|
|
874
|
-
})
|
|
875
|
-
}
|
|
876
|
-
|
|
877
|
-
const handleView = (link) => {
|
|
878
|
-
// 打开附件链接
|
|
879
|
-
Taro.navigateTo({
|
|
880
|
-
url: `/pages/webview/index?url=${encodeURIComponent(link)}`
|
|
881
|
-
})
|
|
882
|
-
}
|
|
883
|
-
</script>
|
|
884
|
-
```
|
|
885
|
-
|
|
886
|
-
### 功能特性
|
|
887
|
-
|
|
888
|
-
1. **消息轮播**: 多条横幅消息自动轮播(3秒间隔)
|
|
889
|
-
2. **手势控制**: 触摸时暂停轮播,离开后恢复
|
|
890
|
-
3. **强制弹窗**: 系统公告类型的消息会以弹窗形式强制显示
|
|
891
|
-
4. **自动获取**: 组件挂载后自动获取当前应用的消息
|
|
892
|
-
|
|
893
|
-
---
|
|
894
|
-
|
|
895
|
-
## NoticeList - 消息列表
|
|
896
|
-
|
|
897
|
-
**功能描述**: 展示历史消息记录,支持搜索、筛选和分页。
|
|
898
|
-
|
|
899
|
-
### 导入方式
|
|
900
|
-
|
|
901
|
-
```typescript
|
|
902
|
-
import { NoticeList } from '@uxda/appkit/notice'
|
|
903
|
-
```
|
|
904
|
-
|
|
905
|
-
### Props
|
|
906
|
-
|
|
907
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
908
|
-
|--------|------|------|--------|------|
|
|
909
|
-
| `app` | `string` | ✅ | `''` | 应用标识 |
|
|
910
|
-
| `userId` | `string` | ✅ | `''` | 用户ID |
|
|
911
|
-
| `showApp` | `boolean` | ❌ | `false` | 是否显示应用标签 |
|
|
912
|
-
| `checkBeforeRead` | `Function` | ❌ | - | 读取前的检查函数,返回 false 则阻止读取 |
|
|
913
|
-
|
|
914
|
-
### Events
|
|
915
|
-
|
|
916
|
-
| 事件名 | 参数类型 | 说明 |
|
|
917
|
-
|--------|----------|------|
|
|
918
|
-
| `view` | `link: string` | 查看附件时触发 |
|
|
919
|
-
|
|
920
|
-
### 使用示例
|
|
921
|
-
|
|
922
|
-
```vue
|
|
923
|
-
<template>
|
|
924
|
-
<notice-list
|
|
925
|
-
app="loankitMp"
|
|
926
|
-
:user-id="userId"
|
|
927
|
-
:show-app="true"
|
|
928
|
-
:check-before-read="checkRead"
|
|
929
|
-
@view="handleView"
|
|
930
|
-
/>
|
|
931
|
-
</template>
|
|
932
|
-
|
|
933
|
-
<script setup>
|
|
934
|
-
import { NoticeList } from '@uxda/appkit/notice'
|
|
935
|
-
|
|
936
|
-
const userId = '123456'
|
|
937
|
-
|
|
938
|
-
const checkRead = (notice, index) => {
|
|
939
|
-
// 可以在这里添加读取前的逻辑检查
|
|
940
|
-
return true
|
|
941
|
-
}
|
|
942
|
-
|
|
943
|
-
const handleView = (link) => {
|
|
944
|
-
Taro.navigateTo({
|
|
945
|
-
url: `/pages/webview/index?url=${encodeURIComponent(link)}`
|
|
946
|
-
})
|
|
947
|
-
}
|
|
948
|
-
</script>
|
|
949
|
-
```
|
|
950
|
-
|
|
951
|
-
### 功能特性
|
|
952
|
-
|
|
953
|
-
1. **搜索功能**: 支持关键字搜索消息
|
|
954
|
-
2. **下拉刷新**: 支持下拉刷新消息列表
|
|
955
|
-
3. **上拉加载**: 自动分页加载更多消息
|
|
956
|
-
4. **已读标记**: 自动标记消息为已读
|
|
957
|
-
5. **时间显示**: 智能显示相对时间(如"5分钟前")或绝对时间
|
|
958
|
-
|
|
959
|
-
---
|
|
960
|
-
|
|
961
|
-
## NoticeEntry - 消息入口
|
|
962
|
-
|
|
963
|
-
**功能描述**: 通常带红点或未读数的消息中心入口图标。
|
|
964
|
-
|
|
965
|
-
### 导入方式
|
|
966
|
-
|
|
967
|
-
```typescript
|
|
968
|
-
import { NoticeEntry } from '@uxda/appkit/notice'
|
|
969
|
-
```
|
|
970
|
-
|
|
971
|
-
### Props
|
|
972
|
-
|
|
973
|
-
待补充(需要查看组件实现)
|
|
974
|
-
|
|
975
|
-
### Events
|
|
976
|
-
|
|
977
|
-
待补充
|
|
978
|
-
|
|
979
|
-
---
|
|
980
|
-
|
|
981
|
-
## NoticePopup - 通知弹窗
|
|
982
|
-
|
|
983
|
-
**功能描述**: 强提醒类型的消息弹窗。
|
|
984
|
-
|
|
985
|
-
### 导入方式
|
|
986
|
-
|
|
987
|
-
```typescript
|
|
988
|
-
import { NoticePopup } from '@uxda/appkit/notice'
|
|
989
|
-
```
|
|
990
|
-
|
|
991
|
-
### Props
|
|
992
|
-
|
|
993
|
-
待补充(需要查看组件实现)
|
|
994
|
-
|
|
995
|
-
### Events
|
|
996
|
-
|
|
997
|
-
待补充
|
|
998
|
-
|
|
999
|
-
---
|
|
1000
|
-
|
|
1001
|
-
# 用户模块组件使用规则
|
|
1002
|
-
|
|
1003
|
-
## UserInfo - 用户信息
|
|
1004
|
-
|
|
1005
|
-
**功能描述**: 展示用户头像、昵称、认证信息、企业/团队信息等完整用户资料页面。
|
|
1006
|
-
|
|
1007
|
-
### 导入方式
|
|
1008
|
-
|
|
1009
|
-
```typescript
|
|
1010
|
-
import { UserInfo } from '@uxda/appkit/user'
|
|
1011
|
-
```
|
|
1012
|
-
|
|
1013
|
-
### Props
|
|
1014
|
-
|
|
1015
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1016
|
-
|--------|------|------|--------|------|
|
|
1017
|
-
| `miniType` | `string` | ❌ | `'05'` | 小程序类型 |
|
|
1018
|
-
| `app` | `string` | ❌ | `''` | 应用标识 |
|
|
1019
|
-
| `userId` | `string` | ✅ | `''` | 用户ID |
|
|
1020
|
-
| `hasQiyezuhu` | `number` | ❌ | `0` | 是否有企业租户 |
|
|
1021
|
-
| `isPersonal` | `number` | ❌ | `0` | 是否个人用户 |
|
|
1022
|
-
|
|
1023
|
-
### Events
|
|
1024
|
-
|
|
1025
|
-
| 事件名 | 参数类型 | 说明 |
|
|
1026
|
-
|--------|----------|------|
|
|
1027
|
-
| `avatar-success` | `avatar: string` | 头像上传成功时触发 |
|
|
1028
|
-
| `logout` | - | 退出登录时触发 |
|
|
1029
|
-
| `crop` | `filePath: string` | 需要裁剪头像时触发 |
|
|
1030
|
-
| `binding` | `mobile: string` | 点击绑定手机号时触发 |
|
|
1031
|
-
| `username-success` | - | 用户名修改成功时触发 |
|
|
1032
|
-
| `auth` | `userId: string, verifyResult: number, mobile: string` | 点击认证信息时触发 |
|
|
1033
|
-
|
|
1034
|
-
### 使用示例
|
|
1035
|
-
|
|
1036
|
-
```vue
|
|
1037
|
-
<template>
|
|
1038
|
-
<user-info
|
|
1039
|
-
:user-id="userId"
|
|
1040
|
-
:has-qiyezuhu="1"
|
|
1041
|
-
:is-personal="1"
|
|
1042
|
-
@logout="handleLogout"
|
|
1043
|
-
@binding="handleBinding"
|
|
1044
|
-
@auth="handleAuth"
|
|
1045
|
-
@crop="handleCrop"
|
|
1046
|
-
/>
|
|
1047
|
-
</template>
|
|
1048
|
-
|
|
1049
|
-
<script setup>
|
|
1050
|
-
import { UserInfo } from '@uxda/appkit/user'
|
|
1051
|
-
import Taro from '@tarojs/taro'
|
|
1052
|
-
|
|
1053
|
-
const userId = '123456'
|
|
1054
|
-
|
|
1055
|
-
const handleLogout = () => {
|
|
1056
|
-
// 清除登录状态并跳转到登录页
|
|
1057
|
-
Taro.reLaunch({
|
|
1058
|
-
url: '/pages/login/index'
|
|
1059
|
-
})
|
|
1060
|
-
}
|
|
1061
|
-
|
|
1062
|
-
const handleBinding = (mobile) => {
|
|
1063
|
-
Taro.navigateTo({
|
|
1064
|
-
url: `/pages/binding/index?mobile=${mobile}`
|
|
1065
|
-
})
|
|
1066
|
-
}
|
|
1067
|
-
|
|
1068
|
-
const handleAuth = (userId, verifyResult, mobile) => {
|
|
1069
|
-
Taro.navigateTo({
|
|
1070
|
-
url: `/pages/auth/index?userId=${userId}&verifyResult=${verifyResult}&mobile=${mobile}`
|
|
1071
|
-
})
|
|
1072
|
-
}
|
|
1073
|
-
|
|
1074
|
-
const handleCrop = (filePath) => {
|
|
1075
|
-
// 跳转到头像裁剪页
|
|
1076
|
-
Taro.navigateTo({
|
|
1077
|
-
url: `/pages/crop/index?filePath=${filePath}`
|
|
1078
|
-
})
|
|
1079
|
-
}
|
|
1080
|
-
</script>
|
|
1081
|
-
```
|
|
1082
|
-
|
|
1083
|
-
### 暴露方法
|
|
1084
|
-
|
|
1085
|
-
| 方法名 | 说明 |
|
|
1086
|
-
|--------|------|
|
|
1087
|
-
| `updateImage` | 更新头像图片 |
|
|
1088
|
-
|
|
1089
|
-
---
|
|
1090
|
-
|
|
1091
|
-
## UserAuth - 用户认证
|
|
1092
|
-
|
|
1093
|
-
**功能描述**: 处理用户身份认证的表单组件,支持OCR识别身份证。
|
|
1094
|
-
|
|
1095
|
-
### 导入方式
|
|
1096
|
-
|
|
1097
|
-
```typescript
|
|
1098
|
-
import { UserAuth } from '@uxda/appkit/user'
|
|
1099
|
-
```
|
|
1100
|
-
|
|
1101
|
-
### Props
|
|
1102
|
-
|
|
1103
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1104
|
-
|--------|------|------|--------|------|
|
|
1105
|
-
| `userId` | `string` | ✅ | `''` | 用户ID |
|
|
1106
|
-
| `verifyResult` | `number` | ❌ | `-1` | 认证状态(-1: 未认证, 0: 已失效, 1: 已认证) |
|
|
1107
|
-
| `mobile` | `string` | ❌ | `''` | 手机号码 |
|
|
1108
|
-
|
|
1109
|
-
### Events
|
|
1110
|
-
|
|
1111
|
-
| 事件名 | 参数类型 | 说明 |
|
|
1112
|
-
|--------|----------|------|
|
|
1113
|
-
| `toAgreement` | - | 点击协议链接时触发 |
|
|
1114
|
-
|
|
1115
|
-
### 使用示例
|
|
1116
|
-
|
|
1117
|
-
```vue
|
|
1118
|
-
<template>
|
|
1119
|
-
<user-auth
|
|
1120
|
-
:user-id="userId"
|
|
1121
|
-
:verify-result="verifyResult"
|
|
1122
|
-
:mobile="mobile"
|
|
1123
|
-
@to-agreement="handleAgreement"
|
|
1124
|
-
/>
|
|
1125
|
-
</template>
|
|
1126
|
-
|
|
1127
|
-
<script setup>
|
|
1128
|
-
import { UserAuth } from '@uxda/appkit/user'
|
|
1129
|
-
|
|
1130
|
-
const userId = '123456'
|
|
1131
|
-
const verifyResult = -1
|
|
1132
|
-
const mobile = '13800138000'
|
|
1133
|
-
|
|
1134
|
-
const handleAgreement = () => {
|
|
1135
|
-
Taro.navigateTo({
|
|
1136
|
-
url: '/pages/agreement/index'
|
|
1137
|
-
})
|
|
1138
|
-
}
|
|
1139
|
-
</script>
|
|
1140
|
-
```
|
|
1141
|
-
|
|
1142
|
-
### 功能特性
|
|
1143
|
-
|
|
1144
|
-
1. **OCR识别**: 支持拍照识别身份证信息
|
|
1145
|
-
2. **表单验证**: 自动验证身份证号码格式
|
|
1146
|
-
3. **已认证状态**: 已认证用户显示只读模式
|
|
1147
|
-
|
|
1148
|
-
---
|
|
1149
|
-
|
|
1150
|
-
## UserBinding - 账号绑定
|
|
1151
|
-
|
|
1152
|
-
**功能描述**: 换绑手机号的流程组件,包含身份认证和换绑两个步骤。
|
|
1153
|
-
|
|
1154
|
-
### 导入方式
|
|
1155
|
-
|
|
1156
|
-
```typescript
|
|
1157
|
-
import { UserBinding } from '@uxda/appkit/user'
|
|
1158
|
-
```
|
|
1159
|
-
|
|
1160
|
-
### Props
|
|
1161
|
-
|
|
1162
|
-
无(通过路由参数传递 `mobile`)
|
|
1163
|
-
|
|
1164
|
-
### Events
|
|
1165
|
-
|
|
1166
|
-
| 事件名 | 参数类型 | 说明 |
|
|
1167
|
-
|--------|----------|------|
|
|
1168
|
-
| `success` | `mobile: string` | 换绑成功时触发,返回新手机号 |
|
|
1169
|
-
|
|
1170
|
-
### 使用示例
|
|
1171
|
-
|
|
1172
|
-
```vue
|
|
1173
|
-
<template>
|
|
1174
|
-
<user-binding @success="handleSuccess" />
|
|
1175
|
-
</template>
|
|
1176
|
-
|
|
1177
|
-
<script setup>
|
|
1178
|
-
import { UserBinding } from '@uxda/appkit/user'
|
|
1179
|
-
import Taro from '@tarojs/taro'
|
|
1180
|
-
|
|
1181
|
-
const handleSuccess = (mobile) => {
|
|
1182
|
-
Taro.showToast({
|
|
1183
|
-
title: `换绑成功:${mobile}`,
|
|
1184
|
-
icon: 'success'
|
|
1185
|
-
})
|
|
1186
|
-
setTimeout(() => {
|
|
1187
|
-
Taro.navigateBack()
|
|
1188
|
-
}, 1500)
|
|
1189
|
-
}
|
|
1190
|
-
</script>
|
|
1191
|
-
```
|
|
1192
|
-
|
|
1193
|
-
### 路由参数
|
|
1194
|
-
|
|
1195
|
-
| 参数名 | 类型 | 必填 | 说明 |
|
|
1196
|
-
|--------|------|------|------|
|
|
1197
|
-
| `mobile` | `string` | ✅ | 当前手机号 |
|
|
1198
|
-
|
|
1199
|
-
### 使用场景
|
|
1200
|
-
|
|
1201
|
-
```typescript
|
|
1202
|
-
// 跳转到换绑页面
|
|
1203
|
-
Taro.navigateTo({
|
|
1204
|
-
url: `/pages/binding/index?mobile=${currentMobile}`
|
|
1205
|
-
})
|
|
1206
|
-
```
|
|
1207
|
-
|
|
1208
|
-
---
|
|
1209
|
-
|
|
1210
|
-
# 注册模块组件使用规则
|
|
1211
|
-
|
|
1212
|
-
## SelfRegistration - 自助注册
|
|
1213
|
-
|
|
1214
|
-
**功能描述**: 引导新用户完成注册流程的组件,支持个人和公司两种使用场景。
|
|
1215
|
-
|
|
1216
|
-
### 导入方式
|
|
1217
|
-
|
|
1218
|
-
```typescript
|
|
1219
|
-
import { SelfRegistration } from '@uxda/appkit/register'
|
|
1220
|
-
```
|
|
1221
|
-
|
|
1222
|
-
### Props
|
|
1223
|
-
|
|
1224
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1225
|
-
|--------|------|------|--------|------|
|
|
1226
|
-
| `banner` | `string` | ❌ | `'https://cdn.ddjf.com/static/images/wx-yunservice/ai-form-bg2.png'` | 顶部横幅图片 |
|
|
1227
|
-
|
|
1228
|
-
### Events
|
|
1229
|
-
|
|
1230
|
-
| 事件名 | 参数类型 | 说明 |
|
|
1231
|
-
|--------|----------|------|
|
|
1232
|
-
| `submit` | `params: object` | 提交注册信息时触发 |
|
|
1233
|
-
|
|
1234
|
-
### 使用示例
|
|
1235
|
-
|
|
1236
|
-
```vue
|
|
1237
|
-
<template>
|
|
1238
|
-
<self-registration
|
|
1239
|
-
banner="/static/images/custom-banner.png"
|
|
1240
|
-
@submit="handleSubmit"
|
|
1241
|
-
/>
|
|
1242
|
-
</template>
|
|
1243
|
-
|
|
1244
|
-
<script setup>
|
|
1245
|
-
import { SelfRegistration } from '@uxda/appkit/register'
|
|
1246
|
-
|
|
1247
|
-
const handleSubmit = (params) => {
|
|
1248
|
-
console.log('注册信息:', params)
|
|
1249
|
-
// {
|
|
1250
|
-
// useCase: 'person' | 'company',
|
|
1251
|
-
// customerName: string,
|
|
1252
|
-
// idCardNo?: string, // 个人场景
|
|
1253
|
-
// customerPosition?: string, // 公司场景
|
|
1254
|
-
// companyName?: string, // 公司场景
|
|
1255
|
-
// customerArea?: string // 公司场景
|
|
1256
|
-
// }
|
|
1257
|
-
|
|
1258
|
-
// 调用注册接口
|
|
1259
|
-
// ...
|
|
1260
|
-
}
|
|
1261
|
-
</script>
|
|
1262
|
-
```
|
|
1263
|
-
|
|
1264
|
-
### 功能特性
|
|
1265
|
-
|
|
1266
|
-
1. **双场景支持**: 支持个人使用和公司使用两种场景
|
|
1267
|
-
2. **OCR识别**: 支持拍照识别身份证信息
|
|
1268
|
-
3. **表单验证**: 自动验证必填项和格式
|
|
1269
|
-
4. **地区选择**: 公司场景支持省市区选择
|
|
1270
|
-
|
|
1271
|
-
---
|
|
1272
|
-
|
|
1273
|
-
# 业务场景组件使用规则
|
|
1274
|
-
|
|
1275
|
-
## SharePoster - 分享海报
|
|
1276
|
-
|
|
1277
|
-
**功能描述**: 生成包含二维码和营销信息的图片,用于朋友圈分享。
|
|
1278
|
-
|
|
1279
|
-
### 导入方式
|
|
1280
|
-
|
|
1281
|
-
```typescript
|
|
1282
|
-
import { SharePoster } from '@uxda/appkit/scenarios'
|
|
1283
|
-
```
|
|
1284
|
-
|
|
1285
|
-
### Props
|
|
1286
|
-
|
|
1287
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1288
|
-
|--------|------|------|--------|------|
|
|
1289
|
-
| `posters` | `any[]` | ✅ | - | 海报列表 |
|
|
1290
|
-
| `text` | `string` | ❌ | - | 底部提示文本 |
|
|
1291
|
-
|
|
1292
|
-
### Events
|
|
1293
|
-
|
|
1294
|
-
| 事件名 | 参数类型 | 说明 |
|
|
1295
|
-
|--------|----------|------|
|
|
1296
|
-
| `share` | - | 点击确定分享时触发 |
|
|
1297
|
-
|
|
1298
|
-
### 使用示例
|
|
1299
|
-
|
|
1300
|
-
```vue
|
|
1301
|
-
<template>
|
|
1302
|
-
<share-poster
|
|
1303
|
-
:posters="posterList"
|
|
1304
|
-
text="长按保存图片,分享到朋友圈"
|
|
1305
|
-
@share="handleShare"
|
|
1306
|
-
/>
|
|
1307
|
-
</template>
|
|
1308
|
-
|
|
1309
|
-
<script setup>
|
|
1310
|
-
import { SharePoster } from '@uxda/appkit/scenarios'
|
|
1311
|
-
|
|
1312
|
-
const posterList = [
|
|
1313
|
-
// 海报配置对象
|
|
1314
|
-
]
|
|
1315
|
-
|
|
1316
|
-
const handleShare = () => {
|
|
1317
|
-
// 处理分享逻辑
|
|
1318
|
-
}
|
|
1319
|
-
</script>
|
|
1320
|
-
```
|
|
1321
|
-
|
|
1322
|
-
---
|
|
1323
|
-
|
|
1324
|
-
# 通用基础组件使用规则
|
|
1325
|
-
|
|
1326
|
-
## DdSearch - 搜索框
|
|
1327
|
-
|
|
1328
|
-
**功能描述**: 支持导航栏模式的搜索框,带有搜索回调和防抖功能。
|
|
1329
|
-
|
|
1330
|
-
### 导入方式
|
|
1331
|
-
|
|
1332
|
-
```typescript
|
|
1333
|
-
import DdSearch from '@uxda/appkit/components/dd-search/index.vue'
|
|
1334
|
-
```
|
|
1335
|
-
|
|
1336
|
-
### Props
|
|
1337
|
-
|
|
1338
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1339
|
-
|--------|------|------|--------|------|
|
|
1340
|
-
| `disabled` | `boolean` | ❌ | `false` | 是否禁用 |
|
|
1341
|
-
| `placeholder` | `string` | ❌ | `'请输入'` | 输入框占位符 |
|
|
1342
|
-
| `value` | `string` | ❌ | `''` | 绑定值 |
|
|
1343
|
-
| `bordered` | `boolean` | ❌ | `true` | 是否显示底部边框 |
|
|
1344
|
-
| `inNavbar` | `boolean` | ❌ | `false` | 是否在导航栏中 |
|
|
1345
|
-
| `focus` | `boolean` | ❌ | `false` | 是否自动聚焦 |
|
|
1346
|
-
|
|
1347
|
-
### Events
|
|
1348
|
-
|
|
1349
|
-
| 事件名 | 参数类型 | 说明 |
|
|
1350
|
-
|--------|----------|------|
|
|
1351
|
-
| `search` | `value: string` | 点击搜索时触发 |
|
|
1352
|
-
| `focus` | `event: Event` | 输入框聚焦时触发 |
|
|
1353
|
-
|
|
1354
|
-
### 使用示例
|
|
1355
|
-
|
|
1356
|
-
```vue
|
|
1357
|
-
<template>
|
|
1358
|
-
<dd-search
|
|
1359
|
-
:bordered="false"
|
|
1360
|
-
:in-navbar="true"
|
|
1361
|
-
:value="searchStr"
|
|
1362
|
-
placeholder="输入客户姓名"
|
|
1363
|
-
@search="onSearch"
|
|
1364
|
-
@focus="onSearchFocus"
|
|
1365
|
-
/>
|
|
1366
|
-
</template>
|
|
1367
|
-
|
|
1368
|
-
<script setup>
|
|
1369
|
-
import { ref } from 'vue'
|
|
1370
|
-
import DdSearch from '@uxda/appkit/components/dd-search/index.vue'
|
|
1371
|
-
|
|
1372
|
-
const searchStr = ref('')
|
|
1373
|
-
|
|
1374
|
-
const onSearch = (value) => {
|
|
1375
|
-
console.log('搜索:', value)
|
|
1376
|
-
}
|
|
1377
|
-
|
|
1378
|
-
const onSearchFocus = (event) => {
|
|
1379
|
-
console.log('聚焦:', event)
|
|
1380
|
-
}
|
|
1381
|
-
</script>
|
|
1382
|
-
```
|
|
1383
|
-
|
|
1384
|
-
---
|
|
1385
|
-
|
|
1386
|
-
## DdIcon - 图标组件
|
|
1387
|
-
|
|
1388
|
-
**功能描述**: 项目统一的图标封装,使用 iconfont 图标。
|
|
1389
|
-
|
|
1390
|
-
### 导入方式
|
|
1391
|
-
|
|
1392
|
-
```typescript
|
|
1393
|
-
import DdIcon from '@uxda/appkit/components/dd-icon/index.vue'
|
|
1394
|
-
```
|
|
1395
|
-
|
|
1396
|
-
### Props
|
|
1397
|
-
|
|
1398
|
-
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1399
|
-
|--------|------|------|--------|------|
|
|
1400
|
-
| `name` | `string` | ✅ | `''` | icon 名称 |
|
|
1401
|
-
| `color` | `string` | ❌ | `inherit` | icon 颜色 |
|
|
1402
|
-
| `size` | `string` | ❌ | `16px` | icon 字体大小 |
|
|
1403
|
-
| `weight` | `string` | ❌ | `normal` | icon 字体字重 |
|
|
1404
|
-
|
|
1405
|
-
### 使用示例
|
|
1406
|
-
|
|
1407
|
-
```vue
|
|
1408
|
-
<template>
|
|
1409
|
-
<dd-icon name="icon-arrow" size="11px" color="#DFDFDF" />
|
|
1410
|
-
</template>
|
|
1411
|
-
|
|
1412
|
-
<script setup>
|
|
1413
|
-
import DdIcon from '@uxda/appkit/components/dd-icon/index.vue'
|
|
1414
|
-
</script>
|
|
1415
|
-
```
|
|
1416
|
-
|
|
1417
|
-
---
|
|
1418
|
-
|
|
1419
|
-
## DdSkeleton - 骨架屏
|
|
1420
|
-
|
|
1421
|
-
**功能描述**: 数据加载过程中的占位显示,提升用户体验。
|
|
1422
|
-
|
|
1423
|
-
### 导入方式
|
|
1424
|
-
|
|
1425
|
-
```typescript
|
|
1426
|
-
import DdSkeleton from '@uxda/appkit/components/dd-skeleton/index.vue'
|
|
1427
|
-
```
|
|
1428
|
-
|
|
1429
|
-
### Props
|
|
1430
|
-
|
|
1431
|
-
待补充(需要查看组件实现)
|
|
1432
|
-
|
|
1433
|
-
### 使用示例
|
|
1434
|
-
|
|
1435
|
-
```vue
|
|
1436
|
-
<template>
|
|
1437
|
-
<dd-skeleton v-if="loading" :row="3" />
|
|
1438
|
-
<div v-else>
|
|
1439
|
-
<!-- 实际内容 -->
|
|
1440
|
-
</div>
|
|
1441
|
-
</template>
|
|
1442
|
-
|
|
1443
|
-
<script setup>
|
|
1444
|
-
import { ref } from 'vue'
|
|
1445
|
-
import DdSkeleton from '@uxda/appkit/components/dd-skeleton/index.vue'
|
|
1446
|
-
|
|
1447
|
-
const loading = ref(true)
|
|
1448
|
-
</script>
|
|
1449
|
-
```
|
|
1450
|
-
|
|
1451
|
-
---
|
|
1452
|
-
|
|
1453
|
-
## DdNoticeBar - 滚动通告栏
|
|
1454
|
-
|
|
1455
|
-
**功能描述**: 用于显示简短的滚动消息。
|
|
1456
|
-
|
|
1457
|
-
### 导入方式
|
|
1458
|
-
|
|
1459
|
-
```typescript
|
|
1460
|
-
import DdNoticeBar from '@uxda/appkit/components/dd-notice-bar/index.vue'
|
|
1461
|
-
```
|
|
1462
|
-
|
|
1463
|
-
### Props
|
|
1464
|
-
|
|
1465
|
-
待补充(需要查看组件实现)
|
|
1466
|
-
|
|
1467
|
-
### 使用示例
|
|
1468
|
-
|
|
1469
|
-
```vue
|
|
1470
|
-
<template>
|
|
1471
|
-
<dd-notice-bar :show-close="true" @close="handleClose">
|
|
1472
|
-
这是一条滚动通告消息
|
|
1473
|
-
</dd-notice-bar>
|
|
1474
|
-
</template>
|
|
1475
|
-
|
|
1476
|
-
<script setup>
|
|
1477
|
-
import DdNoticeBar from '@uxda/appkit/components/dd-notice-bar/index.vue'
|
|
1478
|
-
|
|
1479
|
-
const handleClose = () => {
|
|
1480
|
-
console.log('关闭通告')
|
|
1481
|
-
}
|
|
1482
|
-
</script>
|
|
1483
|
-
```
|
|
1484
|
-
|
|
1485
|
-
---
|
|
1486
|
-
|
|
1487
|
-
## 其他通用组件
|
|
1488
|
-
|
|
1489
|
-
### DdArea - 地区选择器
|
|
1490
|
-
|
|
1491
|
-
省市区三级联动选择组件。
|
|
1492
|
-
|
|
1493
|
-
### DdSelector - 通用选择器
|
|
1494
|
-
|
|
1495
|
-
下拉或弹窗式的单选/多选组件。
|
|
1496
|
-
|
|
1497
|
-
### BtCropper - 图片裁剪器
|
|
1498
|
-
|
|
1499
|
-
基于 canvas 的高性能图片裁剪工具。
|
|
1500
|
-
|
|
1501
|
-
---
|
|
1502
|
-
|
|
1503
|
-
## 更新日志
|
|
1504
|
-
|
|
1505
|
-
### v1.2.0
|
|
1506
|
-
- ✅ 补全余额模块组件文档
|
|
1507
|
-
- ✅ 补全消息通知模块组件文档
|
|
1508
|
-
- ✅ 补全用户模块组件文档
|
|
1509
|
-
- ✅ 补全注册模块组件文档
|
|
1510
|
-
- ✅ 补全业务场景组件文档
|
|
1511
|
-
- ✅ 补全通用基础组件文档
|
|
1512
|
-
|
|
1513
|
-
### v1.1.0
|
|
1514
|
-
- ✅ 新增组合支付功能(云豆+微信)
|
|
1515
|
-
- ✅ 新增余额不足警告提示
|
|
1516
|
-
- ✅ 优化待支付金额计算逻辑
|
|
1517
|
-
- ✅ 完善确认对话框显示内容
|
|
1518
|
-
|
|
1519
|
-
### v1.0.0
|
|
1520
|
-
- ✅ 基础支付功能
|
|
1521
|
-
- ✅ 云豆支付支持
|
|
1522
|
-
- ✅ 微信支付支持
|
|
1523
|
-
|
|
1
|
+
# Appkit 组件使用规则
|
|
2
|
+
|
|
3
|
+
本文档详细说明 Appkit 中各组件的使用方法、属性、事件和注意事项。
|
|
4
|
+
|
|
5
|
+
## 目录
|
|
6
|
+
|
|
7
|
+
### 支付模块 (Payment)
|
|
8
|
+
- [TradeView - 权益充值视图](#tradeview---权益充值视图)
|
|
9
|
+
- [RechargeView - 云豆充值视图](#rechargeview---云豆充值视图)
|
|
10
|
+
- [AmountPicker - 金额选择器](#amountpicker---金额选择器)
|
|
11
|
+
- [RightsPicker - 权益选择器](#rightspicker---权益选择器)
|
|
12
|
+
- [RechargeResult - 充值结果页](#rechargeresult---充值结果页)
|
|
13
|
+
- [UserAgreement - 用户协议](#useragreement---用户协议)
|
|
14
|
+
|
|
15
|
+
### 余额模块 (Balance)
|
|
16
|
+
- [AccountView - 账户总览](#accountview---账户总览)
|
|
17
|
+
- [BalanceCard - 余额卡片](#balancecard---余额卡片)
|
|
18
|
+
- [BalanceReminder - 余额提醒](#balancereminder---余额提醒)
|
|
19
|
+
|
|
20
|
+
### 消息通知模块 (Notice)
|
|
21
|
+
- [NoticeBanner - 通知横幅](#noticebanner---通知横幅)
|
|
22
|
+
- [NoticeList - 消息列表](#noticelist---消息列表)
|
|
23
|
+
- [NoticeEntry - 消息入口](#noticeentry---消息入口)
|
|
24
|
+
- [NoticePopup - 通知弹窗](#noticepopup---通知弹窗)
|
|
25
|
+
|
|
26
|
+
### 用户模块 (User)
|
|
27
|
+
- [UserInfo - 用户信息](#userinfo---用户信息)
|
|
28
|
+
- [UserAuth - 用户认证](#userauth---用户认证)
|
|
29
|
+
- [UserBinding - 账号绑定](#userbinding---账号绑定)
|
|
30
|
+
|
|
31
|
+
### 注册模块 (Register)
|
|
32
|
+
- [SelfRegistration - 自助注册](#selfregistration---自助注册)
|
|
33
|
+
|
|
34
|
+
### 业务场景 (Scenarios)
|
|
35
|
+
- [SharePoster - 分享海报](#shareposter---分享海报)
|
|
36
|
+
|
|
37
|
+
### 通用基础组件 (Components)
|
|
38
|
+
- [DdSearch - 搜索框](#ddsearch---搜索框)
|
|
39
|
+
- [DdIcon - 图标组件](#ddicon---图标组件)
|
|
40
|
+
- [DdSkeleton - 骨架屏](#ddskeleton---骨架屏)
|
|
41
|
+
- [DdNoticeBar - 滚动通告栏](#ddnoticebar---滚动通告栏)
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## TradeView - 权益充值视图
|
|
46
|
+
|
|
47
|
+
**功能描述**: 提供权益充值金额选择、云豆支付和组合支付(云豆+微信)的完整支付流程。
|
|
48
|
+
|
|
49
|
+
### 导入方式
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import { TradeView } from '@uxda/appkit/payment'
|
|
53
|
+
// 或
|
|
54
|
+
import TradeView from '@uxda/appkit/payment/components/TradeView.vue'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Props
|
|
58
|
+
|
|
59
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
60
|
+
|--------|------|------|--------|------|
|
|
61
|
+
| `headerApp` | `string` | ✅ | - | header头中的appcode,一般情况下与app参数一致,当无应用权限时,此参数为空 |
|
|
62
|
+
| `app` | `string` | ✅ | - | 应用标识,用于区分不同应用(如:'corporateStar'、'riskQueryMulti') |
|
|
63
|
+
| `tenant` | `string` | ✅ | - | 租户ID |
|
|
64
|
+
| `payFinishJumpUrl` | `string` | ❌ | `''` | H5支付完成后跳转地址 |
|
|
65
|
+
|
|
66
|
+
### Events
|
|
67
|
+
|
|
68
|
+
| 事件名 | 参数类型 | 说明 |
|
|
69
|
+
|--------|----------|------|
|
|
70
|
+
| `complete` | `{ result: boolean \| any, type: string }` | 支付完成时触发<br/>- `result`: 支付结果<br/>- `type`: 支付类型('bean' | 'wePay' | 'combined')<br/> - `'bean'`: 纯云豆支付<br/> - `'wePay'`: 纯微信支付<br/> - `'combined'`: 组合支付(云豆+微信) |
|
|
71
|
+
| `agree` | - | 用户点击协议链接时触发,可用于打开协议详情页 |
|
|
72
|
+
|
|
73
|
+
### Slots
|
|
74
|
+
|
|
75
|
+
| 插槽名 | 说明 |
|
|
76
|
+
|--------|------|
|
|
77
|
+
| `banner` | 自定义横幅内容,通常用于展示促销信息或活动内容 |
|
|
78
|
+
|
|
79
|
+
### 使用示例
|
|
80
|
+
|
|
81
|
+
```vue
|
|
82
|
+
<template>
|
|
83
|
+
<trade-view
|
|
84
|
+
header-app="loankitMp"
|
|
85
|
+
app="corporateStar"
|
|
86
|
+
tenant="1"
|
|
87
|
+
pay-finish-jump-url="/pages/success/index"
|
|
88
|
+
@complete="handlePayComplete"
|
|
89
|
+
@agree="handleAgreeClick"
|
|
90
|
+
>
|
|
91
|
+
<template #banner>
|
|
92
|
+
<div class="promotion-banner">
|
|
93
|
+
<p>同样价格,看更多数据</p>
|
|
94
|
+
<p>了解AI审批一启明星的全面升级版</p>
|
|
95
|
+
</div>
|
|
96
|
+
</template>
|
|
97
|
+
</trade-view>
|
|
98
|
+
</template>
|
|
99
|
+
|
|
100
|
+
<script setup>
|
|
101
|
+
import { TradeView } from '@uxda/appkit/payment'
|
|
102
|
+
|
|
103
|
+
const handlePayComplete = ({ result, type }) => {
|
|
104
|
+
console.log('支付完成', { result, type })
|
|
105
|
+
if (result) {
|
|
106
|
+
// 支付成功处理
|
|
107
|
+
if (type === 'bean') {
|
|
108
|
+
// 纯云豆支付成功
|
|
109
|
+
} else if (type === 'wePay') {
|
|
110
|
+
// 纯微信支付成功
|
|
111
|
+
} else if (type === 'combined') {
|
|
112
|
+
// 组合支付成功
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const handleAgreeClick = () => {
|
|
118
|
+
// 打开协议详情页
|
|
119
|
+
Taro.navigateTo({
|
|
120
|
+
url: '/pages/agreement/index'
|
|
121
|
+
})
|
|
122
|
+
}
|
|
123
|
+
</script>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 功能特性
|
|
127
|
+
|
|
128
|
+
#### 1. 云豆支付模式
|
|
129
|
+
|
|
130
|
+
- **纯云豆支付**: 当用户选择云豆支付且余额充足时,直接使用云豆完成支付
|
|
131
|
+
- **组合支付**: 当用户选择云豆支付但余额不足时,自动启用组合支付模式
|
|
132
|
+
- 先扣减全部云豆余额
|
|
133
|
+
- 剩余金额通过微信支付完成
|
|
134
|
+
|
|
135
|
+
#### 2. 余额不足提示
|
|
136
|
+
|
|
137
|
+
当启用组合支付时,组件会自动显示:
|
|
138
|
+
- 余额不足警告:`"云豆余额不足,还需额外支付XX元"`
|
|
139
|
+
- 风险提示:`"请在支付完成前确保元豆余额不被消耗,否则本次权益可能购买失败"`
|
|
140
|
+
|
|
141
|
+
#### 3. 待支付金额计算
|
|
142
|
+
|
|
143
|
+
- 纯云豆支付(余额充足): 显示 `¥0`
|
|
144
|
+
- 组合支付(余额不足): 显示额外需要支付的金额
|
|
145
|
+
- 纯微信支付: 显示全额
|
|
146
|
+
|
|
147
|
+
#### 4. 协议确认
|
|
148
|
+
|
|
149
|
+
- 纯云豆支付且余额充足: 不显示协议复选框(无需额外支付)
|
|
150
|
+
- 组合支付或纯微信支付: 必须勾选协议才能继续
|
|
151
|
+
|
|
152
|
+
### 注意事项
|
|
153
|
+
|
|
154
|
+
1. **环境要求**
|
|
155
|
+
- H5环境:必须在微信浏览器中打开
|
|
156
|
+
- 小程序环境:需要配置微信登录权限
|
|
157
|
+
|
|
158
|
+
2. **数据获取**
|
|
159
|
+
- 组件挂载后会自动调用接口获取:
|
|
160
|
+
- 用户云豆余额
|
|
161
|
+
- 权益套餐列表
|
|
162
|
+
- 根据 `app` 参数自动选择对应的权益类型:
|
|
163
|
+
- `'corporateStar'` → `'riskQueryCompany'`
|
|
164
|
+
- 其他 → `'riskQueryMulti'`
|
|
165
|
+
|
|
166
|
+
3. **支付流程**
|
|
167
|
+
- 纯云豆支付:点击购买 → 确认对话框 → 调用云豆支付接口
|
|
168
|
+
- 组合支付:点击购买 → 确认对话框 → 关闭对话框 → 调用微信支付接口(后端自动处理云豆扣减)
|
|
169
|
+
- 纯微信支付:点击购买 → 直接调用微信支付接口
|
|
170
|
+
|
|
171
|
+
4. **错误处理**
|
|
172
|
+
- 组件内部已处理常见错误(网络错误、支付失败等)
|
|
173
|
+
- 通过 `complete` 事件返回结果,由父组件决定后续操作
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## RechargeView - 云豆充值视图
|
|
178
|
+
|
|
179
|
+
**功能描述**: 提供云豆充值金额选择和微信支付功能。
|
|
180
|
+
|
|
181
|
+
### 导入方式
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
import { RechargeView } from '@uxda/appkit/payment'
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Props
|
|
188
|
+
|
|
189
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
190
|
+
|--------|------|------|--------|------|
|
|
191
|
+
| `app` | `string` | ✅ | - | 应用标识 |
|
|
192
|
+
| `tenant` | `string` | ✅ | - | 租户ID |
|
|
193
|
+
| `payFinishJumpUrl` | `string` | ❌ | `''` | H5支付完成后跳转地址 |
|
|
194
|
+
|
|
195
|
+
### Events
|
|
196
|
+
|
|
197
|
+
| 事件名 | 参数类型 | 说明 |
|
|
198
|
+
|--------|----------|------|
|
|
199
|
+
| `complete` | `boolean \| any` | 支付完成时触发,返回支付结果 |
|
|
200
|
+
| `agree` | - | 用户点击协议链接时触发 |
|
|
201
|
+
|
|
202
|
+
### 使用示例
|
|
203
|
+
|
|
204
|
+
```vue
|
|
205
|
+
<template>
|
|
206
|
+
<recharge-view
|
|
207
|
+
app="loankitMp"
|
|
208
|
+
tenant="1"
|
|
209
|
+
pay-finish-jump-url="/pages/recharge-success/index"
|
|
210
|
+
@complete="handleRechargeComplete"
|
|
211
|
+
@agree="handleAgreeClick"
|
|
212
|
+
/>
|
|
213
|
+
</template>
|
|
214
|
+
|
|
215
|
+
<script setup>
|
|
216
|
+
import { RechargeView } from '@uxda/appkit/payment'
|
|
217
|
+
|
|
218
|
+
const handleRechargeComplete = (result) => {
|
|
219
|
+
if (result) {
|
|
220
|
+
console.log('充值成功')
|
|
221
|
+
// 跳转到成功页或刷新余额
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
</script>
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### 注意事项
|
|
228
|
+
|
|
229
|
+
1. 组件会自动获取充值金额列表
|
|
230
|
+
2. 必须勾选协议才能进行支付
|
|
231
|
+
3. H5环境需要在微信浏览器中打开
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## AmountPicker - 金额选择器
|
|
236
|
+
|
|
237
|
+
**功能描述**: 用于云豆充值场景的金额选择网格组件。
|
|
238
|
+
|
|
239
|
+
### 导入方式
|
|
240
|
+
|
|
241
|
+
```typescript
|
|
242
|
+
import { AmountPicker } from '@uxda/appkit/payment'
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Props
|
|
246
|
+
|
|
247
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
248
|
+
|--------|------|------|--------|------|
|
|
249
|
+
| `items` | `Amount[]` | ✅ | `[]` | 金额选项列表 |
|
|
250
|
+
| `selected` | `number` | ❌ | `0` | 当前选中的索引 |
|
|
251
|
+
|
|
252
|
+
### 类型定义
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
type Amount = {
|
|
256
|
+
token: number, // 云豆数量
|
|
257
|
+
amount: number // 支付金额(元)
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Events
|
|
262
|
+
|
|
263
|
+
| 事件名 | 参数类型 | 说明 |
|
|
264
|
+
|--------|----------|------|
|
|
265
|
+
| `change` | `number` | 选择改变时触发,返回选中的索引 |
|
|
266
|
+
|
|
267
|
+
### 使用示例
|
|
268
|
+
|
|
269
|
+
```vue
|
|
270
|
+
<template>
|
|
271
|
+
<amount-picker
|
|
272
|
+
:items="amountList"
|
|
273
|
+
:selected="selectedIndex"
|
|
274
|
+
@change="handleAmountChange"
|
|
275
|
+
/>
|
|
276
|
+
</template>
|
|
277
|
+
|
|
278
|
+
<script setup>
|
|
279
|
+
import { ref } from 'vue'
|
|
280
|
+
import { AmountPicker } from '@uxda/appkit/payment'
|
|
281
|
+
|
|
282
|
+
const amountList = ref([
|
|
283
|
+
{ token: 100, amount: 100 },
|
|
284
|
+
{ token: 500, amount: 500 },
|
|
285
|
+
{ token: 1000, amount: 1000 }
|
|
286
|
+
])
|
|
287
|
+
|
|
288
|
+
const selectedIndex = ref(0)
|
|
289
|
+
|
|
290
|
+
const handleAmountChange = (index) => {
|
|
291
|
+
selectedIndex.value = index
|
|
292
|
+
console.log('选中金额:', amountList.value[index])
|
|
293
|
+
}
|
|
294
|
+
</script>
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### 样式说明
|
|
298
|
+
|
|
299
|
+
- 3列网格布局
|
|
300
|
+
- 选中项有橙色渐变边框和背景
|
|
301
|
+
- 显示云豆图标和金额
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## RightsPicker - 权益选择器
|
|
306
|
+
|
|
307
|
+
**功能描述**: 用于权益充值场景的权益套餐选择网格组件。
|
|
308
|
+
|
|
309
|
+
### 导入方式
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
import { RightsPicker, type Amount } from '@uxda/appkit/payment'
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Props
|
|
316
|
+
|
|
317
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
318
|
+
|--------|------|------|--------|------|
|
|
319
|
+
| `items` | `Amount[]` | ✅ | `[]` | 权益套餐列表 |
|
|
320
|
+
| `selected` | `number` | ❌ | `0` | 当前选中的索引 |
|
|
321
|
+
|
|
322
|
+
### 类型定义
|
|
323
|
+
|
|
324
|
+
```typescript
|
|
325
|
+
export type Amount = {
|
|
326
|
+
id: string, // 套餐ID
|
|
327
|
+
paymentAmount: number, // 支付金额(元)
|
|
328
|
+
paymentDesc: string, // 套餐描述(标签文本)
|
|
329
|
+
priceRightNum: number // 权益数量(笔数)
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
### Events
|
|
334
|
+
|
|
335
|
+
| 事件名 | 参数类型 | 说明 |
|
|
336
|
+
|--------|----------|------|
|
|
337
|
+
| `change` | `number` | 选择改变时触发,返回选中的索引 |
|
|
338
|
+
|
|
339
|
+
### 使用示例
|
|
340
|
+
|
|
341
|
+
```vue
|
|
342
|
+
<template>
|
|
343
|
+
<rights-picker
|
|
344
|
+
:items="rightsList"
|
|
345
|
+
:selected="selectedIndex"
|
|
346
|
+
@change="handleRightsChange"
|
|
347
|
+
/>
|
|
348
|
+
</template>
|
|
349
|
+
|
|
350
|
+
<script setup>
|
|
351
|
+
import { ref } from 'vue'
|
|
352
|
+
import { RightsPicker, type Amount } from '@uxda/appkit/payment'
|
|
353
|
+
|
|
354
|
+
const rightsList = ref<Amount[]>([
|
|
355
|
+
{
|
|
356
|
+
id: '1',
|
|
357
|
+
paymentAmount: 100,
|
|
358
|
+
paymentDesc: '推荐',
|
|
359
|
+
priceRightNum: 10
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
id: '2',
|
|
363
|
+
paymentAmount: 500,
|
|
364
|
+
paymentDesc: '热销',
|
|
365
|
+
priceRightNum: 50
|
|
366
|
+
}
|
|
367
|
+
])
|
|
368
|
+
|
|
369
|
+
const selectedIndex = ref(0)
|
|
370
|
+
|
|
371
|
+
const handleRightsChange = (index) => {
|
|
372
|
+
selectedIndex.value = index
|
|
373
|
+
}
|
|
374
|
+
</script>
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### 样式说明
|
|
378
|
+
|
|
379
|
+
- 3列网格布局
|
|
380
|
+
- 每个选项显示:
|
|
381
|
+
- 标签(如"推荐"、"热销")
|
|
382
|
+
- 权益数量(笔数)
|
|
383
|
+
- 支付金额
|
|
384
|
+
- 选中项有橙色渐变边框和背景
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## RechargeResult - 充值结果页
|
|
389
|
+
|
|
390
|
+
**功能描述**: 展示充值或购买成功/失败的结果页面。
|
|
391
|
+
|
|
392
|
+
### 导入方式
|
|
393
|
+
|
|
394
|
+
```typescript
|
|
395
|
+
import { RechargeResult } from '@uxda/appkit/payment'
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Props
|
|
399
|
+
|
|
400
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
401
|
+
|--------|------|------|--------|------|
|
|
402
|
+
| `type` | `string` | ❌ | `'recharge'` | 结果类型<br/>- `'recharge'`: 充值<br/>- `'trade'`: 购买 |
|
|
403
|
+
| `payMethod` | `string` | ❌ | `''` | 支付方式<br/>- `'bean'`: 云豆支付<br/>- `'wePay'`: 微信支付 |
|
|
404
|
+
|
|
405
|
+
### Events
|
|
406
|
+
|
|
407
|
+
| 事件名 | 参数类型 | 说明 |
|
|
408
|
+
|--------|----------|------|
|
|
409
|
+
| `dismiss` | - | 点击返回按钮时触发 |
|
|
410
|
+
|
|
411
|
+
### 使用示例
|
|
412
|
+
|
|
413
|
+
```vue
|
|
414
|
+
<template>
|
|
415
|
+
<recharge-result
|
|
416
|
+
type="trade"
|
|
417
|
+
pay-method="combined"
|
|
418
|
+
@dismiss="handleDismiss"
|
|
419
|
+
/>
|
|
420
|
+
</template>
|
|
421
|
+
|
|
422
|
+
<script setup>
|
|
423
|
+
import { RechargeResult } from '@uxda/appkit/payment'
|
|
424
|
+
|
|
425
|
+
const handleDismiss = () => {
|
|
426
|
+
// 返回上一页或跳转到指定页面
|
|
427
|
+
Taro.navigateBack()
|
|
428
|
+
}
|
|
429
|
+
</script>
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
### 显示内容
|
|
433
|
+
|
|
434
|
+
根据 `type` 和 `payMethod` 组合显示不同的文案:
|
|
435
|
+
|
|
436
|
+
| type | payMethod | 标题 | 副标题 |
|
|
437
|
+
|------|-----------|------|--------|
|
|
438
|
+
| `recharge` | - | "充值成功" | "云豆将在1分钟之内到账" |
|
|
439
|
+
| `recharge` | `bean` | "充值成功" | "权益已到账" |
|
|
440
|
+
| `trade` | - | "购买成功" | "权益将在1分钟之内到账" |
|
|
441
|
+
| `trade` | `bean` | "购买成功" | "权益已到账" |
|
|
442
|
+
|
|
443
|
+
---
|
|
444
|
+
|
|
445
|
+
## UserAgreement - 用户协议
|
|
446
|
+
|
|
447
|
+
**功能描述**: 展示《大道云平台云豆充值服务协议》的完整内容。
|
|
448
|
+
|
|
449
|
+
### 导入方式
|
|
450
|
+
|
|
451
|
+
```typescript
|
|
452
|
+
import { UserAgreement } from '@uxda/appkit/payment'
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### Props
|
|
456
|
+
|
|
457
|
+
无
|
|
458
|
+
|
|
459
|
+
### Events
|
|
460
|
+
|
|
461
|
+
无
|
|
462
|
+
|
|
463
|
+
### 使用示例
|
|
464
|
+
|
|
465
|
+
```vue
|
|
466
|
+
<template>
|
|
467
|
+
<user-agreement />
|
|
468
|
+
</template>
|
|
469
|
+
|
|
470
|
+
<script setup>
|
|
471
|
+
import { UserAgreement } from '@uxda/appkit/payment'
|
|
472
|
+
</script>
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
### 使用场景
|
|
476
|
+
|
|
477
|
+
通常作为独立页面使用,当用户点击协议链接时跳转到此页面:
|
|
478
|
+
|
|
479
|
+
```vue
|
|
480
|
+
<template>
|
|
481
|
+
<view>
|
|
482
|
+
<trade-view @agree="handleAgree" />
|
|
483
|
+
</view>
|
|
484
|
+
</template>
|
|
485
|
+
|
|
486
|
+
<script setup>
|
|
487
|
+
import Taro from '@tarojs/taro'
|
|
488
|
+
|
|
489
|
+
const handleAgree = () => {
|
|
490
|
+
Taro.navigateTo({
|
|
491
|
+
url: '/pages/agreement/index'
|
|
492
|
+
})
|
|
493
|
+
}
|
|
494
|
+
</script>
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
## 组合使用示例
|
|
500
|
+
|
|
501
|
+
### 完整的权益购买流程
|
|
502
|
+
|
|
503
|
+
```vue
|
|
504
|
+
<template>
|
|
505
|
+
<view class="trade-page">
|
|
506
|
+
<!-- 权益选择与支付 -->
|
|
507
|
+
<trade-view
|
|
508
|
+
v-if="!showResult"
|
|
509
|
+
header-app="loankitMp"
|
|
510
|
+
app="corporateStar"
|
|
511
|
+
tenant="1"
|
|
512
|
+
@complete="handlePayComplete"
|
|
513
|
+
@agree="showAgreement"
|
|
514
|
+
>
|
|
515
|
+
<template #banner>
|
|
516
|
+
<div class="promotion-banner">
|
|
517
|
+
<h3>同样价格,看更多数据</h3>
|
|
518
|
+
<p>了解AI审批一启明星的全面升级版</p>
|
|
519
|
+
</div>
|
|
520
|
+
</template>
|
|
521
|
+
</trade-view>
|
|
522
|
+
|
|
523
|
+
<!-- 支付结果页 -->
|
|
524
|
+
<recharge-result
|
|
525
|
+
v-if="showResult"
|
|
526
|
+
type="trade"
|
|
527
|
+
:pay-method="payMethod"
|
|
528
|
+
@dismiss="handleDismiss"
|
|
529
|
+
/>
|
|
530
|
+
</view>
|
|
531
|
+
</template>
|
|
532
|
+
|
|
533
|
+
<script setup>
|
|
534
|
+
import { ref } from 'vue'
|
|
535
|
+
import { TradeView, RechargeResult } from '@uxda/appkit/payment'
|
|
536
|
+
import Taro from '@tarojs/taro'
|
|
537
|
+
|
|
538
|
+
const showResult = ref(false)
|
|
539
|
+
const payMethod = ref('')
|
|
540
|
+
|
|
541
|
+
const handlePayComplete = ({ result, type }) => {
|
|
542
|
+
if (result) {
|
|
543
|
+
payMethod.value = type === 'bean' ? 'bean' : 'wePay'
|
|
544
|
+
showResult.value = true
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
const showAgreement = () => {
|
|
549
|
+
Taro.navigateTo({
|
|
550
|
+
url: '/pages/agreement/index'
|
|
551
|
+
})
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
const handleDismiss = () => {
|
|
555
|
+
showResult.value = false
|
|
556
|
+
// 可以刷新余额或返回上一页
|
|
557
|
+
}
|
|
558
|
+
</script>
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
## 常见问题
|
|
564
|
+
|
|
565
|
+
### Q1: 组合支付时,云豆余额如何扣减?
|
|
566
|
+
|
|
567
|
+
A: 当用户选择云豆支付但余额不足时,系统会自动启用组合支付。在调用微信支付接口时,后端会自动:
|
|
568
|
+
1. 先扣减用户全部云豆余额
|
|
569
|
+
2. 计算剩余需要支付的金额
|
|
570
|
+
3. 发起微信支付请求(金额为剩余部分)
|
|
571
|
+
|
|
572
|
+
### Q2: 如何判断支付类型?
|
|
573
|
+
|
|
574
|
+
A: 通过 `complete` 事件的 `type` 参数判断:
|
|
575
|
+
- `'bean'`: 纯云豆支付
|
|
576
|
+
- `'wePay'`: 纯微信支付
|
|
577
|
+
- `'combined'`: 组合支付
|
|
578
|
+
|
|
579
|
+
### Q3: 协议复选框何时显示?
|
|
580
|
+
|
|
581
|
+
A:
|
|
582
|
+
- 纯云豆支付且余额充足:不显示(无需额外支付)
|
|
583
|
+
- 组合支付:显示(需要微信支付)
|
|
584
|
+
- 纯微信支付:显示(需要微信支付)
|
|
585
|
+
|
|
586
|
+
### Q4: H5环境支付失败怎么办?
|
|
587
|
+
|
|
588
|
+
A: 确保:
|
|
589
|
+
1. 在微信浏览器中打开
|
|
590
|
+
2. 已正确配置 `payFinishJumpUrl`
|
|
591
|
+
3. 检查网络连接和接口权限
|
|
592
|
+
|
|
593
|
+
### Q5: 如何自定义横幅内容?
|
|
594
|
+
|
|
595
|
+
A: 使用 `banner` 插槽:
|
|
596
|
+
|
|
597
|
+
```vue
|
|
598
|
+
<trade-view>
|
|
599
|
+
<template #banner>
|
|
600
|
+
<div class="custom-banner">
|
|
601
|
+
<!-- 自定义内容 -->
|
|
602
|
+
</div>
|
|
603
|
+
</template>
|
|
604
|
+
</trade-view>
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
---
|
|
608
|
+
|
|
609
|
+
## 更新日志
|
|
610
|
+
|
|
611
|
+
### v1.1.0 (最新)
|
|
612
|
+
- ✅ 新增组合支付功能(云豆+微信)
|
|
613
|
+
- ✅ 新增余额不足警告提示
|
|
614
|
+
- ✅ 优化待支付金额计算逻辑
|
|
615
|
+
- ✅ 完善确认对话框显示内容
|
|
616
|
+
|
|
617
|
+
### v1.0.0
|
|
618
|
+
- ✅ 基础支付功能
|
|
619
|
+
- ✅ 云豆支付支持
|
|
620
|
+
- ✅ 微信支付支持
|
|
621
|
+
|
|
622
|
+
---
|
|
623
|
+
|
|
624
|
+
# 余额模块组件使用规则
|
|
625
|
+
|
|
626
|
+
## AccountView - 账户总览
|
|
627
|
+
|
|
628
|
+
**功能描述**: 展示用户账户余额、权益信息及收支明细的完整账户页面。
|
|
629
|
+
|
|
630
|
+
### 导入方式
|
|
631
|
+
|
|
632
|
+
```typescript
|
|
633
|
+
import { AccountView } from '@uxda/appkit/balance'
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
### Props
|
|
637
|
+
|
|
638
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
639
|
+
|--------|------|------|--------|------|
|
|
640
|
+
| `app` | `string` | ✅ | `''` | 应用标识 |
|
|
641
|
+
|
|
642
|
+
### Events
|
|
643
|
+
|
|
644
|
+
| 事件名 | 参数类型 | 说明 |
|
|
645
|
+
|--------|----------|------|
|
|
646
|
+
| `recharge` | - | 点击充值按钮时触发 |
|
|
647
|
+
| `trade` | `item: any` | 点击权益充值按钮时触发,返回权益项信息 |
|
|
648
|
+
|
|
649
|
+
### 使用示例
|
|
650
|
+
|
|
651
|
+
```vue
|
|
652
|
+
<template>
|
|
653
|
+
<account-view
|
|
654
|
+
app="loankitMp"
|
|
655
|
+
@recharge="handleRecharge"
|
|
656
|
+
@trade="handleTrade"
|
|
657
|
+
/>
|
|
658
|
+
</template>
|
|
659
|
+
|
|
660
|
+
<script setup>
|
|
661
|
+
import { AccountView } from '@uxda/appkit/balance'
|
|
662
|
+
|
|
663
|
+
const handleRecharge = () => {
|
|
664
|
+
// 跳转到充值页面
|
|
665
|
+
Taro.navigateTo({
|
|
666
|
+
url: '/pages/recharge/index'
|
|
667
|
+
})
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
const handleTrade = (item) => {
|
|
671
|
+
// 跳转到权益充值页面
|
|
672
|
+
Taro.navigateTo({
|
|
673
|
+
url: `/pages/trade/index?id=${item.id}`
|
|
674
|
+
})
|
|
675
|
+
}
|
|
676
|
+
</script>
|
|
677
|
+
```
|
|
678
|
+
|
|
679
|
+
### 功能特性
|
|
680
|
+
|
|
681
|
+
1. **余额展示**: 显示云豆总余额
|
|
682
|
+
2. **权益展示**: 展示各类权益(企明星、AI审批、电子签约等)
|
|
683
|
+
3. **收支明细**: 支持查看收支明细,包含筛选和分页功能
|
|
684
|
+
4. **规则说明**: 支持查看消费规则说明
|
|
685
|
+
|
|
686
|
+
### 注意事项
|
|
687
|
+
|
|
688
|
+
- 组件挂载后会自动获取余额和权益信息
|
|
689
|
+
- 支持下拉刷新余额数据
|
|
690
|
+
- 收支明细支持时间筛选和多条件筛选
|
|
691
|
+
|
|
692
|
+
---
|
|
693
|
+
|
|
694
|
+
## BalanceCard - 余额卡片
|
|
695
|
+
|
|
696
|
+
**功能描述**: 用于在首页或个人中心展示余额的卡片组件。
|
|
697
|
+
|
|
698
|
+
### 导入方式
|
|
699
|
+
|
|
700
|
+
```typescript
|
|
701
|
+
import { BalanceCard } from '@uxda/appkit/balance'
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
### Props
|
|
705
|
+
|
|
706
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
707
|
+
|--------|------|------|--------|------|
|
|
708
|
+
| `app` | `string` | ✅ | `''` | 应用标识 |
|
|
709
|
+
|
|
710
|
+
### Events
|
|
711
|
+
|
|
712
|
+
| 事件名 | 参数类型 | 说明 |
|
|
713
|
+
|--------|----------|------|
|
|
714
|
+
| `drill` | - | 点击账户明细时触发 |
|
|
715
|
+
| `recharge` | - | 点击充值按钮时触发 |
|
|
716
|
+
|
|
717
|
+
### 使用示例
|
|
718
|
+
|
|
719
|
+
```vue
|
|
720
|
+
<template>
|
|
721
|
+
<balance-card
|
|
722
|
+
app="loankitMp"
|
|
723
|
+
@drill="handleDrill"
|
|
724
|
+
@recharge="handleRecharge"
|
|
725
|
+
/>
|
|
726
|
+
</template>
|
|
727
|
+
|
|
728
|
+
<script setup>
|
|
729
|
+
import { BalanceCard } from '@uxda/appkit/balance'
|
|
730
|
+
|
|
731
|
+
const handleDrill = () => {
|
|
732
|
+
Taro.navigateTo({
|
|
733
|
+
url: '/pages/account/index'
|
|
734
|
+
})
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
const handleRecharge = () => {
|
|
738
|
+
Taro.navigateTo({
|
|
739
|
+
url: '/pages/recharge/index'
|
|
740
|
+
})
|
|
741
|
+
}
|
|
742
|
+
</script>
|
|
743
|
+
```
|
|
744
|
+
|
|
745
|
+
### 暴露方法
|
|
746
|
+
|
|
747
|
+
| 方法名 | 说明 |
|
|
748
|
+
|--------|------|
|
|
749
|
+
| `reload` | 重新加载余额数据 |
|
|
750
|
+
|
|
751
|
+
```vue
|
|
752
|
+
<script setup>
|
|
753
|
+
import { ref } from 'vue'
|
|
754
|
+
import { BalanceCard } from '@uxda/appkit/balance'
|
|
755
|
+
|
|
756
|
+
const balanceCardRef = ref()
|
|
757
|
+
|
|
758
|
+
const refreshBalance = () => {
|
|
759
|
+
balanceCardRef.value?.reload()
|
|
760
|
+
}
|
|
761
|
+
</script>
|
|
762
|
+
|
|
763
|
+
<template>
|
|
764
|
+
<balance-card ref="balanceCardRef" app="loankitMp" />
|
|
765
|
+
</template>
|
|
766
|
+
```
|
|
767
|
+
|
|
768
|
+
---
|
|
769
|
+
|
|
770
|
+
## BalanceReminder - 余额提醒
|
|
771
|
+
|
|
772
|
+
**功能描述**: 当余额不足时显示的提示弹窗组件。
|
|
773
|
+
|
|
774
|
+
### 导入方式
|
|
775
|
+
|
|
776
|
+
```typescript
|
|
777
|
+
import { BalanceReminder } from '@uxda/appkit/balance'
|
|
778
|
+
```
|
|
779
|
+
|
|
780
|
+
### Props
|
|
781
|
+
|
|
782
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
783
|
+
|--------|------|------|--------|------|
|
|
784
|
+
| `modelValue` | `boolean` | ✅ | `false` | 控制弹窗显示/隐藏(v-model) |
|
|
785
|
+
| `buttonText` | `string` | ❌ | `'去充值'` | 按钮文本 |
|
|
786
|
+
| `tip` | `string` | ❌ | `'您的账户可用余额不足,请充值后再进行查询'` | 提示文本 |
|
|
787
|
+
|
|
788
|
+
### Events
|
|
789
|
+
|
|
790
|
+
| 事件名 | 参数类型 | 说明 |
|
|
791
|
+
|--------|----------|------|
|
|
792
|
+
| `update:modelValue` | `boolean` | v-model 更新事件 |
|
|
793
|
+
| `recharge` | - | 点击充值按钮时触发 |
|
|
794
|
+
|
|
795
|
+
### 使用示例
|
|
796
|
+
|
|
797
|
+
```vue
|
|
798
|
+
<template>
|
|
799
|
+
<balance-reminder
|
|
800
|
+
v-model="showReminder"
|
|
801
|
+
button-text="立即充值"
|
|
802
|
+
tip="余额不足,请充值"
|
|
803
|
+
@recharge="handleRecharge"
|
|
804
|
+
/>
|
|
805
|
+
</template>
|
|
806
|
+
|
|
807
|
+
<script setup>
|
|
808
|
+
import { ref } from 'vue'
|
|
809
|
+
import { BalanceReminder } from '@uxda/appkit/balance'
|
|
810
|
+
|
|
811
|
+
const showReminder = ref(false)
|
|
812
|
+
|
|
813
|
+
const handleRecharge = () => {
|
|
814
|
+
showReminder.value = false
|
|
815
|
+
Taro.navigateTo({
|
|
816
|
+
url: '/pages/recharge/index'
|
|
817
|
+
})
|
|
818
|
+
}
|
|
819
|
+
</script>
|
|
820
|
+
```
|
|
821
|
+
|
|
822
|
+
---
|
|
823
|
+
|
|
824
|
+
# 消息通知模块组件使用规则
|
|
825
|
+
|
|
826
|
+
## NoticeBanner - 通知横幅
|
|
827
|
+
|
|
828
|
+
**功能描述**: 页面顶部或嵌入式的通告栏,支持多条消息轮播和强制弹窗。
|
|
829
|
+
|
|
830
|
+
### 导入方式
|
|
831
|
+
|
|
832
|
+
```typescript
|
|
833
|
+
import { NoticeBanner } from '@uxda/appkit/notice'
|
|
834
|
+
```
|
|
835
|
+
|
|
836
|
+
### Props
|
|
837
|
+
|
|
838
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
839
|
+
|--------|------|------|--------|------|
|
|
840
|
+
| `app` | `string` | ✅ | `''` | 应用标识 |
|
|
841
|
+
| `bannerStyle` | `any` | ❌ | `''` | 横幅样式 |
|
|
842
|
+
| `fixed` | `boolean` | ❌ | `false` | 是否固定定位 |
|
|
843
|
+
| `device` | `string` | ❌ | `'MINI'` | 设备类型 |
|
|
844
|
+
|
|
845
|
+
### Events
|
|
846
|
+
|
|
847
|
+
| 事件名 | 参数类型 | 说明 |
|
|
848
|
+
|--------|----------|------|
|
|
849
|
+
| `detail` | `item: any` | 点击详情时触发 |
|
|
850
|
+
| `close` | - | 关闭横幅时触发 |
|
|
851
|
+
| `view` | `link: string` | 查看附件时触发 |
|
|
852
|
+
| `popup` | `hasPopup: boolean` | 弹窗状态变化时触发 |
|
|
853
|
+
| `hasBanner` | `hasBanner: boolean` | 横幅状态变化时触发 |
|
|
854
|
+
|
|
855
|
+
### 使用示例
|
|
856
|
+
|
|
857
|
+
```vue
|
|
858
|
+
<template>
|
|
859
|
+
<notice-banner
|
|
860
|
+
app="loankitMp"
|
|
861
|
+
:fixed="true"
|
|
862
|
+
@detail="handleDetail"
|
|
863
|
+
@view="handleView"
|
|
864
|
+
/>
|
|
865
|
+
</template>
|
|
866
|
+
|
|
867
|
+
<script setup>
|
|
868
|
+
import { NoticeBanner } from '@uxda/appkit/notice'
|
|
869
|
+
|
|
870
|
+
const handleDetail = (item) => {
|
|
871
|
+
// 跳转到消息详情页
|
|
872
|
+
Taro.navigateTo({
|
|
873
|
+
url: `/pages/notice/detail?id=${item.id}`
|
|
874
|
+
})
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
const handleView = (link) => {
|
|
878
|
+
// 打开附件链接
|
|
879
|
+
Taro.navigateTo({
|
|
880
|
+
url: `/pages/webview/index?url=${encodeURIComponent(link)}`
|
|
881
|
+
})
|
|
882
|
+
}
|
|
883
|
+
</script>
|
|
884
|
+
```
|
|
885
|
+
|
|
886
|
+
### 功能特性
|
|
887
|
+
|
|
888
|
+
1. **消息轮播**: 多条横幅消息自动轮播(3秒间隔)
|
|
889
|
+
2. **手势控制**: 触摸时暂停轮播,离开后恢复
|
|
890
|
+
3. **强制弹窗**: 系统公告类型的消息会以弹窗形式强制显示
|
|
891
|
+
4. **自动获取**: 组件挂载后自动获取当前应用的消息
|
|
892
|
+
|
|
893
|
+
---
|
|
894
|
+
|
|
895
|
+
## NoticeList - 消息列表
|
|
896
|
+
|
|
897
|
+
**功能描述**: 展示历史消息记录,支持搜索、筛选和分页。
|
|
898
|
+
|
|
899
|
+
### 导入方式
|
|
900
|
+
|
|
901
|
+
```typescript
|
|
902
|
+
import { NoticeList } from '@uxda/appkit/notice'
|
|
903
|
+
```
|
|
904
|
+
|
|
905
|
+
### Props
|
|
906
|
+
|
|
907
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
908
|
+
|--------|------|------|--------|------|
|
|
909
|
+
| `app` | `string` | ✅ | `''` | 应用标识 |
|
|
910
|
+
| `userId` | `string` | ✅ | `''` | 用户ID |
|
|
911
|
+
| `showApp` | `boolean` | ❌ | `false` | 是否显示应用标签 |
|
|
912
|
+
| `checkBeforeRead` | `Function` | ❌ | - | 读取前的检查函数,返回 false 则阻止读取 |
|
|
913
|
+
|
|
914
|
+
### Events
|
|
915
|
+
|
|
916
|
+
| 事件名 | 参数类型 | 说明 |
|
|
917
|
+
|--------|----------|------|
|
|
918
|
+
| `view` | `link: string` | 查看附件时触发 |
|
|
919
|
+
|
|
920
|
+
### 使用示例
|
|
921
|
+
|
|
922
|
+
```vue
|
|
923
|
+
<template>
|
|
924
|
+
<notice-list
|
|
925
|
+
app="loankitMp"
|
|
926
|
+
:user-id="userId"
|
|
927
|
+
:show-app="true"
|
|
928
|
+
:check-before-read="checkRead"
|
|
929
|
+
@view="handleView"
|
|
930
|
+
/>
|
|
931
|
+
</template>
|
|
932
|
+
|
|
933
|
+
<script setup>
|
|
934
|
+
import { NoticeList } from '@uxda/appkit/notice'
|
|
935
|
+
|
|
936
|
+
const userId = '123456'
|
|
937
|
+
|
|
938
|
+
const checkRead = (notice, index) => {
|
|
939
|
+
// 可以在这里添加读取前的逻辑检查
|
|
940
|
+
return true
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
const handleView = (link) => {
|
|
944
|
+
Taro.navigateTo({
|
|
945
|
+
url: `/pages/webview/index?url=${encodeURIComponent(link)}`
|
|
946
|
+
})
|
|
947
|
+
}
|
|
948
|
+
</script>
|
|
949
|
+
```
|
|
950
|
+
|
|
951
|
+
### 功能特性
|
|
952
|
+
|
|
953
|
+
1. **搜索功能**: 支持关键字搜索消息
|
|
954
|
+
2. **下拉刷新**: 支持下拉刷新消息列表
|
|
955
|
+
3. **上拉加载**: 自动分页加载更多消息
|
|
956
|
+
4. **已读标记**: 自动标记消息为已读
|
|
957
|
+
5. **时间显示**: 智能显示相对时间(如"5分钟前")或绝对时间
|
|
958
|
+
|
|
959
|
+
---
|
|
960
|
+
|
|
961
|
+
## NoticeEntry - 消息入口
|
|
962
|
+
|
|
963
|
+
**功能描述**: 通常带红点或未读数的消息中心入口图标。
|
|
964
|
+
|
|
965
|
+
### 导入方式
|
|
966
|
+
|
|
967
|
+
```typescript
|
|
968
|
+
import { NoticeEntry } from '@uxda/appkit/notice'
|
|
969
|
+
```
|
|
970
|
+
|
|
971
|
+
### Props
|
|
972
|
+
|
|
973
|
+
待补充(需要查看组件实现)
|
|
974
|
+
|
|
975
|
+
### Events
|
|
976
|
+
|
|
977
|
+
待补充
|
|
978
|
+
|
|
979
|
+
---
|
|
980
|
+
|
|
981
|
+
## NoticePopup - 通知弹窗
|
|
982
|
+
|
|
983
|
+
**功能描述**: 强提醒类型的消息弹窗。
|
|
984
|
+
|
|
985
|
+
### 导入方式
|
|
986
|
+
|
|
987
|
+
```typescript
|
|
988
|
+
import { NoticePopup } from '@uxda/appkit/notice'
|
|
989
|
+
```
|
|
990
|
+
|
|
991
|
+
### Props
|
|
992
|
+
|
|
993
|
+
待补充(需要查看组件实现)
|
|
994
|
+
|
|
995
|
+
### Events
|
|
996
|
+
|
|
997
|
+
待补充
|
|
998
|
+
|
|
999
|
+
---
|
|
1000
|
+
|
|
1001
|
+
# 用户模块组件使用规则
|
|
1002
|
+
|
|
1003
|
+
## UserInfo - 用户信息
|
|
1004
|
+
|
|
1005
|
+
**功能描述**: 展示用户头像、昵称、认证信息、企业/团队信息等完整用户资料页面。
|
|
1006
|
+
|
|
1007
|
+
### 导入方式
|
|
1008
|
+
|
|
1009
|
+
```typescript
|
|
1010
|
+
import { UserInfo } from '@uxda/appkit/user'
|
|
1011
|
+
```
|
|
1012
|
+
|
|
1013
|
+
### Props
|
|
1014
|
+
|
|
1015
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1016
|
+
|--------|------|------|--------|------|
|
|
1017
|
+
| `miniType` | `string` | ❌ | `'05'` | 小程序类型 |
|
|
1018
|
+
| `app` | `string` | ❌ | `''` | 应用标识 |
|
|
1019
|
+
| `userId` | `string` | ✅ | `''` | 用户ID |
|
|
1020
|
+
| `hasQiyezuhu` | `number` | ❌ | `0` | 是否有企业租户 |
|
|
1021
|
+
| `isPersonal` | `number` | ❌ | `0` | 是否个人用户 |
|
|
1022
|
+
|
|
1023
|
+
### Events
|
|
1024
|
+
|
|
1025
|
+
| 事件名 | 参数类型 | 说明 |
|
|
1026
|
+
|--------|----------|------|
|
|
1027
|
+
| `avatar-success` | `avatar: string` | 头像上传成功时触发 |
|
|
1028
|
+
| `logout` | - | 退出登录时触发 |
|
|
1029
|
+
| `crop` | `filePath: string` | 需要裁剪头像时触发 |
|
|
1030
|
+
| `binding` | `mobile: string` | 点击绑定手机号时触发 |
|
|
1031
|
+
| `username-success` | - | 用户名修改成功时触发 |
|
|
1032
|
+
| `auth` | `userId: string, verifyResult: number, mobile: string` | 点击认证信息时触发 |
|
|
1033
|
+
|
|
1034
|
+
### 使用示例
|
|
1035
|
+
|
|
1036
|
+
```vue
|
|
1037
|
+
<template>
|
|
1038
|
+
<user-info
|
|
1039
|
+
:user-id="userId"
|
|
1040
|
+
:has-qiyezuhu="1"
|
|
1041
|
+
:is-personal="1"
|
|
1042
|
+
@logout="handleLogout"
|
|
1043
|
+
@binding="handleBinding"
|
|
1044
|
+
@auth="handleAuth"
|
|
1045
|
+
@crop="handleCrop"
|
|
1046
|
+
/>
|
|
1047
|
+
</template>
|
|
1048
|
+
|
|
1049
|
+
<script setup>
|
|
1050
|
+
import { UserInfo } from '@uxda/appkit/user'
|
|
1051
|
+
import Taro from '@tarojs/taro'
|
|
1052
|
+
|
|
1053
|
+
const userId = '123456'
|
|
1054
|
+
|
|
1055
|
+
const handleLogout = () => {
|
|
1056
|
+
// 清除登录状态并跳转到登录页
|
|
1057
|
+
Taro.reLaunch({
|
|
1058
|
+
url: '/pages/login/index'
|
|
1059
|
+
})
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
const handleBinding = (mobile) => {
|
|
1063
|
+
Taro.navigateTo({
|
|
1064
|
+
url: `/pages/binding/index?mobile=${mobile}`
|
|
1065
|
+
})
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
const handleAuth = (userId, verifyResult, mobile) => {
|
|
1069
|
+
Taro.navigateTo({
|
|
1070
|
+
url: `/pages/auth/index?userId=${userId}&verifyResult=${verifyResult}&mobile=${mobile}`
|
|
1071
|
+
})
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
const handleCrop = (filePath) => {
|
|
1075
|
+
// 跳转到头像裁剪页
|
|
1076
|
+
Taro.navigateTo({
|
|
1077
|
+
url: `/pages/crop/index?filePath=${filePath}`
|
|
1078
|
+
})
|
|
1079
|
+
}
|
|
1080
|
+
</script>
|
|
1081
|
+
```
|
|
1082
|
+
|
|
1083
|
+
### 暴露方法
|
|
1084
|
+
|
|
1085
|
+
| 方法名 | 说明 |
|
|
1086
|
+
|--------|------|
|
|
1087
|
+
| `updateImage` | 更新头像图片 |
|
|
1088
|
+
|
|
1089
|
+
---
|
|
1090
|
+
|
|
1091
|
+
## UserAuth - 用户认证
|
|
1092
|
+
|
|
1093
|
+
**功能描述**: 处理用户身份认证的表单组件,支持OCR识别身份证。
|
|
1094
|
+
|
|
1095
|
+
### 导入方式
|
|
1096
|
+
|
|
1097
|
+
```typescript
|
|
1098
|
+
import { UserAuth } from '@uxda/appkit/user'
|
|
1099
|
+
```
|
|
1100
|
+
|
|
1101
|
+
### Props
|
|
1102
|
+
|
|
1103
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1104
|
+
|--------|------|------|--------|------|
|
|
1105
|
+
| `userId` | `string` | ✅ | `''` | 用户ID |
|
|
1106
|
+
| `verifyResult` | `number` | ❌ | `-1` | 认证状态(-1: 未认证, 0: 已失效, 1: 已认证) |
|
|
1107
|
+
| `mobile` | `string` | ❌ | `''` | 手机号码 |
|
|
1108
|
+
|
|
1109
|
+
### Events
|
|
1110
|
+
|
|
1111
|
+
| 事件名 | 参数类型 | 说明 |
|
|
1112
|
+
|--------|----------|------|
|
|
1113
|
+
| `toAgreement` | - | 点击协议链接时触发 |
|
|
1114
|
+
|
|
1115
|
+
### 使用示例
|
|
1116
|
+
|
|
1117
|
+
```vue
|
|
1118
|
+
<template>
|
|
1119
|
+
<user-auth
|
|
1120
|
+
:user-id="userId"
|
|
1121
|
+
:verify-result="verifyResult"
|
|
1122
|
+
:mobile="mobile"
|
|
1123
|
+
@to-agreement="handleAgreement"
|
|
1124
|
+
/>
|
|
1125
|
+
</template>
|
|
1126
|
+
|
|
1127
|
+
<script setup>
|
|
1128
|
+
import { UserAuth } from '@uxda/appkit/user'
|
|
1129
|
+
|
|
1130
|
+
const userId = '123456'
|
|
1131
|
+
const verifyResult = -1
|
|
1132
|
+
const mobile = '13800138000'
|
|
1133
|
+
|
|
1134
|
+
const handleAgreement = () => {
|
|
1135
|
+
Taro.navigateTo({
|
|
1136
|
+
url: '/pages/agreement/index'
|
|
1137
|
+
})
|
|
1138
|
+
}
|
|
1139
|
+
</script>
|
|
1140
|
+
```
|
|
1141
|
+
|
|
1142
|
+
### 功能特性
|
|
1143
|
+
|
|
1144
|
+
1. **OCR识别**: 支持拍照识别身份证信息
|
|
1145
|
+
2. **表单验证**: 自动验证身份证号码格式
|
|
1146
|
+
3. **已认证状态**: 已认证用户显示只读模式
|
|
1147
|
+
|
|
1148
|
+
---
|
|
1149
|
+
|
|
1150
|
+
## UserBinding - 账号绑定
|
|
1151
|
+
|
|
1152
|
+
**功能描述**: 换绑手机号的流程组件,包含身份认证和换绑两个步骤。
|
|
1153
|
+
|
|
1154
|
+
### 导入方式
|
|
1155
|
+
|
|
1156
|
+
```typescript
|
|
1157
|
+
import { UserBinding } from '@uxda/appkit/user'
|
|
1158
|
+
```
|
|
1159
|
+
|
|
1160
|
+
### Props
|
|
1161
|
+
|
|
1162
|
+
无(通过路由参数传递 `mobile`)
|
|
1163
|
+
|
|
1164
|
+
### Events
|
|
1165
|
+
|
|
1166
|
+
| 事件名 | 参数类型 | 说明 |
|
|
1167
|
+
|--------|----------|------|
|
|
1168
|
+
| `success` | `mobile: string` | 换绑成功时触发,返回新手机号 |
|
|
1169
|
+
|
|
1170
|
+
### 使用示例
|
|
1171
|
+
|
|
1172
|
+
```vue
|
|
1173
|
+
<template>
|
|
1174
|
+
<user-binding @success="handleSuccess" />
|
|
1175
|
+
</template>
|
|
1176
|
+
|
|
1177
|
+
<script setup>
|
|
1178
|
+
import { UserBinding } from '@uxda/appkit/user'
|
|
1179
|
+
import Taro from '@tarojs/taro'
|
|
1180
|
+
|
|
1181
|
+
const handleSuccess = (mobile) => {
|
|
1182
|
+
Taro.showToast({
|
|
1183
|
+
title: `换绑成功:${mobile}`,
|
|
1184
|
+
icon: 'success'
|
|
1185
|
+
})
|
|
1186
|
+
setTimeout(() => {
|
|
1187
|
+
Taro.navigateBack()
|
|
1188
|
+
}, 1500)
|
|
1189
|
+
}
|
|
1190
|
+
</script>
|
|
1191
|
+
```
|
|
1192
|
+
|
|
1193
|
+
### 路由参数
|
|
1194
|
+
|
|
1195
|
+
| 参数名 | 类型 | 必填 | 说明 |
|
|
1196
|
+
|--------|------|------|------|
|
|
1197
|
+
| `mobile` | `string` | ✅ | 当前手机号 |
|
|
1198
|
+
|
|
1199
|
+
### 使用场景
|
|
1200
|
+
|
|
1201
|
+
```typescript
|
|
1202
|
+
// 跳转到换绑页面
|
|
1203
|
+
Taro.navigateTo({
|
|
1204
|
+
url: `/pages/binding/index?mobile=${currentMobile}`
|
|
1205
|
+
})
|
|
1206
|
+
```
|
|
1207
|
+
|
|
1208
|
+
---
|
|
1209
|
+
|
|
1210
|
+
# 注册模块组件使用规则
|
|
1211
|
+
|
|
1212
|
+
## SelfRegistration - 自助注册
|
|
1213
|
+
|
|
1214
|
+
**功能描述**: 引导新用户完成注册流程的组件,支持个人和公司两种使用场景。
|
|
1215
|
+
|
|
1216
|
+
### 导入方式
|
|
1217
|
+
|
|
1218
|
+
```typescript
|
|
1219
|
+
import { SelfRegistration } from '@uxda/appkit/register'
|
|
1220
|
+
```
|
|
1221
|
+
|
|
1222
|
+
### Props
|
|
1223
|
+
|
|
1224
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1225
|
+
|--------|------|------|--------|------|
|
|
1226
|
+
| `banner` | `string` | ❌ | `'https://cdn.ddjf.com/static/images/wx-yunservice/ai-form-bg2.png'` | 顶部横幅图片 |
|
|
1227
|
+
|
|
1228
|
+
### Events
|
|
1229
|
+
|
|
1230
|
+
| 事件名 | 参数类型 | 说明 |
|
|
1231
|
+
|--------|----------|------|
|
|
1232
|
+
| `submit` | `params: object` | 提交注册信息时触发 |
|
|
1233
|
+
|
|
1234
|
+
### 使用示例
|
|
1235
|
+
|
|
1236
|
+
```vue
|
|
1237
|
+
<template>
|
|
1238
|
+
<self-registration
|
|
1239
|
+
banner="/static/images/custom-banner.png"
|
|
1240
|
+
@submit="handleSubmit"
|
|
1241
|
+
/>
|
|
1242
|
+
</template>
|
|
1243
|
+
|
|
1244
|
+
<script setup>
|
|
1245
|
+
import { SelfRegistration } from '@uxda/appkit/register'
|
|
1246
|
+
|
|
1247
|
+
const handleSubmit = (params) => {
|
|
1248
|
+
console.log('注册信息:', params)
|
|
1249
|
+
// {
|
|
1250
|
+
// useCase: 'person' | 'company',
|
|
1251
|
+
// customerName: string,
|
|
1252
|
+
// idCardNo?: string, // 个人场景
|
|
1253
|
+
// customerPosition?: string, // 公司场景
|
|
1254
|
+
// companyName?: string, // 公司场景
|
|
1255
|
+
// customerArea?: string // 公司场景
|
|
1256
|
+
// }
|
|
1257
|
+
|
|
1258
|
+
// 调用注册接口
|
|
1259
|
+
// ...
|
|
1260
|
+
}
|
|
1261
|
+
</script>
|
|
1262
|
+
```
|
|
1263
|
+
|
|
1264
|
+
### 功能特性
|
|
1265
|
+
|
|
1266
|
+
1. **双场景支持**: 支持个人使用和公司使用两种场景
|
|
1267
|
+
2. **OCR识别**: 支持拍照识别身份证信息
|
|
1268
|
+
3. **表单验证**: 自动验证必填项和格式
|
|
1269
|
+
4. **地区选择**: 公司场景支持省市区选择
|
|
1270
|
+
|
|
1271
|
+
---
|
|
1272
|
+
|
|
1273
|
+
# 业务场景组件使用规则
|
|
1274
|
+
|
|
1275
|
+
## SharePoster - 分享海报
|
|
1276
|
+
|
|
1277
|
+
**功能描述**: 生成包含二维码和营销信息的图片,用于朋友圈分享。
|
|
1278
|
+
|
|
1279
|
+
### 导入方式
|
|
1280
|
+
|
|
1281
|
+
```typescript
|
|
1282
|
+
import { SharePoster } from '@uxda/appkit/scenarios'
|
|
1283
|
+
```
|
|
1284
|
+
|
|
1285
|
+
### Props
|
|
1286
|
+
|
|
1287
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1288
|
+
|--------|------|------|--------|------|
|
|
1289
|
+
| `posters` | `any[]` | ✅ | - | 海报列表 |
|
|
1290
|
+
| `text` | `string` | ❌ | - | 底部提示文本 |
|
|
1291
|
+
|
|
1292
|
+
### Events
|
|
1293
|
+
|
|
1294
|
+
| 事件名 | 参数类型 | 说明 |
|
|
1295
|
+
|--------|----------|------|
|
|
1296
|
+
| `share` | - | 点击确定分享时触发 |
|
|
1297
|
+
|
|
1298
|
+
### 使用示例
|
|
1299
|
+
|
|
1300
|
+
```vue
|
|
1301
|
+
<template>
|
|
1302
|
+
<share-poster
|
|
1303
|
+
:posters="posterList"
|
|
1304
|
+
text="长按保存图片,分享到朋友圈"
|
|
1305
|
+
@share="handleShare"
|
|
1306
|
+
/>
|
|
1307
|
+
</template>
|
|
1308
|
+
|
|
1309
|
+
<script setup>
|
|
1310
|
+
import { SharePoster } from '@uxda/appkit/scenarios'
|
|
1311
|
+
|
|
1312
|
+
const posterList = [
|
|
1313
|
+
// 海报配置对象
|
|
1314
|
+
]
|
|
1315
|
+
|
|
1316
|
+
const handleShare = () => {
|
|
1317
|
+
// 处理分享逻辑
|
|
1318
|
+
}
|
|
1319
|
+
</script>
|
|
1320
|
+
```
|
|
1321
|
+
|
|
1322
|
+
---
|
|
1323
|
+
|
|
1324
|
+
# 通用基础组件使用规则
|
|
1325
|
+
|
|
1326
|
+
## DdSearch - 搜索框
|
|
1327
|
+
|
|
1328
|
+
**功能描述**: 支持导航栏模式的搜索框,带有搜索回调和防抖功能。
|
|
1329
|
+
|
|
1330
|
+
### 导入方式
|
|
1331
|
+
|
|
1332
|
+
```typescript
|
|
1333
|
+
import DdSearch from '@uxda/appkit/components/dd-search/index.vue'
|
|
1334
|
+
```
|
|
1335
|
+
|
|
1336
|
+
### Props
|
|
1337
|
+
|
|
1338
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1339
|
+
|--------|------|------|--------|------|
|
|
1340
|
+
| `disabled` | `boolean` | ❌ | `false` | 是否禁用 |
|
|
1341
|
+
| `placeholder` | `string` | ❌ | `'请输入'` | 输入框占位符 |
|
|
1342
|
+
| `value` | `string` | ❌ | `''` | 绑定值 |
|
|
1343
|
+
| `bordered` | `boolean` | ❌ | `true` | 是否显示底部边框 |
|
|
1344
|
+
| `inNavbar` | `boolean` | ❌ | `false` | 是否在导航栏中 |
|
|
1345
|
+
| `focus` | `boolean` | ❌ | `false` | 是否自动聚焦 |
|
|
1346
|
+
|
|
1347
|
+
### Events
|
|
1348
|
+
|
|
1349
|
+
| 事件名 | 参数类型 | 说明 |
|
|
1350
|
+
|--------|----------|------|
|
|
1351
|
+
| `search` | `value: string` | 点击搜索时触发 |
|
|
1352
|
+
| `focus` | `event: Event` | 输入框聚焦时触发 |
|
|
1353
|
+
|
|
1354
|
+
### 使用示例
|
|
1355
|
+
|
|
1356
|
+
```vue
|
|
1357
|
+
<template>
|
|
1358
|
+
<dd-search
|
|
1359
|
+
:bordered="false"
|
|
1360
|
+
:in-navbar="true"
|
|
1361
|
+
:value="searchStr"
|
|
1362
|
+
placeholder="输入客户姓名"
|
|
1363
|
+
@search="onSearch"
|
|
1364
|
+
@focus="onSearchFocus"
|
|
1365
|
+
/>
|
|
1366
|
+
</template>
|
|
1367
|
+
|
|
1368
|
+
<script setup>
|
|
1369
|
+
import { ref } from 'vue'
|
|
1370
|
+
import DdSearch from '@uxda/appkit/components/dd-search/index.vue'
|
|
1371
|
+
|
|
1372
|
+
const searchStr = ref('')
|
|
1373
|
+
|
|
1374
|
+
const onSearch = (value) => {
|
|
1375
|
+
console.log('搜索:', value)
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
const onSearchFocus = (event) => {
|
|
1379
|
+
console.log('聚焦:', event)
|
|
1380
|
+
}
|
|
1381
|
+
</script>
|
|
1382
|
+
```
|
|
1383
|
+
|
|
1384
|
+
---
|
|
1385
|
+
|
|
1386
|
+
## DdIcon - 图标组件
|
|
1387
|
+
|
|
1388
|
+
**功能描述**: 项目统一的图标封装,使用 iconfont 图标。
|
|
1389
|
+
|
|
1390
|
+
### 导入方式
|
|
1391
|
+
|
|
1392
|
+
```typescript
|
|
1393
|
+
import DdIcon from '@uxda/appkit/components/dd-icon/index.vue'
|
|
1394
|
+
```
|
|
1395
|
+
|
|
1396
|
+
### Props
|
|
1397
|
+
|
|
1398
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
1399
|
+
|--------|------|------|--------|------|
|
|
1400
|
+
| `name` | `string` | ✅ | `''` | icon 名称 |
|
|
1401
|
+
| `color` | `string` | ❌ | `inherit` | icon 颜色 |
|
|
1402
|
+
| `size` | `string` | ❌ | `16px` | icon 字体大小 |
|
|
1403
|
+
| `weight` | `string` | ❌ | `normal` | icon 字体字重 |
|
|
1404
|
+
|
|
1405
|
+
### 使用示例
|
|
1406
|
+
|
|
1407
|
+
```vue
|
|
1408
|
+
<template>
|
|
1409
|
+
<dd-icon name="icon-arrow" size="11px" color="#DFDFDF" />
|
|
1410
|
+
</template>
|
|
1411
|
+
|
|
1412
|
+
<script setup>
|
|
1413
|
+
import DdIcon from '@uxda/appkit/components/dd-icon/index.vue'
|
|
1414
|
+
</script>
|
|
1415
|
+
```
|
|
1416
|
+
|
|
1417
|
+
---
|
|
1418
|
+
|
|
1419
|
+
## DdSkeleton - 骨架屏
|
|
1420
|
+
|
|
1421
|
+
**功能描述**: 数据加载过程中的占位显示,提升用户体验。
|
|
1422
|
+
|
|
1423
|
+
### 导入方式
|
|
1424
|
+
|
|
1425
|
+
```typescript
|
|
1426
|
+
import DdSkeleton from '@uxda/appkit/components/dd-skeleton/index.vue'
|
|
1427
|
+
```
|
|
1428
|
+
|
|
1429
|
+
### Props
|
|
1430
|
+
|
|
1431
|
+
待补充(需要查看组件实现)
|
|
1432
|
+
|
|
1433
|
+
### 使用示例
|
|
1434
|
+
|
|
1435
|
+
```vue
|
|
1436
|
+
<template>
|
|
1437
|
+
<dd-skeleton v-if="loading" :row="3" />
|
|
1438
|
+
<div v-else>
|
|
1439
|
+
<!-- 实际内容 -->
|
|
1440
|
+
</div>
|
|
1441
|
+
</template>
|
|
1442
|
+
|
|
1443
|
+
<script setup>
|
|
1444
|
+
import { ref } from 'vue'
|
|
1445
|
+
import DdSkeleton from '@uxda/appkit/components/dd-skeleton/index.vue'
|
|
1446
|
+
|
|
1447
|
+
const loading = ref(true)
|
|
1448
|
+
</script>
|
|
1449
|
+
```
|
|
1450
|
+
|
|
1451
|
+
---
|
|
1452
|
+
|
|
1453
|
+
## DdNoticeBar - 滚动通告栏
|
|
1454
|
+
|
|
1455
|
+
**功能描述**: 用于显示简短的滚动消息。
|
|
1456
|
+
|
|
1457
|
+
### 导入方式
|
|
1458
|
+
|
|
1459
|
+
```typescript
|
|
1460
|
+
import DdNoticeBar from '@uxda/appkit/components/dd-notice-bar/index.vue'
|
|
1461
|
+
```
|
|
1462
|
+
|
|
1463
|
+
### Props
|
|
1464
|
+
|
|
1465
|
+
待补充(需要查看组件实现)
|
|
1466
|
+
|
|
1467
|
+
### 使用示例
|
|
1468
|
+
|
|
1469
|
+
```vue
|
|
1470
|
+
<template>
|
|
1471
|
+
<dd-notice-bar :show-close="true" @close="handleClose">
|
|
1472
|
+
这是一条滚动通告消息
|
|
1473
|
+
</dd-notice-bar>
|
|
1474
|
+
</template>
|
|
1475
|
+
|
|
1476
|
+
<script setup>
|
|
1477
|
+
import DdNoticeBar from '@uxda/appkit/components/dd-notice-bar/index.vue'
|
|
1478
|
+
|
|
1479
|
+
const handleClose = () => {
|
|
1480
|
+
console.log('关闭通告')
|
|
1481
|
+
}
|
|
1482
|
+
</script>
|
|
1483
|
+
```
|
|
1484
|
+
|
|
1485
|
+
---
|
|
1486
|
+
|
|
1487
|
+
## 其他通用组件
|
|
1488
|
+
|
|
1489
|
+
### DdArea - 地区选择器
|
|
1490
|
+
|
|
1491
|
+
省市区三级联动选择组件。
|
|
1492
|
+
|
|
1493
|
+
### DdSelector - 通用选择器
|
|
1494
|
+
|
|
1495
|
+
下拉或弹窗式的单选/多选组件。
|
|
1496
|
+
|
|
1497
|
+
### BtCropper - 图片裁剪器
|
|
1498
|
+
|
|
1499
|
+
基于 canvas 的高性能图片裁剪工具。
|
|
1500
|
+
|
|
1501
|
+
---
|
|
1502
|
+
|
|
1503
|
+
## 更新日志
|
|
1504
|
+
|
|
1505
|
+
### v1.2.0
|
|
1506
|
+
- ✅ 补全余额模块组件文档
|
|
1507
|
+
- ✅ 补全消息通知模块组件文档
|
|
1508
|
+
- ✅ 补全用户模块组件文档
|
|
1509
|
+
- ✅ 补全注册模块组件文档
|
|
1510
|
+
- ✅ 补全业务场景组件文档
|
|
1511
|
+
- ✅ 补全通用基础组件文档
|
|
1512
|
+
|
|
1513
|
+
### v1.1.0
|
|
1514
|
+
- ✅ 新增组合支付功能(云豆+微信)
|
|
1515
|
+
- ✅ 新增余额不足警告提示
|
|
1516
|
+
- ✅ 优化待支付金额计算逻辑
|
|
1517
|
+
- ✅ 完善确认对话框显示内容
|
|
1518
|
+
|
|
1519
|
+
### v1.0.0
|
|
1520
|
+
- ✅ 基础支付功能
|
|
1521
|
+
- ✅ 云豆支付支持
|
|
1522
|
+
- ✅ 微信支付支持
|
|
1523
|
+
|