Leon 2 năm trước cách đây
mục cha
commit
fd4aca18e2

+ 2 - 2
src/features/workout/SetGoal.tsx

@@ -6,8 +6,8 @@ import { View, Text } from "@tarojs/components";
 import { useState } from "react";
 import { ChooseScenarioBtn } from "../common/SpecBtns";
 
-export default function Component(props: { start: Function }) {
-    const [goalTime, setGoalTime] = useState(15 * 60)
+export default function Component(props: { start: Function,duration:number }) {
+    const [goalTime, setGoalTime] = useState(props.duration/1000)
     const [showPicker, setShowPicker] = useState(false)
     const [sportPickerValue, setSportPickerValue] = useState([14])
     function minus() {

+ 17 - 3
src/features/workout/Working.tsx

@@ -7,13 +7,14 @@ import Taro from "@tarojs/taro";
 import { WorkoutType } from "@/utils/types";
 import Modal from "@/components/layout/Modal";
 import PickerViews from "@/components/input/PickerViews";
-import { useDispatch } from "react-redux";
+import { useDispatch, useSelector } from "react-redux";
 import { startSuccess } from "@/store/workout";
 
 
 var timer
 var lastStrTime
 export default function Component(props: { targetCount: any, type: WorkoutType, end: Function }) {
+    const workout = useSelector((state: any) => state.workout);
     const [index, setIndex] = useState(1)
     const [count, setCount] = useState(0)
     const [startTime, setStartTime] = useState(new Date().getTime())
@@ -212,13 +213,26 @@ export default function Component(props: { targetCount: any, type: WorkoutType,
     }
 
     function pickerContent() {
+        var item = workout.item
+        console.log(item)
         var color = ColorType.workout
         var title = '本组训练'
+
+        var items:any = []
+        var selects:any=[]
+        item.schemas[0].values.map(obj=>{
+            var list:any = []
+            for (var i=obj.min;i<=obj.max;i=i+obj.step){
+                list.push(i+obj.unit)
+            }
+            items.push(list)
+            selects.push(0)
+        })
         return <View style={{ color: '#fff', backgroundColor: 'transparent' }}>
             <PickerViews
                 onChange={numChange}
-                items={props.type == WorkoutType.number ? items : multiItems}
-                value={props.type == WorkoutType.number ? selIndex : multiSel}
+                items={items}
+                value={selects}
                 themeColor={color}
                 title={title}
                 showBtns={true}

+ 16 - 8
src/features/workout/Workout.tsx

@@ -19,8 +19,8 @@ import Modal from "@/components/layout/Modal";
 import { ColorType } from "@/context/themes/color";
 import SetGoal from "@/features/workout/SetGoal";
 import Working from "@/features/workout/Working";
-import { startSuccess } from "@/store/workout";
-import { workoutFollows, workoutGroups } from "@/services/workout";
+import { setCurrentWorkoutItem, startSuccess } from "@/store/workout";
+import { workoutCards, workoutFollows, workoutGroups } from "@/services/workout";
 import { setAuth } from "../trackSomething/hooks/werun";
 import MetricModalOrder from "../trackSomething/components/MetricModalOrder";
 import MetricModalChoose from "../trackSomething/components/MetricModalChoose";
@@ -63,6 +63,8 @@ export default function Component(props: any) {
     const [newOrders, setNewOrders] = useState([])
     const [resultOrders, setResultOrders] = useState([])
 
+    const [selItem,setSelItem] = useState(null)
+
     let navigation;
     if (useNavigation) {
         navigation = useNavigation()
@@ -140,7 +142,7 @@ export default function Component(props: any) {
 
     function getCards() {
         setTriggered(true)
-        activityCards().then(res => {
+        workoutCards().then(res => {
             setErrorPage(false)
             setTriggered(false)
             checkAuth()
@@ -198,8 +200,14 @@ export default function Component(props: any) {
         }
     }
 
-    function tapBtn() {
+    function tapBtn(item) {
         if (user.isLogin) {
+            if (item.code!='_walk'){
+                setSelItem(item)
+                dispatch(setCurrentWorkoutItem(item))
+                workoutStart()
+                return
+            }
             if (allowRun) {
                 checkout()
             }
@@ -491,13 +499,13 @@ export default function Component(props: any) {
                         showBadge={showErrorBadge && checkResult.type == 'idle'}
                         showDetail={showDetail}
                         onClick={() => {
-                            tapBtn()
+                            tapBtn(item)
                         }}
                     />
                 })
             }
 
-            <MetricItem title='平板支撑'
+            {/* <MetricItem title='平板支撑'
                 // value={allowRun ? stepInfo ? (stepInfo as any).step : '' : '未开启'}
                 value={10}
                 unit={'分钟'}
@@ -515,7 +523,7 @@ export default function Component(props: any) {
                 onClick={() => {
                     workoutStart()
                 }}
-            />
+            /> */}
         </View>
     }
 
@@ -614,7 +622,7 @@ export default function Component(props: any) {
                 setShowModal(false)
             }} confirm={() => { }} modalType={ModalType.center}>
                 {
-                    !isStart && <SetGoal start={(count) => { setTargetTime(count); setShowModal(false); Taro.navigateTo({ url: '/pages/workout/Working?count=' + count }) }} />
+                    !isStart && <SetGoal duration={(selItem as any).schemas[0].default_duration} start={(count) => { setTargetTime(count); setShowModal(false); Taro.navigateTo({ url: '/pages/workout/Working?count=' + count }) }} />
                 }
                 {
                     isStart && <Working targetCount={targetTime} type={WorkoutType.multi} end={() => {

+ 2 - 0
src/services/http/api.js

@@ -51,6 +51,8 @@ export const API_FOOD_SCALE = `${baseUrl}/api/system/scales`
 //workout
 export const API_WORKOUT_GROUPS = `${baseUrl}/api/workout/groups`
 export const API_WORKOUT_FOLLOWS = `${baseUrl}/api/workout/follows`
+export const API_WORKOUT_CARDS = `${baseUrl}/api/workout/cards`
+export const API_WORKOUT_RECORDS = `${baseUrl}/api/workout/records`
 
 //permissions
 export const API_WX_PUB_FOLLOWED = `${baseUrl}/api/fast/user/wx-pub-followed`

+ 25 - 1
src/services/workout.tsx

@@ -1,4 +1,4 @@
-import { API_WORKOUT_FOLLOWS, API_WORKOUT_GROUPS } from "./http/api";
+import { API_WORKOUT_CARDS, API_WORKOUT_FOLLOWS, API_WORKOUT_GROUPS, API_WORKOUT_RECORDS } from "./http/api";
 import { request } from "./http/request";
 
 
@@ -22,4 +22,28 @@ export const workoutFollows= (params) => {
             // dispatch(loginSuccess(res));
         })
     })
+}
+
+export const workoutCards = () => {
+    return new Promise((resolve, reject) => {
+        request({
+            url: API_WORKOUT_CARDS, method: 'GET', data: {}
+        }).then(res => {
+            resolve(res);
+            // dispatch(loginSuccess(res));
+        }).catch(e => {
+            reject(e)
+        })
+    })
+}
+
+export const workoutRecords = (params) => {
+    return new Promise((resolve) => {
+        request({
+            url: API_WORKOUT_RECORDS, method: 'GET', data: { ...params }
+        }).then(res => {
+            resolve(res);
+            // dispatch(loginSuccess(res));
+        })
+    })
 }

+ 8 - 2
src/store/workout.tsx

@@ -4,18 +4,24 @@ interface WorkoutState {
     start: number;
     id: number;
     status: string;
+    item:any;
 }
 
 const initialState: WorkoutState = {
     start: 0,
     id: 0,
-    status: 'idle'
+    status: 'idle',
+    item:null
 }
 
 const worktoutSlice = createSlice({
     name: 'workout',
     initialState,
     reducers: {
+
+        setCurrentWorkoutItem(state,action){
+            state.item = action.payload
+        },
         startSuccess(state, action) {
             state.status = 'ing'
             state.start = action.payload.start;
@@ -32,5 +38,5 @@ const worktoutSlice = createSlice({
 
 
 
-export const { startSuccess, endSuccess } = worktoutSlice.actions;
+export const {setCurrentWorkoutItem, startSuccess, endSuccess } = worktoutSlice.actions;
 export default worktoutSlice.reducer;