alipay-emulator/pages/other/bank/gsyh.vue

1258 lines
28 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="gsyh">
<view v-if="$isVip() && !selectedImage">
<watermark dark="light" source="uni_alipay_other_bank" />
<liu-drag-button :canDocking="false" @clickBtn="$goRechargePage('watermark', 'uni_alipay_other_bank')">
<c-lottie ref="cLottieRef" :src='$watermark()' width="94px" height='74px' :loop="true"></c-lottie>
</liu-drag-button>
</view>
<view class="group_45764" v-if="!selectedImage" :style="{'padding-top':$systemInfo.statusBarHeight+'px'}">
<view class="rectangle_23284">
<view class="flexcontainer">
<view class="group_8">
<image class="frame" src="/static/image/other/bank/gsyh/back.png" />
</view>
<view class="group_7">
<text class="text_1">账户详情</text>
</view>
<view class="group_9">
<image class="group_13980" src="/static/image/other/bank/gsyh/kefu.png" />
<image class="group_13979" src="/static/image/other/bank/gsyh/more.png" />
</view>
</view>
</view>
</view>
<NavBar v-if="selectedImage" title="拼图" bgColor="#EFEFEF" noBack @back="closeImageEdit" isRightButton @right-click="confirmImage">
</NavBar>
<view v-if="!selectedImage" :style="{'height':$systemInfo.statusBarHeight*2+88+'rpx'}">
</view>
<view class="group_48164">
<view class="rectangle_23292">
<image class="group_48163" src="/static/image/other/bank/gsyh/mrzh.png" />
<view class="flexcontainer_1">
<view class="rectangle_23290">
<image class="f0763869907c4a2a56d1061936006358" src="/static/image/other/bank/gsyh/gsyh.png" />
</view>
<view class="flexcontainer_2">
<text class="text_2">{{data.form.cardType}}</text>
<view class="text_3">
{{maskCardNumber(data.form.cardNumber)}}
<text style="color:#3E82BD;margin-left: 52rpx;" @click="data.isShow=true">查看</text>
</view>
</view>
</view>
<text class="text_4">柜面注册</text>
</view>
</view>
<view class="group_48161" @click="openEditDialog">
<view class="rectangle_23285">
<text class="text_5">人民币余额</text>
<text class="text_6">{{data.form.balance}}</text>
</view>
</view>
<view v-if="!selectedImage" class="image-box" @touchstart="handleTouchStart" @touchend="handleTouchEnd">
<image class="group_48140_3x" :src="data.bannerImage || '/static/image/other/bank/gsyh/gnimg.png'" mode="aspectFill" />
<!-- <view class="image-tip">
<text>长按替换真实截图</text>
</view> -->
</view>
<view v-else class="scroll-image-box flex-1">
<scroll-view class="image-box h100" style="width: 100%;height: 182px;" scroll-y :show-scrollbar="false"
@scroll="onImageScroll">
<image class="crop-image-target" style="width:100%;" :src="selectedImage" mode="widthFix"></image>
</scroll-view>
<view class="dashed-line-box">
<view class="dashed-line-text">我是分割线</view>
</view>
</view>
<canvas canvas-id="crop-canvas"
style="position: fixed; left: -9999px; width: 750rpx; height: 100vh; pointer-events: none;"></canvas>
<!-- 蒙层 -->
<view v-if="showMask" class="mask" @click="closeMask">
<image class="mask-icon" src="/static/image/common/mask-icon.png" mode="widthFix">
</image>
</view>
<!-- 卡号信息弹窗 -->
<view class="dask" v-if="data.isShow">
<view class="info">
<view class="title">
完整卡号
</view>
<view class="dec">
{{addSpaceEveryFourChars(data.form.cardNumber)}}
</view>
<view class="btnbox">
<view class="btn" @click="data.isShow=false">取消</view>
<view class="btn btns" @click="data.isShow=false">复制卡号</view>
</view>
</view>
</view>
<view class="group_48166">
<view class="flexcontainer_3">
<text class="text_7">限额</text>
<image class="group_48165" src="/static/image/other/bank/gsyh/titleIcon.png" />
</view>
<view class="panel_limits" @click="openEditDialog">
<view class="flexcontainer_4">
<view class="flexcontainer_5">
<text class="text_8">当日剩余额度(元)</text>
<text class="text_9">日累积{{data.form.dayLimit}}</text>
</view>
<text class="text_10">{{data.form.dayRemain}}</text>
<view class="line">
</view>
</view>
<view class="flexcontainer_6">
<view class="flexcontainer_7">
<text class="text_11">当月剩余额度(元)</text>
<text class="text_12">日累积{{data.form.monthLimit}}</text>
</view>
<text class="text_13">{{data.form.monthRemain}}</text>
<view class="line">
</view>
</view>
<view class="flexcontainer_8">
<view class="flexcontainer_9">
<text class="text_14">当年剩余额度(元)</text>
<text class="text_15">日累积{{data.form.yearLimit}}</text>
</view>
<text class="text_16">{{data.form.yearRemain}}</text>
</view>
</view>
</view>
<view class="panel_limits_1">
<view class="group_13988" @click="openEditDialog">
<view class="rectangle_23294">
<text class="text_17">基本账户</text>
<view class="rightInfo">
<text class="text_18">{{maskCardNumber(data.form.baseAccount)}}</text>
<image class="group_13987" src="/static/image/other/bank/gsyh/rightIcon.png" />
</view>
</view>
</view>
<view class="group_13989" @click="openEditDialog">
<view class="rectangle_23294_1">
<text class="text_19">启用日期</text>
<text class="text_20">{{data.form.startDate}}</text>
</view>
</view>
<view class="group_13990" @click="openEditDialog">
<view class="rectangle_23294_2">
<view class="rightInfo">
<text class="text_21">到期日期</text>
<image class="group_48165_1" src="/static/image/other/bank/gsyh/titleIcon.png" />
</view>
<text class="text_22">{{data.form.endDate}}</text>
</view>
</view>
<view class="group_13991" @click="openEditDialog">
<view class="rectangle_23294_3">
<text class="text_23">设置别名</text>
<view class="rightInfo">
<text class="text_24">{{data.form.alias||'此卡别名'}}</text>
<image class="group_13987_1" src="/static/image/other/bank/gsyh/rightIcon.png" />
</view>
</view>
</view>
<view class="group_13992">
<view class="rectangle_23294_4">
<text class="text_25">账户互转</text>
<image class="group_13987_2" src="/static/image/other/bank/gsyh/rightIcon.png" />
</view>
</view>
<view class="group_13993">
<view class="rectangle_23294_5">
<text class="text_26">当面收款</text>
<image class="group_13987_3" src="/static/image/other/bank/gsyh/rightIcon.png" />
</view>
</view>
<view class="group_13994">
<view class="rectangle_23294_6">
<text class="text_27">绑手机号</text>
<image class="group_13987_4" src="/static/image/other/bank/gsyh/rightIcon.png" />
</view>
</view>
</view>
<view class="group_13994_1">
<text class="text_28">其他</text>
<image class="group_13987_5" src="/static/image/other/bank/gsyh/rightIcon.png" />
</view>
<view class="group_13995">
<text class="text_29">删除账户</text>
<image class="group_13987_6" src="/static/image/other/bank/gsyh/rightIcon.png" />
</view>
<image class="dee351fc65540488ca79ac78c10072f2" src="/static/image/other/bank/gsyh/bottomImg.png" />
<view class="footer">
</view>
<!-- 编辑弹窗 -->
<view v-if="editDialog.show" class="editDialog">
<view class="editDialog_bg">
<view class="editDialog_header">
<text class="title">编辑账户信息</text>
</view>
<view class="editDialog_body">
<view class="formItem">
<text>余额</text>
<input v-model="editDialog.data.balance" type="digit" placeholder="请输入余额" />
</view>
<view class="formItem">
<text>卡类型</text>
<input v-model="editDialog.data.cardType" placeholder="如: 重庆 借记卡(I 类)" />
</view>
<view class="formItem">
<text>卡号</text>
<input v-model="editDialog.data.cardNumber" placeholder="请输入完整卡号" />
</view>
<view class="formItem">
<text>当日额度上限</text>
<input :value="editDialog.data.dayLimit" @input="(e) => onNumberInput('dayLimit', e.detail.value)" placeholder="如: 50,000.00" />
</view>
<view class="formItem">
<text>当日剩余额度</text>
<input :value="editDialog.data.dayRemain" @input="(e) => onNumberInput('dayRemain', e.detail.value)" placeholder="如: 50,000.00" />
</view>
<view class="formItem">
<text>当月额度上限</text>
<input :value="editDialog.data.monthLimit" @input="(e) => onNumberInput('monthLimit', e.detail.value)" placeholder="如: 500,000.00" />
</view>
<view class="formItem">
<text>当月剩余额度</text>
<input :value="editDialog.data.monthRemain" @input="(e) => onNumberInput('monthRemain', e.detail.value)" placeholder="如: 500,000.00" />
</view>
<view class="formItem">
<text>当年额度上限</text>
<input :value="editDialog.data.yearLimit" @input="(e) => onNumberInput('yearLimit', e.detail.value)" placeholder="如: 2,500,000.00" />
</view>
<view class="formItem">
<text>当年剩余额度</text>
<input :value="editDialog.data.yearRemain" @input="(e) => onNumberInput('yearRemain', e.detail.value)" placeholder="如: 2,500,000.00" />
</view>
<view class="formItem">
<text>基本账户</text>
<input v-model="editDialog.data.baseAccount" placeholder="请输入基本账户卡号" />
</view>
<view class="formItem">
<text>启用日期</text>
<input v-model="editDialog.data.startDate" placeholder="如: 2019年10月01日" />
</view>
<view class="formItem">
<text>到期日期</text>
<input v-model="editDialog.data.endDate" placeholder="如: 2029年8月" />
</view>
<view class="formItem">
<text>别名</text>
<input v-model="editDialog.data.alias" placeholder="请输入别名" />
</view>
</view>
<view class="popup-footer">
<view class="btn-cancel" @click="editDialog.show=false">取消</view>
<view class="btn-save" @click="saveEdit">保存</view>
</view>
</view>
</view>
</view>
</template>
<script setup>
import { reactive, onMounted, ref, getCurrentInstance } from 'vue';
import NavBar from '@/components/nav-bar/nav-bar'
const instance = getCurrentInstance();
const CACHE_KEY = 'gsyh_account_info';
const BANNER_IMAGE_KEY = 'gsyh_banner_image';
const data = reactive({
form: {
balance: '55.22',
cardType: '重庆 借记卡(I 类)',
cardNumber: '622293049304',
dayLimit: '50,000.00',
dayRemain: '50,000.00',
monthLimit: '500,000.00',
monthRemain: '500,000.00',
yearLimit: '2,500,000.00',
yearRemain: '2,500,000.00',
baseAccount: '31006438',
startDate: '2019年10月01日',
endDate: '2029年8月',
alias: '',
},
bannerImage: '',
showMask: false,
isShow: false
});
const selectedImage = ref('');
const scrollTop = ref(0);
let longPressTimer = null;
const editDialog = reactive({
show: false,
data: {}
});
onMounted(() => {
loadCache();
// 加载保存的banner图片
const savedBanner = uni.getStorageSync(BANNER_IMAGE_KEY);
if (savedBanner) {
data.bannerImage = savedBanner;
}
const config = uni.getStorageSync('config')
console.log("---config---", config);
const font = config.config['client.uniapp.font']
console.log("字体地址信息", font.bank);
// Font loading logic
const fontUrl = font.bank;
const fontName = 'zsyhFt';
const loadFont = (path) => {
uni.loadFontFace({
family: fontName,
source: `url("${path}")`,
success() {
console.log('字体加载成功');
},
fail(err) {
console.error('字体加载失败', err);
}
});
};
// #ifdef H5
// H5 环境直接从 URL 加载字体
loadFont(fontUrl);
// #endif
// #ifndef H5
// 非 H5 环境使用下载和保存逻辑
const savedFontPath = uni.getStorageSync(' ');
if (savedFontPath) {
loadFont(savedFontPath);
} else {
uni.downloadFile({
url: fontUrl,
success: (res) => {
if (res.statusCode === 200) {
uni.saveFile({
tempFilePath: res.tempFilePath,
success: (saveRes) => {
const savedPath = saveRes.savedFilePath;
uni.setStorageSync('certificate2_font_path', savedPath);
console.log("字体保存路径", savedPath);
loadFont(savedPath);
},
fail: (err) => {
console.error('保存文件失败', err);
// Fallback: 尝试加载临时路径
loadFont(res.tempFilePath);
}
});
}
},
fail: (err) => {
console.error('下载字体失败', err);
}
});
}
// #endif
});
function loadCache() {
const cache = uni.getStorageSync(CACHE_KEY);
if (cache) {
data.form = { ...data.form, ...cache };
}
}
function saveCache() {
uni.setStorageSync(CACHE_KEY, data.form);
}
function openEditDialog() {
editDialog.data = JSON.parse(JSON.stringify(data.form));
editDialog.show = true;
}
function saveEdit() {
data.form = { ...data.form, ...editDialog.data };
saveCache();
editDialog.show = false;
uni.showToast({
title: '保存成功',
icon: 'success'
});
}
function maskCardNumber(cardNumber) {
if (!cardNumber || cardNumber.length < 8) return cardNumber;
const first4 = cardNumber.substring(0, 4);
const last4 = cardNumber.substring(cardNumber.length - 4);
return first4 + '****' + last4;
}
function addSpaceEveryFourChars(str) {
return str.replace(/(.{4})/g, '$1 ').trim();
}
function copyAll() {
const text = `户 名: ${data.form.name}\n卡 号: ${addSpaceEveryFourChars(data.form.cardNumber)}\n开户行: ${data.form.bankName}`;
uni.setClipboardData({
data: text,
success: () => {
uni.showToast({
title: '复制成功',
icon: 'success'
});
data.isShow = false;
}
});
}
function copyCardNumber() {
uni.setClipboardData({
data: data.form.cardNumber,
success: () => {
uni.showToast({
title: '复制成功',
icon: 'success'
});
data.isShow = false;
}
});
}
// 长按事件处理
const handleTouchStart = (e) => {
// 兼容iOS上滑HOME条
const systemInfo = uni.getSystemInfoSync();
if (systemInfo.platform === 'ios' && systemInfo.safeAreaInsets?.bottom) {
const clientY = e.touches[0].clientY;
const windowHeight = systemInfo.windowHeight;
if (clientY > windowHeight - systemInfo.safeAreaInsets.bottom) {
return;
}
}
longPressTimer = setTimeout(() => {
uni.vibrateShort();
chooseImage();
}, 1200);
};
const handleTouchEnd = () => {
if (longPressTimer) {
clearTimeout(longPressTimer);
longPressTimer = null;
}
};
// 选择图片
const chooseImage = () => {
uni.chooseImage({
count: 1,
sourceType: ['album'],
success: (res) => {
selectedImage.value = res.tempFilePaths[0]
data.showMask = true
}
});
};
// 关闭蒙层
const closeMask = () => {
data.showMask = false
};
// 图片滚动监听
const onImageScroll = (e) => {
scrollTop.value = e.detail.scrollTop;
};
// 确认裁剪
const confirmImage = () => {
uni.showLoading({
title: '处理中...'
})
const query = uni.createSelectorQuery().in(instance)
// 获取容器和图片信息
query.select('.image-box').boundingClientRect()
query.select('.crop-image-target').boundingClientRect()
query.exec(res => {
if (!res[0] || !res[1]) {
uni.hideLoading()
return
}
console.log('rects', res)
const container = res[0] // 容器
const image = res[1] // 图片实际渲染尺寸
// 获取图片原始尺寸
uni.getImageInfo({
src: selectedImage.value,
success: (imgInfo) => {
const scale = imgInfo.width / image.width // 图片 原始宽 / 渲染宽
const sTop = scrollTop.value * scale // 原始图上的裁切起始Y
const sHeight = container.height * scale // 原始图上的裁切高度
// 因为是 widthFix宽度就是原始图宽度或裁切全宽
const sWidth = imgInfo.width
// 设置画布尺寸 (使用像素值)
const canvasW = container.width
const canvasH = container.height
const ctx = uni.createCanvasContext('crop-canvas', instance)
// 清除画布
ctx.clearRect(0, 0, canvasW, canvasH)
// 绘制
ctx.drawImage(
imgInfo.path,
0, sTop, sWidth, sHeight, // 源图裁剪区域
0, 0, canvasW, canvasH // 画布绘制区域
)
ctx.draw(false, () => {
uni.canvasToTempFilePath({
canvasId: 'crop-canvas',
width: canvasW,
height: canvasH,
destWidth: sWidth, // 使用原图实际宽度,保持原图清晰度
destHeight: sHeight, // 使用原图实际高度,保持原图清晰度
success: (res) => {
console.log('crop success (temp)', res.tempFilePath)
// 将临时路径保存为永久路径
uni.saveFile({
tempFilePath: res.tempFilePath,
success: (saveRes) => {
console.log('save success (saved)', saveRes.savedFilePath)
data.bannerImage = saveRes.savedFilePath
selectedImage.value = '' // 隐藏编辑模式
// 保存到缓存
uni.setStorageSync(BANNER_IMAGE_KEY, data.bannerImage)
uni.hideLoading()
},
fail: (err) => {
console.error('saveFile fail', err)
uni.hideLoading()
uni.showToast({
title: '保存失败',
icon: 'none'
})
}
})
},
fail: (err) => {
console.error(err)
uni.hideLoading()
uni.showToast({
title: '裁剪失败',
icon: 'none'
})
}
}, instance)
})
},
fail: () => {
uni.hideLoading()
uni.showToast({
title: '图片加载失败',
icon: 'none'
})
}
})
})
};
// 关闭图片编辑
const closeImageEdit = () => {
selectedImage.value = '';
};
// 格式化数字,保留两位小数并添加千分位逗号
function formatNumber(num) {
if (!num && num !== 0) return '';
// 移除所有非数字和小数点
let cleanNum = String(num).replace(/[^\d.]/g, '');
// 确保只有一个小数点
const parts = cleanNum.split('.');
if (parts.length > 2) {
cleanNum = parts[0] + '.' + parts.slice(1).join('');
}
// 转换为数字
let number = parseFloat(cleanNum);
if (isNaN(number)) return '';
// 保留两位小数
number = Math.round(number * 100) / 100;
// 添加千分位逗号
return number.toLocaleString('en-US', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
}
// 处理输入事件
function onNumberInput(field, value) {
editDialog.data[field] = formatNumber(value);
}
</script>
<style lang="scss" >
page{
background: #F8F8F8;
}
* {
box-sizing: border-box;
}
.gsyh {
position: relative;
width: 750rpx;
overflow: hidden;
background-color: #f8f8f8;
display: flex;
flex-direction: column;
align-items: flex-start;
isolation: isolate;
}
/* ===== header ===== */
.group_45764 {
width: 750rpx;
position: fixed;
z-index: 999;
background-color: #ffffff;
}
.rectangle_23284 {
width: 750rpx;
height: 88rpx;
background-color: #ffffff;
}
.flexcontainer {
display: flex;
width: 750rpx;
height: 88rpx;
flex-direction: row;
align-items: center;
}
.group_8 {
width: 240rpx;
height: 96rpx;
display: flex;
align-items: center;
}
.frame {
width: 48rpx;
height: 48rpx;
margin-left: 22rpx;
}
.group_7 {
width: 240rpx;
height: 88rpx;
display: flex;
align-items: center;
text-align: center;
justify-content: center;
}
.rectangle_18503 {
width: 240rpx;
height: 88rpx;
}
.text_1 {
font-size: 36rpx;
color: #617280;
text-align: center;
}
.group_9 {
width: 240rpx;
height: 88rpx;
display: flex;
flex-direction: row; justify-content: flex-end;
align-items: center;
}
.group_13980,
.group_13979 {
width: 48rpx;
height: 48rpx;
margin-left: 28rpx;
}
.div_1 {
width: 754rpx;
height: 2rpx;
}
/* ===== card ===== */
.group_48164 {
width: 692rpx;
height: 232rpx;
margin-top: 28rpx;
margin-left: 30rpx;
}
.rectangle_23292 {
width: 692rpx;
height: 232rpx;
border-radius: 20rpx;
background-color: #ffffff;
box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1);
padding: 40rpx 40rpx 20rpx 40rpx ;
display: flex;
flex-direction: column;
justify-content: space-between;
position: relative;
}
.group_48163 {
width: 152rpx;
height: 38rpx;
position: absolute;
right: 0;
top: 0;
}
.flexcontainer_1 {
display: flex;
flex-direction: row;
margin-top: 10rpx;
}
.flexcontainer_2 {
display: flex;
flex-direction: column;
margin-left: 22rpx;
}
.text_2 {
font-size: 28rpx;
color: #333333;
}
.text_3 {
font-size: 26rpx;
color: #333333;
}
.group_48162 {
width: 52rpx;
height: 32rpx;
margin-left: 20rpx;
margin-top: 46rpx;
}
.rectangle_23290 {
width: 108rpx;
height: 78rpx;
}
.f0763869907c4a2a56d1061936006358 {
width: 108rpx;
height: 78rpx;
}
.text_4 {
font-size: 22rpx;
color: #767676;
margin-top: 10rpx;
}
/* ===== balance ===== */
.group_48161 {
position: relative;
width: 750rpx;
height: 88rpx;
margin-top: 28rpx;
margin-bottom: 14rpx;
}
.rectangle_23285 {
width: 750rpx;
height: 88rpx;
background-color: #ffffff;
display: flex;
align-items: center;
justify-content: space-between;
}
.text_5 {
top: 38rpx;
margin-left: 60rpx;
font-size: 28rpx;
color: #1a1a1a;
}
.text_6 {
top: 40rpx;
margin-right: 28rpx;
font-size: 34rpx;
font-weight: bold;
}
/* ===== banner ===== */
.group_48140_3x {
width: 750rpx;
height: 364rpx;
overflow: hidden;
}
/* ===== limit ===== */
.group_48166 {
width: 750rpx;
position: relative;
}
.flexcontainer_3 {
display: flex;
flex-direction: row;
align-items: center;
margin: 26rpx 28rpx;
}
.text_7 {
font-size: 28rpx;
}
.group_48165 {
width: 28rpx;
height: 28rpx;
margin-left: 10rpx;
}
.panel_limits {
width: 750rpx;
height: 424rpx;
background-color: #ffffff;
}
.flexcontainer_4,
.flexcontainer_6,
.flexcontainer_8 {
height: 140rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
margin: 0 26rpx 0 26rpx;
position: relative;
.line{
width: calc(100%);
position: absolute;
height: 1rpx;
border-bottom: 1rpx solid #EDEDED;
bottom: 0;
left: 0;
}
}
.flexcontainer_5,
.flexcontainer_7,
.flexcontainer_9 {
display: flex;
flex-direction: column;
justify-content: center;
}
.text_8,
.text_11,
.text_14 {
font-size: 28rpx;
color: #333;
}
.text_9,
.text_12,
.text_15 {
font-size: 24rpx;
color: #aaa;
margin-top: 8rpx;
}
.text_10,
.text_13,
.text_16 {
font-size: 30rpx;
font-weight: bold;
}
/* 分割线 */
.div_2,
.div_3 {
width: 694rpx;
height: 2rpx;
margin-left: 28rpx;
}
/* ===== list ===== */
.panel_limits_1 {
width: 750rpx;
background-color: #ffffff;
margin-top: 12rpx;
}
.rectangle_23294,
.rectangle_23294_1,
.rectangle_23294_2,
.rectangle_23294_3,
.rectangle_23294_4,
.rectangle_23294_5,
.rectangle_23294_6 {
width: 750rpx;
height: 108rpx;
display: flex;
flex-direction: row;
align-items: center;
border-bottom: 1rpx solid #eee;
justify-content: space-between;
.rightInfo{
display: flex;
align-items: center;
}
}
.text_20,.text_22{
margin-right: 28rpx;
}
.text_18,.text_24{
margin-right: 28rpx;
}
.text_24{
color: #AAAAAA;
}
.text_17,
.text_19,
.text_21,
.text_23,
.text_25,
.text_26,
.text_27 {
font-size: 28rpx;
margin-left: 28rpx;
}
.group_13987,
.group_48165_1,
.group_13987_1,
.group_13987_2,
.group_13987_3,
.group_13987_4 {
width: 28rpx;
height: 28rpx;
margin-left: auto;
margin-right: 28rpx;
}
/* ===== others ===== */
.group_13994_1,
.group_13995 {
width: 750rpx;
height: 108rpx;
background-color: #ffffff;
display: flex;
align-items: center;
justify-content: space-between;
margin-top: 12rpx;
}
.text_28,
.text_29 {
font-size: 28rpx;
margin-left: 28rpx;
}
.group_13987_5,
.group_13987_6 {
width: 28rpx;
height: 28rpx;
margin-right: 28rpx;
}
.dee351fc65540488ca79ac78c10072f2 {
width: 750rpx;
height: 200rpx;
margin-top: 12rpx;
}
.footer{
width: 100%;
background-color: #ffffff;
height: 60rpx;
}
.home {
position: absolute;
bottom: 0;
left: 0;
}
/* 图片编辑样式 */
.image-box {
width: 750rpx;
height: 364rpx;
position: relative;
overflow: hidden;
}
.image-tip {
position: absolute;
bottom: 20rpx;
left: 50%;
transform: translateX(-50%);
background-color: rgba(0, 0, 0, 0.5);
padding: 10rpx 20rpx;
border-radius: 20rpx;
text {
font-size: 24rpx;
color: #fff;
}
}
.scroll-image-box {
width: 100%;
min-height: 0;
position: relative;
}
.crop-image-target {
width: 100%;
}
.dashed-line-box {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
border: 4rpx dashed red;
pointer-events: none;
.dashed-line-text {
height: 44rpx;
line-height: 44rpx;
width: 180rpx;
padding: 0 20rpx;
border-radius: 8rpx;
color: #1777FF;
font-size: 24rpx;
font-weight: 500;
background-color: #fff;
position: absolute;
top: 0;
left: 50%;
transform: translate(-50%, -50%);
}
}
.mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.8);
z-index: 999;
.mask-icon {
position: absolute;
top: 50%;
right: 52rpx;
transform: translateY(-25%);
width: 360rpx;
height: 360rpx;
}
}
.dask {
width: 100vw;
height: 100vh;
background-color: rgba(0, 0, 0, 0.5);
position: fixed;
left: 0;
top: 0;
z-index: 99999 !important;
display: flex;
align-items: center;
justify-content: center;
.info {
width: calc(100vw - 30px);
background: #FFFFFF;
border-radius: 4px 4px 4px 4px;
display: flex;
flex-direction: column;
.title {
font-weight: 400;
font-size: 16px;
color: #1A1A1A;
margin-left: 20px;
margin-top: 7px;
margin-bottom: 6px;
text-align: center;
}
.dec {
font-weight: 400;
font-size: 17px;
color: #1A1A1A;
margin-left: 20px;
margin-top: 7px;
text-align: center;
}
.btnbox {
margin-top: 26px;
display: flex;
align-items: center;
justify-content: center;
border-top: 1rpx solid #F2F2F2;
.btn {
width: calc(50% - 1rpx);
height: 54px;
line-height: 54px;
font-weight: 400;
font-size: 15px;
color: #5A5A5A;
text-align: center;
}
.btns {
/* border-left: 1rpx solid #F2F2F2; */
color: #DA1C01;
}
}
}
}
/* 编辑弹窗样式 */
.editDialog {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 9999;
}
.editDialog_bg {
width: 680rpx;
max-height: 80vh;
background-color: #ffffff;
border-radius: 20rpx;
overflow: hidden;
display: flex;
flex-direction: column;
}
.editDialog_header {
padding: 30rpx;
border-bottom: 1rpx solid #eee;
text-align: center;
.title {
font-size: 32rpx;
font-weight: bold;
color: #333;
}
}
.editDialog_body {
padding: 20rpx 30rpx;
overflow-y: auto;
max-height: 60vh;
}
.formItem {
display: flex;
align-items: center;
padding: 20rpx 0;
border-bottom: 1rpx solid #f5f5f5;
text {
width: 200rpx;
font-size: 28rpx;
color: #666;
flex-shrink: 0;
}
input {
flex: 1;
font-size: 28rpx;
color: #333;
text-align: right;
}
}
.popup-footer {
display: flex;
padding: 20rpx 30rpx;
border-top: 1rpx solid #eee;
gap: 20rpx;
.btn-cancel,
.btn-save {
flex: 1;
height: 80rpx;
line-height: 80rpx;
text-align: center;
border-radius: 10rpx;
font-size: 28rpx;
}
.btn-cancel {
background-color: #f5f5f5;
color: #666;
}
.btn-save {
background-color: #187AFF;
color: #fff;
}
}
.text_6,
.text_10,
.text_13,
.text_16{
font-family:"zsyhFt";
}
</style>