refactor: 修复跳转到任务编辑页面的卡顿问题,修复部分类型错误
This commit is contained in:
parent
fdbc629877
commit
02a326e60e
@ -1,6 +1,5 @@
|
|||||||
{
|
{
|
||||||
"permissions": {
|
"permissions": {
|
||||||
"defaultMode": "bypassPermissions",
|
|
||||||
"allow": [
|
"allow": [
|
||||||
"Bash(npm install:*)",
|
"Bash(npm install:*)",
|
||||||
"Bash(mkdir -p:*)",
|
"Bash(mkdir -p:*)",
|
||||||
@ -8,8 +7,12 @@
|
|||||||
"Bash(*:*)",
|
"Bash(*:*)",
|
||||||
"Bash(npm uninstall react-native-paper react-native-paper-dropdown)",
|
"Bash(npm uninstall react-native-paper react-native-paper-dropdown)",
|
||||||
"Bash(npm uninstall react-native-paper react-native-paper-dropdown --legacy-peer-deps)",
|
"Bash(npm uninstall react-native-paper react-native-paper-dropdown --legacy-peer-deps)",
|
||||||
"Bash(npx react-native start --reset-cache)"
|
"Bash(npx react-native start --reset-cache)",
|
||||||
|
"Bash(npm run lint)"
|
||||||
],
|
],
|
||||||
"deny": ["WebSearch"]
|
"deny": [
|
||||||
|
"WebSearch"
|
||||||
|
],
|
||||||
|
"defaultMode": "bypassPermissions"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,12 +1,11 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { StyleSheet, TouchableOpacity } from 'react-native';
|
import { StyleSheet, TouchableOpacity } from 'react-native';
|
||||||
import { Card, Text, Chip, useTheme } from '@rneui/themed';
|
import { Card, Chip } from '@rneui/themed';
|
||||||
import { Task, TaskStatus } from '../types/task';
|
import { Task, TaskStatus } from '../types/task';
|
||||||
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
|
||||||
|
|
||||||
interface TaskCardProps {
|
interface TaskCardProps {
|
||||||
task: Task;
|
task: Task;
|
||||||
onPress: (id: string) => void;
|
onPress: (task: Task) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const statusColors: Record<TaskStatus, string> = {
|
const statusColors: Record<TaskStatus, string> = {
|
||||||
@ -17,10 +16,9 @@ const statusColors: Record<TaskStatus, string> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const TaskCard: React.FC<TaskCardProps> = ({ task, onPress }) => {
|
const TaskCard: React.FC<TaskCardProps> = ({ task, onPress }) => {
|
||||||
const { theme } = useTheme();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<TouchableOpacity onPress={() => onPress(task.id)} style={{ flex: 1, width: '50%' }}>
|
<TouchableOpacity onPress={() => onPress(task)} style={styles.touchable}>
|
||||||
<Card containerStyle={styles.card}>
|
<Card containerStyle={styles.card}>
|
||||||
<Card.Title style={styles.title}>{task.name}</Card.Title>
|
<Card.Title style={styles.title}>{task.name}</Card.Title>
|
||||||
<Card.Divider />
|
<Card.Divider />
|
||||||
@ -34,7 +32,7 @@ const TaskCard: React.FC<TaskCardProps> = ({ task, onPress }) => {
|
|||||||
}}
|
}}
|
||||||
type="outline"
|
type="outline"
|
||||||
containerStyle={styles.chip}
|
containerStyle={styles.chip}
|
||||||
titleStyle={{ color: statusColors[task.status], fontSize: 12 }}
|
titleStyle={[styles.chipTitle, { color: statusColors[task.status] }]}
|
||||||
buttonStyle={{ borderColor: statusColors[task.status] }}
|
buttonStyle={{ borderColor: statusColors[task.status] }}
|
||||||
/>
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
@ -43,6 +41,10 @@ const TaskCard: React.FC<TaskCardProps> = ({ task, onPress }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
const styles = StyleSheet.create({
|
||||||
|
touchable: {
|
||||||
|
flex: 1,
|
||||||
|
width: '50%',
|
||||||
|
},
|
||||||
card: {
|
card: {
|
||||||
margin: 4,
|
margin: 4,
|
||||||
borderRadius: 8,
|
borderRadius: 8,
|
||||||
@ -55,6 +57,9 @@ const styles = StyleSheet.create({
|
|||||||
chip: {
|
chip: {
|
||||||
alignSelf: 'flex-start',
|
alignSelf: 'flex-start',
|
||||||
},
|
},
|
||||||
|
chipTitle: {
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default TaskCard;
|
export default TaskCard;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { View, StyleSheet, ScrollView, TouchableOpacity } from 'react-native';
|
import { StyleSheet, ScrollView, TouchableOpacity } from 'react-native';
|
||||||
import { Input, BottomSheet, ListItem, Text } from '@rneui/themed';
|
import { Input, BottomSheet, ListItem } from '@rneui/themed';
|
||||||
import { Task, RobotAction } from '../types/task';
|
import { Task, RobotAction } from '../types/task';
|
||||||
import {
|
import {
|
||||||
LOCATIONS,
|
LOCATIONS,
|
||||||
@ -94,7 +94,7 @@ const TaskForm: React.FC<TaskFormProps> = ({ task, onTaskChange }) => {
|
|||||||
{renderDropdown(
|
{renderDropdown(
|
||||||
'locationBay',
|
'locationBay',
|
||||||
'库位',
|
'库位',
|
||||||
task.parameters.locationBay,
|
task.parameters.locationBay || '',
|
||||||
LOCATIONS_BAYS,
|
LOCATIONS_BAYS,
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { StyleSheet, Text, View, Button, SafeAreaView } from 'react-native';
|
import { StyleSheet, View, Button, SafeAreaView } from 'react-native';
|
||||||
|
|
||||||
export default function HomeScreen() {
|
export default function HomeScreen() {
|
||||||
return (
|
return (
|
||||||
|
@ -9,7 +9,7 @@ import { Task } from '../types/task';
|
|||||||
import { Dialog } from '@rneui/themed';
|
import { Dialog } from '@rneui/themed';
|
||||||
|
|
||||||
type RootStackParamList = {
|
type RootStackParamList = {
|
||||||
TaskEdit: { taskId: string };
|
TaskEdit: { task: Task };
|
||||||
};
|
};
|
||||||
|
|
||||||
type TaskEditRouteProp = RouteProp<RootStackParamList, 'TaskEdit'>;
|
type TaskEditRouteProp = RouteProp<RootStackParamList, 'TaskEdit'>;
|
||||||
@ -17,21 +17,21 @@ type TaskEditRouteProp = RouteProp<RootStackParamList, 'TaskEdit'>;
|
|||||||
export default function TaskEditScreen() {
|
export default function TaskEditScreen() {
|
||||||
const route = useRoute<TaskEditRouteProp>();
|
const route = useRoute<TaskEditRouteProp>();
|
||||||
const navigation = useNavigation();
|
const navigation = useNavigation();
|
||||||
const { taskId } = route.params;
|
const { task: initialTask } = route.params;
|
||||||
|
|
||||||
const { getTaskById, updateTask, runTask } = useTasks();
|
const { updateTask, runTask } = useTasks();
|
||||||
|
|
||||||
const [task, setTask] = useState<Task | null>(null);
|
const [task, setTask] = useState<Task | null>(initialTask);
|
||||||
const [originalTask, setOriginalTask] = useState<Task | null>(null);
|
const [originalTask, setOriginalTask] = useState<Task | null>(initialTask);
|
||||||
const [isModified, setIsModified] = useState(false);
|
const [isModified, setIsModified] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const foundTask = getTaskById(taskId);
|
if (initialTask) {
|
||||||
if (foundTask) {
|
setTask(initialTask);
|
||||||
setTask(foundTask);
|
setOriginalTask(initialTask);
|
||||||
setOriginalTask(foundTask);
|
|
||||||
}
|
}
|
||||||
}, [taskId, getTaskById]);
|
}, [initialTask]);
|
||||||
|
|
||||||
|
|
||||||
const handleTaskChange = (updatedTask: Task) => {
|
const handleTaskChange = (updatedTask: Task) => {
|
||||||
setTask(updatedTask);
|
setTask(updatedTask);
|
||||||
|
@ -7,7 +7,7 @@ import TaskCard from '../components/TaskCard';
|
|||||||
|
|
||||||
type RootStackParamList = {
|
type RootStackParamList = {
|
||||||
TaskList: undefined;
|
TaskList: undefined;
|
||||||
TaskEdit: { taskId: string };
|
TaskEdit: { task: Task };
|
||||||
};
|
};
|
||||||
|
|
||||||
type TaskListNavigationProp = StackNavigationProp<RootStackParamList, 'TaskList'>;
|
type TaskListNavigationProp = StackNavigationProp<RootStackParamList, 'TaskList'>;
|
||||||
@ -16,15 +16,15 @@ export default function TaskListScreen() {
|
|||||||
const { tasks } = useTasks();
|
const { tasks } = useTasks();
|
||||||
const navigation = useNavigation<TaskListNavigationProp>();
|
const navigation = useNavigation<TaskListNavigationProp>();
|
||||||
|
|
||||||
const handlePressTask = (taskId: string) => {
|
const handlePressTask = (task: Task) => {
|
||||||
navigation.navigate('TaskEdit', { taskId });
|
navigation.navigate('TaskEdit', { task });
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
<FlatList
|
<FlatList
|
||||||
data={tasks}
|
data={tasks}
|
||||||
renderItem={({ item }) => <TaskCard task={item} onPress={handlePressTask} />}
|
renderItem={({ item }) => <TaskCard task={item} onPress={() => handlePressTask(item)} />}
|
||||||
keyExtractor={item => item.id}
|
keyExtractor={item => item.id}
|
||||||
numColumns={2}
|
numColumns={2}
|
||||||
contentContainerStyle={styles.list}
|
contentContainerStyle={styles.list}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user