Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gxpt_wechat
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
pseer
gxpt_wechat
Commits
333a1d6a
Commit
333a1d6a
authored
May 07, 2024
by
zhangzhen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
订单细节优化
parent
a198237c
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
797 additions
and
431 deletions
+797
-431
index.config.js
config/index.config.js
+2
-2
order.vue
pages/order/order.vue
+95
-26
changelog.md
uni_modules/uni-popup/changelog.md
+40
-0
uni-popup-dialog.vue
...ni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
+75
-22
uni-popup-message.vue
...-popup/components/uni-popup-message/uni-popup-message.vue
+1
-1
uni-popup-share.vue
.../uni-popup/components/uni-popup-share/uni-popup-share.vue
+2
-2
uni-popup.uvue
uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
+91
-0
uni-popup.vue
uni_modules/uni-popup/components/uni-popup/uni-popup.vue
+453
-354
package.json
uni_modules/uni-popup/package.json
+7
-9
changelog.md
uni_modules/uni-scss/changelog.md
+2
-0
package.json
uni_modules/uni-scss/package.json
+3
-3
changelog.md
uni_modules/uni-transition/changelog.md
+4
-0
createAnimation.js
...i-transition/components/uni-transition/createAnimation.js
+4
-1
uni-transition.vue
...i-transition/components/uni-transition/uni-transition.vue
+12
-3
package.json
uni_modules/uni-transition/package.json
+6
-8
No files found.
config/index.config.js
View file @
333a1d6a
...
@@ -2,8 +2,8 @@ const CONFIG = {
...
@@ -2,8 +2,8 @@ const CONFIG = {
// 开发环境配置
// 开发环境配置
development
:
{
development
:
{
// assetsPath: 'https://www.coujio.com/wechat_static', // 静态资源路径
// assetsPath: 'https://www.coujio.com/wechat_static', // 静态资源路径
//
assetsPath: 'https://coujiao.pseer.com/wechat_static', // 静态资源路径
assetsPath
:
'https://coujiao.pseer.com/wechat_static'
,
// 静态资源路径
assetsPath
:
'http://localhost:8211/static'
,
// 静态资源路径
//
assetsPath: 'http://localhost:8211/static', // 静态资源路径
// baseUrl: 'https://www.coujio.com/front-api', // 后台接口请求地址
// baseUrl: 'https://www.coujio.com/front-api', // 后台接口请求地址
baseUrl
:
'https://coujiao.pseer.com/front-api'
,
// 后台接口请求地址
baseUrl
:
'https://coujiao.pseer.com/front-api'
,
// 后台接口请求地址
// baseUrl: 'http://10.24.3.185:8883/front-api',
// baseUrl: 'http://10.24.3.185:8883/front-api',
...
...
pages/order/order.vue
View file @
333a1d6a
...
@@ -198,7 +198,7 @@
...
@@ -198,7 +198,7 @@
</view>
</view>
<view
class=
"flex-between price"
>
<view
class=
"flex-between price"
>
<text
class=
"text-black text-left"
>
预约时长
</text>
<text
class=
"text-black text-left"
>
预约时长
</text>
<text
class=
"text-black"
>
{{
duration
}}
小时
</text>
<text
class=
"text-black"
>
{{
(
formatAllData
.
duration
/
60
).
toFixed
(
1
)
}}
小时
</text>
</view>
</view>
<view
v-show=
"orderTypeList[index].type==1"
class=
"flex-between price"
>
<view
v-show=
"orderTypeList[index].type==1"
class=
"flex-between price"
>
<text
class=
"text-black text-left"
>
房间单价
</text>
<text
class=
"text-black text-left"
>
房间单价
</text>
...
@@ -218,7 +218,7 @@
...
@@ -218,7 +218,7 @@
</view>
</view>
</view>
</view>
<view
class=
"flex-between price"
>
<view
class=
"flex-between price"
>
<text
class=
"text-black text-left"
>
预约优惠
</text>
<text
class=
"text-black text-left"
>
优惠金额
</text>
<view
class=
"flex-row"
>
<view
class=
"flex-row"
>
<!--
<text
class=
"text-pink text-sm text-bold"
style=
"margin-bottom: 3upx;"
>
{{
computePriceInfo
.
couponFee
>
0
?
'-'
:
''
}}
¥
</text>
-->
<!--
<text
class=
"text-pink text-sm text-bold"
style=
"margin-bottom: 3upx;"
>
{{
computePriceInfo
.
couponFee
>
0
?
'-'
:
''
}}
¥
</text>
-->
<text
class=
"text-pink text-lg text-bold"
>
{{
computePriceInfo
.
couponFee
||
0
}}
</text>
<text
class=
"text-pink text-lg text-bold"
>
{{
computePriceInfo
.
couponFee
||
0
}}
</text>
...
@@ -335,22 +335,17 @@
...
@@ -335,22 +335,17 @@
@
close=
"close"
@
confirm=
"confirm"
></uni-popup-dialog>
@
close=
"close"
@
confirm=
"confirm"
></uni-popup-dialog>
</uni-popup>
</uni-popup>
<uni-popup
ref=
"popupMessage"
type=
"center"
>
<uni-popup
ref=
"popupMessage"
type=
"dialog"
>
<view
class=
"flex-col message-box"
>
<uni-popup-dialog
type=
"warn"
mode=
"base"
title=
"提示"
:showClose=
"false"
content=
"当前条件下无可预约的时段,请手动选择合适的空闲时段"
:duration=
"2000"
:before-close=
"true"
@
close=
"onCancleTip"
@
confirm=
"onCancleTip"
></uni-popup-dialog>
<view
class=
"header"
>
</uni-popup>
<text>
提示
</text>
</view>
<uni-popup
ref=
"popupMessage2"
type=
"dialog"
>
<view
class=
"content"
>
<uni-popup-dialog
type=
"warn"
mode=
"base"
title=
"提示"
:showClose=
"false"
confirmText=
"好的"
content=
"所选套餐,可用时长不足,请选择其他日期的套餐"
:duration=
"2000"
:before-close=
"true"
@
close=
"onCancleTip"
@
confirm=
"onCancleTip"
></uni-popup-dialog>
<text>
</uni-popup>
您选的预定时间已有被占用,请选择其他空闲时段
</text>
<uni-popup
ref=
"popupDialog"
type=
"dialog"
>
</view>
<uni-popup-dialog
type=
"warn"
mode=
"base"
title=
"提示"
content=
"所选套餐可使用时长不足,点击确认表示接受"
:duration=
"2000"
:before-close=
"true"
@
close=
"onCancleTip"
@
confirm=
"onPackageCheck"
></uni-popup-dialog>
<view
class=
"button-box"
@
tap=
"onCancleTip"
>
<text>
好的
</text>
</view>
</view>
</uni-popup>
</uni-popup>
</view>
</view>
</
template
>
</
template
>
...
@@ -492,7 +487,8 @@
...
@@ -492,7 +487,8 @@
formatAllData
:{
formatAllData
:{
list
:[]
list
:[]
},
},
orderInfo
:{}
orderInfo
:{},
tempPackageIndex
:
0
};
};
},
},
filters
:
{
filters
:
{
...
@@ -562,13 +558,11 @@
...
@@ -562,13 +558,11 @@
});
});
console
.
log
(
this
.
formatAllData
,
"this.formatAllData"
)
console
.
log
(
this
.
formatAllData
,
"this.formatAllData"
)
},
},
// 套餐切换
onPackageCheck
(){
onChangePackage2
(
index
){
this
.
onCancleTip
();
if
(
this
.
modeIndex2
==
index
)
return
;
this
.
modeIndex
=
-
1
this
.
modeIndex
=
-
1
this
.
modeIndex2
=
i
ndex
this
.
modeIndex2
=
this
.
tempPackageI
ndex
console
.
log
(
this
.
packageMode
[
this
.
modeIndex2
])
let
startStr
=
`
${
this
.
dateList
[
this
.
dateIndex
].
readDate
}
${
this
.
packageMode
[
this
.
modeIndex2
].
packaStartPeriod
}
:00:00`
let
startStr
=
`
${
this
.
dateList
[
this
.
dateIndex
].
readDate
}
${
this
.
packageMode
[
this
.
modeIndex2
].
packaStartPeriod
}
:00:00`
let
startDate
=
moment
(
moment
().
format
(
startStr
)).
format
(
"YYYY-MM-DD HH:00:00"
);
let
startDate
=
moment
(
moment
().
format
(
startStr
)).
format
(
"YYYY-MM-DD HH:00:00"
);
...
@@ -580,6 +574,73 @@
...
@@ -580,6 +574,73 @@
endDate
=
moment
(
endDate
).
add
(
1
,
'd'
).
format
(
"YYYY-MM-DD HH:00:00"
)
endDate
=
moment
(
endDate
).
add
(
1
,
'd'
).
format
(
"YYYY-MM-DD HH:00:00"
)
}
}
this
.
dateIntervalList
.
forEach
(
item
=>
{
let
start
=
moment
(
moment
(
item
.
timeHour
).
format
(
"YYYY-MM-DD HH::mm:ss"
)).
valueOf
()
let
orderStartDate
=
moment
(
startDate
).
valueOf
()
let
orderEndDate
=
moment
(
endDate
).
valueOf
()
if
(
start
>=
orderStartDate
&&
start
<=
orderEndDate
&&
item
.
status
==
1
){
startDate
=
moment
(
item
.
endHoldTime
).
format
(
"YYYY-MM-DD HH:mm:00"
);
console
.
log
(
startDate
,
"重置的开始时间"
)
}
})
let
duration
=
(
moment
(
endDate
).
valueOf
()
-
moment
(
startDate
).
valueOf
())
/
1000
/
60
;
this
.
formatAllData
=
this
.
onTransiteForDate
({
list
:
JSON
.
parse
(
JSON
.
stringify
(
this
.
dateIntervalList
)),
startDateTime
:
startDate
,
duration
,
durationType
:
2
});
console
.
log
(
this
.
formatAllData
,
9999992222
)
},
// 套餐切换
onChangePackage2
(
index
){
if
(
this
.
modeIndex2
==
index
)
return
;
this
.
tempPackageIndex
=
index
;
let
startStr
=
`
${
this
.
dateList
[
this
.
dateIndex
].
readDate
}
${
this
.
packageMode
[
this
.
tempPackageIndex
].
packaStartPeriod
}
:00:00`
let
startDate
=
moment
(
moment
().
format
(
startStr
)).
format
(
"YYYY-MM-DD HH:00:00"
);
let
endStr
=
`
${
this
.
dateList
[
this
.
dateIndex
].
readDate
}
${
this
.
packageMode
[
this
.
tempPackageIndex
].
packaEndPeriod
}
:00:00`
let
endDate
=
moment
(
moment
().
format
(
endStr
)).
format
(
"YYYY-MM-DD HH:00:00"
);
if
(
this
.
dateIndex
===
0
&&
(
moment
().
valueOf
()
>
moment
(
endDate
).
valueOf
())){
startDate
=
moment
(
startDate
).
add
(
1
,
'd'
).
format
(
"YYYY-MM-DD HH:00:00"
)
endDate
=
moment
(
endDate
).
add
(
1
,
'd'
).
format
(
"YYYY-MM-DD HH:00:00"
)
}
//原始时长,结束时间-原开始时间
let
originDate
=
moment
(
endDate
).
valueOf
()
-
moment
(
startDate
).
valueOf
();
console
.
log
(
originDate
/
1000
/
60
,
"originDate原始时长"
)
this
.
dateIntervalList
.
forEach
(
item
=>
{
let
start
=
moment
(
moment
(
item
.
timeHour
).
format
(
"YYYY-MM-DD HH::mm:ss"
)).
valueOf
()
let
orderStartDate
=
moment
(
startDate
).
valueOf
()
let
orderEndDate
=
moment
(
endDate
).
valueOf
()
if
(
start
>=
orderStartDate
&&
start
<=
orderEndDate
&&
item
.
status
==
1
){
startDate
=
moment
(
item
.
endHoldTime
).
format
(
"YYYY-MM-DD HH:mm:00"
);
console
.
log
(
startDate
,
"重置的开始时间"
)
}
})
//实际时长,结束时间-实际开始时间
let
actualDate
=
moment
(
endDate
).
valueOf
()
-
moment
(
startDate
).
valueOf
();
console
.
log
(
actualDate
/
1000
/
60
,
"actualDate实际时长"
)
if
(
actualDate
>=
originDate
*
0.6
&&
actualDate
<=
originDate
*
0.8
){
this
.
$refs
.
popupDialog
.
open
();
return
}
else
if
(
actualDate
<
originDate
*
0.6
){
this
.
$refs
.
popupMessage2
.
open
();
return
}
this
.
modeIndex
=
-
1
this
.
modeIndex2
=
index
let
duration
=
(
moment
(
endDate
).
valueOf
()
-
moment
(
startDate
).
valueOf
())
/
1000
/
60
;
let
duration
=
(
moment
(
endDate
).
valueOf
()
-
moment
(
startDate
).
valueOf
())
/
1000
/
60
;
this
.
formatAllData
=
this
.
onTransiteForDate
({
this
.
formatAllData
=
this
.
onTransiteForDate
({
list
:
JSON
.
parse
(
JSON
.
stringify
(
this
.
dateIntervalList
)),
list
:
JSON
.
parse
(
JSON
.
stringify
(
this
.
dateIntervalList
)),
...
@@ -1129,7 +1190,7 @@
...
@@ -1129,7 +1190,7 @@
})
})
},
},
onSelectDatePoint
(
val
,
i
)
{
onSelectDatePoint
(
val
,
i
)
{
if
(
this
.
orderType
==
2
)
return
;
if
(
this
.
orderType
==
2
||
this
.
modeIndex2
>=
0
)
return
;
if
(
i
>=
24
)
{
if
(
i
>=
24
)
{
uni
.
showToast
({
uni
.
showToast
({
icon
:
"none"
,
icon
:
"none"
,
...
@@ -1211,6 +1272,12 @@
...
@@ -1211,6 +1272,12 @@
useStatus
=
true
;
useStatus
=
true
;
interceptDateStatus
=
true
;
interceptDateStatus
=
true
;
}
}
if
((
start
>
startStamp
&&
start
<
endPoint
)
||
(
end
>
startStamp
&&
end
<
endPoint
))
{
useStatus
=
true
;
interceptDateStatus
=
true
;
}
}
}
let
point
=
moment
(
moment
(
item
.
timeHour
).
format
(
"YYYY-MM-DD HH:00:00"
)).
valueOf
();
let
point
=
moment
(
moment
(
item
.
timeHour
).
format
(
"YYYY-MM-DD HH:00:00"
)).
valueOf
();
...
@@ -1220,7 +1287,7 @@
...
@@ -1220,7 +1287,7 @@
return
item
return
item
})
})
let
paramsData
=
{
let
paramsData
=
{
list
,
list
:
useStatus
?
JSON
.
parse
(
JSON
.
stringify
(
this
.
dateIntervalList
))
:
list
,
startDateTime
:
moment
(
startPoint
).
format
(
"YYYY-MM-DD HH:mm:ss"
),
startDateTime
:
moment
(
startPoint
).
format
(
"YYYY-MM-DD HH:mm:ss"
),
startTime
:
moment
(
startPoint
).
format
(
"HH:mm"
),
startTime
:
moment
(
startPoint
).
format
(
"HH:mm"
),
endDateTime
:
moment
(
endPoint
).
format
(
"YYYY-MM-DD HH:mm:ss"
),
endDateTime
:
moment
(
endPoint
).
format
(
"YYYY-MM-DD HH:mm:ss"
),
...
@@ -1240,6 +1307,8 @@
...
@@ -1240,6 +1307,8 @@
},
},
onCancleTip
(){
onCancleTip
(){
this
.
$refs
.
popupMessage
.
close
();
this
.
$refs
.
popupMessage
.
close
();
this
.
$refs
.
popupMessage2
.
close
();
this
.
$refs
.
popupDialog
.
close
();
},
},
onCheckDate
()
{}
onCheckDate
()
{}
}
}
...
@@ -1747,7 +1816,7 @@
...
@@ -1747,7 +1816,7 @@
background
:
#FFFFFF
;
background
:
#FFFFFF
;
box-shadow
:
0
rpx
5
rpx
25
rpx
0
rpx
rgba
(
0
,
0
,
0
,
0.1
);
box-shadow
:
0
rpx
5
rpx
25
rpx
0
rpx
rgba
(
0
,
0
,
0
,
0.1
);
padding
:
0
30
upx
;
padding
:
0
30
upx
;
z-index
:
111
;
z-index
:
66
;
>.flex-row
{
>.flex-row
{
display
:
flex
;
display
:
flex
;
...
...
uni_modules/uni-popup/changelog.md
View file @
333a1d6a
## 1.9.1(2024-04-02)
-
修复 uni-popup-dialog vue3下使用value无法进行绑定的bug(双向绑定兼容旧写法)
## 1.9.0(2024-03-28)
-
修复 uni-popup-dialog 双向绑定时初始化逻辑修正
## 1.8.9(2024-03-20)
-
修复 uni-popup-dialog 数据输入时修正为双向绑定
## 1.8.8(2024-02-20)
-
修复 uni-popup 在微信小程序下出现文字向上闪动的bug
## 1.8.7(2024-02-02)
-
新增 uni-popup-dialog 新增属性focus:input模式下,是否自动自动聚焦
## 1.8.6(2024-01-30)
-
新增 uni-popup-dialog 新增属性maxLength:限制输入框字数
## 1.8.5(2024-01-26)
-
新增 uni-popup-dialog 新增属性showClose:控制关闭按钮的显示
## 1.8.4(2023-11-15)
-
新增 uni-popup 支持uni-app-x 注意暂时仅支持
`maskClick`
`@open`
`@close`
## 1.8.3(2023-04-17)
-
修复 uni-popup 重复打开时的 bug
## 1.8.2(2023-02-02)
-
uni-popup-dialog 组件新增 inputType 属性
## 1.8.1(2022-12-01)
-
修复 nvue 下 v-show 报错
## 1.8.0(2022-11-29)
-
优化 主题样式
## 1.7.9(2022-04-02)
-
修复 弹出层内部无法滚动的bug
## 1.7.8(2022-03-28)
-
修复 小程序中高度错误的bug
## 1.7.7(2022-03-17)
-
修复 快速调用open出现问题的Bug
## 1.7.6(2022-02-14)
-
修复 safeArea 属性不能设置为false的bug
## 1.7.5(2022-01-19)
-
修复 isMaskClick 失效的bug
## 1.7.4(2022-01-19)
-
新增 cancelText
\
confirmText 属性 ,可自定义文本
-
新增 maskBackgroundColor 属性 ,可以修改蒙版颜色
-
优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题
## 1.7.3(2022-01-13)
-
修复 设置 safeArea 属性不生效的bug
## 1.7.2(2021-11-26)
## 1.7.2(2021-11-26)
-
优化 组件示例
-
优化 组件示例
## 1.7.1(2021-11-26)
## 1.7.1(2021-11-26)
...
...
uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
View file @
333a1d6a
...
@@ -10,14 +10,15 @@
...
@@ -10,14 +10,15 @@
</view>
</view>
<view
v-else
class=
"uni-dialog-content"
>
<view
v-else
class=
"uni-dialog-content"
>
<slot>
<slot>
<input
class=
"uni-dialog-input"
v-model=
"val"
type=
"text"
:placeholder=
"placeholderText"
:focus=
"focus"
>
<input
class=
"uni-dialog-input"
:maxlength=
"maxlength"
v-model=
"val"
:type=
"inputType"
:placeholder=
"placeholderText"
:focus=
"focus"
>
</slot>
</slot>
</view>
</view>
<view
class=
"uni-dialog-button-group"
>
<view
class=
"uni-dialog-button-group"
>
<view
class=
"uni-dialog-button"
@
click=
"closeDialog"
>
<view
class=
"uni-dialog-button"
v-if=
"showClose"
@
click=
"closeDialog"
>
<text
class=
"uni-dialog-button-text"
>
{{
c
ancel
Text
}}
</text>
<text
class=
"uni-dialog-button-text"
>
{{
c
lose
Text
}}
</text>
</view>
</view>
<view
class=
"uni-dialog-button
uni-border-left
"
@
click=
"onOk"
>
<view
class=
"uni-dialog-button
"
:class=
"showClose?'uni-border-left':''
"
@
click=
"onOk"
>
<text
class=
"uni-dialog-button-text uni-button-color"
>
{{
okText
}}
</text>
<text
class=
"uni-dialog-button-text uni-button-color"
>
{{
okText
}}
</text>
</view>
</view>
</view>
</view>
...
@@ -28,16 +29,19 @@
...
@@ -28,16 +29,19 @@
<
script
>
<
script
>
import
popup
from
'../uni-popup/popup.js'
import
popup
from
'../uni-popup/popup.js'
import
{
import
{
initVueI18n
initVueI18n
}
from
'@dcloudio/uni-i18n'
}
from
'@dcloudio/uni-i18n'
import
messages
from
'../uni-popup/i18n/index.js'
import
messages
from
'../uni-popup/i18n/index.js'
const
{
t
}
=
initVueI18n
(
messages
)
const
{
t
}
=
initVueI18n
(
messages
)
/**
/**
* PopUp 弹出层-对话框样式
* PopUp 弹出层-对话框样式
* @description 弹出层-对话框样式
* @description 弹出层-对话框样式
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
* @property {String} value input 模式下的默认值
* @property {String} value input 模式下的默认值
* @property {String} placeholder input 模式下输入提示
* @property {String} placeholder input 模式下输入提示
* @property {Boolean} focus input模式下是否自动聚焦,默认为true
* @property {String} type = [success|warning|info|error] 主题样式
* @property {String} type = [success|warning|info|error] 主题样式
* @value success 成功
* @value success 成功
* @value warning 提示
* @value warning 提示
...
@@ -46,8 +50,10 @@
...
@@ -46,8 +50,10 @@
* @property {String} mode = [base|input] 模式、
* @property {String} mode = [base|input] 模式、
* @value base 基础对话框
* @value base 基础对话框
* @value input 可输入对话框
* @value input 可输入对话框
* @showClose {Boolean} 是否显示关闭按钮
* @property {String} content 对话框内容
* @property {String} content 对话框内容
* @property {Boolean} beforeClose 是否拦截取消事件
* @property {Boolean} beforeClose 是否拦截取消事件
* @property {Number} maxlength 输入
* @event {Function} confirm 点击确认按钮触发
* @event {Function} confirm 点击确认按钮触发
* @event {Function} close 点击取消按钮触发
* @event {Function} close 点击取消按钮触发
*/
*/
...
@@ -55,12 +61,30 @@
...
@@ -55,12 +61,30 @@
export
default
{
export
default
{
name
:
"uniPopupDialog"
,
name
:
"uniPopupDialog"
,
mixins
:
[
popup
],
mixins
:
[
popup
],
emits
:
[
'confirm'
,
'close
'
],
emits
:
[
'confirm'
,
'close'
,
'update:modelValue'
,
'input
'
],
props
:
{
props
:
{
inputType
:
{
type
:
String
,
default
:
'text'
},
showClose
:
{
type
:
Boolean
,
default
:
true
},
// #ifdef VUE2
value
:
{
value
:
{
type
:
[
String
,
Number
],
type
:
[
String
,
Number
],
default
:
''
default
:
''
},
},
// #endif
// #ifdef VUE3
modelValue
:
{
type
:
[
Number
,
String
],
default
:
''
},
// #endif
placeholder
:
{
placeholder
:
{
type
:
[
String
,
Number
],
type
:
[
String
,
Number
],
default
:
''
default
:
''
...
@@ -84,21 +108,36 @@
...
@@ -84,21 +108,36 @@
beforeClose
:
{
beforeClose
:
{
type
:
Boolean
,
type
:
Boolean
,
default
:
false
default
:
false
},
cancelText
:
{
type
:
String
,
default
:
''
},
confirmText
:
{
type
:
String
,
default
:
''
},
maxlength
:
{
type
:
Number
,
default
:
-
1
,
},
focus
:
{
type
:
Boolean
,
default
:
true
,
}
}
},
},
data
()
{
data
()
{
return
{
return
{
dialogType
:
'error'
,
dialogType
:
'error'
,
focus
:
false
,
val
:
""
val
:
""
}
}
},
},
computed
:
{
computed
:
{
okText
()
{
okText
()
{
return
t
(
"uni-popup.ok"
)
return
t
his
.
confirmText
||
t
(
"uni-popup.ok"
)
},
},
c
ancel
Text
()
{
c
lose
Text
()
{
return
t
(
"uni-popup.cancel"
)
return
t
his
.
cancelText
||
t
(
"uni-popup.cancel"
)
},
},
placeholderText
()
{
placeholderText
()
{
return
this
.
placeholder
||
t
(
"uni-popup.placeholder"
)
return
this
.
placeholder
||
t
(
"uni-popup.placeholder"
)
...
@@ -117,7 +156,21 @@
...
@@ -117,7 +156,21 @@
}
}
},
},
value
(
val
)
{
value
(
val
)
{
this
.
val
=
val
if
(
this
.
maxlength
!=
-
1
&&
this
.
mode
===
'input'
)
{
this
.
val
=
val
.
slice
(
0
,
this
.
maxlength
);
}
else
{
this
.
val
=
val
}
},
val
(
val
)
{
// #ifdef VUE2
// TODO 兼容 vue2
this
.
$emit
(
'input'
,
val
);
// #endif
// #ifdef VUE3
// TODO 兼容 vue3
this
.
$emit
(
'update:modelValue'
,
val
);
// #endif
}
}
},
},
created
()
{
created
()
{
...
@@ -126,25 +179,25 @@
...
@@ -126,25 +179,25 @@
// this.popup.closeMask()
// this.popup.closeMask()
if
(
this
.
mode
===
'input'
)
{
if
(
this
.
mode
===
'input'
)
{
this
.
dialogType
=
'info'
this
.
dialogType
=
'info'
this
.
val
=
this
.
value
this
.
val
=
this
.
value
;
// #ifdef VUE3
this
.
val
=
this
.
modelValue
;
// #endif
}
else
{
}
else
{
this
.
dialogType
=
this
.
type
this
.
dialogType
=
this
.
type
}
}
},
},
mounted
()
{
this
.
focus
=
true
},
methods
:
{
methods
:
{
/**
/**
* 点击确认按钮
* 点击确认按钮
*/
*/
onOk
()
{
onOk
()
{
if
(
this
.
mode
===
'input'
){
if
(
this
.
mode
===
'input'
)
{
this
.
$emit
(
'confirm'
,
this
.
val
)
this
.
$emit
(
'confirm'
,
this
.
val
)
}
else
{
}
else
{
this
.
$emit
(
'confirm'
)
this
.
$emit
(
'confirm'
)
}
}
if
(
this
.
beforeClose
)
return
if
(
this
.
beforeClose
)
return
this
.
popup
.
close
()
this
.
popup
.
close
()
},
},
/**
/**
...
@@ -152,17 +205,17 @@
...
@@ -152,17 +205,17 @@
*/
*/
closeDialog
()
{
closeDialog
()
{
this
.
$emit
(
'close'
)
this
.
$emit
(
'close'
)
if
(
this
.
beforeClose
)
return
if
(
this
.
beforeClose
)
return
this
.
popup
.
close
()
this
.
popup
.
close
()
},
},
close
(){
close
()
{
this
.
popup
.
close
()
this
.
popup
.
close
()
}
}
}
}
}
}
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
>
.uni-popup-dialog
{
.uni-popup-dialog
{
width
:
300px
;
width
:
300px
;
border-radius
:
11px
;
border-radius
:
11px
;
...
...
uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
View file @
333a1d6a
...
@@ -71,7 +71,7 @@
...
@@ -71,7 +71,7 @@
}
}
}
}
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
>
.uni-popup-message
{
.uni-popup-message
{
/* #ifndef APP-NVUE */
/* #ifndef APP-NVUE */
display
:
flex
;
display
:
flex
;
...
...
uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
View file @
333a1d6a
...
@@ -47,7 +47,7 @@
...
@@ -47,7 +47,7 @@
{
{
text
:
'支付宝'
,
text
:
'支付宝'
,
icon
:
'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/d684ae40-50be-11eb-8ff1-d5dcf8779628.png'
,
icon
:
'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/d684ae40-50be-11eb-8ff1-d5dcf8779628.png'
,
name
:
'
wx
'
name
:
'
ali
'
},
},
{
{
text
:
'QQ'
,
text
:
'QQ'
,
...
@@ -103,7 +103,7 @@
...
@@ -103,7 +103,7 @@
}
}
}
}
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
>
.uni-popup-share
{
.uni-popup-share
{
background-color
:
#fff
;
background-color
:
#fff
;
border-top-left-radius
:
11px
;
border-top-left-radius
:
11px
;
...
...
uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
0 → 100644
View file @
333a1d6a
<template>
<view class="popup-root" v-if="isOpen" v-show="isShow" @click="clickMask">
<view @click.stop>
<slot></slot>
</view>
</view>
</template>
<script>
type CloseCallBack = ()=> void;
let closeCallBack:CloseCallBack = () :void => {};
export default {
emits:["close","clickMask"],
data() {
return {
isShow:false,
isOpen:false
}
},
props: {
maskClick: {
type: Boolean,
default: true
},
},
watch: {
// 设置show = true 时,如果没有 open 需要设置为 open
isShow:{
handler(isShow) {
// console.log("isShow",isShow)
if(isShow && this.isOpen == false){
this.isOpen = true
}
},
immediate:true
},
// 设置isOpen = true 时,如果没有 isShow 需要设置为 isShow
isOpen:{
handler(isOpen) {
// console.log("isOpen",isOpen)
if(isOpen && this.isShow == false){
this.isShow = true
}
},
immediate:true
}
},
methods:{
open(){
// ...funs : CloseCallBack[]
// if(funs.length > 0){
// closeCallBack = funs[0]
// }
this.isOpen = true;
},
clickMask(){
if(this.maskClick == true){
this.$emit('clickMask')
this.close()
}
},
close(): void{
this.isOpen = false;
this.$emit('close')
closeCallBack()
},
hiden(){
this.isShow = false
},
show(){
this.isShow = true
}
}
}
</script>
<style>
.popup-root {
position: fixed;
top: 0;
left: 0;
width: 750rpx;
height: 100%;
flex: 1;
background-color: rgba(0, 0, 0, 0.3);
justify-content: center;
align-items: center;
z-index: 99;
}
</style>
\ No newline at end of file
uni_modules/uni-popup/components/uni-popup/uni-popup.vue
View file @
333a1d6a
<
template
>
<
template
>
<view
v-if=
"showPopup"
class=
"uni-popup"
:class=
"[popupstyle, isDesktop ? 'fixforpc-z-index' : '']"
@
touchmove
.
stop
.
prevent=
"clear"
>
<view
v-if=
"showPopup"
class=
"uni-popup"
:class=
"[popupstyle, isDesktop ? 'fixforpc-z-index' : '']"
>
<view
@
touchstart=
"touchstart"
>
<view
@
touchstart=
"touchstart"
>
<uni-transition
key=
"1"
v-if=
"maskShow"
name=
"mask"
mode-class=
"fade"
:styles=
"maskClass"
:duration=
"duration"
:show=
"showTrans"
@
click=
"onTap"
/>
<uni-transition
key=
"1"
v-if=
"maskShow"
name=
"mask"
mode-class=
"fade"
:styles=
"maskClass"
<uni-transition
key=
"2"
:mode-class=
"ani"
name=
"content"
:styles=
"transClass"
:duration=
"duration"
:show=
"showTrans"
@
click=
"onTap"
>
:duration=
"duration"
:show=
"showTrans"
@
click=
"onTap"
/>
<view
class=
"uni-popup__wrapper"
:style=
"
{ backgroundColor: bg }" :class="[popupstyle]" @click="clear">
<slot
/></view>
<uni-transition
key=
"2"
:mode-class=
"ani"
name=
"content"
:styles=
"transClass"
:duration=
"duration"
:show=
"showTrans"
@
click=
"onTap"
>
<view
class=
"uni-popup__wrapper"
:style=
"getStyles"
:class=
"[popupstyle]"
@
click=
"clear"
>
<slot
/>
</view>
</uni-transition>
</uni-transition>
</view>
</view>
<!-- #ifdef H5 -->
<!-- #ifdef H5 -->
...
@@ -13,392 +17,487 @@
...
@@ -13,392 +17,487 @@
</
template
>
</
template
>
<
script
>
<
script
>
// #ifdef H5
// #ifdef H5
import
keypress
from
'./keypress.js'
import
keypress
from
'./keypress.js'
// #endif
// #endif
/**
/**
* PopUp 弹出层
* PopUp 弹出层
* @description 弹出层组件,为了解决遮罩弹层的问题
* @description 弹出层组件,为了解决遮罩弹层的问题
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
* @property {String} type = [top|center|bottom|left|right|message|dialog|share] 弹出方式
* @property {String} type = [top|center|bottom|left|right|message|dialog|share] 弹出方式
* @value top 顶部弹出
* @value top 顶部弹出
* @value center 中间弹出
* @value center 中间弹出
* @value bottom 底部弹出
* @value bottom 底部弹出
* @value left 左侧弹出
* @value left 左侧弹出
* @value right 右侧弹出
* @value right 右侧弹出
* @value message 消息提示
* @value message 消息提示
* @value dialog 对话框
* @value dialog 对话框
* @value share 底部分享示例
* @value share 底部分享示例
* @property {Boolean} animation = [true|false] 是否开启动画
* @property {Boolean} animation = [true|false] 是否开启动画
* @property {Boolean} maskClick = [true|false] 蒙版点击是否关闭弹窗
* @property {Boolean} maskClick = [true|false] 蒙版点击是否关闭弹窗(废弃)
* @property {String} backgroundColor 主窗口背景色
* @property {Boolean} isMaskClick = [true|false] 蒙版点击是否关闭弹窗
* @property {Boolean} safeArea 是否适配底部安全区
* @property {String} backgroundColor 主窗口背景色
* @event {Function} change 打开关闭弹窗触发,e={show: false}
* @property {String} maskBackgroundColor 蒙版颜色
* @event {Function} maskClick 点击遮罩触发
* @property {String} borderRadius 设置圆角(左上、右上、右下和左下) 示例:"10px 10px 10px 10px"
*/
* @property {Boolean} safeArea 是否适配底部安全区
* @event {Function} change 打开关闭弹窗触发,e={show: false}
* @event {Function} maskClick 点击遮罩触发
*/
export
default
{
export
default
{
name
:
'uniPopup'
,
name
:
'uniPopup'
,
components
:
{
components
:
{
// #ifdef H5
// #ifdef H5
keypress
keypress
// #endif
// #endif
},
emits
:[
'change'
,
'maskClick'
],
props
:
{
// 开启动画
animation
:
{
type
:
Boolean
,
default
:
true
},
// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
// message: 消息提示 ; dialog : 对话框
type
:
{
type
:
String
,
default
:
'center'
},
// maskClick
maskClick
:
{
type
:
Boolean
,
default
:
true
},
backgroundColor
:
{
type
:
String
,
default
:
'none'
},
},
safeArea
:{
emits
:
[
'change'
,
'maskClick'
],
type
:
Boolean
,
props
:
{
default
:
true
// 开启动画
}
animation
:
{
},
type
:
Boolean
,
default
:
true
watch
:
{
/**
* 监听type类型
*/
type
:
{
handler
:
function
(
type
)
{
if
(
!
this
.
config
[
type
])
return
this
[
this
.
config
[
type
]](
true
)
},
},
immediate
:
true
// 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
},
// message: 消息提示 ; dialog : 对话框
isDesktop
:
{
type
:
{
handler
:
function
(
newVal
)
{
type
:
String
,
if
(
!
this
.
config
[
newVal
])
return
default
:
'center'
this
[
this
.
config
[
this
.
type
]](
true
)
},
},
immediate
:
true
// maskClick
},
isMaskClick
:
{
/**
type
:
Boolean
,
* 监听遮罩是否可点击
default
:
null
* @param {Object} val
*/
maskClick
:
{
handler
:
function
(
val
)
{
this
.
mkclick
=
val
},
},
immediate
:
true
// TODO 2 个版本后废弃属性 ,使用 isMaskClick
}
maskClick
:
{
},
type
:
Boolean
,
data
()
{
default
:
null
return
{
duration
:
300
,
ani
:
[],
showPopup
:
false
,
showTrans
:
false
,
popupWidth
:
0
,
popupHeight
:
0
,
config
:
{
top
:
'top'
,
bottom
:
'bottom'
,
center
:
'center'
,
left
:
'left'
,
right
:
'right'
,
message
:
'top'
,
dialog
:
'center'
,
share
:
'bottom'
},
},
maskClass
:
{
backgroundColor
:
{
position
:
'fixed'
,
type
:
String
,
bottom
:
0
,
default
:
'none'
top
:
0
,
left
:
0
,
right
:
0
,
backgroundColor
:
'rgba(0, 0, 0, 0.2)'
},
},
transClass
:
{
safeArea
:
{
position
:
'fixed'
,
type
:
Boolean
,
left
:
0
,
default
:
true
right
:
0
},
},
maskShow
:
true
,
maskBackgroundColor
:
{
mkclick
:
true
,
type
:
String
,
popupstyle
:
this
.
isDesktop
?
'fixforpc-top'
:
'top'
default
:
'rgba(0, 0, 0, 0.4)'
}
},
},
borderRadius
:{
computed
:
{
type
:
String
,
isDesktop
()
{
return
this
.
popupWidth
>=
500
&&
this
.
popupHeight
>=
500
},
bg
()
{
if
(
this
.
backgroundColor
===
''
||
this
.
backgroundColor
===
'none'
)
{
return
'transparent'
}
return
this
.
backgroundColor
}
},
mounted
()
{
const
fixSize
=
()
=>
{
const
{
windowWidth
,
windowHeight
,
windowTop
,
safeAreaInsets
}
=
uni
.
getSystemInfoSync
()
this
.
popupWidth
=
windowWidth
this
.
popupHeight
=
windowHeight
+
windowTop
// 是否适配底部安全区
if
(
this
.
safeArea
){
this
.
safeAreaInsets
=
safeAreaInsets
}
else
{
this
.
safeAreaInsets
=
0
}
}
}
fixSize
()
// #ifdef H5
// window.addEventListener('resize', fixSize)
// this.$once('hook:beforeDestroy', () => {
// window.removeEventListener('resize', fixSize)
// })
// #endif
},
created
()
{
this
.
mkclick
=
this
.
maskClick
if
(
this
.
animation
)
{
this
.
duration
=
300
}
else
{
this
.
duration
=
0
}
// TODO 处理 message 组件生命周期异常的问题
this
.
messageChild
=
null
// TODO 解决头条冒泡的问题
this
.
clearPropagation
=
false
},
methods
:
{
/**
* 公用方法,不显示遮罩层
*/
closeMask
()
{
this
.
maskShow
=
false
},
/**
* 公用方法,遮罩层禁止点击
*/
disableMask
()
{
this
.
mkclick
=
false
},
// TODO nvue 取消冒泡
clear
(
e
)
{
// #ifndef APP-NVUE
e
.
stopPropagation
()
// #endif
this
.
clearPropagation
=
true
},
},
open
(
direction
)
{
watch
:
{
let
innerType
=
[
'top'
,
'center'
,
'bottom'
,
'left'
,
'right'
,
'message'
,
'dialog'
,
'share'
]
/**
if
(
!
(
direction
&&
innerType
.
indexOf
(
direction
)
!==
-
1
))
{
* 监听type类型
direction
=
this
.
type
*/
}
type
:
{
if
(
!
this
.
config
[
direction
])
{
handler
:
function
(
type
)
{
console
.
error
(
'缺少类型:'
,
direction
)
if
(
!
this
.
config
[
type
])
return
return
this
[
this
.
config
[
type
]](
true
)
},
immediate
:
true
},
isDesktop
:
{
handler
:
function
(
newVal
)
{
if
(
!
this
.
config
[
newVal
])
return
this
[
this
.
config
[
this
.
type
]](
true
)
},
immediate
:
true
},
/**
* 监听遮罩是否可点击
* @param {Object} val
*/
maskClick
:
{
handler
:
function
(
val
)
{
this
.
mkclick
=
val
},
immediate
:
true
},
isMaskClick
:
{
handler
:
function
(
val
)
{
this
.
mkclick
=
val
},
immediate
:
true
},
// H5 下禁止底部滚动
showPopup
(
show
)
{
// #ifdef H5
// fix by mehaotian 处理 h5 滚动穿透的问题
document
.
getElementsByTagName
(
'body'
)[
0
].
style
.
overflow
=
show
?
'hidden'
:
'visible'
// #endif
}
}
this
[
this
.
config
[
direction
]]()
this
.
$emit
(
'change'
,
{
show
:
true
,
type
:
direction
})
},
close
(
type
)
{
this
.
showTrans
=
false
this
.
$emit
(
'change'
,
{
show
:
false
,
type
:
this
.
type
})
clearTimeout
(
this
.
timer
)
// // 自定义关闭事件
// this.customOpen && this.customClose()
this
.
timer
=
setTimeout
(()
=>
{
this
.
showPopup
=
false
},
300
)
},
// TODO 处理冒泡事件,头条的冒泡事件有问题 ,先这样兼容
touchstart
(){
this
.
clearPropagation
=
false
},
},
data
()
{
onTap
()
{
return
{
if
(
this
.
clearPropagation
)
{
duration
:
300
,
// fix by mehaotian 兼容 nvue
ani
:
[],
this
.
clearPropagation
=
false
showPopup
:
false
,
return
showTrans
:
false
,
popupWidth
:
0
,
popupHeight
:
0
,
config
:
{
top
:
'top'
,
bottom
:
'bottom'
,
center
:
'center'
,
left
:
'left'
,
right
:
'right'
,
message
:
'top'
,
dialog
:
'center'
,
share
:
'bottom'
},
maskClass
:
{
position
:
'fixed'
,
bottom
:
0
,
top
:
0
,
left
:
0
,
right
:
0
,
backgroundColor
:
'rgba(0, 0, 0, 0.4)'
},
transClass
:
{
backgroundColor
:
'transparent'
,
borderRadius
:
this
.
borderRadius
||
"0"
,
position
:
'fixed'
,
left
:
0
,
right
:
0
},
maskShow
:
true
,
mkclick
:
true
,
popupstyle
:
'top'
}
}
this
.
$emit
(
'maskClick'
)
if
(
!
this
.
mkclick
)
return
this
.
close
()
},
},
/**
computed
:
{
* 顶部弹出样式处理
getStyles
()
{
*/
let
res
=
{
backgroundColor
:
this
.
bg
};
top
(
type
)
{
if
(
this
.
borderRadius
||
"0"
)
{
this
.
popupstyle
=
this
.
isDesktop
?
'fixforpc-top'
:
'top'
res
=
Object
.
assign
(
res
,
{
borderRadius
:
this
.
borderRadius
})
this
.
ani
=
[
'slide-top'
]
this
.
transClass
=
{
position
:
'fixed'
,
left
:
0
,
right
:
0
,
backgroundColor
:
this
.
bg
}
// TODO 兼容 type 属性 ,后续会废弃
if
(
type
)
return
this
.
showPopup
=
true
this
.
showTrans
=
true
this
.
$nextTick
(()
=>
{
if
(
this
.
messageChild
&&
this
.
type
===
'message'
)
{
this
.
messageChild
.
timerClose
()
}
}
})
return
res
;
},
},
/**
isDesktop
()
{
* 底部弹出样式处理
return
this
.
popupWidth
>=
500
&&
this
.
popupHeight
>=
500
*/
},
bottom
(
type
)
{
bg
()
{
this
.
popupstyle
=
'bottom'
if
(
this
.
backgroundColor
===
''
||
this
.
backgroundColor
===
'none'
)
{
this
.
ani
=
[
'slide-bottom'
]
return
'transparent'
}
this
.
transClass
=
{
return
this
.
backgroundColor
position
:
'fixed'
,
left
:
0
,
right
:
0
,
bottom
:
0
,
paddingBottom
:
(
this
.
safeAreaInsets
&&
this
.
safeAreaInsets
.
bottom
)
||
0
,
backgroundColor
:
this
.
bg
}
}
// TODO 兼容 type 属性 ,后续会废弃
if
(
type
)
return
this
.
showPopup
=
true
this
.
showTrans
=
true
},
},
/**
mounted
()
{
* 中间弹出样式处理
const
fixSize
=
()
=>
{
*/
const
{
center
(
type
)
{
windowWidth
,
this
.
popupstyle
=
'center'
windowHeight
,
this
.
ani
=
[
'zoom-out'
,
'fade'
]
windowTop
,
this
.
transClass
=
{
safeArea
,
position
:
'fixed'
,
screenHeight
,
/* #ifndef APP-NVUE */
safeAreaInsets
display
:
'flex'
,
}
=
uni
.
getSystemInfoSync
()
flexDirection
:
'column'
,
this
.
popupWidth
=
windowWidth
/* #endif */
this
.
popupHeight
=
windowHeight
+
(
windowTop
||
0
)
bottom
:
0
,
// TODO fix by mehaotian 是否适配底部安全区 ,目前微信ios 、和 app ios 计算有差异,需要框架修复
left
:
0
,
if
(
safeArea
&&
this
.
safeArea
)
{
right
:
0
,
// #ifdef MP-WEIXIN
top
:
0
,
this
.
safeAreaInsets
=
screenHeight
-
safeArea
.
bottom
justifyContent
:
'center'
,
// #endif
alignItems
:
'center'
// #ifndef MP-WEIXIN
this
.
safeAreaInsets
=
safeAreaInsets
.
bottom
// #endif
}
else
{
this
.
safeAreaInsets
=
0
}
}
}
// TODO 兼容 type 属性 ,后续会废弃
fixSize
()
if
(
type
)
return
// #ifdef H5
this
.
showPopup
=
true
// window.addEventListener('resize', fixSize)
this
.
showTrans
=
true
// this.$once('hook:beforeDestroy', () => {
// window.removeEventListener('resize', fixSize)
// })
// #endif
},
},
left
(
type
)
{
// #ifndef VUE3
this
.
popupstyle
=
'left'
// TODO vue2
this
.
ani
=
[
'slide-left'
]
destroyed
()
{
this
.
transClass
=
{
this
.
setH5Visible
()
position
:
'fixed'
,
},
left
:
0
,
// #endif
bottom
:
0
,
// #ifdef VUE3
top
:
0
,
// TODO vue3
backgroundColor
:
this
.
bg
,
unmounted
()
{
/* #ifndef APP-NVUE */
this
.
setH5Visible
()
display
:
'flex'
,
},
flexDirection
:
'column'
// #endif
/* #endif */
activated
()
{
this
.
setH5Visible
(
!
this
.
showPopup
);
},
deactivated
()
{
this
.
setH5Visible
(
true
);
},
created
()
{
// this.mkclick = this.isMaskClick || this.maskClick
if
(
this
.
isMaskClick
===
null
&&
this
.
maskClick
===
null
)
{
this
.
mkclick
=
true
}
else
{
this
.
mkclick
=
this
.
isMaskClick
!==
null
?
this
.
isMaskClick
:
this
.
maskClick
}
if
(
this
.
animation
)
{
this
.
duration
=
300
}
else
{
this
.
duration
=
0
}
}
// TODO 兼容 type 属性 ,后续会废弃
// TODO 处理 message 组件生命周期异常的问题
if
(
type
)
return
this
.
messageChild
=
null
this
.
showPopup
=
true
// TODO 解决头条冒泡的问题
this
.
showTrans
=
true
this
.
clearPropagation
=
false
this
.
maskClass
.
backgroundColor
=
this
.
maskBackgroundColor
},
},
right
(
type
)
{
methods
:
{
this
.
popupstyle
=
'right'
setH5Visible
(
visible
=
true
)
{
this
.
ani
=
[
'slide-right'
]
// #ifdef H5
this
.
transClass
=
{
// fix by mehaotian 处理 h5 滚动穿透的问题
position
:
'fixed'
,
document
.
getElementsByTagName
(
'body'
)[
0
].
style
.
overflow
=
visible
?
"visible"
:
"hidden"
;
bottom
:
0
,
// #endif
right
:
0
,
},
top
:
0
,
/**
backgroundColor
:
this
.
bg
,
* 公用方法,不显示遮罩层
/* #ifndef APP-NVUE */
*/
display
:
'flex'
,
closeMask
()
{
flexDirection
:
'column'
this
.
maskShow
=
false
/* #endif */
},
/**
* 公用方法,遮罩层禁止点击
*/
disableMask
()
{
this
.
mkclick
=
false
},
// TODO nvue 取消冒泡
clear
(
e
)
{
// #ifndef APP-NVUE
e
.
stopPropagation
()
// #endif
this
.
clearPropagation
=
true
},
open
(
direction
)
{
// fix by mehaotian 处理快速打开关闭的情况
if
(
this
.
showPopup
)
{
return
}
let
innerType
=
[
'top'
,
'center'
,
'bottom'
,
'left'
,
'right'
,
'message'
,
'dialog'
,
'share'
]
if
(
!
(
direction
&&
innerType
.
indexOf
(
direction
)
!==
-
1
))
{
direction
=
this
.
type
}
if
(
!
this
.
config
[
direction
])
{
console
.
error
(
'缺少类型:'
,
direction
)
return
}
this
[
this
.
config
[
direction
]]()
this
.
$emit
(
'change'
,
{
show
:
true
,
type
:
direction
})
},
close
(
type
)
{
this
.
showTrans
=
false
this
.
$emit
(
'change'
,
{
show
:
false
,
type
:
this
.
type
})
clearTimeout
(
this
.
timer
)
// // 自定义关闭事件
// this.customOpen && this.customClose()
this
.
timer
=
setTimeout
(()
=>
{
this
.
showPopup
=
false
},
300
)
},
// TODO 处理冒泡事件,头条的冒泡事件有问题 ,先这样兼容
touchstart
()
{
this
.
clearPropagation
=
false
},
onTap
()
{
if
(
this
.
clearPropagation
)
{
// fix by mehaotian 兼容 nvue
this
.
clearPropagation
=
false
return
}
this
.
$emit
(
'maskClick'
)
if
(
!
this
.
mkclick
)
return
this
.
close
()
},
/**
* 顶部弹出样式处理
*/
top
(
type
)
{
this
.
popupstyle
=
this
.
isDesktop
?
'fixforpc-top'
:
'top'
this
.
ani
=
[
'slide-top'
]
this
.
transClass
=
{
position
:
'fixed'
,
left
:
0
,
right
:
0
,
backgroundColor
:
this
.
bg
,
borderRadius
:
this
.
borderRadius
||
"0"
}
// TODO 兼容 type 属性 ,后续会废弃
if
(
type
)
return
this
.
showPopup
=
true
this
.
showTrans
=
true
this
.
$nextTick
(()
=>
{
if
(
this
.
messageChild
&&
this
.
type
===
'message'
)
{
this
.
messageChild
.
timerClose
()
}
})
},
/**
* 底部弹出样式处理
*/
bottom
(
type
)
{
this
.
popupstyle
=
'bottom'
this
.
ani
=
[
'slide-bottom'
]
this
.
transClass
=
{
position
:
'fixed'
,
left
:
0
,
right
:
0
,
bottom
:
0
,
paddingBottom
:
this
.
safeAreaInsets
+
'px'
,
backgroundColor
:
this
.
bg
,
borderRadius
:
this
.
borderRadius
||
"0"
,
}
// TODO 兼容 type 属性 ,后续会废弃
if
(
type
)
return
this
.
showPopup
=
true
this
.
showTrans
=
true
},
/**
* 中间弹出样式处理
*/
center
(
type
)
{
this
.
popupstyle
=
'center'
//微信小程序下,组合动画会出现文字向上闪动问题,再此做特殊处理
// #ifdef MP-WEIXIN
this
.
ani
=
[
'fade'
]
// #endif
// #ifndef MP-WEIXIN
this
.
ani
=
[
'zoom-out'
,
'fade'
]
// #endif
this
.
transClass
=
{
position
:
'fixed'
,
/* #ifndef APP-NVUE */
display
:
'flex'
,
flexDirection
:
'column'
,
/* #endif */
bottom
:
0
,
left
:
0
,
right
:
0
,
top
:
0
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
borderRadius
:
this
.
borderRadius
||
"0"
}
// TODO 兼容 type 属性 ,后续会废弃
if
(
type
)
return
this
.
showPopup
=
true
this
.
showTrans
=
true
},
left
(
type
)
{
this
.
popupstyle
=
'left'
this
.
ani
=
[
'slide-left'
]
this
.
transClass
=
{
position
:
'fixed'
,
left
:
0
,
bottom
:
0
,
top
:
0
,
backgroundColor
:
this
.
bg
,
borderRadius
:
this
.
borderRadius
||
"0"
,
/* #ifndef APP-NVUE */
display
:
'flex'
,
flexDirection
:
'column'
/* #endif */
}
// TODO 兼容 type 属性 ,后续会废弃
if
(
type
)
return
this
.
showPopup
=
true
this
.
showTrans
=
true
},
right
(
type
)
{
this
.
popupstyle
=
'right'
this
.
ani
=
[
'slide-right'
]
this
.
transClass
=
{
position
:
'fixed'
,
bottom
:
0
,
right
:
0
,
top
:
0
,
backgroundColor
:
this
.
bg
,
borderRadius
:
this
.
borderRadius
||
"0"
,
/* #ifndef APP-NVUE */
display
:
'flex'
,
flexDirection
:
'column'
/* #endif */
}
// TODO 兼容 type 属性 ,后续会废弃
if
(
type
)
return
this
.
showPopup
=
true
this
.
showTrans
=
true
}
}
// TODO 兼容 type 属性 ,后续会废弃
if
(
type
)
return
this
.
showPopup
=
true
this
.
showTrans
=
true
}
}
}
}
}
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
>
.uni-popup
{
.uni-popup
{
z-index
:
99999
;
position
:
fixed
;
position
:
fixed
;
/* #ifndef APP-NVUE */
z-index
:
9999
;
/* #endif */
&.top,
&.left,
&.right
{
/* #ifdef H5 */
top
:
var
(
--window-top
);
/* #endif */
/* #ifndef H5 */
top
:
0
;
/* #endif */
}
.uni-popup__wrapper
{
/* #ifndef APP-NVUE */
display
:
block
;
/* #endif */
position
:
relative
;
/* iphonex 等安全区设置,底部安全区适配 */
/* #ifndef APP-NVUE */
/* #ifndef APP-NVUE */
//
padding-bottom
:
constant
(
safe-area-inset-bottom
)
;
z-index
:
99
;
//
padding-bottom
:
env
(
safe-area-inset-bottom
);
/* #endif */
/* #endif */
&.top,
&.left,
&.left,
&.right
{
&.right
{
/* #ifdef H5 */
/* #ifdef H5 */
padding-
top
:
var
(
--window-top
);
top
:
var
(
--window-top
);
/* #endif */
/* #endif */
/* #ifndef H5 */
/* #ifndef H5 */
padding-
top
:
0
;
top
:
0
;
/* #endif */
/* #endif */
flex
:
1
;
}
.uni-popup__wrapper
{
/* #ifndef APP-NVUE */
display
:
block
;
/* #endif */
position
:
relative
;
/* iphonex 等安全区设置,底部安全区适配 */
/* #ifndef APP-NVUE */
//
padding-bottom
:
constant
(
safe-area-inset-bottom
);
//
padding-bottom
:
env
(
safe-area-inset-bottom
);
/* #endif */
&.left,
&.right
{
/* #ifdef H5 */
padding-top
:
var
(
--window-top
);
/* #endif */
/* #ifndef H5 */
padding-top
:
0
;
/* #endif */
flex
:
1
;
}
}
}
}
}
}
.fixforpc-z-index
{
.fixforpc-z-index
{
/* #ifndef APP-NVUE */
/* #ifndef APP-NVUE */
z-index
:
999
;
z-index
:
999
;
/* #endif */
/* #endif */
}
}
.fixforpc-top
{
.fixforpc-top
{
top
:
0
;
top
:
0
;
}
}
</
style
>
</
style
>
uni_modules/uni-popup/package.json
View file @
333a1d6a
{
{
"id"
:
"uni-popup"
,
"id"
:
"uni-popup"
,
"displayName"
:
"uni-popup 弹出层"
,
"displayName"
:
"uni-popup 弹出层"
,
"version"
:
"1.
7.2
"
,
"version"
:
"1.
9.1
"
,
"description"
:
" Popup 组件,提供常用的弹层"
,
"description"
:
" Popup 组件,提供常用的弹层"
,
"keywords"
:
[
"keywords"
:
[
"uni-ui"
,
"uni-ui"
,
...
@@ -17,12 +17,8 @@
...
@@ -17,12 +17,8 @@
"directories"
:
{
"directories"
:
{
"example"
:
"../../temps/example_temps"
"example"
:
"../../temps/example_temps"
},
},
"dcloudext"
:
{
"dcloudext"
:
{
"category"
:
[
"sale"
:
{
"前端组件"
,
"通用组件"
],
"sale"
:
{
"regular"
:
{
"regular"
:
{
"price"
:
"0.00"
"price"
:
"0.00"
},
},
...
@@ -38,7 +34,8 @@
...
@@ -38,7 +34,8 @@
"data"
:
"无"
,
"data"
:
"无"
,
"permissions"
:
"无"
"permissions"
:
"无"
},
},
"npmurl"
:
"https://www.npmjs.com/package/@dcloudio/uni-ui"
"npmurl"
:
"https://www.npmjs.com/package/@dcloudio/uni-ui"
,
"type"
:
"component-vue"
},
},
"uni_modules"
:
{
"uni_modules"
:
{
"dependencies"
:
[
"dependencies"
:
[
...
@@ -49,7 +46,8 @@
...
@@ -49,7 +46,8 @@
"platforms"
:
{
"platforms"
:
{
"cloud"
:
{
"cloud"
:
{
"tcb"
:
"y"
,
"tcb"
:
"y"
,
"aliyun"
:
"y"
"aliyun"
:
"y"
,
"alipay"
:
"n"
},
},
"client"
:
{
"client"
:
{
"App"
:
{
"App"
:
{
...
...
uni_modules/uni-scss/changelog.md
View file @
333a1d6a
## 1.0.3(2022-01-21)
-
优化 组件示例
## 1.0.2(2021-11-22)
## 1.0.2(2021-11-22)
-
修复 / 符号在 vue 不同版本兼容问题引起的报错问题
-
修复 / 符号在 vue 不同版本兼容问题引起的报错问题
## 1.0.1(2021-11-22)
## 1.0.1(2021-11-22)
...
...
uni_modules/uni-scss/package.json
View file @
333a1d6a
{
{
"id"
:
"uni-scss"
,
"id"
:
"uni-scss"
,
"displayName"
:
"uni-scss 辅助样式"
,
"displayName"
:
"uni-scss 辅助样式"
,
"version"
:
"1.0.
2
"
,
"version"
:
"1.0.
3
"
,
"description"
:
"uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。"
,
"description"
:
"uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。"
,
"keywords"
:
[
"keywords"
:
[
"uni-scss"
,
"uni-scss"
,
...
@@ -14,8 +14,8 @@
...
@@ -14,8 +14,8 @@
},
},
"dcloudext"
:
{
"dcloudext"
:
{
"category"
:
[
"category"
:
[
"
uni-app前端模板
"
,
"
JS SDK
"
,
"
前端页面模板
"
"
通用 SDK
"
],
],
"sale"
:
{
"sale"
:
{
"regular"
:
{
"regular"
:
{
...
...
uni_modules/uni-transition/changelog.md
View file @
333a1d6a
## 1.3.3(2024-04-23)
-
修复 当元素会受变量影响自动隐藏的bug
## 1.3.2(2023-05-04)
-
修复 NVUE 平台报错的问题
## 1.3.1(2021-11-23)
## 1.3.1(2021-11-23)
-
修复 init 方法初始化问题
-
修复 init 方法初始化问题
## 1.3.0(2021-11-19)
## 1.3.0(2021-11-19)
...
...
uni_modules/uni-transition/components/uni-transition/createAnimation.js
View file @
333a1d6a
...
@@ -10,7 +10,10 @@ const nvueAnimation = uni.requireNativePlugin('animation')
...
@@ -10,7 +10,10 @@ const nvueAnimation = uni.requireNativePlugin('animation')
class
MPAnimation
{
class
MPAnimation
{
constructor
(
options
,
_this
)
{
constructor
(
options
,
_this
)
{
this
.
options
=
options
this
.
options
=
options
this
.
animation
=
uni
.
createAnimation
(
options
)
// 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误
this
.
animation
=
uni
.
createAnimation
({
...
options
})
this
.
currentStepAnimates
=
{}
this
.
currentStepAnimates
=
{}
this
.
next
=
0
this
.
next
=
0
this
.
$
=
_this
this
.
$
=
_this
...
...
uni_modules/uni-transition/components/uni-transition/uni-transition.vue
View file @
333a1d6a
<
template
>
<
template
>
<view
v-if=
"isShow"
ref=
"ani"
:animation=
"animationData"
:class=
"customClass"
:style=
"transformStyles"
@
click=
"onClick"
><slot></slot></view>
<!-- #ifndef APP-NVUE -->
<view
v-show=
"isShow"
ref=
"ani"
:animation=
"animationData"
:class=
"customClass"
:style=
"transformStyles"
@
click=
"onClick"
><slot></slot></view>
<!-- #endif -->
<!-- #ifdef APP-NVUE -->
<view
v-if=
"isShow"
ref=
"ani"
:animation=
"animationData"
:class=
"customClass"
:style=
"transformStyles"
@
click=
"onClick"
><slot></slot></view>
<!-- #endif -->
</
template
>
</
template
>
<
script
>
<
script
>
...
@@ -48,7 +53,11 @@ export default {
...
@@ -48,7 +53,11 @@ export default {
customClass
:{
customClass
:{
type
:
String
,
type
:
String
,
default
:
''
default
:
''
}
},
onceRender
:{
type
:
Boolean
,
default
:
false
},
},
},
data
()
{
data
()
{
return
{
return
{
...
@@ -245,7 +254,7 @@ export default {
...
@@ -245,7 +254,7 @@ export default {
},
},
animationType
(
type
)
{
animationType
(
type
)
{
return
{
return
{
fade
:
type
?
1
:
0
,
fade
:
type
?
0
:
1
,
'slide-top'
:
`translateY(
${
type
?
'0'
:
'-100%'
}
)`
,
'slide-top'
:
`translateY(
${
type
?
'0'
:
'-100%'
}
)`
,
'slide-right'
:
`translateX(
${
type
?
'0'
:
'100%'
}
)`
,
'slide-right'
:
`translateX(
${
type
?
'0'
:
'100%'
}
)`
,
'slide-bottom'
:
`translateY(
${
type
?
'0'
:
'100%'
}
)`
,
'slide-bottom'
:
`translateY(
${
type
?
'0'
:
'100%'
}
)`
,
...
...
uni_modules/uni-transition/package.json
View file @
333a1d6a
{
{
"id"
:
"uni-transition"
,
"id"
:
"uni-transition"
,
"displayName"
:
"uni-transition 过渡动画"
,
"displayName"
:
"uni-transition 过渡动画"
,
"version"
:
"1.3.
1
"
,
"version"
:
"1.3.
3
"
,
"description"
:
"元素的简单过渡动画"
,
"description"
:
"元素的简单过渡动画"
,
"keywords"
:
[
"keywords"
:
[
"uni-ui"
,
"uni-ui"
,
...
@@ -17,11 +17,7 @@
...
@@ -17,11 +17,7 @@
"directories"
:
{
"directories"
:
{
"example"
:
"../../temps/example_temps"
"example"
:
"../../temps/example_temps"
},
},
"dcloudext"
:
{
"dcloudext"
:
{
"category"
:
[
"前端组件"
,
"通用组件"
],
"sale"
:
{
"sale"
:
{
"regular"
:
{
"regular"
:
{
"price"
:
"0.00"
"price"
:
"0.00"
...
@@ -38,7 +34,8 @@
...
@@ -38,7 +34,8 @@
"data"
:
"无"
,
"data"
:
"无"
,
"permissions"
:
"无"
"permissions"
:
"无"
},
},
"npmurl"
:
"https://www.npmjs.com/package/@dcloudio/uni-ui"
"npmurl"
:
"https://www.npmjs.com/package/@dcloudio/uni-ui"
,
"type"
:
"component-vue"
},
},
"uni_modules"
:
{
"uni_modules"
:
{
"dependencies"
:
[
"uni-scss"
],
"dependencies"
:
[
"uni-scss"
],
...
@@ -46,7 +43,8 @@
...
@@ -46,7 +43,8 @@
"platforms"
:
{
"platforms"
:
{
"cloud"
:
{
"cloud"
:
{
"tcb"
:
"y"
,
"tcb"
:
"y"
,
"aliyun"
:
"y"
"aliyun"
:
"y"
,
"alipay"
:
"n"
},
},
"client"
:
{
"client"
:
{
"App"
:
{
"App"
:
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment