StepStartView.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. /**
  2. * 充电页:扫码认证之后-充电开始之前
  3. * @邠心vbe on 2023/03/10
  4. */
  5. import React from 'react';
  6. import { Image, StyleSheet, Text, View } from 'react-native';
  7. import Button from '../../components/Button';
  8. import { ChargeStyle, TypeImage } from '../chargeV2/Charging';
  9. import { PageList } from '../Router';
  10. import TextView from '../../components/TextView';
  11. const hideTaxRates = true; //隐藏税率显示
  12. export default StepStartView = ({
  13. isPrivate,
  14. stationInfo={},
  15. onEnterStation,
  16. canIntoCharging=false,
  17. onIntoCharging
  18. }) => (
  19. <View>
  20. <View style={{minHeight: $vht(74)}}>
  21. <TextView style={styles.gstText}>{hideTaxRates ? $t('charging.tipsRatesTax2') : $t('charging.tipsRatesTax')}</TextView>
  22. <TextView style={styles.title}>{$t('charging.acChargers')} ({(stationInfo?.acConnector?.available ?? "0") + $t('charging.numberAvailable')})</TextView>
  23. { stationInfo.acRates?.length > 0
  24. ? stationInfo.acRates.map((item, index) => {
  25. return (
  26. <View key={index} style={ChargeStyle.stationInfoView}>
  27. <Image
  28. style={ChargeStyle.infoIcon}
  29. source={TypeImage.AC}/>
  30. <View style={ChargeStyle.infoGroup}>
  31. <TextView style={ChargeStyle.infoText}>{item.type}</TextView>
  32. <TextView style={ChargeStyle.infoTitle}>{$t('charging.labelType')}</TextView>
  33. </View>
  34. <View style={ChargeStyle.infoGroup}>
  35. <TextView style={ChargeStyle.infoText}>{item.rates}</TextView>
  36. <TextView style={ChargeStyle.infoTitle}>{$t('charging.labelRate')}</TextView>
  37. </View>
  38. <View style={ChargeStyle.infoGroup}>
  39. <TextView style={ChargeStyle.infoText}>{item.power}</TextView>
  40. <TextView style={ChargeStyle.infoTitle}>{$t('charging.labelPower')}</TextView>
  41. </View>
  42. <View style={ChargeStyle.infoGroup}>
  43. { item?.connectorCount?.available > 0
  44. ? <TextView style={[ChargeStyle.infoStatus, ChargeStyle.statusAvailable]}>{$t('charging.statusAvailable')}</TextView>
  45. : <TextView style={[ChargeStyle.infoStatus, ChargeStyle.statusUnavailable]}>{$t('charging.statusUnavailable')}</TextView>
  46. }
  47. <TextView style={ChargeStyle.infoTitle}>{$t('charging.labelStatus')}</TextView>
  48. </View>
  49. </View>
  50. );
  51. })
  52. : <TextView style={ui.noData}>{$t('charging.noRates')}</TextView>
  53. }
  54. <TextView style={styles.title}>{$t('charging.dcChargers')} ({(stationInfo?.dcConnector?.available ?? "0") + $t('charging.numberAvailable')})</TextView>
  55. { stationInfo.dcRates?.length > 0
  56. ? stationInfo.dcRates.map((item, index) => {
  57. return (
  58. <View key={index} style={ChargeStyle.stationInfoView}>
  59. <Image
  60. style={ChargeStyle.infoIcon}
  61. source={TypeImage.DC}/>
  62. <View style={ChargeStyle.infoGroup}>
  63. <TextView style={ChargeStyle.infoText}>{item.type}</TextView>
  64. <TextView style={ChargeStyle.infoTitle}>{$t('charging.labelType')}</TextView>
  65. </View>
  66. <View style={ChargeStyle.infoGroup}>
  67. <TextView style={ChargeStyle.infoText}>{item.rates}</TextView>
  68. <TextView style={ChargeStyle.infoTitle}>{$t('charging.labelRate')}</TextView>
  69. </View>
  70. <View style={ChargeStyle.infoGroup}>
  71. <TextView style={ChargeStyle.infoText}>{item.power}</TextView>
  72. <TextView style={ChargeStyle.infoTitle}>{$t('charging.labelPower')}</TextView>
  73. </View>
  74. <View style={ChargeStyle.infoGroup}>
  75. { item?.connectorCount?.available > 0
  76. ? <TextView style={[ChargeStyle.infoStatus, ChargeStyle.statusAvailable]}>{$t('charging.statusAvailable')}</TextView>
  77. : <TextView style={[ChargeStyle.infoStatus, ChargeStyle.statusUnavailable]}>{$t('charging.statusUnavailable')}</TextView>
  78. }
  79. <TextView style={ChargeStyle.infoTitle}>{$t('charging.labelStatus')}</TextView>
  80. </View>
  81. </View>
  82. );
  83. })
  84. : <TextView style={ui.noData}>{$t('charging.noRates')}</TextView>
  85. }
  86. { isPrivate &&
  87. <View style={styles.privateView}>
  88. <TextView style={styles.privateText}>{$t('charging.ratesPrivateNote')}</TextView>
  89. </View>
  90. }
  91. <View style={ui.flex1}></View>
  92. { !!(stationInfo.hasDiscount) &&
  93. <View style={[ChargeStyle.stationInfoView, styles.discountView]}>
  94. <MaterialCommunityIcons
  95. name="brightness-percent"
  96. size={28}
  97. color={colorAccent}/>
  98. <TextView style={styles.discountText}>{$t('charging.tipsDiscount')}</TextView>
  99. </View>
  100. }
  101. </View>
  102. {/* <Payment refreshId={refreshId}/> */}
  103. { canIntoCharging
  104. ? <Button
  105. style={styles.buttonView}
  106. text={$t('charging.btnIntoCharging')}
  107. //disabled={available}
  108. onClick={onIntoCharging}/>
  109. : <View style={styles.buttonGroup}>
  110. <Button
  111. style={styles.buttonLeft}
  112. text={$t('charging.scanQR')}
  113. //disabled={available}
  114. onClick={() => {
  115. PagerUtil.onInnerScanQR();
  116. startPage(PageList.scanqr, {actionDetail: false, id: stationInfo?.id});
  117. }}/>
  118. <Button
  119. style={styles.buttonRight}
  120. text={$t('charging.enterStationId')}
  121. //disabled={available}
  122. onClick={onEnterStation}/>
  123. </View>
  124. }
  125. </View>
  126. );
  127. const styles = StyleSheet.create({
  128. gstText: {
  129. color: '#EF3340',
  130. fontSize: 16,
  131. paddingTop: 16,
  132. fontWeight: 'bold',
  133. textAlign: 'center'
  134. },
  135. title: {
  136. color: '#000',
  137. fontSize: 14,
  138. fontWeight: 'bold',
  139. paddingTop: 16,
  140. paddingBottom: 16
  141. },
  142. updateTip: {
  143. color: '#aaa',
  144. fontSize: 10,
  145. textAlign: 'center',
  146. paddingTop: 32,
  147. paddingBottom: 16
  148. },
  149. privateView: {
  150. height: $vht(25),
  151. alignItems: 'center',
  152. justifyContent: 'center'
  153. },
  154. privateText: {
  155. color: '#FA5759'
  156. },
  157. buttonGroup: {
  158. marginTop: 16,
  159. marginBottom: 16,
  160. alignItems: 'center',
  161. flexDirection: 'row'
  162. },
  163. buttonView: {
  164. marginTop: 16,
  165. marginBottom: 32
  166. },
  167. buttonLeft: {
  168. flex: 1,
  169. elevation: 1.5,
  170. },
  171. buttonRight: {
  172. flex: 1,
  173. marginLeft: 16,
  174. elevation: 1.5
  175. },
  176. discountView: {
  177. borderWidth: 1,
  178. borderColor: colorAccent
  179. },
  180. discountText: {
  181. flex: 1,
  182. fontSize: 12,
  183. fontWeight: 'bold',
  184. textAlign: 'left',
  185. color: colorAccent,
  186. ...$padding(2, 10)
  187. }
  188. })