MembersList.js 3.7 KB

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