This commit is contained in:
mac·ufutx 2026-08-18 17:57:07 +08:00
parent 3e7e55cb1a
commit 3560457e0b
13 changed files with 907 additions and 50 deletions

519
scripts/fix_modal_bug.py Normal file
View File

@ -0,0 +1,519 @@
#!/usr/bin/env python3
"""
批量修复 ~cu-modal / ~show 弹窗隐患
替换策略
1. 模板中所有 ~cu-modal 对应的本地类名
2. 模板中所有 ~show show (普通类)
3. 模板中所有 ~bottom-modal (去除样式合并到本地类)
4. 模板中所有 ~cu-dialog 对应的本地类名
5. style 中追加完整的自包含弹窗样式
"""
import re
import os
# 每个文件的修复配置
CONFIGS = {
"src/components/uploadPics.wpy": {
"type": "bottom",
"modal_cls": "uploadpics-mask",
"dialog_cls": "uploadpics-sheet",
"trigger": "~show",
"style_add": """
.uploadpics-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: all .3s ease;
}
.uploadpics-mask.show {
opacity: 1;
pointer-events: auto;
}
.uploadpics-sheet {
position: absolute;
left: 0; right: 0; bottom: 0;
background: #fff;
border-radius: 32rpx 32rpx 0 0;
}
._item {
padding: 32rpx;
border-bottom: 1rpx solid #f5f5f5;
font-size: 32rpx;
color: #333;
text-align: center;
}
._cancel {
border-top: 16rpx solid #f8f8f8;
margin-bottom: 24rpx;
color: #999;
}
""",
},
"src/components/visitorModel.wpy": {
"type": "center",
"modal_cls": "visitormodel-mask",
"dialog_cls": "visitormodel-dialog",
"trigger": "~show",
"style_add": """
.visitormodel-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.visitormodel-mask.show {
opacity: 1;
pointer-events: auto;
}
.visitormodel-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.visitormodel-mask.show .visitormodel-dialog {
transform: translate(-50%,-50%) scale(1);
}
""",
},
"src/components/recommendDialog.wpy": {
"type": "center",
"modal_cls": "recommend-mask",
"dialog_cls": "recommend-dialog",
"trigger": "~show",
"style_add": """
.recommend-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.recommend-mask.show {
opacity: 1;
pointer-events: auto;
}
.recommend-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.recommend-mask.show .recommend-dialog {
transform: translate(-50%,-50%) scale(1);
}
""",
},
"src/components/shareComponent.wpy": {
"type": "center",
"modal_cls": "sharec-mask",
"dialog_cls": "sharec-dialog",
"trigger": "~show",
"style_add": """
.sharec-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.sharec-mask.show {
opacity: 1;
pointer-events: auto;
}
.sharec-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.sharec-mask.show .sharec-dialog {
transform: translate(-50%,-50%) scale(1);
}
""",
},
"src/components/wxShareCom.wpy": {
"type": "center",
"modal_cls": "wxsharec-mask",
"dialog_cls": "wxsharec-dialog",
"trigger": "~show",
"style_add": """
.wxsharec-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.wxsharec-mask.show {
opacity: 1;
pointer-events: auto;
}
.wxsharec-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.wxsharec-mask.show .wxsharec-dialog {
transform: translate(-50%,-50%) scale(1);
}
""",
},
"src/components/dynamicOperation.wpy": {
"type": "bottom",
"modal_cls": "dynop-mask",
"dialog_cls": "dynop-sheet",
"trigger": "~show",
"style_add": """
.dynop-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: all .3s;
}
.dynop-mask.show {
opacity: 1;
pointer-events: auto;
}
.dynop-sheet {
position: absolute;
left: 0; right: 0; bottom: 0;
background: #fff;
border-radius: 30rpx 30rpx 0 0;
width: 100%;
z-index: 1111;
view {
height: 90rpx;
text-align: center;
line-height: 100rpx;
margin: 0 30rpx;
color: #333;
}
view:last-of-type {
border-top: 1rpx solid #f5f5f5;
color: #999;
}
}
""",
},
"src/components/UnlockingDialog.wpy": {
"type": "center",
"modal_cls": "unlock-mask",
"dialog_cls": "unlock-dialog",
"trigger": "~show",
"style_add": """
.unlock-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.unlock-mask.show {
opacity: 1;
pointer-events: auto;
}
.unlock-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.unlock-mask.show .unlock-dialog {
transform: translate(-50%,-50%) scale(1);
}
""",
},
"src/components/loginDialog.wpy": {
"type": "center",
"modal_cls": "logindlg-mask",
"dialog_cls": "logindlg-dialog",
"trigger": "~show",
"style_add": """
.logindlg-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 9999;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.logindlg-mask.show {
opacity: 1;
pointer-events: auto;
}
.logindlg-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.logindlg-mask.show .logindlg-dialog {
transform: translate(-50%,-50%) scale(1);
}
""",
},
"src/components/residenceDialog.wpy": {
"type": "bottom",
"modal_cls": "residence-mask",
"dialog_cls": "residence-sheet",
"trigger": "~show",
"style_add": """
.residence-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: all .3s;
}
.residence-mask.show {
opacity: 1;
pointer-events: auto;
}
.residence-sheet {
position: absolute;
left: 0; right: 0; bottom: 0;
background: #fff;
border-radius: 32rpx 32rpx 0 0;
overflow: hidden;
}
""",
},
"src/components/dynamicDiscuss.wpy": {
"type": "bottom",
"modal_cls": "discs-mask",
"dialog_cls": "discs-sheet",
"trigger": "~show",
"style_add": """
.discs-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: all .3s;
}
.discs-mask.show {
opacity: 1;
pointer-events: auto;
}
.discs-sheet {
position: absolute;
left: 0; right: 0; bottom: 0;
background: #fff;
border-radius: 20rpx 20rpx 0 0;
overflow: hidden;
}
""",
},
"src/components/cu-custom.wpy": {
"type": "center",
"modal_cls": "cucust-mask",
"dialog_cls": "cucust-dialog",
"trigger": "~show",
"style_add": """
.cucust-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.cucust-mask.show {
opacity: 1;
pointer-events: auto;
}
.cucust-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.cucust-mask.show .cucust-dialog {
transform: translate(-50%,-50%) scale(1);
}
""",
},
"src/components/uploadVideo.wpy": {
"type": "bottom",
"modal_cls": "uploadvid-mask",
"dialog_cls": "uploadvid-sheet",
"trigger": "~show",
"style_add": """
.uploadvid-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: all .3s;
}
.uploadvid-mask.show {
opacity: 1;
pointer-events: auto;
}
.uploadvid-sheet {
position: absolute;
left: 0; right: 0; bottom: 0;
background: #fff;
border-radius: 32rpx 32rpx 0 0;
}
""",
},
}
def transform_template(content, cfg):
"""把模板中的 ~cu-modal / ~show / ~bottom-modal / ~cu-dialog 替换掉"""
modal = cfg["modal_cls"]
dialog = cfg["dialog_cls"]
lines = content.split("\n")
result = []
for line in lines:
orig = line
# 1. ~cu-dialog → dialog类名
line = re.sub(r"~cu-dialog\b", dialog, line)
# 2. ~bottom-modal → (去除,样式已在本地)
line = re.sub(r"~\s*bottom-modal", "", line)
# 3. ~cu-modal 处理
# 情况A: class="~cu-modal ..." (注意前面可能有其他class如 shareComponent的 cu-modal)
# 情况B: :class="{'~show': ...}" class="~cu-modal"
# 统一:去掉所有 ~cu-modal保留其他已有class在class属性末尾追加modal类名
if "~cu-modal" in line:
# 先把 :class={'~show':cond} 里的 ~show 改成 show
line = re.sub(r":class\s*=\s*\{'~show'\s*:", ":class=\"{'show':", line)
# {{cond?'~show':''}} → {{cond?'show':''}}
line = re.sub(r"\?'~show'", "? 'show'", line)
# 去除 ~cu-modal保留其他普通class
# 匹配 class="... ~cu-modal ..." 或 class="~cu-modal"
# WePY: class="xxx ~cu-modal yyy" → class="xxx yyy modal_cls"
# class="~cu-modal xxx" → class="xxx modal_cls"
# class="~cu-modal" → class="modal_cls"
def fix_cu_modal(m):
raw = m.group(0)
# 提取已有class值
cls_val = re.search(r'class="([^"]*)"', raw)
if not cls_val:
return raw
classes = cls_val.group(1)
# 去掉 ~cu-modal 和多余的空格
classes = re.sub(r"~\s*cu-modal", "", classes)
classes = re.sub(r"\s+", " ", classes).strip()
# 去掉 shareComponent 的普通 cu-modal (不再需要)
classes = re.sub(r"\bcu-modal\b", "", classes)
classes = re.sub(r"\s+", " ", classes).strip()
# 追加本地modal类
extra = " " + modal if classes else modal
new_cls = (classes + extra).strip()
return 'class="' + new_cls + '"'
line = re.sub(r'class="[^"]*"', fix_cu_modal, line, count=1)
# 4. 单独处理 :class="{'~show': ...}" 的情况(还没处理到的情况)
line = re.sub(r":class\s*=\s*\{'~show'\s*:", ":class=\"{'show':", line)
line = re.sub(r"\?'~show':", "? 'show':", line)
result.append(line)
return "\n".join(result)
def append_style(content, style_add):
"""在 </style> 前追加样式"""
marker = "</style>"
if marker in content:
idx = content.index(marker)
return content[:idx] + "\n" + style_add + "\n" + marker + content[idx + len(marker):]
return content
def process_file(filepath, cfg):
with open(filepath, "r", encoding="utf-8") as f:
content = f.read()
new_content = transform_template(content, cfg)
new_content = append_style(new_content, cfg["style_add"])
with open(filepath, "w", encoding="utf-8") as f:
f.write(new_content)
print(f"{filepath}")
def main():
base = "/Users/d/fulllink-project/ufutx.love.mp.v2"
for rel_path, cfg in CONFIGS.items():
filepath = os.path.join(base, rel_path)
if os.path.exists(filepath):
process_file(filepath, cfg)
else:
print(f"✗ 文件不存在: {filepath}")
if __name__ == "__main__":
main()

View File

@ -1,6 +1,6 @@
<template>
<view class="UnlockingDialog">
<view :class="{'~show':modalName == 'unlockModal'}" class="~cu-modal">
<view :class="{'show': modalName == 'unlockModal', 'unlock-mask': true}">
<view class="open_unlock_box" style="padding-top: 126rpx;">
<image class="unlockPrompt_bg" src="https://images.ufutx.com/202106/01/3ae4aefd9aed69d6800ed12cac94fbb2.png" mode="widthFix"></image>
<image v-if="ios" class="unlock_bg" src="https://images.ufutx.com/202106/02/d398cbcc114dbfce26470db15d47716c.png" mode="widthFix" @tap="goTo('pages/users/upgradeVIP?chat_user_id={{chat_user_id}}')"></image>
@ -11,7 +11,7 @@
</view>
</view>
<view :class="{'~show': modalName=='purchaseModal'}" class="~cu-modal ">
<view :class="{'show': modalName=='purchaseModal'}" class="unlock-mask">
<view class="open_confirm_box">
<view class="confirm_prompt ~font_32">购买会员服务后可使用此功能,请及时购买</view>
<image class="cancelIcon" src="https://images.ufutx.com/202103/12/4281e92bc8b727bae08099a3015225b1.png" mode="widthFix" @tap="hideModal"></image>
@ -19,7 +19,7 @@
<view style="height: 36rpx"></view>
</view>
</view>
<view :class="{'~show': modalName=='iosTipsModal'}" class="~cu-modal">
<view :class="{'show': modalName=='iosTipsModal', 'unlock-mask': true}">
<view class="open_confirm_box">
<view class="confirm_prompt ~font_32" style="padding: 68rpx 46rpx;line-height: 44rpx;">此功能需要开通VIP因微信限制暂不支持直接购买会员可以通过联系客服去购买</view>
<view class="m_bu ~f-fbc">
@ -38,7 +38,7 @@
<!-- <view style="height: 36rpx"></view>-->
<!-- </view>-->
<!-- </view>-->
<view :class="{'~show': modalName=='vipModal'}" class="~cu-modal">
<view :class="{'show': modalName=='vipModal', 'unlock-mask': true}">
<view class="open_vip_box">
<view class="cancel_icon_box" @tap="hideModal">
<image src="https://images.ufutx.com/202012/21/7bc531d74f41cce95ede5582232fd2f3.png" mode="widthFix" class="cancel_icon"></image>
@ -492,4 +492,34 @@ page view {
button:after{
border: none;
}
.unlock-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.unlock-mask.show {
opacity: 1;
pointer-events: auto;
}
.unlock-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.unlock-mask.show .unlock-dialog {
transform: translate(-50%,-50%) scale(1);
}
</style>

View File

@ -23,7 +23,7 @@
<slot name="right"></slot>
</view>
</view>
<view :class="{'~show':modalName=='Modal'}" class="~cu-modal ">
<view :class="{'show': modalName=='Modal'}" class="cucust-mask">
<view class="cu-dialog">
<view class="~cu-bar ~bg-white justify-end">
<view class="~content">提示</view>
@ -237,4 +237,34 @@
margin-left: 60rpx;
}
}
.cucust-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.cucust-mask.show {
opacity: 1;
pointer-events: auto;
}
.cucust-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.cucust-mask.show .cucust-dialog {
transform: translate(-50%,-50%) scale(1);
}
</style>

View File

@ -241,6 +241,29 @@
}
}
}
.discs-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: all .3s;
}
.discs-mask.show {
opacity: 1;
pointer-events: auto;
}
.discs-sheet {
position: absolute;
left: 0; right: 0; bottom: 0;
background: #fff;
border-radius: 20rpx 20rpx 0 0;
overflow: hidden;
}
</style>
<template>
<view class="~ui-pl-30 ~ui-pr-30 ~ui-pt-20">
@ -314,8 +337,8 @@
</view>
</view>
</view>
<view class="~cu-modal ~bottom-modal {{ modalName == 'viewLike' ? '~show' : ''}}">
<view class="~cu-dialog dialogs">
<view class="{{ modalName == 'viewLike' ? 'show' : ''}} discs-mask">
<view class="discs-sheet dialogs">
<view class="~font_32 ~bold ~text-center ~ui-pt-36">赞过的人</view>
<image class="cancelIcon" src="https://images.ufutx.com/202106/01/e536a423a145ae12ab4f6dc57f58588d.png" mode="widthFix" @tap="modalName = ''"></image>
<view class="ui-container">

View File

@ -19,10 +19,45 @@
color: #999999;
}
}
.dynop-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: all .3s;
}
.dynop-mask.show {
opacity: 1;
pointer-events: auto;
}
.dynop-sheet {
position: absolute;
left: 0; right: 0; bottom: 0;
background: #fff;
border-radius: 30rpx 30rpx 0 0;
width: 100%;
z-index: 1111;
view {
height: 90rpx;
text-align: center;
line-height: 100rpx;
margin: 0 30rpx;
color: #333;
}
view:last-of-type {
border-top: 1rpx solid #f5f5f5;
color: #999;
}
}
</style>
<template>
<view class="~cu-modal ~bottom-modal" :class="{'~show': chooseShow}" @tap="hideModal">
<view class="~cu-dialog dialog">
<view class="dynop-mask" :class="{'show': chooseShow}" @tap="hideModal">
<view class="dynop-sheet dialog">
<!--管理员才有的操作功能 && 父组件来自首页动态列表时才有-->
<block v-if="admin && from == 'dynamic'">
<view @tap.stop="deleteDynamic">删除</view>

View File

@ -62,12 +62,42 @@
}
}
}
.logindlg-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 9999;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.logindlg-mask.show {
opacity: 1;
pointer-events: auto;
}
.logindlg-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.logindlg-mask.show .logindlg-dialog {
transform: translate(-50%,-50%) scale(1);
}
</style>
<template>
<view class="loginDialog">
<view class="~cu-modal {{loginShow ? '~show' : ''}}" style="z-index: 9999;">
<view class="~cu-dialog ui-cu-dialog">
<view class="{{loginShow ? 'show' : ''}} logindlg-mask" style="z-index: 9999;">
<view class="logindlg-dialog ui-cu-dialog">
<view class="m_dialog ~f-fcc ~f-fdc">
<view class="m_dialog_img">
<image class="u_dialog_img" src="https://images.ufutx.com/202105/12/eeadaef5123837de5109b25e93fdeae6.png" mode="widthFix"></image>

View File

@ -101,6 +101,36 @@
}
}
}
.recommend-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.recommend-mask.show {
opacity: 1;
pointer-events: auto;
}
.recommend-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.recommend-mask.show .recommend-dialog {
transform: translate(-50%,-50%) scale(1);
}
</style>
<template>
<template name="isShow">
@ -116,7 +146,7 @@
</view>
</template>
<view class="recommendDialog">
<view class="~cu-modal" :class="{'~show' : recommendShow}">
<view class="recommend-mask" :class="{'show': recommendShow}">
<view class="m_modal_box ~animation-slide-top">
<view class="m_modal">
<view class="~font_40 ~color333 ~bold ~f-fcc">我也要上推荐</view>
@ -155,7 +185,7 @@
</view>
</view>
</view>
<view class="~cu-modal {{intentionShow?'~show':''}}">
<view class="{{intentionShow? 'show':''}} recommend-mask">
<view class="intention_confirm_box animation-slide-top">
<view class="intentionContent ~font_32 ~color333">是否确定申请“{{title}}”?</view>
<view class="intentionOperation">
@ -165,7 +195,7 @@
<view style="height: 38rpx"></view>
</view>
</view>
<view class="~cu-modal {{inreviewShow?'~show':''}}">
<view class="{{inreviewShow? 'show':''}} recommend-mask">
<view class="intention_confirm_box animation-slide-top">
<view class="intentionContent_1 font_34 ~color333 ~bold">你的资料正在审核中</view>
<view class="~font_32 ~color333" style="padding-bottom: 60rpx">如有紧急,请拨打<span style="color: #f33b6c;">18194063294</span></view>

View File

@ -51,11 +51,34 @@
}
}
}
.residence-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: all .3s;
}
.residence-mask.show {
opacity: 1;
pointer-events: auto;
}
.residence-sheet {
position: absolute;
left: 0; right: 0; bottom: 0;
background: #fff;
border-radius: 32rpx 32rpx 0 0;
overflow: hidden;
}
</style>
<template>
<view class="ui-residenceDialog">
<view class="~cu-modal ~bottom-modal" :class="{'~show' : residenceShow}" @tap="onModal">
<view class="~cu-dialog">
<view class="residence-mask" :class="{'show': residenceShow}" @tap="onModal">
<view class="residence-sheet">
<view class="m_dialog">
<view class="~font_32 ~bold ~color333 ~f-fcc">请选择目前居住地</view>
<selectCity :multiIndex.sync="multiIndex" @selectCity="selectCity" @provinces="allProvinces">

View File

@ -1,6 +1,6 @@
<template>
<view :class="{'~show': !hide}" class="~cu-modal cu-modal">
<view class="~cu-dialog" style="background-color: white;width: 600rpx;border-radius: 24rpx;">
<view :class="{'show': !hide}" class="sharec-mask">
<view class="sharec-dialog" style="background-color: white;width: 600rpx;border-radius: 24rpx;">
<view class="~bg-white ~justify-end">
<view bindtap="hideModel" class="~action ~f-fec">
<text class="~cuIcon-close ~font_40 ~color999" style="line-height: 40rpx;margin: 30rpx 30rpx 0 0;"></text>
@ -34,8 +34,8 @@
</view>
</view>
<!-- 海报预览-->
<view :class="{'~show':modalName=='Image'}" class="~cu-modal cu-modal">
<view class="~cu-dialog" style="width: 600rpx; background: none;border-radius: 0;">
<view :class="{'show': modalName=='Image'}" class="sharec-mask">
<view class="sharec-dialog" style="width: 600rpx; background: none;border-radius: 0;">
<view class="~f-fec cu-close" bindtap="listenerCancel">
<image class="_icon" mode="aspectFit"
src="https://image.fulllinkai.com/202205/20/6bd2707c19476eb7dc42910ed4f9014c.png"></image>
@ -46,7 +46,7 @@
</view>
</view>
<!-- 授权弹框-->
<view :class="{'~show':modalName=='DialogModal'}" class="~cu-modal cu-modal">
<view :class="{'show': modalName=='DialogModal'}" class="sharec-mask">
<view class="cu-dialog d_set">
<view class="set_text color333 bold font_32">温馨提示</view>
<view class="set_subT color333 font_28">需要你授权才能保存到相册哦</view>
@ -330,4 +330,34 @@ wepy.component({
border: none;
}
}
.sharec-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.sharec-mask.show {
opacity: 1;
pointer-events: auto;
}
.sharec-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.sharec-mask.show .sharec-dialog {
transform: translate(-50%,-50%) scale(1);
}
</style>

View File

@ -4,22 +4,46 @@ page {}
.upload_file {
overflow: hidden;
position: relative;
}
._item {
padding: 32rpx;
border-bottom: 1rpx solid #f5f5f5;
}
._cancel {
border-top: 16rpx solid #f8f8f8;
margin-bottom: 24rpx;
}
.uploadpics-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: all .3s ease;
}
.uploadpics-mask.show {
opacity: 1;
pointer-events: auto;
}
.uploadpics-sheet {
position: absolute;
left: 0; right: 0; bottom: 0;
background: #fff;
border-radius: 32rpx 32rpx 0 0;
}
._item {
padding: 32rpx;
border-bottom: 1rpx solid #f5f5f5;
font-size: 32rpx;
color: #333;
text-align: center;
}
._cancel {
border-top: 16rpx solid #f8f8f8;
margin-bottom: 24rpx;
color: #999;
}
</style>
<template>
<view :class="{'~show': chooseShow}" class="~cu-modal ~bottom-modal">
<view class="~cu-dialog" style="border-radius: 32rpx 32rpx 0 0;">
<view :class="{'show': chooseShow}" class="uploadpics-mask">
<view class="uploadpics-sheet" style="border-radius: 32rpx 32rpx 0 0;">
<view class="~bg_f upload_file">
<view class="_title _item ~font_32" catchtap="onCamera">{{i18nL.components.uploadPic.Ace1}}</view>
<view class="_title _item ~font_32" catchtap="chooseImageV2">{{i18nL.components.uploadPic.Ace2}}</view>

View File

@ -4,22 +4,45 @@
.upload_file {
overflow: hidden;
position: relative;
._item {
padding: 32rpx;
border-bottom: 1rpx solid #f5f5f5;
}
._cancel {
border-top: 16rpx solid #f8f8f8;
margin-bottom: 24rpx;
}
}
.uploadvid-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: all .3s;
}
.uploadvid-mask.show {
opacity: 1;
pointer-events: auto;
}
.uploadvid-sheet {
position: absolute;
left: 0; right: 0; bottom: 0;
background: #fff;
border-radius: 32rpx 32rpx 0 0;
._item {
padding: 32rpx;
border-bottom: 1rpx solid #f5f5f5;
font-size: 32rpx;
color: #333;
text-align: center;
}
._cancel {
border-top: 16rpx solid #f8f8f8;
margin-bottom: 24rpx;
color: #999;
}
}
</style>
<template>
<view :class="{'~show': chooseShow}" class="~cu-modal ~bottom-modal">
<view class="~cu-dialog" style="border-radius: 32rpx 32rpx 0 0;">
<view :class="{'show': chooseShow}" class="uploadvid-mask">
<view class="uploadvid-sheet" style="border-radius: 32rpx 32rpx 0 0;">
<view class="~bg_f upload_file">
<view class="_title _item ~font_32" @tap="onCamera">拍摄</view>
<view class="_title _item ~font_32" @tap="chooseImageV2">从手机相册选择</view>

View File

@ -1,5 +1,5 @@
<template>
<view :class="{'~show':showVisitorModel}" class="~cu-modal " style="transition-duration: 0s !important;">
<view :class="{'show': showVisitorModel}" class="visitormodel-mask" style="transition-duration: 0s !important;">
<view class="perfect_box ~animation-slide-top">
<view class="operation_box ~text-center">
<view class="title ~font_32 ~bold">完善资料</view>
@ -102,4 +102,34 @@
}
.visitormodel-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.visitormodel-mask.show {
opacity: 1;
pointer-events: auto;
}
.visitormodel-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.visitormodel-mask.show .visitormodel-dialog {
transform: translate(-50%,-50%) scale(1);
}
</style>

View File

@ -12,10 +12,40 @@
background: linear-gradient(90deg, #9DC0F8 0%, #508AFC 100%);
border-radius: 40rpx;
}
.wxsharec-mask {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1110;
background: rgba(0,0,0,.6);
opacity: 0;
pointer-events: none;
transition: opacity .3s;
}
.wxsharec-mask.show {
opacity: 1;
pointer-events: auto;
}
.wxsharec-dialog {
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%) scale(.85);
width: 680rpx;
max-width: 100%;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
transition: transform .3s;
}
.wxsharec-mask.show .wxsharec-dialog {
transform: translate(-50%,-50%) scale(1);
}
</style>
<template>
<view class="~cu-modal {{modalName=='Modal'?'~show':''}}">
<view class="~cu-dialog" style="padding: 50rpx 30rpx;">
<view class="{{modalName=='Modal'? 'show':''}} wxsharec-mask">
<view class="wxsharec-dialog" style="padding: 50rpx 30rpx;">
<image class="~_icon_close" src="~@/images/icon/close_icon.png" mode="aspectFit" @tap="cancelFn"></image>
<view class="~_c ~font_32 ~color333 ~bold">分享至</view>
<view class="~f-fcc ~ui-mt-40">
@ -30,15 +60,15 @@
</view>
</view>
</view>
<view class="~cu-modal {{modalName=='showPic'?'~show':''}}">
<view class="~cu-dialog" style="padding: 0; background: none;border-radius: 0;">
<view class="{{modalName=='showPic'? 'show':''}} wxsharec-mask">
<view class="wxsharec-dialog" style="padding: 0; background: none;border-radius: 0;">
<image class="~_icon_close_pic _icon_close" src="~@/images/icon/close_icon_v3.png" mode="aspectFit" @tap="cancelFn"></image>
<image class="_pic" src="{{sharePic}}" mode="widthFix" @tap="cancelFn"></image>
<view class="_save_btn ~spacing2 ~font_30 ~f-fcc ~ui-mt-24 ~white" @tap="saveImgFn()">保存至相册,分享给好友或朋友圈</view>
</view>
</view>
<view class="~cu-modal {{modalName=='showSet'?'~show':''}}">
<view class="~cu-dialog" style="padding-top: 58rpx;">
<view class="{{modalName=='showSet'? 'show':''}} wxsharec-mask">
<view class="wxsharec-dialog" style="padding-top: 58rpx;">
<view class="~_t ~font_32 ~color333 ~text-center ~bold">提示</view>
<view class="~_c ~font_32 ~color333 ~text-center ~ui-mt-30">
需要你授权才能保存到相册哦