MembersList.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. /**
  2. * 我的会员列表页面
  3. * @邠心vbe on 2023/07/14
  4. */
  5. import React, { Component } from 'react';
  6. import { View, Text, StyleSheet, Pressable } from 'react-native';
  7. import apiMember from '../../api/apiMember';
  8. import { ElevationObject } from '../../components/Button';
  9. export default class MembersList extends Component {
  10. constructor(props) {
  11. super(props);
  12. this.state = {
  13. memberList: []
  14. };
  15. }
  16. componentDidMount() {
  17. this.getMyMemberList();
  18. this.props.navigation.addListener('focus', () => {
  19. this.getMyMemberList();
  20. })
  21. }
  22. getMyMemberList() {
  23. apiMember.getMyMemberList().then(res => {
  24. if (res.data) {
  25. this.setState({
  26. memberList: res.data
  27. });
  28. }
  29. }).catch(err => {
  30. this.setState({
  31. memberList: []
  32. });
  33. toastShort(err)
  34. });
  35. }
  36. getMembershipStatus(status) {
  37. switch (status) {
  38. case "Pending":
  39. return $t("members.statusPending");
  40. case "Approved":
  41. return $t("members.statusApproved");
  42. case "Pass":
  43. return $t("members.statusApproved");
  44. case "Rejected":
  45. return $t("members.statusRejected");
  46. default:
  47. return $t("charging.statusUnavailable");
  48. }
  49. }
  50. render() {
  51. return (
  52. this.state.memberList.length > 0
  53. ? this.state.memberList.map((item, index) => (
  54. <Pressable
  55. key={index}
  56. style={styles.memberView}
  57. onPress={() => {
  58. //startPage(PageList.editVehicle, {id: item.vehiclePk});
  59. }}>
  60. <View style={styles.itemBackground}>
  61. <MaterialIcons
  62. name="card-membership"
  63. color={colorAccent}
  64. size={56}/>
  65. </View>
  66. <View style={styles.memberItem}>
  67. <Text style={styles.textLabel2}>{$t('members.membership')}:</Text>
  68. <Text style={styles.textValue2}>{item.membership}</Text>
  69. </View>
  70. <View style={styles.memberItem}>
  71. <Text style={styles.textLabel}>{$t('members.membershipNo')}:</Text>
  72. <Text style={styles.textValue}>{item.membershipNo}</Text>
  73. </View>
  74. <View style={styles.memberItem}>
  75. <Text style={styles.textLabel}>{$t('members.status')}:</Text>
  76. <Text style={styles.textValue}>{this.getMembershipStatus(item.membershipStatus)}</Text>
  77. </View>
  78. </Pressable>
  79. ))
  80. : <Text style={ui.noData}>{$t('members.noData')}</Text>
  81. );
  82. }
  83. }
  84. const styles = StyleSheet.create({
  85. memberView: {
  86. borderRadius: 8,
  87. overflow: 'hidden',
  88. ...ElevationObject(5),
  89. ...$margin(16, 16, 0),
  90. ...$padding(16),
  91. backgroundColor: colorLight
  92. },
  93. memberItem: {
  94. paddingTop: 1,
  95. paddingBottom: 1,
  96. flexDirection: 'row'
  97. },
  98. textLabel: {
  99. color: textPrimary,
  100. fontSize: 14,
  101. paddingRight: 6,
  102. fontWeight: 'bold'
  103. },
  104. textValue: {
  105. flex: 1,
  106. color: textPrimary,
  107. fontSize: 14
  108. },
  109. textLabel2: {
  110. color: textPrimary,
  111. fontSize: 16,
  112. paddingRight: 5,
  113. marginBottom: 2,
  114. fontWeight: 'bold'
  115. },
  116. textValue2: {
  117. flex: 1,
  118. color: textPrimary,
  119. fontSize: 16,
  120. marginBottom: 2,
  121. },
  122. itemBackground: {
  123. right: 0,
  124. bottom: 0,
  125. opacity: 0.06,
  126. position: 'absolute'
  127. }
  128. })