From e54344328f9199eae20a5a512c21e0106c69efb1 Mon Sep 17 00:00:00 2001 From: tx <2622874537@qq.com> Date: Fri, 27 Dec 2024 18:01:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=A5=E5=8C=99=E5=88=86=E4=BA=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/Home/NormaIndex.tsx | 5 +- src/views/device/KeyDetail.tsx | 188 ++++++++++++++++++++------------- 2 files changed, 116 insertions(+), 77 deletions(-) diff --git a/src/views/Home/NormaIndex.tsx b/src/views/Home/NormaIndex.tsx index 8f6294f..961389a 100644 --- a/src/views/Home/NormaIndex.tsx +++ b/src/views/Home/NormaIndex.tsx @@ -133,7 +133,8 @@ const NormaIndex: React.FC = () => { console.log('handleDeviceUpdate'); const response = await apiService.getDeviceList(); - + + if (response?.code == 200 && response.data) { const defaultDev = response.data.find((device: DeviceType) => device.isDefault == 1); if (defaultDev) { @@ -148,7 +149,7 @@ const NormaIndex: React.FC = () => { try { const response = await apiService.getDeviceList(); - + console.log(response,'response'); if (response?.code === 200 && response.data) { const defaultDev = response.data.find((device: DeviceType) => device.isDefault == 1); if (defaultDev) { diff --git a/src/views/device/KeyDetail.tsx b/src/views/device/KeyDetail.tsx index b9d3ed8..918a4e3 100644 --- a/src/views/device/KeyDetail.tsx +++ b/src/views/device/KeyDetail.tsx @@ -1,9 +1,10 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import { StyleSheet, View, Image, TouchableOpacity, Modal } from 'react-native'; import { Layout, Text, Avatar, Button, TopNavigation, TopNavigationAction, Icon, Card } from '@ui-kitten/components'; import { rpx } from '../../utils/rpx'; import { useNavigation, useRoute } from '@react-navigation/native'; import { apiService } from '../../utils/api'; +import Toast from 'react-native-toast-message'; interface KeyItem { keyId: string; @@ -16,136 +17,173 @@ interface KeyItem { } const BackIcon = (props) => ( - + ); const KeyDetail = () => { const navigation = useNavigation(); const route = useRoute(); - const keyItem = route.params?.keyItem as KeyItem; - const [visible, setVisible] = React.useState(false); - const [showTimeModal, setShowTimeModal] = React.useState(false); - const [selectedTime, setSelectedTime] = React.useState(''); + const keyId = route.params?.keyItem.keyId; + const [keyItem, setKeyItem] = useState(null); + const [visible, setVisible] = useState(false); + const [showTimeModal, setShowTimeModal] = useState(false); + const [selectedTime, setSelectedTime] = useState(''); + const [isLoading, setIsLoading] = useState(false); const timeOptions = ['1天', '7天', '30天', '永久']; - const showDeleteModal = () => { - setVisible(true); - }; - - const hideDeleteModal = () => { - setVisible(false); - - }; - - const handleDelete = () => { - // 这里添加删除逻辑 - hideDeleteModal(); - apiService.deleteKey(keyItem.keyId).then(res => { - console.log(res,'resresres'); - if (res.code == 200) { - navigation.goBack(); + // 获取钥匙详情 + const fetchKeyInfo = async () => { + try { + setIsLoading(true); + const response = await apiService.getKeyInfo(keyId); + if (response.code === 200 && response.data) { + setKeyItem(response.data); + } else { + Toast.show({ + type: 'error', + text1: '获取钥匙信息失败', + }); } - }); + } catch (error) { + console.error('获取钥匙信息错误:', error); + Toast.show({ + type: 'error', + text1: '获取钥匙信息失败', + }); + } finally { + setIsLoading(false); + } }; - const navigateBack = () => { - navigation.goBack(); + // 组件挂载和 keyId 变化时获取数据 + useEffect(() => { + if (keyId) { + fetchKeyInfo(); + } + }, [keyId]); + + const showDeleteModal = () => setVisible(true); + const hideDeleteModal = () => setVisible(false); + + const handleDelete = async () => { + try { + setIsLoading(true); + const res = await apiService.deleteKey(keyId); + if (res.code === 200) { + Toast.show({ + type: 'success', + text1: '删除成功', + }); + navigation.goBack(); + } else { + Toast.show({ + type: 'error', + text1: res.msg || '删除失败', + }); + } + } catch (error) { + console.error('删除钥匙错误:', error); + Toast.show({ + type: 'error', + text1: '删除失败', + }); + } finally { + setIsLoading(false); + hideDeleteModal(); + } }; - const handleTimeSelect = (time: string) => { + const handleTimeSelect = async (time: string) => { setSelectedTime(time); - // 将中文时间选项转换为天数 + if (!keyItem) return; + let days = 0; switch (time) { - case '1天': - days = 1; - break; - case '7天': - days = 7; - break; - case '30天': - days = 30; - break; - case '永久': - // 设置为100年 - days = 36500; - break; + case '1天': days = 1; break; + case '7天': days = 7; break; + case '30天': days = 30; break; + case '永久': days = 36500; break; } - // 基于创建时间计算新的过期时间 const baseDate = new Date(keyItem.createTime); const newExpirationDate = new Date(baseDate.getTime() + days * 24 * 60 * 60 * 1000); - // 设置时间为23:59:59 newExpirationDate.setHours(23); newExpirationDate.setMinutes(59); newExpirationDate.setSeconds(59); - // 格式化日期为 YYYY-MM-DD HH:mm:ss const formattedDate = newExpirationDate.getFullYear() + '-' + String(newExpirationDate.getMonth() + 1).padStart(2, '0') + '-' + String(newExpirationDate.getDate()).padStart(2, '0') + ' ' + String(newExpirationDate.getHours()).padStart(2, '0') + ':' + String(newExpirationDate.getMinutes()).padStart(2, '0') + ':' + String(newExpirationDate.getSeconds()).padStart(2, '0'); - console.log(formattedDate,'formattedDate'); - // 调用API更新过期时间 - const data = { - keyId: keyItem.keyId, - expirationTime: formattedDate - }; - apiService.updateKey(data).then(res => { - console.log(res,'resresres'); + + try { + setIsLoading(true); + const res = await apiService.updateKey({ + keyId: keyId, + expirationTime: formattedDate + }); + if (res.code === 200) { - // 更新成功后关闭模态框 - setShowTimeModal(false); - // 可以添加成功提示或刷新页面的逻辑 + Toast.show({ + type: 'success', + text1: '更新成功', + }); + // 更新成功后重新获取钥匙信息 + await fetchKeyInfo(); + } else { + Toast.show({ + type: 'error', + text1: res.msg || '更新失败', + }); } - }); + } catch (error) { + console.error('更新钥匙有效期错误:', error); + Toast.show({ + type: 'error', + text1: '更新失败', + }); + } finally { + setIsLoading(false); + setShowTimeModal(false); + } }; + const navigateBack = () => navigation.goBack(); const BackAction = () => ( - + ); + const calculateRemainingTime = (expirationTime: string): string => { const now = new Date(); const expiration = new Date(expirationTime); const diffTime = expiration.getTime() - now.getTime(); - // 如果已过期 - if (diffTime <= 0) { - return '已过期'; - } + if (diffTime <= 0) return '已过期'; - // 计算剩余天数、小时、分钟 const days = Math.floor(diffTime / (1000 * 60 * 60 * 24)); const hours = Math.floor((diffTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes = Math.floor((diffTime % (1000 * 60 * 60)) / (1000 * 60)); - if (days > 0) { - return `${days}天${hours}小时`; - } else if (hours > 0) { - return `${hours}小时${minutes}分钟`; - } else { - return `${minutes}分钟`; - } + if (days > 0) return `${days}天${hours}小时`; + if (hours > 0) return `${hours}小时${minutes}分钟`; + return `${minutes}分钟`; }; + const RightIcon = (props: any) => ( ); + const toQrCode = () => { - navigation.navigate('ShareQrcode', { QrId: keyItem.keyId }); + navigation.navigate('ShareQrcode', { QrId: keyId }); }; + return (