Commit ff461bcc by tungnq

TODO: Đã hoàn thiện giao diện điểm danh

parent 5159efcf
import React, { useState } from 'react'; import React, {useState} from 'react';
import {Text, View, StyleSheet} from 'react-native'; import {Text, View, StyleSheet} from 'react-native';
import ExamScheduleView from './view'; import ExamScheduleView from './view';
const ExamSchedule = (props) => { const ExamSchedule = props => {
const [dataExamSchedule, setDataExamSchedule] = useState([ const [dataExamSchedule, setDataExamSchedule] = useState([
{ {
id: 1, id: 1,
code_exam: 'MD001', code_exam: 'MD001',
code_class:'MD0081', code_class: 'MD0081',
poetry:'123 (7:30 - 10:30)', poetry: '123 (7:30 - 10:30)',
time_exam:'2025-08-05', time_exam: '2025-08-05',
class_exam:'A98', class_exam: 'A98',
day_exam:'Thứ 3', day_exam: 'Thứ 3',
description: 'Bảo vệ/ DA', description: 'Bảo vệ/ DA',
}, },
{ {
id: 2, id: 2,
code_exam: 'MD001', code_exam: 'MD001',
code_class:'MD0081', code_class: 'MD0081',
poetry:'123 (7:30 - 10:30)', poetry: '123 (7:30 - 10:30)',
time_exam:'2025-08-05', time_exam: '2025-08-05',
class_exam:'A98', class_exam: 'A98',
day_exam:'Thứ 3', day_exam: 'Thứ 3',
description: 'Bảo vệ/ DA', description: 'Bảo vệ/ DA',
}, },
{ {
id: 3, id: 3,
code_exam: 'MD001', code_exam: 'MD001',
code_class:'MD0081', code_class: 'MD0081',
poetry:'123 (7:30 - 10:30)', poetry: '123 (7:30 - 10:30)',
time_exam:'2025-08-05', time_exam: '2025-08-05',
class_exam:'A98', class_exam: 'A98',
day_exam:'Thứ 3', day_exam: 'Thứ 3',
description: 'Bảo vệ/ DA', description: 'Bảo vệ/ DA',
}, },
{ {
id: 4, id: 4,
code_exam: 'MD001', code_exam: 'MD001',
code_class:'MD0081', code_class: 'MD0081',
poetry:'123 (7:30 - 10:30)', poetry: '123 (7:30 - 10:30)',
time_exam:'2025-08-05', time_exam: '2025-08-05',
class_exam:'A98', class_exam: 'A98',
day_exam:'Thứ 3', day_exam: 'Thứ 3',
description: 'Bảo vệ/ DA', description: 'Bảo vệ/ DA',
}, },
{ {
id: 5, id: 5,
code_exam: 'MD001', code_exam: 'MD001',
code_class:'MD0081', code_class: 'MD0081',
poetry:'123 (7:30 - 10:30)', poetry: '123 (7:30 - 10:30)',
time_exam:'2025-08-05', time_exam: '2025-08-05',
class_exam:'A98', class_exam: 'A98',
day_exam:'Thứ 3', day_exam: 'Thứ 3',
description: 'Bảo vệ/ DA', description: 'Bảo vệ/ DA',
}, },
{ {
id: 6, id: 6,
code_exam: 'MD001', code_exam: 'MD001',
code_class:'MD0081', code_class: 'MD0081',
poetry:'123 (7:30 - 10:30)', poetry: '123 (7:30 - 10:30)',
time_exam:'2025-08-05', time_exam: '2025-08-05',
class_exam:'A98', class_exam: 'A98',
day_exam:'Thứ 3', day_exam: 'Thứ 3',
description: 'Bảo vệ/ DA', description: 'Bảo vệ/ DA',
}, },
]); ]);
return <ExamScheduleView dataExamSchedule={dataExamSchedule} />;
return (
<ExamScheduleView dataExamSchedule={dataExamSchedule} />
);
}; };
export default ExamSchedule; export default ExamSchedule;
...@@ -5,18 +5,32 @@ import { Text, View, TouchableOpacity, StyleSheet, Image } from 'react-native'; ...@@ -5,18 +5,32 @@ import { Text, View, TouchableOpacity, StyleSheet, Image } from 'react-native';
const ItemView = ({item}) => { const ItemView = ({item}) => {
return ( return (
<TouchableOpacity style={styles.container}> <TouchableOpacity style={styles.container}>
<Text style={styles.text_title}>Mã môn hc: {item.code_exam}</Text> <Text style={styles.text_title}>Mã môn hc:
<Text style={styles.text_title}>Mã lp: {item.code_class}</Text> <Text style={styles.text_content}> {item.code_exam}</Text>
</Text>
<Text style={styles.text_title}>Mã lp:
<Text style={styles.text_content}> {item.code_class}</Text>
</Text>
<View style={styles.content}> <View style={styles.content}>
<Text style={styles.text_content}>Ca/Tiết thi: {item.poetry}</Text> <Text style={styles.text_title}>Ca/Tiết thi:
<Text style={styles.text_content}>Th thi: {item.day_exam}</Text> <Text style={styles.text_content}> {item.poetry}</Text>
</Text>
<Text style={styles.text_title}>Th thi:
<Text style={styles.text_content}> {item.day_exam}</Text>
</Text>
</View> </View>
<View style={styles.content}> <View style={styles.content}>
<Text style={styles.text_content}>Ngày thi: {item.time_exam}</Text> <Text style={styles.text_title}>Ngày thi:
<Text style={styles.text_content}>Phòng thi: {item.class_exam}</Text> <Text style={styles.text_content}> {item.time_exam}</Text>
</Text>
<Text style={styles.text_title}>Phòng thi:
<Text style={styles.text_content}> {item.class_exam}</Text>
</Text>
</View> </View>
<Text style={styles.text_content}>Ghi chú/ hình thc thi: {item.description}</Text> <Text style={styles.text_title}>Ghi chú/ hình thc thi:
<Text style={styles.text_content}> {item.description}</Text>
</Text>
</TouchableOpacity> </TouchableOpacity>
); );
...@@ -28,18 +42,14 @@ const styles = StyleSheet.create({ ...@@ -28,18 +42,14 @@ const styles = StyleSheet.create({
borderRadius: 10, borderRadius: 10,
paddingHorizontal: 14, paddingHorizontal: 14,
paddingVertical: 10, paddingVertical: 10,
marginBottom: 10,
shadowColor: R.colors.black, shadowColor: R.colors.black,
shadowOffset: { shadowOffset: {width: 0, height: 2},
width: 0, shadowOpacity: Platform.OS === 'ios' ? 0.25 : 1,
height:2 shadowRadius: 1,
}, elevation: Platform.OS === 'ios' ? 1 : 2,
shadowOpacity: 0.5,
shadowRadius: 2,
elevation: 1,
backgroundColor: R.colors.white, backgroundColor: R.colors.white,
marginVertical: 5, marginHorizontal:10,
marginHorizontal:10 marginVertical:7.5
}, },
content: { content: {
flexDirection: 'row', flexDirection: 'row',
...@@ -48,9 +58,9 @@ const styles = StyleSheet.create({ ...@@ -48,9 +58,9 @@ const styles = StyleSheet.create({
}, },
text_title: { text_title: {
fontSize: R.fontsize.fontsSize12, fontSize: R.fontsize.fontsSize12,
fontWeight: '500', fontWeight: '600',
color: R.colors.blue500, color: R.colors.black,
fontFamily: R.fonts.InterSemiBold, fontFamily: R.fonts.InterMedium,
}, },
text_content: { text_content: {
fontSize: R.fontsize.fontsSize12, fontSize: R.fontsize.fontsSize12,
......
...@@ -14,6 +14,14 @@ const styles = StyleSheet.create({ ...@@ -14,6 +14,14 @@ const styles = StyleSheet.create({
borderBottomWidth: 1, borderBottomWidth: 1,
borderBottomColor: R.colors.grey_200, borderBottomColor: R.colors.grey_200,
}, },
body: {
flex: 1,
backgroundColor: R.colors.white,
},
content_container: {
flexGrow: 1,
justifyContent: 'center',
},
title: { title: {
fontSize: R.fontsize.fontsSize16, fontSize: R.fontsize.fontsSize16,
fontWeight: '700', fontWeight: '700',
...@@ -22,7 +30,14 @@ const styles = StyleSheet.create({ ...@@ -22,7 +30,14 @@ const styles = StyleSheet.create({
}, },
flatlist: { flatlist: {
flex: 1, flex: 1,
marginHorizontal: 5, },
text_empty: {
fontSize: R.fontsize.fontsSize14,
fontWeight: '400',
fontFamily: R.fonts.InterRegular,
color: R.colors.black,
textAlign: 'center',
marginHorizontal:15
}, },
}); });
export default styles; export default styles;
\ No newline at end of file
import React from 'react'; import React from 'react';
import {View, FlatList, SafeAreaView } from 'react-native'; import {
import Header from "../../components/Header/Header"; View,
import R from "../../assets/R"; FlatList,
import I18n from "../../helper/i18/i18n"; SafeAreaView,
import ItemView from "./item_view"; Text,
ActivityIndicator,
} from 'react-native';
import Header from '../../components/Header/Header';
import R from '../../assets/R';
import I18n from '../../helper/i18/i18n';
import ItemView from './item_view';
import styles from './style'; import styles from './style';
import ItemCalendar from '../roll_call/item_calendar'; import ItemCalendar from '../roll_call/item_calendar';
const ExamScheduleView = (props) => { const ExamScheduleView = props => {
const {dataExamSchedule} = props; const {dataExamSchedule} = props;
const renderContent = ({ item }) => { const renderContent = ({item}) => {
return <ItemView item={item} />;
};
const renderBody = () => {
return ( return (
<ItemView <View style={styles.body}>
item={item} <ItemCalendar />
/> <View style={styles.flatlist}>
<FlatList
data={dataExamSchedule}
renderItem={renderContent}
keyExtractor={item => item.id}
contentContainerStyle={styles.content_container}
showsVerticalScrollIndicator={false}
ListEmptyComponent={() => (
<View style={styles.content_container}>
<ActivityIndicator
size="large"
color={R.colors.main}
animating
/>
<Text style={styles.text_empty}>Không có d liu</Text>
</View>
)}
/>
</View>
</View>
); );
}; };
return ( return (
<View style={styles.container}> <View style={styles.container}>
<Header isBack title={I18n.t("ExamSchedule")} /> <Header isBack title={I18n.t('ExamSchedule')} />
<View style={styles.container}> {renderBody()}
<ItemCalendar/>
<View style={styles.flatlist}>
<FlatList
data={dataExamSchedule}
renderItem={renderContent}
keyExtractor={(item) => item.id}
showsVerticalScrollIndicator={false}
/>
</View>
</View>
</View> </View>
); );
}; };
export default ExamScheduleView; export default ExamScheduleView;
...@@ -3,16 +3,9 @@ import { ...@@ -3,16 +3,9 @@ import {
Text, Text,
View, View,
StyleSheet, StyleSheet,
SafeAreaView,
ScrollView, ScrollView,
Dimensions,
} from "react-native"; } from "react-native";
import {
Table,
TableWrapper,
Row,
Cell,
} from 'react-native-reanimated-table';
import Header from "../../../components/Header/Header"; import Header from "../../../components/Header/Header";
import R from "../../../assets/R"; import R from "../../../assets/R";
...@@ -200,9 +193,9 @@ const styles = StyleSheet.create({ ...@@ -200,9 +193,9 @@ const styles = StyleSheet.create({
}, },
headerText: { headerText: {
fontFamily: R.fonts.InterRegular, fontFamily: R.fonts.InterMedium,
fontSize: R.fontsize.fontsSize12, fontSize: R.fontsize.fontsSize12,
fontWeight: '400', fontWeight: '600',
color: R.colors.black, color: R.colors.black,
textAlign: 'center', textAlign: 'center',
}, },
......
...@@ -12,11 +12,19 @@ const ItemList = ({ item }) => { ...@@ -12,11 +12,19 @@ const ItemList = ({ item }) => {
style={styles.card_item} style={styles.card_item}
> >
<View style={styles.content}> <View style={styles.content}>
<Text style={styles.text}>Mã lp:{item.class_code}</Text> <Text style={styles.text_title}>Mã lp:{' '}
<Text style={styles.text}>Tên môn: {item.subject_name}</Text> <Text style={styles.text_content}>{item.class_code}</Text>
</Text>
<Text style={styles.text_title}>Tên môn:{' '}
<Text style={styles.text_content}>{item.subject_name}</Text>
</Text>
<View style={styles.footer}> <View style={styles.footer}>
<Text style={styles.text}>Tng tiết: {item.total_lessons}</Text> <Text style={styles.text_title}>Tng tiết:{' '}
<Text style={styles.text}>S bui vng:{item.absent_count}</Text> <Text style={styles.text_content}>{item.total_lessons}</Text>
</Text>
<Text style={styles.text_title}>S bui vng:{' '}
<Text style={styles.text_content}>{item.absent_count}</Text>
</Text>
</View> </View>
</View> </View>
<IconNext width={15} height={15} /> <IconNext width={15} height={15} />
...@@ -56,7 +64,13 @@ const styles = StyleSheet.create({ ...@@ -56,7 +64,13 @@ const styles = StyleSheet.create({
marginRight:15 marginRight:15
}, },
text:{ text_title:{
fontSize: R.fontsize.fontsSize12,
fontWeight: '600',
fontFamily: R.fonts.InterMedium,
color: R.colors.black,
},
text_content: {
fontSize: R.fontsize.fontsSize12, fontSize: R.fontsize.fontsSize12,
fontWeight: '400', fontWeight: '400',
fontFamily: R.fonts.InterRegular, fontFamily: R.fonts.InterRegular,
......
...@@ -24,9 +24,8 @@ const styles = StyleSheet.create({ ...@@ -24,9 +24,8 @@ const styles = StyleSheet.create({
width: 0, width: 0,
height: 2, height: 2,
}, },
shadowOpacity: 0.22, shadowOpacity: 0.25,
shadowRadius: 2.22, elevation: 5,
elevation: 3,
borderRadius: 10, borderRadius: 10,
}, },
container_schedule_item: { container_schedule_item: {
......
...@@ -28,6 +28,7 @@ const RollCallView = (props) => { ...@@ -28,6 +28,7 @@ const RollCallView = (props) => {
keyExtractor={(item) => item.id.toString()} keyExtractor={(item) => item.id.toString()}
scrollEnabled={true} scrollEnabled={true}
showsVerticalScrollIndicator={false} showsVerticalScrollIndicator={false}
/> />
</View> </View>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment