feat(app): 启用Expo Updates自动更新功能,优化医疗记录上传流程与API集成
This commit is contained in:
5
app.json
5
app.json
@@ -72,6 +72,11 @@
|
|||||||
},
|
},
|
||||||
"android": {
|
"android": {
|
||||||
"package": "com.anonymous.digitalpilates"
|
"package": "com.anonymous.digitalpilates"
|
||||||
|
},
|
||||||
|
"updates": {
|
||||||
|
"enabled": true,
|
||||||
|
"checkAutomatically": "ON_LOAD",
|
||||||
|
"url": "https://pilate.richarjiang.com/api/expo-updates/manifest"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,7 @@
|
|||||||
import '@/i18n';
|
|
||||||
import { DefaultTheme, ThemeProvider } from '@react-navigation/native';
|
|
||||||
import { useFonts } from 'expo-font';
|
|
||||||
import { Stack, useRouter } from 'expo-router';
|
|
||||||
import { StatusBar } from 'expo-status-bar';
|
|
||||||
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
||||||
import 'react-native-reanimated';
|
|
||||||
|
|
||||||
import PrivacyConsentModal from '@/components/PrivacyConsentModal';
|
import PrivacyConsentModal from '@/components/PrivacyConsentModal';
|
||||||
import { useAppDispatch, useAppSelector } from '@/hooks/redux';
|
import { useAppDispatch, useAppSelector } from '@/hooks/redux';
|
||||||
import { useQuickActions } from '@/hooks/useQuickActions';
|
import { useQuickActions } from '@/hooks/useQuickActions';
|
||||||
|
import '@/i18n';
|
||||||
import { hrvMonitorService } from '@/services/hrvMonitor';
|
import { hrvMonitorService } from '@/services/hrvMonitor';
|
||||||
import { cleanupLegacyMedicationNotifications } from '@/services/medicationNotificationCleanup';
|
import { cleanupLegacyMedicationNotifications } from '@/services/medicationNotificationCleanup';
|
||||||
import { clearBadgeCount, notificationService } from '@/services/notifications';
|
import { clearBadgeCount, notificationService } from '@/services/notifications';
|
||||||
@@ -26,8 +19,15 @@ import { initializeHealthPermissions } from '@/utils/health';
|
|||||||
import { MoodNotificationHelpers, NutritionNotificationHelpers, WaterNotificationHelpers } from '@/utils/notificationHelpers';
|
import { MoodNotificationHelpers, NutritionNotificationHelpers, WaterNotificationHelpers } from '@/utils/notificationHelpers';
|
||||||
import { getMoodReminderEnabled, getNutritionReminderEnabled, getWaterReminderSettings } from '@/utils/userPreferences';
|
import { getMoodReminderEnabled, getNutritionReminderEnabled, getWaterReminderSettings } from '@/utils/userPreferences';
|
||||||
import { clearPendingWaterRecords, syncPendingWidgetChanges } from '@/utils/widgetDataSync';
|
import { clearPendingWaterRecords, syncPendingWidgetChanges } from '@/utils/widgetDataSync';
|
||||||
|
import { DefaultTheme, ThemeProvider } from '@react-navigation/native';
|
||||||
|
import { useFonts } from 'expo-font';
|
||||||
|
import { Stack, useRouter } from 'expo-router';
|
||||||
|
import { StatusBar } from 'expo-status-bar';
|
||||||
|
import * as Updates from 'expo-updates';
|
||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import { AppState, AppStateStatus } from 'react-native';
|
import { AppState, AppStateStatus } from 'react-native';
|
||||||
|
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
||||||
|
import 'react-native-reanimated';
|
||||||
|
|
||||||
import { DialogProvider } from '@/components/ui/DialogProvider';
|
import { DialogProvider } from '@/components/ui/DialogProvider';
|
||||||
import { MembershipModalProvider } from '@/contexts/MembershipModalContext';
|
import { MembershipModalProvider } from '@/contexts/MembershipModalContext';
|
||||||
@@ -485,6 +485,31 @@ function Bootstrapper({ children }: { children: React.ReactNode }) {
|
|||||||
getPrivacyAgreed();
|
getPrivacyAgreed();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
async function checkUpdate() {
|
||||||
|
try {
|
||||||
|
logger.info("Checking for updates...");
|
||||||
|
const update = await Updates.checkForUpdateAsync();
|
||||||
|
logger.info("Update check:", update);
|
||||||
|
|
||||||
|
if (update.isAvailable) {
|
||||||
|
logger.info("Update available, fetching...");
|
||||||
|
const result = await Updates.fetchUpdateAsync();
|
||||||
|
logger.info("Fetch result:", result);
|
||||||
|
|
||||||
|
if (result.isNew) {
|
||||||
|
logger.info("Reloading app to apply update...");
|
||||||
|
Updates.reloadAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
logger.error("Update error:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
checkUpdate();
|
||||||
|
}, []);
|
||||||
|
|
||||||
const handlePrivacyAgree = () => {
|
const handlePrivacyAgree = () => {
|
||||||
dispatch(setPrivacyAgreed());
|
dispatch(setPrivacyAgreed());
|
||||||
setShowPrivacyModal(false);
|
setShowPrivacyModal(false);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { MedicalRecordCard } from '@/components/health/MedicalRecordCard';
|
import { MedicalRecordCard } from '@/components/health/MedicalRecordCard';
|
||||||
import { palette } from '@/constants/Colors';
|
import { palette } from '@/constants/Colors';
|
||||||
import { useAppDispatch, useAppSelector } from '@/hooks/redux';
|
import { useAppDispatch, useAppSelector } from '@/hooks/redux';
|
||||||
|
import { useCosUpload } from '@/hooks/useCosUpload';
|
||||||
import { MedicalRecordItem, MedicalRecordType } from '@/services/healthProfile';
|
import { MedicalRecordItem, MedicalRecordType } from '@/services/healthProfile';
|
||||||
import {
|
import {
|
||||||
addNewMedicalRecord,
|
addNewMedicalRecord,
|
||||||
@@ -38,6 +39,11 @@ export function MedicalRecordsTab() {
|
|||||||
const prescriptions = medicalRecords?.prescriptions || [];
|
const prescriptions = medicalRecords?.prescriptions || [];
|
||||||
const isLoading = useAppSelector(selectHealthLoading);
|
const isLoading = useAppSelector(selectHealthLoading);
|
||||||
|
|
||||||
|
// COS 上传
|
||||||
|
const { upload: uploadToCos, uploading: isUploading } = useCosUpload({
|
||||||
|
prefix: 'images/health/medical-records'
|
||||||
|
});
|
||||||
|
|
||||||
const [activeTab, setActiveTab] = useState<MedicalRecordType>('medical_record');
|
const [activeTab, setActiveTab] = useState<MedicalRecordType>('medical_record');
|
||||||
const [isModalVisible, setModalVisible] = useState(false);
|
const [isModalVisible, setModalVisible] = useState(false);
|
||||||
const [isDatePickerVisible, setDatePickerVisibility] = useState(false);
|
const [isDatePickerVisible, setDatePickerVisibility] = useState(false);
|
||||||
@@ -139,16 +145,29 @@ export function MedicalRecordsTab() {
|
|||||||
|
|
||||||
setIsSubmitting(true);
|
setIsSubmitting(true);
|
||||||
try {
|
try {
|
||||||
|
// 1. 上传所有图片到 COS
|
||||||
|
const uploadPromises = images.map(async (uri) => {
|
||||||
|
const result = await uploadToCos({ uri });
|
||||||
|
return result.url;
|
||||||
|
});
|
||||||
|
|
||||||
|
const uploadedUrls = await Promise.all(uploadPromises);
|
||||||
|
|
||||||
|
// 2. 创建就医资料记录
|
||||||
await dispatch(addNewMedicalRecord({
|
await dispatch(addNewMedicalRecord({
|
||||||
type: activeTab,
|
type: activeTab,
|
||||||
title,
|
title: title.trim(),
|
||||||
date: dayjs(date).format('YYYY-MM-DD'),
|
date: dayjs(date).format('YYYY-MM-DD'),
|
||||||
images,
|
images: uploadedUrls,
|
||||||
note,
|
note: note.trim() || undefined,
|
||||||
})).unwrap();
|
})).unwrap();
|
||||||
|
|
||||||
setModalVisible(false);
|
setModalVisible(false);
|
||||||
} catch (error) {
|
resetForm();
|
||||||
Alert.alert('错误', '保存失败,请重试');
|
} catch (error: any) {
|
||||||
|
console.error('保存失败:', error);
|
||||||
|
const errorMessage = error?.message || '保存失败,请重试';
|
||||||
|
Alert.alert('错误', errorMessage);
|
||||||
} finally {
|
} finally {
|
||||||
setIsSubmitting(false);
|
setIsSubmitting(false);
|
||||||
}
|
}
|
||||||
@@ -275,10 +294,10 @@ export function MedicalRecordsTab() {
|
|||||||
</Text>
|
</Text>
|
||||||
<TouchableOpacity
|
<TouchableOpacity
|
||||||
onPress={handleSubmit}
|
onPress={handleSubmit}
|
||||||
style={[styles.modalSaveButton, isSubmitting && styles.modalSaveButtonDisabled]}
|
style={[styles.modalSaveButton, (isSubmitting || isUploading) && styles.modalSaveButtonDisabled]}
|
||||||
disabled={isSubmitting}
|
disabled={isSubmitting || isUploading}
|
||||||
>
|
>
|
||||||
{isSubmitting ? (
|
{(isSubmitting || isUploading) ? (
|
||||||
<ActivityIndicator size="small" color="#FFFFFF" />
|
<ActivityIndicator size="small" color="#FFFFFF" />
|
||||||
) : (
|
) : (
|
||||||
<Text style={styles.modalSaveText}>保存</Text>
|
<Text style={styles.modalSaveText}>保存</Text>
|
||||||
|
|||||||
@@ -404,6 +404,7 @@
|
|||||||
"${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle",
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/EXNotifications/ExpoNotifications_privacy.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/EXNotifications/ExpoNotifications_privacy.bundle",
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/EXTaskManager/ExpoTaskManager_privacy.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/EXTaskManager/ExpoTaskManager_privacy.bundle",
|
||||||
|
"${PODS_CONFIGURATION_BUILD_DIR}/EXUpdates/EXUpdates.bundle",
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle",
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoLocalization/ExpoLocalization_privacy.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoLocalization/ExpoLocalization_privacy.bundle",
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoMediaLibrary/ExpoMediaLibrary_privacy.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/ExpoMediaLibrary/ExpoMediaLibrary_privacy.bundle",
|
||||||
@@ -412,6 +413,7 @@
|
|||||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle",
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle",
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle",
|
||||||
|
"${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/ReachabilitySwift.bundle",
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle",
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle",
|
||||||
"${PODS_CONFIGURATION_BUILD_DIR}/RevenueCat/RevenueCat.bundle",
|
"${PODS_CONFIGURATION_BUILD_DIR}/RevenueCat/RevenueCat.bundle",
|
||||||
@@ -427,6 +429,7 @@
|
|||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle",
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoNotifications_privacy.bundle",
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoTaskManager_privacy.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoTaskManager_privacy.bundle",
|
||||||
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXUpdates.bundle",
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle",
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoLocalization_privacy.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoLocalization_privacy.bundle",
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoMediaLibrary_privacy.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoMediaLibrary_privacy.bundle",
|
||||||
@@ -435,6 +438,7 @@
|
|||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle",
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle",
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle",
|
||||||
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ReachabilitySwift.bundle",
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle",
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle",
|
||||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RevenueCat.bundle",
|
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RevenueCat.bundle",
|
||||||
|
|||||||
@@ -2,10 +2,12 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>EXUpdatesEnabled</key>
|
||||||
|
<true/>
|
||||||
|
<key>EXUpdatesURL</key>
|
||||||
|
<string>https://pilate.richarjiang.com/api/expo-updates/manifest</string>
|
||||||
<key>EXUpdatesCheckOnLaunch</key>
|
<key>EXUpdatesCheckOnLaunch</key>
|
||||||
<string>ALWAYS</string>
|
<string>ALWAYS</string>
|
||||||
<key>EXUpdatesEnabled</key>
|
|
||||||
<false/>
|
|
||||||
<key>EXUpdatesLaunchWaitMs</key>
|
<key>EXUpdatesLaunchWaitMs</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</dict>
|
</dict>
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
PODS:
|
PODS:
|
||||||
|
- EASClient (1.0.7):
|
||||||
|
- ExpoModulesCore
|
||||||
- EXApplication (7.0.7):
|
- EXApplication (7.0.7):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- EXConstants (18.0.10):
|
- EXConstants (18.0.10):
|
||||||
@@ -6,6 +8,9 @@ PODS:
|
|||||||
- EXImageLoader (6.0.0):
|
- EXImageLoader (6.0.0):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- React-Core
|
- React-Core
|
||||||
|
- EXJSONUtils (0.15.0)
|
||||||
|
- EXManifests (1.0.9):
|
||||||
|
- ExpoModulesCore
|
||||||
- EXNotifications (0.32.13):
|
- EXNotifications (0.32.13):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- Expo (54.0.26):
|
- Expo (54.0.26):
|
||||||
@@ -117,9 +122,40 @@ PODS:
|
|||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- ExpoWebBrowser (15.0.9):
|
- ExpoWebBrowser (15.0.9):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
|
- EXStructuredHeaders (5.0.0)
|
||||||
- EXTaskManager (14.0.8):
|
- EXTaskManager (14.0.8):
|
||||||
- ExpoModulesCore
|
- ExpoModulesCore
|
||||||
- UMAppLoader
|
- UMAppLoader
|
||||||
|
- EXUpdates (29.0.14):
|
||||||
|
- EASClient
|
||||||
|
- EXManifests
|
||||||
|
- ExpoModulesCore
|
||||||
|
- EXStructuredHeaders
|
||||||
|
- EXUpdatesInterface
|
||||||
|
- hermes-engine
|
||||||
|
- RCTRequired
|
||||||
|
- RCTTypeSafety
|
||||||
|
- ReachabilitySwift
|
||||||
|
- React-Core
|
||||||
|
- React-Core-prebuilt
|
||||||
|
- React-debug
|
||||||
|
- React-Fabric
|
||||||
|
- React-featureflags
|
||||||
|
- React-graphics
|
||||||
|
- React-ImageManager
|
||||||
|
- React-jsi
|
||||||
|
- React-NativeModulesApple
|
||||||
|
- React-RCTFabric
|
||||||
|
- React-renderercss
|
||||||
|
- React-rendererdebug
|
||||||
|
- React-utils
|
||||||
|
- ReactCodegen
|
||||||
|
- ReactCommon/turbomodule/bridging
|
||||||
|
- ReactCommon/turbomodule/core
|
||||||
|
- ReactNativeDependencies
|
||||||
|
- Yoga
|
||||||
|
- EXUpdatesInterface (2.0.0):
|
||||||
|
- ExpoModulesCore
|
||||||
- FBLazyVector (0.81.5)
|
- FBLazyVector (0.81.5)
|
||||||
- hermes-engine (0.81.5):
|
- hermes-engine (0.81.5):
|
||||||
- hermes-engine/Pre-built (= 0.81.5)
|
- hermes-engine/Pre-built (= 0.81.5)
|
||||||
@@ -173,6 +209,7 @@ PODS:
|
|||||||
- FBLazyVector (= 0.81.5)
|
- FBLazyVector (= 0.81.5)
|
||||||
- RCTRequired (= 0.81.5)
|
- RCTRequired (= 0.81.5)
|
||||||
- React-Core (= 0.81.5)
|
- React-Core (= 0.81.5)
|
||||||
|
- ReachabilitySwift (5.2.4)
|
||||||
- React (0.81.5):
|
- React (0.81.5):
|
||||||
- React-Core (= 0.81.5)
|
- React-Core (= 0.81.5)
|
||||||
- React-Core/DevSupport (= 0.81.5)
|
- React-Core/DevSupport (= 0.81.5)
|
||||||
@@ -2311,9 +2348,12 @@ PODS:
|
|||||||
- ZXingObjC/Core
|
- ZXingObjC/Core
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
|
- EASClient (from `../node_modules/expo-eas-client/ios`)
|
||||||
- EXApplication (from `../node_modules/expo-application/ios`)
|
- EXApplication (from `../node_modules/expo-application/ios`)
|
||||||
- EXConstants (from `../node_modules/expo-constants/ios`)
|
- EXConstants (from `../node_modules/expo-constants/ios`)
|
||||||
- EXImageLoader (from `../node_modules/expo-image-loader/ios`)
|
- EXImageLoader (from `../node_modules/expo-image-loader/ios`)
|
||||||
|
- EXJSONUtils (from `../node_modules/expo-json-utils/ios`)
|
||||||
|
- EXManifests (from `../node_modules/expo-manifests/ios`)
|
||||||
- EXNotifications (from `../node_modules/expo-notifications/ios`)
|
- EXNotifications (from `../node_modules/expo-notifications/ios`)
|
||||||
- Expo (from `../node_modules/expo`)
|
- Expo (from `../node_modules/expo`)
|
||||||
- ExpoAppleAuthentication (from `../node_modules/expo-apple-authentication/ios`)
|
- ExpoAppleAuthentication (from `../node_modules/expo-apple-authentication/ios`)
|
||||||
@@ -2343,7 +2383,10 @@ DEPENDENCIES:
|
|||||||
- ExpoSystemUI (from `../node_modules/expo-system-ui/ios`)
|
- ExpoSystemUI (from `../node_modules/expo-system-ui/ios`)
|
||||||
- "ExpoUI (from `../node_modules/@expo/ui/ios`)"
|
- "ExpoUI (from `../node_modules/@expo/ui/ios`)"
|
||||||
- ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`)
|
- ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`)
|
||||||
|
- EXStructuredHeaders (from `../node_modules/expo-structured-headers/ios`)
|
||||||
- EXTaskManager (from `../node_modules/expo-task-manager/ios`)
|
- EXTaskManager (from `../node_modules/expo-task-manager/ios`)
|
||||||
|
- EXUpdates (from `../node_modules/expo-updates/ios`)
|
||||||
|
- EXUpdatesInterface (from `../node_modules/expo-updates-interface/ios`)
|
||||||
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
|
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
|
||||||
- hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
|
- hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
|
||||||
- lottie-react-native (from `../node_modules/lottie-react-native`)
|
- lottie-react-native (from `../node_modules/lottie-react-native`)
|
||||||
@@ -2439,6 +2482,7 @@ SPEC REPOS:
|
|||||||
- libwebp
|
- libwebp
|
||||||
- lottie-ios
|
- lottie-ios
|
||||||
- PurchasesHybridCommon
|
- PurchasesHybridCommon
|
||||||
|
- ReachabilitySwift
|
||||||
- RevenueCat
|
- RevenueCat
|
||||||
- SDWebImage
|
- SDWebImage
|
||||||
- SDWebImageAVIFCoder
|
- SDWebImageAVIFCoder
|
||||||
@@ -2448,12 +2492,18 @@ SPEC REPOS:
|
|||||||
- ZXingObjC
|
- ZXingObjC
|
||||||
|
|
||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
|
EASClient:
|
||||||
|
:path: "../node_modules/expo-eas-client/ios"
|
||||||
EXApplication:
|
EXApplication:
|
||||||
:path: "../node_modules/expo-application/ios"
|
:path: "../node_modules/expo-application/ios"
|
||||||
EXConstants:
|
EXConstants:
|
||||||
:path: "../node_modules/expo-constants/ios"
|
:path: "../node_modules/expo-constants/ios"
|
||||||
EXImageLoader:
|
EXImageLoader:
|
||||||
:path: "../node_modules/expo-image-loader/ios"
|
:path: "../node_modules/expo-image-loader/ios"
|
||||||
|
EXJSONUtils:
|
||||||
|
:path: "../node_modules/expo-json-utils/ios"
|
||||||
|
EXManifests:
|
||||||
|
:path: "../node_modules/expo-manifests/ios"
|
||||||
EXNotifications:
|
EXNotifications:
|
||||||
:path: "../node_modules/expo-notifications/ios"
|
:path: "../node_modules/expo-notifications/ios"
|
||||||
Expo:
|
Expo:
|
||||||
@@ -2512,8 +2562,14 @@ EXTERNAL SOURCES:
|
|||||||
:path: "../node_modules/@expo/ui/ios"
|
:path: "../node_modules/@expo/ui/ios"
|
||||||
ExpoWebBrowser:
|
ExpoWebBrowser:
|
||||||
:path: "../node_modules/expo-web-browser/ios"
|
:path: "../node_modules/expo-web-browser/ios"
|
||||||
|
EXStructuredHeaders:
|
||||||
|
:path: "../node_modules/expo-structured-headers/ios"
|
||||||
EXTaskManager:
|
EXTaskManager:
|
||||||
:path: "../node_modules/expo-task-manager/ios"
|
:path: "../node_modules/expo-task-manager/ios"
|
||||||
|
EXUpdates:
|
||||||
|
:path: "../node_modules/expo-updates/ios"
|
||||||
|
EXUpdatesInterface:
|
||||||
|
:path: "../node_modules/expo-updates-interface/ios"
|
||||||
FBLazyVector:
|
FBLazyVector:
|
||||||
:path: "../node_modules/react-native/Libraries/FBLazyVector"
|
:path: "../node_modules/react-native/Libraries/FBLazyVector"
|
||||||
hermes-engine:
|
hermes-engine:
|
||||||
@@ -2689,9 +2745,12 @@ EXTERNAL SOURCES:
|
|||||||
:path: "../node_modules/react-native/ReactCommon/yoga"
|
:path: "../node_modules/react-native/ReactCommon/yoga"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
|
EASClient: 68127f1248d2b25fdc82dbbfb17be95d1c4700be
|
||||||
EXApplication: 296622817d459f46b6c5fe8691f4aac44d2b79e7
|
EXApplication: 296622817d459f46b6c5fe8691f4aac44d2b79e7
|
||||||
EXConstants: fd688cef4e401dcf798a021cfb5d87c890c30ba3
|
EXConstants: fd688cef4e401dcf798a021cfb5d87c890c30ba3
|
||||||
EXImageLoader: 189e3476581efe3ad4d1d3fb4735b7179eb26f05
|
EXImageLoader: 189e3476581efe3ad4d1d3fb4735b7179eb26f05
|
||||||
|
EXJSONUtils: 1d3e4590438c3ee593684186007028a14b3686cd
|
||||||
|
EXManifests: 26e15640538c3d5ef028077ebcaf004b744d4932
|
||||||
EXNotifications: a62e1f8e3edd258dc3b155d3caa49f32920f1c6c
|
EXNotifications: a62e1f8e3edd258dc3b155d3caa49f32920f1c6c
|
||||||
Expo: 7af24402df45b9384900104e88a11896ffc48161
|
Expo: 7af24402df45b9384900104e88a11896ffc48161
|
||||||
ExpoAppleAuthentication: bc9de6e9ff3340604213ab9031d4c4f7f802623e
|
ExpoAppleAuthentication: bc9de6e9ff3340604213ab9031d4c4f7f802623e
|
||||||
@@ -2721,7 +2780,10 @@ SPEC CHECKSUMS:
|
|||||||
ExpoSystemUI: 2761aa6875849af83286364811d46e8ed8ea64c7
|
ExpoSystemUI: 2761aa6875849af83286364811d46e8ed8ea64c7
|
||||||
ExpoUI: b99a1d1ef5352a60bebf4f4fd3a50d2f896ae804
|
ExpoUI: b99a1d1ef5352a60bebf4f4fd3a50d2f896ae804
|
||||||
ExpoWebBrowser: b973e1351fdcf5fec0c400997b1851f5a8219ec3
|
ExpoWebBrowser: b973e1351fdcf5fec0c400997b1851f5a8219ec3
|
||||||
|
EXStructuredHeaders: c951e77f2d936f88637421e9588c976da5827368
|
||||||
EXTaskManager: cbbb80cbccea6487ccca0631809fbba2ed3e5271
|
EXTaskManager: cbbb80cbccea6487ccca0631809fbba2ed3e5271
|
||||||
|
EXUpdates: 9042dc213f17593a02d59ef7dd9d297edf621936
|
||||||
|
EXUpdatesInterface: 5adf50cb41e079c861da6d9b4b954c3db9a50734
|
||||||
FBLazyVector: e95a291ad2dadb88e42b06e0c5fb8262de53ec12
|
FBLazyVector: e95a291ad2dadb88e42b06e0c5fb8262de53ec12
|
||||||
hermes-engine: 9f4dfe93326146a1c99eb535b1cb0b857a3cd172
|
hermes-engine: 9f4dfe93326146a1c99eb535b1cb0b857a3cd172
|
||||||
libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7
|
libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7
|
||||||
@@ -2733,6 +2795,7 @@ SPEC CHECKSUMS:
|
|||||||
RCTDeprecation: 943572d4be82d480a48f4884f670135ae30bf990
|
RCTDeprecation: 943572d4be82d480a48f4884f670135ae30bf990
|
||||||
RCTRequired: 8f3cfc90cc25cf6e420ddb3e7caaaabc57df6043
|
RCTRequired: 8f3cfc90cc25cf6e420ddb3e7caaaabc57df6043
|
||||||
RCTTypeSafety: 16a4144ca3f959583ab019b57d5633df10b5e97c
|
RCTTypeSafety: 16a4144ca3f959583ab019b57d5633df10b5e97c
|
||||||
|
ReachabilitySwift: 32793e867593cfc1177f5d16491e3a197d2fccda
|
||||||
React: 914f8695f9bf38e6418228c2ffb70021e559f92f
|
React: 914f8695f9bf38e6418228c2ffb70021e559f92f
|
||||||
React-callinvoker: 1c0808402aee0c6d4a0d8e7220ce6547af9fba71
|
React-callinvoker: 1c0808402aee0c6d4a0d8e7220ce6547af9fba71
|
||||||
React-Core: c61410ef0ca6055e204a963992e363227e0fd1c5
|
React-Core: c61410ef0ca6055e204a963992e363227e0fd1c5
|
||||||
|
|||||||
135
package-lock.json
generated
135
package-lock.json
generated
@@ -49,6 +49,7 @@
|
|||||||
"expo-symbols": "~1.0.7",
|
"expo-symbols": "~1.0.7",
|
||||||
"expo-system-ui": "~6.0.8",
|
"expo-system-ui": "~6.0.8",
|
||||||
"expo-task-manager": "~14.0.8",
|
"expo-task-manager": "~14.0.8",
|
||||||
|
"expo-updates": "^29.0.14",
|
||||||
"expo-web-browser": "~15.0.7",
|
"expo-web-browser": "~15.0.7",
|
||||||
"i18next": "^25.6.2",
|
"i18next": "^25.6.2",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
@@ -7410,6 +7411,12 @@
|
|||||||
"expo": "*"
|
"expo": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/expo-eas-client": {
|
||||||
|
"version": "1.0.7",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/expo-eas-client/-/expo-eas-client-1.0.7.tgz",
|
||||||
|
"integrity": "sha512-Q/b1X0fM+3beqqvffok14pjxMF600NxopdSr9WJY61fF4xllcVnALS0kEudffp9ihMOfcb5xWYqzKj6jMqYDIw==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/expo-file-system": {
|
"node_modules/expo-file-system": {
|
||||||
"version": "19.0.19",
|
"version": "19.0.19",
|
||||||
"resolved": "https://mirrors.tencent.com/npm/expo-file-system/-/expo-file-system-19.0.19.tgz",
|
"resolved": "https://mirrors.tencent.com/npm/expo-file-system/-/expo-file-system-19.0.19.tgz",
|
||||||
@@ -7492,6 +7499,12 @@
|
|||||||
"expo": "*"
|
"expo": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/expo-json-utils": {
|
||||||
|
"version": "0.15.0",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/expo-json-utils/-/expo-json-utils-0.15.0.tgz",
|
||||||
|
"integrity": "sha512-duRT6oGl80IDzH2LD2yEFWNwGIC2WkozsB6HF3cDYNoNNdUvFk6uN3YiwsTsqVM/D0z6LEAQ01/SlYvN+Fw0JQ==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/expo-keep-awake": {
|
"node_modules/expo-keep-awake": {
|
||||||
"version": "15.0.7",
|
"version": "15.0.7",
|
||||||
"resolved": "https://mirrors.tencent.com/npm/expo-keep-awake/-/expo-keep-awake-15.0.7.tgz",
|
"resolved": "https://mirrors.tencent.com/npm/expo-keep-awake/-/expo-keep-awake-15.0.7.tgz",
|
||||||
@@ -7540,6 +7553,19 @@
|
|||||||
"react": "*"
|
"react": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/expo-manifests": {
|
||||||
|
"version": "1.0.9",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/expo-manifests/-/expo-manifests-1.0.9.tgz",
|
||||||
|
"integrity": "sha512-5uVgvIo0o+xBcEJiYn4uVh72QSIqyHePbYTWXYa4QamXd+AmGY/yWmtHaNqCqjsPLCwXyn4OxPr7jXJCeTWLow==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@expo/config": "~12.0.10",
|
||||||
|
"expo-json-utils": "~0.15.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"expo": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/expo-media-library": {
|
"node_modules/expo-media-library": {
|
||||||
"version": "18.2.0",
|
"version": "18.2.0",
|
||||||
"resolved": "https://mirrors.tencent.com/npm/expo-media-library/-/expo-media-library-18.2.0.tgz",
|
"resolved": "https://mirrors.tencent.com/npm/expo-media-library/-/expo-media-library-18.2.0.tgz",
|
||||||
@@ -7913,6 +7939,12 @@
|
|||||||
"react-native": "*"
|
"react-native": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/expo-structured-headers": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/expo-structured-headers/-/expo-structured-headers-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-RmrBtnSphk5REmZGV+lcdgdpxyzio5rJw8CXviHE6qH5pKQQ83fhMEcigvrkBdsn2Efw2EODp4Yxl1/fqMvOZw==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/expo-symbols": {
|
"node_modules/expo-symbols": {
|
||||||
"version": "1.0.7",
|
"version": "1.0.7",
|
||||||
"resolved": "https://mirrors.tencent.com/npm/expo-symbols/-/expo-symbols-1.0.7.tgz",
|
"resolved": "https://mirrors.tencent.com/npm/expo-symbols/-/expo-symbols-1.0.7.tgz",
|
||||||
@@ -7959,6 +7991,109 @@
|
|||||||
"react-native": "*"
|
"react-native": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/expo-updates": {
|
||||||
|
"version": "29.0.14",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/expo-updates/-/expo-updates-29.0.14.tgz",
|
||||||
|
"integrity": "sha512-VgXtjczQ4A/r4Jy/XEj+jWimk0vSd+GdDsYfLzl3CG/9fyQ6NXDP20PgiGfeF+A9rfA4IU3VyWdNJFBPyPPIgg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@expo/code-signing-certificates": "0.0.5",
|
||||||
|
"@expo/plist": "^0.4.7",
|
||||||
|
"@expo/spawn-async": "^1.7.2",
|
||||||
|
"arg": "4.1.0",
|
||||||
|
"chalk": "^4.1.2",
|
||||||
|
"debug": "^4.3.4",
|
||||||
|
"expo-eas-client": "~1.0.7",
|
||||||
|
"expo-manifests": "~1.0.9",
|
||||||
|
"expo-structured-headers": "~5.0.0",
|
||||||
|
"expo-updates-interface": "~2.0.0",
|
||||||
|
"getenv": "^2.0.0",
|
||||||
|
"glob": "^13.0.0",
|
||||||
|
"ignore": "^5.3.1",
|
||||||
|
"resolve-from": "^5.0.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"expo-updates": "bin/cli.js"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"expo": "*",
|
||||||
|
"react": "*",
|
||||||
|
"react-native": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/expo-updates-interface": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/expo-updates-interface/-/expo-updates-interface-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-pTzAIufEZdVPKql6iMi5ylVSPqV1qbEopz9G6TSECQmnNde2nwq42PxdFBaUEd8IZJ/fdJLQnOT3m6+XJ5s7jg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"peerDependencies": {
|
||||||
|
"expo": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/expo-updates/node_modules/@expo/plist": {
|
||||||
|
"version": "0.4.7",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/@expo/plist/-/plist-0.4.7.tgz",
|
||||||
|
"integrity": "sha512-dGxqHPvCZKeRKDU1sJZMmuyVtcASuSYh1LPFVaM1DuffqPL36n6FMEL0iUqq2Tx3xhWk8wCnWl34IKplUjJDdA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@xmldom/xmldom": "^0.8.8",
|
||||||
|
"base64-js": "^1.2.3",
|
||||||
|
"xmlbuilder": "^15.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/expo-updates/node_modules/arg": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/arg/-/arg-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg=="
|
||||||
|
},
|
||||||
|
"node_modules/expo-updates/node_modules/getenv": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/getenv/-/getenv-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/expo-updates/node_modules/glob": {
|
||||||
|
"version": "13.0.0",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/glob/-/glob-13.0.0.tgz",
|
||||||
|
"integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==",
|
||||||
|
"dependencies": {
|
||||||
|
"minimatch": "^10.1.1",
|
||||||
|
"minipass": "^7.1.2",
|
||||||
|
"path-scurry": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "20 || >=22"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/expo-updates/node_modules/minimatch": {
|
||||||
|
"version": "10.1.1",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/minimatch/-/minimatch-10.1.1.tgz",
|
||||||
|
"integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
|
||||||
|
"license": "BlueOak-1.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@isaacs/brace-expansion": "^5.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "20 || >=22"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/expo-updates/node_modules/xmlbuilder": {
|
||||||
|
"version": "15.1.1",
|
||||||
|
"resolved": "https://mirrors.tencent.com/npm/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
|
||||||
|
"integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/expo-web-browser": {
|
"node_modules/expo-web-browser": {
|
||||||
"version": "15.0.9",
|
"version": "15.0.9",
|
||||||
"resolved": "https://mirrors.tencent.com/npm/expo-web-browser/-/expo-web-browser-15.0.9.tgz",
|
"resolved": "https://mirrors.tencent.com/npm/expo-web-browser/-/expo-web-browser-15.0.9.tgz",
|
||||||
|
|||||||
@@ -50,6 +50,7 @@
|
|||||||
"expo-symbols": "~1.0.7",
|
"expo-symbols": "~1.0.7",
|
||||||
"expo-system-ui": "~6.0.8",
|
"expo-system-ui": "~6.0.8",
|
||||||
"expo-task-manager": "~14.0.8",
|
"expo-task-manager": "~14.0.8",
|
||||||
|
"expo-updates": "^29.0.14",
|
||||||
"expo-web-browser": "~15.0.7",
|
"expo-web-browser": "~15.0.7",
|
||||||
"i18next": "^25.6.2",
|
"i18next": "^25.6.2",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
|
|||||||
@@ -166,6 +166,8 @@ export interface MedicalRecordItem {
|
|||||||
date: string; // YYYY-MM-DD
|
date: string; // YYYY-MM-DD
|
||||||
images: string[]; // Image URLs
|
images: string[]; // Image URLs
|
||||||
note?: string;
|
note?: string;
|
||||||
|
createdAt: string; // ISO 8601
|
||||||
|
updatedAt: string; // ISO 8601
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface MedicalRecordsData {
|
export interface MedicalRecordsData {
|
||||||
@@ -177,30 +179,21 @@ export interface MedicalRecordsData {
|
|||||||
* 获取就医资料列表
|
* 获取就医资料列表
|
||||||
*/
|
*/
|
||||||
export async function getMedicalRecords(): Promise<MedicalRecordsData> {
|
export async function getMedicalRecords(): Promise<MedicalRecordsData> {
|
||||||
// Mock implementation for now
|
return api.get<MedicalRecordsData>('/api/health-profiles/medical-records');
|
||||||
// return api.get<MedicalRecordsData>('/api/health-profiles/medical-records');
|
|
||||||
return {
|
|
||||||
records: [],
|
|
||||||
prescriptions: []
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加就医资料
|
* 添加就医资料
|
||||||
*/
|
*/
|
||||||
export async function addMedicalRecord(data: Omit<MedicalRecordItem, 'id'>): Promise<MedicalRecordItem> {
|
export async function addMedicalRecord(data: Omit<MedicalRecordItem, 'id' | 'createdAt' | 'updatedAt'>): Promise<MedicalRecordItem> {
|
||||||
// return api.post<MedicalRecordItem>('/api/health-profiles/medical-records', data);
|
return api.post<MedicalRecordItem>('/api/health-profiles/medical-records', data);
|
||||||
return {
|
|
||||||
id: Date.now().toString(),
|
|
||||||
...data
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除就医资料
|
* 删除就医资料
|
||||||
*/
|
*/
|
||||||
export async function deleteMedicalRecord(id: string): Promise<void> {
|
export async function deleteMedicalRecord(id: string): Promise<void> {
|
||||||
// return api.delete(`/api/health-profiles/medical-records/${id}`);
|
return api.delete<void>(`/api/health-profiles/medical-records/${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== 家庭健康管理 API ====================
|
// ==================== 家庭健康管理 API ====================
|
||||||
|
|||||||
@@ -387,7 +387,7 @@ export const fetchMedicalRecords = createAsyncThunk(
|
|||||||
*/
|
*/
|
||||||
export const addNewMedicalRecord = createAsyncThunk(
|
export const addNewMedicalRecord = createAsyncThunk(
|
||||||
'health/addMedicalRecord',
|
'health/addMedicalRecord',
|
||||||
async (data: Omit<MedicalRecordItem, 'id'>, { rejectWithValue }) => {
|
async (data: Omit<MedicalRecordItem, 'id' | 'createdAt' | 'updatedAt'>, { rejectWithValue }) => {
|
||||||
try {
|
try {
|
||||||
const result = await healthProfileApi.addMedicalRecord(data);
|
const result = await healthProfileApi.addMedicalRecord(data);
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
Reference in New Issue
Block a user