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
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
476 additions
and
110 deletions
+476
-110
index.config.js
config/index.config.js
+2
-2
order.vue
pages/order/order.vue
+94
-25
changelog.md
uni_modules/uni-popup/changelog.md
+40
-0
uni-popup-dialog.vue
...ni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
+73
-20
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
+138
-39
package.json
uni_modules/uni-popup/package.json
+5
-7
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
+11
-2
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 = {
// 开发环境配置
development
:
{
// assetsPath: 'https://www.coujio.com/wechat_static', // 静态资源路径
//
assetsPath: 'https://coujiao.pseer.com/wechat_static', // 静态资源路径
assetsPath
:
'http://localhost:8211/static'
,
// 静态资源路径
assetsPath
:
'https://coujiao.pseer.com/wechat_static'
,
// 静态资源路径
//
assetsPath: 'http://localhost:8211/static', // 静态资源路径
// baseUrl: 'https://www.coujio.com/front-api', // 后台接口请求地址
baseUrl
:
'https://coujiao.pseer.com/front-api'
,
// 后台接口请求地址
// baseUrl: 'http://10.24.3.185:8883/front-api',
...
...
pages/order/order.vue
View file @
333a1d6a
...
...
@@ -198,7 +198,7 @@
</view>
<view
class=
"flex-between price"
>
<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
v-show=
"orderTypeList[index].type==1"
class=
"flex-between price"
>
<text
class=
"text-black text-left"
>
房间单价
</text>
...
...
@@ -218,7 +218,7 @@
</view>
</view>
<view
class=
"flex-between price"
>
<text
class=
"text-black text-left"
>
预约优惠
</text>
<text
class=
"text-black text-left"
>
优惠金额
</text>
<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-lg text-bold"
>
{{
computePriceInfo
.
couponFee
||
0
}}
</text>
...
...
@@ -335,22 +335,17 @@
@
close=
"close"
@
confirm=
"confirm"
></uni-popup-dialog>
</uni-popup>
<uni-popup
ref=
"popupMessage"
type=
"center"
>
<view
class=
"flex-col message-box"
>
<view
class=
"header"
>
<text>
提示
</text>
</view>
<view
class=
"content"
>
<text>
您选的预定时间已有被占用,请选择其他空闲时段
</text>
</view>
<view
class=
"button-box"
@
tap=
"onCancleTip"
>
<text>
好的
</text>
</view>
</view>
<uni-popup
ref=
"popupMessage"
type=
"dialog"
>
<uni-popup-dialog
type=
"warn"
mode=
"base"
title=
"提示"
:showClose=
"false"
content=
"当前条件下无可预约的时段,请手动选择合适的空闲时段"
:duration=
"2000"
:before-close=
"true"
@
close=
"onCancleTip"
@
confirm=
"onCancleTip"
></uni-popup-dialog>
</uni-popup>
<uni-popup
ref=
"popupMessage2"
type=
"dialog"
>
<uni-popup-dialog
type=
"warn"
mode=
"base"
title=
"提示"
:showClose=
"false"
confirmText=
"好的"
content=
"所选套餐,可用时长不足,请选择其他日期的套餐"
:duration=
"2000"
:before-close=
"true"
@
close=
"onCancleTip"
@
confirm=
"onCancleTip"
></uni-popup-dialog>
</uni-popup>
<uni-popup
ref=
"popupDialog"
type=
"dialog"
>
<uni-popup-dialog
type=
"warn"
mode=
"base"
title=
"提示"
content=
"所选套餐可使用时长不足,点击确认表示接受"
:duration=
"2000"
:before-close=
"true"
@
close=
"onCancleTip"
@
confirm=
"onPackageCheck"
></uni-popup-dialog>
</uni-popup>
</view>
</
template
>
...
...
@@ -492,7 +487,8 @@
formatAllData
:{
list
:[]
},
orderInfo
:{}
orderInfo
:{},
tempPackageIndex
:
0
};
},
filters
:
{
...
...
@@ -562,13 +558,11 @@
});
console
.
log
(
this
.
formatAllData
,
"this.formatAllData"
)
},
// 套餐切换
onChangePackage2
(
index
){
if
(
this
.
modeIndex2
==
index
)
return
;
onPackageCheck
(){
this
.
onCancleTip
();
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
startDate
=
moment
(
moment
().
format
(
startStr
)).
format
(
"YYYY-MM-DD HH:00:00"
);
...
...
@@ -580,6 +574,73 @@
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
;
this
.
formatAllData
=
this
.
onTransiteForDate
({
list
:
JSON
.
parse
(
JSON
.
stringify
(
this
.
dateIntervalList
)),
...
...
@@ -1129,7 +1190,7 @@
})
},
onSelectDatePoint
(
val
,
i
)
{
if
(
this
.
orderType
==
2
)
return
;
if
(
this
.
orderType
==
2
||
this
.
modeIndex2
>=
0
)
return
;
if
(
i
>=
24
)
{
uni
.
showToast
({
icon
:
"none"
,
...
...
@@ -1211,6 +1272,12 @@
useStatus
=
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
();
...
...
@@ -1220,7 +1287,7 @@
return
item
})
let
paramsData
=
{
list
,
list
:
useStatus
?
JSON
.
parse
(
JSON
.
stringify
(
this
.
dateIntervalList
))
:
list
,
startDateTime
:
moment
(
startPoint
).
format
(
"YYYY-MM-DD HH:mm:ss"
),
startTime
:
moment
(
startPoint
).
format
(
"HH:mm"
),
endDateTime
:
moment
(
endPoint
).
format
(
"YYYY-MM-DD HH:mm:ss"
),
...
...
@@ -1240,6 +1307,8 @@
},
onCancleTip
(){
this
.
$refs
.
popupMessage
.
close
();
this
.
$refs
.
popupMessage2
.
close
();
this
.
$refs
.
popupDialog
.
close
();
},
onCheckDate
()
{}
}
...
...
@@ -1747,7 +1816,7 @@
background
:
#FFFFFF
;
box-shadow
:
0
rpx
5
rpx
25
rpx
0
rpx
rgba
(
0
,
0
,
0
,
0.1
);
padding
:
0
30
upx
;
z-index
:
111
;
z-index
:
66
;
>.flex-row
{
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.1(2021-11-26)
...
...
uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
View file @
333a1d6a
...
...
@@ -10,14 +10,15 @@
</view>
<view
v-else
class=
"uni-dialog-content"
>
<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>
</view>
<view
class=
"uni-dialog-button-group"
>
<view
class=
"uni-dialog-button"
@
click=
"closeDialog"
>
<text
class=
"uni-dialog-button-text"
>
{{
c
ancel
Text
}}
</text>
<view
class=
"uni-dialog-button"
v-if=
"showClose"
@
click=
"closeDialog"
>
<text
class=
"uni-dialog-button-text"
>
{{
c
lose
Text
}}
</text>
</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>
</view>
</view>
...
...
@@ -31,13 +32,16 @@
initVueI18n
}
from
'@dcloudio/uni-i18n'
import
messages
from
'../uni-popup/i18n/index.js'
const
{
t
}
=
initVueI18n
(
messages
)
const
{
t
}
=
initVueI18n
(
messages
)
/**
* PopUp 弹出层-对话框样式
* @description 弹出层-对话框样式
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
* @property {String} value input 模式下的默认值
* @property {String} placeholder input 模式下输入提示
* @property {Boolean} focus input模式下是否自动聚焦,默认为true
* @property {String} type = [success|warning|info|error] 主题样式
* @value success 成功
* @value warning 提示
...
...
@@ -46,8 +50,10 @@
* @property {String} mode = [base|input] 模式、
* @value base 基础对话框
* @value input 可输入对话框
* @showClose {Boolean} 是否显示关闭按钮
* @property {String} content 对话框内容
* @property {Boolean} beforeClose 是否拦截取消事件
* @property {Number} maxlength 输入
* @event {Function} confirm 点击确认按钮触发
* @event {Function} close 点击取消按钮触发
*/
...
...
@@ -55,12 +61,30 @@
export
default
{
name
:
"uniPopupDialog"
,
mixins
:
[
popup
],
emits
:
[
'confirm'
,
'close
'
],
emits
:
[
'confirm'
,
'close'
,
'update:modelValue'
,
'input
'
],
props
:
{
inputType
:
{
type
:
String
,
default
:
'text'
},
showClose
:
{
type
:
Boolean
,
default
:
true
},
// #ifdef VUE2
value
:
{
type
:
[
String
,
Number
],
default
:
''
},
// #endif
// #ifdef VUE3
modelValue
:
{
type
:
[
Number
,
String
],
default
:
''
},
// #endif
placeholder
:
{
type
:
[
String
,
Number
],
default
:
''
...
...
@@ -84,21 +108,36 @@
beforeClose
:
{
type
:
Boolean
,
default
:
false
},
cancelText
:
{
type
:
String
,
default
:
''
},
confirmText
:
{
type
:
String
,
default
:
''
},
maxlength
:
{
type
:
Number
,
default
:
-
1
,
},
focus
:
{
type
:
Boolean
,
default
:
true
,
}
},
data
()
{
return
{
dialogType
:
'error'
,
focus
:
false
,
val
:
""
}
},
computed
:
{
okText
()
{
return
t
(
"uni-popup.ok"
)
return
t
his
.
confirmText
||
t
(
"uni-popup.ok"
)
},
c
ancel
Text
()
{
return
t
(
"uni-popup.cancel"
)
c
lose
Text
()
{
return
t
his
.
cancelText
||
t
(
"uni-popup.cancel"
)
},
placeholderText
()
{
return
this
.
placeholder
||
t
(
"uni-popup.placeholder"
)
...
...
@@ -117,34 +156,48 @@
}
},
value
(
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
()
{
// 对话框遮罩不可点击
this
.
popup
.
disableMask
()
// this.popup.closeMask()
if
(
this
.
mode
===
'input'
)
{
this
.
dialogType
=
'info'
this
.
val
=
this
.
value
this
.
val
=
this
.
value
;
// #ifdef VUE3
this
.
val
=
this
.
modelValue
;
// #endif
}
else
{
this
.
dialogType
=
this
.
type
}
},
mounted
()
{
this
.
focus
=
true
},
methods
:
{
/**
* 点击确认按钮
*/
onOk
()
{
if
(
this
.
mode
===
'input'
){
if
(
this
.
mode
===
'input'
)
{
this
.
$emit
(
'confirm'
,
this
.
val
)
}
else
{
}
else
{
this
.
$emit
(
'confirm'
)
}
if
(
this
.
beforeClose
)
return
if
(
this
.
beforeClose
)
return
this
.
popup
.
close
()
},
/**
...
...
@@ -152,17 +205,17 @@
*/
closeDialog
()
{
this
.
$emit
(
'close'
)
if
(
this
.
beforeClose
)
return
if
(
this
.
beforeClose
)
return
this
.
popup
.
close
()
},
close
(){
close
()
{
this
.
popup
.
close
()
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
>
.uni-popup-dialog
{
width
:
300px
;
border-radius
:
11px
;
...
...
uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
View file @
333a1d6a
...
...
@@ -71,7 +71,7 @@
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
>
.uni-popup-message
{
/* #ifndef APP-NVUE */
display
:
flex
;
...
...
uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
View file @
333a1d6a
...
...
@@ -47,7 +47,7 @@
{
text
:
'支付宝'
,
icon
:
'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/d684ae40-50be-11eb-8ff1-d5dcf8779628.png'
,
name
:
'
wx
'
name
:
'
ali
'
},
{
text
:
'QQ'
,
...
...
@@ -103,7 +103,7 @@
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
>
.uni-popup-share
{
background-color
:
#fff
;
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
>
<view
v-if=
"showPopup"
class=
"uni-popup"
:class=
"[popupstyle, isDesktop ? 'fixforpc-z-index' : '']"
@
touchmove
.
stop
.
prevent=
"clear"
>
<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=
"2"
:mode-class=
"ani"
name=
"content"
:styles=
"transClass"
:duration=
"duration"
:show=
"showTrans"
@
click=
"onTap"
>
<view
class=
"uni-popup__wrapper"
:style=
"
{ backgroundColor: bg }" :class="[popupstyle]" @click="clear">
<slot
/></view>
<view
v-if=
"showPopup"
class=
"uni-popup"
:class=
"[popupstyle, isDesktop ? 'fixforpc-z-index' : '']"
>
<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=
"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>
</view>
<!-- #ifdef H5 -->
...
...
@@ -13,11 +17,11 @@
</
template
>
<
script
>
// #ifdef H5
import
keypress
from
'./keypress.js'
// #endif
// #ifdef H5
import
keypress
from
'./keypress.js'
// #endif
/**
/**
* PopUp 弹出层
* @description 弹出层组件,为了解决遮罩弹层的问题
* @tutorial https://ext.dcloud.net.cn/plugin?id=329
...
...
@@ -31,21 +35,24 @@ import keypress from './keypress.js'
* @value dialog 对话框
* @value share 底部分享示例
* @property {Boolean} animation = [true|false] 是否开启动画
* @property {Boolean} maskClick = [true|false] 蒙版点击是否关闭弹窗
* @property {Boolean} maskClick = [true|false] 蒙版点击是否关闭弹窗(废弃)
* @property {Boolean} isMaskClick = [true|false] 蒙版点击是否关闭弹窗
* @property {String} backgroundColor 主窗口背景色
* @property {String} maskBackgroundColor 蒙版颜色
* @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'
,
components
:
{
// #ifdef H5
keypress
// #endif
},
emits
:[
'change'
,
'maskClick'
],
emits
:
[
'change'
,
'maskClick'
],
props
:
{
// 开启动画
animation
:
{
...
...
@@ -59,17 +66,29 @@ export default {
default
:
'center'
},
// maskClick
isMaskClick
:
{
type
:
Boolean
,
default
:
null
},
// TODO 2 个版本后废弃属性 ,使用 isMaskClick
maskClick
:
{
type
:
Boolean
,
default
:
true
default
:
null
},
backgroundColor
:
{
type
:
String
,
default
:
'none'
},
safeArea
:
{
safeArea
:
{
type
:
Boolean
,
default
:
true
},
maskBackgroundColor
:
{
type
:
String
,
default
:
'rgba(0, 0, 0, 0.4)'
},
borderRadius
:{
type
:
String
,
}
},
...
...
@@ -100,6 +119,19 @@ export default {
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
}
},
data
()
{
...
...
@@ -126,19 +158,28 @@ export default {
top
:
0
,
left
:
0
,
right
:
0
,
backgroundColor
:
'rgba(0, 0, 0, 0.2
)'
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
:
this
.
isDesktop
?
'fixforpc-top'
:
'top'
popupstyle
:
'top'
}
},
computed
:
{
getStyles
()
{
let
res
=
{
backgroundColor
:
this
.
bg
};
if
(
this
.
borderRadius
||
"0"
)
{
res
=
Object
.
assign
(
res
,
{
borderRadius
:
this
.
borderRadius
})
}
return
res
;
},
isDesktop
()
{
return
this
.
popupWidth
>=
500
&&
this
.
popupHeight
>=
500
},
...
...
@@ -151,13 +192,25 @@ export default {
},
mounted
()
{
const
fixSize
=
()
=>
{
const
{
windowWidth
,
windowHeight
,
windowTop
,
safeAreaInsets
}
=
uni
.
getSystemInfoSync
()
const
{
windowWidth
,
windowHeight
,
windowTop
,
safeArea
,
screenHeight
,
safeAreaInsets
}
=
uni
.
getSystemInfoSync
()
this
.
popupWidth
=
windowWidth
this
.
popupHeight
=
windowHeight
+
windowTop
// 是否适配底部安全区
if
(
this
.
safeArea
){
this
.
safeAreaInsets
=
safeAreaInsets
}
else
{
this
.
popupHeight
=
windowHeight
+
(
windowTop
||
0
)
// TODO fix by mehaotian 是否适配底部安全区 ,目前微信ios 、和 app ios 计算有差异,需要框架修复
if
(
safeArea
&&
this
.
safeArea
)
{
// #ifdef MP-WEIXIN
this
.
safeAreaInsets
=
screenHeight
-
safeArea
.
bottom
// #endif
// #ifndef MP-WEIXIN
this
.
safeAreaInsets
=
safeAreaInsets
.
bottom
// #endif
}
else
{
this
.
safeAreaInsets
=
0
}
}
...
...
@@ -169,8 +222,31 @@ export default {
// })
// #endif
},
// #ifndef VUE3
// TODO vue2
destroyed
()
{
this
.
setH5Visible
()
},
// #endif
// #ifdef VUE3
// TODO vue3
unmounted
()
{
this
.
setH5Visible
()
},
// #endif
activated
()
{
this
.
setH5Visible
(
!
this
.
showPopup
);
},
deactivated
()
{
this
.
setH5Visible
(
true
);
},
created
()
{
this
.
mkclick
=
this
.
maskClick
// 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
{
...
...
@@ -180,8 +256,15 @@ export default {
this
.
messageChild
=
null
// TODO 解决头条冒泡的问题
this
.
clearPropagation
=
false
this
.
maskClass
.
backgroundColor
=
this
.
maskBackgroundColor
},
methods
:
{
setH5Visible
(
visible
=
true
)
{
// #ifdef H5
// fix by mehaotian 处理 h5 滚动穿透的问题
document
.
getElementsByTagName
(
'body'
)[
0
].
style
.
overflow
=
visible
?
"visible"
:
"hidden"
;
// #endif
},
/**
* 公用方法,不显示遮罩层
*/
...
...
@@ -203,6 +286,10 @@ export default {
},
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
...
...
@@ -231,7 +318,7 @@ export default {
},
300
)
},
// TODO 处理冒泡事件,头条的冒泡事件有问题 ,先这样兼容
touchstart
()
{
touchstart
()
{
this
.
clearPropagation
=
false
},
...
...
@@ -255,7 +342,8 @@ export default {
position
:
'fixed'
,
left
:
0
,
right
:
0
,
backgroundColor
:
this
.
bg
backgroundColor
:
this
.
bg
,
borderRadius
:
this
.
borderRadius
||
"0"
}
// TODO 兼容 type 属性 ,后续会废弃
if
(
type
)
return
...
...
@@ -273,14 +361,14 @@ export default {
bottom
(
type
)
{
this
.
popupstyle
=
'bottom'
this
.
ani
=
[
'slide-bottom'
]
this
.
transClass
=
{
position
:
'fixed'
,
left
:
0
,
right
:
0
,
bottom
:
0
,
paddingBottom
:
(
this
.
safeAreaInsets
&&
this
.
safeAreaInsets
.
bottom
)
||
0
,
backgroundColor
:
this
.
bg
paddingBottom
:
this
.
safeAreaInsets
+
'px'
,
backgroundColor
:
this
.
bg
,
borderRadius
:
this
.
borderRadius
||
"0"
,
}
// TODO 兼容 type 属性 ,后续会废弃
if
(
type
)
return
...
...
@@ -292,7 +380,13 @@ export default {
*/
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 */
...
...
@@ -304,7 +398,8 @@ export default {
right
:
0
,
top
:
0
,
justifyContent
:
'center'
,
alignItems
:
'center'
alignItems
:
'center'
,
borderRadius
:
this
.
borderRadius
||
"0"
}
// TODO 兼容 type 属性 ,后续会废弃
if
(
type
)
return
...
...
@@ -320,6 +415,7 @@ export default {
bottom
:
0
,
top
:
0
,
backgroundColor
:
this
.
bg
,
borderRadius
:
this
.
borderRadius
||
"0"
,
/* #ifndef APP-NVUE */
display
:
'flex'
,
flexDirection
:
'column'
...
...
@@ -339,6 +435,7 @@ export default {
right
:
0
,
top
:
0
,
backgroundColor
:
this
.
bg
,
borderRadius
:
this
.
borderRadius
||
"0"
,
/* #ifndef APP-NVUE */
display
:
'flex'
,
flexDirection
:
'column'
...
...
@@ -350,14 +447,14 @@ export default {
this
.
showTrans
=
true
}
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.uni-popup
{
z-index
:
99999
;
<
style
lang=
"scss"
>
.uni-popup
{
position
:
fixed
;
/* #ifndef APP-NVUE */
z-index
:
9999
;
z-index
:
99
;
/* #endif */
&.top,
&.left,
...
...
@@ -369,11 +466,13 @@ export default {
top
:
0
;
/* #endif */
}
.uni-popup__wrapper
{
/* #ifndef APP-NVUE */
display
:
block
;
/* #endif */
position
:
relative
;
/* iphonex 等安全区设置,底部安全区适配 */
/* #ifndef APP-NVUE */
//
padding-bottom
:
constant
(
safe-area-inset-bottom
);
...
...
@@ -390,15 +489,15 @@ export default {
flex
:
1
;
}
}
}
}
.fixforpc-z-index
{
.fixforpc-z-index
{
/* #ifndef APP-NVUE */
z-index
:
999
;
/* #endif */
}
}
.fixforpc-top
{
.fixforpc-top
{
top
:
0
;
}
}
</
style
>
uni_modules/uni-popup/package.json
View file @
333a1d6a
{
"id"
:
"uni-popup"
,
"displayName"
:
"uni-popup 弹出层"
,
"version"
:
"1.
7.2
"
,
"version"
:
"1.
9.1
"
,
"description"
:
" Popup 组件,提供常用的弹层"
,
"keywords"
:
[
"uni-ui"
,
...
...
@@ -18,10 +18,6 @@
"example"
:
"../../temps/example_temps"
},
"dcloudext"
:
{
"category"
:
[
"前端组件"
,
"通用组件"
],
"sale"
:
{
"regular"
:
{
"price"
:
"0.00"
...
...
@@ -38,7 +34,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"
:
[
...
...
@@ -49,7 +46,8 @@
"platforms"
:
{
"cloud"
:
{
"tcb"
:
"y"
,
"aliyun"
:
"y"
"aliyun"
:
"y"
,
"alipay"
:
"n"
},
"client"
:
{
"App"
:
{
...
...
uni_modules/uni-scss/changelog.md
View file @
333a1d6a
## 1.0.3(2022-01-21)
-
优化 组件示例
## 1.0.2(2021-11-22)
-
修复 / 符号在 vue 不同版本兼容问题引起的报错问题
## 1.0.1(2021-11-22)
...
...
uni_modules/uni-scss/package.json
View file @
333a1d6a
{
"id"
:
"uni-scss"
,
"displayName"
:
"uni-scss 辅助样式"
,
"version"
:
"1.0.
2
"
,
"version"
:
"1.0.
3
"
,
"description"
:
"uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。"
,
"keywords"
:
[
"uni-scss"
,
...
...
@@ -14,8 +14,8 @@
},
"dcloudext"
:
{
"category"
:
[
"
uni-app前端模板
"
,
"
前端页面模板
"
"
JS SDK
"
,
"
通用 SDK
"
],
"sale"
:
{
"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)
-
修复 init 方法初始化问题
## 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')
class
MPAnimation
{
constructor
(
options
,
_this
)
{
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
.
next
=
0
this
.
$
=
_this
...
...
uni_modules/uni-transition/components/uni-transition/uni-transition.vue
View file @
333a1d6a
<
template
>
<!-- #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
>
<
script
>
...
...
@@ -48,7 +53,11 @@ export default {
customClass
:{
type
:
String
,
default
:
''
}
},
onceRender
:{
type
:
Boolean
,
default
:
false
},
},
data
()
{
return
{
...
...
@@ -245,7 +254,7 @@ export default {
},
animationType
(
type
)
{
return
{
fade
:
type
?
1
:
0
,
fade
:
type
?
0
:
1
,
'slide-top'
:
`translateY(
${
type
?
'0'
:
'-100%'
}
)`
,
'slide-right'
:
`translateX(
${
type
?
'0'
:
'100%'
}
)`
,
'slide-bottom'
:
`translateY(
${
type
?
'0'
:
'100%'
}
)`
,
...
...
uni_modules/uni-transition/package.json
View file @
333a1d6a
{
"id"
:
"uni-transition"
,
"displayName"
:
"uni-transition 过渡动画"
,
"version"
:
"1.3.
1
"
,
"version"
:
"1.3.
3
"
,
"description"
:
"元素的简单过渡动画"
,
"keywords"
:
[
"uni-ui"
,
...
...
@@ -17,11 +17,7 @@
"directories"
:
{
"example"
:
"../../temps/example_temps"
},
"dcloudext"
:
{
"category"
:
[
"前端组件"
,
"通用组件"
],
"dcloudext"
:
{
"sale"
:
{
"regular"
:
{
"price"
:
"0.00"
...
...
@@ -38,7 +34,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-scss"
],
...
...
@@ -46,7 +43,8 @@
"platforms"
:
{
"cloud"
:
{
"tcb"
:
"y"
,
"aliyun"
:
"y"
"aliyun"
:
"y"
,
"alipay"
:
"n"
},
"client"
:
{
"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