diff --git a/uni_modules/hashmall-customer-service/package.json b/uni_modules/hashmall-customer-service/package.json index a5490f9..628d23a 100644 --- a/uni_modules/hashmall-customer-service/package.json +++ b/uni_modules/hashmall-customer-service/package.json @@ -3,28 +3,96 @@ "displayName": "HashMall 前台客服", "version": "0.1.0", "description": "内嵌于 HashMall App、H5 和微信小程序的客服聊天插件", - "keywords": ["客服", "聊天", "WebSocket", "uni-app"], + "keywords": [ + "客服", + "聊天", + "WebSocket", + "uni-app" + ], "engines": { - "HBuilderX": "^4.0.0" + "HBuilderX": "^4.0.0", + "uni-app": "^3.1.0", + "uni-app-x": "^3.1.0" }, "dcloudext": { - "category": ["前端组件", "通用组件"], - "sale": { "regular": { "price": "0.00" }, "sourcecode": { "price": "0.00" } }, - "contact": { "qq": "" }, - "declaration": { "ads": "无", "data": "插件使用商城现有用户登录态和客服消息接口", "permissions": "相册、相机(仅在用户主动发送图片时)" } + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件使用商城现有用户登录态和客服消息接口", + "permissions": "相册、相机(仅在用户主动发送图片时)" + }, + "type": "component-vue", + "darkmode": "-", + "i18n": "-", + "widescreen": "-" }, "uni_modules": { "dependencies": [], "encrypt": [], "platforms": { - "cloud": { "tcb": "u", "aliyun": "u" }, + "cloud": { + "tcb": "-", + "aliyun": "-" + }, "client": { - "App": { "app-vue": "y", "app-nvue": "u" }, - "H5-mobile": { "Safari": "y", "Android Browser": "y", "微信浏览器(Android)": "y", "QQ浏览器(Android)": "y" }, - "H5-pc": { "Chrome": "y", "IE": "u", "Edge": "y", "Firefox": "y", "Safari": "y" }, - "小程序": { "微信": "y", "阿里": "u", "百度": "u", "字节跳动": "u", "QQ": "u", "京东": "u" }, - "Vue": { "vue2": "u", "vue3": "y" } + "uni-app": { + "vue": { + "vue2": "-", + "vue3": "-" + }, + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "vue": "-", + "nvue": "-", + "android": "-", + "ios": "-", + "harmony": "-" + }, + "mp": { + "weixin": "-", + "alipay": "-", + "toutiao": "-", + "baidu": "-", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "-", + "lark": "-", + "xhs": "-" + }, + "quickapp": { + "huawei": "-", + "union": "-" + } + }, + "uni-app-x": { + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "android": "-", + "ios": "-", + "harmony": "-" + }, + "mp": { + "weixin": "-" + } + } } } } -} +} \ No newline at end of file diff --git a/uni_modules/no-data/package.json b/uni_modules/no-data/package.json index 304d532..2237b9b 100644 --- a/uni_modules/no-data/package.json +++ b/uni_modules/no-data/package.json @@ -1,80 +1,97 @@ -{ - "id": "no-data", - "displayName": "no-data", - "version": "1.0.0", - "description": "no-data", - "keywords": [ - "no-data" -], - "repository": "", - "engines": { - "HBuilderX": "^3.1.0" - }, - "dcloudext": { - "category": [ - "前端组件", - "通用组件" - ], - "sale": { - "regular": { - "price": "0.00" - }, - "sourcecode": { - "price": "0.00" - } - }, - "contact": { - "qq": "" - }, - "declaration": { - "ads": "", - "data": "", - "permissions": "" - }, - "npmurl": "" - }, - "uni_modules": { - "dependencies": [], - "encrypt": [], - "platforms": { - "cloud": { - "tcb": "u", - "aliyun": "u" - }, - "client": { - "Vue": { - "vue2": "u", - "vue3": "u" - }, - "App": { - "app-vue": "u", - "app-nvue": "u" - }, - "H5-mobile": { - "Safari": "u", - "Android Browser": "u", - "微信浏览器(Android)": "u", - "QQ浏览器(Android)": "u" - }, - "H5-pc": { - "Chrome": "u", - "IE": "u", - "Edge": "u", - "Firefox": "u", - "Safari": "u" - }, - "小程序": { - "微信": "u", - "阿里": "u", - "百度": "u", - "字节跳动": "u", - "QQ": "u" - }, - "快应用": { - "华为": "u", - "联盟": "u" - } - } - } - } +{ + "id": "no-data", + "displayName": "no-data", + "version": "1.0.0", + "description": "no-data", + "keywords": [ + "no-data" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0", + "uni-app": "^3.1.0", + "uni-app-x": "^3.1.0" + }, + "dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "", + "data": "", + "permissions": "" + }, + "npmurl": "", + "type": "component-vue", + "darkmode": "-", + "i18n": "-", + "widescreen": "-" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "-", + "aliyun": "-" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "-", + "vue3": "-" + }, + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "vue": "-", + "nvue": "-", + "android": "-", + "ios": "-", + "harmony": "-" + }, + "mp": { + "weixin": "-", + "alipay": "-", + "toutiao": "-", + "baidu": "-", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "-", + "lark": "-", + "xhs": "-" + }, + "quickapp": { + "huawei": "-", + "union": "-" + } + }, + "uni-app-x": { + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "android": "-", + "ios": "-", + "harmony": "-" + }, + "mp": { + "weixin": "-" + } + } + } + } + } } \ No newline at end of file diff --git a/uni_modules/uni-registerRequestPermissionTips/changelog.md b/uni_modules/uni-registerRequestPermissionTips/changelog.md deleted file mode 100644 index 67b6d9a..0000000 --- a/uni_modules/uni-registerRequestPermissionTips/changelog.md +++ /dev/null @@ -1,8 +0,0 @@ -## 1.0.3(2024-10-18) -修复4.25版引起的插件回调只触发一次的问题。 -## 1.0.2(2024-09-05) -修复uni.chooseImage或者其他部分情况下弹窗不显示的bug。 -## 1.0.1(2024-05-30) -修复云打包可能报错的bug -## 1.0.0(2024-03-09) -支持全局监听权限申请。当申请权限时,会在页面顶部显示申请权限的目的。 diff --git a/uni_modules/uni-registerRequestPermissionTips/package.json b/uni_modules/uni-registerRequestPermissionTips/package.json deleted file mode 100644 index e730aa1..0000000 --- a/uni_modules/uni-registerRequestPermissionTips/package.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "id": "uni-registerRequestPermissionTips", - "displayName": "uni-registerRequestPermissionTips", - "version": "1.0.3", - "description": "支持android平台全局监听权限的申请。当申请权限时,会在页面顶部显示申请权限的目的。主要解决上架华为应用市场审核要求:APP在调用终端权限时,应同步告知用户申请该权限的目的。", - "keywords": [ - "权限", - "权限申请", - "上架", - "华为" - ], - "repository": "", - "engines": { - "HBuilderX": "^4.0" - }, - "dcloudext": { - "type": "uts", - "sale": { - "regular": { - "price": "0.00" - }, - "sourcecode": { - "price": "0.00" - } - }, - "contact": { - "qq": "" - }, - "declaration": { - "ads": "无", - "data": "无", - "permissions": "无" - }, - "npmurl": "" - }, - "uni_modules": { - "dependencies": [ - ], - "uni-ext-api": { - "uni": { - "registerRequestPermissionTipsListener": { - "name": "registerRequestPermissionTipsListener", - "app": { - "js": false, - "kotlin": true, - "swift": false - } - }, - "unregisterRequestPermissionTipsListener": { - "name": "unregisterRequestPermissionTipsListener", - "app": { - "js": false, - "kotlin": true, - "swift": false - } - }, - "setRequestPermissionTips": { - "name": "setRequestPermissionTips", - "app": { - "js": false, - "kotlin": true, - "swift": false - } - } - } - }, - "encrypt": [], - "platforms": { - "cloud": { - "tcb": "y", - "aliyun": "y", - "alipay": "y" - }, - "client": { - "Vue": { - "vue2": "y", - "vue3": "y" - }, - "App": { - "app-android": "y", - "app-ios": "n", - "app-harmony": "u" - }, - "H5-mobile": { - "Safari": "n", - "Android Browser": "n", - "微信浏览器(Android)": "n", - "QQ浏览器(Android)": "n" - }, - "H5-pc": { - "Chrome": "n", - "IE": "n", - "Edge": "n", - "Firefox": "n", - "Safari": "n" - }, - "小程序": { - "微信": "n", - "阿里": "n", - "百度": "n", - "字节跳动": "n", - "QQ": "n", - "钉钉": "n", - "快手": "n", - "飞书": "n", - "京东": "n" - }, - "快应用": { - "华为": "n", - "联盟": "n" - } - } - } - } -} \ No newline at end of file diff --git a/uni_modules/uni-registerRequestPermissionTips/readme.md b/uni_modules/uni-registerRequestPermissionTips/readme.md deleted file mode 100644 index 2673b32..0000000 --- a/uni_modules/uni-registerRequestPermissionTips/readme.md +++ /dev/null @@ -1,95 +0,0 @@ -## registerRequestPermissionTipsListener(listener?) -注册权限监听事件 -## unregisterRequestPermissionTipsListener(listener?) -取消注册权限监听事件 - -## RequestPermissionTipsListener的属性值 -|名称 |类型 |描述 |必填 | -|:-- |:-- |:-- |:-- | -|onRequest |(permissions:Array)=>void |申请系统权限回调,permissions为触发权限申请的所有权限 |否 | -|onConfirm |(permissions:Array)=>void |弹出系统权限授权框回调,permissions为触发弹出权限授权框的所有权限 |否 | -|onComplete |(permissions:UTSJSONObject)=>void |权限申请完成回调,permissions包括权限及权限的状态。`grant`为权限已获取,`denied`为权限已拒绝 |否 | - -## setRequestPermissionTips(UTSJSONObject) -设置权限监听的说明。支持针对权限设置具体的说明。 - -参考:`{"android.permission.CAMERA":"

相机权限申请说明

"}` - -安卓权限列表可参考[谷歌官方文档](https://developer.android.com/reference/android/Manifest.permission)。 - -权限申请说明基于原生TextView实现,可以实现加载html内容,支持的标签及属性可参考: -``` - 或 :加粗文本。 - 或 :斜体文本。 -:下划线文本。 -:上标文本。 -:下标文本。 -:等宽字体文本。 -:放大字体。 -:缩小字体。 - 或 或 :带有删除线的文本。 -

:段落。 -

:块级容器。 -

,

,

,

,

,
:区域标题元素。 -
    ,
      ,
    1. :无序列表和有序列表。 -
      :换行。 - 和 :设置文本颜色和大小。 -``` - -## 示例 - -``` - -``` \ No newline at end of file diff --git a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/AndroidManifest.xml b/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/AndroidManifest.xml deleted file mode 100644 index 1fb0490..0000000 --- a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/AndroidManifest.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/config.json b/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/config.json deleted file mode 100644 index 7bb39c1..0000000 --- a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "minSdkVersion": "21" -} \ No newline at end of file diff --git a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/index.uts b/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/index.uts deleted file mode 100644 index 8bb315e..0000000 --- a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/index.uts +++ /dev/null @@ -1,148 +0,0 @@ -import { UnregisterRequestPermissionTipsListener, RegisterRequestPermissionTipsListener, RequestPermissionTipsListener, SetRequestPermissionTips } from "../interface"; -import RelativeLayout from 'android.widget.RelativeLayout'; -import LinearLayout from 'android.widget.LinearLayout'; -import Color from 'android.graphics.Color'; -import TextView from 'android.widget.TextView'; -import ViewGroup from 'android.view.ViewGroup'; -import Activity from 'android.app.Activity'; -import HashMap from 'java.util.HashMap'; -import AnimationUtils from 'android.view.animation.AnimationUtils'; -import R from 'io.dcloud.uts.permissionrequest.R' -import Html from 'android.text.Html'; -import View from 'android.view.View'; -import Runnable from "java.lang.Runnable" - -let PermissionTipsView : View | null = null -let permissionTips : HashMap = new HashMap() -var permissionListener : RequestPermissionListener | null = null -var listener : RequestPermissionTipsListener | null = null - -@UTSJS.keepAlive -export function unregisterRequestPermissionTipsListener(e : RequestPermissionTipsListener | null) { - listener = null; - if (permissionListener != null) { - permissionListener!.stop() - permissionListener = null - } - if (PermissionTipsView != null) { - if (PermissionTipsView!.getParent() != null) { - PermissionTipsView!.setAnimation(null); - ((PermissionTipsView!.getParent()) as ViewGroup).removeView(PermissionTipsView) - } - PermissionTipsView = null - } -} - -@UTSJS.keepAlive -export function registerRequestPermissionTipsListener(l : RequestPermissionTipsListener | null) { - listener = l - if (permissionListener == null) { - permissionListener = uni.createRequestPermissionListener() - permissionListener!.onRequest((permissions : Array) => { - if (listener != null) - listener!.onRequest?.invoke(permissions) - }) - permissionListener!.onConfirm((permissions : Array) => { - UTSAndroid.getUniActivity()!.runOnUiThread(new ConfirmRunnable(permissions)) - }) - permissionListener!.onComplete((permissions : Array) => { - UTSAndroid.getUniActivity()!.runOnUiThread(new CompleteRunnable(permissions)) - }) - } -} - -class ConfirmRunnable implements Runnable { - permissions : Array - constructor(permissions : Array) { - this.permissions = permissions - } - override run() { - let activity = UTSAndroid.getUniActivity()! - if (PermissionTipsView != null && PermissionTipsView!.getParent() != null) { - PermissionTipsView!.setAnimation(null); - ((PermissionTipsView!.getParent()) as ViewGroup).removeView(PermissionTipsView) - } - if (this.permissions.length > 0) { - try { - PermissionTipsView = createPermissionWindow(activity, this.permissions); - if (PermissionTipsView != null) { - (activity.findViewById(android.R.id.content) as ViewGroup).addView(PermissionTipsView!) - } - } catch (e) { - console.log(e) - } - } - if (listener != null) - listener!.onConfirm?.invoke(this.permissions) - } -} - -class CompleteRunnable implements Runnable { - permissions : Array - constructor(permissions : Array) { - this.permissions = permissions - } - override run() { - let activity = UTSAndroid.getUniActivity()! - if (PermissionTipsView != null) { - PermissionTipsView!.setAnimation(AnimationUtils.loadAnimation(activity, R.anim.popupwindow_exit)); - ((PermissionTipsView!.getParent()) as ViewGroup).removeView(PermissionTipsView!) - PermissionTipsView = null - } - if (listener != null) { - var permissionStatus = {} - for (var p in this.permissions) { - permissionStatus[p] = UTSAndroid.checkSystemPermissionGranted(UTSAndroid.getUniActivity()!, [p]) ? "grant" : "denied" - } - listener!.onComplete?.invoke(permissionStatus) - } - } -} - -export const setRequestPermissionTips : SetRequestPermissionTips = (tips : UTSJSONObject) => { - permissionTips.clear() - for (var k in tips) { - permissionTips.put(k, tips[k] != null ? tips[k].toString() : "") - } -} - -function createPermissionWindow(activity : Activity, permissions : Array) : ViewGroup | null { - let rootView = new RelativeLayout(activity); - rootView.setBackgroundColor(Color.TRANSPARENT); - let backgroundView = new LinearLayout(activity); - backgroundView.setPadding(30, 0, 30, 30); - backgroundView.setOrientation(1) - backgroundView.setBackgroundResource(R.drawable.dcloud_permission_background); - let permissionTipsList : Array = new Array() - for (var p in permissions) { - if (permissionTips.containsKey(p) && permissionTipsList.indexOf(permissionTips.get(p)) == -1) { - permissionTipsList.push(permissionTips.get(p)!) - } - } - for (var p in permissionTipsList) { - let text = new TextView(activity); - text.setText(Html.fromHtml(p, Html.FROM_HTML_SEPARATOR_LINE_BREAK_HEADING)) - text.setPadding(0, 30, 0, 0) - text.setTextSize((5 * getScale()).toFloat()) - text.setTextColor(Color.BLACK) - backgroundView.addView(text) - } - if (backgroundView.getChildCount() == 0) { - return null; - } - let rll = new RelativeLayout.LayoutParams(-1, -2) - rll.topMargin = (UTSAndroid.getStatusBarHeight() * getScale()).toInt(); - rll.leftMargin = 30; - rll.rightMargin = 30; - rll.bottomMargin = 30; - rootView.addView(backgroundView, rll) - rootView.setAnimation(AnimationUtils.loadAnimation(activity, R.anim.popupwindow_enter)); - return rootView; -} - -function getScale() : Float { - if (UTSAndroid.getUniActivity() != null) { - return UTSAndroid.getUniActivity()!.resources.displayMetrics.scaledDensity - } - return (0 as number).toFloat(); -} \ No newline at end of file diff --git a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/anim/popupwindow_enter.xml b/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/anim/popupwindow_enter.xml deleted file mode 100644 index a4fe5da..0000000 --- a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/anim/popupwindow_enter.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - \ No newline at end of file diff --git a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/anim/popupwindow_exit.xml b/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/anim/popupwindow_exit.xml deleted file mode 100644 index e5ddc69..0000000 --- a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/anim/popupwindow_exit.xml +++ /dev/null @@ -1,5 +0,0 @@ - - \ No newline at end of file diff --git a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/drawable/dcloud_permission_background.xml b/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/drawable/dcloud_permission_background.xml deleted file mode 100644 index de0205a..0000000 --- a/uni_modules/uni-registerRequestPermissionTips/utssdk/app-android/res/drawable/dcloud_permission_background.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/uni_modules/uni-registerRequestPermissionTips/utssdk/interface.uts b/uni_modules/uni-registerRequestPermissionTips/utssdk/interface.uts deleted file mode 100644 index 7183053..0000000 --- a/uni_modules/uni-registerRequestPermissionTips/utssdk/interface.uts +++ /dev/null @@ -1,19 +0,0 @@ -export type RequestPermissionTipsListener = { - onRequest ?: ((permissions : Array) => void) | null, - onConfirm ?: ((permission : Array) => void) | null, - onComplete ?: ((permissions : UTSJSONObject) => void) | null -} - - -export type RegisterRequestPermissionTipsListener = (listener : RequestPermissionTipsListener | null) => void -export type UnregisterRequestPermissionTipsListener = (listener : RequestPermissionTipsListener | null) => void -export type SetRequestPermissionTips = (tips : UTSJSONObject) => void - -export interface Uni { - - registerRequestPermissionTipsListener : RegisterRequestPermissionTipsListener, - - unregisterRequestPermissionTipsListener : UnregisterRequestPermissionTipsListener - - setRequestPermissionTips : SetRequestPermissionTips -} \ No newline at end of file diff --git a/uni_modules/uni-requestMerchantTransfer/changelog.md b/uni_modules/uni-requestMerchantTransfer/changelog.md new file mode 100644 index 0000000..f0e908f --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/changelog.md @@ -0,0 +1,5 @@ +## 1.1.1(2026-07-11) +修复 uni-requestMerchantTransfer 商家转账回调解析细节问题 +## 1.1.0(2026-07-10) +新增 harmony 平台支持 + diff --git a/uni_modules/uni-requestMerchantTransfer/package.json b/uni_modules/uni-requestMerchantTransfer/package.json new file mode 100644 index 0000000..4c68402 --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/package.json @@ -0,0 +1,130 @@ +{ + "id": "uni-requestMerchantTransfer", + "displayName": "uni-requestMerchantTransfer", + "version": "1.1.1", + "description": "商家转账用户确认模式下,拉起页面请求用户确认收款Transfer", + "keywords": [ + "确认收款", + "免确认收款授权" +], + "repository": "", + "engines": { + "HBuilderX": "^3.6.8", + "uni-app": "^4.61", + "uni-app-x": "^4.61" + }, + "dcloudext": { + "type": "uts", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "uni-ext-api": { + "uni": { + "requestMerchantTransfer": { + "name": "requestMerchantTransfer", + "app": { + "js": false, + "kotlin": true, + "swift": true, + "arkts": true + } + } + } + }, + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "x", + "aliyun": "x", + "alipay": "x" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "x", + "vue3": "√" + }, + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "vue": "-", + "nvue": "-", + "android": { + "extVersion": "1.1.0", + "minVersion": "34" + }, + "ios": { + "extVersion": "1.1.0", + "minVersion": "12" + }, + "harmony": { + "extVersion": "1.1.0", + "minVersion": "" + } + }, + "mp": { + "weixin": "-", + "alipay": "-", + "toutiao": "-", + "baidu": "-", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "-", + "lark": "-", + "xhs": "-" + }, + "quickapp": { + "huawei": "-", + "union": "-" + } + }, + "uni-app-x": { + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "android": { + "extVersion": "1.1.0", + "minVersion": "34" + }, + "ios": { + "extVersion": "1.1.0", + "minVersion": "12" + }, + "harmony": { + "extVersion": "1.1.0", + "minVersion": "" + } + }, + "mp": { + "weixin": "-" + } + } + } + } + } +} diff --git a/uni_modules/uni-requestMerchantTransfer/readme.md b/uni_modules/uni-requestMerchantTransfer/readme.md new file mode 100644 index 0000000..6a9ccc7 --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/readme.md @@ -0,0 +1,44 @@ +# uni-requestMerchantTransfer +实现打开微信请求用户确认收款功能。 +[API规范文档](https://doc.dcloud.net.cn/uni-app-x/api/request-merchant-transfer.html) + + +## uts 语言介绍 +uts,全称 uni type script,是一门跨平台的、高性能的、强类型的现代编程语言。 + +它可以被编译为不同平台的编程语言,如: + +Android平台:编译为Kotlin +iOS平台:编译Swift +鸿蒙OS平台:编译为ArkTS +web平台/小程序:编译为JavaScript + +uts 采用了与 ts 基本一致的语法规范,支持绝大部分 ES6 API。 + +但为了跨端,uts进行了一些约束和特定平台的增补。 + +过去在js引擎下运行支持的语法,大部分在uts的处理下也可以平滑的在kotlin和swift中使用。但有一些无法抹平,需要使用条件编译。 + +和uni-app的条件编译类似,uts也支持条件编译。写在条件编译里的,可以调用平台特有的扩展语法。 + + +## uts 插件介绍 +UTS 插件是一种特定的 uni_modules 插件,其核心目的是允许 uni-app/uni-app x 开发者使用 UTS 语法来调用扩展 API(封装原生系统的API或三方SDK)。 + +UTS 插件的实现代码主要位于 utssdk 目录下,并按平台进行分离和组织: +| 目录/文件 | 目标平台 | 实现语言 | 作用描述 | +| -- | -- | -- | -- | +|utssdk/app-android|Android|UTS, Kotlin, Java|存放 UTS 插件在 Android 平台上的具体实现源码| +|utssdk/app-ios|iOS|UTS, Swift|存放 UTS 插件在 iOS 平台上的具体实现源码| +|utssdk/app-harmony|HarmonyOS (鸿蒙)|UTS, ArkTS|存放 UTS 插件在 HarmonyOS 平台上的具体实现源码| +|utssdk/*.uts|多平台共用|UTS|存放使用 UTS 语言编写的、可供 所有平台 共用的实现源码| + + +## 参考文档 +- [uts 语言介绍](https://doc.dcloud.net.cn/uni-app-x/uts/) +- [uts 和 ts 的差异](https://doc.dcloud.net.cn/uni-app-x/uts/uts_diff_ts.html) +- [uts 插件开发文档](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin.html) +- [uts 插件原生语言混编开发文档](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-plugin-hybrid.html) +- [uts 插件 Android 平台开发注意事项](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-for-android.html) +- [uts 插件 iOS 平台开发注意事项](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-for-ios.html) +- [uts 插件 HarmonyOS 平台开发注意事项](https://doc.dcloud.net.cn/uni-app-x/plugin/uts-for-ios.html) diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-android/config.json b/uni_modules/uni-requestMerchantTransfer/utssdk/app-android/config.json new file mode 100644 index 0000000..b0d45f6 --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-android/config.json @@ -0,0 +1,9 @@ +{ + "minSdkVersion": "21", + "dependencies": [ + "com.tencent.mm.opensdk:wechat-sdk-android:6.8.0" + ], + "thirdSDKs": [ + "weixin" + ] +} \ No newline at end of file diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-android/index.uts b/uni_modules/uni-requestMerchantTransfer/utssdk/app-android/index.uts new file mode 100644 index 0000000..52c251f --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-android/index.uts @@ -0,0 +1,59 @@ + +import { RequestMerchantTransfer, RequestMerchantTransferOptions, RequestMerchantTransferGeneralCallbackResult } from '../interface.uts'; +import WXAPIFactory from 'com.tencent.mm.opensdk.openapi.WXAPIFactory' +import URLEncoder from 'java.net.URLEncoder' +import StandardCharsets from 'java.nio.charset.StandardCharsets' +import WXOpenBusinessView from 'com.tencent.mm.opensdk.modelbiz.WXOpenBusinessView' +import Build from 'com.tencent.mm.opensdk.constants.Build' +export const requestMerchantTransfer : RequestMerchantTransfer = function (options : RequestMerchantTransferOptions) { + var appId = options.appId + var api = WXAPIFactory.createWXAPI(UTSAndroid.getAppContext(), appId, false) + var wxSdkVersion = api.wxAppSupportAPI + if (wxSdkVersion >= Build.OPEN_BUSINESS_VIEW_SDK_INT) { + var req = WXOpenBusinessView.Req() + req.businessType = "requestMerchantTransfer" + + // 通过 URL 编码处理参数,确保特殊字符不会影响请求 + var query = "" + query += 'mchId=' + encodeParams(options.mchId) + '&' + query += 'package=' + encodeParams(options.package) + '&' + if (appId != null) { + query += 'appId=' + encodeParams(options.appId) + '&' + } + if (options.openId != null) { + query += 'openId=' + encodeParams(options.openId) + '&' + } + if (options.subAppId != null) { + query += 'subAppId=' + encodeParams(options.subAppId) + '&' + } + if (options.subMchId != null) { + query += 'subMchId=' + encodeParams(options.subMchId) + '&' + } + query = query.substring(0, query.length - 1) + req.query = query + // 发送请求并检查返回值 + var ret = api.sendReq(req) + if (ret) { + var result : RequestMerchantTransferGeneralCallbackResult = { + errMsg: 'ok' + } + options.success?.(result) + options.complete?.(result) + }else{ + var result : RequestMerchantTransferGeneralCallbackResult = { + errMsg: 'fail' + } + options.fail?.(result) + options.complete?.(result) + } + } else { + var result : RequestMerchantTransferGeneralCallbackResult = { + errMsg: '当前微信版本过低,请升级微信以使用该功能' + } + options.fail?.(result) + options.complete?.(result) + } +} +function encodeParams(params : string | null) : string | null { + return URLEncoder.encode(params, StandardCharsets.UTF_8.toString()) +} \ No newline at end of file diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-harmony/config.json b/uni_modules/uni-requestMerchantTransfer/utssdk/app-harmony/config.json new file mode 100644 index 0000000..f8cd593 --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-harmony/config.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "@tencent/wechat_open_sdk": "1.0.15" + } +} diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-harmony/index.uts b/uni_modules/uni-requestMerchantTransfer/utssdk/app-harmony/index.uts new file mode 100644 index 0000000..2a132cb --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-harmony/index.uts @@ -0,0 +1,120 @@ +import { RequestMerchantTransfer, RequestMerchantTransferGeneralCallbackResult, RequestMerchantTransferOptions } from '../interface.uts' +import { + handleWechatMerchantTransferWant, + requestWechatMerchantTransfer, + WechatMerchantTransferNativeResult +} from './wechatMerchantTransfer.ets' +import { + REQUEST_MERCHANT_TRANSFER_APP_ID_REQUIRED, + REQUEST_MERCHANT_TRANSFER_BUSINESS_FAILED, + REQUEST_MERCHANT_TRANSFER_CANCEL, + REQUEST_MERCHANT_TRANSFER_MCH_ID_REQUIRED, + REQUEST_MERCHANT_TRANSFER_OK, + REQUEST_MERCHANT_TRANSFER_OPEN_SDK_ERROR, + REQUEST_MERCHANT_TRANSFER_PACKAGE_REQUIRED, + REQUEST_MERCHANT_TRANSFER_PARSE_RESPONSE_ERROR, + REQUEST_MERCHANT_TRANSFER_WECHAT_NOT_INSTALLED, + REQUEST_MERCHANT_TRANSFER_WECHAT_VERSION_LOW +} from '../unierror.uts' + +let isWechatMerchantTransferHandlerRegistered = false + +function ensureWechatMerchantTransferHandlerRegistered() : void { + if (isWechatMerchantTransferHandlerRegistered) { + return + } + isWechatMerchantTransferHandlerRegistered = true + UTSHarmony.onAppAbilityCreate((want, _launchParam) => { + handleWechatMerchantTransferWant(want) + }) + UTSHarmony.onAppAbilityNewWant((want, _launchParam) => { + handleWechatMerchantTransferWant(want) + }) +} + +function invokeCallback(options : RequestMerchantTransferOptions, errMsg : string, isSuccess : boolean) : void { + const result : RequestMerchantTransferGeneralCallbackResult = { + errMsg: errMsg + } + if (isSuccess) { + options.success?.(result) + } else { + options.fail?.(result) + } + options.complete?.(result) +} + +function isEmptyString(value : string | null) : boolean { + return value == null || value.length == 0 +} + +function appendQueryParam(query : string, key : string, value : string) : string { + const param = key + '=' + encodeURIComponent(value) + if (query.length > 0) { + return query + '&' + param + } + return param +} + +function getValidateErrorMsg(options : RequestMerchantTransferOptions) : string { + if (isEmptyString(options.mchId)) { + return REQUEST_MERCHANT_TRANSFER_MCH_ID_REQUIRED.errMsg + } + if (isEmptyString(options.package)) { + return REQUEST_MERCHANT_TRANSFER_PACKAGE_REQUIRED.errMsg + } + if (isEmptyString(options.appId)) { + return REQUEST_MERCHANT_TRANSFER_APP_ID_REQUIRED.errMsg + } + return '' +} + +function buildRequestMerchantTransferQuery(options : RequestMerchantTransferOptions, appId : string) : string { + let query = '' + // 微信官方文档上只有下方3个参数,没有 openId、subAppId、subMchId + // 相关文档: + // 用户确认收款:https://pay.weixin.qq.com/doc/v3/merchant/4019670774 + // 免确认收款授权:https://pay.weixin.qq.com/doc/v3/merchant/4020320137 + query = appendQueryParam(query, 'mchId', options.mchId) + query = appendQueryParam(query, 'package', options.package) + query = appendQueryParam(query, 'appId', appId) + return query +} + +function handleNativeResult(options : RequestMerchantTransferOptions, nativeResult : WechatMerchantTransferNativeResult) : void { + if (nativeResult.result == 'success') { + invokeCallback(options, REQUEST_MERCHANT_TRANSFER_OK, true) + return + } + + let errMsg = REQUEST_MERCHANT_TRANSFER_BUSINESS_FAILED.errMsg + if (nativeResult.result == 'cancel') { + errMsg = REQUEST_MERCHANT_TRANSFER_CANCEL.errMsg + } else if (nativeResult.result == 'wechat_not_installed') { + errMsg = REQUEST_MERCHANT_TRANSFER_WECHAT_NOT_INSTALLED.errMsg + } else if (nativeResult.result == 'wechat_version_low') { + errMsg = REQUEST_MERCHANT_TRANSFER_WECHAT_VERSION_LOW.errMsg + } else if (nativeResult.result == 'parse_response_error') { + errMsg = REQUEST_MERCHANT_TRANSFER_PARSE_RESPONSE_ERROR.errMsg + } else if (nativeResult.result == 'open_sdk_error' || nativeResult.result == 'timeout' || nativeResult.result == 'request_interrupted') { + errMsg = REQUEST_MERCHANT_TRANSFER_OPEN_SDK_ERROR.errMsg + } + invokeCallback(options, errMsg, false) +} + +export const requestMerchantTransfer : RequestMerchantTransfer = function (options : RequestMerchantTransferOptions) { + const validateErrorMsg = getValidateErrorMsg(options) + if (validateErrorMsg.length > 0) { + invokeCallback(options, validateErrorMsg, false) + return + } + + ensureWechatMerchantTransferHandlerRegistered() + const appId : string = options.appId ?? '' + const query = buildRequestMerchantTransferQuery(options, appId) + requestWechatMerchantTransfer(appId, query).then((nativeResult : WechatMerchantTransferNativeResult) => { + handleNativeResult(options, nativeResult) + }).catch((_error : Error) => { + invokeCallback(options, REQUEST_MERCHANT_TRANSFER_OPEN_SDK_ERROR.errMsg, false) + }) +} diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-harmony/wechatMerchantTransfer.ets b/uni_modules/uni-requestMerchantTransfer/utssdk/app-harmony/wechatMerchantTransfer.ets new file mode 100644 index 0000000..d020135 --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-harmony/wechatMerchantTransfer.ets @@ -0,0 +1,161 @@ +import { common, Want } from '@kit.AbilityKit'; +import * as wxopensdk from '@tencent/wechat_open_sdk'; + +export class WechatMerchantTransferNativeResult { + result: string = ''; + errMsg: string = ''; + extMsg: string = ''; + + constructor(result: string, errMsg: string, extMsg: string) { + this.result = result; + this.errMsg = errMsg; + this.extMsg = extMsg; + } +} + +const MERCHANT_TRANSFER_BUSINESS_TYPE: string = 'requestMerchantTransfer'; +const REQUEST_TIMEOUT_MS: number = 120000; + +let currentAppId: string = ''; +let currentWxApi: wxopensdk.WXApi | null = null; +let pendingResolve: ((result: WechatMerchantTransferNativeResult) => void) | null = null; +let timeoutId: number = -1; + +class MerchantTransferRespPayload { + result: string | null = null; +} + +function buildResult(result: string, errMsg: string, extMsg: string): WechatMerchantTransferNativeResult { + return new WechatMerchantTransferNativeResult(result, errMsg, extMsg); +} + +function getWxApi(appId: string): wxopensdk.WXApi { + let wxApi = currentWxApi; + if (wxApi == null || currentAppId != appId) { + currentAppId = appId; + wxApi = wxopensdk.WXAPIFactory.createWXAPI(appId); + currentWxApi = wxApi; + } + return wxApi; +} + +function clearPendingTimeout(): void { + if (timeoutId != -1) { + clearTimeout(timeoutId); + timeoutId = -1; + } +} + +function finishPending(result: WechatMerchantTransferNativeResult): void { + const resolve = pendingResolve; + pendingResolve = null; + clearPendingTimeout(); + if (resolve != null) { + resolve(result); + } +} + +function parseMerchantTransferResp(extMsg: string): WechatMerchantTransferNativeResult { + if (extMsg.length == 0) { + return buildResult('parse_response_error', 'parse response failed', extMsg); + } + + try { + const payload = JSON.parse(extMsg) as MerchantTransferRespPayload; + const result: string = payload.result ?? ''; + + if (result == 'success') { + return buildResult('success', '', extMsg); + } + if (result == 'fail') { + return buildResult('fail', 'business failed', extMsg); + } + if (result == 'cancel') { + return buildResult('cancel', 'business canceled', extMsg); + } + return buildResult('business_failed', 'unknown business result', extMsg); + } catch (_error) { + return buildResult('parse_response_error', 'parse response failed', extMsg); + } +} + +class WechatMerchantTransferEventHandler implements wxopensdk.WXApiEventHandler { + onResp(resp: wxopensdk.BaseResp): void { + if (resp instanceof wxopensdk.OpenBusinessViewResp) { + if ("requestMerchantTransfer" === resp.businessType) { + if (resp.errCode == wxopensdk.ErrCode.ERR_UNSUPPORTED) { + finishPending(buildResult('wechat_version_low', resp.errStr ?? 'wechat version is too low', '')); + return; + } + + const businessType: string = resp.businessType ?? ''; + if (businessType != MERCHANT_TRANSFER_BUSINESS_TYPE) { + return; + } + + const extMsg: string = resp.extMsg ?? ''; + if (resp.errCode == wxopensdk.ErrCode.ERR_USER_CANCEL && extMsg.length == 0) { + finishPending(buildResult('cancel', resp.errStr ?? 'business canceled', '')); + return; + } + finishPending(parseMerchantTransferResp(extMsg)); + } + } + } + + onReq(_req: wxopensdk.BaseReq): void { + } +} + +const wxEventHandler = new WechatMerchantTransferEventHandler(); + +export async function requestWechatMerchantTransfer(appId: string, query: string): Promise { + if (appId == '') { + return buildResult('invalid_app_id', 'appId is empty', ''); + } + if (query == '') { + return buildResult('invalid_query', 'query is empty', ''); + } + + const wxApi: wxopensdk.WXApi = getWxApi(appId); + + if (!wxApi.isWXAppInstalled()) { + return buildResult('wechat_not_installed', 'wechat is not installed', ''); + } + + const req = new wxopensdk.OpenBusinessViewReq(); + req.businessType = MERCHANT_TRANSFER_BUSINESS_TYPE; + req.query = query; + + const context = getContext() as common.UIAbilityContext; + const responsePromise = new Promise((resolve) => { + if (pendingResolve != null) { + finishPending(buildResult('request_interrupted', 'another merchant transfer request started', '')); + } + + pendingResolve = resolve; + timeoutId = setTimeout(() => { + finishPending(buildResult('timeout', 'wait wechat response timeout', '')); + }, REQUEST_TIMEOUT_MS); + }); + + try { + const sendResult: boolean = await wxApi.sendReq(context, req); + if (!sendResult) { + finishPending(buildResult('open_sdk_error', 'sendReq returned false', '')); + } + } catch (_error) { + finishPending(buildResult('open_sdk_error', 'sendReq failed', '')); + } + + return responsePromise; +} + +export function handleWechatMerchantTransferWant(want: Want): void { + const wxApi = currentWxApi; + if (wxApi == null || currentAppId.length == 0) { + return; + } + + wxApi.handleWant(want, wxEventHandler); +} diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/README.txt b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/README.txt new file mode 100644 index 0000000..6bd6c2c --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/README.txt @@ -0,0 +1,167 @@ +重要! +SDK2.0.5 +1. 支持模块化集成​:XCFramework 头文件引用改为标准化格式 #import ,解决路径冲突并支持 Swift/ObjC 混合开发 +2. 修复openWXApp偶现失败的问题 + +SDK2.0.4 +1.增加privacy manifest文件 +2.修复跳微信时可能卡顿的问题 + +SDK2.0.2 +1. 优化XCFramework打包方式 + +SDK2.0.1 +1. SDK支持XCFramework + +SDK2.0.0 +1. 分享能力支持内容防篡改校验 + +SDK1.9.9 +1. 授权登录支持关闭自动授权 +2. 分享支持添加签名,防止篡改 + +SDK1.9.7 +1. 适配CocoaPods + +SDK1.9.6 +1. 适配iOS 16,减少读写剪切板 + +SDK1.9.4 +1. 修复授权登录取消/拒绝时state字段没有带回 + +SDK1.9.3 +1. 新增发起二维码支付能力 + +SDK1.9.2 +1. 新增发起企微客服会话能力 + +SDK1.9.1 +1. 音乐视频分享类型增加运营H5字段 + +SDK1.8.9 +1. 增加音乐视频分享类型 + +SDK1.8.8 +1. 增加游戏直播消息类型 + +SDK1.8.7.1 +1. 修复Xcode11以下编译不通过 + +SDK1.8.7 +1. 修复iPadOS,未安装微信的情况下,因为UA问题无法授权登录 +2. 修复未安装微信的情况下, 适配了UIScene的App因为UIAlertView Crash +3. 增加Universal Link检测函数 + +SDK1.8.6.2 +1. 修改包含"UIWebView"字符的类名 + +SDK1.8.6.1 +1.短信授权登录使用的UIWebview切换成WKWebview + +SDK1.8.6 +1. 支持Universal Link拉起微信以及返回App +2. SDK移除MTA库 + +SDK1.8.5 +1. 更换MTA库:取消对剪切板的访问, 防止和其他SDK竞争导致crash +2. NSMutableArray的MTA分类方法改名,减少命名冲突 +3. 不含支付功能版本移除非税支付和医保支付接口 +4. 分享音乐支持填写歌词和高清封面图 + +SDK1.8.4 +1. 调整分享图片大小限制 +2. 新增openBusinessView接口 + +SDK1.8.3 +1. SDK增加调起微信刷卡支付接口 +2. SDK增加小程序订阅消息接口 +3. 修复小程序订阅消息接口没有resp的问题 + +SDK1.8.2 +1. SDK增加开发票授权 WXInvoiceAuthInsert +2. SDK增加非税接口 WXNontaxPay +3. SDK增加医保接口 WXPayInsurance +4. 更换MTA库 + +SDK1.8.1 +1. SDK打开小程序支持指定版本(体验,开发,正式版) +2. SDK分享小程序支持指定版本(体验,开发,正式版) +3. SDK支持输出log日志 + +SDK1.8.0 +1. SDK支持打开小程序 +2. SDK分享小程序支持shareTicket + +SDK1.7.9 +1. SDK订阅一次性消息 + +SDK1.7.8 +1 SDK分享小程序支持大图 + +SDK1.7.7 +1 增加SDK分享小程序 +2 增加选择发票接口 + +SDK1.7.6 +1. 提高稳定性 +1 修复mta崩溃 +2 新增接口支持开发者关闭mta数据统计上报 + +SDK1.7.5 +1. 提高稳定性 +2. 加快registerApp接口启动速度 + +SDK1.7.4 +1. 更新支持iOS启用 ATS(App Transport Security) +2. 需要在工程中链接CFNetwork.framework +3. 在工程配置中的”Other Linker Flags”中加入”-Objc -all_load” + +SDK1.7.3 +1. 增强稳定性,适配iOS10 +2. 修复小于32K的jpg格式缩略图设置失败的问题 + +SDK1.7.2 +1. 修复因CTTeleponyNetworkInfo引起的崩溃问题 + +SDK1.7.1 +1. 支持兼容ipv6(提升稳定性) +2. xCode Version 7.3.1 (7D1014) 编译 + +SDK1.7 +1. 支持兼容ipv6 +2. 修复若干问题增强稳定性 + +SDK1.6.3 +1. xCode7.2 构建的sdk包。 +2. 请使用xCode7.2进行编译。 +3. 需要在Build Phases中Link Security.framework +4. 修复若干小问题。 + +SDK1.6.2 +1、xCode7.1 构建的sdk包 +2、请使用xCode7.1进行编译 + +SDK1.6.1 +1、修复armv7s下,bitcode可能编译不过 +2、解决warning + +SDK1.6 +1、iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。 +受此影响,当你的应用在iOS 9中需要使用微信SDK的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码: +LSApplicationQueriesSchemes + +weixin + +NSAppTransportSecurity + +NSAllowsArbitraryLoads + + +2、开发者需要在工程中链接上 CoreTelephony.framework +3、解决bitcode编译不过问题 + +SDK1.5 +1、废弃safeSendReq:接口,使用sendReq:即可。 +2、新增+(BOOL) sendAuthReq:(SendAuthReq*) req viewController : (UIViewController*) viewController delegate:(id) delegate; +支持未安装微信情况下Auth,具体见WXApi.h接口描述 +3、微信开放平台新增了微信模块用户统计功能,便于开发者统计微信功能模块的用户使用和活跃情况。开发者需要在工程中链接上:SystemConfiguration.framework,libz.dylib,libsqlite3.0.dylib。 diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/WXApi.h b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/WXApi.h new file mode 100644 index 0000000..1ca22a6 --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/WXApi.h @@ -0,0 +1,231 @@ +// +// WXApi.h +// 所有Api接口 +// +// Created by Wechat on 12-2-28. +// Copyright (c) 2012年 Tencent. All rights reserved. +// + +#import +#import "WXApiObject.h" + +NS_ASSUME_NONNULL_BEGIN + + +typedef BOOL(^WXGrantReadPasteBoardPermissionCompletion)(void); + + +#pragma mark - WXApiDelegate +/*! @brief 接收并处理来自微信终端程序的事件消息 + * + * 接收并处理来自微信终端程序的事件消息,期间微信界面会切换到第三方应用程序。 + * WXApiDelegate 会在handleOpenURL:delegate:中使用并触发。 + */ +@protocol WXApiDelegate +@optional + +/*! @brief 收到一个来自微信的请求,第三方应用程序处理完后调用sendResp向微信发送结果 + * + * 收到一个来自微信的请求,异步处理完成后必须调用sendResp发送处理结果给微信。 + * 可能收到的请求有GetMessageFromWXReq、ShowMessageFromWXReq等。 + * @param req 具体请求内容,是自动释放的 + */ +- (void)onReq:(BaseReq*)req; + + + +/*! @brief 发送一个sendReq后,收到微信的回应 + * + * 收到一个来自微信的处理结果。调用一次sendReq后会收到onResp。 + * 可能收到的处理结果有SendMessageToWXResp、SendAuthResp等。 + * @param resp具体的回应内容,是自动释放的 + */ +- (void)onResp:(BaseResp*)resp; + +/* ! @brief 用于在iOS16以及以上系统上,控制OpenSDK是否读取剪切板中微信传递的数据以及读取的时机 + * 在iOS16以及以上系统,在SDK需要读取剪切板中微信写入的数据时,会回调该方法。没有实现默认会直接读取微信通过剪切板传递过来的数据 + * 注意: + * 1. 只在iOS16以及以上的系统版本上回调; + * 2. 不实现时,OpenSDK会直接调用读取剪切板接口,读取微信传递过来的数据; + * 3. 若实现该方法:开发者需要通过调用completion(), 支持异步,通知SDK允许读取剪切板中微信传递的数据, + * 不调用completion()则代表不授权OpenSDK读取剪切板,会导致收不到onReq:, onResp:回调,无法后续业务流程。请谨慎使用 + * 4. 不要长时间持有completion不释放,可能会导致内存泄漏。 + */ +- (void)onNeedGrantReadPasteBoardPermissionWithURL:(nonnull NSURL *)openURL completion:(nonnull WXGrantReadPasteBoardPermissionCompletion)completion; + +@end + +#pragma mark - WXApiLogDelegate + +@protocol WXApiLogDelegate + +- (void)onLog:(NSString*)log logLevel:(WXLogLevel)level; + +@end + + +#pragma mark - WXApi + +/*! @brief 微信Api接口函数类 + * + * 该类封装了微信终端SDK的所有接口 + */ +@interface WXApi : NSObject + +/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。 + * + * 需要在每次启动第三方应用程序时调用。 + * @attention 请保证在主线程中调用此函数 + * @param appid 微信开发者ID + * @param universalLink 微信开发者Universal Link + * @return 成功返回YES,失败返回NO。 + */ ++ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink; + + +/*! @brief 处理旧版微信通过URL启动App时传递的数据 + * + * 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。 + * @param url 微信启动第三方应用时传递过来的URL + * @param delegate WXApiDelegate对象,用来接收微信触发的消息。 + * @return 成功返回YES,失败返回NO。 + */ ++ (BOOL)handleOpenURL:(NSURL *)url delegate:(nullable id)delegate; + + +/*! @brief 处理微信通过Universal Link启动App时传递的数据 + * + * 需要在 application:continueUserActivity:restorationHandler:中调用。 + * @param userActivity 微信启动第三方应用时系统API传递过来的userActivity + * @param delegate WXApiDelegate对象,用来接收微信触发的消息。 + * @return 成功返回YES,失败返回NO。 + */ ++ (BOOL)handleOpenUniversalLink:(NSUserActivity *)userActivity delegate:(nullable id)delegate; + + +/*! @brief 检查微信是否已被用户安装 + * + * @return 微信已安装返回YES,未安装返回NO。 + */ ++ (BOOL)isWXAppInstalled; + + + +/*! @brief 判断当前微信的版本是否支持OpenApi + * + * @return 支持返回YES,不支持返回NO。 + */ ++ (BOOL)isWXAppSupportApi; + + +/*! @brief 判断当前微信的版本是否支持分享微信状态功能 + * + * @attention 需在工程LSApplicationQueriesSchemes配置中添加weixinStateAPI + * @return 支持返回YES,不支持返回NO。 + */ ++ (BOOL)isWXAppSupportStateAPI; + + +#ifndef BUILD_WITHOUT_PAY +/*! @brief 判断当前微信的版本是否支持二维码拉起微信支付 + * + * @attention 需在工程LSApplicationQueriesSchemes配置中添加weixinQRCodePayAPI + * @return 支持返回YES,不支持返回NO。 + */ ++ (BOOL)isWXAppSupportQRCodePayAPI; + +#endif + + +/*! @brief 获取微信的itunes安装地址 + * + * @return 微信的安装地址字符串。 + */ ++ (NSString *)getWXAppInstallUrl; + + + +/*! @brief 获取当前微信SDK的版本号 + * + * @return 返回当前微信SDK的版本号 + */ ++ (NSString *)getApiVersion; + + + +/*! @brief 打开微信 + * + * @return 成功返回YES,失败返回NO。 + */ ++ (BOOL)openWXApp; + + + +/*! @brief 发送请求到微信,等待微信返回onResp + * + * 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型 + * SendAuthReq、SendMessageToWXReq、PayReq等。 + * @param req 具体的发送请求。 + * @param completion 调用结果回调block + */ ++ (void)sendReq:(BaseReq *)req completion:(void (^ __nullable)(BOOL success))completion; + +/*! @brief 收到微信onReq的请求,发送对应的应答给微信,并切换到微信界面 + * + * 函数调用后,会切换到微信的界面。第三方应用程序收到微信onReq的请求,异步处理该请求,完成后必须调用该函数。可能发送的相应有 + * GetMessageFromWXResp、ShowMessageFromWXResp等。 + * @param resp 具体的应答内容 + * @param completion 调用结果回调block + */ ++ (void)sendResp:(BaseResp*)resp completion:(void (^ __nullable)(BOOL success))completion; + + +/*! @brief 发送Auth请求到微信,支持用户没安装微信,等待微信返回onResp + * + * 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持SendAuthReq类型。 + * @param req 具体的发送请求。 + * @param viewController 当前界面对象。 + * @param delegate WXApiDelegate对象,用来接收微信触发的消息。 + * @param completion 调用结果回调block + */ ++ (void)sendAuthReq:(SendAuthReq *)req viewController:(UIViewController*)viewController delegate:(nullable id)delegate completion:(void (^ __nullable)(BOOL success))completion; + + +/*! @brief 测试函数,用于排查当前App通过Universal Link方式分享到微信的流程 + 注意1: 调用自检函数之前必须要先调用registerApp:universalLink接口, 并确认调用成功 + 注意2: 自检过程中会有Log产生,可以先调用startLogByLevel函数,根据Log排查问题 + 注意3: 会多次回调block + 注意4: 仅用于新接入SDK时调试使用,请勿在正式环境的调用 + * + * 当completion回调的step为WXULCheckStepFinal时,表示检测通过,Universal Link接入成功 + * @param completion 回调Block + */ ++ (void)checkUniversalLinkReady:(nonnull WXCheckULCompletion)completion; + + +/*! @brief WXApi的成员函数,接受微信的log信息。byBlock + 注意1:SDK会强引用这个block,注意不要导致内存泄漏,注意不要导致内存泄漏 + 注意2:调用过一次startLog by block之后,如果再调用一次任意方式的startLoad,会释放上一次logBlock,不再回调上一个logBlock + * + * @param level 打印log的级别 + * @param logBlock 打印log的回调block + */ + ++ (void)startLogByLevel:(WXLogLevel)level logBlock:(WXLogBolock)logBlock; + +/*! @brief WXApi的成员函数,接受微信的log信息。byDelegate + 注意1:sdk会弱引用这个delegate,这里可加任意对象为代理,不需要与WXApiDelegate同一个对象 + 注意2:调用过一次startLog by delegate之后,再调用一次任意方式的startLoad,不会再回调上一个logDelegate对象 + * @param level 打印log的级别 + * @param logDelegate 打印log的回调代理, + */ ++ (void)startLogByLevel:(WXLogLevel)level logDelegate:(id)logDelegate; + +/*! @brief 停止打印log,会清理block或者delegate为空,释放block + * @param + */ ++ (void)stopLog; + +@end + +NS_ASSUME_NONNULL_END diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/WXApiObject.h b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/WXApiObject.h new file mode 100644 index 0000000..d219174 --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/WXApiObject.h @@ -0,0 +1,1410 @@ +// +// MMApiObject.h +// Api对象,包含所有接口和对象数据定义 +// +// Created by Wechat on 12-2-28. +// Copyright (c) 2012年 Tencent. All rights reserved. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/*! @brief 错误码 + * + */ +enum WXErrCode { + WXSuccess = 0, /**< 成功 */ + WXErrCodeCommon = -1, /**< 普通错误类型 */ + WXErrCodeUserCancel = -2, /**< 用户点击取消并返回 */ + WXErrCodeSentFail = -3, /**< 发送失败 */ + WXErrCodeAuthDeny = -4, /**< 授权失败 */ + WXErrCodeUnsupport = -5, /**< 微信不支持 */ +}; + + + +/*! @brief 请求发送场景 + * + */ +enum WXScene { + WXSceneSession = 0, /**< 聊天界面 */ + WXSceneTimeline = 1, /**< 朋友圈 */ + WXSceneFavorite = 2, /**< 收藏 */ + WXSceneSpecifiedSession = 3, /**< 指定联系人 */ + WXSceneState = 4, /**< 状态 */ +}; + + +enum WXAPISupport { + WXAPISupportSession = 0, +}; + + + +/*! @brief 跳转profile类型 + * + */ +enum WXBizProfileType { + WXBizProfileType_Normal = 0, //**< 普通公众号 */ + WXBizProfileType_Device = 1, //**< 硬件公众号 */ +}; + +/*! @brief 分享小程序类型 + * + */ +typedef NS_ENUM(NSUInteger, WXMiniProgramType) { + WXMiniProgramTypeRelease = 0, //**< 正式版 */ + WXMiniProgramTypeTest = 1, //**< 开发版 */ + WXMiniProgramTypePreview = 2, //**< 体验版 */ +}; + +/*! @brief 跳转mp网页类型 + * + */ +enum WXMPWebviewType { + WXMPWebviewType_Ad = 0, /**< 广告网页 **/ +}; + +/*! @brief log的级别 + * + */ +typedef NS_ENUM(NSInteger,WXLogLevel) { + WXLogLevelNormal = 0, // 打印日常的日志 + WXLogLevelDetail = 1, // 打印详细的日志 +}; + + +/*! @brief 打印回调的block + * + */ +typedef void(^WXLogBolock)(NSString *log); + +/*! @brief 微信Universal Link检查函数 (WXApi#checkUniversalLinkReady:),检查步骤枚举值 + * + * WXULCheckStepParams 参数检测 + * WXULCheckStepSystemVersion 当前系统版本检测 + * WXULCheckStepWechatVersion 微信客户端版本检测 + * WXULCheckStepSDKInnerOperation 微信SDK内部操作检测 + * WXULCheckStepLaunchWechat App拉起微信检测 + * WXULCheckStepBackToCurrentApp 由微信返回当前App检测 + * WXULCheckStepFinal 最终结果 + */ +typedef NS_ENUM(NSInteger, WXULCheckStep) +{ + WXULCheckStepParams, + WXULCheckStepSystemVersion, + WXULCheckStepWechatVersion, + WXULCheckStepSDKInnerOperation, + WXULCheckStepLaunchWechat, + WXULCheckStepBackToCurrentApp, + WXULCheckStepFinal, +}; + + +#pragma mark - WXCheckULStepResult + +/*! @brief 该类为微信Universal Link检测函数结果类 +* +*/ +@interface WXCheckULStepResult : NSObject + +/** 是否成功 */ +@property(nonatomic, assign) BOOL success; +/** 当前错误信息 */ +@property(nonatomic, strong) NSString* errorInfo; +/** 修正建议 */ +@property(nonatomic, strong) NSString* suggestion; + +- (instancetype)initWithCheckResult:(BOOL)success errorInfo:(nullable NSString*)errorInfo suggestion:(nullable NSString*)suggestion; + +@end + + +/*! @brief 微信Universal Link检查函数 (WXApi#checkUniversalLinkReady:),回调Block + * + * @param step 当前检测步骤 + * @param result 检测结果 + */ +typedef void(^WXCheckULCompletion)(WXULCheckStep step, WXCheckULStepResult* result); + + +#pragma mark - BaseReq +/*! @brief 该类为微信终端SDK所有请求类的基类 + * + */ +@interface BaseReq : NSObject + +/** 请求类型 */ +@property (nonatomic, assign) int type; +/** 由用户微信号和AppID组成的唯一标识,需要校验微信用户是否换号登录时填写*/ +@property (nonatomic, copy) NSString *openID; + +@end + + + +#pragma mark - BaseResp +/*! @brief 该类为微信终端SDK所有响应类的基类 + * + */ +@interface BaseResp : NSObject +/** 错误码 */ +@property (nonatomic, assign) int errCode; +/** 错误提示字符串 */ +@property (nonatomic, copy) NSString *errStr; +/** 响应类型 */ +@property (nonatomic, assign) int type; + +@end + + + +#pragma mark - WXMediaMessage +@class WXMediaMessage; + +#ifndef BUILD_WITHOUT_PAY + +#pragma mark - PayReq +/*! @brief 第三方向微信终端发起支付的消息结构体 + * + * 第三方向微信终端发起支付的消息结构体,微信终端处理后会向第三方返回处理结果 + * @see PayResp + */ +@interface PayReq : BaseReq + +/** 商家向财付通申请的商家id */ +@property (nonatomic, copy) NSString *partnerId; +/** 预支付订单 */ +@property (nonatomic, copy) NSString *prepayId; +/** 随机串,防重发 */ +@property (nonatomic, copy) NSString *nonceStr; +/** 时间戳,防重发 */ +@property (nonatomic, assign) UInt32 timeStamp; +/** 商家根据财付通文档填写的数据和签名 */ +@property (nonatomic, copy) NSString *package; +/** 商家根据微信开放平台文档对数据做的签名 */ +@property (nonatomic, copy) NSString *sign; + +@end + + +#pragma mark - PayResp +/*! @brief 微信终端返回给第三方的关于支付结果的结构体 + * + * 微信终端返回给第三方的关于支付结果的结构体 + */ +@interface PayResp : BaseResp + +/** 财付通返回给商家的信息 */ +@property (nonatomic, copy) NSString *returnKey; + +@end + +#pragma mark - WXOfflinePay +/*! @brief 第三方向微信终端发起离线支付 + * + * 第三方向微信终端发起离线支付的消息结构体 + */ +@interface WXOfflinePayReq : BaseReq + +@end + +/*! @brief 第三方向微信终端发起离线支付返回 + * + * 第三方向微信终端发起离线支付返回的消息结构体 + */ +@interface WXOfflinePayResp : BaseResp + +@end + + +#pragma mark - WXNontaxPayReq +@interface WXNontaxPayReq:BaseReq + +@property (nonatomic, copy) NSString *urlString; + +@end + +#pragma mark - WXNontaxPayResp +@interface WXNontaxPayResp : BaseResp + +@property (nonatomic, copy) NSString *wxOrderId; + +@end + +#pragma mark - WXPayInsuranceReq +@interface WXPayInsuranceReq : BaseReq + +@property (nonatomic, copy) NSString *urlString; + +@end + +#pragma mark - WXPayInsuranceResp +@interface WXPayInsuranceResp : BaseResp + +@property (nonatomic, copy) NSString *wxOrderId; + +@end + + +#pragma mark - WXQRCodePayReq +@interface WXQRCodePayReq : BaseReq +/** 码内容 + * @note 必填,码长度必须大于0且小于10K + */ +@property (nonatomic, copy) NSString *codeContent; +/** 额外信息 + * @note 长度必须大于0且小于10K + */ +@property (nonatomic, copy) NSString *extraMsg; + +@end + +@interface WXQRCodePayResp : BaseResp +@end + +#endif + + +#pragma mark - SendAuthReq +/*! @brief 第三方程序向微信终端请求认证的消息结构 + * + * 第三方程序要向微信申请认证,并请求某些权限,需要调用WXApi的sendReq成员函数, + * 向微信终端发送一个SendAuthReq消息结构。微信终端处理完后会向第三方程序发送一个处理结果。 + * @see SendAuthResp + */ +@interface SendAuthReq : BaseReq +/** 第三方程序要向微信申请认证,并请求某些权限,需要调用WXApi的sendReq成员函数,向微信终端发送一个SendAuthReq消息结构。微信终端处理完后会向第三方程序发送一个处理结果。 + * @see SendAuthResp + * @note scope字符串长度不能超过1K + */ +@property (nonatomic, copy) NSString *scope; +/** 第三方程序本身用来标识其请求的唯一性,最后跳转回第三方程序时,由微信终端回传。 + * @note state字符串长度不能超过1K + */ +@property (nonatomic, copy) NSString *state; + +@property (nonatomic, assign) BOOL isOption1; + +/** 是否关闭自动授权 + * @note YES为关闭自动授权,每次登陆都需要用户手动授权;NO为允许自动授权 + */ +@property (nonatomic, assign) BOOL nonautomatic; + +@property (nonatomic, copy) NSString *extData; + +@end + +#pragma mark - SendAuthResp +/*! @brief 微信处理完第三方程序的认证和权限申请后向第三方程序回送的处理结果。 + * + * 第三方程序要向微信申请认证,并请求某些权限,需要调用WXApi的sendReq成员函数,向微信终端发送一个SendAuthReq消息结构。 + * 微信终端处理完后会向第三方程序发送一个SendAuthResp。 + * @see onResp + */ +@interface SendAuthResp : BaseResp +@property (nonatomic, copy, nullable) NSString *code; +/** 第三方程序发送时用来标识其请求的唯一性的标志,由第三方程序调用sendReq时传入,由微信终端回传 + * @note state字符串长度不能超过1K + * @note 在复杂度较高的应用程序中,可能会出现其他模块请求的响应对象被错误地回调到当前模块。 + * 为了避免影响其他模块,建议当前模块的开发者根据SendAuthResp的内容,采用白名单的方式进行处理。 + * 例如,SendAuthResp.state符合预期时,才对其进行处理。 + */ +@property (nonatomic, copy, nullable) NSString *state; +@property (nonatomic, copy, nullable) NSString *lang; +@property (nonatomic, copy, nullable) NSString *country; +@end + +#pragma mark - WXStateJumpInfo +/*! @brief 状态发表时的小尾巴跳转信息 + */ +@interface WXStateJumpInfo : NSObject + +@end + +#pragma mark - WXStateJumpUrlInfo +/*! @brief 状态小尾巴跳转指定url的信息 + */ +@interface WXStateJumpUrlInfo : WXStateJumpInfo +/** 跳转到指定的url + * @note 必填,url长度必须大于0且小于10K + */ +@property (nonatomic, copy) NSString *url; + +@end + +#pragma mark - WXStateJumpWXMiniProgramInfo +/*! @brief 状态小尾巴跳转指定小程序的信息 + */ +@interface WXStateJumpMiniProgramInfo : WXStateJumpInfo +/** 小程序username + * @note 必填 + */ +@property (nonatomic, copy) NSString *username; + +/** 小程序页面的路径 + * @attention 不填默认拉起小程序首页 + */ +@property (nonatomic, copy, nullable) NSString *path; + +/** 分享小程序的版本 + * @attention (正式,开发,体验) + */ +@property (nonatomic, assign) WXMiniProgramType miniProgramType; + +@end + + + +#pragma mark - WXStateJumpWXMiniProgramInfo +/*! @brief 状态小尾巴跳转指定视频号主页信息 + */ +@interface WXStateJumpChannelProfileInfo : WXStateJumpInfo +/** 视频号username + * @note 必填,username长度必须大于0且小于1K + */ +@property (nonatomic, copy) NSString *username; + + +@end + +#pragma mark - WXStateSceneDataObject +/*! @brief 场景类型额外参数基类 + */ +@interface WXSceneDataObject : NSObject + +@end + +#pragma mark - WXStateSceneDataObject +/*! @brief 状态场景类型 + * 用户填写WXStateSceneDataObject参数后,可以跳转到微信状态发表页 + */ +@interface WXStateSceneDataObject : WXSceneDataObject + +/** 状态标志的ID + * @note 选填,文本长度必须小于10K + */ +@property (nonatomic, copy) NSString *stateId; +/** 状态发表时附带的文本描述 + * @note 选填,文本长度必须小于10K + */ +@property (nonatomic, copy) NSString *stateTitle; +/** 后台校验token + * @note 选填,文本长度必须小于10K + */ +@property (nonatomic, copy) NSString *token; +/** 小尾巴跳转所需的信息 + * @note 必填,目前仅支持url跳转 + */ +@property (nonatomic, strong) WXStateJumpInfo *stateJumpDataInfo; + +@end + +#pragma mark - SendMessageToWXReq +/*! @brief 第三方程序发送消息至微信终端程序的消息结构体 + * + * 第三方程序向微信发送信息需要传入SendMessageToWXReq结构体,信息类型包括文本消息和多媒体消息, + * 分别对应于text和message成员。调用该方法后,微信处理完信息会向第三方程序发送一个处理结果。 + * @see SendMessageToWXResp + */ +@interface SendMessageToWXReq : BaseReq +/** 发送消息的文本内容 + * @note 文本长度必须大于0且小于10K + */ +@property (nonatomic, copy) NSString *text; +/** 发送消息的多媒体内容 + * @see WXMediaMessage + */ +@property (nonatomic, strong) WXMediaMessage *message; +/** 发送消息的类型,包括文本消息和多媒体消息两种,两者只能选择其一,不能同时发送文本和多媒体消息 */ +@property (nonatomic, assign) BOOL bText; +/** 发送的目标场景,可以选择发送到会话(WXSceneSession)或者朋友圈(WXSceneTimeline)。 默认发送到会话。 + * @see WXScene + */ +@property (nonatomic, assign) int scene; +/** 指定发送消息的人 + * @note WXSceneSpecifiedSession时有效 + */ +@property (nonatomic, copy, nullable) NSString *toUserOpenId; +/** 目标场景附带信息 + * @note 目前只针对状态场景 + */ +@property (nonatomic, strong) WXSceneDataObject *sceneDataObject; + +@end + +#pragma mark - SendMessageToWXResp +/*! @brief 微信终端向第三方程序返回的SendMessageToWXReq处理结果。 + * + * 第三方程序向微信终端发送SendMessageToWXReq后,微信发送回来的处理结果,该结果用SendMessageToWXResp表示。 + */ +@interface SendMessageToWXResp : BaseResp +@property(nonatomic, copy) NSString *lang; +@property(nonatomic, copy) NSString *country; +@end + +#pragma mark - GetMessageFromWXReq +/*! @brief 微信终端向第三方程序请求提供内容的消息结构体。 + * + * 微信终端向第三方程序请求提供内容,微信终端会向第三方程序发送GetMessageFromWXReq消息结构体, + * 需要第三方程序调用sendResp返回一个GetMessageFromWXResp消息结构体。 + */ +@interface GetMessageFromWXReq : BaseReq +@property (nonatomic, strong) NSString *lang; +@property (nonatomic, strong) NSString *country; +@end + + + +#pragma mark - GetMessageFromWXResp +/*! @brief 微信终端向第三方程序请求提供内容,第三方程序向微信终端返回的消息结构体。 + * + * 微信终端向第三方程序请求提供内容,第三方程序调用sendResp向微信终端返回一个GetMessageFromWXResp消息结构体。 + */ +@interface GetMessageFromWXResp : BaseResp +/** 向微信终端提供的文本内容 + @note 文本长度必须大于0且小于10K + */ +@property (nonatomic, strong) NSString *text; +/** 向微信终端提供的多媒体内容。 + * @see WXMediaMessage + */ +@property (nonatomic, strong) WXMediaMessage *message; +/** 向微信终端提供内容的消息类型,包括文本消息和多媒体消息两种,两者只能选择其一,不能同时发送文本和多媒体消息 */ +@property (nonatomic, assign) BOOL bText; +@end + + + +#pragma mark - ShowMessageFromWXReq +/*! @brief 微信通知第三方程序,要求第三方程序显示的消息结构体。 + * + * 微信需要通知第三方程序显示或处理某些内容时,会向第三方程序发送ShowMessageFromWXReq消息结构体。 + * 第三方程序处理完内容后调用sendResp向微信终端发送ShowMessageFromWXResp。 + */ +@interface ShowMessageFromWXReq : BaseReq +/** 微信终端向第三方程序发送的要求第三方程序处理的多媒体内容 + * @see WXMediaMessage + */ +@property (nonatomic, strong) WXMediaMessage *message; +@property (nonatomic, copy) NSString *lang; +@property (nonatomic, copy) NSString *country; +@end + + + +#pragma mark - ShowMessageFromWXResp +/*! @brief 微信通知第三方程序,要求第三方程序显示或处理某些消息,第三方程序处理完后向微信终端发送的处理结果。 + * + * 微信需要通知第三方程序显示或处理某些内容时,会向第三方程序发送ShowMessageFromWXReq消息结构体。 + * 第三方程序处理完内容后调用sendResp向微信终端发送ShowMessageFromWXResp。 + */ +@interface ShowMessageFromWXResp : BaseResp +@end + + +#pragma mark - LaunchFromWXReq +/*! @brief 微信终端打开第三方程序携带的消息结构体 + * + * 微信向第三方发送的结构体,第三方不需要返回 + */ +@interface LaunchFromWXReq : BaseReq +@property (nonatomic, strong) WXMediaMessage *message; +@property (nonatomic, copy) NSString *lang; +@property (nonatomic, copy) NSString *country; +@end + + +#pragma mark - OpenWebviewReq +/* ! @brief 第三方通知微信启动内部浏览器,打开指定网页 + * + * 第三方通知微信启动内部浏览器,打开指定Url对应的网页 + */ +@interface OpenWebviewReq : BaseReq +/** 需要打开的网页对应的Url + * @attention 长度不能超过1024 + */ +@property(nonatomic, copy) NSString *url; + +@end + +#pragma mark - OpenWebviewResp +/*! @brief 微信终端向第三方程序返回的OpenWebviewReq处理结果 + * + * 第三方程序向微信终端发送OpenWebviewReq后,微信发送回来的处理结果,该结果用OpenWebviewResp表示 + */ +@interface OpenWebviewResp : BaseResp + +@end + + + +#pragma mark - WXOpenBusinessWebViewReq +/*! @brief 第三方通知微信启动内部浏览器,打开指定业务的网页 + * + * + */ +@interface WXOpenBusinessWebViewReq : BaseReq + +/** 网页业务类型 + * @attention + */ +@property (nonatomic, assign) UInt32 businessType; + +/** 网页业务参数 + * @attention + */ +@property (nonatomic, strong, nullable) NSDictionary *queryInfoDic; + +@end + +#pragma mark - WXOpenBusinessWebViewResp +/*! @brief 微信终端向第三方程序返回的WXOpenBusinessWebViewResp处理结果。 + * + * 第三方程序向微信终端发送WXOpenBusinessWebViewReq后,微信发送回来的处理结果,该结果用WXOpenBusinessWebViewResp表示。 + */ +@interface WXOpenBusinessWebViewResp : BaseResp +/** 第三方程序自定义简单数据,微信终端会回传给第三方程序处理 + * @attention 长度不能超过2k + */ +@property (nonatomic, copy) NSString *result; + +/** 网页业务类型 + * @attention + */ +@property (nonatomic, assign) UInt32 businessType; + +@end + + +#pragma mark - OpenRankListReq +/* ! @brief 第三方通知微信,打开硬件排行榜 + * + * 第三方通知微信,打开硬件排行榜 + */ +@interface OpenRankListReq : BaseReq + +@end + +#pragma mark - OpenRanklistResp +/*! @brief 微信终端向第三方程序返回的OpenRankListReq处理结果。 + * + * 第三方程序向微信终端发送OpenRankListReq后,微信发送回来的处理结果,该结果用OpenRankListResp表示。 + */ +@interface OpenRankListResp : BaseResp + +@end + + +#pragma mark - WXCardItem + +@interface WXCardItem : NSObject +/** 卡id + * @attention 长度不能超过1024字节 + */ +@property (nonatomic, copy) NSString *cardId; +/** ext信息 + * @attention 长度不能超过2024字节 + */ +@property (nonatomic, copy, nullable) NSString *extMsg; +/** + * @attention 卡的状态,req不需要填。resp:0为未添加,1为已添加。 + */ +@property (nonatomic, assign) UInt32 cardState; +/** + * @attention req不需要填,chooseCard返回的。 + */ +@property (nonatomic, copy) NSString *encryptCode; +/** + * @attention req不需要填,chooseCard返回的。 + */ +@property (nonatomic, copy) NSString *appID; +@end; + +#pragma mark - WXInvoiceItem + +@interface WXInvoiceItem : NSObject +/** 卡id + * @attention 长度不能超过1024字节 + */ +@property (nonatomic, copy) NSString *cardId; +/** ext信息 + * @attention 长度不能超过2024字节 + */ +@property (nonatomic, copy, nullable) NSString *extMsg; +/** + * @attention 卡的状态,req不需要填。resp:0为未添加,1为已添加。 + */ +@property (nonatomic, assign) UInt32 cardState; +/** + * @attention req不需要填,chooseCard返回的。 + */ +@property (nonatomic, copy) NSString *encryptCode; +/** + * @attention req不需要填,chooseCard返回的。 + */ +@property (nonatomic, copy) NSString *appID; + +@end + +#pragma mark - AddCardToWXCardPackageReq +/* ! @brief 请求添加卡券至微信卡包 + * + */ + +@interface AddCardToWXCardPackageReq : BaseReq +/** 卡列表 + * @attention 个数不能超过40个 类型WXCardItem + */ +@property (nonatomic, strong) NSArray *cardAry; + +@end + + +#pragma mark - AddCardToWXCardPackageResp +/** ! @brief 微信返回第三方添加卡券结果 + * + */ + +@interface AddCardToWXCardPackageResp : BaseResp +/** 卡列表 + * @attention 个数不能超过40个 类型WXCardItem + */ +@property (nonatomic, strong) NSArray *cardAry; +@end + +#pragma mark - WXChooseCardReq +/* ! @brief 请求从微信选取卡券 + * + */ + +@interface WXChooseCardReq : BaseReq +@property (nonatomic, copy) NSString *appID; +@property (nonatomic, assign) UInt32 shopID; +@property (nonatomic, assign) UInt32 canMultiSelect; +@property (nonatomic, copy) NSString *cardType; +@property (nonatomic, copy) NSString *cardTpID; +@property (nonatomic, copy) NSString *signType; +@property (nonatomic, copy) NSString *cardSign; +@property (nonatomic, assign) UInt32 timeStamp; +@property (nonatomic, copy) NSString *nonceStr; +@end + + +#pragma mark - WXChooseCardResp +/** ! @brief 微信返回第三方请求选择卡券结果 + * + */ + +@interface WXChooseCardResp : BaseResp +@property (nonatomic, strong ) NSArray* cardAry; +@end + + +#pragma mark - WXChooseInvoiceReq +/* ! @brief 请求从微信选取发票 + * + */ +@interface WXChooseInvoiceReq : BaseReq +@property (nonatomic, copy) NSString *appID; +@property (nonatomic, assign) UInt32 shopID; +@property (nonatomic, copy) NSString *signType; +@property (nonatomic, copy) NSString *cardSign; +@property (nonatomic, assign) UInt32 timeStamp; +@property (nonatomic, copy) NSString *nonceStr; +@end + +#pragma mark - WXChooseInvoiceResp +/** ! @brief 微信返回第三方请求选择发票结果 + * + */ +@interface WXChooseInvoiceResp : BaseResp +@property (nonatomic, strong) NSArray* cardAry; +@end + +#pragma mark - WXSubscriptionReq +@interface WXSubscribeMsgReq : BaseReq +@property (nonatomic, assign) UInt32 scene; +@property (nonatomic, copy) NSString *templateId; +@property (nonatomic, copy, nullable) NSString *reserved; +@end + +#pragma mark - WXSubscriptionReq +@interface WXSubscribeMsgResp : BaseResp + +@property (nonatomic, copy) NSString *templateId; +@property (nonatomic, assign) UInt32 scene; +@property (nonatomic, copy) NSString *action; +@property (nonatomic, copy) NSString *reserved; +@property (nonatomic, copy, nullable) NSString *openId; + +@end + +#pragma mark - WXSubscribeMiniProgramMsg +/** ! @brief 第三方请求订阅小程序消息 + * + */ +@interface WXSubscribeMiniProgramMsgReq : BaseReq +@property (nonatomic, copy) NSString *miniProgramAppid; +@end + +#pragma mark - WXSubscriptionReq +@interface WXSubscribeMiniProgramMsgResp : BaseResp + +@property(nonatomic, copy) NSString *openId; // 小程序openid +@property(nonatomic, copy) NSString *unionId; // unionId +@property(nonatomic, copy) NSString *nickName; // 用户昵称 + +@end + +#pragma mark - WXinvoiceAuthInsertReq +@interface WXInvoiceAuthInsertReq : BaseReq + +@property (nonatomic, copy) NSString *urlString; + +@end + +#pragma mark - WXinvoiceAuthInsertResp + +@interface WXInvoiceAuthInsertResp : BaseResp + +@property (nonatomic, copy) NSString *wxOrderId; + +@end + +#pragma mark - WXMediaMessage + +/*! @brief 多媒体消息结构体 + * + * 用于微信终端和第三方程序之间传递消息的多媒体消息内容 + */ +@interface WXMediaMessage : NSObject + ++ (WXMediaMessage *)message; + +/** 标题 + * @note 长度不能超过512字节 + */ +@property (nonatomic, copy) NSString *title; +/** 描述内容 + * @note 长度不能超过1K + */ +@property (nonatomic, copy) NSString *description; +/** 缩略图数据 + * @note 大小不能超过64K + */ +@property (nonatomic, strong, nullable) NSData *thumbData; +/** + * @note 长度不能超过64字节 + */ +@property (nonatomic, copy, nullable) NSString *mediaTagName; +/** + * + */ +@property (nonatomic, copy, nullable) NSString *messageExt; +@property (nonatomic, copy, nullable) NSString *messageAction; +/** + * 多媒体数据对象,可以为WXImageObject,WXMusicObject,WXVideoObject,WXWebpageObject等。 + */ +@property (nonatomic, strong) id mediaObject; + +/** 缩略图的hash值 + * @note 使用sha256得到,用于计算签名 + */ +@property (nonatomic, copy, nullable) NSString *thumbDataHash; + +/** 消息签名 + * @note 用于校验消息体是否被篡改过 + */ +@property (nonatomic, copy, nullable) NSString *msgSignature; + + +/*! @brief 设置消息缩略图的方法 + * + * @param image 缩略图 + * @note 大小不能超过256K + */ +- (void)setThumbImage:(UIImage *)image; + +@end + + + +#pragma mark - WXImageObject +/*! @brief 多媒体消息中包含的图片数据对象 + * + * 微信终端和第三方程序之间传递消息中包含的图片数据对象。 + * @note imageData成员不能为空 + * @see WXMediaMessage + */ +@interface WXImageObject : NSObject +/*! @brief 返回一个WXImageObject对象 + * + * @note 返回的WXImageObject对象是自动释放的 + */ ++ (WXImageObject *)object; + +/** 图片真实数据内容 + * @note 大小不能超过25M + */ +@property (nonatomic, strong) NSData *imageData; + +/** 图片数据的hash值 + * @note 使用sha256得到,用于计算签名 + */ +@property (nonatomic, copy, nullable) NSString *imgDataHash; + +/** 分享的图片消息是否要带小程序入口,若 'entranceMiniProgramUsername' 非空则显示 + * 仅部分小程序类目可用 + * @note 本字段为空则发送普通app图片消息 + */ +@property (nonatomic, copy, nullable) NSString *entranceMiniProgramUsername; + +/** 分享的图片消息显示的小程序入口可以跳转的小程序路径 + * 仅当 'entranceMiniProgramUsername' 非空时生效 + */ +@property (nonatomic, copy, nullable) NSString *entranceMiniProgramPath; + +@end + + +#pragma mark - WXMusicObject +/*! @brief 多媒体消息中包含的音乐数据对象 + * + * 微信终端和第三方程序之间传递消息中包含的音乐数据对象。 + * @note musicUrl和musicLowBandUrl成员不能同时为空。 + * @see WXMediaMessage + */ +@interface WXMusicObject : NSObject +/*! @brief 返回一个WXMusicObject对象 + * + * @note 返回的WXMusicObject对象是自动释放的 + */ ++ (WXMusicObject *)object; + +/** 音乐网页的url地址 + * @note 长度不能超过10K + */ +@property (nonatomic, copy) NSString *musicUrl; +/** 音乐lowband网页的url地址 + * @note 长度不能超过10K + */ +@property (nonatomic, copy) NSString *musicLowBandUrl; +/** 音乐数据url地址 + * @note 长度不能超过10K + */ +@property (nonatomic, copy) NSString *musicDataUrl; + +/**音乐lowband数据url地址 + * @note 长度不能超过10K + */ +@property (nonatomic, copy) NSString *musicLowBandDataUrl; + +/**音乐封面图Url + * @note 长度不能超过10K + */ +@property (nonatomic, copy) NSString *songAlbumUrl; + +/**歌词信息 LRC格式 + * @note 长度不能超过32K + */ +@property (nonatomic, copy, nullable) NSString *songLyric; +@end + + + +#pragma mark - WXMusicVideoObject + +@interface WXMusicVipInfo : NSObject + +/**付费歌曲的id + * @note 长度不能超过32K + */ +@property (nonatomic, copy) NSString *musicId; + +@end + + +@interface WXMusicVideoObject : NSObject + +/*! @brief 返回一个WXMusicVideoObject对象 + * + * @note 返回的WXMusicVideoObject对象是自动释放的 + */ ++ (WXMusicVideoObject *)object; + +/** 音乐网页的url地址 + * @note 长度不能超过10K,不能为空 + */ +@property (nonatomic, copy) NSString *musicUrl; + +/** 音乐数据url地址 + * @note 长度不能超过10K,不能为空 + */ +@property (nonatomic, copy) NSString *musicDataUrl; + +/**歌手名 + * @note 长度不能超过1k,不能为空 + */ +@property (nonatomic, copy) NSString *singerName; + +/** + * @note 音乐时长, 单位毫秒 + */ +@property (nonatomic, assign) UInt32 duration; + +/**歌词信息 LRC格式 + * @note 长度不能超过32K + */ +@property (nonatomic, copy) NSString *songLyric; + +/**高清封面图 + * @note 大小不能超过1M + */ +@property (nonatomic, strong) NSData *hdAlbumThumbData; + +/** 高清封面图数据的hash值 + * @note 使用sha256得到,用于计算签名 + */ +@property (nonatomic, copy, nullable) NSString *hdAlbumThumbFileHash; + +/**音乐专辑名称 + * @note 长度不能超过1k + */ +@property (nonatomic, copy, nullable) NSString *albumName; + +/**音乐流派 + * @note 长度不能超过1k + */ +@property (nonatomic, copy, nullable) NSString *musicGenre; + +/**发行时间 + * @note Unix时间戳,单位为秒 + */ +@property (nonatomic, assign) UInt64 issueDate; + +/**音乐标识符 + * @note 长度不能超过1K,从微信跳回应用时会带上 + */ +@property (nonatomic, copy, nullable) NSString *identification; + +/**运营H5地址 + * @note 选填,建议填写,用户进入歌曲详情页将展示内嵌的运营H5,可展示该歌曲的相关评论、歌曲推荐等内容,不可诱导下载、分享等。 + */ +@property (nonatomic, copy, nullable) NSString *musicOperationUrl; + +/** 付费歌曲相关信息 + * @note 选填,如果歌曲是需要付费的,那么将付费歌曲id等信息封装在内。 + */ +@property (nonatomic, strong) WXMusicVipInfo *musicVipInfo; + +@end + + + +#pragma mark - WXVideoObject +/*! @brief 多媒体消息中包含的视频数据对象 + * + * 微信终端和第三方程序之间传递消息中包含的视频数据对象。 + * @note videoUrl和videoLowBandUrl不能同时为空。 + * @see WXMediaMessage + */ +@interface WXVideoObject : NSObject +/*! @brief 返回一个WXVideoObject对象 + * + * @note 返回的WXVideoObject对象是自动释放的 + */ ++ (WXVideoObject *)object; + +/** 视频网页的url地址 + * @note 长度不能超过10K + */ +@property (nonatomic, copy) NSString *videoUrl; +/** 视频lowband网页的url地址 + * @note 长度不能超过10K + */ +@property (nonatomic, copy) NSString *videoLowBandUrl; + +@end + + + +#pragma mark - WXWebpageObject +/*! @brief 多媒体消息中包含的网页数据对象 + * + * 微信终端和第三方程序之间传递消息中包含的网页数据对象。 + * @see WXMediaMessage + */ +@interface WXWebpageObject : NSObject +/*! @brief 返回一个WXWebpageObject对象 + * + * @note 返回的WXWebpageObject对象是自动释放的 + */ ++ (WXWebpageObject *)object; + +/** 网页的url地址 + * @note 不能为空且长度不能超过10K + */ +@property (nonatomic, copy) NSString *webpageUrl; + +/**是否是私密消息 + */ +@property (nonatomic, assign) BOOL isSecretMessage; + +/** 业务所需的额外信息 */ +@property (nonatomic, strong, nullable) NSDictionary *extraInfoDic; + +@end + + + +#pragma mark - WXAppExtendObject +/*! @brief 多媒体消息中包含的App扩展数据对象 + * + * 第三方程序向微信终端发送包含WXAppExtendObject的多媒体消息, + * 微信需要处理该消息时,会调用该第三方程序来处理多媒体消息内容。 + * @note url,extInfo和fileData不能同时为空 + * @see WXMediaMessage + */ +@interface WXAppExtendObject : NSObject +/*! @brief 返回一个WXAppExtendObject对象 + * + * @note 返回的WXAppExtendObject对象是自动释放的 + */ ++ (WXAppExtendObject *)object; + +/** 若第三方程序不存在,微信终端会打开该url所指的App下载地址 + * @note 长度不能超过10K + */ +@property (nonatomic, copy) NSString *url; +/** 第三方程序自定义简单数据,微信终端会回传给第三方程序处理 + * @note 长度不能超过2K + */ +@property (nonatomic, copy, nullable) NSString *extInfo; +/** App文件数据,该数据发送给微信好友,微信好友需要点击后下载数据,微信终端会回传给第三方程序处理 + * @note 大小不能超过10M + */ +@property (nonatomic, strong, nullable) NSData *fileData; + +@end + + + +#pragma mark - WXEmoticonObject +/*! @brief 多媒体消息中包含的表情数据对象 + * + * 微信终端和第三方程序之间传递消息中包含的表情数据对象。 + * @see WXMediaMessage + */ +@interface WXEmoticonObject : NSObject + +/*! @brief 返回一个WXEmoticonObject对象 + * + * @note 返回的WXEmoticonObject对象是自动释放的 + */ ++ (WXEmoticonObject *)object; + +/** 表情真实数据内容 + * @note 大小不能超过10M + */ +@property (nonatomic, strong) NSData *emoticonData; + +@end + + + +#pragma mark - WXFileObject +/*! @brief 多媒体消息中包含的文件数据对象 + * + * @see WXMediaMessage + */ +@interface WXFileObject : NSObject + +/*! @brief 返回一个WXFileObject对象 + * + * @note 返回的WXFileObject对象是自动释放的 + */ ++ (WXFileObject *)object; + +/** 文件后缀名 + * @note 长度不超过64字节 + */ +@property (nonatomic, copy) NSString *fileExtension; + +/** 文件真实数据内容 + * @note 大小不能超过10M + */ +@property (nonatomic, strong) NSData *fileData; + +@end + + +#pragma mark - WXLocationObject +/*! @brief 多媒体消息中包含的地理位置数据对象 + * + * 微信终端和第三方程序之间传递消息中包含的地理位置数据对象。 + * @see WXMediaMessage + */ +@interface WXLocationObject : NSObject + +/*! @brief 返回一个WXLocationObject对象 + * + * @note 返回的WXLocationObject对象是自动释放的 + */ ++ (WXLocationObject *)object; + +/** 地理位置信息 + * @note 经纬度 + */ +@property (nonatomic, assign) double lng; //经度 +@property (nonatomic, assign) double lat; //纬度 + +@end + +#pragma mark - WXTextObject +/*! @brief 多媒体消息中包含的文本数据对象 + * + * 微信终端和第三方程序之间传递消息中包含的文本数据对象。 + * @see WXMediaMessage + */ +@interface WXTextObject : NSObject + +/*! @brief 返回一个WXTextObject对象 + * + * @note 返回的WXTextObject对象是自动释放的 + */ ++ (WXTextObject *)object; + +/** 地理位置信息 + * @note 文本内容 + */ +@property (nonatomic, copy) NSString *contentText; + +@end + +#pragma mark - WXMiniProgramObject + +@interface WXMiniProgramObject : NSObject + +/*! @brief WXMiniProgramObject对象 + * + * @note 返回的WXMiniProgramObject对象是自动释放的 + */ ++ (WXMiniProgramObject *)object; + +/** 低版本网页链接 + * @attention 长度不能超过1024字节 + */ +@property (nonatomic, copy) NSString *webpageUrl; + +/** 小程序username */ +@property (nonatomic, copy) NSString *userName; + +/** 小程序页面的路径 + * @attention 不填默认拉起小程序首页 + */ +@property (nonatomic, copy, nullable) NSString *path; + +/** 小程序新版本的预览图 + * @attention 大小不能超过128k + */ +@property (nonatomic, strong, nullable) NSData *hdImageData; + +/** 是否使用带 shareTicket 的转发 */ +@property (nonatomic, assign) BOOL withShareTicket; + +/** 分享小程序的版本 + * @attention (正式,开发,体验) + */ +@property (nonatomic, assign) WXMiniProgramType miniProgramType; + +/** 是否禁用转发 */ +@property (nonatomic, assign) BOOL disableForward; + +@property (nonatomic, assign) BOOL isUpdatableMessage; + +@property (nonatomic, assign) BOOL isSecretMessage; + + +/** 业务所需的额外信息 */ +@property (nonatomic, strong, nullable) NSDictionary *extraInfoDic; + +@end + +#pragma mark - WXGameLiveObject + +/*! @brief WXGameLiveObject对象 + * + * @note 游戏直播消息类型 + */ + +@interface WXGameLiveObject : NSObject + ++ (WXGameLiveObject *)object; + +/** 业务所需的额外信息 */ +@property (nonatomic, strong, nullable) NSDictionary *extraInfoDic; + +@end + +@interface WXNativeGamePageObject : NSObject + +/** 是否为视频类型 + */ +@property (nonatomic, assign) BOOL isVideo; + +/** 视频时长 + @note 当为视频类型时,必填;单位为秒 + */ +@property (nonatomic, assign) UInt32 videoDuration; + +/** 透传字段 + @note 长度限制为100K + */ +@property (nonatomic, copy) NSString *shareData; + +/** 缩略图 + @note 大小限制为256K + */ +@property (nonatomic, strong) NSData *gameThumbData; + ++ (WXNativeGamePageObject *)object; + +@end + +#pragma mark - WXLaunchMiniProgramReq + +/*! @brief WXLaunchMiniProgramReq对象, 可实现通过sdk拉起微信小程序 + * + * @note 返回的WXLaunchMiniProgramReq对象是自动释放的 + */ +@interface WXLaunchMiniProgramReq : BaseReq + ++ (WXLaunchMiniProgramReq *)object; + +/** 小程序username */ +@property (nonatomic, copy) NSString *userName; + +/** 小程序页面的路径 + * @attention 不填默认拉起小程序首页 + */ +@property (nonatomic, copy, nullable) NSString *path; + +/** 分享小程序的版本 + * @attention (正式,开发,体验) + */ +@property (nonatomic, assign) WXMiniProgramType miniProgramType; + +/** ext信息 + * @attention json格式 + */ +@property (nonatomic, copy, nullable) NSString *extMsg; + +/** extDic + * @attention 字典,可存放图片等比较大的数据 + */ +@property (nonatomic, copy, nullable) NSDictionary *extDic; + +@end + +#pragma mark - WXLaunchMiniProgramResp +/*! @brief 微信终端向第三方程序返回的WXLaunchMiniProgramReq处理结果。 + * + * 第三方程序向微信终端发送WXLaunchMiniProgramReq后,微信发送回来的处理结果,该结果用WXLaunchMiniProgramResp表示。 + */ +@interface WXLaunchMiniProgramResp : BaseResp + +@property (nonatomic, copy, nullable) NSString *extMsg; + +@end + + +#pragma mark - WXOpenBusinessViewReq +/*! @brief WXOpenBusinessViewReq对象, 可实现第三方通知微信启动,打开业务页面 + * + * @note 返回的WXOpenBusinessViewReq对象是自动释放的 + */ + +@interface WXOpenBusinessViewReq : BaseReq + ++ (WXOpenBusinessViewReq *)object; + +/** 业务类型 + */ +@property (nonatomic, copy) NSString *businessType; + +/** 业务参数 + */ +@property (nonatomic, copy, nullable) NSString *query; + +/** ext信息 + * @note 选填,json格式 + */ +@property (nonatomic, copy, nullable) NSString *extInfo; + +/** extData数据 + * @note + */ +@property (nonatomic, strong, nullable) NSData *extData; +@end + + +@interface WXOpenBusinessViewResp : BaseResp + +/** 业务类型 + */ +@property (nonatomic, copy) NSString *businessType; + +/** 业务返回数据 + */ +@property (nonatomic, copy, nullable) NSString *extMsg; + +@end + +#pragma mark - WXOpenCustomerServiceReq +@interface WXOpenCustomerServiceReq : BaseReq + ++ (WXOpenCustomerServiceReq *)object; + +/**企微客服发起流程 url + */ +@property (nonatomic, copy, nullable) NSString *url; + +/**企业 id + */ +@property (nonatomic, copy, nullable) NSString *corpid; + +@end + +@interface WXOpenCustomerServiceResp : BaseResp + +/** 业务返回数据 + */ +@property (nonatomic, copy, nullable) NSString *extMsg; + +@end + + +#pragma mark - WXChannelStartLiveReq + +@interface WXChannelStartLiveReq : BaseReq + ++ (WXChannelStartLiveReq *)object; + +/** 必填,直播业务数据(json格式) + */ +@property (nonatomic, copy) NSString *liveJsonInfo; + +@end + +@interface WXChannelStartLiveResp : BaseResp + +/** 业务返回数据 + */ +@property (nonatomic, copy, nullable) NSString *extMsg; + +@end + +NS_ASSUME_NONNULL_END diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/WechatAuthSDK.h b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/WechatAuthSDK.h new file mode 100644 index 0000000..4f14890 --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/WechatAuthSDK.h @@ -0,0 +1,68 @@ +// +// WechatAuthSDK.h +// WechatAuthSDK +// +// Created by 李凯 on 13-11-29. +// Copyright (c) 2013年 Tencent. All rights reserved. +// + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +enum AuthErrCode { + WechatAuth_Err_Ok = 0, //Auth成功 + WechatAuth_Err_NormalErr = -1, //普通错误 + WechatAuth_Err_NetworkErr = -2, //网络错误 + WechatAuth_Err_GetQrcodeFailed = -3, //获取二维码失败 + WechatAuth_Err_Cancel = -4, //用户取消授权 + WechatAuth_Err_Timeout = -5, //超时 +}; + +@protocol WechatAuthAPIDelegate +@optional + +- (void)onAuthGotQrcode:(UIImage *)image; //得到二维码 +- (void)onQrcodeScanned; //二维码被扫描 +- (void)onAuthFinish:(int)errCode AuthCode:(nullable NSString *)authCode; //成功登录 + +@end + +@interface WechatAuthSDK : NSObject{ + NSString *_sdkVersion; + __weak id _delegate; +} + +@property(nonatomic, weak, nullable) id delegate; +@property(nonatomic, readonly) NSString *sdkVersion; //authSDK版本号 + +/*! @brief 发送登录请求,等待WechatAuthAPIDelegate回调 + * + * @param appId 微信开发者ID + * @param nonceStr 一个随机的尽量不重复的字符串,用来使得每次的signature不同 + * @param timeStamp 时间戳 + * @param scope 应用授权作用域,拥有多个作用域用逗号(,)分隔 + * @param signature 签名 + * @param schemeData 会在扫码后拼在scheme后 + * @return 成功返回YES,失败返回NO + 注:该实现只保证同时只有一个Auth在运行,Auth未完成或未Stop再次调用Auth接口时会返回NO。 + */ + +- (BOOL)Auth:(NSString *)appId + nonceStr:(NSString *)nonceStr + timeStamp:(NSString *)timeStamp + scope:(NSString *)scope + signature:(NSString *)signature + schemeData:(nullable NSString *)schemeData; + + +/*! @brief 暂停登录请求 + * + * @return 成功返回YES,失败返回NO。 + */ +- (BOOL)StopAuth; + +@end + +NS_ASSUME_NONNULL_END diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/libWeChatSDK.a b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/libWeChatSDK.a new file mode 100644 index 0000000..fb9bd64 Binary files /dev/null and b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/Libs/WeChatSDK/libWeChatSDK.a differ diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/PrivacyInfo.xcprivacy b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..cd33d3d --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/PrivacyInfo.xcprivacy @@ -0,0 +1,17 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + + diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/UTS.entitlements b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/UTS.entitlements new file mode 100644 index 0000000..778afbe --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/UTS.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.developer.associated-domains + + + diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/config.json b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/config.json new file mode 100644 index 0000000..fdad34a --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/config.json @@ -0,0 +1,14 @@ +{ + "deploymentTarget": "12.0", + "simulatorArchitectures": [ + "x86_64" + ], + "frameworks": [ + "CoreGraphics.framework", + "WebKit.framework", + "Security.framework" + ], + "thirdSDKs": [ + "weixin" + ] +} \ No newline at end of file diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/index.uts b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/index.uts new file mode 100644 index 0000000..147482c --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/app-ios/index.uts @@ -0,0 +1,183 @@ +import { UIApplication } from "UIKit"; +import { URL, NSUserActivity, Bundle, URLComponents, URLQueryItem, Script } from "Foundation"; +import { RequestMerchantTransfer, RequestMerchantTransferOptions, RequestMerchantTransferGeneralCallbackResult } from '../interface.uts'; + +export const requestMerchantTransfer : RequestMerchantTransfer = function (options : RequestMerchantTransferOptions) { + WxpayManager.requestMerchantTransfer(options) +} + +export class WxpayManagerHookProxy implements UTSiOSHookProxy { + // 应用正常启动时 (不包括已在后台转到前台的情况)的回调函数。 + applicationDidFinishLaunchingWithOptions(application : UIApplication | null, launchOptions : Map | null = null) : boolean { + WxpayManager.registerApp() + return false + } + + // 通过 url scheme 方式唤起 app 时的回调函数。 + applicationOpenURLOptions(app : UIApplication | null, url : URL, options : Map | null = null) : boolean { + WxpayManager.handleOpen(url) + return true + } + + // 当应用程序接收到与用户活动相关的数据时调用此方法,例如,当用户使用 Universal Link 唤起应用时。 + applicationContinueUserActivityRestorationHandler(application : UIApplication | null, userActivity : NSUserActivity | null, restorationHandler : ((res : [any] | null) => void) | null = null) : boolean { + WxpayManager.handleOpenUniversalLink(userActivity) + return true + } +} + +class WxpayManager implements WXApiDelegate { + private static shared = new WxpayManager() + private static options ?: RequestMerchantTransferOptions + + @UTSiOS.keyword("fileprivate") + static registerApp() { + const scheme = this.getApplicationScheme() + const universalLinkTmp = this.getApplicationUniversalLink() + if (scheme != null && universalLinkTmp != null && scheme != "" && universalLinkTmp != "") { + WXApi.registerApp(scheme!, universalLink = universalLinkTmp!) + } + } + + @UTSiOS.keyword("fileprivate") + static handleOpen(url : URL) { + WXApi.handleOpen(url, delegate = shared) + } + + @UTSiOS.keyword("fileprivate") + static handleOpenUniversalLink(userActivity : NSUserActivity | null) { + if (userActivity != null) { + WXApi.handleOpenUniversalLink(userActivity!, delegate = shared) + } + } + + private static getApplicationScheme() : string | null { + let scheme : string | null = null + const infoDictionary = Bundle.main.infoDictionary + if (infoDictionary != null) { + const wechat = infoDictionary!['WeChat'] as Map | null + if (wechat != null) { + scheme = wechat!['appid'] as string | null + } + } + + return scheme + } + + private static getApplicationUniversalLink() : string | null { + let universalLink : string | null = null + const infoDictionary = Bundle.main.infoDictionary + if (infoDictionary != null) { + const wechat = infoDictionary!['WeChat'] as Map | null + if (wechat != null) { + universalLink = wechat!['universalLink'] as string | null + } + } + return universalLink + } + + //@brief 检查微信是否已被用户安装 + @UTSiOS.keyword("fileprivate") + static isWXAppInstalled() : boolean { + const url = URL(string = "weixin://")! + if (UIApplication.shared.canOpenURL(url)) { + return true + } + return false + } + + static buildQueryString(parameters : Map) : string | null { + let components = URLComponents() + let queryItems : [URLQueryItem] = [] + parameters.forEach((value, key) => { + queryItems.append(URLQueryItem(name = key, value = value)) + }) + components.queryItems = queryItems + return components.percentEncodedQuery + } + + static requestMerchantTransfer(options : RequestMerchantTransferOptions) { + WxpayManager.options = options + if (WxpayManager.isWXAppInstalled() == false) { + var res : RequestMerchantTransferGeneralCallbackResult = { + errMsg: '微信没有安装' + } + options.fail?.(res) + options.complete?.(res) + } + + if (WxpayManager.getApplicationScheme() == null || WxpayManager.getApplicationScheme() == "") { + var res : RequestMerchantTransferGeneralCallbackResult = { + errMsg: '没有配置对应的URL Scheme' + } + options.fail?.(res) + options.complete?.(res) + return + } + + if (WxpayManager.getApplicationUniversalLink() == null || WxpayManager.getApplicationUniversalLink() == "") { + var res : RequestMerchantTransferGeneralCallbackResult = { + errMsg: '没有配置对应的Universal Link' + } + options.fail?.(res) + options.complete?.(res) + return + } + + if (WxpayManager.options != null) { + const parameters = new Map() + parameters.set('mchId', options.mchId) + parameters.set('package', options.package) + if (options.appId != null) { + parameters.set('appId', options.appId!) + } + if (options.openId != null) { + parameters.set('openId', options.openId!) + } + if (options.subAppId != null) { + parameters.set('subAppId', options.subAppId!) + } + if (options.subMchId != null) { + parameters.set('subMchId', options.subMchId!) + } + + let reg = new WXOpenBusinessViewReq(); + reg.businessType = "requestMerchantTransfer" + + let query = WxpayManager.buildQueryString(parameters) ?? "" + reg.query = query + + //函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调onResp + WXApi.send(reg) + } + } + + //@brief 发送一个sendReq后,收到微信的回应 + onResp(resp : BaseResp) { + if (resp instanceof WXOpenBusinessViewResp) { + let resp = resp as WXOpenBusinessViewResp + + if (resp.extMsg?.includes("cancel") == true) { + var res : RequestMerchantTransferGeneralCallbackResult = { + errMsg: '用户取消' + } + WxpayManager.options?.fail?.(res) + WxpayManager.options?.complete?.(res) + } + if (resp.extMsg?.includes("fail") == true) { + var res : RequestMerchantTransferGeneralCallbackResult = { + errMsg: '展示页面失败' + } + WxpayManager.options?.fail?.(res) + WxpayManager.options?.complete?.(res) + } + if (resp.extMsg?.includes("success") == true) { + var res : RequestMerchantTransferGeneralCallbackResult = { + errMsg: '确认收款' + } + WxpayManager.options?.success?.(res) + WxpayManager.options?.complete?.(res) + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/interface.uts b/uni_modules/uni-requestMerchantTransfer/utssdk/interface.uts new file mode 100644 index 0000000..2c0e12b --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/interface.uts @@ -0,0 +1,713 @@ +export interface Uni { + /** + 商家转账用户确认模式下,拉起页面请求用户确认收款 + @tutorial https://doc.dcloud.net.cn/uni-app-x/api/request-merchant-transfer.html + @tutorial_uni_app_x https://doc.dcloud.net.cn/uni-app-x/api/request-merchant-transfer.html + @tutorial_uni_app https://uniapp.dcloud.net.cn/api/plugins/request-merchant-transfer.html + @uniPlatform { + "app": { + "android": { + "osVer": "5.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "ios": { + "osVer": "12.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "harmony": { + "osVer": "5.0", + "uniVer": "5.14", + "unixVer": "5.14" + } + }, + "web": { + "uniVer": "x", + "unixVer": "x" + }, + "mp": { + "weixin": { + "hostVer": "√", + "uniVer": "√", + "unixVer": "4.41" + }, + "alipay": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "baidu": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "toutiao": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "lark": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "qq": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "kuaishou": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "jd": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + } + } + } + */ + requestMerchantTransfer(options : RequestMerchantTransferOptions) : void; +} + +export type RequestMerchantTransfer = (options : RequestMerchantTransferOptions) => void; +export type RequestMerchantTransferOptions = { + /** + 商户号 + @uniPlatform { + "app": { + "android": { + "osVer": "5.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "ios": { + "osVer": "12.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "harmony": { + "osVer": "5.0", + "uniVer": "5.14", + "unixVer": "5.14" + } + }, + "web": { + "uniVer": "x", + "unixVer": "x" + }, + "mp": { + "weixin": { + "hostVer": "√", + "uniVer": "√", + "unixVer": "4.61" + }, + "alipay": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "baidu": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "toutiao": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "lark": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "qq": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "kuaishou": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "jd": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + } + } + } + */ + mchId : string + /** + 商家转账付款单跳转收款页 pkg 信息,商家转账付款单受理成功时返回给商户 + @uniPlatform { + "app": { + "android": { + "osVer": "5.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "ios": { + "osVer": "12.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "harmony": { + "osVer": "5.0", + "uniVer": "5.14", + "unixVer": "5.14" + } + }, + "web": { + "uniVer": "x", + "unixVer": "x" + }, + "mp": { + "weixin": { + "hostVer": "√", + "uniVer": "√", + "unixVer": "4.61" + }, + "alipay": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "baidu": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "toutiao": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "lark": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "qq": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "kuaishou": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "jd": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + } + } + } + */ + package : string + /** + 商户 appId(微信平台appid),普通模式下必填,服务商模式下,appId 和 subAppId 二选一填写 + @uniPlatform { + "app": { + "android": { + "osVer": "5.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "ios": { + "osVer": "12.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "harmony": { + "osVer": "5.0", + "uniVer": "5.14", + "unixVer": "5.14" + } + }, + "web": { + "uniVer": "x", + "unixVer": "x" + }, + "mp": { + "weixin": { + "hostVer": "√", + "uniVer": "√", + "unixVer": "4.61" + }, + "alipay": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "baidu": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "toutiao": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "lark": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "qq": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "kuaishou": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "jd": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + } + } + } + */ + appId ?: string | null + /** + 收款用户 openId, 对应传入的商户 appId 下,某用户的 openId + @uniPlatform { + "app": { + "android": { + "osVer": "5.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "ios": { + "osVer": "12.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "harmony": { + "osVer": "x", + "uniVer": "x", + "unixVer": "x" + } + }, + "web": { + "uniVer": "x", + "unixVer": "x" + }, + "mp": { + "weixin": { + "hostVer": "√", + "uniVer": "√", + "unixVer": "4.61" + }, + "alipay": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "baidu": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "toutiao": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "lark": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "qq": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "kuaishou": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "jd": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + } + } + } + */ + openId ?: string | null + /** + 子商户 appId(微信平台子appid),服务商模式下,appId 和 subAppId 二选一填写 + @uniPlatform { + "app": { + "android": { + "osVer": "5.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "ios": { + "osVer": "12.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "harmony": { + "osVer": "x", + "uniVer": "x", + "unixVer": "x" + } + }, + "web": { + "uniVer": "x", + "unixVer": "x" + }, + "mp": { + "weixin": { + "hostVer": "√", + "uniVer": "√", + "unixVer": "4.61" + }, + "alipay": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "baidu": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "toutiao": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "lark": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "qq": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "kuaishou": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "jd": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + } + } + } + */ + subAppId ?: string | null + /** + 子商户号,服务商模式下必填 + @uniPlatform { + "app": { + "android": { + "osVer": "5.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "ios": { + "osVer": "12.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "harmony": { + "osVer": "x", + "uniVer": "x", + "unixVer": "x" + } + }, + "web": { + "uniVer": "x", + "unixVer": "x" + }, + "mp": { + "weixin": { + "hostVer": "√", + "uniVer": "√", + "unixVer": "4.61" + }, + "alipay": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "baidu": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "toutiao": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "lark": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "qq": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "kuaishou": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "jd": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + } + } + } + */ + subMchId ?: string | null + /** + 接口调用成功的回调函数 + @uniPlatform { + "app": { + "android": { + "osVer": "5.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "ios": { + "osVer": "12.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "harmony": { + "osVer": "5.0", + "uniVer": "5.14", + "unixVer": "5.14" + } + }, + "web": { + "uniVer": "x", + "unixVer": "x" + }, + "mp": { + "weixin": { + "hostVer": "√", + "uniVer": "√", + "unixVer": "4.61" + }, + "alipay": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "baidu": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "toutiao": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "lark": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "qq": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "kuaishou": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "jd": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + } + } + } + */ + success ?: RequestMerchantTransferSuccessCallback | null + /** + 接口调用失败的回调函数 + @uniPlatform { + "app": { + "android": { + "osVer": "5.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "ios": { + "osVer": "12.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "harmony": { + "osVer": "5.0", + "uniVer": "5.14", + "unixVer": "5.14" + } + }, + "web": { + "uniVer": "x", + "unixVer": "x" + }, + "mp": { + "weixin": { + "hostVer": "√", + "uniVer": "√", + "unixVer": "4.61" + }, + "alipay": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "baidu": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "toutiao": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "lark": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "qq": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "kuaishou": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "jd": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + } + } + } + */ + fail ?: RequestMerchantTransferFailCallback | null + /** + 接口调用结束的回调函数(调用成功、失败都会执行) + @uniPlatform { + "app": { + "android": { + "osVer": "5.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "ios": { + "osVer": "12.0", + "uniVer": "4.61", + "unixVer": "4.61" + }, + "harmony": { + "osVer": "5.0", + "uniVer": "5.14", + "unixVer": "5.14" + } + }, + "web": { + "uniVer": "x", + "unixVer": "x" + }, + "mp": { + "weixin": { + "hostVer": "√", + "uniVer": "√", + "unixVer": "4.61" + }, + "alipay": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "baidu": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "toutiao": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "lark": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "qq": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "kuaishou": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + }, + "jd": { + "hostVer": "x", + "uniVer": "x", + "unixVer": "x" + } + } + } + */ + complete ?: RequestMerchantTransferCompleteCallback | null +} +export type RequestMerchantTransferCompleteCallback = ( + res : RequestMerchantTransferGeneralCallbackResult +) => void +/** 接口调用失败的回调函数 */ +export type RequestMerchantTransferFailCallback = ( + res : RequestMerchantTransferGeneralCallbackResult +) => void +/** 接口调用成功的回调函数 */ +export type RequestMerchantTransferSuccessCallback = ( + res : RequestMerchantTransferGeneralCallbackResult +) => void +export type RequestMerchantTransferGeneralCallbackResult = { + errMsg : string +} diff --git a/uni_modules/uni-requestMerchantTransfer/utssdk/unierror.uts b/uni_modules/uni-requestMerchantTransfer/utssdk/unierror.uts new file mode 100644 index 0000000..65505f2 --- /dev/null +++ b/uni_modules/uni-requestMerchantTransfer/utssdk/unierror.uts @@ -0,0 +1,53 @@ +export type RequestMerchantTransferErrorCode = 9301102 | 9301103 | 9301104 | 9301105 | 9301106 | 9301107 | 9301108 | 9301109 | 9301110 + +export type RequestMerchantTransferError = { + errCode : RequestMerchantTransferErrorCode + errMsg : string +} + +export const REQUEST_MERCHANT_TRANSFER_MCH_ID_REQUIRED : RequestMerchantTransferError = { + errCode: 9301102, + errMsg: 'requestMerchantTransfer:fail mchId is required' +} + +export const REQUEST_MERCHANT_TRANSFER_PACKAGE_REQUIRED : RequestMerchantTransferError = { + errCode: 9301103, + errMsg: 'requestMerchantTransfer:fail package is required' +} + +export const REQUEST_MERCHANT_TRANSFER_APP_ID_REQUIRED : RequestMerchantTransferError = { + errCode: 9301104, + errMsg: 'requestMerchantTransfer:fail appId is required' +} + +export const REQUEST_MERCHANT_TRANSFER_WECHAT_NOT_INSTALLED : RequestMerchantTransferError = { + errCode: 9301105, + errMsg: 'requestMerchantTransfer:fail wechat is not installed' +} + +export const REQUEST_MERCHANT_TRANSFER_WECHAT_VERSION_LOW : RequestMerchantTransferError = { + errCode: 9301106, + errMsg: 'requestMerchantTransfer:fail wechat version is too low' +} + +export const REQUEST_MERCHANT_TRANSFER_CANCEL : RequestMerchantTransferError = { + errCode: 9301107, + errMsg: 'requestMerchantTransfer:fail cancel' +} + +export const REQUEST_MERCHANT_TRANSFER_PARSE_RESPONSE_ERROR : RequestMerchantTransferError = { + errCode: 9301108, + errMsg: 'requestMerchantTransfer:fail parse response error' +} + +export const REQUEST_MERCHANT_TRANSFER_OPEN_SDK_ERROR : RequestMerchantTransferError = { + errCode: 9301109, + errMsg: 'requestMerchantTransfer:fail open sdk error' +} + +export const REQUEST_MERCHANT_TRANSFER_BUSINESS_FAILED : RequestMerchantTransferError = { + errCode: 9301110, + errMsg: 'requestMerchantTransfer:fail business failed' +} + +export const REQUEST_MERCHANT_TRANSFER_OK = 'requestMerchantTransfer:ok' diff --git a/uni_modules/uview-plus/README.md b/uni_modules/uview-plus/README.md index d9e44df..3594d52 100644 --- a/uni_modules/uview-plus/README.md +++ b/uni_modules/uview-plus/README.md @@ -1,74 +1,90 @@ -

      - logo -

      -

      uview-plus 3.0

      -

      多平台快速开发的UI框架

      - -[![stars](https://img.shields.io/github/stars/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus) -[![forks](https://img.shields.io/github/forks/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus) -[![issues](https://img.shields.io/github/issues/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus/issues) -[![release](https://img.shields.io/github/v/release/ijry/uview-plus?style=flat-square)](https://gitee.com/jry/uview-plus/releases) -[![license](https://img.shields.io/github/license/ijry/uview-plus?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License) - -## 说明 - -uview-plus,是uni-app全面兼容vue3/nvue/鸿蒙/uni-app-x的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水。uview-plus是基于uView2.x移植的支持vue3的版本,感谢uView。 - -## 可视化设计 - -uview-plus现已推出免费可视化设计,可以方便的进行页面可视化设计,导出源码即可使用。极大提高前端页面开发效率;如产品经理设计师直接使用更可作为高保真高可用原型制作工具,让设计稿即代码,无需传统的设计稿开发还原步骤。 - - - - - -## 文档 -[官方文档:https://uview-plus.jiangruyi.com](https://uview-plus.jiangruyi.com) -[备用文档:https://uiadmin.net/uview-plus](https://uiadmin.net/uview-plus) - - -## 预览 - -您可以通过**微信**扫码,查看最佳的演示效果。 -
      -
      - - -## 链接 - -- [官方文档](https://uview-plus.jiangruyi.com) -- [更新日志](https://uview-plus.jiangruyi.com/components/changelog.html) -- [升级指南](https://uview-plus.jiangruyi.com/components/changeGuide.html) -- [关于我们](https://uview-plus.jiangruyi.com/cooperation/about.html) - -## 交流反馈 - -欢迎加入我们的QQ群交流反馈:[点此跳转](https://uview-plus.jiangruyi.com/components/addQQGroup.html) - -## 关于PR - -> 我们非常乐意接受各位的优质PR,但在此之前我希望您了解uview-plus是一个需要兼容多个平台的(小程序、h5、ios app、android app)包括nvue页面、vue页面。 -> 所以希望在您修复bug并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢! - -## 安装 - -#### **uni-app插件市场链接** —— [https://ext.dcloud.net.cn/plugin?name=uview-plus](https://ext.dcloud.net.cn/plugin?name=uview-plus) - -请通过[官网安装文档](https://uview-plus.jiangruyi.com/components/install.html)了解更详细的内容 - -## 快速上手 - -请通过[快速上手](https://uview-plus.jiangruyi.com/components/quickstart.html)了解更详细的内容 - -## 使用方法 -配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。 - -```html - -``` - -## 版权信息 -uview-plus遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uview-plus应用到您的产品中。 - +

      + logo +

      +

      uview-plus 3.0

      +

      多平台快速开发的UI框架

      + +[![stars](https://img.shields.io/github/stars/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus) +[![forks](https://img.shields.io/github/forks/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus) +[![issues](https://img.shields.io/github/issues/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus/issues) +[![release](https://img.shields.io/github/v/release/ijry/uview-plus?style=flat-square)](https://gitee.com/jry/uview-plus/releases) +[![license](https://img.shields.io/github/license/ijry/uview-plus?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License) + +## 说明 + +【文档有广告,不喜勿入谢谢】 + +uview-plus,是uni-app全面兼容vue3/nvue/鸿蒙/uni-app-x(已经发布https://ext.dcloud.net.cn/plugin?name=uview-ultra)的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水。uview-plus是基于uView2.x移植的支持vue3的版本,感谢uView。 + +## 版本 + +### uview-plus v3 (uni-app版本) +1. 保持选项式API,尽可能兼容原有uview2各种API,比如mixins,方便大家升级更容易; +2. 新手友好,保持原汁原味js,二次开发方便,未使用typescript重写,但带有独立的类型申明包; + +### uview-ultra v4 (uni-app-x版本) +1. 尽可能保持原有组件的API一致,方便大家升级; +2. 使用uts + 组合式API架构级全新重构,但仍然保持源码的简易,不封装过于复杂,便于修改。 + +## 可视化设计 + +uview-plus现已推出免费可视化设计,可以方便的进行页面可视化设计,导出源码即可使用。极大提高前端页面开发效率;如产品经理设计师直接使用更可作为高保真高可用原型制作工具,让设计稿即代码,无需传统的设计稿开发还原步骤。 + + + + + +## 文档 +[官方文档:https://uview-plus.jiangruyi.com](https://uview-plus.jiangruyi.com) +[备用文档:https://uiadmin.net/uview-plus](https://uiadmin.net/uview-plus) + + +## 预览 + +您可以通过**微信**扫码,查看最佳的演示效果。 +
      +
      + +| H5 | 微信小程序 | 安卓 | 鸿蒙Next(已上架) | +| --- | --- | --- | --- | +| | | | | +
      + + + +## 链接 + +- [官方文档](https://uview-plus.jiangruyi.com) +- [更新日志](https://uview-plus.jiangruyi.com/components/changelog.html) +- [升级指南](https://uview-plus.jiangruyi.com/components/changeGuide.html) +- [关于我们](https://uview-plus.jiangruyi.com/cooperation/about.html) + + +## 关于PR + +> 我们非常乐意接受各位的优质PR,但在此之前我希望您了解uview-plus是一个需要兼容多个平台的(小程序、h5、ios app、android app)包括nvue页面、vue页面。 +> 所以希望在您修复bug并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢! + +## 安装 + +#### **uni-app插件市场链接** —— [https://ext.dcloud.net.cn/plugin?name=uview-plus](https://ext.dcloud.net.cn/plugin?name=uview-plus) + +请通过[官网安装文档](https://uview-plus.jiangruyi.com/components/install.html)了解更详细的内容 + +## 快速上手 + +请通过[快速上手](https://uview-plus.jiangruyi.com/components/quickstart.html)了解更详细的内容 + +## 使用方法 +配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。 + +```html + +``` + +## 版权信息 +uview-plus遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uview-plus应用到您的产品中。 + +Root 组件基于上游项目 `uni-ku/root` 二次开发,已按 MIT 要求保留其原始授权文件:`libs/root/LICENSE`。 diff --git a/uni_modules/uview-plus/changelog.md b/uni_modules/uview-plus/changelog.md index 34ec52d..181c58b 100644 --- a/uni_modules/uview-plus/changelog.md +++ b/uni_modules/uview-plus/changelog.md @@ -1,623 +1,2375 @@ -## 3.3.72(2025-02-28) -feat: tabs组件支持icon图标及插槽 - -## 3.3.71(2025-02-27) -feat: 折叠面板collapse增加titileStyle/iconStyle/rightIconStyle属性 - -feat: 折叠面板组件新增cellCustomStyle/cellCustomClass属性 - -fix: select组件盒模型 - -## 3.3.70(2025-02-24) -fix: 修改u-checkbox-group组件changes事件发生位置 - -## 3.3.69(2025-02-19) -picker允许传递禁用颜色props - -slider组件isRange状态下增加min max插槽分开显示内容 - -feat: 新增经典下拉框组件up-select - -## 3.3.68(2025-02-12) -fix: 修复weekText类型 - -feat: 日历增加单选与多选指定禁止选中的日期功能 - -fix: NumberBox删除数字时取值有误 #613 - -## 3.3.67(2025-02-11) -feat: navbar支持返回全局拦截器配置 - -feat: 表单-校验-支持无提示-得到校验结果 - -feat: picker传递hasInput属性时候,可以禁用输入框点击 - -## 3.3.66(2025-02-09) -feat: steps-item增加content插槽 - -## 3.3.65(2025-02-05) -feat: number-box组件新增按钮圆角/按钮宽度/数据框背景色/迷你模式 -## 3.3.64(2025-01-18) -feat: 日历组件支持自定义星期文案 - -## 3.3.63(2025-01-13) -fix: cate-tab支持支付宝小程序 - -fix: textarea 修复 placeholder-style - -fix: 修复在图片加载及加载失败时容器宽度 - -fix: waterfall组件报错Maximum recursive updates - -## 3.3.62(2025-01-10) -feat: sleder滑动选择器双滑块增加外层触发值的变动功能 - -fix: picker支持hasInput优化 - -## 3.3.61(2024-12-31) -fix: 修复微信getSystemInfoSync接口废弃警告 - -fix: 'u-status-bar' symbol missing - -## 3.3.60(2024-12-30) -feat: 日期组件支持禁用 - -fix: ts定义修复 #600 - -feat: Tabs组件选中时增加一个active的class #595 - -## 3.3.59(2024-12-30) -fix: Property "isH5" was accessed during render - -## 3.3.58(2024-12-26) -fix: slider组件change事件传参 - -## 3.3.57(2024-12-23) -fix: slider组件change事件传参 - -feat: 更新u-picker组件增加当前选中class类名 - -## 3.3.56(2024-12-18) -feat: 在u-alert组件中添加关闭事件 - -## 3.3.55(2024-12-17) -add: swiper增加双向绑定 - -## 3.3.54(2024-12-11) -add: qrcode支持props控制是否开启点击预览 - -add: 新增cate-tab垂直分类组件 - -## 3.3.53(2024-12-10) -fix: 修复popup居中模式点击内容区域触发关闭 - -## 3.3.52(2024-12-09) -add: notice-bar支持justifyContent属性 - -## 3.3.51(2024-12-09) -add: radio增加label插槽 - -## 3.3.50(2024-12-05) -fix: 优化popup等对禁止背景滚动机制 - -add: slider在弹窗使用示例 - -fix: card组件类名问题 - -## 3.3.49(2024-12-02) -fix: 去除album多余的$u引用 - -fix: 优化图片组件兼容性 - -add: picker组件增加zIndex属性 - -add: text增加是否占满剩余空间属性 - -add: input颜色示例 - -## 3.3.48(2024-11-29) -add: 文本行数限制样式提高到10行 - -del: 去除不跨端的inputmode -## 3.3.47(2024-11-28) -fix: 时间选择器在hasInput模式下部分机型键盘弹出 - -## 3.3.46(2024-11-26) -fix: 修复text传递事件参数 - -## 3.3.45(2024-11-24) -add: navbar组件支持配置标题颜色 - -fix: 边框按钮警告类型下颜色变量使用错误 - -## 3.3.43(2024-11-18) -fix: 支持瀑布流组件v-model置为[] - -add: 新增字符串路径访问工具方法getValueByPath - -add: 新增float-button悬浮按钮组件 - -## 3.3.42(2024-11-15) -add: button组件支持stop参数阻止冒泡 - -## 3.3.41(2024-11-13) -fix: u-radio-group invalid import - -improvement: 优化图片组件宽高及修复事件event传递 - -## 3.3.40(2024-11-11) -add: 组件radioGroup增加gap属性用于设置item间隔 - -fix: 修复H5全局导入 - -## 3.3.39(2024-11-04) -fix: 修复相册组件 - -## 3.3.38(2024-11-04) -fix: 修复视频预览报错 #510 - -add: album组件增加stop参数支持阻止事件冒泡 - -## 3.3.37(2024-10-21) -fix: 修复因为修改组件名称前缀,导致h5打包后$parent方法内找不到父组件的问题 - -fix: 修复datetime-picker选择2000年以前日期出错 - -## 3.3.36(2024-10-09) -fix: toast 自动关闭 - -feat: 增加微信小程序用户昵称审核完毕回调及修改 ts 定义文件 - -## 3.3.35(2024-10-08) -feat: modal和picker支持v-model:show双向绑定 - -feat: 支持checkbox使用slot自定义label后自带点击事件 #522 - -feat: swipe-action支持自动关闭特性及初始化打开状态 - -## 3.3.34(2024-09-23) -feat: 支持toast设置duration值为-1时不自动关闭 - -## 3.3.33(2024-09-18) -fix: 修复test.date('008')等验证结果不准确 - -## 3.3.32(2024-09-09) -fix: u-keyboard名称冲突warning - -## 3.3.31(2024-08-31) -feat: qrcode初步支持nvue - -## 3.3.30(2024-08-30) -fix: slider兼容step为字符串类型 - -## 3.3.29(2024-08-30) -fix: 修复tabs组件current参数为字符串处理逻辑 - -## 3.3.28(2024-08-26) -fix: list组件滑动偏移量不一样取绝对值导致iOS下拉偏移量计算错误 - -## 3.3.27(2024-08-22) -fix: 修复up-datetime-picker组件toolbarRightSlot定义缺失 - -fix: 修复FormItem的rules更新错误的问题 - -## 3.3.26(2024-08-22) -fix: 批量注册全局组件优化 - -## 3.3.25(2024-08-21) -fix: 修复slider在app-vue下样式问题 - -## 3.3.24(2024-08-19) -fix: 修复时间选择器hasInput模式小程序不生效 - -feat: 支持H5导入所有组件 - -## 3.3.23(2024-08-17) -feat: swipe-action增加closeAll方法 - -fix: 兼容tabs在某些场景下index小于0时自动设置为0 - -add: 通用mixin新增navTo页面跳转方法 - -## 3.3.21(2024-08-15) -improvement: 优化二维码组件loading及支持预览与长按事件 #351 - -fix: 修复swipe-action自动关闭其它功能及组件卸载自动关闭 - -## 3.3.20(2024-08-15) -refactor: props默认值文件移至组件文件夹内便于查找 -## 3.3.19(2024-08-14) -fix: 修复2被rpx兼容处理只在数字值生效 - -add: 增加swiper自定义插槽示例 - -## 3.3.18(2024-08-13) -feat: 新增支持datetime-picker工具栏插槽及picker插槽支持修复 -## 3.3.17(2024-08-12) -feat: swiper组件增加默认slot便于自定义 - -feat: grid新增间隔参数 - -feat: picker新增toolbar-right和toolbar-bottom插槽 - -## 3.3.16(2024-08-12) -fix: 解决swiper中title换行后多余的内容未被遮挡问题 - -fix: 修复迷你导航适配异形屏 - -## 3.3.15(2024-08-09) -fix: 修复默认单位设置为rpx时一些组件高度间距异常 - -fix: 修复日历在rpx单位下布局异常 - -feat: code-input支持App端展示输入光标 - -## 3.3.14(2024-08-09) -add: 增加box组件 - -add: 增加card卡片组件 - - -## 3.3.13(2024-08-08) -feat: input支持调用原生组件的focus和blur方法 - -improvement: grid-item条件编译优化 - -add: 新增迷你导航组件 - -## 3.3.12(2024-08-06) -improvement: $u挂载时机调整便于打包分离chunk - -fix: steps新增itemStyle属性名称冲突 - -## 3.3.11(2024-08-05) -feat: 新增支持upload组件的deletable/maxCount/accept变更监听 #333 - -feat: 新增支持tabs在swiper中使用 - -feat: 新增FormItem支持独立设置验证规则rules - -fix: 修复index-list未设置$slots.header时索引高亮失效 - -## 3.3.10(2024-08-02) -fix: 修复index-list偶发的滑动最后一个索引报错top不存在 - -fix: 修复gird在QQ、抖音小程序下布局 - -feat: 优化step支持自定义样式prop - -feat: action-sheet组件支持v-model:show双向绑定 - -fix: 小程序下steps和grid都统一采用grid布局 - -fix: 修复支付宝小程序下input类型为数字时双向绑定失效 - -feat : form 表单 validate 校验不通过后 error增加字段prop信息 #304 - -fix: form组件异步校异常验问题 #393 - -## 3.3.9(2024-08-01) -fix: 优化获取nvue元素 - -feat: modal新增contentTextAlign设置文案对齐方式 - -fix: 修复NVUE下tabbar文字不显示 #458 - -feat: loading-page增加zIndex属性 - -fix: 相册在宽度较小时换行问题 - -feat: album相册增加自适应自动换行模式 - -feat: album相册增加图片尺寸单位prop - -fix: 修复calendar日历月份居中 - -## 3.3.8(2024-07-31) -feat: slider支持进度条任意位置触发按钮拖动 - -fix: 修复app-vue下modal标题不居中 - -fix: #459 TS setConfig 声明异常 - -feat: tabs组件增加longPress长按事件 - -feat: 新增showRight属性控制collapse右侧图标显隐 - -fix: 优化nvue下css警告 - -## 3.3.7(2024-07-29) -feat: 支持IndexList组件支持在弹窗等场景下使用及联动优化 - -feat: popup组件支持v-model:show双向绑定 - -feat: 优化tabs的current双向绑定 - -fix: checkbox独立使用时checked赋初始值可以,但是手动切换时值没有做双向绑定! #455 - -feat: slider组件支持区间双滑块 - -fix: toast 支持自定义图标?可传入了决对路径的 icon也没有用 #409 - -feat: form-item校验失败时 增加class方便自定义显示错误的展示方式 #394 - -fix: up-cell的required配置不生效 #395 - -fix: 横向滚动组件,微信小程序编译后会有警告 #415 - -fix: u-picker内部对默认值defaultIndex的监听 #425 - -feat: toast 组件支持遮掩层穿透 #417 - -fix: 兼容vue的slot编译bug #423 - -fix: upload 微信小程序 点击预览视频报错 #424 - -fix: u-number-box 组件修改【integer, decimalLength, min, max 】props时没有触发绑定值更新 #429 - -feat: Tabs组件能否支持自定义插槽 #439 - -feat: ActionSheet 可以配置最大高度吗, 我当做select使用了。 #445 - -fix: cursor-pointer优化 - -feat: 新版slider组件兼容NVUE改造 - -feat: 新增slider组件手动实现以支持样式自定义 - -perf:补充TS声明提示信息 - -修复:ActionSheet 操作菜单cancelText属性为空DOM节点还存在并且可以点击问题 - -fix: 去除预留的beforeDestroy兼容容易在某些sdk下不识别条件编译 - -## 3.3.6(2024-07-23) -feat: u-album组件添加radius,shape参数,定义参考当前u-image参数 - -fix: 修复了calendar组件title和日期title未垂直居中的问题 - -fix: update:modelValue缺失emit定义 - -## 3.3.5(2024-07-10) -picker组件支持hasInput模式 - -## 3.3.4(2024-07-07) -fix: input组件双向绑定问题 #419 - -lazy-load完善emit - -优化通用小程序分享 - -## 3.3.2(2024-06-27) -fix: 在Nvue环境中编译,出现大量警告 #406 -## 3.3.1(2024-06-27) -u-button组件报错,找不到button mixins #407 -## 3.3.0(2024-06-27) -feat: checkbox支持label设置slot - -feat: modal增加customClass - -feat: navbar、popup、tabs、text支持customClass - -fix: cell组建缺少flex布局 - -fix: 修复微信小程序真机调试时快速输入出现文本回退问题 - -feat: tag增加默认slot - -公共mixin改造为按需导入语法 - -refactor: 组件props混入mixin改造为按需导入语法 - -fix: u-tabbar 安卓手机点击按钮变蓝问题 #396 - -feat: upload组建增加extension属性 - -fix: upload组件参数mode添加left - -fix: 修复阴影在非nvue时白色背景色不显示 - -## 3.2.24(2024-06-11) -fix: 修复时间选择器confirm事件触发时机导致2次才会触发v-model更新 -## 3.2.23(2024-05-30) -fix: #378 H5 u-input 在表单中初始值为空也会触发一次 formValidate(this,"change")事件导致进入页面直接校验了一次 - -fix: #373 搜索组件up-search的@clear事件无效 - -fix: #372 ActionSheet 组件的取消按钮触发区域太小 - -## 3.2.22(2024-05-13) -上传组件支持微信小程序预览视频 - -修复折叠面板右侧箭头不显示 - -修复uxp2px - -## 3.2.21(2024-05-10) -fix: loading-icon修复flex布局 -## 3.2.20(2024-05-10) -修复瀑布流大小写#355 -## 3.2.19(2024-05-10) -去除意外的文件引入 -## 3.2.18(2024-05-09) -fix: 349 popup 组件设置 zIndex 属性后,组件渲染异常# -feat: 搜索框增加adjustPosition属性 -fix: #331增加u-action-sheet__cancel -优化mixin兼容性 -feat: #326 up-list增加下拉刷新功能 -fix: #319 优化up-tabs参数与定义匹配 -fix: index-list组件微信小程序端使用自定义导航栏异常 -fix: #285 pickerimmediateChange 写死为true -fix: #111 u-scroll-list组件,隐藏指示器后报错, 提示找不到ref -list增加微信小程序防抖配置 - -## 3.2.17(2024-05-08) -fix: 支付宝小程序二维码渲染 -## 3.2.16(2024-05-06) -修复tabs中,当前激活样式的undefined bug - -fix: #341u-code 倒计时没结束前退出,再次进入结束后退出界面,再次进入重新开始倒计时bug - -受到uni-app内置text样式影响修复 - -## 3.2.15(2024-04-28) -优化时间选择器hasInput模式初始化值 -## 3.2.14(2024-04-24) -去除pleaseSetTranspileDependencies - -http采用useStore - -## 3.2.13(2024-04-22) -修复modal标题样式 - -优化日期选择器hasInput模式宽度 - -## 3.2.12(2024-04-22) -修复color应用 -## 3.2.11(2024-04-18) -修复import化带来的问题 -## 3.2.10(2024-04-17) -完善input清空事件App端失效的兼容性 - -修复日历组件二次打开后当前月份显示不正确 - -## 3.2.9(2024-04-16) -组件内uni.$u用法改为import引入 - -规范化及兼容性增强 - -## 3.2.8(2024-04-15) -修复up-tag语法错 -## 3.2.7(2024-04-15) -修复下拉菜单背景色在支付宝小程序无效 - -setConfig改为浅拷贝解决无法用import导入代替uni.$u.props设置 - -## 3.2.6(2024-04-14) -修复某些情况下滑动单元格默认右侧按钮是展开的问题 -## 3.2.5(2024-04-13) -调整分段器尺寸及修复窗口大小改变时重新计算尺寸 - -多个组件支持cursor-pointer增强PC端体验 - -## 3.2.4(2024-04-12) -初步支持typescript -## 3.2.3(2024-04-12) -fix: 修复square属性在小程序下无效问题 - -fix:修复lastIndex异常导致的column异常问题 - -fix: alipayapp picker style - -feat(button): 添加用户同意隐私协议事件回调 - -fix: input switch password - -fix: 修复u-code组件keepRuning失效问题 - -feat: form-item添加labelPosition属性 - -新增dropdown组件 - -分段器支持内部current值 - -优化cell和action-sheet视觉大小 - -修复tabs文字换行 - -## 3.2.2(2024-04-11) -修复换行符问题 -## 3.2.1(2024-04-11) -修复演示H5二维码 - -fix: #270 ReadMore 展开阅读更多内容变化兼容 - -fix: #238Calendar组件maxDate修改为不能小于minDate - -checkbox支持独立使用 - -修复popup中在微信小程序中真机调试滚动失效 - -## 3.2.0(2024-04-10) -修复轮播图在nvue显示 -修复疑似u-slider名称被占用导致slider在App下不显示 -解决微信小程序提示 Some selectors are not allowed in component wxss -示例中u-前缀统一为up- -增加瀑布流与图片懒加载组件 -fix: #308修复tag组件缺失iconColor参数 -fix: #297使用grid布局解决目前编译为抖音小程序无法开启virtualHost -## 3.1.52(2024-04-07) -工具类方法调用import化改造 -新增up-copy复制组件 -## 3.1.51(2024-04-07) -优化时间选择器自带输入框格式化显示 -防止按钮文字换行 -修复订单列表模板滑动 -增加u-qrcode二维码组件 -## 3.1.49(2024-03-27) -日期时间组件支持自带输入框 -fix: popup弹窗滚动穿透问题 -fix: 修复小程序numberbox bug -## 3.1.48(2024-03-18) -fix:[plugin:uni:pre-css] Unbalanced delimiter found in string -## 3.1.47(2024-03-18) -fix: setConfig设置组件默认参数无效问题 -fix: 修复自定义图标无效问题 -feat: 增加u-form-item单独设置规则变量 -fix:#293小程序是自定义导航栏的时候即传了customNavHeight的时候会出现跳转偏移的情况 - -## 3.1.46(2024-01-29) -beforeUnmount -## 3.1.45(2024-01-24) -fix: #262ext组件为超链接的情况下size属性不生效 -fix: #263最新版本3.1.42中微信小程序u-swipe-action-item报错 -fix: #224最新版本3.1.42中微信小程序u-swipe-action-item报错 -fix: #263支持支付宝小程序 -fix: #261u-input在直接修改v-model的绑定值时,每隔一次会无法出发change事件 -优化折叠面板兼容微信小程序 -## 3.1.42(2024-01-15) -修复u-number-box默认值0时在小程序不显示值 -优化u-code的timer判断 -优化支付宝小程序下textarea字数统计兼容 -优化u-calendar -## 3.1.41(2023-11-18) -#215优化u-cell图标容器间距问题 -## 3.1.40(2023-11-16) -修复u-slider双向绑定 -## 3.1.39(2023-11-10) -修复头条小程序不支持env(safe-area-inset-bottom) -优化#201u-grid 指定列数导致闪烁 -#193IndexList 索引列表 高度错误 -其他优化 -## 3.1.38(2023-10-08) -修复u-slider -## 3.1.37(2023-09-13) -完善emits定义及修复code-input双向数据绑定 -## 3.1.36(2023-08-08) -修复富文本事件名称大小写 -## 3.1.35(2023-08-02) -修复编译到支付宝小程序u-form报错 -## 3.1.34(2023-07-27) -修复App打包uni.$u.mpMixin方式sdk暂时不支持导致报错 -## 3.1.33(2023-07-13) -修复弹窗进入动画、模板页面样式等 -## 3.1.31(2023-07-11) -修复dayjs引用 -## 3.0.8(2022-07-12) -修复u-tag默认宽度撑满容器 -## 3.0.7(2022-07-12) -修复u-navbar自定义插槽演示示例 -## 3.0.6(2022-07-11) -修复u-image缺少emits申明 -## 3.0.5(2022-07-11) -修复u-upload缺少emits申明 -## 3.0.4(2022-07-10) -修复u-textarea/u-input/u-datetime-picker/u-number-box/u-radio-group/u-switch/u-rate在vue3下数据绑定 -## 3.0.3(2022-07-09) -启用自建演示二维码 -## 3.0.2(2022-07-09) -修复dayjs/clipboard等导致打包报错 -## 3.0.1(2022-07-09) -增加插件市场地址 -## 3.0.0(2022-07-09) -# uview-plus(vue3)初步发布 +## 3.8.82 +fix: App 端内置图标字体改为包内本地加载 + +- App / App-nvue 内置 u-icon 字体改为从包内 upicon.ttf 加载,不再依赖 alicdn 网络请求(#1044) +- 使用 upicon.ttf?url 由构建产物发射本地字体资源,配合 uni.loadFontFace / weex addRule,避免弱网阻塞页面渲染 +- 无需手动拷贝到 static,也无需 npm postinstall hook + +## 3.8.81 +fix: 修复全局 mixin 的 $u 缓存未声明导致 Vue3 开发警告 + +- 将 $u 计算属性缓存从未声明的 chacheU 改为内部实例非响应式缓存,避免全局 mixin 注入后每个组件实例渲染都触发警告(#1045) +- 主题变化时同步清空新的 $u 缓存,保持运行时主题刷新行为不变 + +## 3.8.80 +fix: 修复 swipeAction 关闭态右侧删除按钮露边 + +- H5 关闭态内容层与容器之间可能出现 1px 亚像素缝隙,右侧删除按钮红色底会透出(#843) +- 为内容层补全覆盖与同色 box-shadow 封边,并强化容器合成层裁剪 + +## 3.8.79 +fix: 适配鸿蒙 platform/UA 检测,并修复 u-image flex 压缩 + +- u-sticky / gcanvas bridge-weex 显式识别 harmony/harmonyos/ohos,消除鸿蒙静态检查告警(#1028) +- u-image 在 flex 布局下增加防压缩尺寸策略,修正 radius 字符串判断 + +## 3.8.78 +fix: 完善 u-dragsort 禁用拖拽逻辑 + +- 全局 draggable 为 false 时,onTouchStart 不再写入 dragIndex +- 避免 Android 禁用场景下出现小范围漂浮与阴影(关联 #854) + +## 3.8.77 +修复 index.js 在 H5 环境下组件自动注册逻辑,移除对 import.meta.glob 的运行时函数判断。 +确保 Vite 编译期宏可以正常展开,避免全局组件注册被误跳过。 + +## 3.8.76 +统一 up-canvas 画布承载,迁移二维码、条形码、裁剪、海报、上传等组件的直接 canvas 使用。 +补充 up-canvas 跨端绘制、导出、像素读写能力,并增加对应组件文档。 + +## 3.8.75 +fix: 调整 up-button 默认宽度语义 + +- 将非 nvue 普通按钮默认宽度从 100% 改为 auto,避免在横向布局中挤压相邻内容。 +- size="large" 仍保持全宽表现;需要普通按钮全宽时请显式设置 custom-style 或外层容器宽度。 +- 同步更新 Button 文档提示默认宽度语义变化。 + +## 3.8.74 +fix: 修复waterfall组件在列高未稳定时可能只渲染左侧一列的问题 +fix: 调整markdown组件marked依赖为mjs模块导入,提升打包解析兼容性 + +## 3.8.73 +修复 u-calendar 页面内模式弹层安全区配置不足 + +- u-calendar 新增 overlay、duration、overlayStyle、overlayOpacity、zIndex、safeAreaInsetBottom、safeAreaInsetTop、bgColor 等常用 u-popup 透传属性 +- pageInline 模式可通过 safeAreaInsetBottom=false 关闭底部安全区,默认行为保持不变 +- 同步补充 TypeScript 类型声明与静态校验 + +## 3.8.72 +修复 pagination 总数和每页条数选择展示问题 + +- total 布局项改为展示总记录数,移除误显示当前页的调试文本 +- 恢复 sizes 布局项的每页条数选择器,并兼容数字数组与 { label, value } 配置 + +## 3.8.71 +修复 line-progress 默认参数错配导致默认进度宽度异常 + +- 修正 inactiveColor 与 percentage 默认值读取字段,避免默认渲染计算出 NaNpx +- 补充 fromRight 类型声明,完善从右往左加载能力提示 +- 补充 line-progress 示例默认配置场景,并同步文档说明 + +## 3.8.70 +feat: u-tooltip 新增 singleton 单例打开能力 + +- 新增 singleton 属性,开启该属性的 tooltip 同一页面同时只显示一个 +- 默认值为 false,保持现有多 tooltip 同时展示行为不变 +- close 时同步触发 update:show,便于 manual 模式外部状态保持一致 + +## 3.8.69 +修复 navbar 全局左侧点击拦截器无法获取组件实例 + +## 3.8.68 +修复 action-sheet 描述文本边距不生效问题 + +## 3.8.67 +fix: 修复 pageInline 在 nvue 下不显示 + +## 3.8.66 +fix: 修复 u-number-box 在 integer=false 时无法调出小数点键盘 + +- integer=false 时 input type 使用 digit,integer=true 时仍使用 number +- 同步覆盖微信小程序与 APP/H5 等非微信端 + +## 3.8.64 +fix: 修复 up-textarea 开启 count 时 v-model 为空值导致报错 + +- 字数统计改为安全取值,避免 null/undefined 访问 length +- 外部绑定值与输入值统一做字符串归一化 + +## 3.8.63 +chore: 给radio和checkbox组件添加选中样式名及插槽变量 + +## 3.8.62(2026-07-07) +fix: 修复avatar语法问题 + +## 3.8.61(2026-07-06) +fix:(up-avbar) : 优化安全区背景渲染 +fix(up-color-picker): 增加box-sizing解决content padding撑开宽度问题 + +保留up-status-bar作为透明占位,将navbar背景统一设置到外层容器,并让内容区透明以支持渐变和图片背景连续覆盖。 + +## 3.8.60(2026-06-30) +fix: 添加 uni API shim 防止支付宝等平台缺失 onWindowResize 导致报错 + +支付宝小程序等平台不支持 uni.onWindowResize / uni.offWindowResize,导致 u-tabs、u-subsection 等组件运行时报错。新增 uni-api-shims.js 模块,在库初始化时按能力检测并自动补齐缺失 API 为空实现,确保所有平台均可正常加载。 + +## 3.8.59(2026-06-29) +feat: 优化组件 props 默认配置按需加载 + +- 将全局 props 默认配置从“集中静态导入所有组件”改为懒注册机制,避免单个组件 props 加载时拉入全部组件默认配置。 +- 各组件 `props.js` 改为只导入并注册自身默认 props,降低按需使用场景下的依赖体积。 +- `setConfig({ props })` 改为写入共享懒加载 props store,继续兼容组件加载前后的全局默认值覆盖。 +- 恢复并保留 `uni.$u.props` 运行时访问与直接赋值能力。 +- 新增 props lazy-loading 验证脚本,覆盖全量导入检查、默认值补齐、用户覆盖优先和入口配置接入。 + +## 3.8.58(2026-06-23) +feat: forward markdown parse link events + +## 3.8.57(2026-06-21) +fix: 修复 table2 超出隐藏失效并补齐表格属性行为 + +为 table2 单元格内容增加稳定宽度约束和默认文本截断包装,兼容 H5、小程序及 nvue 下 showOverflowTooltip 的单行省略表现。 +同时补齐 rowStyle、defaultExpandAll、lazy/load、排序配置和 context 透传等表格属性的实际行为。 + +## 3.8.56(2026-06-16) +fix 修复 table2 超出隐藏失效问题 + +## 3.8.55(2026-06-12) +fix: 完善日历今天按钮的区间模式表现及修复小程序多输入框切换时 blur 格式化视图不刷新 + +- 问题出现在小程序真机多个输入框切换场景中,A 输入框在 blur 回调里完成格式化后,点击 B 输入框会导致数据已更新但 A 的显示值未及时同步。本次修改在 u-input 内部记录 blur 时的原始值,并在 modelValue 回流阶段识别 blur 后的外部格式化结果,允许该结果覆盖 innerValue,避免被 changeFromInner 保护逻辑拦截。这样在点击其他输入框触发 blur 时,格式化结果也能正确更新到视图。 +- 避免日期区间模式点击今天时清空已有选中范围,同时提供今天日期的独立高亮能力。新增 todayColor 配置、组件透传与类型声明,并调整 range 模式下今天按钮仅定位不选中。single 模式保持点击今天直接选中,range 模式保留原区间并定位到今天。 + +## 3.8.54(2026-06-11) +fix(calendar): 修复今天按钮点击后未选中日期的问题 + +今天按钮在跳转到今天所在月份后,会复用日历原有日期点击逻辑选中今天,并按 showConfirm 配置保持确认行为一致。 + +## 3.8.53(2026-06-11) +feat(calendar): 日历顶部增加时分秒选择能力 + +新增 enableTime、timePrecision、defaultTime 配置,支持单选与区间首尾模式在顶部点击时间区域后弹出居中 picker 进行时间编辑。 +确认返回仍为字符串数组:单选与区间首尾模式返回日期时间字符串;区间 all 模式按约定不展示时间选择并保持原日期数组返回;同日区间增加结束时间不能早于开始时间的校验。 + +## 3.8.52(2026-06-10) +fix(table2): 修复微信小程序中重复 slot name="cell" 导致的报错 (#839) + +在固定列浮动视图(u-table-fixed-shadow)的 MP-WEIXIN 条件编译块中, +将 改为直接内联渲染,消除同组件内同名 slot 的冲突。 +微信小程序不允许单个组件实例中出现多个同名 slot,而主表体已占用 "cell", +固定列视图区仅用于视觉叠加,直接渲染 item.row[col.key] 即可满足需求。 + +## 3.8.51(2026-06-09) +fix(picker): 修复异步columns加载时defaultIndex位置不更新的问题 (#841) + +问题:当columns从接口动态返回时(初始为空数组,延迟后赋值), +defaultIndex已提前设置好innerIndex,columns变化时innerIndex值未改变, +picker-view的:value绑定不触发重新渲染,导致滚动位置停留在第0项。 + +修复:在setColumns中检测是否有列从空变为有数据,若是则先清空innerIndex, +再在$nextTick中恢复目标值,强制picker-view重新滚动到defaultIndex指定位置。 + +## 3.8.50(2026-06-08) +fix: 修复 pageInline 日历隐藏挂载时首日偏移异常 + +问题原因:u-calendar 在隐藏容器中挂载时可能获取到 width=0,导致首日 margin-left 计算为 0。 +改动内容: +1) 非 APP-NVUE 场景首日偏移改为百分比计算,避免依赖运行时宽度。 +2) 宽度获取增加 windowWidth 兜底,降低隐藏挂载导致的布局异常风险。 +影响范围:仅调整 u-calendar/month.vue 的首日偏移与宽度兜底逻辑,不改变选择交互行为。 + +## 3.8.49(2026-06-05) +fix(datetime-picker): 修复hasInput模式下点击遮罩无法关闭弹窗的问题 + +- 在close()方法中补充将showByClickInput置为false的逻辑, +- 与cancel()和confirm()的处理保持一致,修复issue #759 + +## 3.8.48(2026-06-04) +feat(calendar): 新增区间模式返回值格式配置 + +- 新增 rangeResultMode 配置项,支持 range 模式在 confirm 时返回全部区间日期或仅返回起止日期。 +- 本次改动覆盖默认配置、组件 props、确认回调返回逻辑与 TypeScript 类型声明,默认值为 all 以保持现有行为兼容。 + +## 3.8.47(2026-06-03) +扩展 u-datetime-picker 支持小时与秒级时间选择 + +- 新增 datehour、timesecond、datetimesecond 三种模式,覆盖年月日时与秒级场景\n- 增加 minSecond/maxSecond 配置,并同步列生成、边界计算、回显与变更事件处理\n- 更新 TypeScript 类型定义,确保新模式和秒级属性在项目中可被正确约束 + +## 3.8.46(2026-06-02) +fix: 修复DatetimePicker在pageInline模式下无法滚动到默认值问题 #941 + +pageInline模式下picker-view原生组件常驻显示,Android/HarmonyOS端 +原生组件尚未完成初始化时已渲染为索引0位置,后续更新无法可靠触发滚动。 + +- updateColumnValue改用$nextTick+条件延时:pageInline时等待100ms +- mounted新增pageInline兜底:200ms后再次设置索引确保原生组件就绪 + +## 3.8.45(2026-06-01) +fix: 修复NumberBox最小值限制导致无法输入新值问题 #914 + +## 3.8.44(2026-05-31) +fix: 修复up-tooltip未暴露open/close方法及manual模式失效问题 #1021 + +- 新增 show prop,支持 triggerMode="manual" 时通过 :show 控制显示 +- 新增 open() / close() 方法并对外暴露 +- 监听 show prop 变化,manual 模式下自动调用 open/close +- 新增 open / close emit 事件,u-popover 的 @open @close 监听可正常工作 +- 统一内部显示/隐藏逻辑均走 open()/close() 方法 + +## 3.8.43(2026-05-30) +fix: 修复小程序中 tabbar midButton 模式图标不显示问题 + +- 使用 :deep() 选择器替代普通后代选择器,解决 virtualHost:true 导致 +- 父组件 scoped 样式无法传播到子组件根元素的问题。 + +## 3.8.42(2026-05-29) +feat: 新增单行日历组件并支持下拉展开完整月历及修复签名组件 clear 方法实现 + +-新增 up-calendar-strip 组件,支持单行横向滚动日期、前后切月、选中态与今天高亮,并受 minDate/maxDate 约束。 +-完整模式复用内嵌 up-calendar(pageInline + monthSwitch),支持下拉展开、上拉收起与完整月历选中回写,降低重复代码与维护复杂度。 +-同步接入全局默认 props 与 TypeScript 类型声明,并在 calendar 示例页增加可直接验证的演示入口。 +- 修复 Signature 组件对外 clear 方法缺失导致 ref 调用报错的问题。 +- 在 u-signature 中新增 clear 公共方法,统一重置路径与绘制状态并清空画布,同时触发 clear 事件,保持工具栏清空与外部调用行为一致。 + +## 3.8.41(2026-05-29) +feat: tabs新增多形态模式并优化示例页吸顶展示 + +- 新增shapeMode能力,支持capsule/card/pill-arrow/tag四种模式,并补齐props默认配置与类型声明。 +- 完善各模式样式细节与尺寸,优化圆角矩形箭头视觉表现,卡片模式使用轻量阴影增强层次。 + +## 3.8.40(2026-05-28) +feat: 新增 up-guide 首屏全屏引导组件,支持开箱即用的一次性引导能力。 + +## 3.8.39(2026-05-27) +feat: 新增 tabbar 风格体系与动态图标表现 + +- 为 tabbar 增加多种内置风格、轻量选中动画与双态图标支持。 +- 扩展示例页覆盖普通场景、NVUE 场景及中间按钮组合用法。 + +## 3.8.38(2026-05-25) +add: uni-ku/root上游组建的协议原文 + +## 3.8.37(2026-05-22) +feat: 日历组件新增今天按钮并支持快速回到当月 + +在日历头部增加今天按钮与禁用态,点击后可跳转到今天所在月份;为今天日期增加独立高亮样式且不覆盖用户当前已选日期。同时补充 showToday 配置、类型声明与多语言文案键,保证不同语言和模式下行为一致。 + +## 3.8.36(2026-05-20) +fix: 修复 u-parse 链接点击在 iOS 端可能闪退的问题 + +- 在 u-parse 的两个链接点击入口统一增加 href 规范化与外链判断,避免空值或非法值传入 plus.runtime.openWeb/openURL。 +- 同时将原生外链打开封装为受保护调用并添加异常兜底,降低 APP-PLUS 与 APP-HARMONY 下点击链接导致崩溃的风险。 + +## 3.8.35(2026-05-19) +fix: 修复up-input在confirm阶段可能丢失扫码内容 + +- 问题背景:issue #1011 反馈外接扫码枪场景下,up-input 的 confirm 回调偶发丢码,连续0更明显。 +- 原因分析:组件 onConfirm 直接返回 innerValue,当扫码输入与回车触发节奏接近时,confirm 可能早于最后一次 input 同步,导致取到旧值。 +- 改动说明:onConfirm 优先使用 event.detail.value,若平台未提供该字段再回退到 innerValue,兼容原有行为并降低扫码场景丢码风险。 +## 3.8.34(2026-05-18) +fix: 仅在 TabBar 页面同步 TabBar 样式 + +- 在 libs/theme/runtime.js 新增 isTabBarPage 与 trySetTabBarStyle,统一封装 TabBar 页面判断与安全调用。 +- 在 runtime/theme/common mixin 的原生主题同步路径中,全部改为调用 trySetTabBarStyle,不再直接调用 uni.setTabBarStyle。 + +## 3.8.33(2026-05-17) +fix: 修复主题变量桥接与 nvue 按钮取色问题 + +- 调整主题 bridge 的导出位置,避免 legacy light 变量在样式注入后覆盖用户自定义 CSS 变量。 +- 修复 up-button 在 nvue 下的主题取色与 info/plain 样式问题,补充运行时取色兜底,避免按钮颜色错误或主题方法缺失时报错。 +- 同步更新示例接入、版本号与变更记录,保持主题改造后的行为与文档一致。 + +## 3.8.32(2026-05-14) +feat: 新增二维码静区配置 + +- 为 up-qrcode 增加 quietZone 属性,默认值调整为 0。 +- 同步更新二维码绘制逻辑与类型声明,支持按静区宽度控制外层留白。 + +## 3.8.31(2026-05-14) +fix: 修复toast组件overlay设置为false时不显示toast的问题 (#1016) + + +## 3.8.30(2026-05-14) +fix(tooltip): 修复tooltip组件字体大小(size)属性未生效的问题 + +## 3.8.29(2026-05-13) +style: 将 Toast 组件硬编码颜色替换为主题变量 + +- 替换 primary、success、error、warning 类型的背景与边框硬编码颜色 +- 统一接入 $u-{type}-light 与 $u-{type}-disabled 主题变量 +- 增强组件在不同主题下的样式一致性与可维护性 + +## 3.8.28(2026-05-12) +style: 优化 up-textarea 组件主题变量与边框样式 + +- 字数统计区域新增文本颜色主题变量支持 +- 输入框区域重构样式计算,补充背景色、文本色与光标色主题变量 +- 移除原有边框 CSS 类名依赖,改为通过计算属性动态注入边框样式 +- 新增边框颜色计算逻辑,根据亮暗色模式自动适配主题色 +- 修复 H5 端 uni-app 默认包装器样式冲突,统一背景、边框与占位符颜色 + +## 3.8.27(2026-05-11) +feat: 新增 nativeThemeSync 配置控制原生UI主题同步 + +- 在 config 中新增 nativeThemeSync 选项,默认值为 false +- 在 theme.js 与 runtime.js 的 applyNativeThemeUI 中增加配置拦截,未开启时跳过原生导航栏、页面背景及 tabBar 的样式同步 +- 补充 TypeScript 类型定义,明确默认关闭以避免升级覆盖项目已有的 pages.json 或 theme.json 全局样式 +- 更新验证脚本,增加对该配置开关行为的断言测试 +## 3.8.26(2026-05-11) +fix: 修复海报组件多行文本截断与省略号渲染问题 + +- 提取省略号宽度计算与截断逻辑为独立辅助函数,提升代码可维护性 +- 修正达到最大行数时的截断流程,确保末行正确计算宽度并添加省略号 +- 调整换行后当前行字符的赋值时机,避免首字符丢失或渲染状态错乱 +- 补充文件末尾缺失的换行符以符合代码规范 + +## 3.8.25(2026-05-10) +fix: 修复H5安装时写入页面背景 + +- 移除主题初始化时对html、body和#app背景色的内联写入,避免use(uviewPlus)覆盖业务页面背景。 +- 补充运行时主题回归断言,确保H5仍同步data-up-theme但不再改写宿主页面背景样式。 + +## 3.8.24(2026-05-09) +fix: 合并 up-slider 组件重复的 mounted 生命周期钩子 + +- 将原本分散的两个 mounted 钩子合并为单个 async mounted +- 确保高度/尺寸赋值与滑块 DOM 尺寸获取逻辑在同一钩子内顺序执行 +- 移除底部重复的生命周期代码块,修复因 Vue 钩子执行顺序不确定导致的 init 初始化异常 + +## 3.8.23(2026-05-09) +style: 弹窗组件支持主题变量动态设置指示器与关闭图标颜色 + +- 将底部横条指示器背景色替换为 --up-light-color 主题变量 +- 将关闭图标颜色替换为 --up-content-color 主题变量 +- 新增 indicatorStyle 与 closeIconColor 计算属性实现动态绑定 +- 同步更新 CSS 与内联样式,移除硬编码颜色值以提升多主题适配能力 + +## 3.8.22(2026-05-08) +style: 优化 up-input 组件边框样式与主题变量适配 + +- 移除原有的 u-border 和 u-border-bottom 工具类,改为通过内联样式动态控制边框 +- 新增 inputBorderColor 计算属性,支持通过 --up-input-border-color 主题变量自定义边框颜色 +- 适配深色模式,默认边框颜色根据主题状态自动切换为半透明白色或浅色边框 +- 统一将边框宽度设置为 0.5px,提升多端显示的一致性 + +## 3.8.21(2026-05-07) +fix: 修正索引锚点默认背景色识别逻辑 + +- 扩展默认背景色判断条件,兼容 #f1f1f1 与 #dedede +- 更新主题变量回退默认值为 #f1f1f1 以匹配新版设计 + +## 3.8.20(2026-05-06) +feat: 表单标签颜色支持主题变量动态适配 + +- 新增 labelDynamicStyle 计算属性,动态读取 --up-main-color 主题变量 +- 将动态样式注入标签元素,实现表单标签颜色随主题配置自动切换 + +## 3.8.19(2026-04-30) +feat: 为日期时间选择器遮罩层添加暗色模式自适应样式 + +- 新增 resolvedMaskStyle 计算属性,优先返回外部传入的 maskStyle +- 未传入自定义样式且处于暗色主题时,自动注入渐变背景以适配深色模式 +- 替换模板中的遮罩样式绑定,避免硬编码并提升主题切换兼容性 + +## 3.8.18(2026-04-29) +fix: 规避 H5 主题切换时的导航栏 page not found 报错 + +为主题系统中的 setNavigationBarColor 调用增加活动页面判断,并对调用失败做静默兜底,避免 H5 启动或路由切换早期抛出 page not found。背景色与 tabBar 同步逻辑保持不变。 +## 3.8.17(2026-04-29) +refactor: 将 Cell 组件颜色引用替换为主题变量 + +- up-cell-group 标题文本颜色改用 upThemeVar 动态获取 +- up-cell 禁用态、标题、描述及值颜色统一替换为主题变量 +- 点击态背景色 SCSS 变量改为依赖 CSS 变量 --up-hover-bg-color +- 移除对 $u.color 的直接依赖,提升主题切换兼容性 + +## 3.8.16(2026-04-28) +style: 统一下拉刷新组件与示例页的文本及图标颜色 + +- 为示例页列表项、提示文本及表情图标补充对应样式类名 +- 组件下拉与释放状态的箭头图标显式指定内容色 CSS 变量 +- 将组件提示文本颜色由内容色变量调整为主色变量以统一视觉 + +## 3.8.15(2026-04-28) +style: 统一协议组件文本颜色为主题变量 + +- 为协议页面标题、自定义内容及正文应用主色变量 +- 将协议内联链接颜色替换为主题主色变量 +- 为 up-agreement 组件容器设置默认文本主色 + +## 3.8.14(2026-04-27) +refactor: up-action-sheet 组件样式适配主题变量 + +- 模板中硬编码颜色替换为动态计算属性,统一通过 upThemeVar 获取主题色 +- 新增标题、描述、关闭图标、分割线及取消按钮区域的颜色动态样式绑定 +- 修复 SCSS 变量 description-color 误赋值为字号的缺陷 +- 样式层全面迁移至 CSS 变量,确保组件在暗黑模式与自定义主题下正确渲染 + +## 3.8.13(2026-04-26) +feat: 重构 up-tree 组件并新增手风琴、高亮及复选框控制 + +- 移除独立子组件,采用扁平化 visibleNodes 计算属性重构渲染逻辑 +- 新增手风琴模式、当前节点高亮及自定义缩进/展开图标配置 +- 完善复选框联动机制,支持半选状态、父子级联与严格模式切换 +- 暴露 setCheckedKeys、getCheckedKeys 等实例方法支持编程式控制 +- 补充 node-expand、current-change 等事件以增强交互反馈 +- 同步更新示例页,覆盖基础展示、自定义插槽、复选框及手风琴场景 + +## 3.8.12(2026-04-24) +style: 添加骨架屏演示区块标题样式 + +## 3.8.11(2026-04-24) +refactor: 新增日历组件单月模式演示并重构示例页主题逻辑 + +- 统一示例页主题适配逻辑,移除旧版事件监听,改用 upThemeIsDark 与 upThemeVar 动态计算样式 +- 组件列表页增加 page-meta 导航栏配置,实现状态栏与导航栏颜色随主题自动切换 +- 日历组件示例新增单月切换模式,覆盖单选、日期区间及多选三种场景 +- 加载页示例补充 color 属性配置,完善自定义加载动画演示 +- 个人中心页增加 applyNativeThemeUI 方法存在性校验,提升原生主题调用安全性 + +## 3.8.10(2026-04-24) +refactor: 重构主题系统并扩展深浅色模式变量 + +- 统一主题状态管理,引入版本号机制与运行时同步函数,优化组件主题切换响应 +- 扩展 CSS 变量体系,新增 hover、表格、骨架屏等组件专属背景色及主色深浅变体 +- 优化 NVUE 平台兼容性,分离样式导入逻辑并动态计算页面最小高度 +- 重构全局 Mixin 与页面导航组件,抽离主题计算逻辑至独立运行时模块 +- 完善原生 UI 主题适配,支持 TabBar 与导航栏随深浅色模式自动切换 + +## 3.8.9(2026-04-23) +feat: 新增 nvue 运行时主题支持与全局主题 API + +- 新增 runtime.js 模块,提供主题变量动态解析、本地存储同步及原生 UI 样式应用逻辑 +- 重构 Vite 插件转换逻辑,为 nvue 页面自动注入主题根组件及响应式 Mixin/Composables +- 在 Vue 全局属性中注册 upThemeIsDark、upThemeVar 等辅助方法,简化组件内主题调用 +- 优化主题构建逻辑,新增导航栏背景色变量支持及 TabBar 样式动态适配 +- 新增 nvue-root.vue 根组件,统一处理 nvue 页面主题刷新与系统主题变更事件监听 + +## 3.8.8(2026-04-23) +fix: 修复nvue下白屏报错URL is not defined和 Cannot set property 'getRect' of undefined + +## 3.8.7(2026-04-22) +feat: 日历组件新增单月切换模式并适配主题变量 + +- 新增 monthSwitch 属性,支持非滚动的单月切换展示模式 +- 头部新增上/下一月及上/下一年切换按钮,并实现越界禁用逻辑 +- 重构组件样式,将硬编码颜色替换为 CSS 变量以完善主题适配 +- 优化单月模式下的月份索引计算与容器高度动态调整逻辑 +- 调整日期范围选中背景色透明度,提升暗黑模式下的视觉对比度 + +## 3.8.6(2026-04-22) +fix: 修复商品SKU未完全选择时仍可购买的问题 + +- 修改 canBuy 计算属性中已选SKU数量的统计逻辑 +- 过滤值为空字符串的SKU选项,仅统计实际已选择的规格 +- 避免初始化空值导致购买按钮状态判断错误 + +## 3.8.5(2026-04-21) +fix: 修复 up-choose 组件 modelValue 更新不同步问题 + +- 移除 created 生命周期中的初始赋值逻辑 +- 新增 watch 监听 modelValue 并设置 immediate: true +- 确保外部传入的 modelValue 变化时能实时同步至 currentIndex +- 补充文件末尾换行符以符合规范 + +## 3.8.4(2026-04-20) +fix(u-rate): 增强数值校验与边界处理,修复计算异常 + +- 新增 normalizeActiveIndex 等辅助方法,统一处理评分值的类型转换与 minCount/count 边界限制 +- 对 DOM 节点获取的 left 和 width 增加 Number.isFinite 校验,避免 NaN 导致布局计算崩溃 +- 优化 emitEvent 逻辑,在触发 change 及双向绑定更新前进行值归一化,防止无效值传播 +- 在触摸与点击事件处理前调用 ensureRateMetrics,确保尺寸数据有效后再执行坐标计算 +- 移除直接读取 prop 的硬编码逻辑,提升组件在异常传参或异步渲染场景下的稳定性 + +## 3.8.3(2026-04-19) +fix: 修复日期时间选择器快速滚动越界与空值异常 + +- 新增 safeColumnValue 与 toInt 辅助方法,安全读取滚动列数据并统一类型转换 +- 优化 change 事件处理逻辑,使用 range 严格限制年月日时分在合法区间内,防止越界 +- 增强 intercept 方法容错性,处理 undefined/null 输入并转为字符串匹配,避免正则报错 +- 补充列数据生成兜底逻辑,快速滚动导致日列范围异常时自动回退至当月天数或默认 31 天 +- 完善 show 监听与 close 方法,在含输入框模式下关闭选择器时同步重置 showByClickInput 状态 + +## 3.8.2(2026-04-17) +fix: 修复级联选择器仅回显未改动时确认返回空数组的问题 + +- 提取 getSelectedValues 方法统一处理选中值获取逻辑,消除重复代码 +- 初始化时若 modelValue 为空则显式清空 confirmValues,避免状态残留 +- 数据回显后同步更新 confirmValues,确保未手动修改直接确认时能正确返回默认值 +- 优化 handleConfirm 逻辑,优先使用已同步的确认值,提升事件触发准确性 + +## 3.8.1(2026-04-16) +feat(select): 增强下拉框样式能力并补充 100% 宽度示例 + +- 新增 up-select 的边框样式能力与下拉面板宽度配置,便于构建接近 PC Select 的交互样式。 +- 新增 border 属性:支持为触发区显示边框、圆角和内边距(默认关闭,保持兼容) +- 新增 optionsWidth 属性:支持 String/Number,允许 px/rpx/% 等宽度控制 +- 优化下拉面板定位逻辑,保留溢出时左右对齐修正行为 +- 更新 select 示例页:新增“边框与下拉宽度”示例,并改为 100% 宽度展示 + +## 3.8.0(2026-04-16) +feat: 新增暗黑模式支持完成全链路适配与主题能力统一 + +【架构设计】 +1. 建立主题变量分层:新增核心令牌层 theme-vars-core(统一定义亮/暗主题语义变量),并通过 theme-vars 进行聚合输出。 +2. 建立组件主题扩展层:为 navbar/notice-bar/subsection/switch/tag 等组件新增独立 theme-vars 文件,按组件边界管理主题差异,降低跨组件耦合。 +3. 建立运行时主题层:新增 libs/theme/theme.js,结合全局 mixin 与入口注入实现主题状态读取、切换与分发,形成“变量定义 -> 运行时注入 -> 组件消费”的闭环。 + +【关键改动范围】 +1. 基础设施:App.up.vue、common/mixin.js、pages.json、manifest.json、theme.json 及全局样式入口同步调整。 +2. 组件库:大规模修复表单、导航、反馈、布局、展示类组件在暗黑模式下的背景、文字、边框、占位符、选中态对比度问题。 +3. 示例页与模板页:对示例与业务模板页进行暗黑联调,减少页面级重复 pageStyle 覆盖,统一回归到主题变量驱动。 + +【兼容性与收益】 +1. 保持组件 API 行为不变,主要为样式与主题渲染层升级。 +2. 统一暗黑适配策略,减少页面散落样式补丁,后续新增组件可按统一主题规范快速接入。 +3. 提升微信小程序/H5 场景下暗色模式的一致性与可维护性。 + +## 3.7.38(2026-04-16) +feat(root): 支持全局Toast/Notify注入与调用及新增 root 模块构建缓存兼容垫片 + +- Root 注入宿主统一承载 up-toast 与 up-notify,并注册 upGlobalToastRef/upGlobalNotifyRef +- 新增 uni..rootNotify / setRootNotifyRef,并完善 rootToast 全局调用链路 +- Root 模板注入改为 -root-toast-host,避免 easycom 干扰 +- 补充 TypeScript 声明与 App.up.vue 全局调用示例 +- 提供透传函数 createGlobalUpRoot 以兼容旧版缓存引用 +- 防止增量构建缓存残留导致模块加载异常 +- 明确新架构已不再依赖该文件,仅作为过渡期保留 + +## 3.7.37(2026-04-16) +feat:新增全局root-view组件接入全局根容器注入并完善页面匹配 + + - 新增 App.up 根容器与 libs/root 插件链路,自动注册 global-up-root 并包裹页面模板。 + - 支持 pages.json 页面按真实文件扩展名匹配(.vue/.nvue/.uvue),避免 nvue 页面漏注入。 + - 修复模板起始偏移为 0 时的注入边界判断,确保首行 template 也能正确注入。 + - 在 vite.config.ts 接入 UniUpRoot 插件默认配置。 + +## 3.7.36(2026-04-15) +fix: stepsItem.d.ts ts插槽name更新 #940 + +## 3.7.35(2026-04-14) +fix: timeFormat方法支持多种ISO格式 + +## 3.7.34(2026-04-14) +fix: up-waterfall组件告警void app logic that relies on enumerating keys on a component instance #993 + +## 3.7.33(2026-04-14) +fix: up-waterfall组件告警void app logic that relies on enumerating keys on a component instance #993 + +## 3.7.32(2026-04-12) +fix: up-picker添加默认背景色 防止其他使用该组件的没有配置背景色导致奇怪的样式 + +## 3.7.31(2026-04-10) +fix: up-cascader垂直头部点击节点切换 + + +## 3.7.30(2026-03-31) +fix: pagination分页组件小程序上展示问题 + +## 3.7.29(2026-03-23) +fix: 修复 popup 弹出层背景色修改后,在小程序端默认背景色还存在 + +## 3.7.28(2026-03-21) +feat: 添加 up-switch 组件的圆点颜色属性 + +## 3.7.27(2026-03-12) +improvment: 优化up-form的错误提示message字段类型 + +## 3.7.26(2026-03-09) +add: up-select增加禁用功能 + +## 3.7.25(2026-03-07) +fix: 优化up-coupon规范化scss + +## 3.7.24(2026-03-06) +fix: 修复up-table2 组件在小程序不显示单元格内容的问题 + +## 3.7.23(2026-03-06) +fix: up-cascader在开启auto-close时最后层级选择后未触发confirm + +## 3.7.22(2026-03-05) +improvment: floatButton组件示例改为组合式API + +## 3.7.21(2026-03-05) +feat: 新增禁用 iOS Safari 下拉刷新工具类、移除 H5 端图标复制限制、优化 u-copy 组件注释 + +## 3.7.20(2026-02-26) +improvement:box组件示例改为组合式API + +## 3.7.19(2026-02-25) +improvement:agreement组件示例改为组合式API + +## 3.7.18(2026-02-24) +improvement:barcode组件示例改为组合式API + +## 3.7.17(2026-02-11) +fix: 修复steps组件current失效 + +## 3.7.16(2026-02-09) +improvment: choose组件示例改为组合式API + +## 3.7.14(2026-02-08) +refactor: up-signature组件改用up-canvas组件 + +## 3.7.13(2026-02-07) +add: 新增up-canvas组件 + +## 3.7.12(2026-02-07) +improvment: 优化签名组件兼容性修复微信小程序支持 + +## 3.7.11(2026-02-06) +add: action-sheet组件新增nameKey和subnameKey属性 + +## 3.7.10(2026-02-06) +add: checkbox-group组件的change事件增加第二个返回参数为当前触发变化的checkbox组件name信息等 + +## 3.7.9(2026-02-06) +fix: 修复align-self属性值缺少d导致样式不生效的问题 + +## 3.7.8(2026-02-05) +improvment: 优化card组件示例 + +## 3.7.7(2026-02-05) +add: select组件新增closeSelect方法用于自定义控制关闭 + + +## 3.7.6(2026-02-04) +add: picker组件示例onLoad后加载数据 + +## 3.7.5(2026-02-03) +add: up-slider组件新增垂直模式 + +## 3.7.4(2026-02-03) +add: box组件props优化及新增leftIcon/leftTitle/rightTopIcon/rightTopTitle/rightBottomIcon/rightBottomTitle参数 + +## 3.7.3(2026-02-03) +improvment: city-locate组件示例改为组合式API + +## 3.7.2(2026-02-02) +improvment: color-picker组件示例改为组合式API + +## 3.7.1(2026-02-02) +fix:修复qrcode缺失的preview定义emit + +## 3.7.0(2026-02-01) +fix: 修复up-qrcode二维码在微信小程序报错 + +## 3.6.134(2026-01-30) +chore: dragsort可通过参数控制是否可震动 + +## 3.6.132(2026-01-30) +feat: dragsort支持自定义拖动句柄 + +## 3.6.131(2026-01-29) +fix: 优化dragdort组件 + +## 3.6.130(2026-01-28) +improvment: cropper组件示例改为组合式API + +## 3.6.129(2026-01-28) +improvment: drag组件示例改为组合式API + +## 3.6.128(2026-01-27) +improvment: tooltip组件示例改为组合式API + +## 3.6.127(2026-01-27) +improvment: textarea组件示例改为组合式API + +## 3.6.126(2026-01-27) +improvment: text组件示例改为组合式API + +## 3.6.125(2026-01-27) +fix: 修复Cascader级联选择器设置默认值显示问题 + +修复在传入默认值时多列只会显示第一列bug + +## 3.6.124(2026-01-27) +improvment: tabs组件示例改为组合式API + +## 3.6.123(2026-01-27) +improvment: swiper组件示例改为组合式API + +## 3.6.122(2026-01-26) +fix: 🐛 修复u-input在change事件里无法获取value的异常情况 #950 + +## 3.6.120(2026-01-26) +improvment: 增加Cascader级联选择器的取消事件 + +## 3.6.119(2026-01-26) +improvment: skeleton组件示例改为组合式API + +## 3.6.118(2026-01-26) +improvment: steps组件示例改为组合式API + +## 3.6.117(2026-01-24) +improvment: subsection组就示例改为组合式API + +## 3.6.116(2026-01-24) +improvment: 优化Cascader级联选择器右上角关闭图标的显示控制 + +如果在级联文本过长或者类目过多时关闭图标会与类目文字重合,现在增加控制关闭图标的控制可以控制是否需要显示关闭图标,底部有取消按钮,关闭图标不是必须的 + +## 3.6.115(2026-01-23) +improvment: scroll-list组就示例改为组合式API + +## 3.6.114(2026-01-23) +improvment: readmore组就示例改为组合式API + +## 3.6.113(2026-01-23) +improvment: popover组就示例改为组合式API + +## 3.6.112(2026-01-23) +improvment: picker组件示例改为组合式API + +## 3.6.111(2026-01-23) +improvment: no-network组件示例改为组合式API + +## 3.6.110(2026-01-22) +improvment: navbar组件示例改为组合式API + +## 3.6.109(2026-01-22) +improvment: modal组件示例改为组合式API + +## 3.6.108(2026-01-22) +improvment: loadmore组件示例改为组合式API + +## 3.6.107(2026-01-21) +improvment: list组件示例改为组合式API + +## 3.6.106(2026-01-21) +improvment: index-list2组件示例改为组合式API + +## 3.6.105(2026-01-21) +improvment: index-list组件示例改为组合式API + +## 3.6.104(2026-01-21) +improvment: layout组件示例改为组合式API + +## 3.6.103(2026-01-21) +improvment: input组件示例改为组合式API + +## 3.6.102(2026-01-20) +fix: 修复cascader缺少emits申明 + +## 3.6.101(2026-01-20) +improvment: form组件示例改为组合式API + +## 3.6.100(2026-01-20) +improvment: datetimepicker组件示例改为组合式API + +## 3.6.99(2026-01-20) +fix: 修复cate-tab组件设置默认current不生效 + +## 3.6.98(2026-01-20) +improvment: code-input组件示例改为组合式API + +## 3.6.97(2026-01-20) +improvment: calendar组件示例改为组合式API + +## 3.6.96(2026-01-20) +improvment: avatar组件示例改为组合式API + +## 3.6.95(2026-01-20) +improvment: album组件示例改为组合式API + +## 3.6.94(2026-01-19) +improvment: waterfall组件示例改为组合式API + +## 3.6.93(2026-01-19) +improvment: upload组件示例改为组合式API + +## 3.6.92(2026-01-17) +improvment: toast组件示例改为组合式API + +## 3.6.91(2026-01-16) +improvment: tag组件示例改为组合式API + +## 3.6.90(2026-01-16) +improvment: table2组件示例改为组合式API + +## 3.6.89(2026-01-16) +add: 增加鸿蒙Next已上架二维码 + +## 3.6.88(2026-01-16) +improvment: table组件示例改为组合式API + +## 3.6.87(2026-01-15) +tabbar2组件示例改为组合式API +## 3.6.86(2026-01-15) +improvment: tabbar组件示例改为组合式API +## 3.6.85(2026-01-15) +improvment: switch组件示例改为组合式API + +## 3.6.84(2026-01-15) +improvment: slider组件示例改为组合式API + +## 3.6.83(2026-01-15) +improvment: search组件示例改为组合式API + +## 3.6.82(2026-01-15) +improvment: progress组件示例改为组合式API + +## 3.6.81(2026-01-15) +improvment: parse组件示例改为组合式API + + +## 3.6.80(2026-01-15) +improvment: number-box组件示例改为组合式API + +## 3.6.78(2026-01-15) +improvment: notify组件示例改为组合式API + +## 3.6.77(2026-01-15) +improvment: notice-bar组件示例改为组合式API + +## 3.6.76(2026-01-15) + improvment: keyborad组件示例改为组合式API + +## 3.6.75(2026-01-15) +improvment: dropdown组件示例改为组合式API + +## 3.6.74(2026-01-15) +fix: 修复parse组件props缺少) + +## 3.6.73(2026-01-15) +improvment: count-to组件示例改为组合式API + +## 3.6.72(2026-01-15) +improvment: count-down组件示例改为组合式API + +## 3.6.71(2026-01-14) +improvment: collapse组件示例改为组合式API + +## 3.6.70(2026-01-14) +improvment: code组件示例改为组合式API + +## 3.6.69(2026-01-14) +improvment: card组件示例改为组合式API + +## 3.6.68(2026-01-13) +fix: 修复list组件在支付宝小程序下scrolltolower无法触发 #422 +## 3.6.67(2026-01-13) +fix: 删除经典下拉框的打印 + +## 3.6.66(2026-01-12) +fix: 修正 RadioSlots 类型定义 + +## 3.6.65(2026-01-12) +fix: 修复u-picker在hasInput下回显异常和vue报错 + +## 3.6.64(2026-01-12) +fix: 解决cropper在ios小程序中底部操作栏被遮挡的问题 + +## 3.6.63(2026-01-10) +improvment: badge组建示例改为组合式API + +## 3.6.62(2026-01-10) +improvment: alert组件示例改为组合式API + +## 3.6.61(2026-01-09) +improvment: action-sheet组件示例改为组合式API + +## 3.6.60(2026-01-09) +improvment: transition组件示例改为组合式API + +## 3.6.59(2026-01-09) +improvment: swipe-action组件示例改为组合式API + +## 3.6.58(2026-01-09) +improvment: sticky组件示例改为组合式API + +## 3.6.57(2026-01-08) +improvment: 优化完善no-nerwork组件细节 + +## 3.6.56(2026-01-08) +fix: 修复signature的t方法 + +## 3.6.55(2026-01-08) +perf:补充多处TS声明提示信息 #953 + +## 3.6.54(2026-01-08) +fix: 修复slider示例页面变量重复 +## 3.6.53(2026-01-08) +fix: 修复qrcode组件鸿蒙兼容 + +## 3.6.52(2026-01-08) +fix: nvue下采用webview支持二维码显示logo(因为gcanvas不支持图片渲染) + +## 3.6.51(2026-01-08) +fix: 修复qrcode组件在App不显示logo + +improvment: qrcode逻辑优化封装 + +## 3.6.50(2026-01-06) +improvment: rate组件示例改为组合式API + +## 3.6.49(2026-01-06) +improvment: radio组件示例改为组合式API + +## 3.6.48(2026-01-06) +improvment: popup组件示例改为组合式API + +## 3.6.47(2026-01-06) +improvment: overlay示例改为组合式API + +## 3.6.46(2026-01-05) +improvment: loading-page组建示例改为组合式API + +## 3.6.45(2026-01-05) +improvment: loading-icon组件示例改为组合式API + +## 3.6.44(2026-01-05) +improvment: link组件示例改为组合式API + +## 3.6.43(2026-01-05) +improvment: line组件示例改为组合式API + +## 3.6.42(2026-01-04) +improvment: layzload组件示例改为组合式API + +## 3.6.41(2026-01-04) +fix: 修复select组件缺少mixin + +## 3.6.40(2026-01-04) +improvment: 去除ReadmeQQ群链接 + +## 3.6.39(2026-01-04) +improvment: image组件示例改为组合式API + +## 3.6.38(2026-01-03) +improvment: icon示例改为组合式API + +## 3.6.37(2025-12-31) +improvment: 静态资源修复 + +## 3.6.36(2025-12-30) +improvment: grid示例改为组合式API + +## 3.6.35(2025-12-25) +fix: 修复grid布局由于内容溢出导致形变 + +## 3.6.34(2025-12-24) +fix: modal组件asyncCloseTip多语言key未对应 + +## 3.6.33(2025-12-23) +fix: 提升$parent方法兼容性修复表单验证失效 + +## 3.6.32(2025-12-21) +improvment: 优化slider、search、steps等组件细节 + +## 3.6.31(2025-12-19) +improvment: 优化search组件等 + +## 3.6.30(2025-12-19) +improvment: 优化完善部分文件注释 + +## 3.6.29(2025-12-18) +fix: 修复语法错 +## 3.6.28(2025-12-18) +fix: 优化$parent方法兼容性 + +## 3.6.27(2025-12-17) +add: datetimepicker增加maskClass和maskStyle属性 + +## 3.6.26(2025-12-16) +add: picker增加maskClass/maskStyle属性 + +## 3.6.25(2025-12-15) +fix: 修复cascader对列表数据层级差异的兼容问题 + +## 3.6.24(2025-12-14) +fix: 修复将empty组件的mode设置为wifi后图标不能显示的问题 #928 + +## 3.6.23(2025-12-13) +fix: 修复cascader已选中三级菜单后再选择二级菜单时tabs报错问题 + +## 3.6.22(2025-12-12) +fix: dragsort组件拖动抖动的问题 + +## 3.6.21(2025-12-09) + fix: form-item初始化时机优化 + +## 3.6.20(2025-12-08) +improvment: 优化form组件语法普适性 + +## 3.6.19(2025-12-01) +fix: 修复商品SKU组件i18n + +fix: Choose组件会有width警告提示 #915 + +## 3.6.18(2025-11-30) +feature: upload组件file模式支持微信小程序chooseMessageFile的extension属性 #913 + +## 3.6.17(2025-11-18) +add: picker-data支持表单验证 + +## 3.6.16(2025-11-18) +improvment: 优化下拉菜单示例 + +## 3.6.15(2025-11-10) +fix: 修复tabs添加activeStyle切换后滑块无法居中 + +## 3.6.14(2025-11-07) +fix: 修复引用拼写 + +## 3.6.13(2025-11-06) +improvment: 组合式API升级之gap示例改造 + +## 3.6.12(2025-11-05) +improvment: empty示例改为组合式API + +## 3.6.11(2025-11-05) +improvment: divider示例改为组合式API + +## 3.6.10(2025-11-04) +improvment: checkbox示例改为组合式API + +## 3.6.9(2025-10-21) +improvment: cell示例改为组合式API + +## 3.6.8(2025-10-20) +imporvment: button示例改为组合式API + +## 3.6.7(2025-10-17) +fix: 优化picker当前列判断 + +## 3.6.6(2025-10-13) +fix: 修复getWindowInfo微信小程序下报警告 + +## 3.6.5(2025-10-11) +🐛fix: 修复picker双向绑定 #753 + +## 3.6.4(2025-10-09) +🐛fix: import rpx2px function and add to exports in index.js + +## 3.6.3(2025-10-09) +fix: 修复getWindowInfo微信小程序下报警告 + +## 3.6.2(2025-10-05) +fix: 修复picker双向绑定 #753 + +## 3.6.1(2025-10-01) +fix: 修复poster海报组件微信小程序图片绘制失败 + +## 3.6.0(2025-09-30) +fix: 修复parse事件报错及统一事件名称小写 + +## 3.5.57(2025-09-30) +improvment: 更换部分资源域名提升访问速度 + +## 3.5.56(2025-09-29) +fix: 修复picker和datetime-picker在部分原生渲染时hasInput触发键盘弹起 + +## 3.5.55(2025-09-29) +feat: waterfall新增after-add-one和after-add-all事件 + +## 3.5.54(2025-09-25) +🐞 fix: 解决索引列表初始化时获取不到高度导致的字母列表异常 + +## 3.5.53(2025-09-19) +improvment: back-top示例组合式API改造 + +## 3.5.52(2025-09-19) +fix: 优化tabbar的borderColor优先级 + +## 3.5.51(2025-09-19) +fix: 微信小程序下u-transition包裹的内容因为没有默认flex column而出现布局错误 + +## 3.5.50(2025-09-18) +fix: 修复tabbar组件borderColor类型 + +## 3.5.49(2025-09-18) +fix: 修复action-sheet列表中第一个item的hover style + +## 3.5.48(2025-09-17) +fix: 修复table2的fixedHeader参数生效 + +## 3.5.47(2025-09-16) +fix: 修复modelValue类型 + +## 3.5.46(2025-09-15) +feat: table2新增支持span-method合并单元格 + +## 3.5.45(2025-09-13) +fix: 修复数据分配时未等待获取元素后再执行下一次循环导致数据插入错误,addTime属性未使用修改。 + +## 3.5.44(2025-09-12) +fix: 单选快捷组件作为受控组件,当modelValue清除选择时,组件状态未被清除。 + +## 3.5.43(2025-09-10) +fix: 增加subsection兼容性索引转为数字 + +## 3.5.42(2025-09-09) +feat: index-list增加下边距高度 + +## 3.5.41(2025-09-08) +fix: 修复cascader方法引用位置 + +## 3.5.40(2025-09-08) +feat: goods-sku组件支持多语言 + +## 3.5.39(2025-09-07) +fix: 修复cascader多语言问题 + +## 3.5.38(2025-09-07) +improvment: 完善演示图标 + +## 3.5.37(2025-09-05) +feat: cascader支持多语言 + +## 3.5.36(2025-09-04) +improvment: 补充图标 + +## 3.5.35(2025-09-04) +feat: cascader级联组件增加垂直头部与单列选项支持 + +## 3.5.34(2025-09-03) +improvement: 优化steps-item + +## 3.5.33(2025-09-02) +升级uni-app至最新版 +## 3.5.32(2025-09-01) +feat: cate-tab支持非联动跟随的单一切换模式 + +feat: choose组件示例使用cate-tab的单一切换模式 + + +## 3.5.31(2025-09-01) +feat: 新增choose通用选项选择器组件 + +## 3.5.30(2025-08-31) +fix: 修复缺失cascader级联选择器 + +## 3.5.29(2025-08-30) +feat: 新增cascader级联选择器 + +## 3.5.28(2025-08-29) +feat: 多语言增加泰语 + +## 3.5.27(2025-08-29) +feat: 新增基于tooltip的popover组件 + +## 3.5.26(2025-08-29) +improvment: 增强多语言兼容性 + +## 3.5.25(2025-08-28) +fix: 修复左侧与右侧弹出时页面打开闪现问题 + +## 3.5.24(2025-08-28) +feat: 优化tooltip弹窗定位 + +feat: tooltip组件新增forcePosition支持强制精确定位 + +## 3.5.23(2025-08-28) +improvment: 调整pdf阅读器默认高度 + +## 3.5.22(2025-08-28) +feat: 新增goods-sku商品SKU选购组件 + +## 3.5.21(2025-08-27) +fix: 修复popup组件手势控制参数注释 + +## 3.5.20(2025-08-27) +improvement: 提升checkbox条件编译兼容性 + +## 3.5.19(2025-08-27) +feat: popup新增iOS风格手势控制上下高度及下滑关闭 + +## 3.5.18(2025-08-26) +feat: 新增coupon优惠券组件 + +## 3.5.17(2025-08-26) +fix: 分支合并冲突修复 + +feat: picker-data组件新增cancel/close/confirm事件支持 + +## 3.5.16(2025-08-26) +feat: tabbar新增支持中间凸起按钮 + +## 3.5.15(2025-08-25) +feat: 之前的color-picker颜色选择器按计划上线 + +## 3.5.14(2025-08-25) +feat: 新增PDF阅读器组件 + +## 3.5.13(2025-08-24) +fix: 修复短视频示例https + +## 3.5.12(2025-08-23) +feat: short-video短视频组件增加视频播放示例 + +## 3.5.11(2025-08-23) +feat: 新增short-video短视频切换组件 + +feat: tabbar支持backgroundColor和borderColor属性 + +feat: slider支持innerStyle样式属性 + +## 3.5.10(2025-08-22) +feat: 新增poster海报生成组件 + + +## 3.5.9(2025-08-22) +feat: 优化qrcode组件支持toTempFilePath方法 + +## 3.5.8(2025-08-22) +fix: 优化rpx下calendar高度计算强制px + +## 3.5.7(2025-08-22) +feat: input和search新增onlyClearableOnFocused参数支持控制是否仅聚焦时显示清除按钮 + +## 3.5.6(2025-08-21) +feat: picker弹窗及datetime-picker组件支持页面内模式 + +## 3.5.5(2025-08-21) +feat: popup弹窗及canlendar组件支持页面内插入无弹窗模式 + +## 3.5.4(2025-08-21) +feat: popup弹窗及canlendar组件支持页面内插入无弹窗模式 + +## 3.5.3(2025-08-21) +fix: 修复下拉刷新多语言key + +## 3.5.2(2025-08-20) +fix: 修复非cli模式下引入的三方库报An error occurred while trying to read the map file错误 + +fix: 去除i18n多语言多余console + +## 3.5.1(2025-08-20) +feat: calendar组件月份标题自动适配多语言 + +## 3.5.0(2025-08-20) +feat: 组件库新增多语言支持且无侵入无依赖内置八种语言 + +## 3.4.107(2025-08-20) +feat: input组件支持密码显示切换 + +## 3.4.106(2025-08-20) +feat: tooltip组件支持左右方向弹窗 + +## 3.4.105(2025-08-19) +feat: 增加markdown解析器组件AI对话流式响应示例 + +## 3.4.104(2025-08-19) +feat: tooltip支持自定义触发器 + +feat: tooltip支持插槽自定义内容 + +feat: tooltip支持单击触发 + +feat: tooltip支持设置弹窗背景色 + +## 3.4.103(2025-08-19) +feat: 内置一份dayjs库 + +fix: 删除个别组件多余重复方法 + +fix: 修复marked库App打包时报错 + +## 3.4.102(2025-08-19) +fix: 小程序下cate-tab动态加载数据后尺寸获取及联动异常 + +## 3.4.101(2025-08-18) +improvment: 增加一些涉及触摸组件PC端需要仿真模式提示 + +## 3.4.100(2025-08-18) +feat: 新增markdown解析器组件 + +## 3.4.99(2025-08-18) +fix: 修复parse富文本组件可能导致无限循环的问题 + +## 3.4.98(2025-08-17) +feat: alert组件新增transitionMode/icon/duration/modelValue等参数 + +improvment: 完善alert组件注释 + +## 3.4.97(2025-08-16) +improvment: 完善album组件注释 + +## 3.4.96(2025-08-16) +improvment: 完善action-sheet注释 + +## 3.4.95(2025-08-16) +del: 去除不再需要的重复组件 + +## 3.4.94(2025-08-15) +improvment: 组件库内部icon前缀统一 + +## 3.4.93(2025-08-15) +fix: 修复dropdown组件在打开下拉菜单时content高度为NANpx的问题 + +## 3.4.92(2025-08-14) +fix: 修复多余空格导致cropper编译出错 #830 + +## 3.4.91(2025-08-14) +feat: 新增agreement弹窗协议组件 + +## 3.4.90(2025-08-13) +feat: datetimepicker新增datehour类型 + +## 3.4.89(2025-08-13) +fix: 修复u-form-item组件缺少对labelPosition的判断 + +## 3.4.88(2025-08-13) +fix: subsection组件的disabled属性应为Boolean类型 + +## 3.4.87(2025-08-12) +improvment: 签名组件示例前缀改为up + +## 3.4.86(2025-08-12) +feat: 新增signature签名签字组件 + +## 3.4.85(2025-08-11) +feat: 完善图片裁剪功能支持props及JS两种方式 + +fix: 修复H5下裁剪后图片黑屏 + +## 3.4.84(2025-08-11) +feat: 新增cropper图片裁剪组件 + +## 3.4.83(2025-08-11) +feat: 新增barcode无三方依赖条码组 + +## 3.4.82(2025-08-11) +improvment: 优化table2递归组件逻辑 + +feat: 支持树状列表复选框 + +## 3.4.81(2025-08-10) +feat: table2新增树状结构递归支持 + +## 3.4.80(2025-08-10) +feat: 新增table2固定列对树状支持 + +## 3.4.79(2025-08-09) +feat: table2组件支持左侧固定列功能 + +## 3.4.78(2025-08-09) +fix: 修复table2在popup弹窗中无法横向滚动 + +## 3.4.77(2025-08-08) +feat: 优化waterfall瀑布流组件逻辑 + +feat: waterfall瀑布流组件支持多列 + +feat: waterfall瀑布流组件支持响应式列数 + +## 3.4.76(2025-08-08) +feat: 取消props中tabs组件默认颜色影响主题色生效 + +fix: 修复parse富文本组件报错$options + +feat: timeFormat时间格式化方法支持UTC格式时间 #596 + +## 3.4.75(2025-08-07) +feat: 新增loadFontOnce参数控制是否全局只加载一次字体图标 + +## 3.4.74(2025-08-07) +feat: input组件新增cursorColor属性 + +## 3.4.73(2025-08-05) +improvment: 优化下拉刷新默认图标 + +## 3.4.72(2025-08-05) +improvment: 优化virtual-list虚拟列表样式 + +feat: 新增virtual-list虚拟列表演示 + +## 3.4.71(2025-08-05) +feat: 新增virtual-list虚拟列表组件 + +feat: 新增pull-refresh下拉刷新结合虚拟列表使用 + +## 3.4.70(2025-08-05) +fix: 修复qrcode组件长按事件传入错误cid导致的报错 + +fix: 修复index-list组件key为undefined导致的索引报错消失 + +## 3.4.69(2025-08-04) +feat: pull-refresh下拉刷新新增上拉加载特性 + +## 3.4.68(2025-08-03) +feat: 新增pull-refresh下拉刷新组件 + +## 3.4.67(2025-08-02) +feat: number-box支持disabledBgColor参数 + +## 3.4.66(2025-08-01) +improvment: 增加组件图标 + +feat: table2组件新增列排序插槽 + +fix: 分段器组件onWindowResize使用条件编译 + +fix: 修复u-line-1单行省略样式 + +## 3.4.65(2025-07-26) +fix: 修复部分环境下字体图标全局加载问题 + +## 3.4.64(2025-07-25) +feat: 新增dragsort拖动排序组件 + +## 3.4.63(2025-07-24) +feat: count-down支持slot传递时间参数 + +## 3.4.62(2025-07-24) +feat: divider支持默认插槽 + +## 3.4.61(2025-07-24) +feat: divider支持默认插槽 + +## 3.4.60(2025-07-23) +fix: 修复use阶段全局加载图标引起App端不明$page报错 + +## 3.4.59(2025-07-23) +fix: 修复album组件和CateTab组件watch和emits重复 + +fix: 修复样式优先级导致form表单labelPosition属性top失效 + +## 3.4.58(2025-07-22) +fix: 修复样式优先级影响grid宫格组件布局 + +## 3.4.57(2025-07-22) +feat: 新增title标题组件 + +## 3.4.56(2025-07-21) +fix: 去除多余hotCity参数 + +## 3.4.55(2025-07-21) +feat: 新增city-locate城市定位选择组件 + +feat: 优化index-list组件索引 + +## 3.4.54(2025-07-18) +feat: dropdown组件的highlight方法支持同时高亮多个菜单项 + +feat: 支持一次性全局加载icon字体 + +## 3.4.53(2025-07-18) +feat: dropdown组件的highlight方法支持同时高亮多个菜单项 感谢@keeplearning66 + +## 3.4.52(2025-07-16) +fix: 修复底部安全区域组件兼容性 + +## 3.4.51(2025-07-14) +fix: 修复u-slider在click后没有触发change事件 + +## 3.4.50(2025-07-13) +feat: subsection分段器添加禁用参数 + +## 3.4.49(2025-07-11) +feat: picker支持bgColor、round、duration和overlayOpacity属性 + +## 3.4.48(2025-07-10) +fix: 官方文档Card示例组件多行显示省略号样式异常 + +feat: album组件支持自定义preview事件 + +## 3.4.47(2025-07-09) +fix: 修复datetime-picker打开时,数值可能出现对不上的问题 + +feat: Subsection 分段器添加支持从 list中读取激活文字颜色和未激活文字颜色 + +fix: 修复modal定义confirmButton + +fix: safe-bottom底部安全距离在小程序优先用JS计算 + +feat: 新增tree树形组件 + +## 3.4.46(2025-07-08) +feat: 上传组件预览视频支持videoPreviewObjectFit参数 + +feat: td增加多个样式props + +fix: 修复noticeBar字号增大时文字遮挡 + +feat: 项目工程增加pinia + +## 3.4.45(2025-07-01) +fix: 修复picker-data组件缺少name + +fix: 优化picker高度单位 + +## 3.4.44(2025-06-30) +fix: 修复indexList中stikcy属性写死的问题(always true) + +feat: 搜索框添加新的右侧插槽 + +fix: 修复indexList中丢失的select event + +fix: 解决因为层级问题导致点击picker选择器无法正常弹出 + +## 3.4.43(2025-06-16) +feat: table2支持header插槽 + +## 3.4.42(2025-06-12) +fix: 修复qrcode中默认id问题及canvas2时App无法绘制二维码 感谢@jiaruiyan + +## 3.4.41(2025-06-11) +feat: qrcode支持 新参数useRootHeightAndWidth 是否使用根节点的宽高 感谢@YJR + +feat: toast支持设置zIndex层级 + + + +## 3.4.40(2025-06-06) +fix: 升级二维码 canvas -> canvas2 感谢@yjr + +## 3.4.39(2025-05-31) +fix: 修改步骤条微信小程序下的布局 感谢@jiaruiyan + +fix: u-tabs在屏幕尺寸发生变化时滑块位置没有发生变化 感谢@aqzhft + +fix: 鸿蒙平台不支持plus.runtime.openWeb 感谢@aqzhft + +## 3.4.38(2025-05-30) +fix: 修复picker-data快捷组件缺少index + +fix: 修复picker组件双向绑定初始化及取消后复原再次打开后的当前项目 + +## 3.4.37(2025-05-29) +feat: modal支持设置动画时间 + +fix: DatetimePicker v-model 绑定异步设置无效 (#803) + +## 3.4.36(2025-05-28) +fix: lazy-load图片为空时显示错误 + +## 3.4.35(2025-05-28) +feat: 进度条支持从右往左加载 + +## 3.4.34(2025-05-28) +feat: table2支持自定义标题和单元格样式 + +## 3.4.33(2025-05-27) +fix: 修复小程序cate-tab第一次切换时没反应 感谢@jiaruiyan + +fix: 修复datetimepicker传入空字符串时导致组件崩溃 感谢@jiaruiyan + +fix: 修复album带单位的字符串参与计算导致的计算数据错误 感谢@jiaruiyan + +## 3.4.32(2025-05-26) +feat: 增加状态栏独立颜色配置支持支付宝小程序状态栏对背景色识别的不友好的情况 + +fix: 抖音二维码兼容修复 + +feat: cate-tab组件增加rightTop插槽 #715 + +fix: 修改 test.promise(res) 预期结果不一致 + +## 3.4.31(2025-05-17) +fix: 修复parse富文本组件导致鸿蒙运行白屏 + +fix: 去除演示项目中uni.$u用法便于兼容鸿蒙 + +feat: modal新增popupBottom插槽适用类似关闭按钮与内容区域分离的场景 + +## 3.4.30(2025-05-16) +feat: 新增pagination分页器组件 + +feat: popup新增bottom插槽适用类似关闭按钮与内容区域分离的场景 + +## 3.4.29(2025-05-15) +fix: 修复table2横向滚动样式 + +fix: 修复table2组件宽度兼容 + +fix: 修复image显示png图片时默认背景色问题 + +feat: cate-tab新增height参数便于设置组件高度 + +feat: 在index.js种导出digit.js便于使用 + +fix: 修复tag组件缺失iconColor属性 + +fix: 优化index-list的setValueForTouch方法逻辑 #708 + +feat: number-box支持change事件返回变动是点击了增加还是减少按钮 + +fix: 修复table2在小程序下部分情形不显示表格 + +## 3.4.28(2025-05-12) +feat: 新增table表格组件 + +feat: 新增element-plus风格的table2组件 + +## 3.4.27(2025-05-06) +fix: 修复card组件props + +## 3.4.26(2025-05-06) +fix: 修复test工具引入 + +feat: card组件支持全局设置props默认值 + +fix: 修复image在加载错误情况下高度和宽度不正确问题 + +fix: 修复picker-data快捷组件默认picker选中 + +fix: 修复日历month子组件缺失emits定义 + +## 3.4.25(2025-04-27) +fix: up-form编译在微信小程序里样式缺失 #640 + +fix: number-box输入为空时自动设为最小值 + +feat: picker与datetimepicke组件hasInput模式支持inputProps属性 + +## 3.4.24(2025-04-25) +fix: 修复upload上传逻辑(感谢@semdy) + +## 3.4.23(2025-04-24) +chore: 补全chooseFile TS类型(感谢@semdy) + +feat: u-search组件的图标支持显示在右边(感谢@semdy) + +chore: 修正chooseFile返回的数据TS类型(感谢@semdy) + +fix: PR导致缺失name影响uplad自动上传扩展名 + + +## 3.4.22(2025-04-22) +fix: 修复自动上传偶发的success被覆盖为uploading + +fix: float-button缺少key #677 + +fix: upload组件完善优化(感谢@semdy) + +fix: toolbar组件confirmColor属性默认改为空,以便默认使用主题色、标题字体加粗(感谢@semdy) + +## 3.4.21(2025-04-21) +feat: subsection分段器支持双向绑定current + +feat: select组件支持maxHeight属性 + +feat: datetime-picker支持inputBorder属性 + +## 3.4.20(2025-04-17) +fix: 修复navbar-mini提示border不存在 + +feat: status-bar支持对外暴露状态栏高度值 + +feat: upload支持自定义自动上传后处理逻辑便于对接不同规范后端 + +feat: 优化tag组件插槽 + + +## 3.4.19(2025-04-14) +fix: 修复model组件增加contentStyle带来的语法问题 + +## 3.4.18(2025-04-14) +fix: upload组件支持所有文件类型的onClickPreview事件 + +## 3.4.17(2025-04-11) +feat: select组件text插槽增加scope传递currentLabel + +## 3.4.16(2025-04-10) +fix: 修复安卓新加载字体方式导致Cannot read property '$page' of undefined + +## 3.4.15(2025-04-10) +improvment: 优化移步加载数据时swiper组件displayMultipleItems报错 + +feat: modal增加contentStyle属性 + +fix: 修复下拉菜单收起动画缺失 + +fix: 修复sticky的offset属性值为响应式数据时失效 #237 + + +## 3.4.14(2025-04-09) +feat: 支持自托管内置图标及扩展自定义图标 + +## 3.4.13(2025-04-08) +fix: tabs点击当前tab触发change事件 + +## 3.4.12(2025-04-02) +fix: dropdown关闭后遮挡页面内容 #653 + +fix u-sticky.vue Uncaught TypeError: e.querySelector is not a function at uni-app-view.umd.js + +## 3.4.11(2025-03-31) +fix: 优化upload组件预览视频的弹窗占位 + +## 3.4.10(2025-03-28) +feat: select组件新增多个props属性及优化 + +fix: 修复cate-tab报错index is not defined #661 + + +## 3.4.9(2025-03-27) +fix: 修复upload组件split报错 + +fix: 修复float-button缺少flex样式 + +## 3.4.8(2025-03-27) +fix: 修复upload组件split报错 + +fix: 移除mapState + +## 3.4.7(2025-03-26) +fix: 修复action-sheet-data和picker-data数据回显 + +fix: 优化upload组件视频封面兼容 + +## 3.4.6(2025-03-25) +feat: checkbox触发change时携带name参数 + +feat: upload组件支持服务器本机和阿里云OSS自动上传功能及上传进度条 + +feat: upload组件支持视频预览及oss上传时获取视频封面图 + +feat: 新增up-action-sheet-data快捷组件 + +feat: 新增up-picker-data快捷组件 + +## 3.4.5(2025-03-24) +feat: tag组件新增textSize/height/padding/borderRadius属性 + +feat: 新增genLightColor自动计算浅色方法及tag组件支持autoBgColor自动计算背景色 + +## 3.4.4(2025-03-13) +feat: modal增加异步操作进行中点击取消弹出提示特性防止操作被中断 + +fix: 修复toast组件show方法类型声明 + +## 3.4.3(2025-03-12) +fix: 修复textarea自动增高时在输入时高度异常 + +## 3.4.2(2025-03-11) +feat: step组件增加title插槽及增加辅助class便于自定义样式 + +## 3.4.1(2025-03-11) +feat: 新机制确保setConfig与http在nvue等环境下生效 + +## 3.3.74(2025-03-06) +fix: CateTab语法问题 + +## 3.3.73(2025-03-06) +feat: CateTab新增v-model:current属性 + +## 3.3.72(2025-02-28) +feat: tabs组件支持icon图标及插槽 + +## 3.3.71(2025-02-27) +feat: 折叠面板collapse增加titileStyle/iconStyle/rightIconStyle属性 + +feat: 折叠面板组件新增cellCustomStyle/cellCustomClass属性 + +fix: select组件盒模型 + +## 3.3.70(2025-02-24) +fix: 修改u-checkbox-group组件changes事件发生位置 + +## 3.3.69(2025-02-19) +picker允许传递禁用颜色props + +slider组件isRange状态下增加min max插槽分开显示内容 + +feat: 新增经典下拉框组件up-select + +## 3.3.68(2025-02-12) +fix: 修复weekText类型 + +feat: 日历增加单选与多选指定禁止选中的日期功能 + +fix: NumberBox删除数字时取值有误 #613 + +## 3.3.67(2025-02-11) +feat: navbar支持返回全局拦截器配置 + +feat: 表单-校验-支持无提示-得到校验结果 + +feat: picker传递hasInput属性时候,可以禁用输入框点击 + +## 3.3.66(2025-02-09) +feat: steps-item增加content插槽 + +## 3.3.65(2025-02-05) +feat: number-box组件新增按钮圆角/按钮宽度/数据框背景色/迷你模式 +## 3.3.64(2025-01-18) +feat: 日历组件支持自定义星期文案 + +## 3.3.63(2025-01-13) +fix: cate-tab支持支付宝小程序 + +fix: textarea 修复 placeholder-style + +fix: 修复在图片加载及加载失败时容器宽度 + +fix: waterfall组件报错Maximum recursive updates + +## 3.3.62(2025-01-10) +feat: sleder滑动选择器双滑块增加外层触发值的变动功能 + +fix: picker支持hasInput优化 + +## 3.3.61(2024-12-31) +fix: 修复微信getSystemInfoSync接口废弃警告 + +fix: 'u-status-bar' symbol missing + +## 3.3.60(2024-12-30) +feat: 日期组件支持禁用 + +fix: ts定义修复 #600 + +feat: Tabs组件选中时增加一个active的class #595 + +## 3.3.59(2024-12-30) +fix: Property "isH5" was accessed during render + +## 3.3.58(2024-12-26) +fix: slider组件change事件传参 + +## 3.3.57(2024-12-23) +fix: slider组件change事件传参 + +feat: 更新u-picker组件增加当前选中class类名 + +## 3.3.56(2024-12-18) +feat: 在u-alert组件中添加关闭事件 + +## 3.3.55(2024-12-17) +add: swiper增加双向绑定 + +## 3.3.54(2024-12-11) +add: qrcode支持props控制是否开启点击预览 + +add: 新增cate-tab垂直分类组件 + +## 3.3.53(2024-12-10) +fix: 修复popup居中模式点击内容区域触发关闭 + +## 3.3.52(2024-12-09) +add: notice-bar支持justifyContent属性 + +## 3.3.51(2024-12-09) +add: radio增加label插槽 + +## 3.3.50(2024-12-05) +fix: 优化popup等对禁止背景滚动机制 + +add: slider在弹窗使用示例 + +fix: card组件类名问题 + +## 3.3.49(2024-12-02) +fix: 去除album多余的$u引用 + +fix: 优化图片组件兼容性 + +add: picker组件增加zIndex属性 + +add: text增加是否占满剩余空间属性 + +add: input颜色示例 + +## 3.3.48(2024-11-29) +add: 文本行数限制样式提高到10行 + +del: 去除不跨端的inputmode +## 3.3.47(2024-11-28) +fix: 时间选择器在hasInput模式下部分机型键盘弹出 + +## 3.3.46(2024-11-26) +fix: 修复text传递事件参数 + +## 3.3.45(2024-11-24) +add: navbar组件支持配置标题颜色 + +fix: 边框按钮警告类型下颜色变量使用错误 + +## 3.3.43(2024-11-18) +fix: 支持瀑布流组件v-model置为[] + +add: 新增字符串路径访问工具方法getValueByPath + +add: 新增float-button悬浮按钮组件 + +## 3.3.42(2024-11-15) +add: button组件支持stop参数阻止冒泡 + +## 3.3.41(2024-11-13) +fix: u-radio-group invalid import + +improvement: 优化图片组件宽高及修复事件event传递 + +## 3.3.40(2024-11-11) +add: 组件radioGroup增加gap属性用于设置item间隔 + +fix: 修复H5全局导入 + +## 3.3.39(2024-11-04) +fix: 修复相册组件 + +## 3.3.38(2024-11-04) +fix: 修复视频预览报错 #510 + +add: album组件增加stop参数支持阻止事件冒泡 + +## 3.3.37(2024-10-21) +fix: 修复因为修改组件名称前缀,导致h5打包后$parent方法内找不到父组件的问题 + +fix: 修复datetime-picker选择2000年以前日期出错 + +## 3.3.36(2024-10-09) +fix: toast 自动关闭 + +feat: 增加微信小程序用户昵称审核完毕回调及修改 ts 定义文件 + +## 3.3.35(2024-10-08) +feat: modal和picker支持v-model:show双向绑定 + +feat: 支持checkbox使用slot自定义label后自带点击事件 #522 + +feat: swipe-action支持自动关闭特性及初始化打开状态 + +## 3.3.34(2024-09-23) +feat: 支持toast设置duration值为-1时不自动关闭 + +## 3.3.33(2024-09-18) +fix: 修复test.date('008')等验证结果不准确 + +## 3.3.32(2024-09-09) +fix: u-keyboard名称冲突warning + +## 3.3.31(2024-08-31) +feat: qrcode初步支持nvue + +## 3.3.30(2024-08-30) +fix: slider兼容step为字符串类型 + +## 3.3.29(2024-08-30) +fix: 修复tabs组件current参数为字符串处理逻辑 + +## 3.3.28(2024-08-26) +fix: list组件滑动偏移量不一样取绝对值导致iOS下拉偏移量计算错误 + +## 3.3.27(2024-08-22) +fix: 修复up-datetime-picker组件toolbarRightSlot定义缺失 + +fix: 修复FormItem的rules更新错误的问题 + +## 3.3.26(2024-08-22) +fix: 批量注册全局组件优化 + +## 3.3.25(2024-08-21) +fix: 修复slider在app-vue下样式问题 + +## 3.3.24(2024-08-19) +fix: 修复时间选择器hasInput模式小程序不生效 + +feat: 支持H5导入所有组件 + +## 3.3.23(2024-08-17) +feat: swipe-action增加closeAll方法 + +fix: 兼容tabs在某些场景下index小于0时自动设置为0 + +add: 通用mixin新增navTo页面跳转方法 + +## 3.3.21(2024-08-15) +improvement: 优化二维码组件loading及支持预览与长按事件 #351 + +fix: 修复swipe-action自动关闭其它功能及组件卸载自动关闭 + +## 3.3.20(2024-08-15) +refactor: props默认值文件移至组件文件夹内便于查找 +## 3.3.19(2024-08-14) +fix: 修复2被rpx兼容处理只在数字值生效 + +add: 增加swiper自定义插槽示例 + +## 3.3.18(2024-08-13) +feat: 新增支持datetime-picker工具栏插槽及picker插槽支持修复 +## 3.3.17(2024-08-12) +feat: swiper组件增加默认slot便于自定义 + +feat: grid新增间隔参数 + +feat: picker新增toolbar-right和toolbar-bottom插槽 + +## 3.3.16(2024-08-12) +fix: 解决swiper中title换行后多余的内容未被遮挡问题 + +fix: 修复迷你导航适配异形屏 + +## 3.3.15(2024-08-09) +fix: 修复默认单位设置为rpx时一些组件高度间距异常 + +fix: 修复日历在rpx单位下布局异常 + +feat: code-input支持App端展示输入光标 + +## 3.3.14(2024-08-09) +add: 增加box组件 + +add: 增加card卡片组件 + + +## 3.3.13(2024-08-08) +feat: input支持调用原生组件的focus和blur方法 + +improvement: grid-item条件编译优化 + +add: 新增迷你导航组件 + +## 3.3.12(2024-08-06) +improvement: $u挂载时机调整便于打包分离chunk + +fix: steps新增itemStyle属性名称冲突 + +## 3.3.11(2024-08-05) +feat: 新增支持upload组件的deletable/maxCount/accept变更监听 #333 + +feat: 新增支持tabs在swiper中使用 + +feat: 新增FormItem支持独立设置验证规则rules + +fix: 修复index-list未设置$slots.header时索引高亮失效 + +## 3.3.10(2024-08-02) +fix: 修复index-list偶发的滑动最后一个索引报错top不存在 + +fix: 修复gird在QQ、抖音小程序下布局 + +feat: 优化step支持自定义样式prop + +feat: action-sheet组件支持v-model:show双向绑定 + +fix: 小程序下steps和grid都统一采用grid布局 + +fix: 修复支付宝小程序下input类型为数字时双向绑定失效 + +feat : form 表单 validate 校验不通过后 error增加字段prop信息 #304 + +fix: form组件异步校异常验问题 #393 + +## 3.3.9(2024-08-01) +fix: 优化获取nvue元素 + +feat: modal新增contentTextAlign设置文案对齐方式 + +fix: 修复NVUE下tabbar文字不显示 #458 + +feat: loading-page增加zIndex属性 + +fix: 相册在宽度较小时换行问题 + +feat: album相册增加自适应自动换行模式 + +feat: album相册增加图片尺寸单位prop + +fix: 修复calendar日历月份居中 + +## 3.3.8(2024-07-31) +feat: slider支持进度条任意位置触发按钮拖动 + +fix: 修复app-vue下modal标题不居中 + +fix: #459 TS setConfig 声明异常 + +feat: tabs组件增加longPress长按事件 + +feat: 新增showRight属性控制collapse右侧图标显隐 + +fix: 优化nvue下css警告 + +## 3.3.7(2024-07-29) +feat: 支持IndexList组件支持在弹窗等场景下使用及联动优化 + +feat: popup组件支持v-model:show双向绑定 + +feat: 优化tabs的current双向绑定 + +fix: checkbox独立使用时checked赋初始值可以,但是手动切换时值没有做双向绑定! #455 + +feat: slider组件支持区间双滑块 + +fix: toast 支持自定义图标?可传入了决对路径的 icon也没有用 #409 + +feat: form-item校验失败时 增加class方便自定义显示错误的展示方式 #394 + +fix: up-cell的required配置不生效 #395 + +fix: 横向滚动组件,微信小程序编译后会有警告 #415 + +fix: u-picker内部对默认值defaultIndex的监听 #425 + +feat: toast 组件支持遮掩层穿透 #417 + +fix: 兼容vue的slot编译bug #423 + +fix: upload 微信小程序 点击预览视频报错 #424 + +fix: u-number-box 组件修改【integer, decimalLength, min, max 】props时没有触发绑定值更新 #429 + +feat: Tabs组件能否支持自定义插槽 #439 + +feat: ActionSheet 可以配置最大高度吗, 我当做select使用了。 #445 + +fix: cursor-pointer优化 + +feat: 新版slider组件兼容NVUE改造 + +feat: 新增slider组件手动实现以支持样式自定义 + +perf:补充TS声明提示信息 + +修复:ActionSheet 操作菜单cancelText属性为空DOM节点还存在并且可以点击问题 + +fix: 去除预留的beforeDestroy兼容容易在某些sdk下不识别条件编译 + +## 3.3.6(2024-07-23) +feat: u-album组件添加radius,shape参数,定义参考当前u-image参数 + +fix: 修复了calendar组件title和日期title未垂直居中的问题 + +fix: update:modelValue缺失emit定义 + +## 3.3.5(2024-07-10) +picker组件支持hasInput模式 + +## 3.3.4(2024-07-07) +fix: input组件双向绑定问题 #419 + +lazy-load完善emit + +优化通用小程序分享 + +## 3.3.2(2024-06-27) +fix: 在Nvue环境中编译,出现大量警告 #406 +## 3.3.1(2024-06-27) +u-button组件报错,找不到button mixins #407 +## 3.3.0(2024-06-27) +feat: checkbox支持label设置slot + +feat: modal增加customClass + +feat: navbar、popup、tabs、text支持customClass + +fix: cell组建缺少flex布局 + +fix: 修复微信小程序真机调试时快速输入出现文本回退问题 + +feat: tag增加默认slot + +公共mixin改造为按需导入语法 + +refactor: 组件props混入mixin改造为按需导入语法 + +fix: u-tabbar 安卓手机点击按钮变蓝问题 #396 + +feat: upload组建增加extension属性 + +fix: upload组件参数mode添加left + +fix: 修复阴影在非nvue时白色背景色不显示 + +## 3.2.24(2024-06-11) +fix: 修复时间选择器confirm事件触发时机导致2次才会触发v-model更新 +## 3.2.23(2024-05-30) +fix: #378 H5 u-input 在表单中初始值为空也会触发一次 formValidate(this,"change")事件导致进入页面直接校验了一次 + +fix: #373 搜索组件up-search的@clear事件无效 + +fix: #372 ActionSheet 组件的取消按钮触发区域太小 + +## 3.2.22(2024-05-13) +上传组件支持微信小程序预览视频 + +修复折叠面板右侧箭头不显示 + +修复uxp2px + +## 3.2.21(2024-05-10) +fix: loading-icon修复flex布局 +## 3.2.20(2024-05-10) +修复瀑布流大小写#355 +## 3.2.19(2024-05-10) +去除意外的文件引入 +## 3.2.18(2024-05-09) +fix: 349 popup 组件设置 zIndex 属性后,组件渲染异常# +feat: 搜索框增加adjustPosition属性 +fix: #331增加u-action-sheet__cancel +优化mixin兼容性 +feat: #326 up-list增加下拉刷新功能 +fix: #319 优化up-tabs参数与定义匹配 +fix: index-list组件微信小程序端使用自定义导航栏异常 +fix: #285 pickerimmediateChange 写死为true +fix: #111 u-scroll-list组件,隐藏指示器后报错, 提示找不到ref +list增加微信小程序防抖配置 + +## 3.2.17(2024-05-08) +fix: 支付宝小程序二维码渲染 +## 3.2.16(2024-05-06) +修复tabs中,当前激活样式的undefined bug + +fix: #341u-code 倒计时没结束前退出,再次进入结束后退出界面,再次进入重新开始倒计时bug + +受到uni-app内置text样式影响修复 + +## 3.2.15(2024-04-28) +优化时间选择器hasInput模式初始化值 +## 3.2.14(2024-04-24) +去除pleaseSetTranspileDependencies + +http采用useStore + +## 3.2.13(2024-04-22) +修复modal标题样式 + +优化日期选择器hasInput模式宽度 + +## 3.2.12(2024-04-22) +修复color应用 +## 3.2.11(2024-04-18) +修复import化带来的问题 +## 3.2.10(2024-04-17) +完善input清空事件App端失效的兼容性 + +修复日历组件二次打开后当前月份显示不正确 + +## 3.2.9(2024-04-16) +组件内uni.$u用法改为import引入 + +规范化及兼容性增强 + +## 3.2.8(2024-04-15) +修复up-tag语法错 +## 3.2.7(2024-04-15) +修复下拉菜单背景色在支付宝小程序无效 + +setConfig改为浅拷贝解决无法用import导入代替uni.$u.props设置 + +## 3.2.6(2024-04-14) +修复某些情况下滑动单元格默认右侧按钮是展开的问题 +## 3.2.5(2024-04-13) +调整分段器尺寸及修复窗口大小改变时重新计算尺寸 + +多个组件支持cursor-pointer增强PC端体验 + +## 3.2.4(2024-04-12) +初步支持typescript +## 3.2.3(2024-04-12) +fix: 修复square属性在小程序下无效问题 + +fix:修复lastIndex异常导致的column异常问题 + +fix: alipayapp picker style + +feat(button): 添加用户同意隐私协议事件回调 + +fix: input switch password + +fix: 修复u-code组件keepRuning失效问题 + +feat: form-item添加labelPosition属性 + +新增dropdown组件 + +分段器支持内部current值 + +优化cell和action-sheet视觉大小 + +修复tabs文字换行 + +## 3.2.2(2024-04-11) +修复换行符问题 +## 3.2.1(2024-04-11) +修复演示H5二维码 + +fix: #270 ReadMore 展开阅读更多内容变化兼容 + +fix: #238Calendar组件maxDate修改为不能小于minDate + +checkbox支持独立使用 + +修复popup中在微信小程序中真机调试滚动失效 + +## 3.2.0(2024-04-10) +修复轮播图在nvue显示 +修复疑似u-slider名称被占用导致slider在App下不显示 +解决微信小程序提示 Some selectors are not allowed in component wxss +示例中u-前缀统一为up- +增加瀑布流与图片懒加载组件 +fix: #308修复tag组件缺失iconColor参数 +fix: #297使用grid布局解决目前编译为抖音小程序无法开启virtualHost +## 3.1.52(2024-04-07) +工具类方法调用import化改造 +新增up-copy复制组件 +## 3.1.51(2024-04-07) +优化时间选择器自带输入框格式化显示 +防止按钮文字换行 +修复订单列表模板滑动 +增加u-qrcode二维码组件 +## 3.1.49(2024-03-27) +日期时间组件支持自带输入框 +fix: popup弹窗滚动穿透问题 +fix: 修复小程序numberbox bug +## 3.1.48(2024-03-18) +fix:[plugin:uni:pre-css] Unbalanced delimiter found in string +## 3.1.47(2024-03-18) +fix: setConfig设置组件默认参数无效问题 +fix: 修复自定义图标无效问题 +feat: 增加u-form-item单独设置规则变量 +fix:#293小程序是自定义导航栏的时候即传了customNavHeight的时候会出现跳转偏移的情况 + +## 3.1.46(2024-01-29) +beforeUnmount +## 3.1.45(2024-01-24) +fix: #262ext组件为超链接的情况下size属性不生效 +fix: #263最新版本3.1.42中微信小程序u-swipe-action-item报错 +fix: #224最新版本3.1.42中微信小程序u-swipe-action-item报错 +fix: #263支持支付宝小程序 +fix: #261u-input在直接修改v-model的绑定值时,每隔一次会无法出发change事件 +优化折叠面板兼容微信小程序 +## 3.1.42(2024-01-15) +修复u-number-box默认值0时在小程序不显示值 +优化u-code的timer判断 +优化支付宝小程序下textarea字数统计兼容 +优化u-calendar +## 3.1.41(2023-11-18) +#215优化u-cell图标容器间距问题 +## 3.1.40(2023-11-16) +修复u-slider双向绑定 +## 3.1.39(2023-11-10) +修复头条小程序不支持env(safe-area-inset-bottom) +优化#201u-grid 指定列数导致闪烁 +#193IndexList 索引列表 高度错误 +其他优化 +## 3.1.38(2023-10-08) +修复u-slider +## 3.1.37(2023-09-13) +完善emits定义及修复code-input双向数据绑定 +## 3.1.36(2023-08-08) +修复富文本事件名称大小写 +## 3.1.35(2023-08-02) +修复编译到支付宝小程序u-form报错 +## 3.1.34(2023-07-27) +修复App打包uni.$u.mpMixin方式sdk暂时不支持导致报错 +## 3.1.33(2023-07-13) +修复弹窗进入动画、模板页面样式等 +## 3.1.31(2023-07-11) +修复dayjs引用 +## 3.0.8(2022-07-12) +修复u-tag默认宽度撑满容器 +## 3.0.7(2022-07-12) +修复u-navbar自定义插槽演示示例 +## 3.0.6(2022-07-11) +修复u-image缺少emits申明 +## 3.0.5(2022-07-11) +修复u-upload缺少emits申明 +## 3.0.4(2022-07-10) +修复u-textarea/u-input/u-datetime-picker/u-number-box/u-radio-group/u-switch/u-rate在vue3下数据绑定 +## 3.0.3(2022-07-09) +启用自建演示二维码 +## 3.0.2(2022-07-09) +修复dayjs/clipboard等导致打包报错 +## 3.0.1(2022-07-09) +增加插件市场地址 +## 3.0.0(2022-07-09) +# uview-plus(vue3)初步发布 +## 3.8.39 + +- feat: tabbar 新增多种风格预设、动态图标切换与轻量选中动画 +- improvment: tabbar 补充高颜值本地图标示例并优化发布型底栏视觉 diff --git a/uni_modules/uview-plus/components/u-action-sheet-data/u-action-sheet-data.vue b/uni_modules/uview-plus/components/u-action-sheet-data/u-action-sheet-data.vue new file mode 100644 index 0000000..234d5cf --- /dev/null +++ b/uni_modules/uview-plus/components/u-action-sheet-data/u-action-sheet-data.vue @@ -0,0 +1,109 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uview-plus/components/u-action-sheet/actionSheet.js b/uni_modules/uview-plus/components/u-action-sheet/actionSheet.js index fb6787d..bc27648 100644 --- a/uni_modules/uview-plus/components/u-action-sheet/actionSheet.js +++ b/uni_modules/uview-plus/components/u-action-sheet/actionSheet.js @@ -1,26 +1,28 @@ -/* - * @Author : LQ - * @Description : - * @version : 1.0 - * @Date : 2021-08-20 16:44:21 - * @LastAuthor : LQ - * @lastTime : 2021-08-20 16:44:35 - * @FilePath : /u-view2.0/uview-ui/libs/config/props/actionSheet.js - */ -export default { - // action-sheet组件 - actionSheet: { - show: false, - title: '', - description: '', - actions: [], - index: '', - cancelText: '', - closeOnClickAction: true, - safeAreaInsetBottom: true, - openType: '', - closeOnClickOverlay: true, - round: 0, - wrapMaxHeight: '600px' - } -} +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-08-16 10:52:35 + * @FilePath : /uview-plus/libs/config/props/actionSheet.js + */ +export default { + // action-sheet组件 + actionSheet: { + show: false, + title: '', + description: '', + actions: [], + nameKey: 'name', + subnameKey: 'subnameKey', + index: '', + cancelText: '', + closeOnClickAction: true, + safeAreaInsetBottom: true, + openType: '', + closeOnClickOverlay: true, + round: 0, + wrapMaxHeight: '600px' + } +} diff --git a/uni_modules/uview-plus/components/u-action-sheet/props.js b/uni_modules/uview-plus/components/u-action-sheet/props.js index 43ba0f2..6b6550d 100644 --- a/uni_modules/uview-plus/components/u-action-sheet/props.js +++ b/uni_modules/uview-plus/components/u-action-sheet/props.js @@ -1,62 +1,82 @@ -import { defineMixin } from '../../libs/vue' -import defProps from '../../libs/config/props.js' - -export const props = defineMixin({ - props: { - // 操作菜单是否展示 (默认false) - show: { - type: Boolean, - default: () => defProps.actionSheet.show - }, - // 标题 - title: { - type: String, - default: () => defProps.actionSheet.title - }, - // 选项上方的描述信息 - description: { - type: String, - default: () => defProps.actionSheet.description - }, - // 数据 - actions: { - type: Array, - default: () => defProps.actionSheet.actions - }, - // 取消按钮的文字,不为空时显示按钮 - cancelText: { - type: String, - default: () => defProps.actionSheet.cancelText - }, - // 点击某个菜单项时是否关闭弹窗 - closeOnClickAction: { - type: Boolean, - default: () => defProps.actionSheet.closeOnClickAction - }, - // 处理底部安全区(默认true) - safeAreaInsetBottom: { - type: Boolean, - default: () => defProps.actionSheet.safeAreaInsetBottom - }, - // 小程序的打开方式 - openType: { - type: String, - default: () => defProps.actionSheet.openType - }, - // 点击遮罩是否允许关闭 (默认true) - closeOnClickOverlay: { - type: Boolean, - default: () => defProps.actionSheet.closeOnClickOverlay - }, - // 圆角值 - round: { - type: [Boolean, String, Number], - default: () => defProps.actionSheet.round - }, - // 选项区域最大高度 - wrapMaxHeight: { - type: [String], - default: () => defProps.actionSheet.wrapMaxHeight - }, - } -}) +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @LastAuthor : jry + * @lastTime : 2025-08-16 10:52:35 + * @FilePath : /uview-plus/libs/config/props/props.js + */ +import { defineMixin } from '../../libs/vue' +import ActionSheetDefaultProps from './actionSheet' +import { registerComponentProps } from '../../libs/config/props.js' + +const defProps = registerComponentProps(ActionSheetDefaultProps) +export const props = defineMixin({ + props: { + // 操作菜单是否展示 (默认false) + show: { + type: Boolean, + default: () => defProps.actionSheet.show + }, + // 标题 + title: { + type: String, + default: () => defProps.actionSheet.title + }, + // 选项上方的描述信息 + description: { + type: String, + default: () => defProps.actionSheet.description + }, + // 数据 + actions: { + type: Array, + default: () => defProps.actionSheet.actions + }, + // 选项名称key + nameKey: { + type: String, + default: () => defProps.actionSheet.nameKey + }, + // 选项子名称key + subnameKey: { + type: String, + default: () => defProps.actionSheet.subnameKey + }, + // 取消按钮的文字,不为空时显示按钮 + cancelText: { + type: String, + default: () => defProps.actionSheet.cancelText + }, + // 点击某个菜单项时是否关闭弹窗 + closeOnClickAction: { + type: Boolean, + default: () => defProps.actionSheet.closeOnClickAction + }, + // 处理底部安全区(默认true) + safeAreaInsetBottom: { + type: Boolean, + default: () => defProps.actionSheet.safeAreaInsetBottom + }, + // 小程序的打开方式 + openType: { + type: String, + default: () => defProps.actionSheet.openType + }, + // 点击遮罩是否允许关闭 (默认true) + closeOnClickOverlay: { + type: Boolean, + default: () => defProps.actionSheet.closeOnClickOverlay + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: () => defProps.actionSheet.round + }, + // 选项区域最大高度 + wrapMaxHeight: { + type: [String], + default: () => defProps.actionSheet.wrapMaxHeight + }, + } +}) diff --git a/uni_modules/uview-plus/components/u-action-sheet/u-action-sheet.vue b/uni_modules/uview-plus/components/u-action-sheet/u-action-sheet.vue index 1478bf6..0a877ce 100644 --- a/uni_modules/uview-plus/components/u-action-sheet/u-action-sheet.vue +++ b/uni_modules/uview-plus/components/u-action-sheet/u-action-sheet.vue @@ -1,283 +1,341 @@ - - - - - - + + + + + diff --git a/uni_modules/uview-plus/components/u-agreement/u-agreement.vue b/uni_modules/uview-plus/components/u-agreement/u-agreement.vue new file mode 100644 index 0000000..51efca1 --- /dev/null +++ b/uni_modules/uview-plus/components/u-agreement/u-agreement.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-album/album.js b/uni_modules/uview-plus/components/u-album/album.js index 7eea921..e7568bf 100644 --- a/uni_modules/uview-plus/components/u-album/album.js +++ b/uni_modules/uview-plus/components/u-album/album.js @@ -1,28 +1,28 @@ -/* - * @Author : LQ - * @Description : - * @version : 1.0 - * @Date : 2021-08-20 16:44:21 - * @LastAuthor : LQ - * @lastTime : 2021-08-20 16:47:24 - * @FilePath : /u-view2.0/uview-ui/libs/config/props/album.js - */ -export default { - // album 组件 - album: { - urls: [], - keyName: '', - singleSize: 180, - multipleSize: 70, - space: 6, - singleMode: 'scaleToFill', - multipleMode: 'aspectFill', - maxCount: 9, - previewFullImage: true, - rowCount: 3, - showMore: true, - autoWrap: false, - unit: 'px', - stop: true, - } -} +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-08-16 16:32:24 + * @FilePath : /uview-plus/libs/config/props/album.js + */ +export default { + // album 组件 + album: { + urls: [], + keyName: '', + singleSize: 180, + multipleSize: 70, + space: 6, + singleMode: 'scaleToFill', + multipleMode: 'aspectFill', + maxCount: 9, + previewFullImage: true, + rowCount: 3, + showMore: true, + autoWrap: false, + unit: 'px', + stop: true, + } +} diff --git a/uni_modules/uview-plus/components/u-album/props.js b/uni_modules/uview-plus/components/u-album/props.js index 828ab04..beafed1 100644 --- a/uni_modules/uview-plus/components/u-album/props.js +++ b/uni_modules/uview-plus/components/u-album/props.js @@ -1,86 +1,97 @@ -import { defineMixin } from '../../libs/vue' -import defProps from '../../libs/config/props.js' -export const props = defineMixin({ - props: { - // 图片地址,Array|Array形式 - urls: { - type: Array, - default: () => defProps.album.urls - }, - // 指定从数组的对象元素中读取哪个属性作为图片地址 - keyName: { - type: String, - default: () => defProps.album.keyName - }, - // 单图时,图片长边的长度 - singleSize: { - type: [String, Number], - default: () => defProps.album.singleSize - }, - // 多图时,图片边长 - multipleSize: { - type: [String, Number], - default: () => defProps.album.multipleSize - }, - // 多图时,图片水平和垂直之间的间隔 - space: { - type: [String, Number], - default: () => defProps.album.space - }, - // 单图时,图片缩放裁剪的模式 - singleMode: { - type: String, - default: () => defProps.album.singleMode - }, - // 多图时,图片缩放裁剪的模式 - multipleMode: { - type: String, - default: () => defProps.album.multipleMode - }, - // 最多展示的图片数量,超出时最后一个位置将会显示剩余图片数量 - maxCount: { - type: [String, Number], - default: () => defProps.album.maxCount - }, - // 是否可以预览图片 - previewFullImage: { - type: Boolean, - default: () => defProps.album.previewFullImage - }, - // 每行展示图片数量,如设置,singleSize和multipleSize将会无效 - rowCount: { - type: [String, Number], - default: () => defProps.album.rowCount - }, - // 超出maxCount时是否显示查看更多的提示 - showMore: { - type: Boolean, - default: () => defProps.album.showMore - }, - // 图片形状,circle-圆形,square-方形 - shape: { - type: String, - default: () => defProps.image.shape - }, - // 圆角,单位任意 - radius: { - type: [String, Number], - default: () => defProps.image.radius - }, - // 自适应换行 - autoWrap: { - type: Boolean, - default: () => defProps.album.autoWrap - }, - // 单位 - unit: { - type: [String], - default: () => defProps.album.unit - }, - // 阻止点击冒泡 - stop: { - type: Boolean, - default: () => defProps.album.stop - } - } -}) +/* + * @Author : jry + * @Description : + * @version : 3.0 + * @LastAuthor : jry + * @lastTime : 2025-08-16 16:35:24 + * @FilePath : /uview-plus/components/u-album/props.js + */ +import { defineMixin } from '../../libs/vue' +import AlbumDefaultProps from './album' +import { registerComponentProps } from '../../libs/config/props.js' + +const defProps = registerComponentProps(AlbumDefaultProps) +export const props = defineMixin({ + props: { + // 图片地址,Array|Array形式 + urls: { + type: Array, + default: () => defProps.album.urls + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: () => defProps.album.keyName + }, + // 单图时,图片长边的长度 + singleSize: { + type: [String, Number], + default: () => defProps.album.singleSize + }, + // 多图时,图片边长 + multipleSize: { + type: [String, Number], + default: () => defProps.album.multipleSize + }, + // 多图时,图片水平和垂直之间的间隔 + space: { + type: [String, Number], + default: () => defProps.album.space + }, + // 单图时,图片缩放裁剪的模式 + singleMode: { + type: String, + default: () => defProps.album.singleMode + }, + // 多图时,图片缩放裁剪的模式 + multipleMode: { + type: String, + default: () => defProps.album.multipleMode + }, + // 最多展示的图片数量,超出时最后一个位置将会显示剩余图片数量 + maxCount: { + type: [String, Number], + default: () => defProps.album.maxCount + }, + // 是否可以预览图片 + previewFullImage: { + type: Boolean, + default: () => defProps.album.previewFullImage + }, + // 每行展示图片数量,如设置,singleSize和multipleSize将会无效 + rowCount: { + type: [String, Number], + default: () => defProps.album.rowCount + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: () => defProps.album.showMore + }, + // 图片形状,circle-圆形,square-方形 + shape: { + type: String, + default: () => defProps.image.shape + }, + // 圆角,单位任意 + radius: { + type: [String, Number], + default: () => defProps.image.radius + }, + // 自适应换行 + autoWrap: { + type: Boolean, + default: () => defProps.album.autoWrap + }, + // 单位 + unit: { + type: [String], + default: () => defProps.album.unit + }, + // 阻止点击冒泡 + stop: { + type: Boolean, + default: () => defProps.album.stop + } + } +}) diff --git a/uni_modules/uview-plus/components/u-album/u-album.vue b/uni_modules/uview-plus/components/u-album/u-album.vue index 4228959..4b7c2c5 100644 --- a/uni_modules/uview-plus/components/u-album/u-album.vue +++ b/uni_modules/uview-plus/components/u-album/u-album.vue @@ -1,5 +1,6 @@