Leon 1 年之前
父节点
当前提交
7a34040242

+ 1 - 1
ios/AppDelegate.mm

@@ -125,7 +125,7 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
 - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
 {
 //  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
-#if DEBUGAA
+#if DEBUG
   return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
 #else
   return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

+ 2 - 2
ios/hola.xcodeproj/project.pbxproj

@@ -572,7 +572,7 @@
 				CODE_SIGN_ENTITLEMENTS = hola/hola.entitlements;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 15;
+				CURRENT_PROJECT_VERSION = 16;
 				DEVELOPMENT_TEAM = GPMXAZ9G5N;
 				ENABLE_BITCODE = NO;
 				INFOPLIST_FILE = hola/Info.plist;
@@ -605,7 +605,7 @@
 				CODE_SIGN_ENTITLEMENTS = hola/hola.entitlements;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 15;
+				CURRENT_PROJECT_VERSION = 16;
 				DEVELOPMENT_TEAM = GPMXAZ9G5N;
 				INFOPLIST_FILE = hola/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = (

文件差异内容过多而无法显示
+ 1 - 1
ios/main.jsbundle


+ 5 - 6
src/components/input/Inputs.tsx

@@ -51,15 +51,14 @@ export default function Component({
         return (
             <View className="input_bg">
                 <TextInput className={isFocus ? "input input_focus" : "input"}
-                    // style={{backgroundColor:'red'}}
                     placeholder={placeholder ? placeholder : ''}
-                    value={inputValue}
+                    // value={inputValue}
                     password={isSecure ? true : false}
                     type={openType == 'nickname' ? 'nickname' : isSecure ? 'safe-password' : 'text'}
-                    // type={openType?openType:'text'}
-                    onInput={handleInputChange}
+                    onChangeText={(e)=>{
+                        onChange(e)
+                    }}
                     placeholderStyle='color:#ffffff66'
-                    // onConfirm={() => onConfirm()}
                     focus={autoFocus}
                     confirmType="done"
                     selectionColor={global.fastColor ? global.fastColor : ColorType.fast}
@@ -74,7 +73,7 @@ export default function Component({
                         if (onBlur)
                             onBlur()
                     }}
-                />
+                >{inputValue}</TextInput>
                 {
                     inputValue.length > 0 && <View className="clear_bg" onClick={clear}>
                         <IconClear />

+ 1 - 1
src/components/layout/TableCell.tsx

@@ -16,7 +16,7 @@ export default function Component(props: {
     }
 
     return <View onClick={onClick} className={props.showMarginBottom ? "table_cell table_cell_margin_bottom" : "table_cell"}>
-        <View style={{ flex: 1 }}>
+        <View style={{ flex: 1,display:'flex',flexDirection:'row',alignItems:'center' }}>
             <Text className='table_cell_title'>{props.title}</Text>
         </View>
         {

+ 1 - 0
src/context/locales/en.js

@@ -80,6 +80,7 @@ export default {
         },
         auth: {
             agreement: 'I have read and agreed to the User Agreement and Privacy Policy',
+            psd_repeat_diff:'两次密码输入不一致'
         },
         records_history: {
             time_title: 'History',

+ 1 - 0
src/context/locales/zh.js

@@ -79,6 +79,7 @@ export default {
         },
         auth: {
             agreement: '已阅读并同意《用户协议》和《隐私政策》',
+            psd_repeat_diff:'两次密码输入不一致'
         },
         records_history: {
             time_title: '历史记录',

+ 1 - 1
src/features/auth/components/CreatePassword.tsx

@@ -73,7 +73,7 @@ export default function Component(prop: { name?: string, email?: string }) {
 
     if (password != repeat) {
       Taro.showToast({
-        title: '两次密码输入不一致',
+        title: t('page.auth.psd_repeat_diff'),
         icon: 'none'
       })
       return

+ 2 - 2
src/features/daynight/AllDayRings.tsx

@@ -387,13 +387,13 @@ export default function AllDayRings(props: { schedule: any }) {
                             <Text className="duration_value2" style={{ color: ColorType.day }}>{dayDuration()}</Text>
 
                             {
-                                ring.current_record && ring.current_record.scenario != 'SLEEP' && <Text className="duration_title2" style={{ color: '#fff', opacity: 0.4 }}>进食</Text>
+                                ring.current_record && ring.current_record.scenario != 'SLEEP' && <Text className="duration_title2" style={{ color: '#fff', opacity: 0.4 }}>{t('feature.common.eat')}</Text>
                             }
                             {
                                 ring.current_record && ring.current_record.scenario != 'SLEEP' && <Text className="duration_value2" style={{ color: ColorType.food }}>{eatDuration()}</Text>
                             }
                             {
-                                ring.current_record && ring.current_record.scenario != 'FAST' && <Text className="duration_title2" style={{ color: '#fff', opacity: 0.4 }}>活动</Text>
+                                ring.current_record && ring.current_record.scenario != 'FAST' && <Text className="duration_title2" style={{ color: '#fff', opacity: 0.4 }}>{t('feature.common.move')}</Text>
                             }
                             {
                                 ring.current_record && ring.current_record.scenario != 'FAST' && <Text className="duration_value2" style={{ color: ColorType.activity, marginBottom: 0 }}>{activityDuration()}</Text>

+ 19 - 17
src/features/daynight/DayNightDetailPopup.tsx

@@ -233,7 +233,7 @@ export default function DayNightDetailPopup(props: {
                 strSunset = t('feature.day_night.tomorrow')
             }
             else {
-                strSunset = dayjs(global.nightObj.sunset.timestamp).format('M月D日')
+                strSunset = dayjs(global.nightObj.sunset.timestamp).format(global.language=='en'?'MMM D':'M月D日')
             }
             if (new Date().getDate() == new Date(global.nightObj.sunrise.timestamp).getDate()) {
                 strSunrise = t('feature.day_night.today')
@@ -245,7 +245,7 @@ export default function DayNightDetailPopup(props: {
                 strSunrise = t('feature.day_night.tomorrow')
             }
             else {
-                strSunrise = dayjs(global.nightObj.sunrise.timestamp).format('M月D日')
+                strSunrise = dayjs(global.nightObj.sunrise.timestamp).format(global.language=='en'?'MMM D':'M月D日')
             }
         }
         return [strSunset, strSunrise];
@@ -280,7 +280,7 @@ export default function DayNightDetailPopup(props: {
                 strSunset = t('feature.day_night.tomorrow')
             }
             else {
-                strSunset = dayjs(global.dayObj.sunset.timestamp).format('M月D日')
+                strSunset = dayjs(global.dayObj.sunset.timestamp).format(global.language=='en'?'MMM D':'M月D日')
             }
             if (new Date().getDate() == new Date(global.dayObj.sunrise.timestamp).getDate()) {
                 strSunrise = t('feature.day_night.today')
@@ -292,7 +292,7 @@ export default function DayNightDetailPopup(props: {
                 strSunrise = t('feature.day_night.tomorrow')
             }
             else {
-                strSunrise = dayjs(global.dayObj.sunrise.timestamp).format('M月D日')
+                strSunrise = dayjs(global.dayObj.sunrise.timestamp).format(global.language=='en'?'MMM D':'M月D日')
             }
         }
         return [strSunrise, strSunset];
@@ -313,22 +313,24 @@ export default function DayNightDetailPopup(props: {
                 return true
             }
         }
-        console.log('c')
         return false
     }
 
     function events() {
         let timelineItems: any = []
 
+        const timeFormat = global.language=='en'?'MMM D HH:mm':'M月D日 HH:mm'
+        const timeFormat2 = global.language=='en'?'MMM D':'M月D日'
+
         if (props.isNight) {
             if (isCompleted()) {
                 var newT;
                 if (props.authInfo.timezone) {
-                    newT = TimeFormatter.tzTimeFormateLocalTime(props.authInfo.night_completed.sunset_ts, props.authInfo.timezone.id, 'M月D日 HH:mm')
+                    newT = TimeFormatter.tzTimeFormateLocalTime(props.authInfo.night_completed.sunset_ts, props.authInfo.timezone.id, timeFormat)
                     //dayjs(props.authInfo.night_completed.sunset_ts).tz(props.authInfo.timezone.id).format('M月D日 HH:mm')
                 }
                 else {
-                    newT = dayjs(props.authInfo.night_completed.sunset_ts).format('M月D日 HH:mm')
+                    newT = dayjs(props.authInfo.night_completed.sunset_ts).format(timeFormat)
                 }
 
                 var list = nightDurationDesc()
@@ -344,12 +346,12 @@ export default function DayNightDetailPopup(props: {
                 )
                 var newT2;
                 if (props.authInfo.timezone) {
-                    newT2 = TimeFormatter.tzTimeFormateLocalTime(props.authInfo.night_completed.sunrise_ts, props.authInfo.timezone.id, 'M月D日 HH:mm')
+                    newT2 = TimeFormatter.tzTimeFormateLocalTime(props.authInfo.night_completed.sunrise_ts, props.authInfo.timezone.id, timeFormat)
                     
                     //dayjs(props.authInfo.night_completed.sunrise_ts).tz(props.authInfo.timezone.id).format('M月D日 HH:mm')
                 }
                 else {
-                    newT2 = dayjs(props.authInfo.night_completed.sunrise_ts).format('M月D日 HH:mm')
+                    newT2 = dayjs(props.authInfo.night_completed.sunrise_ts).format(timeFormat)
                 }
                 // var newT2 = dayjs(props.authInfo.night_completed.sunrise_ts).tz('GMT+0800').format('MM-DD HH:mm')//TimeFormatter.transferTimestamp(props.authInfo.night_completed.sunrise_ts, props.authInfo.timezone)
                 timelineItems.push(
@@ -367,8 +369,8 @@ export default function DayNightDetailPopup(props: {
 
                 var list = nightDurationDesc()
                 if (diffTimeZone() && global.nightObj) {
-                    list[0] = TimeFormatter.tzTimeFormateLocalTime(global.nightObj.sunset.timestamp, props.authInfo.timezone.id, 'M月D日')
-                    list[1] = TimeFormatter.tzTimeFormateLocalTime(global.nightObj.sunrise.timestamp, props.authInfo.timezone.id, 'M月D日')
+                    list[0] = TimeFormatter.tzTimeFormateLocalTime(global.nightObj.sunset.timestamp, props.authInfo.timezone.id, timeFormat2)
+                    list[1] = TimeFormatter.tzTimeFormateLocalTime(global.nightObj.sunrise.timestamp, props.authInfo.timezone.id, timeFormat2)
                     // list[0] = dayjs(global.nightObj.sunset.timestamp).tz(props.authInfo.timezone.id).format('M月D日')
                     // list[1] = dayjs(global.nightObj.sunrise.timestamp).tz(props.authInfo.timezone.id).format('M月D日')
 
@@ -400,11 +402,11 @@ export default function DayNightDetailPopup(props: {
             if (isCompleted()) {
                 var newT;
                 if (props.authInfo.timezone) {
-                    newT = TimeFormatter.tzTimeFormateLocalTime(props.authInfo.day_completed.sunrise_ts, props.authInfo.timezone.id, 'M月D日 HH:mm')
+                    newT = TimeFormatter.tzTimeFormateLocalTime(props.authInfo.day_completed.sunrise_ts, props.authInfo.timezone.id, timeFormat)
                     // newT = dayjs(props.authInfo.day_completed.sunrise_ts).tz(props.authInfo.timezone.id).format('M月D日 HH:mm')
                 }
                 else {
-                    newT = dayjs(props.authInfo.day_completed.sunrise_ts).format('M月D日 HH:mm')
+                    newT = dayjs(props.authInfo.day_completed.sunrise_ts).format(timeFormat)
                 }
     
                 timelineItems.push(
@@ -418,11 +420,11 @@ export default function DayNightDetailPopup(props: {
                 )
                 var newT2;
                 if (props.authInfo.timezone) {
-                    newT2 = TimeFormatter.tzTimeFormateLocalTime(props.authInfo.day_completed.sunset_ts, props.authInfo.timezone.id, 'M月D日 HH:mm')
+                    newT2 = TimeFormatter.tzTimeFormateLocalTime(props.authInfo.day_completed.sunset_ts, props.authInfo.timezone.id, timeFormat)
                     // newT2 = dayjs(props.authInfo.day_completed.sunset_ts).tz(props.authInfo.timezone.id).format('M月D日 HH:mm')
                 }
                 else {
-                    newT2 = dayjs(props.authInfo.day_completed.sunset_ts).format('M月D日 HH:mm')
+                    newT2 = dayjs(props.authInfo.day_completed.sunset_ts).format(timeFormat)
                 }
                 timelineItems.push(
                     {
@@ -437,8 +439,8 @@ export default function DayNightDetailPopup(props: {
             else {
                 var list = dayDurationDesc()
                 if (diffTimeZone() && global.dayObj) {
-                    list[0] = TimeFormatter.tzTimeFormateLocalTime(global.dayObj.sunrise.timestamp, props.authInfo.timezone.id, 'M月D日')
-                    list[1] = TimeFormatter.tzTimeFormateLocalTime(global.dayObj.sunset.timestamp, props.authInfo.timezone.id, 'M月D日')
+                    list[0] = TimeFormatter.tzTimeFormateLocalTime(global.dayObj.sunrise.timestamp, props.authInfo.timezone.id, timeFormat2)
+                    list[1] = TimeFormatter.tzTimeFormateLocalTime(global.dayObj.sunset.timestamp, props.authInfo.timezone.id, timeFormat2)
                     // list[0] = dayjs(global.dayObj.sunrise.timestamp).tz(props.authInfo.timezone.id).format('M月D日')
                     // list[1] = dayjs(global.dayObj.sunset.timestamp).tz(props.authInfo.timezone.id).format('M月D日')
 

+ 3 - 2
src/features/trackTimeDuration/actions/TrackTimeActions.tsx

@@ -2,6 +2,7 @@ import { API_LOCAL_PUSHES } from "@/services/http/api";
 import { request } from "@/services/http/request";
 import { recordCheck } from "@/services/trackTimeDuration";
 import trackTimeService from "@/store/trackTimeMachine"
+import { isIOS } from "@/utils/tools";
 // import {PushNotification} from 'react-native-push-notification'
 import Taro from "@tarojs/taro";
 import dayjs from 'dayjs'
@@ -147,7 +148,7 @@ export const getLocalPush = () => {
                         return
                     }
         
-                    if (Taro.getSystemInfoSync().platform == 'ios') {
+                    if (kIsIOS) {
                         var Jto = require('react-native').NativeModules.NativeBridge;
                         Jto.addLocalPush(messages)
                         return;
@@ -155,7 +156,7 @@ export const getLocalPush = () => {
         
         
                     messages.map((item, index) => {
-                        if (Taro.getSystemInfoSync().platform == 'ios') {
+                        if (kIsIOS) {
                             setTimeout(() => {
                                 var Jto = require('react-native').NativeModules.NativeBridge;
                                 Jto.addLocalPush(item)

+ 1 - 1
src/features/trackTimeDuration/components/CheckAccess.tsx

@@ -443,7 +443,7 @@ export default function CheckAccess(props: { record: any, count: number }) {
                 <View className="fast_alert_title">{alertTitle}</View>
                 <View className="fast_alert_detail">{alertContent}</View>
                 <View className={subConfirmText.length > 0 ? 'fast_alert_confirm confirm_multline' : 'fast_alert_confirm'} onClick={confirm}>
-                    <Text>{confirmText}</Text>
+                    <Text style={{fontWeight:'bold'}}>{confirmText}</Text>
                     {
                         subConfirmText.length > 0 && <Text className="confirm_sub_text">{subConfirmText}</Text>
                     }

+ 2 - 1
src/features/trackTimeDuration/components/CircadianDetailPopup.tsx

@@ -16,6 +16,7 @@ import { updateRecord } from '@/services/trackTimeDuration';
 import PickerViews from '@/components/input/PickerViews';
 import Taro from '@tarojs/taro';
 import { IconInfo, IconMinus, IconPlus } from '@/components/basic/Icons';
+import showAlert from '@/components/basic/Alert';
 
 
 let LinearGradient
@@ -594,7 +595,7 @@ export default function CircadianDetailPopup(props: { record: any, schedule?: an
     }
 
     function showPredictedAlert() {
-        Taro.showModal({
+        showAlert({
             title: t('feature.track_time_duration.console.predicted_alert_title'),
             content: t('feature.track_time_duration.console.predicted_alert_content'),
             showCancel: false,

+ 15 - 8
src/features/trackTimeDuration/components/ConsolePicker.tsx

@@ -4,6 +4,7 @@ import { forwardRef, useEffect, useImperativeHandle, useState } from "react";
 import { useTranslation } from "react-i18next";
 import '@components/input/LimitPickers.scss'
 import { TimeFormatter } from "@/utils/time_format";
+import { AtActivityIndicator } from 'taro-ui';
 import React from "react";
 
 
@@ -20,7 +21,8 @@ const Component = forwardRef((props: {
     isFast?: boolean,
     isEnd?: boolean,
     endTimestamp?: number,
-    isTimeout?: boolean
+    isTimeout?: boolean,
+    isLoading?: boolean
 }, ref) => {
     const today = new Date();
     const [loaded, setLoaded] = useState(false)
@@ -78,6 +80,7 @@ const Component = forwardRef((props: {
             const weekday = TimeFormatter.getDayOfWeek(dt.getDay(), true);
             const formattedDate = global.language == 'en' ? `${weekday} ${TimeFormatter.getMonth(month)} ${day}` : `${TimeFormatter.getMonth(month)}${day}日 ${weekday}`;
             var today1 = new Date();
+            debugger
             var yesterday = new Date(today1.getTime() - 24 * 3600 * 1000)
             if (dt.getMonth() == currentDate.getMonth() && dt.getDate() == currentDate.getDate()) {
                 selIndex = i
@@ -181,23 +184,23 @@ const Component = forwardRef((props: {
     function pickerTimeText() {
         if (props.isTimeout) {
             if (props.isFast) {
-                return t('feature.track_time_duration.console.real_fast_end_tip',{time:getEndTimestamp(props.endTimestamp!)})
+                return t('feature.track_time_duration.console.real_fast_end_tip', { time: getEndTimestamp(props.endTimestamp!) })
             }
             else {
-                return t('feature.track_time_duration.console.real_sleep_end_tip',{time:getEndTimestamp(props.endTimestamp!)})
+                return t('feature.track_time_duration.console.real_sleep_end_tip', { time: getEndTimestamp(props.endTimestamp!) })
             }
         }
         if (props.isFast) {
             if (props.isEnd) {
-                return t('feature.track_time_duration.console.real_fast_end_tip',{time:getEndTimestamp(props.endTimestamp!)})
+                return t('feature.track_time_duration.console.real_fast_end_tip', { time: getEndTimestamp(props.endTimestamp!) })
             }
-            return t('feature.track_time_duration.console.real_fast_start_tip',{time:getEndTime()})
+            return t('feature.track_time_duration.console.real_fast_start_tip', { time: getEndTime() })
         }
         else {
             if (props.isEnd) {
-                return t('feature.track_time_duration.console.real_sleep_end_tip',{time:getEndTimestamp(props.endTimestamp!)})
+                return t('feature.track_time_duration.console.real_sleep_end_tip', { time: getEndTimestamp(props.endTimestamp!) })
             }
-            return t('feature.track_time_duration.console.real_sleep_start_tip',{time:getEndTime()})
+            return t('feature.track_time_duration.console.real_sleep_start_tip', { time: getEndTime() })
 
         }
     }
@@ -244,7 +247,11 @@ const Component = forwardRef((props: {
                     <Text className='modal_cancel_text' style={{ color: color, fontWeight: 'bold' }}>{t('feature.common.picker_cancel_btn')}</Text>
                 </View>
                 <View className='btn_space' />
-                <View className='modal_btn' style={{ backgroundColor: color }} onClick={confirm}>
+                <View className='modal_btn' style={{ backgroundColor: color, flexDirection: 'row', alignItems: 'center', justifyContent: 'center', opacity: props.isLoading ? 0.6 : 1 }} onClick={confirm}>
+                    {
+                        props.isLoading && process.env.TARO_ENV == 'rn' && <View style={{ display: 'flex', overflow: 'hidden', height: 20, marginRight: 5 }}><AtActivityIndicator mode="center" color="#000" /></View>
+                    }
+
                     <Text className='modal_confirm_text' style={{ color: '#000', fontWeight: 'bold' }}>{t('feature.common.picker_confirm_btn')}</Text>
                 </View>
 

+ 3 - 2
src/features/trackTimeDuration/components/IndexConsole.tsx

@@ -9,7 +9,7 @@ import ConsolePicker from './ConsolePicker';
 import LimitPickers from '@/components/input/LimitPickers';
 import LimitTimeoutPickers from '@/components/input/LimitTimeoutPickers';
 import { getColor, getTimePickerTitle } from '../hooks/Console';
-import { rpxToPx, vibrate } from '@/utils/tools';
+import { isIOS, kIsIOS, rpxToPx, vibrate } from '@/utils/tools';
 import { TimeFormatter } from '@/utils/time_format';
 import Modal from '@/components/layout/Modal.weapp';
 import Taro, { useDidShow } from '@tarojs/taro';
@@ -75,7 +75,7 @@ export default function IndexConsole(props: { record: any, count: number }) {
     useEffect(() => {
         if (process.env.TARO_ENV == 'rn') {
             // console.error('current status',status)
-            if (Taro.getSystemInfoSync().platform == 'ios') {
+            if (kIsIOS) {
                 var Jto = require('react-native').NativeModules.NativeBridge;
                 var NativeAppEventEmitter = require('react-native').NativeAppEventEmitter;
                 Jto.getNotificationAuthStatus()
@@ -428,6 +428,7 @@ export default function IndexConsole(props: { record: any, count: number }) {
                 isFast={operateType == 'startFast' || operateType == 'endFast'}
                 isEnd={operateType == 'endFast' || operateType == 'endSleep'}
                 isTimeout={isTimeout}
+                isLoading={btnDisable}
                 onChange={(e) => {
                     pickerConfirm(e)
                     global.pauseIndexTimer = false

+ 3 - 3
src/features/trackTimeDuration/components/RecordFastSleep.tsx

@@ -20,7 +20,7 @@ import { ColorType } from "@/context/themes/color";
 import TimelineStage from "./TimelineStage";
 import { jumpPage } from "../hooks/Common";
 import { RealRing, CurrentDot } from "@/features/trackTimeDuration/components/Rings";
-import { getTimezone, getTimezoneId, rpxToPx } from "@/utils/tools";
+import { getTimezone, getTimezoneId, kIsIOS, rpxToPx } from "@/utils/tools";
 import { useDispatch, useSelector } from "react-redux";
 import { setSelID } from "@/store/common";
 import CircadianDetailPopup from "./CircadianDetailPopup";
@@ -436,7 +436,7 @@ const RecordFastSleep = memo((props: { data: any, type: string, index: number, d
 
         if (multiTimeZone) {
             if (props.data.first_timezone && props.data.first_timezone.id) {
-                if (Taro.getSystemInfoSync().platform == 'ios') {
+                if (kIsIOS) {
                     if (props.data.first_timezone.id == getTimezoneId()) {
                         return recordTime()
                     }
@@ -464,7 +464,7 @@ const RecordFastSleep = memo((props: { data: any, type: string, index: number, d
         }
         if (diffTimeZone) {
             if (props.data.first_timezone.id) {
-                if (Taro.getSystemInfoSync().platform == 'ios') {
+                if (kIsIOS) {
                     if (props.data.first_timezone.id == getTimezoneId()) {
                         return recordTime()
                     }

+ 2 - 2
src/features/trackTimeDuration/components/SetSchedule.rn.tsx

@@ -19,7 +19,7 @@ import { useTranslation } from "react-i18next";
 import { ColorType } from "@/context/themes/color";
 import TitleView from "./TitleView";
 import { jumpPage } from "../hooks/Common";
-import { rpxToPx, vibrate } from "@/utils/tools";
+import { kIsIOS, rpxToPx, vibrate } from "@/utils/tools";
 import { PixelRatio } from "react-native";
 import { clientId } from "@/services/user";
 import showAlert from "@/components/basic/Alert";
@@ -109,7 +109,7 @@ export default function Component() {
         setHours(durationTime(scheduleObj.start_time, scheduleObj.end_time)[0])
         setMinutes(durationTime(scheduleObj.start_time, scheduleObj.end_time)[1])
 
-        if (Taro.getSystemInfoSync().platform == 'ios') {
+        if (kIsIOS) {
             var Jto = require('react-native').NativeModules.NativeBridge;
             Jto.getNotificationAuthStatus()
             require('react-native').NativeAppEventEmitter.addListener('notificationResult', (data) => {

+ 6 - 0
src/pages/clock/ChooseScenario.tsx

@@ -45,6 +45,12 @@ export default function ChooseScenario() {
     }
 
     useEffect(() => {
+        if (navigation) {
+            navigation.setOptions({
+                headerTitle: '',
+            });
+        }
+
         getClocks().then(res => {
             setSelected((res as any).current_record.scenario == 'FAST_SLEEP' ? 1 : 0)
             setAccess((res as any).access)

+ 27 - 12
src/pages/clock/ClockMain.tsx

@@ -18,7 +18,7 @@ import { bigRingRadius, getBgRing, getCommon, getDot, getSchedule, ringWidth, sm
 import { RealRing, CurrentDot } from "@/features/trackTimeDuration/components/Rings";
 import IndexConsole from "@/features/trackTimeDuration/components/IndexConsole";
 import Modal from '@/components/layout/Modal'
-import { compareVersion, getTimezone, getTimezoneId, getTimezoneName, rpxToPx } from "@/utils/tools";
+import { compareVersion, getTimezone, getTimezoneId, getTimezoneName, kIsIOS, rpxToPx } from "@/utils/tools";
 import RecordFastSleep from "@/features/trackTimeDuration/components/RecordFastSleep";
 import WeekCalendar from "@/features/trackTimeDuration/components/WeekCalendar";
 import { useTranslation } from "react-i18next";
@@ -50,6 +50,7 @@ import { wxPubFollow } from "@/services/permission";
 import { repeat } from "lodash";
 import { setWXFollow } from "@/store/permission";
 import Discovery from "@/features/trackTimeDuration/components/Discovery";
+import NoData from "@/components/view/NoData";
 
 const utc = require('dayjs/plugin/utc')
 const timezone = require('dayjs/plugin/timezone')
@@ -192,7 +193,7 @@ export default function Page() {
 
 
             if (process.env.TARO_ENV == 'rn') {
-                if (Taro.getSystemInfoSync().platform == 'ios') {
+                if (kIsIOS) {
                     var Jto = require('react-native').NativeModules.NativeBridge;
                     Jto.getNotificationAuthStatus()
                     // Jto.rnPageLoaded()
@@ -301,7 +302,10 @@ export default function Page() {
     }
 
     useDidShow(() => {
-        checkTimeZone()
+        if (process.env.TARO_ENV == 'weapp') {
+            checkTimeZone()
+        }
+
         setCount(pre => pre + 1)
         //resume timer
         pauseTimer = false
@@ -341,14 +345,15 @@ export default function Page() {
         if (nextAppState != 'active') {
             return
         }
-        checkTimeZone()
+        if (nextAppState == 'active')
+            checkTimeZone()
         updateNotificationStatus()
     };
 
     function updateNotificationStatus() {
         if (process.env.TARO_ENV == 'rn') {
             if (user.isLogin) {
-                if (Taro.getSystemInfoSync().platform == 'ios') {
+                if (kIsIOS) {
                     var Jto = require('react-native').NativeModules.NativeBridge;
                     Jto.getNotificationAuthStatus()
                 }
@@ -361,6 +366,7 @@ export default function Page() {
     }
 
     function checkTimeZone() {
+        debugger
         setCount((prevCounter) => prevCounter + 1)
         var timeZoneFormatted = getTimezone()
 
@@ -403,7 +409,7 @@ export default function Page() {
 
         if (process.env.TARO_ENV == 'rn') {
             var NativeModules = require('react-native').NativeModules;
-            if (Taro.getSystemInfoSync().platform == 'ios') {
+            if (kIsIOS) {
                 // language = NativeModules.SettingsManager.settings.AppleLocale
                 // languageList = NativeModules.SettingsManager.settings.AppleLanguages
                 language = {
@@ -429,7 +435,7 @@ export default function Page() {
         var timeZoneFormatted = getTimezone()
         var timeZoneId = ''
         var timeZoneName = ''
-        if (Taro.getSystemInfoSync().platform == 'ios') {
+        if (kIsIOS) {
             timeZoneId = getTimezoneId()
             timeZoneName = getTimezoneName()
         }
@@ -485,7 +491,7 @@ export default function Page() {
             }
 
             if (process.env.TARO_ENV == 'rn' && user.isLogin) {
-                if (Taro.getSystemInfoSync().platform == 'ios') {
+                if (kIsIOS) {
                     var Jto = require('react-native').NativeModules.NativeBridge;
                     Jto.rnPageLoaded()
                 }
@@ -849,6 +855,10 @@ export default function Page() {
                     </View>
                 }
 
+                {
+                    showErrorPage && <NoData refresh={() => { getCheckData() }} />
+                }
+
                 {
                     user.isLogin && !showErrorPage && <View style={{ display: 'flex', flexDirection: 'column' }}>
                         <View className="index_section">
@@ -872,10 +882,15 @@ export default function Page() {
                     </View>
                 }
 
-                <View className="index_section">
-                    <Text className="index_section_title">昼夜节律</Text>
-                </View>
-                <DayNightSwiper count={count} schedule={schedules} homeData={homeData} />
+                {
+                    !showErrorPage && <View className="index_section">
+                        <Text className="index_section_title">昼夜节律</Text>
+                    </View>
+                }
+                {
+                    !showErrorPage && <DayNightSwiper count={count} schedule={schedules} homeData={homeData} />
+                }
+
                 {
                     process.env.TARO_ENV == 'weapp' && <View className="index_section">
                         <Text className="index_section_title">日记</Text>

+ 7 - 2
src/pages/clock/SetGoal.tsx

@@ -1,7 +1,7 @@
 import { View, Text, Image } from "@tarojs/components";
 import './ChooseScenario.scss'
 import { useRouter } from "@tarojs/taro";
-import { rpxToPx } from "@/utils/tools";
+import { kIsIOS, rpxToPx } from "@/utils/tools";
 import { ColorType } from "@/context/themes/color";
 import Footer from "@/components/layout/Footer";
 import { ChooseScenarioBtn, SetScheduleBtn } from "@/features/common/SpecBtns";
@@ -56,6 +56,11 @@ export default function SetGoal() {
     const dispatch = useDispatch();
 
     useEffect(() => {
+        if (navigation) {
+            navigation.setOptions({
+                headerTitle: '',
+            });
+        }
         if (process.env.TARO_ENV == 'rn') {
             rnNotification()
         }
@@ -68,7 +73,7 @@ export default function SetGoal() {
 
 
     function rnNotification() {
-        if (Taro.getSystemInfoSync().platform == 'ios') {
+        if (kIsIOS) {
             Jto.getNotificationAuthStatus()
             NativeAppEventEmitter.addListener('notificationResult', (data) => {
                 setAuthStatus(data)

+ 5 - 1
src/pages/clock/Suggest.tsx

@@ -51,7 +51,11 @@ export default function Suggest() {
 
 
     useEffect(() => {
-
+        if (navigation) {
+            navigation.setOptions({
+                headerTitle: '',
+            });
+        }
         if (pageStep == 1) {
             var obj = target.fast.schedule.fast
             var array: any = []

+ 3 - 1
src/services/common.tsx

@@ -2,6 +2,7 @@ import { setResources, setConfigs } from "@/store/common";
 import { API_CONFIGS, API_DEL_SESSION, API_GLOBAL_CONFIGS, API_STATIC_RESOURCES, API_SYSTEM_VERSION, API_UPLOAD_SESSION, API_USER_CLIENT, API_USER_LOCATION, APP_VERSION } from "./http/api";
 import { request } from "./http/request";
 import Taro from "@tarojs/taro";
+import { kIsIOS } from "@/utils/tools";
 
 
 export const staticResources = () => (dispatch: any) => {
@@ -15,7 +16,8 @@ export const staticResources = () => (dispatch: any) => {
 
 export const systemVersion = () => {
     return new Promise((resolve, reject) => {
-        var platform = Taro.getSystemInfoSync().platform == 'ios'?'IOS':'ANDROID'
+        var platform = kIsIOS?'IOS':'ANDROID'
+        
         request({
             url: API_SYSTEM_VERSION + platform, method: 'GET', data: {}
         }).then(res => {

+ 50 - 21
src/services/http/request.ts

@@ -75,9 +75,9 @@ export async function request<T>(param: RequestParam): Promise<T> {
         header['content-type'] = 'application/json'
 
         header['X-Timezone'] = encodeURIComponent(JSON.stringify({
-            id:getTimezoneId(),
-            name:timeZoneName?timeZoneName:'',
-            gmt:timeZoneFormatted
+            id: getTimezoneId(),
+            name: timeZoneName ? timeZoneName : '',
+            gmt: timeZoneFormatted
         }))
 
 
@@ -90,7 +90,7 @@ export async function request<T>(param: RequestParam): Promise<T> {
         header['X-Timestamp'] = new Date().getTime()
         if (token.length > 0) {
             header['Authorization'] = `Bearer ${token}`;
-            // header['Authorization'] = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMjZkOGE1YTg0MDMyYmExN2Q4NDk3MTlkNTljNGY1NzgiLCJpc3MiOiJmYXN0Iiwibmlja25hbWUiOiJCSyIsInR5cCI6IkJlYXJlciIsInNlc3Npb25fc3RhdGUiOiJkODczZTBhZGJhY2M2NDQ0OTllYTUwMTUzOGQxZmQ3MSIsImV4cCI6MTc0OTIwMTM2NywiaWF0IjoxNzE3NjY1MzY3fQ.cTQTsHzxBFRSKBztlPKBspg1e9DGT9ppAwb3zD0SDJ0';
+            // header['Authorization'] = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMTE0Nzg0NGE5NDIyODk1MmE5Zjc2OTdjYWJjYmU3Y2UiLCJpc3MiOiJmYXN0Iiwibmlja25hbWUiOiJGYXN0ZXIiLCJ0eXAiOiJCZWFyZXIiLCJzZXNzaW9uX3N0YXRlIjoiZWE5NTQ1Y2VkNThlNzgzNTA1MWRjZTY0ODEwMzQ4ZmQiLCJleHAiOjE3NDk3MDA3MTYsImlhdCI6MTcxODE2NDcxN30.yrh-xAJhmfG-CueyCsToW-X4Dx043DYhk5DiE0E4eNk';
             // header['Authorization'] = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMjZkOGE1YTg0MDMyYmExN2Q4NDk3MTlkNTljNGY1NzgiLCJpc3MiOiJmYXN0Iiwibmlja25hbWUiOiJCSyIsInR5cCI6IkJlYXJlciIsInNlc3Npb25fc3RhdGUiOiI1ZDU2NTkzYmNjNWFmNzM0OWNlZTMwZjlkNGYzMWIyMCIsImV4cCI6MTc0ODE3MDg5NSwiaWF0IjoxNzE2NjM0ODk1fQ.uaRm2vSNCX8fkFS63Oe-WNWIDHG_cRM-nQ5EGyUMaBg';
         }
 
@@ -105,14 +105,23 @@ export async function request<T>(param: RequestParam): Promise<T> {
                 performRequest(resolve, reject);
                 return;
             }
-            if (global.language == 'en') {
-                ToastUtil.getInstance().showToast(method == 'GET' ?
-                    'Network connection failed. Please check your network.' :
-                    'Posting failed. Please check your network.');
-            }
-            else {
-                ToastUtil.getInstance().showToast(method == 'GET' ? '网络连接失败,请检查网络' : '操作失败,请检查网络');
+            if (process.env.TARO_ENV == 'rn' && (param.data as any).showAlert) {
+                showAlert({
+                    title: 'error',
+                    content: global.language == 'en' ? 'Posting failed. Please check your network.' : '操作失败,请检查网络',
+                    showCancel: false
+                })
+            } else {
+                if (global.language == 'en') {
+                    ToastUtil.getInstance().showToast(method == 'GET' ?
+                        'Network connection failed. Please check your network.' :
+                        'Posting failed. Please check your network.');
+                }
+                else {
+                    ToastUtil.getInstance().showToast(method == 'GET' ? '网络连接失败,请检查网络' : '操作失败,请检查网络');
+                }
             }
+
             reject('timeout');
         }, kTimeout);
 
@@ -159,19 +168,39 @@ export async function request<T>(param: RequestParam): Promise<T> {
                     resolve(response.data);
                 } else {
                     //通用错误处理
-                    if (statusCode==502){
-                        Taro.showToast({
-                            icon: 'none',
-                            title: global.language == 'en'?'Server is busy now. Please try again later.':'服务器正忙, 请您稍后再试。',
-                        });
+                    if (statusCode == 502) {
+                        if (process.env.TARO_ENV == 'rn' && (param.data as any).showAlert) {
+                            showAlert({
+                                title: 'error',
+                                content: global.language == 'en' ? 'Server is busy now. Please try again later.' : '服务器正忙, 请您稍后再试。',
+                                showCancel: false
+                            })
+                        }
+                        else {
+                            Taro.showToast({
+                                icon: 'none',
+                                title: global.language == 'en' ? 'Server is busy now. Please try again later.' : '服务器正忙, 请您稍后再试。',
+                            });
+                        }
+
                     }
                     else {
-                        Taro.showToast({
-                            icon: 'none',
-                            title: data.error_message,
-                        });
+                        if (process.env.TARO_ENV == 'rn' && (param.data as any).showAlert) {
+                            showAlert({
+                                title: 'error',
+                                content: data.error_message,
+                                showCancel: false
+                            })
+                        }
+                        else {
+                            Taro.showToast({
+                                icon: 'none',
+                                title: data.error_message,
+                            });
+                        }
+
                     }
-                    
+
                     reject(data);
                 }
             },

+ 2 - 1
src/services/trackTimeDuration.tsx

@@ -85,7 +85,6 @@ export const getClockRecords = (params: any) => {
 }
 
 export const recordCheck = (params: Record<string, any>) => {
-    debugger
     if (params.real_check_time) {
         var date = new Date((params as any).real_check_time)
         var month = date.getMonth() + 1
@@ -93,6 +92,8 @@ export const recordCheck = (params: Record<string, any>) => {
 
         params.real_check_date = date.getFullYear() + (month < 10 ? '0' + month : month + '') + (day < 10 ? '0' + day : day + '')
     }
+    //如果是系统错误,不用toast而用alert
+    params.showAlert = true
     return new Promise((resolve, reject) => {
         request({
             url: API_FAST_CLOCKS + `?scenario=${global.scenario}`, method: 'POST', data: { ...params }

+ 3 - 2
src/services/user.tsx

@@ -2,6 +2,7 @@ import Taro from '@tarojs/taro'
 import { API_OAUTH_LOGIN, API_REGISTER, API_LOGIN, API_LOGOUT, API_CLEAR_USER, API_USER_INFO, API_CHECK_UNIQUE, API_CLIENT_ID, API_USER_PERMS, API_USER_LOCATION } from './http/api'
 import { request } from './http/request'
 import { clearSuccess, getInfoSuccess, loginSuccess, logoutSuccess, registerSuccess, updateSuccess } from '@/store/user'
+import { kIsIOS } from '@/utils/tools'
 
 
 export const checkUnique = (params: any) => {
@@ -186,7 +187,7 @@ export const clientId = (isJiguang = true) => {
             request({
                 url: API_CLIENT_ID, method: 'POST', data: {
                     provider: 'JIGUANG',
-                    client_type: Taro.getSystemInfoSync().platform == 'ios' ? 'IOS' : 'ANDROID',
+                    client_type: kIsIOS ? 'IOS' : 'ANDROID',
                     client_id: global.registerID
                 }
             })
@@ -197,7 +198,7 @@ export const clientId = (isJiguang = true) => {
             request({
                 url: API_CLIENT_ID, method: 'POST', data: {
                     provider: 'ONESIGNAL',
-                    client_type: Taro.getSystemInfoSync().platform == 'ios' ? 'IOS' : 'ANDROID',
+                    client_type: kIsIOS ? 'IOS' : 'ANDROID',
                     client_id: global.oneID
                 }
             })

+ 3 - 2
src/utils/native_permission_check.tsx

@@ -5,6 +5,7 @@ import Taro from '@tarojs/taro';
 import { PushNotification } from 'react-native-push-notification';
 import { Alert, Linking } from 'react-native';
 import { check, PERMISSIONS, RESULTS, checkMultiple } from 'react-native-permissions';
+import { kIsIOS } from './tools';
 // import {OneSignal} from 'react-native-onesignal';
 
 export const checkLocation = () => {
@@ -132,7 +133,7 @@ export const checkNotification = () => {
 
 
     if (global.notification == 'not_determined') {
-        if (Taro.getSystemInfoSync().platform == 'ios') {
+        if (kIsIOS) {
             var Jto = require('react-native').NativeModules.NativeBridge;
             Jto.authNotification()
         }
@@ -153,7 +154,7 @@ export const checkNotification = () => {
         // test()
     }
     else {
-        if (Taro.getSystemInfoSync().platform == 'ios') {
+        if (kIsIOS) {
             Linking.openURL('app-settings:notifications')
         }
         else {

+ 2 - 1
src/utils/push.tsx

@@ -6,6 +6,7 @@ import { title } from 'process';
 import { uploadPermissions } from './native_permission_check';
 import {OneSignal} from 'react-native-onesignal'
 import Taro from '@tarojs/taro';
+import { kIsIOS } from './tools';
 
 export default function jgPush() {
     // const JPush = require('jpush-react-native')
@@ -58,7 +59,7 @@ export default function jgPush() {
     //     }, 3000)
     // })
 
-    if (Taro.getSystemInfoSync().platform == 'ios'){
+    if (kIsIOS){
         return;
     }
 

+ 2 - 1
src/utils/time_format.ts

@@ -2,6 +2,7 @@ const utc = require('dayjs/plugin/utc')
 const timezone = require('dayjs/plugin/timezone')
 import Taro from '@tarojs/taro'
 import dayjs from 'dayjs'
+import { kIsIOS } from './tools'
 
 dayjs.extend(utc)
 dayjs.extend(timezone)
@@ -736,7 +737,7 @@ export class TimeFormatter {
       return dayjs(timestamp).tz(timeZone).format(formate)
     }
     else {
-      if (Taro.getSystemInfoSync().platform == 'ios') {
+      if (kIsIOS) {
         return dayjs(timestamp).tz(timeZone).format(formate)
       }
       var moment = require('moment-timezone');

+ 5 - 3
src/utils/tools.ts

@@ -113,13 +113,13 @@ export function getTimezoneName() {
 
 export function getTimezoneId() {
     if (process.env.TARO_ENV == 'weapp') {
-        if (Taro.getSystemInfoSync().platform == 'ios') {
+        if (kIsIOS) {
             return dayjs.tz.guess()
         }
         return '';
     }
     else {
-        if (Taro.getSystemInfoSync().platform == 'ios') {
+        if (kIsIOS) {
             return dayjs.tz.guess()
         }
         const isDebug = __DEV__;
@@ -129,4 +129,6 @@ export function getTimezoneId() {
         var getTimeZone = require('react-native-localize').getTimeZone
         return getTimeZone()
     }
-}
+}
+
+export const kIsIOS = Taro.getSystemInfoSync().platform == 'ios'

部分文件因为文件数量过多而无法显示