alipay-emulator/pages/index/index.vue

321 lines
7.8 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="container">
<view class="header">
<text class="title">公共方法使用示例</text>
</view>
<view class="content">
<!-- 日期处理示例 -->
<view class="section">
<text class="section-title">日期处理</text>
<view class="example-item">
<text class="label">当前日期</text>
<text class="value">{{ currentDate }}</text>
</view>
<view class="example-item">
<text class="label">格式化日期</text>
<text class="value">{{ formattedDate }}</text>
</view>
<view class="example-item">
<text class="label">相对时间</text>
<text class="value">{{ relativeDate }}</text>
</view>
</view>
<!-- 数字处理示例 -->
<view class="section">
<text class="section-title">数字处理</text>
<view class="example-item">
<text class="label">千分位格式化</text>
<text class="value">{{ formattedNumber }}</text>
</view>
<view class="example-item">
<text class="label">金额格式化</text>
<text class="value">{{ formattedMoney }}</text>
</view>
<view class="example-item">
<text class="label">随机数</text>
<text class="value">{{ randomNumber }}</text>
</view>
</view>
<!-- 字符串处理示例 -->
<view class="section">
<text class="section-title">字符串处理</text>
<view class="example-item">
<text class="label">UUID</text>
<text class="value">{{ uuid }}</text>
</view>
<view class="example-item">
<text class="label">手机号脱敏</text>
<text class="value">{{ maskedPhone }}</text>
</view>
<view class="example-item">
<text class="label">字符串截断</text>
<text class="value">{{ truncatedString }}</text>
</view>
</view>
<!-- UI工具示例 -->
<view class="section">
<text class="section-title">UI工具</text>
<view class="button-group">
<button class="button success" @click="showSuccess">成功提示</button>
<button class="button error" @click="showError">错误提示</button>
<button class="button loading" @click="showLoading">加载提示</button>
<button class="button confirm" @click="showConfirm">确认对话框</button>
</view>
</view>
<!-- 设备信息示例 -->
<view class="section">
<text class="section-title">设备信息</text>
<view class="example-item">
<text class="label">状态栏高度</text>
<text class="value">{{ statusBarHeight }}</text>
</view>
<view class="example-item">
<text class="label">设备平台</text>
<text class="value">{{ devicePlatform }}</text>
</view>
<view class="example-item">
<text class="label">网络状态</text>
<text class="value">{{ networkStatus }}</text>
</view>
</view>
<!-- 屏幕尺寸示例 -->
<view class="section">
<text class="section-title">屏幕尺寸</text>
<view class="example-item">
<text class="label">屏幕宽度</text>
<text class="value">{{ screenWidth }}</text>
</view>
<view class="example-item">
<text class="label">屏幕高度</text>
<text class="value">{{ screenHeight }}</text>
</view>
<view class="example-item">
<text class="label">窗口宽度</text>
<text class="value">{{ windowWidth }}</text>
</view>
<view class="example-item">
<text class="label">窗口高度</text>
<text class="value">{{ windowHeight }}</text>
</view>
<view class="button-group">
<button class="button loading" @click="loadScreenSize">获取屏幕尺寸</button>
</view>
</view>
</view>
</view>
</template>
<script setup>
import { ref, onMounted } from 'vue';
import { dateUtil, numberUtil, stringUtil, deviceUtil, networkUtil, uiUtil } from '@/utils/common';
// 日期处理示例数据
const currentDate = ref('');
const formattedDate = ref('');
const relativeDate = ref('');
// 数字处理示例数据
const formattedNumber = ref('');
const formattedMoney = ref('');
const randomNumber = ref(0);
// 字符串处理示例数据
const uuid = ref('');
const maskedPhone = ref('');
const truncatedString = ref('');
// 设备信息示例数据
const statusBarHeight = ref(0);
const devicePlatform = ref('');
const networkStatus = ref('');
// 屏幕尺寸示例数据
const screenWidth = ref(0);
const screenHeight = ref(0);
const windowWidth = ref(0);
const windowHeight = ref(0);
// 页面加载时初始化示例数据
onMounted(async () => {
// 日期处理示例
currentDate.value = dateUtil.now();
const testDate = new Date('2025-12-25 10:30:00');
formattedDate.value = dateUtil.format(testDate, 'YYYY年MM月DD日 HH时mm分ss秒');
relativeDate.value = dateUtil.relative(testDate);
// 数字处理示例
formattedNumber.value = numberUtil.format(1234567.89);
formattedMoney.value = numberUtil.formatMoney(98765.4321);
randomNumber.value = numberUtil.random(1, 100);
// 字符串处理示例
uuid.value = stringUtil.uuid();
maskedPhone.value = stringUtil.maskPhone('13812345678');
truncatedString.value = stringUtil.truncate('这是一个很长的字符串,用于测试字符串截断功能', 20);
// 设备信息示例
await loadDeviceInfo();
// 网络状态示例
await loadNetworkStatus();
});
// 加载设备信息
async function loadDeviceInfo() {
try {
const systemInfo = await deviceUtil.getSystemInfo();
statusBarHeight.value = systemInfo.statusBarHeight || 0;
devicePlatform.value = systemInfo.platform || '未知';
} catch (error) {
console.error('获取设备信息失败:', error);
}
}
// 加载网络状态
async function loadNetworkStatus() {
try {
const isConnected = await networkUtil.isConnected();
networkStatus.value = isConnected ? '已连接' : '未连接';
} catch (error) {
console.error('获取网络状态失败:', error);
}
}
// UI工具示例方法
function showSuccess() {
uiUtil.showSuccess('操作成功');
}
function showError() {
uiUtil.showError('操作失败,请重试');
}
function showLoading() {
uiUtil.showLoading('加载中...');
// 模拟加载完成
setTimeout(() => {
uiUtil.hideLoading();
}, 2000);
}
function showConfirm() {
uiUtil.showConfirm('确认操作', '您确定要执行此操作吗?', () => {
uiUtil.showSuccess('确认成功');
}, () => {
uiUtil.showError('已取消操作');
});
}
// 屏幕尺寸示例方法
async function loadScreenSize() {
try {
const screenSize = await deviceUtil.getScreenSize();
screenWidth.value = screenSize.width;
screenHeight.value = screenSize.height;
windowWidth.value = screenSize.windowWidth;
windowHeight.value = screenSize.windowHeight;
} catch (error) {
console.error('获取屏幕尺寸失败:', error);
}
}
</script>
<style lang="less">
.container {
min-height: 100vh;
background-color: #f5f5f5;
padding-bottom: 20px;
}
.header {
padding: 20px;
background-color: #007aff;
text-align: center;
}
.title {
font-size: 20px;
font-weight: bold;
color: #fff;
}
.content {
padding: 15px;
}
.section {
background-color: #fff;
border-radius: 8px;
padding: 15px;
margin-bottom: 15px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.section-title {
font-size: 18px;
font-weight: bold;
margin-bottom: 15px;
color: #333;
}
.example-item {
margin-bottom: 10px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 0;
}
.label {
font-size: 14px;
color: #666;
}
.value {
font-size: 14px;
color: #333;
font-weight: 500;
}
.button-group {
display: flex;
flex-direction: column;
gap: 10px;
}
.button {
padding: 12px;
border-radius: 6px;
font-size: 16px;
color: #fff;
border: none;
cursor: pointer;
transition: opacity 0.2s;
&.success {
background-color: #4cd964;
}
&.error {
background-color: #ff3b30;
}
&.loading {
background-color: #007aff;
}
&.confirm {
background-color: #5856d6;
}
&:active {
opacity: 0.8;
}
}
</style>