Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
德宏大魔王
uni-starter
提交
cf250a73
U
uni-starter
项目概览
德宏大魔王
/
uni-starter
与 Fork 源项目一致
Fork自
DCloud / uni-starter
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-starter
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
cf250a73
编写于
11月 14, 2022
作者:
study夏羽
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新依赖的插件
上级
27f2ea0a
变更
74
展开全部
隐藏空白更改
内联
并排
Showing
74 changed file
with
2176 addition
and
1403 deletion
+2176
-1403
uni_modules/Sansnn-uQRCode/changelog.md
uni_modules/Sansnn-uQRCode/changelog.md
+3
-7
uni_modules/Sansnn-uQRCode/components/u-qrcode/u-qrcode.vue
uni_modules/Sansnn-uQRCode/components/u-qrcode/u-qrcode.vue
+321
-168
uni_modules/Sansnn-uQRCode/components/uqrcode/uqrcode.vue
uni_modules/Sansnn-uQRCode/components/uqrcode/uqrcode.vue
+321
-168
uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/package.json
uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/package.json
+1
-1
uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js
uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js
+4
-4
uni_modules/Sansnn-uQRCode/package.json
uni_modules/Sansnn-uQRCode/package.json
+8
-5
uni_modules/Sansnn-uQRCode/readme.md
uni_modules/Sansnn-uQRCode/readme.md
+33
-11
uni_modules/uni-captcha/components/uni-popup-captcha/uni-popup-captcha.vue
...aptcha/components/uni-popup-captcha/uni-popup-captcha.vue
+67
-67
uni_modules/uni-captcha/uniCloud/cloudfunctions/uni-captcha-co/index.obj.js
...ptcha/uniCloud/cloudfunctions/uni-captcha-co/index.obj.js
+1
-1
uni_modules/uni-config-center/changelog.md
uni_modules/uni-config-center/changelog.md
+2
-0
uni_modules/uni-config-center/package.json
uni_modules/uni-config-center/package.json
+9
-8
uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js
...uniCloud/cloudfunctions/common/uni-config-center/index.js
+1
-1
uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/package.json
...loud/cloudfunctions/common/uni-config-center/package.json
+1
-1
uni_modules/uni-easyinput/changelog.md
uni_modules/uni-easyinput/changelog.md
+49
-15
uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue
.../uni-easyinput/components/uni-easyinput/uni-easyinput.vue
+595
-562
uni_modules/uni-easyinput/package.json
uni_modules/uni-easyinput/package.json
+1
-1
uni_modules/uni-id-pages/changelog.md
uni_modules/uni-id-pages/changelog.md
+12
-2
uni_modules/uni-id-pages/init.js
uni_modules/uni-id-pages/init.js
+6
-7
uni_modules/uni-id-pages/package.json
uni_modules/uni-id-pages/package.json
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/common/constants.js
...ges/uniCloud/cloudfunctions/uni-id-co/common/constants.js
+3
-0
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/common/error.js
...d-pages/uniCloud/cloudfunctions/uni-id-co/common/error.js
+2
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/common/universal.js
...ges/uniCloud/cloudfunctions/uni-id-co/common/universal.js
+47
-0
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/index.obj.js
...i-id-pages/uniCloud/cloudfunctions/uni-id-co/index.obj.js
+12
-3
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lang/en.js
...uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lang/en.js
+2
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lang/zh-hans.js
...d-pages/uniCloud/cloudfunctions/uni-id-co/lang/zh-hans.js
+2
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/captcha.js
...es/uniCloud/cloudfunctions/uni-id-co/lib/utils/captcha.js
+2
-2
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/login.js
...ages/uniCloud/cloudfunctions/uni-id-co/lib/utils/login.js
+6
-6
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/logout.js
...ges/uniCloud/cloudfunctions/uni-id-co/lib/utils/logout.js
+3
-3
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/password.js
...s/uniCloud/cloudfunctions/uni-id-co/lib/utils/password.js
+213
-68
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/qq.js
...d-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/qq.js
+12
-12
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/register.js
...s/uniCloud/cloudfunctions/uni-id-co/lib/utils/register.js
+9
-8
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/relate.js
...ges/uniCloud/cloudfunctions/uni-id-co/lib/utils/relate.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/unified-login.js
...Cloud/cloudfunctions/uni-id-co/lib/utils/unified-login.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/univerify.js
.../uniCloud/cloudfunctions/uni-id-co/lib/utils/univerify.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/utils.js
...ages/uniCloud/cloudfunctions/uni-id-co/lib/utils/utils.js
+18
-0
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/verify-code.js
...niCloud/cloudfunctions/uni-id-co/lib/utils/verify-code.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/weixin.js
...ges/uniCloud/cloudfunctions/uni-id-co/lib/utils/weixin.js
+42
-6
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/middleware/auth.js
...ages/uniCloud/cloudfunctions/uni-id-co/middleware/auth.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/middleware/uni-id-log.js
...niCloud/cloudfunctions/uni-id-co/middleware/uni-id-log.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/account/reset-pwd-by-email.js
...dfunctions/uni-id-co/module/account/reset-pwd-by-email.js
+2
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/account/reset-pwd-by-sms.js
...oudfunctions/uni-id-co/module/account/reset-pwd-by-sms.js
+2
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/account/update-pwd.js
...oud/cloudfunctions/uni-id-co/module/account/update-pwd.js
+4
-2
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/admin/add-user.js
...niCloud/cloudfunctions/uni-id-co/module/admin/add-user.js
+1
-0
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/admin/update-user.js
...loud/cloudfunctions/uni-id-co/module/admin/update-user.js
+1
-0
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/login/login-by-qq.js
...loud/cloudfunctions/uni-id-co/module/login/login-by-qq.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/login/login-by-weixin-mobile.js
...unctions/uni-id-co/module/login/login-by-weixin-mobile.js
+1
-4
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/login/login-by-weixin.js
.../cloudfunctions/uni-id-co/module/login/login-by-weixin.js
+18
-3
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/register/register-admin.js
...loudfunctions/uni-id-co/module/register/register-admin.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/relate/bind-qq.js
...niCloud/cloudfunctions/uni-id-co/module/relate/bind-qq.js
+2
-2
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/relate/bind-weixin.js
...oud/cloudfunctions/uni-id-co/module/relate/bind-weixin.js
+2
-2
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/relate/unbind-qq.js
...Cloud/cloudfunctions/uni-id-co/module/relate/unbind-qq.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/index.js
...s/uniCloud/cloudfunctions/uni-id-co/module/utils/index.js
+2
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/refresh-token.js
...ud/cloudfunctions/uni-id-co/module/utils/refresh-token.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/secure-network-handshake-by-weixin.js
...-id-co/module/utils/secure-network-handshake-by-weixin.js
+73
-0
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/set-push-cid.js
...oud/cloudfunctions/uni-id-co/module/utils/set-push-cid.js
+2
-2
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/verify/create-captcha.js
.../cloudfunctions/uni-id-co/module/verify/create-captcha.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/verify/refresh-captcha.js
...cloudfunctions/uni-id-co/module/verify/refresh-captcha.js
+1
-1
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/package.json
...i-id-pages/uniCloud/cloudfunctions/uni-id-co/package.json
+6
-2
uni_modules/uni-id/changelog.md
uni_modules/uni-id/changelog.md
+2
-0
uni_modules/uni-id/package.json
uni_modules/uni-id/package.json
+11
-11
uni_modules/uni-id/uni-id.zip
uni_modules/uni-id/uni-id.zip
+0
-0
uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js
...les/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js
+1
-1
uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json
...uni-id/uniCloud/cloudfunctions/common/uni-id/package.json
+3
-2
uni_modules/uni-list/changelog.md
uni_modules/uni-list/changelog.md
+6
-0
uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue
...dules/uni-list/components/uni-list-chat/uni-list-chat.vue
+39
-6
uni_modules/uni-list/components/uni-list-item/uni-list-item.vue
...dules/uni-list/components/uni-list-item/uni-list-item.vue
+42
-9
uni_modules/uni-list/components/uni-list/uni-list.vue
uni_modules/uni-list/components/uni-list/uni-list.vue
+102
-87
uni_modules/uni-list/package.json
uni_modules/uni-list/package.json
+4
-7
uni_modules/uni-nav-bar/changelog.md
uni_modules/uni-nav-bar/changelog.md
+6
-0
uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue
...odules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue
+13
-4
uni_modules/uni-nav-bar/package.json
uni_modules/uni-nav-bar/package.json
+4
-7
uni_modules/uni-scss/manifest.json
uni_modules/uni-scss/manifest.json
+0
-95
uni_modules/uni-ui/changelog.md
uni_modules/uni-ui/changelog.md
+5
-0
uni_modules/uni-ui/package.json
uni_modules/uni-ui/package.json
+1
-1
未找到文件。
uni_modules/Sansnn-uQRCode/changelog.md
浏览文件 @
cf250a73
## 3.5.1(2022-08-11)
v3.5.1
修复vue3引入报错;
修复vue导出临时文件失败;
修复在其他dom元素更新时,可能导致二维码重新渲染;
修复size重新赋值导致组件偏移、闪烁。
## 3.6.5(2022-10-14)
修复组件size值为string类型时,调用toTempFilePath导出临时文件路径失败;
优化组件加载本地图片。
uni_modules/Sansnn-uQRCode/components/u-qrcode/u-qrcode.vue
浏览文件 @
cf250a73
此差异已折叠。
点击以展开。
uni_modules/Sansnn-uQRCode/components/uqrcode/uqrcode.vue
浏览文件 @
cf250a73
此差异已折叠。
点击以展开。
uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/package.json
浏览文件 @
cf250a73
{
"name"
:
"uqrcode"
,
"version"
:
"3.
5.1
"
,
"version"
:
"3.
6.0
"
,
"description"
:
""
,
"main"
:
"uqrcode.js"
,
"scripts"
:
{
...
...
uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js
浏览文件 @
cf250a73
此差异已折叠。
点击以展开。
uni_modules/Sansnn-uQRCode/package.json
浏览文件 @
cf250a73
{
"id"
:
"Sansnn-uQRCode"
,
"displayName"
:
"uQRCode 全端二维码生成插件 支持nvue 支持nodejs服务端"
,
"version"
:
"3.
5.1
"
,
"version"
:
"3.
6.5
"
,
"description"
:
"uQRCode是一款基于Javascript环境开发的二维码生成插件,适用所有Javascript运行环境的前端应用和Node.js。"
,
"keywords"
:
[
"uQRCode"
,
"二维码"
,
"uQRCode"
,
"qrcode"
,
"qr"
],
"repository"
:
"https://github.com/Sansnn/uQRCode"
,
"engines"
:
{
},
"dcloudext"
:
{
"dcloudext"
:
{
"category"
:
[
"JS SDK"
,
"通用 SDK"
],
"sale"
:
{
"regular"
:
{
"price"
:
"0.00"
...
...
@@ -29,8 +33,7 @@
"data"
:
"无"
,
"permissions"
:
"无"
},
"npmurl"
:
"https://www.npmjs.com/package/uqrcodejs"
,
"type"
:
"sdk-js"
"npmurl"
:
"https://www.npmjs.com/package/uqrcodejs"
},
"uni_modules"
:
{
"dependencies"
:
[],
...
...
uni_modules/Sansnn-uQRCode/readme.md
浏览文件 @
cf250a73
...
...
@@ -6,6 +6,24 @@
欢迎加入群聊【uQRCode交流群】:
[
695070434
](
https://jq.qq.com/?_wv=1027&k=JRjzDqiw
)
。
# 设计器
uQRCode发布了配套的可视化设计器,可根据自己喜好在设计器中设计二维码样式,一键生成配置代码复制到项目中,详情请在微信小程序搜索“柚子二维码”,或扫描下方小程序码体验。
![
uQRCode设计器
](
https://doc.uqrcode.cn/mp_weixin_code.jpg
)
## 设计器模板示例
![
uQRCode设计器
](
https://doc.uqrcode.cn/yz_1.png
)
![
uQRCode设计器
](
https://doc.uqrcode.cn/yz_2.png
)
![
uQRCode设计器
](
https://doc.uqrcode.cn/yz_3.png
)
![
uQRCode设计器
](
https://doc.uqrcode.cn/yz_4.png
)
![
uQRCode设计器
](
https://doc.uqrcode.cn/yz_5.png
)
![
uQRCode设计器
](
https://doc.uqrcode.cn/yz_6.png
)
![
uQRCode设计器
](
https://doc.uqrcode.cn/yz_7.png
)
![
uQRCode设计器
](
https://doc.uqrcode.cn/yz_8.png
)
![
uQRCode设计器
](
https://doc.uqrcode.cn/yz_9.png
)
# 快速上手
> 在`uni-app`中,我们更推荐使用组件方式来生成二维码,组件方式大大提高了页面的可读性以及避开了一些平台容易出问题的地方,当组件无法满足需求的时候,再考虑切换成原生方式。
...
...
@@ -20,7 +38,7 @@ uni-app插件市场地址:[https://ext.dcloud.net.cn/plugin?id=1287](https://e
## 原生方式
原生方式仅需要获取
`uqrcode.js`
文件便可使用。
原生方式仅需要获取
`uqrcode.js`
文件便可使用。
详细配置请移步到:文档 >
[
原生
](
https://doc.uqrcode.cn/document/native.html
)
。
### 安装
...
...
@@ -38,12 +56,18 @@ npm install @uqrcode/js
-
通过
`import`
引入。
```
javascript
import
UQRCode
from
'
uqrcode
'
;
// npm安装
import
UQRCode
from
'
uqrcodejs
'
;
// npm install uqrcodejs
// 或者
import
UQRCode
from
'
@uqrcode/js
'
;
// npm install @uqrcode/js
```
-
`Node.js`
通过
`require`
引入。
```
javascript
const
UQRCode
=
require
(
'
uqrcode
'
);
// npm安装
const
UQRCode
=
require
(
'
uqrcodejs
'
);
// npm install uqrcodejs
// 或者
const
UQRCode
=
require
(
'
@uqrcode/js
'
);
// npm install @uqrcode/js
```
-
原生浏览器环境,在js脚本加载时添加到
`window`
。
...
...
@@ -54,8 +78,6 @@ const UQRCode = require('uqrcode');
</script>
```
> `vue3`推荐使用`npm`安装,非`npm`安装直接引入`uqrcode.js`文件如果出现报错:`SyntaxError: The requested module 'uqrcode.js' does not provide an export named 'default'`,在`uqrcode.js`文件中最后一行添加`export default uQRCode`即可。
### 简单用法
`uQRCode`
基于
`Canvas API`
封装了一套方法,建议开发者使用
`canvas`
生成,一键调用,非常方便。以下是示例:
...
...
@@ -250,7 +272,7 @@ aEle.remove(); // 下载之后把创建的元素删除
### 安装
通过uni-app插件市场地址安装:
[
https://ext.dcloud.net.cn/plugin?id=1287
](
https://ext.dcloud.net.cn/plugin?id=1287
)
。
通过uni-app插件市场地址安装:
[
https://ext.dcloud.net.cn/plugin?id=1287
](
https://ext.dcloud.net.cn/plugin?id=1287
)
。
详细配置请移步到:文档 >
[
uni-app组件
](
https://doc.uqrcode.cn/document/uni-app.html
)
。
### 引入
...
...
@@ -258,15 +280,15 @@ uni-app默认为easycom模式,可直接键入`<uqrcode>`标签。
### 简单用法
安装
`uqrcode`
组件后,在
`template`
中键入
`<uqrcode/>`
。设置
`ref`
属性可使用组件内部方法,
`canvas-id`
属性为组件内部的canvas组件标识,
`value`
属性为二维码生成对应内容。
安装
`uqrcode`
组件后,在
`template`
中键入
`<uqrcode/>`
。设置
`ref`
属性可使用组件内部方法,
`canvas-id`
属性为组件内部的canvas组件标识,
`value`
属性为二维码生成对应内容
,
`options`
为配置选项,可配置二维码样式,绘制Logo等,详见:
[
options
](
https://doc.uqrcode.cn/document/uni-app.html#options
)
。
```
html
<uqrcode
ref=
"
qrcode"
canvas-id=
"qrcode"
value=
"https://doc.uqrcode.cn
"
></uqrcode>
<uqrcode
ref=
"
uqrcode"
canvas-id=
"qrcode"
value=
"https://doc.uqrcode.cn"
:options=
"{ margin: 10 }
"
></uqrcode>
```
### 导出临时文件路径
为了保证方法调用成功,请在
[
complete
](
/document/uni-app.md
#complete
)
事件返回
`success=true`
后调用。
为了保证方法调用成功,请在
[
complete
](
https://doc.uqrcode.cn/document/uni-app.html
#complete
)
事件返回
`success=true`
后调用。
```
javascript
// uqrcode为组件的ref名称
...
...
@@ -279,7 +301,7 @@ this.$refs.uqrcode.toTempFilePath({
### 保存二维码到本地相册
为了保证方法调用成功,请在
[
complete
](
/document/uni-app.md
#complete
)
事件返回
`success=true`
后调用。
为了保证方法调用成功,请在
[
complete
](
https://doc.uqrcode.cn/document/uni-app.html
#complete
)
事件返回
`success=true`
后调用。
```
javascript
// uqrcode为组件的ref名称
...
...
@@ -293,4 +315,4 @@ this.$refs.uqrcode.save({
});
```
## 更多配置说明请前往官方文档查看:[https://doc.uqrcode.cn](https://doc.uqrcode.cn)。
\ No newline at end of file
## 更多使用说明请前往官方文档查看:[https://doc.uqrcode.cn](https://doc.uqrcode.cn)。
\ No newline at end of file
uni_modules/uni-captcha/components/uni-popup-captcha/uni-popup-captcha.vue
浏览文件 @
cf250a73
...
...
@@ -14,63 +14,63 @@
</
template
>
<
script
>
export
default
{
data
()
{
return
{
focus
:
false
}
},
props
:
{
modelValue
:
String
,
value
:
String
,
scene
:
{
type
:
String
,
default
()
{
return
""
}
},
title
:
{
type
:
String
,
default
()
{
return
""
}
},
},
computed
:{
val
:{
get
(){
return
this
.
value
||
this
.
modelValue
},
set
(
value
){
// console.log(value);
// TODO 兼容 vue2
// #ifdef VUE2
this
.
$emit
(
'
input
'
,
value
);
// #endif
// TODO 兼容 vue3
// #ifdef VUE3
this
.
$emit
(
'
update:modelValue
'
,
value
)
// #endif
}
}
export
default
{
data
()
{
return
{
focus
:
false
}
},
props
:
{
modelValue
:
String
,
value
:
String
,
scene
:
{
type
:
String
,
default
()
{
return
""
}
},
title
:
{
type
:
String
,
default
()
{
return
""
}
},
},
computed
:{
val
:{
get
(){
return
this
.
value
||
this
.
modelValue
},
set
(
value
){
// console.log(value);
// TODO 兼容 vue2
// #ifdef VUE2
this
.
$emit
(
'
input
'
,
value
);
// #endif
// TODO 兼容 vue3
// #ifdef VUE3
this
.
$emit
(
'
update:modelValue
'
,
value
)
// #endif
}
}
},
methods
:
{
open
()
{
this
.
focus
=
true
open
()
{
this
.
focus
=
true
this
.
val
=
""
this
.
$refs
.
popup
.
open
()
},
close
()
{
this
.
focus
=
false
close
()
{
this
.
focus
=
false
this
.
$refs
.
popup
.
close
()
},
confirm
()
{
if
(
!
this
.
val
||
this
.
val
.
length
<
4
){
return
uni
.
showToast
({
title
:
'
请填写验证码
'
,
icon
:
'
none
'
});
confirm
()
{
if
(
!
this
.
val
||
this
.
val
.
length
<
4
){
return
uni
.
showToast
({
title
:
'
请填写验证码
'
,
icon
:
'
none
'
});
}
this
.
close
()
this
.
$emit
(
'
confirm
'
)
...
...
@@ -119,22 +119,22 @@
.button-box
{
height
:
44px
;
border-top
:
solid
1px
#eee
;
flex-direction
:
row
;
align-items
:
center
;
border-top
:
solid
1px
#eee
;
flex-direction
:
row
;
align-items
:
center
;
justify-content
:
space-around
;
}
.button-box
,
.btn
{
height
:
44px
;
line-height
:
44px
;
}
.button-box
.btn
{
flex
:
1
;
margin
:
1px
;
text-align
:
center
;
}
.button-box
.confirm
{
color
:
#007aff
;
border-left
:
solid
1px
#eee
;
}
.button-box
,
.btn
{
height
:
44px
;
line-height
:
44px
;
}
.button-box
.btn
{
flex
:
1
;
margin
:
1px
;
text-align
:
center
;
}
.button-box
.confirm
{
color
:
#007aff
;
border-left
:
solid
1px
#eee
;
}
</
style
>
</
style
>
uni_modules/uni-captcha/uniCloud/cloudfunctions/uni-captcha-co/index.obj.js
浏览文件 @
cf250a73
...
...
@@ -29,4 +29,4 @@ module.exports = {
uniPlatform
:
platform
})
}
}
}
uni_modules/uni-config-center/changelog.md
浏览文件 @
cf250a73
## 0.0.3(2022-11-11)
-
修复 config 方法获取根节点为数组格式配置时错误的转化为了对象的Bug
## 0.0.2(2021-04-16)
-
修改插件package信息
## 0.0.1(2021-03-15)
...
...
uni_modules/uni-config-center/package.json
浏览文件 @
cf250a73
{
"id"
:
"uni-config-center"
,
"displayName"
:
"uni-config-center"
,
"version"
:
"0.0.
2
"
,
"version"
:
"0.0.
3
"
,
"description"
:
"uniCloud 配置中心"
,
"keywords"
:
[
"配置"
,
...
...
@@ -11,11 +11,7 @@
"engines"
:
{
"HBuilderX"
:
"^3.1.0"
},
"dcloudext"
:
{
"category"
:
[
"uniCloud"
,
"云函数模板"
],
"dcloudext"
:
{
"sale"
:
{
"regular"
:
{
"price"
:
"0.00"
...
...
@@ -32,7 +28,8 @@
"data"
:
"无"
,
"permissions"
:
"无"
},
"npmurl"
:
""
"npmurl"
:
""
,
"type"
:
"unicloud-template-function"
},
"directories"
:
{
"example"
:
"../../../scripts/dist"
...
...
@@ -73,8 +70,12 @@
"快应用"
:
{
"华为"
:
"u"
,
"联盟"
:
"u"
},
"Vue"
:
{
"vue2"
:
"y"
,
"vue3"
:
"u"
}
}
}
}
}
}
uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js
浏览文件 @
cf250a73
此差异已折叠。
点击以展开。
uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/package.json
浏览文件 @
cf250a73
{
"name"
:
"uni-config-center"
,
"version"
:
"0.0.
2
"
,
"version"
:
"0.0.
3
"
,
"description"
:
"配置中心"
,
"main"
:
"index.js"
,
"keywords"
:
[],
...
...
uni_modules/uni-easyinput/changelog.md
浏览文件 @
cf250a73
## 1.1.3(2022-09-22)
-
修复,引入 uni.scss 引入默认主题色报错的问题
## 1.1.2(2022-09-22)
-
增加主题色 primaryColor 配置选项
## 1.1.1(2022-09-19)
-
修复,输入后回车,change 事件触发两次,
[
详情
](
https://ask.dcloud.net.cn/question/152149
)
## 1.1.4(2022-10-27)
-
修复 props 中背景颜色无默认值的bug
## 1.1.0(2022-06-30)
-
新增 在 uni-forms 1.4.0 中使用可以在 blur 时校验内容
-
新增 clear 事件,点击右侧叉号图标触发
-
新增 change 事件 ,仅在输入框失去焦点或用户按下回车时触发
-
优化 组件样式,组件获取焦点时高亮显示,图标颜色调整等
-
## 1.0.5(2022-06-07)
-
优化 clearable 显示策略
## 1.0.4(2022-06-07)
-
优化 clearable 显示策略
## 1.0.3(2022-05-20)
-
修复 关闭图标某些情况下无法取消的bug
-
修复 关闭图标某些情况下无法取消的 bug
## 1.0.2(2022-04-12)
-
修复 默认值不生效的bug
-
修复 默认值不生效的 bug
## 1.0.1(2022-04-02)
-
修复 value不能为0的bug
-
修复 value 不能为 0 的 bug
## 1.0.0(2021-11-19)
-
优化 组件UI,并提供设计资源,详见:
[
https://uniapp.dcloud.io/component/uniui/resource
](
https://uniapp.dcloud.io/component/uniui/resource
)
-
优化 组件 UI,并提供设计资源,详见:
[
https://uniapp.dcloud.io/component/uniui/resource
](
https://uniapp.dcloud.io/component/uniui/resource
)
-
文档迁移,详见:
[
https://uniapp.dcloud.io/component/uniui/uni-easyinput
](
https://uniapp.dcloud.io/component/uniui/uni-easyinput
)
## 0.1.4(2021-08-20)
-
修复 在 uni-forms 的动态表单中默认值校验不通过的 bug
## 0.1.3(2021-08-11)
-
修复 在 uni-forms 中重置表单,错误信息无法清除的问题
## 0.1.2(2021-07-30)
-
优化 vue3下事件警告的问题
-
优化 vue3 下事件警告的问题
## 0.1.1
-
优化 errorMessage 属性支持 Boolean 类型
## 0.1.0(2021-07-13)
-
组件兼容 vue3,如何创建vue3项目,详见
[
uni-app 项目支持 vue3 介绍
](
https://ask.dcloud.net.cn/article/37834
)
-
组件兼容 vue3,如何创建 vue3 项目,详见
[
uni-app 项目支持 vue3 介绍
](
https://ask.dcloud.net.cn/article/37834
)
## 0.0.16(2021-06-29)
-
修复 confirmType 属性(仅 type="text" 生效)导致多行文本框无法换行的 bug
## 0.0.15(2021-06-21)
-
修复 passwordIcon 属性拼写错误的 bug
## 0.0.14(2021-06-18)
-
新增 passwordIcon 属性,当type=password时是否显示小眼睛图标
-
新增 passwordIcon 属性,当 type=password 时是否显示小眼睛图标
-
修复 confirmType 属性不生效的问题
## 0.0.13(2021-06-04)
-
修复 disabled 状态可清出内容的 bug
## 0.0.12(2021-05-12)
-
新增 组件示例地址
## 0.0.11(2021-05-07)
-
修复 input-border 属性不生效的问题
## 0.0.10(2021-04-30)
-
修复 ios 遮挡文字、显示一半的问题
## 0.0.9(2021-02-05)
-
调整为uni_modules目录规范
-
调整为 uni_modules 目录规范
-
优化 兼容 nvue 页面
uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue
浏览文件 @
cf250a73
此差异已折叠。
点击以展开。
uni_modules/uni-easyinput/package.json
浏览文件 @
cf250a73
{
"id"
:
"uni-easyinput"
,
"displayName"
:
"uni-easyinput 增强输入框"
,
"version"
:
"1.1.
3
"
,
"version"
:
"1.1.
4
"
,
"description"
:
"Easyinput 组件是对原生input组件的增强"
,
"keywords"
:
[
"uni-ui"
,
...
...
uni_modules/uni-id-pages/changelog.md
浏览文件 @
cf250a73
## 1.0.26(2022-10-18)
-
修复 uni-id-pages 导入时异常的Bug
## 1.0.30(2022-11-11)
-
uni-id-co 修复 用户只有openid时绑定微信/QQ报错
## 1.0.29(2022-11-10)
-
uni-id-co 支持URL化方式请求
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#adapter-http
)
## 1.0.28(2022-11-09)
-
uni-id-co 升级密码加密算法,支持hmac-sha256加密
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id-summary.html#password-safe
)
-
uni-id-co 新增 开发者可以自定义密码加密规则
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id-summary.html#custom-password-encrypt
)
-
uni-id-co 新增 支持将其他系统用户迁移至uni-id
[
详情
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id-summary.html#move-users-to-uni-id
)
## 1.0.27(2022-10-26)
-
uni-id-co 新增 secureNetworkHandshakeByWeixin 接口,用于建立和微信小程序的安全网络连接
## 1.0.26(2022-10-18)
-
修复 uni-id-pages 导入时异常的Bug
## 1.0.25(2022-10-14)
-
uni-id-co 增加 微信授权手机号登录方式
[
文档
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#login-by-weixin-mobile
)
-
uni-id-co 增加 解绑第三方平台账号
[
文档
](
https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#unbind-third-account
)
...
...
uni_modules/uni-id-pages/init.js
浏览文件 @
cf250a73
...
...
@@ -34,7 +34,7 @@ export default async function() {
google
:
'
google
'
,
alipay
:
'
alipay
'
,
apple
:
"
apple
"
}
}
//遍历客户端配置的登录方式,与服务端比对。并在错误时抛出错误提示
let
list
=
loginTypes
.
filter
(
type
=>
!
supportedLoginType
.
includes
(
data
[
type
]))
if
(
list
.
length
)
{
...
...
@@ -55,8 +55,7 @@ export default async function() {
})
}
// #endif
/* 注释此代码块原因:与uni-starter中的appinit逻辑一致
//3. 绑定clientDB错误事件
// clientDB对象
const
db
=
uniCloud
.
database
()
...
...
@@ -73,9 +72,9 @@ export default async function() {
}
// 解绑clientDB错误事件
//db.off('error', onDBError)
*/
//4. 同步客户端push_clientid至uni-id-device表
//4. 同步客户端push_clientid至device表
if
(
uniCloud
.
onRefreshToken
)
{
uniCloud
.
onRefreshToken
(()
=>
{
console
.
log
(
'
onRefreshToken
'
);
...
...
@@ -91,10 +90,10 @@ export default async function() {
console
.
log
(
'
getPushClientId
'
,
res
);
},
fail
(
e
)
{
console
.
error
(
e
,
'
更多详情:https://uniapp.dcloud.net.cn/uniCloud/uni-starter.html#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9
'
)
console
.
log
(
e
)
}
})
}
})
}
}
}
uni_modules/uni-id-pages/package.json
浏览文件 @
cf250a73
{
"id"
:
"uni-id-pages"
,
"displayName"
:
"uni-id-pages"
,
"version"
:
"1.0.
26
"
,
"version"
:
"1.0.
30
"
,
"description"
:
"云端一体简单、统一、可扩展的用户中心页面模版"
,
"keywords"
:
[
"用户管理"
,
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/common/constants.js
浏览文件 @
cf250a73
...
...
@@ -6,6 +6,8 @@ const verifyCollectionName = 'opendb-verify-codes'
const
verifyCollection
=
db
.
collection
(
verifyCollectionName
)
const
deviceCollectionName
=
'
uni-id-device
'
const
deviceCollection
=
db
.
collection
(
deviceCollectionName
)
const
openDataCollectionName
=
'
opendb-open-data
'
const
openDataCollection
=
db
.
collection
(
openDataCollectionName
)
const
USER_IDENTIFIER
=
{
username
:
'
username
'
,
...
...
@@ -78,6 +80,7 @@ module.exports = {
userCollection
,
verifyCollection
,
deviceCollection
,
openDataCollection
,
USER_IDENTIFIER
,
USER_STATUS
,
CAPTCHA_SCENE
,
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/common/error.js
浏览文件 @
cf250a73
...
...
@@ -35,7 +35,8 @@ const ERROR = {
UNBIND_NOT_SUPPORTED
:
'
uni-id-unbind-not-supported
'
,
UNBIND_UNIQUE_LOGIN
:
'
uni-id-unbind-unique-login
'
,
UNBIND_PASSWORD_NOT_EXISTS
:
'
uni-id-unbind-password-not-exists
'
,
UNBIND_MOBILE_NOT_EXISTS
:
'
uni-id-unbind-mobile-not-exists
'
UNBIND_MOBILE_NOT_EXISTS
:
'
uni-id-unbind-mobile-not-exists
'
,
UNSUPPORTED_REQUEST
:
'
uni-id-unsupported-request
'
}
function
isUniIdError
(
errCode
)
{
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/common/universal.js
0 → 100644
浏览文件 @
cf250a73
const
{
ERROR
}
=
require
(
'
./error
'
)
function
getHttpClientInfo
()
{
const
requestId
=
this
.
getUniCloudRequestId
()
const
{
clientIP
,
userAgent
,
source
,
secretType
=
'
none
'
}
=
this
.
getClientInfo
()
const
{
clientInfo
=
{}
}
=
JSON
.
parse
(
this
.
getHttpInfo
().
body
)
return
{
...
clientInfo
,
clientIP
,
userAgent
,
source
,
secretType
,
requestId
}
}
function
getHttpUniIdToken
()
{
const
{
uniIdToken
=
''
}
=
JSON
.
parse
(
this
.
getHttpInfo
().
body
)
return
uniIdToken
}
function
verifyHttpMethod
()
{
const
{
headers
,
httpMethod
}
=
this
.
getHttpInfo
()
if
(
!
/^application
\/
json/
.
test
(
headers
[
'
content-type
'
])
||
httpMethod
.
toUpperCase
()
!==
'
POST
'
)
{
throw
{
errCode
:
ERROR
.
UNSUPPORTED_REQUEST
,
errMsg
:
'
unsupported request
'
}
}
}
function
universal
()
{
if
(
this
.
getClientInfo
().
source
===
'
http
'
)
{
verifyHttpMethod
.
call
(
this
)
this
.
getParams
()[
0
]
=
JSON
.
parse
(
this
.
getHttpInfo
().
body
).
params
this
.
getUniversalClientInfo
=
getHttpClientInfo
.
bind
(
this
)
this
.
getUniversalUniIdToken
=
getHttpUniIdToken
.
bind
(
this
)
}
else
{
this
.
getUniversalClientInfo
=
this
.
getClientInfo
this
.
getUniversalUniIdToken
=
this
.
getUniIdToken
}
}
module
.
exports
=
universal
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/index.obj.js
浏览文件 @
cf250a73
...
...
@@ -12,6 +12,7 @@ const {
isUniIdError
}
=
require
(
'
./common/error
'
)
const
middleware
=
require
(
'
./middleware/index
'
)
const
universal
=
require
(
'
./common/universal
'
)
const
{
registerAdmin
,
...
...
@@ -63,7 +64,8 @@ const {
}
=
require
(
'
./module/verify/index
'
)
const
{
refreshToken
,
setPushCid
setPushCid
,
secureNetworkHandshakeByWeixin
}
=
require
(
'
./module/utils/index
'
)
const
{
getInvitedUser
,
...
...
@@ -80,7 +82,10 @@ const {
module
.
exports
=
{
async
_before
()
{
const
clientInfo
=
this
.
getClientInfo
()
// 支持 callFunction 与 URL化
universal
.
call
(
this
)
const
clientInfo
=
this
.
getUniversalClientInfo
()
/**
* 检查clientInfo,无appId和uniPlatform时本云对象无法正常运行
* 此外需要保证用到的clientInfo字段均经过类型检查
...
...
@@ -576,5 +581,9 @@ module.exports = {
* @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#unbind-apple
* @returns
*/
unbindApple
unbindApple
,
/**
* 安全网络握手,目前仅处理微信小程序安全网络握手
*/
secureNetworkHandshakeByWeixin
}
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lang/en.js
浏览文件 @
cf250a73
...
...
@@ -40,7 +40,8 @@ const sentence = {
'
uni-id-unbind-failed
'
:
'
Please bind first and then unbind
'
,
'
uni-id-unbind-not-supported
'
:
'
Unbinding is not supported
'
,
'
uni-id-unbind-mobile-not-exists
'
:
'
This is the only way to login at the moment, please bind your phone number and then try to unbind
'
,
'
uni-id-unbind-password-not-exists
'
:
'
Please set a password first
'
'
uni-id-unbind-password-not-exists
'
:
'
Please set a password first
'
,
'
uni-id-unsupported-request
'
:
'
Unsupported request
'
}
module
.
exports
=
{
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lang/zh-hans.js
浏览文件 @
cf250a73
...
...
@@ -40,7 +40,8 @@ const sentence = {
'
uni-id-unbind-failed
'
:
'
请先绑定后再解绑
'
,
'
uni-id-unbind-not-supported
'
:
'
不支持解绑
'
,
'
uni-id-unbind-mobile-not-exists
'
:
'
这是当前唯一登录方式,请绑定手机号后再尝试解绑
'
,
'
uni-id-unbind-password-not-exists
'
:
'
请先设置密码在尝试解绑
'
'
uni-id-unbind-password-not-exists
'
:
'
请先设置密码在尝试解绑
'
,
'
uni-id-unsupported-request
'
:
'
不支持的请求方式
'
}
module
.
exports
=
{
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/captcha.js
浏览文件 @
cf250a73
...
...
@@ -39,7 +39,7 @@ async function getNeedCaptcha ({
const
{
data
:
recentRecord
}
=
await
uniIdLogCollection
.
where
({
ip
:
this
.
getClientInfo
().
clientIP
,
ip
:
this
.
get
Universal
ClientInfo
().
clientIP
,
...
userIdentifier
,
type
,
create_date
:
dbCmd
.
gt
(
now
-
limitDuration
)
...
...
@@ -61,7 +61,7 @@ async function verifyCaptcha (params = {}) {
}
}
const
payload
=
await
this
.
uniCaptcha
.
verify
({
deviceId
:
this
.
getClientInfo
().
deviceId
,
deviceId
:
this
.
get
Universal
ClientInfo
().
deviceId
,
captcha
,
scene
})
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/login.js
浏览文件 @
cf250a73
...
...
@@ -17,7 +17,7 @@ async function realPreLogin (params = {}) {
const
{
user
}
=
params
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
const
userMatched
=
await
findUser
({
userQuery
:
user
,
authorizedApp
:
appId
...
...
@@ -66,7 +66,7 @@ async function preLoginWithPassword (params = {}) {
}
=
this
.
config
const
{
clientIP
}
=
this
.
getClientInfo
()
}
=
this
.
get
Universal
ClientInfo
()
// 根据ip地址,密码错误次数过多,锁定登录
let
loginIPLimit
=
userRecord
.
login_ip_limit
||
[]
// 清理无用记录
...
...
@@ -78,6 +78,8 @@ async function preLoginWithPassword (params = {}) {
}
}
const
passwordUtils
=
new
PasswordUtils
({
userRecord
,
clientInfo
:
this
.
getUniversalClientInfo
(),
passwordSecret
:
this
.
config
.
passwordSecret
})
...
...
@@ -85,9 +87,7 @@ async function preLoginWithPassword (params = {}) {
success
:
checkPasswordSuccess
,
refreshPasswordInfo
}
=
passwordUtils
.
checkUserPassword
({
password
,
passwordHash
:
userRecord
.
password
,
passwordSecretVersion
:
userRecord
.
password_secret_version
password
})
if
(
!
checkPasswordSuccess
)
{
// 更新用户ip对应的密码错误记录
...
...
@@ -179,7 +179,7 @@ async function postLogin (params = {}) {
const
{
clientIP
,
uniIdToken
}
=
this
.
getClientInfo
()
}
=
this
.
get
Universal
ClientInfo
()
const
uid
=
user
.
_id
const
updateData
=
{
last_login_date
:
Date
.
now
(),
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/logout.js
浏览文件 @
cf250a73
...
...
@@ -5,11 +5,11 @@ const {
userCollection
}
=
require
(
'
../../common/constants
'
)
async
function
logout
()
{
async
function
logout
()
{
const
{
uniIdToken
,
deviceId
}
=
this
.
getClientInfo
()
}
=
this
.
get
Universal
ClientInfo
()
const
{
uid
}
=
await
this
.
uniIdCommon
.
checkToken
(
...
...
@@ -44,4 +44,4 @@ async function logout() {
module
.
exports
=
{
logout
}
\ No newline at end of file
}
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/password.js
浏览文件 @
cf250a73
...
...
@@ -2,37 +2,160 @@ const {
getType
}
=
require
(
'
../../common/utils
'
)
const
crypto
=
require
(
'
crypto
'
)
const
createConfig
=
require
(
'
uni-config-center
'
)
const
shareConfig
=
createConfig
({
pluginId
:
'
uni-id
'
})
let
customPassword
=
{}
if
(
shareConfig
.
hasFile
(
'
custom-password.js
'
))
{
customPassword
=
shareConfig
.
requireFile
(
'
custom-password.js
'
)
||
{}
}
const
passwordAlgorithmMap
=
{
UNI_ID_HMAC_SHA1
:
'
hmac-sha1
'
,
UNI_ID_HMAC_SHA256
:
'
hmac-sha256
'
,
UNI_ID_CUSTOM
:
'
custom
'
}
const
passwordAlgorithmKeyMap
=
Object
.
keys
(
passwordAlgorithmMap
).
reduce
((
res
,
item
)
=>
{
res
[
passwordAlgorithmMap
[
item
]]
=
item
return
res
},
{})
const
passwordExtMethod
=
{
[
passwordAlgorithmMap
.
UNI_ID_HMAC_SHA1
]:
{
verify
({
password
})
{
const
{
password_secret_version
:
passwordSecretVersion
}
=
this
.
userRecord
const
passwordSecret
=
this
.
_getSecretByVersion
({
version
:
passwordSecretVersion
})
const
{
passwordHash
}
=
this
.
encrypt
({
password
,
passwordSecret
})
return
passwordHash
===
this
.
userRecord
.
password
},
encrypt
({
password
,
passwordSecret
})
{
const
{
value
:
secret
,
version
}
=
passwordSecret
const
hmac
=
crypto
.
createHmac
(
'
sha1
'
,
secret
.
toString
(
'
ascii
'
))
hmac
.
update
(
password
)
return
{
passwordHash
:
hmac
.
digest
(
'
hex
'
),
version
}
}
},
[
passwordAlgorithmMap
.
UNI_ID_HMAC_SHA256
]:
{
verify
({
password
})
{
const
parse
=
this
.
_parsePassword
()
const
passwordHash
=
crypto
.
createHmac
(
parse
.
algorithm
,
parse
.
salt
).
update
(
password
).
digest
(
'
hex
'
)
return
passwordHash
===
parse
.
hash
},
encrypt
({
password
,
passwordSecret
})
{
const
{
version
}
=
passwordSecret
// 默认使用 sha256 加密算法
const
salt
=
crypto
.
randomBytes
(
10
).
toString
(
'
hex
'
)
const
sha256Hash
=
crypto
.
createHmac
(
passwordAlgorithmMap
.
UNI_ID_HMAC_SHA256
.
substring
(
5
),
salt
).
update
(
password
).
digest
(
'
hex
'
)
const
algorithm
=
passwordAlgorithmKeyMap
[
passwordAlgorithmMap
.
UNI_ID_HMAC_SHA256
]
// B 为固定值,对应 PasswordMethodMaps 中的 sha256算法
// hash 格式 $[PasswordMethodFlagMapsKey]$[salt size]$[salt][Hash]
const
passwordHash
=
`$
${
algorithm
}
$
${
salt
.
length
}
$
${
salt
}${
sha256Hash
}
`
return
{
passwordHash
,
version
}
}
},
[
passwordAlgorithmMap
.
UNI_ID_CUSTOM
]:
{
verify
({
password
,
passwordSecret
})
{
if
(
!
customPassword
.
verifyPassword
)
throw
new
Error
(
'
verifyPassword method not found in custom password file
'
)
// return true or false
return
customPassword
.
verifyPassword
({
password
,
passwordSecret
,
userRecord
:
this
.
userRecord
,
clientInfo
:
this
.
clientInfo
})
},
encrypt
({
password
,
passwordSecret
})
{
if
(
!
customPassword
.
encryptPassword
)
throw
new
Error
(
'
encryptPassword method not found in custom password file
'
)
const
PasswordHashMethod
=
{
'
hmac-sha1
'
:
function
(
content
,
secret
)
{
const
hmac
=
crypto
.
createHmac
(
'
sha1
'
,
secret
.
toString
(
'
ascii
'
))
hmac
.
update
(
content
)
return
hmac
.
digest
(
'
hex
'
)
// return object<{passwordHash: string, version: number}>
return
customPassword
.
encryptPassword
({
password
,
passwordSecret
,
clientInfo
:
this
.
clientInfo
})
}
}
}
class
PasswordUtils
{
constructor
({
userRecord
=
{},
clientInfo
,
passwordSecret
}
=
{})
{
const
passwordSecretType
=
getType
(
passwordSecret
)
if
(
passwordSecretType
===
'
array
'
)
{
this
.
passwordSecret
=
passwordSecret
.
sort
((
a
,
b
)
=>
{
return
a
.
version
-
b
.
version
if
(
!
clientInfo
)
throw
new
Error
(
'
Invalid clientInfo
'
)
if
(
!
passwordSecret
)
throw
new
Error
(
'
Invalid password secret
'
)
this
.
clientInfo
=
clientInfo
this
.
userRecord
=
userRecord
this
.
passwordSecret
=
this
.
prePasswordSecret
(
passwordSecret
)
}
/**
* passwordSecret 预处理
* @param passwordSecret
* @return {*[]}
*/
prePasswordSecret
(
passwordSecret
)
{
const
newPasswordSecret
=
[]
if
(
getType
(
passwordSecret
)
===
'
string
'
)
{
newPasswordSecret
.
push
({
value
:
passwordSecret
,
type
:
passwordAlgorithmMap
.
UNI_ID_HMAC_SHA1
})
}
else
if
(
passwordSecretType
===
'
string
'
)
{
this
.
passwordSecret
=
[{
value
:
passwordSecret
}]
}
else
if
(
getType
(
passwordSecret
)
===
'
array
'
)
{
for
(
const
secret
of
passwordSecret
.
sort
((
a
,
b
)
=>
a
.
version
-
b
.
version
))
{
newPasswordSecret
.
push
({
...
secret
,
// 没有 type 设置默认 type hmac-sha1
type
:
secret
.
type
||
passwordAlgorithmMap
.
UNI_ID_HMAC_SHA1
})
}
}
else
{
throw
new
Error
(
'
Invalid password secret
'
)
}
return
newPasswordSecret
}
getSecretByVersion
(
params
=
{})
{
const
{
version
}
=
params
/**
* 获取最新加密密钥
* @return {*}
* @private
*/
_getLastestSecret
()
{
return
this
.
passwordSecret
[
this
.
passwordSecret
.
length
-
1
]
}
_getOldestSecret
()
{
return
this
.
passwordSecret
[
0
]
}
_getSecretByVersion
({
version
}
=
{})
{
if
(
!
version
&&
version
!==
0
)
{
return
this
.
getOldestSecret
()
return
this
.
_
getOldestSecret
()
}
if
(
this
.
passwordSecret
.
length
===
1
)
{
return
this
.
passwordSecret
[
0
]
...
...
@@ -40,77 +163,99 @@ class PasswordUtils {
return
this
.
passwordSecret
.
find
(
item
=>
item
.
version
===
version
)
}
getLastestSecret
()
{
return
this
.
passwordSecret
[
this
.
passwordSecret
.
length
-
1
]
/**
* 获取密码的验证/加密方法
* @param passwordSecret
* @return {*[]}
* @private
*/
_getPasswordExt
(
passwordSecret
)
{
const
ext
=
passwordExtMethod
[
passwordSecret
.
type
]
if
(
!
ext
)
{
throw
new
Error
(
`暂不支持
${
passwordSecret
.
type
}
类型的加密算法`
)
}
const
passwordExt
=
Object
.
create
(
null
)
for
(
const
key
in
ext
)
{
passwordExt
[
key
]
=
ext
[
key
].
bind
(
Object
.
assign
(
this
,
Object
.
keys
(
ext
).
reduce
((
res
,
item
)
=>
{
if
(
item
!==
key
)
{
res
[
item
]
=
ext
[
item
].
bind
(
this
)
}
return
res
},
{})))
}
return
passwordExt
}
getOldestSecret
()
{
return
this
.
passwordSecret
[
0
]
_parsePassword
()
{
const
[
algorithmKey
=
''
,
cost
=
0
,
hashStr
=
''
]
=
this
.
userRecord
.
password
.
split
(
'
$
'
).
filter
(
key
=>
key
)
const
algorithm
=
passwordAlgorithmMap
[
algorithmKey
]
?
passwordAlgorithmMap
[
algorithmKey
].
substring
(
5
)
:
null
const
salt
=
hashStr
.
substring
(
0
,
Number
(
cost
))
const
hash
=
hashStr
.
substring
(
Number
(
cost
))
return
{
algorithm
,
salt
,
hash
}
}
checkUserPassword
(
params
=
{})
{
const
{
/**
* 生成加密后的密码
* @param {String} password 密码
*/
generatePasswordHash
({
password
})
{
if
(
!
password
)
throw
new
Error
(
'
Invalid password
'
)
const
passwordSecret
=
this
.
_getLastestSecret
()
const
ext
=
this
.
_getPasswordExt
(
passwordSecret
)
const
{
passwordHash
,
version
}
=
ext
.
encrypt
({
password
,
passwordHash
:
passwordHashToCheck
,
passwordSecretVersion
,
autoRefresh
=
true
}
=
params
const
currentPasswordSecret
=
this
.
getSecretByVersion
({
version
:
passwordSecretVersion
passwordSecret
})
if
(
!
currentPasswordSecret
)
{
throw
new
Error
(
'
Invalid password version
'
)
return
{
passwordHash
,
version
}
const
{
value
:
passwordSecret
}
=
currentPasswordSecret
const
{
passwordHash
}
=
this
.
generatePasswordHash
({
password
,
passwordSecret
,
passwordSecretVersion
}
/**
* 密码校验
* @param {String} password
* @param {Boolean} autoRefresh
* @return {{refreshPasswordInfo: {version: *, passwordHash: *}, success: boolean}|{success: boolean}}
*/
checkUserPassword
({
password
,
autoRefresh
=
true
})
{
if
(
!
password
)
throw
new
Error
(
'
Invalid password
'
)
const
{
password_secret_version
:
passwordSecretVersion
}
=
this
.
userRecord
const
passwordSecret
=
this
.
_getSecretByVersion
({
version
:
passwordSecretVersion
})
if
(
passwordHashToCheck
!==
passwordHash
)
{
const
ext
=
this
.
_getPasswordExt
(
passwordSecret
)
const
success
=
ext
.
verify
({
password
,
passwordSecret
})
if
(
!
success
)
{
return
{
success
:
false
}
}
let
refreshPasswordInfo
if
(
autoRefresh
&&
passwordSecretVersion
!==
this
.
getLastestSecret
().
version
)
{
refreshPasswordInfo
=
this
.
generatePasswordHash
({
password
})
if
(
autoRefresh
&&
passwordSecretVersion
!==
this
.
_getLastestSecret
().
version
)
{
refreshPasswordInfo
=
this
.
generatePasswordHash
({
password
})
}
return
{
success
:
true
,
refreshPasswordInfo
}
}
generatePasswordHash
(
params
=
{})
{
let
{
password
,
passwordSecret
,
passwordSecretVersion
}
=
params
if
(
getType
(
password
)
!==
'
string
'
)
{
throw
new
Error
(
'
Invalid password
'
)
}
password
=
password
&&
password
.
trim
()
if
(
!
password
)
{
throw
new
Error
(
'
Invalid password
'
)
}
if
(
!
passwordSecret
)
{
const
lastestSecret
=
this
.
getLastestSecret
()
passwordSecret
=
lastestSecret
.
value
passwordSecretVersion
=
lastestSecret
.
version
}
return
{
passwordHash
:
PasswordHashMethod
[
'
hmac-sha1
'
](
password
,
passwordSecret
),
version
:
passwordSecretVersion
}
}
}
module
.
exports
=
PasswordUtils
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/qq.js
浏览文件 @
cf250a73
...
...
@@ -5,7 +5,7 @@ const {
ERROR
}
=
require
(
'
../../common/error
'
)
function
getQQPlatform
()
{
function
getQQPlatform
()
{
const
platform
=
this
.
clientPlatform
switch
(
platform
)
{
case
'
app
'
:
...
...
@@ -18,7 +18,7 @@ function getQQPlatform() {
}
}
async
function
saveQQUserKey
({
async
function
saveQQUserKey
({
openid
,
sessionKey
,
// QQ小程序用户sessionKey
accessToken
,
// App端QQ用户accessToken
...
...
@@ -26,7 +26,7 @@ async function saveQQUserKey({
}
=
{})
{
// 微信公众平台、开放平台refreshToken有效期均为30天(微信没有在网络请求里面返回30天这个值,务必注意未来可能出现调整,需及时更新此处逻辑)。
// 此前QQ开放平台有调整过accessToken的过期时间:[access_token有效期由90天缩短至30天](https://wiki.connect.qq.com/%E3%80%90qq%E4%BA%92%E8%81%94%E3%80%91access_token%E6%9C%89%E6%95%88%E6%9C%9F%E8%B0%83%E6%95%B4)
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
const
qqPlatform
=
getQQPlatform
.
call
(
this
)
const
keyObj
=
{
dcloudAppid
:
appId
,
...
...
@@ -45,9 +45,9 @@ async function saveQQUserKey({
await
this
.
uniOpenBridge
.
setUserAccessToken
(
keyObj
,
{
access_token
:
accessToken
,
access_token_expired
:
accessTokenExpired
},
accessTokenExpired
?
Math
.
floor
((
accessTokenExpired
-
Date
.
now
())
/
1000
)
:
30
*
24
*
60
*
60
},
accessTokenExpired
?
Math
.
floor
((
accessTokenExpired
-
Date
.
now
())
/
1000
)
:
30
*
24
*
60
*
60
)
break
default
:
...
...
@@ -55,7 +55,7 @@ async function saveQQUserKey({
}
}
function
generateQQCache
({
function
generateQQCache
({
sessionKey
,
// QQ小程序用户sessionKey
accessToken
,
// App端QQ用户accessToken
accessTokenExpired
// App端QQ用户accessToken过期时间
...
...
@@ -84,11 +84,11 @@ function generateQQCache({
}
}
function
getQQOpenid
({
function
getQQOpenid
({
userRecord
}
=
{})
{
const
qqPlatform
=
getQQPlatform
.
call
(
this
)
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
const
qqOpenidObj
=
userRecord
.
qq_openid
if
(
!
qqOpenidObj
)
{
return
...
...
@@ -96,7 +96,7 @@ function getQQOpenid({
return
qqOpenidObj
[
`
${
qqPlatform
}
_
${
appId
}
`
]
||
qqOpenidObj
[
qqPlatform
]
}
async
function
getQQCacheFallback
({
async
function
getQQCacheFallback
({
userRecord
,
key
}
=
{})
{
...
...
@@ -109,13 +109,13 @@ async function getQQCacheFallback({
return
qqCache
&&
qqCache
[
key
]
}
async
function
getQQCache
({
async
function
getQQCache
({
uid
,
userRecord
,
key
}
=
{})
{
const
qqPlatform
=
getQQPlatform
.
call
(
this
)
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
if
(
!
userRecord
)
{
const
getUserRes
=
await
userCollection
.
doc
(
uid
).
get
()
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/register.js
浏览文件 @
cf250a73
...
...
@@ -18,13 +18,13 @@ const {
const
PasswordUtils
=
require
(
'
./password
'
)
const
merge
=
require
(
'
lodash.merge
'
)
async
function
realPreRegister
(
params
=
{})
{
async
function
realPreRegister
(
params
=
{})
{
const
{
user
}
=
params
const
userMatched
=
await
findUser
({
userQuery
:
user
,
authorizedApp
:
this
.
getClientInfo
().
appId
authorizedApp
:
this
.
get
Universal
ClientInfo
().
appId
})
if
(
userMatched
.
length
>
0
)
{
throw
{
...
...
@@ -33,7 +33,7 @@ async function realPreRegister(params = {}) {
}
}
async
function
preRegister
(
params
=
{})
{
async
function
preRegister
(
params
=
{})
{
try
{
await
realPreRegister
.
call
(
this
,
params
)
}
catch
(
error
)
{
...
...
@@ -45,7 +45,7 @@ async function preRegister(params = {}) {
}
}
async
function
preRegisterWithPassword
(
params
=
{})
{
async
function
preRegisterWithPassword
(
params
=
{})
{
const
{
user
,
password
...
...
@@ -54,6 +54,7 @@ async function preRegisterWithPassword(params = {}) {
user
})
const
passwordUtils
=
new
PasswordUtils
({
clientInfo
:
this
.
getUniversalClientInfo
(),
passwordSecret
:
this
.
config
.
passwordSecret
})
const
{
...
...
@@ -72,7 +73,7 @@ async function preRegisterWithPassword(params = {}) {
}
}
async
function
thirdPartyRegister
({
async
function
thirdPartyRegister
({
user
=
{}
}
=
{})
{
return
{
...
...
@@ -81,7 +82,7 @@ async function thirdPartyRegister({
}
}
async
function
postRegister
(
params
=
{})
{
async
function
postRegister
(
params
=
{})
{
const
{
user
,
extraData
=
{},
...
...
@@ -98,7 +99,7 @@ async function postRegister(params = {}) {
clientIP
,
osName
,
uniIdToken
}
=
this
.
getClientInfo
()
}
=
this
.
get
Universal
ClientInfo
()
merge
(
user
,
extraData
)
...
...
@@ -162,7 +163,7 @@ async function postRegister(params = {}) {
if
(
beforeRegister
)
{
userRecord
=
await
beforeRegister
({
userRecord
,
clientInfo
:
this
.
getClientInfo
()
clientInfo
:
this
.
get
Universal
ClientInfo
()
})
}
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/relate.js
浏览文件 @
cf250a73
...
...
@@ -29,7 +29,7 @@ async function preBind ({
}
=
{})
{
const
userMatched
=
await
findUser
({
userQuery
:
bindAccount
,
authorizedApp
:
this
.
getClientInfo
().
appId
authorizedApp
:
this
.
get
Universal
ClientInfo
().
appId
})
if
(
userMatched
.
length
>
0
)
{
await
this
.
middleware
.
uniIdLog
({
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/unified-login.js
浏览文件 @
cf250a73
...
...
@@ -17,7 +17,7 @@ async function realPreUnifiedLogin (params = {}) {
user
,
type
}
=
params
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
const
userMatched
=
await
findUser
({
userQuery
:
user
,
authorizedApp
:
appId
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/univerify.js
浏览文件 @
cf250a73
...
...
@@ -13,7 +13,7 @@ async function getPhoneNumber ({
}
return
uniCloud
.
getPhoneNumber
({
provider
:
'
univerify
'
,
appid
:
this
.
getClientInfo
().
appId
,
appid
:
this
.
get
Universal
ClientInfo
().
appId
,
apiKey
:
univerifyConfig
.
apiKey
,
apiSecret
:
univerifyConfig
.
apiSecret
,
// eslint-disable-next-line camelcase
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/utils.js
0 → 100644
浏览文件 @
cf250a73
let
redisEnable
=
null
function
getRedisEnable
()
{
// 未用到的时候不调用redis接口,节省一些连接数
if
(
redisEnable
!==
null
)
{
return
redisEnable
}
try
{
uniCloud
.
redis
()
redisEnable
=
true
}
catch
(
error
)
{
redisEnable
=
false
}
return
redisEnable
}
module
.
exports
=
{
getRedisEnable
}
\ No newline at end of file
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/verify-code.js
浏览文件 @
cf250a73
...
...
@@ -23,7 +23,7 @@ async function setVerifyCode ({
scene
,
code
:
code
||
getVerifyCode
(),
state
:
0
,
ip
:
this
.
getClientInfo
().
clientIP
,
ip
:
this
.
get
Universal
ClientInfo
().
clientIP
,
created_date
:
now
,
expired_date
:
now
+
expiresIn
*
1000
}
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/lib/utils/weixin.js
浏览文件 @
cf250a73
...
...
@@ -5,6 +5,12 @@ const {
const
{
ERROR
}
=
require
(
'
../../common/error
'
)
const
{
getRedisEnable
}
=
require
(
'
./utils
'
)
const
{
openDataCollection
}
=
require
(
'
../../common/constants
'
)
function
decryptWeixinData
({
encryptedData
,
...
...
@@ -33,7 +39,7 @@ function decryptWeixinData ({
function
getWeixinPlatform
()
{
const
platform
=
this
.
clientPlatform
const
userAgent
=
this
.
getClientInfo
().
userAgent
const
userAgent
=
this
.
get
Universal
ClientInfo
().
userAgent
switch
(
platform
)
{
case
'
app
'
:
case
'
app-plus
'
:
...
...
@@ -58,7 +64,7 @@ async function saveWeixinUserKey ({
// 微信公众平台、开放平台refreshToken有效期均为30天(微信没有在网络请求里面返回30天这个值,务必注意未来可能出现调整,需及时更新此处逻辑)。
// 此前QQ开放平台有调整过accessToken的过期时间:[access_token有效期由90天缩短至30天](https://wiki.connect.qq.com/%E3%80%90qq%E4%BA%92%E8%81%94%E3%80%91access_token%E6%9C%89%E6%95%88%E6%9C%9F%E8%B0%83%E6%95%B4)
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
const
weixinPlatform
=
getWeixinPlatform
.
call
(
this
)
const
keyObj
=
{
dcloudAppid
:
appId
,
...
...
@@ -85,6 +91,35 @@ async function saveWeixinUserKey ({
}
}
async
function
saveSecureNetworkCache
({
code
,
openid
,
unionid
,
sessionKey
})
{
const
{
appId
}
=
this
.
getUniversalClientInfo
()
const
key
=
`uni-id:
${
appId
}
:weixin-mp:code:
${
code
}
:secure-network-cache`
const
value
=
JSON
.
stringify
({
openid
,
unionid
,
session_key
:
sessionKey
})
// 此处存储的是code的缓存,有效期两天即可
const
expiredSeconds
=
2
*
24
*
60
*
60
await
openDataCollection
.
doc
(
key
).
set
({
value
,
expired
:
Date
.
now
()
+
expiredSeconds
*
1000
})
const
isRedisEnable
=
getRedisEnable
()
if
(
isRedisEnable
)
{
const
redis
=
uniCloud
.
redis
()
await
redis
.
set
(
key
,
value
,
'
EX
'
,
expiredSeconds
)
}
}
function
generateWeixinCache
({
sessionKey
,
// 微信小程序用户sessionKey
accessToken
,
// App端微信用户accessToken
...
...
@@ -122,7 +157,7 @@ function getWeixinOpenid ({
userRecord
}
=
{})
{
const
weixinPlatform
=
getWeixinPlatform
.
call
(
this
)
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
const
wxOpenidObj
=
userRecord
.
wx_openid
if
(
!
wxOpenidObj
)
{
return
...
...
@@ -149,7 +184,7 @@ async function getWeixinCache ({
key
}
=
{})
{
const
weixinPlatform
=
getWeixinPlatform
.
call
(
this
)
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
if
(
!
userRecord
)
{
const
getUserRes
=
await
userCollection
.
doc
(
uid
).
get
()
userRecord
=
getUserRes
.
data
[
0
]
...
...
@@ -179,7 +214,7 @@ async function getWeixinCache ({
async
function
getWeixinAccessToken
()
{
const
weixinPlatform
=
getWeixinPlatform
.
call
(
this
)
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
const
cache
=
await
this
.
uniOpenBridge
.
getAccessToken
({
dcloudAppid
:
appId
,
...
...
@@ -194,5 +229,6 @@ module.exports = {
generateWeixinCache
,
getWeixinCache
,
saveWeixinUserKey
,
getWeixinAccessToken
getWeixinAccessToken
,
saveSecureNetworkCache
}
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/middleware/auth.js
浏览文件 @
cf250a73
...
...
@@ -2,7 +2,7 @@ module.exports = async function () {
if
(
this
.
authInfo
)
{
// 多次执行auth时如果第一次成功后续不再执行
return
}
const
token
=
this
.
getUniIdToken
()
const
token
=
this
.
getUni
versalUni
IdToken
()
const
payload
=
await
this
.
uniIdCommon
.
checkToken
(
token
)
if
(
payload
.
errCode
)
{
throw
payload
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/middleware/uni-id-log.js
浏览文件 @
cf250a73
...
...
@@ -19,7 +19,7 @@ module.exports = async function ({
clientIP
,
deviceId
,
userAgent
}
=
this
.
getClientInfo
()
}
=
this
.
get
Universal
ClientInfo
()
const
logData
=
{
appid
:
appId
,
device_id
:
deviceId
,
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/account/reset-pwd-by-email.js
浏览文件 @
cf250a73
...
...
@@ -79,7 +79,7 @@ module.exports = async function (params = {}) {
userQuery
:
{
email
},
authorizedApp
:
[
this
.
getClientInfo
().
appId
]
authorizedApp
:
[
this
.
get
Universal
ClientInfo
().
appId
]
})
if
(
userMatched
.
length
===
0
)
{
throw
{
...
...
@@ -95,6 +95,7 @@ module.exports = async function (params = {}) {
passwordHash
,
version
}
=
new
PasswordUtils
({
clientInfo
:
this
.
getUniversalClientInfo
(),
passwordSecret
:
this
.
config
.
passwordSecret
}).
generatePasswordHash
({
password
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/account/reset-pwd-by-sms.js
浏览文件 @
cf250a73
...
...
@@ -79,7 +79,7 @@ module.exports = async function (params = {}) {
userQuery
:
{
mobile
},
authorizedApp
:
[
this
.
getClientInfo
().
appId
]
authorizedApp
:
[
this
.
get
Universal
ClientInfo
().
appId
]
})
if
(
userMatched
.
length
===
0
)
{
throw
{
...
...
@@ -95,6 +95,7 @@ module.exports = async function (params = {}) {
passwordHash
,
version
}
=
new
PasswordUtils
({
clientInfo
:
this
.
getUniversalClientInfo
(),
passwordSecret
:
this
.
config
.
passwordSecret
}).
generatePasswordHash
({
password
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/account/update-pwd.js
浏览文件 @
cf250a73
...
...
@@ -32,16 +32,18 @@ module.exports = async function (params = {}) {
newPassword
}
=
params
const
passwordUtils
=
new
PasswordUtils
({
userRecord
,
clientInfo
:
this
.
getUniversalClientInfo
(),
passwordSecret
:
this
.
config
.
passwordSecret
})
const
{
success
:
checkPasswordSuccess
}
=
passwordUtils
.
checkUserPassword
({
password
:
oldPassword
,
passwordHash
:
userRecord
.
password
,
passwordSecretVersion
:
userRecord
.
password_secret_version
,
autoRefresh
:
false
})
if
(
!
checkPasswordSuccess
)
{
throw
{
errCode
:
ERROR
.
PASSWORD_ERROR
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/admin/add-user.js
浏览文件 @
cf250a73
...
...
@@ -83,6 +83,7 @@ module.exports = async function (params = {}) {
}
}
const
passwordUtils
=
new
PasswordUtils
({
clientInfo
:
this
.
getUniversalClientInfo
(),
passwordSecret
:
this
.
config
.
passwordSecret
})
const
{
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/admin/update-user.js
浏览文件 @
cf250a73
...
...
@@ -107,6 +107,7 @@ module.exports = async function (params = {}) {
if
(
password
)
{
const
passwordUtils
=
new
PasswordUtils
({
clientInfo
:
this
.
getUniversalClientInfo
(),
passwordSecret
:
this
.
config
.
passwordSecret
})
const
{
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/login/login-by-qq.js
浏览文件 @
cf250a73
...
...
@@ -56,7 +56,7 @@ module.exports = async function (params = {}) {
}
=
params
const
{
appId
}
=
this
.
getClientInfo
()
}
=
this
.
get
Universal
ClientInfo
()
const
qqApi
=
initQQ
.
call
(
this
)
const
qqPlatform
=
getQQPlatform
.
call
(
this
)
let
apiName
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/login/login-by-weixin-mobile.js
浏览文件 @
cf250a73
...
...
@@ -2,10 +2,7 @@ const {
initWeixin
}
=
require
(
'
../../lib/third-party/index
'
)
const
{
getWeixinPlatform
,
getWeixinAccessToken
,
generateWeixinCache
,
saveWeixinUserKey
getWeixinAccessToken
}
=
require
(
'
../../lib/utils/weixin
'
)
const
{
ERROR
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/login/login-by-weixin.js
浏览文件 @
cf250a73
...
...
@@ -11,7 +11,8 @@ const {
const
{
generateWeixinCache
,
getWeixinPlatform
,
saveWeixinUserKey
saveWeixinUserKey
,
saveSecureNetworkCache
}
=
require
(
'
../../lib/utils/weixin
'
)
const
{
LOG_TYPE
...
...
@@ -37,11 +38,13 @@ module.exports = async function (params = {}) {
this
.
middleware
.
validate
(
params
,
schema
)
const
{
code
,
inviteCode
inviteCode
,
// 内部参数,暂不暴露
secureNetworkCache
=
false
}
=
params
const
{
appId
}
=
this
.
getClientInfo
()
}
=
this
.
get
Universal
ClientInfo
()
const
weixinApi
=
initWeixin
.
call
(
this
)
const
weixinPlatform
=
getWeixinPlatform
.
call
(
this
)
let
apiName
...
...
@@ -81,6 +84,18 @@ module.exports = async function (params = {}) {
expired
:
accessTokenExpired
// App端微信用户accessToken过期时间
}
=
getWeixinAccountResult
if
(
secureNetworkCache
)
{
if
(
weixinPlatform
!==
'
mp
'
)
{
throw
new
Error
(
'
Unsupported weixin platform, expect mp-weixin
'
)
}
await
saveSecureNetworkCache
({
code
,
openid
,
unionid
,
sessionKey
})
}
const
{
type
,
user
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/register/register-admin.js
浏览文件 @
cf250a73
...
...
@@ -38,7 +38,7 @@ module.exports = async function (params = {}) {
}).
limit
(
1
).
get
()
if
(
getAdminRes
.
data
.
length
>
0
)
{
const
[
admin
]
=
getAdminRes
.
data
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
if
(
!
admin
.
dcloud_appid
||
(
admin
.
dcloud_appid
&&
admin
.
dcloud_appid
.
includes
(
appId
)))
{
return
{
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/relate/bind-qq.js
浏览文件 @
cf250a73
...
...
@@ -49,7 +49,7 @@ module.exports = async function (params = {}) {
accessTokenExpired
}
=
params
const
qqPlatform
=
getQQPlatform
.
call
(
this
)
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
const
qqApi
=
initQQ
.
call
(
this
)
const
clientPlatform
=
this
.
clientPlatform
const
apiName
=
clientPlatform
===
'
mp-qq
'
?
'
code2Session
'
:
'
getOpenidByToken
'
...
...
@@ -78,7 +78,7 @@ module.exports = async function (params = {}) {
const
bindAccount
=
{
qq_openid
:
{
[
client
Platform
]:
openid
[
qq
Platform
]:
openid
},
qq_unionid
:
unionid
}
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/relate/bind-weixin.js
浏览文件 @
cf250a73
...
...
@@ -34,7 +34,7 @@ module.exports = async function (params = {}) {
code
}
=
params
const
weixinPlatform
=
getWeixinPlatform
.
call
(
this
)
const
appId
=
this
.
getClientInfo
().
appId
const
appId
=
this
.
get
Universal
ClientInfo
().
appId
const
weixinApi
=
initWeixin
.
call
(
this
)
const
clientPlatform
=
this
.
clientPlatform
...
...
@@ -64,7 +64,7 @@ module.exports = async function (params = {}) {
const
bindAccount
=
{
wx_openid
:
{
[
client
Platform
]:
openid
[
weixin
Platform
]:
openid
},
wx_unionid
:
unionid
}
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/relate/unbind-qq.js
浏览文件 @
cf250a73
...
...
@@ -16,7 +16,7 @@ const {
*/
module
.
exports
=
async
function
()
{
const
{
uid
}
=
this
.
authInfo
const
{
appId
}
=
this
.
getClientInfo
()
const
{
appId
}
=
this
.
get
Universal
ClientInfo
()
const
qqPlatform
=
getQQPlatform
.
call
(
this
)
await
preUnBind
.
call
(
this
,
{
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/index.js
浏览文件 @
cf250a73
module
.
exports
=
{
refreshToken
:
require
(
'
./refresh-token
'
),
setPushCid
:
require
(
'
./set-push-cid
'
)
setPushCid
:
require
(
'
./set-push-cid
'
),
secureNetworkHandshakeByWeixin
:
require
(
'
./secure-network-handshake-by-weixin
'
)
}
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/refresh-token.js
浏览文件 @
cf250a73
...
...
@@ -7,7 +7,7 @@ module.exports = async function () {
token
,
tokenExpired
}
=
await
this
.
uniIdCommon
.
refreshToken
({
token
:
this
.
getUniIdToken
()
token
:
this
.
getUni
versalUni
IdToken
()
})
return
{
errCode
:
0
,
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/secure-network-handshake-by-weixin.js
0 → 100644
浏览文件 @
cf250a73
const
{
ERROR
}
=
require
(
'
../../common/error
'
)
const
{
initWeixin
}
=
require
(
'
../../lib/third-party/index
'
)
const
{
saveWeixinUserKey
,
saveSecureNetworkCache
}
=
require
(
'
../../lib/utils/weixin
'
)
const
loginByWeixin
=
require
(
'
../login/login-by-weixin
'
)
/**
* 微信安全网络握手
* @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#set-push-cid
* @param {object} params
* @param {string} params.code 微信登录返回的code
* @param {boolean} params.callLoginByWeixin 是否同时调用一次微信登录
* @returns
*/
module
.
exports
=
async
function
(
params
=
{})
{
const
schema
=
{
code
:
'
string
'
,
callLoginByWeixin
:
{
type
:
'
boolean
'
,
required
:
false
}
}
this
.
middleware
.
validate
(
params
,
schema
)
let
platform
=
this
.
clientPlatform
if
(
platform
!==
'
mp-weixin
'
)
{
throw
new
Error
(
`[secureNetworkHandshake] platform
${
platform
}
is not supported`
)
}
const
{
code
,
callLoginByWeixin
=
false
}
=
params
if
(
callLoginByWeixin
)
{
return
loginByWeixin
.
call
(
this
,
{
code
,
secureNetworkCache
:
true
})
}
const
weixinApi
=
initWeixin
.
call
(
this
)
let
getWeixinAccountResult
try
{
getWeixinAccountResult
=
await
weixinApi
.
code2Session
(
code
)
}
catch
(
error
)
{
console
.
error
(
error
)
throw
{
errCode
:
ERROR
.
GET_THIRD_PARTY_ACCOUNT_FAILED
}
}
const
{
openid
,
unionid
,
sessionKey
// 微信小程序用户sessionKey
}
=
getWeixinAccountResult
await
saveSecureNetworkCache
.
call
(
this
,
{
code
,
openid
,
unionid
,
sessionKey
})
await
saveWeixinUserKey
.
call
(
this
,
{
openid
,
sessionKey
})
return
{
errCode
:
0
}
}
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/utils/set-push-cid.js
浏览文件 @
cf250a73
...
...
@@ -25,7 +25,7 @@ async function setOpendbDevice ({
screenHeight
,
romName
,
romVersion
}
=
this
.
getClientInfo
()
}
=
this
.
get
Universal
ClientInfo
()
const
platform
=
this
.
clientPlatform
const
now
=
Date
.
now
()
...
...
@@ -80,7 +80,7 @@ module.exports = async function (params = {}) {
deviceId
,
appId
,
osName
}
=
this
.
getClientInfo
()
}
=
this
.
get
Universal
ClientInfo
()
let
platform
=
this
.
clientPlatform
if
(
platform
===
'
app
'
)
{
platform
+=
osName
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/verify/create-captcha.js
浏览文件 @
cf250a73
...
...
@@ -18,7 +18,7 @@ module.exports = async function (params = {}) {
}
this
.
middleware
.
validate
(
params
,
schema
)
const
deviceId
=
this
.
getClientInfo
().
deviceId
const
deviceId
=
this
.
get
Universal
ClientInfo
().
deviceId
const
{
scene
}
=
params
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/module/verify/refresh-captcha.js
浏览文件 @
cf250a73
...
...
@@ -18,7 +18,7 @@ module.exports = async function (params = {}) {
}
this
.
middleware
.
validate
(
params
,
schema
)
const
deviceId
=
this
.
getClientInfo
().
deviceId
const
deviceId
=
this
.
get
Universal
ClientInfo
().
deviceId
const
{
scene
}
=
params
...
...
uni_modules/uni-id-pages/uniCloud/cloudfunctions/uni-id-co/package.json
浏览文件 @
cf250a73
{
"name"
:
"uni-id-co"
,
"version"
:
"1.0.
26
"
,
"version"
:
"1.0.
30
"
,
"description"
:
""
,
"main"
:
"index.js"
,
"keywords"
:
[],
...
...
@@ -14,6 +14,10 @@
"uni-open-bridge-common"
:
"file:../../../../uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common"
},
"extensions"
:
{
"uni-cloud-sms"
:
{}
"uni-cloud-sms"
:
{},
"uni-cloud-redis"
:
{}
},
"cloudfunction-config"
:
{
"keepRunningAfterReturn"
:
false
}
}
uni_modules/uni-id/changelog.md
浏览文件 @
cf250a73
## 3.3.29(2022-10-20)
-
使用
[
uni-open-bridge-common
](
https://uniapp.dcloud.net.cn/uniCloud/uni-open-bridge.html#common
)
存储用户三方凭证,以便其他服务使用。
## 3.3.28(2022-07-27)
-
修复 app端微信登录返回的accessToken过期时间(expired)不正确的Bug
## 3.3.27(2022-07-27)
...
...
uni_modules/uni-id/package.json
浏览文件 @
cf250a73
{
"id"
:
"uni-id"
,
"displayName"
:
"uni-id"
,
"version"
:
"3.3.2
8
"
,
"version"
:
"3.3.2
9
"
,
"description"
:
"简单、统一、可扩展的用户中心"
,
"keywords"
:
[
"uniid"
,
...
...
@@ -14,7 +14,7 @@
"engines"
:
{
"HBuilderX"
:
"^3.1.0"
},
"dcloudext"
:
{
"dcloudext"
:
{
"sale"
:
{
"regular"
:
{
"price"
:
"0.00"
...
...
@@ -35,7 +35,7 @@
"type"
:
"unicloud-template-function"
},
"uni_modules"
:
{
"dependencies"
:
[
"uni-config-center"
],
"dependencies"
:
[
"uni-config-center"
,
"uni-open-bridge-common"
],
"encrypt"
:
[],
"platforms"
:
{
"cloud"
:
{
...
...
@@ -65,21 +65,21 @@
"阿里"
:
"u"
,
"百度"
:
"u"
,
"字节跳动"
:
"u"
,
"QQ"
:
"u"
,
"钉钉"
:
"u"
,
"快手"
:
"u"
,
"飞书"
:
"u"
,
"京东"
:
"u"
"QQ"
:
"u"
,
"钉钉"
:
"u"
,
"快手"
:
"u"
,
"飞书"
:
"u"
,
"京东"
:
"u"
},
"快应用"
:
{
"华为"
:
"u"
,
"联盟"
:
"u"
},
"Vue"
:
{
"vue2"
:
"y"
,
"vue3"
:
"u"
"vue2"
:
"y"
,
"vue3"
:
"u"
}
}
}
}
}
\ No newline at end of file
}
uni_modules/uni-id/uni-id.zip
0 → 100644
浏览文件 @
cf250a73
文件已添加
uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js
浏览文件 @
cf250a73
因为 它太大了无法显示 source diff 。你可以改为
查看blob
。
uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json
浏览文件 @
cf250a73
{
"name"
:
"uni-id"
,
"version"
:
"3.3.
17
"
,
"version"
:
"3.3.
29
"
,
"description"
:
"uni-id for uniCloud"
,
"main"
:
"index.js"
,
"homepage"
:
"https://uniapp.dcloud.io/uniCloud/uni-id"
,
...
...
@@ -11,6 +11,7 @@
"author"
:
""
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"uni-config-center"
:
"file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center"
"uni-config-center"
:
"file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center"
,
"uni-open-bridge-common"
:
"file:../../../../../uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common"
}
}
\ No newline at end of file
uni_modules/uni-list/changelog.md
浏览文件 @
cf250a73
## 1.2.3(2022-11-14)
-
uni-list-chat 新增 avatar 支持 fileId
## 1.2.2(2022-11-11)
-
uni-list 新增属性 render-reverse 详情参考:
[
https://uniapp.dcloud.net.cn/component/list.html
](
https://uniapp.dcloud.net.cn/component/list.html
)
-
uni-list-chat note属性 支持:“草稿”字样 加红显示 详情参考uni-im:
[
https://ext.dcloud.net.cn/plugin?name=uni-im
](
https://ext.dcloud.net.cn/plugin?name=uni-im
)
-
uni-list-item 新增属性 customStyle 支持设置padding、backgroundColor
## 1.2.1(2022-03-30)
-
删除无用文件
## 1.2.0(2021-11-23)
...
...
uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue
浏览文件 @
cf250a73
...
...
@@ -7,7 +7,7 @@
<view
class=
"uni-list-chat__container"
>
<view
class=
"uni-list-chat__header-warp"
>
<view
v-if=
"avatarCircle || avatarList.length === 0"
class=
"uni-list-chat__header"
:class=
"
{ 'header--circle': avatarCircle }">
<image
class=
"uni-list-chat__header-image"
:class=
"
{ 'header--circle': avatarCircle }" :src="avatar" mode="aspectFill">
</image>
<image
class=
"uni-list-chat__header-image"
:class=
"
{ 'header--circle': avatarCircle }" :src="avatar
Url
" mode="aspectFill">
</image>
</view>
<!-- 头像组 -->
<view
v-else
class=
"uni-list-chat__header"
>
...
...
@@ -23,8 +23,11 @@
</view>
<view
class=
"uni-list-chat__content"
>
<view
class=
"uni-list-chat__content-main"
>
<text
class=
"uni-list-chat__content-title uni-ellipsis"
>
{{
title
}}
</text>
<text
class=
"uni-list-chat__content-note uni-ellipsis"
>
{{
note
}}
</text>
<text
class=
"uni-list-chat__content-title uni-ellipsis"
>
{{
title
}}
</text>
<view
style=
"flex-direction: row;"
>
<text
class=
"draft"
v-if=
"isDraft"
>
[草稿]
</text>
<text
class=
"uni-list-chat__content-note uni-ellipsis"
>
{{
isDraft
?
note
.
slice
(
14
,
-
1
):
note
}}
</text>
</view>
</view>
<view
class=
"uni-list-chat__content-extra"
>
<slot>
...
...
@@ -120,7 +123,10 @@
}
},
// inject: ['list'],
computed
:
{
computed
:
{
isDraft
(){
return
this
.
note
.
slice
(
0
,
14
)
==
'
[uni-im-draft]
'
},
isSingle
()
{
if
(
this
.
badgeText
===
'
dot
'
)
{
return
'
uni-badge--dot
'
;
...
...
@@ -145,13 +151,33 @@
return
'
avatarItem--1
'
;
}
}
},
watch
:
{
avatar
:{
handler
(
avatar
)
{
if
(
avatar
.
includes
(
'
://
'
)){
uniCloud
.
getTempFileURL
({
fileList
:
[
avatar
]
}).
then
(
res
=>
{
// console.log(res);
// 兼容uniCloud私有化部署
let
fileList
=
res
.
fileList
||
res
.
result
.
fileList
this
.
avatarUrl
=
fileList
[
0
].
tempFileURL
})
}
else
{
this
.
avatarUrl
=
avatar
}
},
immediate
:
true
}
},
data
()
{
return
{
isFirstChild
:
false
,
border
:
true
,
// avatarList: 3,
imageWidth
:
50
imageWidth
:
50
,
avatarUrl
:
''
};
},
mounted
()
{
...
...
@@ -445,12 +471,19 @@
overflow
:
hidden
;
}
.uni-list-chat__content-note
{
.
draft
,
.
uni-list-chat__content-note
{
margin-top
:
3px
;
color
:
$note-color
;
font-size
:
$note-size
;
font-weight
:
$title-weight
;
overflow
:
hidden
;
}
.draft
{
color
:
#eb3a41
;
/* #ifndef APP-NVUE */
flex-shrink
:
0
;
/* #endif */
padding-right
:
3px
;
}
.uni-list-chat__content-extra
{
...
...
uni_modules/uni-list/components/uni-list-item/uni-list-item.vue
浏览文件 @
cf250a73
<
template
>
<!-- #ifdef APP-NVUE -->
<cell>
<cell
keep-scroll-position
>
<!-- #endif -->
<view
:class=
"
{ 'uni-list-item--disabled': disabled }"
<view
:class=
"
{ 'uni-list-item--disabled': disabled }" :style="{'background-color':customStyle.backgroundColor}"
:hover-class="(!clickable
&&
!link) || disabled || showSwitch ? '' : 'uni-list-item--hover'"
class="uni-list-item" @click="onClick">
<view
v-if=
"!isFirstChild"
class=
"border--left"
:class=
"
{ 'uni-list--border': border }">
</view>
<view
class=
"uni-list-item__container"
:class=
"
{ 'container--right': showArrow || link, 'flex--direction': direction === 'column' }">
:class=
"
{ 'container--right': showArrow || link, 'flex--direction': direction === 'column'}"
:style="{padding:customStyle.padding}">
<slot
name=
"header"
>
<view
class=
"uni-list-item__header"
>
<view
v-if=
"thumb"
class=
"uni-list-item__icon"
>
...
...
@@ -96,7 +96,7 @@
default
:
''
},
ellipsis
:
{
type
:
[
Number
,
String
],
type
:
[
Number
,
String
],
default
:
0
},
disabled
:
{
...
...
@@ -139,7 +139,7 @@
type
:
String
,
default
:
'
success
'
},
badgeStyle
:{
badgeStyle
:
{
type
:
Object
,
default
()
{
return
{}
...
...
@@ -174,6 +174,15 @@
border
:
{
type
:
Boolean
,
default
:
true
},
customStyle
:
{
type
:
Object
,
default
()
{
return
{
padding
:
''
,
backgroundColor
:
'
#FFFFFF
'
}
}
}
},
// inject: ['list'],
...
...
@@ -255,7 +264,7 @@
uni
.
switchTab
(
callback
)
break
default
:
uni
.
navigateTo
(
callback
)
uni
.
navigateTo
(
callback
)
}
}
}
...
...
@@ -275,6 +284,7 @@
$uni-bg-color-hover
:
#f1f1f1
;
$uni-text-color-grey
:
#999
;
$list-item-pd
:
$uni-spacing-col-lg
$uni-spacing-row-lg
;
.uni-list-item
{
/* #ifndef APP-NVUE */
display
:
flex
;
...
...
@@ -289,12 +299,15 @@
cursor
:
pointer
;
/* #endif */
}
.uni-list-item--disabled
{
opacity
:
0
.3
;
}
.uni-list-item--hover
{
background-color
:
$uni-bg-color-hover
;
}
.uni-list-item__container
{
position
:
relative
;
/* #ifndef APP-NVUE */
...
...
@@ -307,9 +320,11 @@
overflow
:
hidden
;
// align-items: center;
}
.container--right
{
padding-right
:
0
;
}
// .border--left {
// margin-left: $uni-spacing-row-lg;
// }
...
...
@@ -324,6 +339,7 @@
border-top-width
:
0
.5px
;
/* #endif */
}
/* #ifndef APP-NVUE */
.uni-list--border
:after
{
position
:
absolute
;
...
...
@@ -336,6 +352,7 @@
transform
:
scaleY
(
0
.5
);
background-color
:
$uni-border-color
;
}
/* #endif */
.uni-list-item__content
{
/* #ifndef APP-NVUE */
...
...
@@ -349,20 +366,24 @@
justify-content
:
space-between
;
overflow
:
hidden
;
}
.uni-list-item__content--center
{
justify-content
:
center
;
}
.uni-list-item__content-title
{
font-size
:
$uni-font-size-base
;
color
:
#3b4144
;
overflow
:
hidden
;
}
.uni-list-item__content-note
{
margin-top
:
6rpx
;
color
:
$uni-text-color-grey
;
font-size
:
$uni-font-size-sm
;
overflow
:
hidden
;
}
.uni-list-item__extra
{
// width: 25%;
/* #ifndef APP-NVUE */
...
...
@@ -372,6 +393,7 @@
justify-content
:
flex-end
;
align-items
:
center
;
}
.uni-list-item__header
{
/* #ifndef APP-NVUE */
display
:
flex
;
...
...
@@ -379,12 +401,14 @@
flex-direction
:
row
;
align-items
:
center
;
}
.uni-list-item__icon
{
margin-right
:
18rpx
;
flex-direction
:
row
;
justify-content
:
center
;
align-items
:
center
;
}
.uni-list-item__icon-img
{
/* #ifndef APP-NVUE */
display
:
block
;
...
...
@@ -393,6 +417,7 @@
width
:
$uni-img-size-base
;
margin-right
:
10px
;
}
.uni-icon-wrapper
{
/* #ifndef APP-NVUE */
display
:
flex
;
...
...
@@ -400,33 +425,40 @@
align-items
:
center
;
padding
:
0
10px
;
}
.flex--direction
{
flex-direction
:
column
;
/* #ifndef APP-NVUE */
align-items
:
initial
;
/* #endif */
}
.flex--justify
{
/* #ifndef APP-NVUE */
justify-content
:
initial
;
/* #endif */
}
.uni-list--lg
{
height
:
$uni-img-size-lg
;
width
:
$uni-img-size-lg
;
}
.uni-list--base
{
height
:
$uni-img-size-base
;
width
:
$uni-img-size-base
;
}
.uni-list--sm
{
height
:
$uni-img-size-sm
;
width
:
$uni-img-size-sm
;
}
.uni-list-item__extra-text
{
color
:
$uni-text-color-grey
;
font-size
:
$uni-font-size-sm
;
}
.uni-ellipsis-1
{
/* #ifndef APP-NVUE */
overflow
:
hidden
;
...
...
@@ -435,9 +467,10 @@
/* #endif */
/* #ifdef APP-NVUE */
lines
:
1
;
text-overflow
:ellipsis
;
text-overflow
:
ellipsis
;
/* #endif */
}
.uni-ellipsis-2
{
/* #ifndef APP-NVUE */
overflow
:
hidden
;
...
...
@@ -448,7 +481,7 @@
/* #endif */
/* #ifdef APP-NVUE */
lines
:
2
;
text-overflow
:ellipsis
;
text-overflow
:
ellipsis
;
/* #endif */
}
</
style
>
uni_modules/uni-list/components/uni-list/uni-list.vue
浏览文件 @
cf250a73
...
...
@@ -5,104 +5,119 @@
<slot
/>
<view
v-if=
"border"
class=
"uni-list--border-bottom"
></view>
</view>
<!-- #endif -->
<!-- #endif -->
<!-- #ifdef APP-NVUE -->
<list
class=
"uni-list"
:class=
"
{ 'uni-list--border': border }" :enableBackToTop="enableBackToTop" loadmoreoffset="15">
<slot
/></list>
<list
:bounce=
"false"
:scrollable=
"true"
show-scrollbar
:render-reverse=
"renderReverse"
@
scroll=
"scroll"
class=
"uni-list"
:class=
"
{ 'uni-list--border': border }" :enableBackToTop="enableBackToTop"
loadmoreoffset="15">
<slot
/>
</list>
<!-- #endif -->
</
template
>
<
script
>
/**
* List 列表
* @description 列表组件
* @tutorial https://ext.dcloud.net.cn/plugin?id=24
* @property {String} border = [true|false] 标题
*/
export
default
{
name
:
'
uniList
'
,
'
mp-weixin
'
:
{
options
:
{
multipleSlots
:
false
}
},
props
:
{
enableBackToTop
:
{
type
:
[
Boolean
,
String
],
default
:
false
/**
* List 列表
* @description 列表组件
* @tutorial https://ext.dcloud.net.cn/plugin?id=24
* @property {String} border = [true|false] 标题
*/
export
default
{
name
:
'
uniList
'
,
'
mp-weixin
'
:
{
options
:
{
multipleSlots
:
false
}
},
scrollY
:
{
type
:
[
Boolean
,
String
],
default
:
false
props
:
{
stackFromEnd
:{
type
:
Boolean
,
default
:
false
},
enableBackToTop
:
{
type
:
[
Boolean
,
String
],
default
:
false
},
scrollY
:
{
type
:
[
Boolean
,
String
],
default
:
false
},
border
:
{
type
:
Boolean
,
default
:
true
},
renderReverse
:{
type
:
Boolean
,
default
:
false
}
},
border
:
{
type
:
Boolean
,
default
:
true
}
},
// provide() {
// return {
// list: this
// };
// },
created
()
{
this
.
firstChildAppend
=
false
;
},
methods
:
{
loadMore
(
e
)
{
this
.
$emit
(
'
scrolltolower
'
);
// provide() {
// return {
// list: this
// };
// },
created
()
{
this
.
firstChildAppend
=
false
;
},
methods
:
{
loadMore
(
e
)
{
this
.
$emit
(
'
scrolltolower
'
);
},
scroll
(
e
)
{
this
.
$emit
(
'
scroll
'
,
e
);
}
}
}
};
};
</
script
>
<
style
lang=
"scss"
>
$uni-bg-color
:
#ffffff
;
$uni-border-color
:
#e5e5e5
;
.uni-list
{
/* #ifndef APP-NVUE */
display
:
flex
;
/* #endif */
background-color
:
$uni-bg-color
;
position
:
relative
;
flex-direction
:
column
;
}
<
style
lang=
"scss"
>
$uni-bg-color
:
#ffffff
;
$uni-border-color
:
#e5e5e5
;
.uni-list--border
{
position
:
relative
;
/* #ifdef APP-NVUE */
border-top-color
:
$uni-border-color
;
border-top-style
:
solid
;
border-top-width
:
0
.5px
;
border-bottom-color
:
$uni-border-color
;
border-bottom-style
:
solid
;
border-bottom-width
:
0
.5px
;
/* #endif */
z-index
:
-1
;
}
.uni-list
{
/* #ifndef APP-NVUE */
display
:
flex
;
/* #endif */
background-color
:
$uni-bg-color
;
position
:
relative
;
flex-direction
:
column
;
}
/* #ifndef APP-NVUE */
.uni-list--border
{
position
:
relative
;
/* #ifdef APP-NVUE */
border-top-color
:
$uni-border-color
;
border-top-style
:
solid
;
border-top-width
:
0
.5px
;
border-bottom-color
:
$uni-border-color
;
border-bottom-style
:
solid
;
border-bottom-width
:
0
.5px
;
/* #endif */
z-index
:
-1
;
}
.uni-list--border-top
{
position
:
absolute
;
top
:
0
;
right
:
0
;
left
:
0
;
height
:
1px
;
-webkit-transform
:
scaleY
(
0
.5
);
transform
:
scaleY
(
0
.5
);
background-color
:
$uni-border-color
;
z-index
:
1
;
}
/* #ifndef APP-NVUE */
.uni-list--border-bottom
{
position
:
absolute
;
bottom
:
0
;
right
:
0
;
left
:
0
;
height
:
1px
;
-webkit-transform
:
scaleY
(
0
.5
);
transform
:
scaleY
(
0
.5
);
background-color
:
$uni-border-color
;
}
.uni-list--border-top
{
position
:
absolute
;
top
:
0
;
right
:
0
;
left
:
0
;
height
:
1px
;
-webkit-transform
:
scaleY
(
0
.5
);
transform
:
scaleY
(
0
.5
);
background-color
:
$uni-border-color
;
z-index
:
1
;
}
/* #endif */
</
style
>
.uni-list--border-bottom
{
position
:
absolute
;
bottom
:
0
;
right
:
0
;
left
:
0
;
height
:
1px
;
-webkit-transform
:
scaleY
(
0
.5
);
transform
:
scaleY
(
0
.5
);
background-color
:
$uni-border-color
;
}
/* #endif */
</
style
>
uni_modules/uni-list/package.json
浏览文件 @
cf250a73
{
"id"
:
"uni-list"
,
"displayName"
:
"uni-list 列表"
,
"version"
:
"1.2.
1
"
,
"version"
:
"1.2.
3
"
,
"description"
:
"List 组件 ,帮助使用者快速构建列表。"
,
"keywords"
:
[
""
,
...
...
@@ -18,11 +18,7 @@
"directories"
:
{
"example"
:
"../../temps/example_temps"
},
"dcloudext"
:
{
"category"
:
[
"前端组件"
,
"通用组件"
],
"dcloudext"
:
{
"sale"
:
{
"regular"
:
{
"price"
:
"0.00"
...
...
@@ -39,7 +35,8 @@
"data"
:
"无"
,
"permissions"
:
"无"
},
"npmurl"
:
"https://www.npmjs.com/package/@dcloudio/uni-ui"
"npmurl"
:
"https://www.npmjs.com/package/@dcloudio/uni-ui"
,
"type"
:
"component-vue"
},
"uni_modules"
:
{
"dependencies"
:
[
...
...
uni_modules/uni-nav-bar/changelog.md
浏览文件 @
cf250a73
## 1.3.9(2022-10-13)
-
修复 条件编译错误的bug
## 1.3.8(2022-10-12)
-
修复 nvue 环境 fixed 为 true 的情况下,无法置顶的 bug
## 1.3.7(2022-08-11)
-
修复 nvue 环境下 fixed 为 true 的情况下,无法置顶的 bug
## 1.3.6(2022-06-30)
-
修复 组件示例中插槽用法无法显示内容的bug
## 1.3.5(2022-05-24)
...
...
uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue
浏览文件 @
cf250a73
<
template
>
<view
class=
"uni-navbar"
:class=
"
{'uni-dark':dark}">
<view
:class=
"
{ 'uni-navbar--fixed': fixed, 'uni-navbar--shadow': shadow, 'uni-navbar--border': border }"
:style="{ 'background-color': themeBgColor }"
class="uni-navbar__content"
>
<view
class=
"uni-navbar"
:class=
"
{'uni-dark':dark
, 'uni-nvue-fixed': fixed
}">
<view
class=
"uni-navbar__content"
:class=
"
{ 'uni-navbar--fixed': fixed, 'uni-navbar--shadow': shadow, 'uni-navbar--border': border }"
:style="{ 'background-color': themeBgColor }" >
<status-bar
v-if=
"statusBar"
/>
<view
:style=
"
{ color: themeColor,backgroundColor: themeBgColor ,height:navbarHeight}"
class="uni-navbar__header">
...
...
@@ -37,11 +37,13 @@
</slot>
</view>
</view>
</view>
</view>
<!-- #ifndef APP-NVUE -->
<view
class=
"uni-navbar__placeholder"
v-if=
"fixed"
>
<status-bar
v-if=
"statusBar"
/>
<view
class=
"uni-navbar__placeholder-view"
:style=
"
{ height:navbarHeight}" />
</view>
<!-- #endif -->
</view>
</
template
>
...
...
@@ -50,6 +52,8 @@
const
getVal
=
(
val
)
=>
typeof
val
===
'
number
'
?
val
+
'
px
'
:
val
;
/**
*
*
* NavBar 自定义导航栏
* @description 导航栏组件,主要用于头部导航
* @tutorial https://ext.dcloud.net.cn/plugin?id=52
...
...
@@ -196,6 +200,11 @@
<
style
lang=
"scss"
scoped
>
$nav-height
:
44px
;
.uni-nvue-fixed
{
/* #ifdef APP-NVUE */
position
:
sticky
;
/* #endif */
}
.uni-navbar
{
// box-sizing: border-box;
}
...
...
uni_modules/uni-nav-bar/package.json
浏览文件 @
cf250a73
{
"id"
:
"uni-nav-bar"
,
"displayName"
:
"uni-nav-bar 自定义导航栏"
,
"version"
:
"1.3.
6
"
,
"version"
:
"1.3.
9
"
,
"description"
:
"自定义导航栏组件,主要用于头部导航。"
,
"keywords"
:
[
"uni-ui"
,
...
...
@@ -16,11 +16,7 @@
"directories"
:
{
"example"
:
"../../temps/example_temps"
},
"dcloudext"
:
{
"category"
:
[
"前端组件"
,
"通用组件"
],
"dcloudext"
:
{
"sale"
:
{
"regular"
:
{
"price"
:
"0.00"
...
...
@@ -37,7 +33,8 @@
"data"
:
"无"
,
"permissions"
:
"无"
},
"npmurl"
:
"https://www.npmjs.com/package/@dcloudio/uni-ui"
"npmurl"
:
"https://www.npmjs.com/package/@dcloudio/uni-ui"
,
"type"
:
"component-vue"
},
"uni_modules"
:
{
"dependencies"
:
[
...
...
uni_modules/uni-scss/manifest.json
已删除
100644 → 0
浏览文件 @
27f2ea0a
此差异已折叠。
点击以展开。
uni_modules/uni-ui/changelog.md
浏览文件 @
cf250a73
## 1.4.23(2022-10-25)
-
uni-datetime-picker 修复,支付宝小程序样式错乱,
[
详情
](
https://github.com/dcloudio/uni-app/issues/3861
)
-
uni-nav-bar 修复 条件编译错误的bug
-
uni-nav-bar 修复 nvue 环境 fixed 为 true 的情况下,无法置顶的 bug
## 1.4.22(2022-09-19)
-
优化 部分组件适配 uni-scss 主题色
-
uni-badge 修复 当 text 超过 max-num 时,badge 的宽度计算是根据 text 的长度计算,更改为 css 计算实际展示宽度,详见:
[
https://ask.dcloud.net.cn/question/150473
](
https://ask.dcloud.net.cn/question/150473
)
...
...
uni_modules/uni-ui/package.json
浏览文件 @
cf250a73
{
"id"
:
"uni-ui"
,
"displayName"
:
"uni-ui"
,
"version"
:
"1.4.2
2
"
,
"version"
:
"1.4.2
3
"
,
"description"
:
"uni-ui 是基于uni-app的、全端兼容的、高性能UI框架"
,
"keywords"
:
[
"uni-ui"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录