MembersList.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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 "Rejected":
  43. return $t("members.statusRejected");
  44. default:
  45. return $t("charging.statusUnavailable");
  46. }
  47. }
  48. render() {
  49. return (
  50. this.state.memberList.length > 0
  51. ? this.state.memberList.map((item, index) => (
  52. <Pressable
  53. key={index}
  54. style={styles.memberView}
  55. onPress={() => {
  56. //startPage(PageList.editVehicle, {id: item.vehiclePk});
  57. }}>
  58. <View style={styles.itemBackground}>
  59. <MaterialIcons
  60. style={styles.icon}
  61. name="card-membership"
  62. color={colorAccent}
  63. size={56}/>
  64. </View>
  65. <View style={styles.memberItem}>
  66. <Text style={styles.textLabel2}>{$t('members.membership')}:</Text>
  67. <Text style={styles.textValue2}>{item.membership}</Text>
  68. </View>
  69. <View style={styles.memberItem}>
  70. <Text style={styles.textLabel}>{$t('members.membershipNo')}:</Text>
  71. <Text style={styles.textValue}>{item.membershipNo}</Text>
  72. </View>
  73. <View style={styles.memberItem}>
  74. <Text style={styles.textLabel}>{$t('members.status')}:</Text>
  75. <Text style={styles.textValue}>{this.getMembershipStatus(item.membershipStatus)}</Text>
  76. </View>
  77. </Pressable>
  78. ))
  79. : <Text style={ui.noData}>{$t('members.noData')}</Text>
  80. );
  81. }
  82. }
  83. const styles = StyleSheet.create({
  84. memberView: {
  85. borderRadius: 8,
  86. overflow: 'hidden',
  87. ...ElevationObject(5),
  88. ...$margin(16, 16, 0),
  89. ...$padding(16),
  90. backgroundColor: colorLight
  91. },
  92. memberItem: {
  93. paddingTop: 1,
  94. paddingBottom: 1,
  95. flexDirection: 'row'
  96. },
  97. textLabel: {
  98. color: textPrimary,
  99. fontSize: 14,
  100. paddingRight: 6,
  101. fontWeight: 'bold'
  102. },
  103. textValue: {
  104. color: textPrimary,
  105. fontSize: 14
  106. },
  107. textLabel2: {
  108. color: textPrimary,
  109. fontSize: 16,
  110. paddingRight: 5,
  111. marginBottom: 2,
  112. fontWeight: 'bold'
  113. },
  114. textValue2: {
  115. color: textPrimary,
  116. fontSize: 16,
  117. marginBottom: 2,
  118. },
  119. itemBackground: {
  120. right: 0,
  121. bottom: 0,
  122. opacity: 0.1,
  123. position: 'absolute'
  124. }
  125. })