MembersList.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /**
  2. * 我的会员列表页面
  3. * @邠心vbe on 2023/07/14
  4. */
  5. import React, { Component } from 'react';
  6. import { View, Text, StyleSheet, Pressable, Image } from 'react-native';
  7. import apiMember from '../../api/apiMember';
  8. import { ElevationObject } from '../../components/Button';
  9. import Dialog from '../../components/Dialog';
  10. import TextView from '../../components/TextView';
  11. import utils from '../../utils/utils';
  12. export default class MembersList extends Component {
  13. constructor(props) {
  14. super(props);
  15. this.state = {
  16. memberList: []
  17. };
  18. }
  19. componentDidMount() {
  20. this.getMyMemberList();
  21. this.props.navigation.addListener('focus', () => {
  22. this.getMyMemberList();
  23. })
  24. }
  25. getMyMemberList() {
  26. apiMember.getMyMemberList().then(res => {
  27. if (res.data) {
  28. this.setState({
  29. memberList: res.data
  30. });
  31. }
  32. }).catch(err => {
  33. this.setState({
  34. memberList: []
  35. });
  36. toastShort(err)
  37. });
  38. }
  39. getMembershipStatus(status) {
  40. switch (status) {
  41. case "Pending":
  42. return $t("members.statusPending");
  43. case "Approved":
  44. return $t("members.statusApproved");
  45. case "Pass":
  46. return $t("members.statusApproved");
  47. case "Rejected":
  48. return $t("members.statusRejected");
  49. default:
  50. return $t("charging.statusUnavailable");
  51. }
  52. }
  53. onDeleteMember(item) {
  54. Dialog.showDialog({
  55. title: $t("members.deleteMember"),
  56. message: $t("members.confirmDelete"),
  57. ok: $t("nav.yes"),
  58. cancel: $t("nav.no"),
  59. callback: btn => {
  60. if (btn == Dialog.BUTTON_OK) {
  61. this.deleteMembers(item.membershipId)
  62. }
  63. }
  64. })
  65. }
  66. deleteMembers(id) {
  67. //Dialog.showProgressDialog();
  68. apiMember.delMembers(id).then(res => {
  69. toastShort($t("common.deleteSuccess"))
  70. this.getMyMemberList();
  71. }).catch(err => {
  72. toastShort(err)
  73. })
  74. }
  75. render() {
  76. return (
  77. this.state.memberList.length > 0
  78. ? this.state.memberList.map((item, index) => (
  79. <Pressable
  80. key={index}
  81. style={styles.memberView}
  82. onPress={() => {
  83. if (item.membershipStatus == "Rejected") {
  84. this.onDeleteMember(item)
  85. }
  86. //startPage(PageList.editVehicle, {id: item.vehiclePk});
  87. }}>
  88. <View style={styles.itemBackground}>
  89. { utils.isNotEmpty(item.groupLogo)
  90. ? <Image
  91. source={{uri: utils.getImageUrl(item.groupLogo)}}
  92. resizeMode="contain"
  93. style={styles.groupLogo}/>
  94. : <MaterialIcons
  95. name="card-membership"
  96. color={colorAccent}
  97. style={styles.groupIcon}
  98. size={52}/>
  99. }
  100. </View>
  101. <View style={styles.memberItem}>
  102. { utils.isEmpty(item.groupType)
  103. ? <TextView style={styles.textLabel2}>{$t('members.membership')}:</TextView>
  104. : <TextView style={styles.textType}>{item.groupType}</TextView>
  105. }
  106. <TextView
  107. style={styles.textValue2}
  108. numberOfLines={1}>{item.membership}</TextView>
  109. </View>
  110. <View style={styles.memberItem}>
  111. <TextView style={styles.textLabel}>{$t('members.membershipNo')}:</TextView>
  112. <TextView style={styles.textValue}>{item.membershipNo}</TextView>
  113. </View>
  114. <View style={styles.memberItem}>
  115. <TextView style={styles.textLabel}>{$t('members.status')}:</TextView>
  116. { item.membershipStatus == "Rejected"
  117. ? <TextView style={[styles.textValue, styles.statusRed]}>{this.getMembershipStatus(item.membershipStatus)}</TextView>
  118. : <TextView style={styles.textValue}>{this.getMembershipStatus(item.membershipStatus)}</TextView>
  119. }
  120. </View>
  121. </Pressable>
  122. ))
  123. : <Text style={ui.noData}>{$t('members.noData')}</Text>
  124. );
  125. }
  126. }
  127. const styles = StyleSheet.create({
  128. memberView: {
  129. borderRadius: 8,
  130. overflow: 'hidden',
  131. ...ElevationObject(5),
  132. ...$margin(16, 16, 0),
  133. ...$padding(16),
  134. backgroundColor: colorLight
  135. },
  136. memberItem: {
  137. paddingTop: 1,
  138. paddingBottom: 1,
  139. alignItems: 'center',
  140. flexDirection: 'row'
  141. },
  142. textLabel: {
  143. color: textPrimary,
  144. fontSize: 14,
  145. paddingRight: 6,
  146. fontWeight: 'bold'
  147. },
  148. textValue: {
  149. flex: 1,
  150. color: textPrimary,
  151. fontSize: 14
  152. },
  153. textLabel2: {
  154. color: textPrimary,
  155. fontSize: 16,
  156. paddingRight: 5,
  157. marginBottom: 2,
  158. fontWeight: 'bold'
  159. },
  160. textValue2: {
  161. flex: 1,
  162. color: textPrimary,
  163. fontSize: 16,
  164. fontWeight: 'bold',
  165. marginBottom: 2
  166. },
  167. statusRed: {
  168. color: "#FF2222"
  169. },
  170. textType: {
  171. color: textLight,
  172. fontSize: 10,
  173. marginRight: 4,
  174. borderRadius: 2,
  175. ...$padding(1, 4),
  176. backgroundColor: colorAccent
  177. },
  178. itemBackground: {
  179. right: 0,
  180. bottom: 0,
  181. position: 'absolute'
  182. },
  183. groupIcon: {
  184. margin: 4,
  185. opacity: 0.08
  186. },
  187. groupLogo: {
  188. width: 48,
  189. height: 48,
  190. margin: 8,
  191. opacity: .8,
  192. borderRadius: 6
  193. }
  194. })