Преглед изворни кода

add app/pages/wallet/Payment.js

wudebin пре 5 месеци
родитељ
комит
4aa5adffb3
1 измењених фајлова са 208 додато и 0 уклоњено
  1. 208 0
      Strides-SPAPP/app/pages/wallet/Payment.js

+ 208 - 0
Strides-SPAPP/app/pages/wallet/Payment.js

@@ -0,0 +1,208 @@
+/**
+ * 支付组件
+ * @邠心vbe on 2021/04/23
+ */
+import React, { useEffect, useState } from 'react';
+import { View, Text, StyleSheet, Image, Pressable } from 'react-native';
+import Button, { ElevationObject } from '../../components/Button';
+import TextView from '../../components/TextView';
+import utils from '../../utils/utils';
+import { LowCreditDialog } from '../charge/InfoDialog';
+import { PaymentDefault } from '../payment/PaymentConfig';
+import { PageList } from '../Router';
+
+const Payment = ({
+    topup, balance,
+    payType = PaymentDefault.DEFAULT.payName,
+    isWallet = PaymentDefault.DEFAULT.isWallet,
+    isPayPerUse = PaymentDefault.DEFAULT.isPayPerUse,
+    canShowLowCreditDialog = false,
+    onMethodChange,
+    refreshId = 0
+  }) => {
+  const [visible, showDialog] = useState(false)
+  useEffect(() => {
+    if (balance == undefined && canShowLowCreditDialog) {
+      if (userInfo.credit <= 5 && refreshId > 0) {
+        showDialog(true)
+      }
+    }
+  }, [refreshId]);
+  return (
+    <View style={styles.paymentView}>
+      <Image 
+        style={styles.walletIcon}
+        source={require('../../images/charge/ic-payment.png')}
+      />
+      { isWallet || isPayPerUse
+        ? <View style={{paddingLeft: 16}}>
+            <Image
+              style={{
+                width: 50,
+                height: 14
+              }}
+              resizeMode={'contain'}
+              source={require('../../images/tool-logo.png')}/>
+            <Text
+              style={styles.rateText}
+              numberOfLines={1}
+              ellipsizeMode={'clip'}>{payType}</Text>
+          </View>
+        : <View style={{paddingLeft: 16}}>
+            <Text style={styles.creditText}>Visa/Mastercard</Text>
+            <Text style={styles.creditText}>Credit/Debit Card</Text>
+          </View>
+      }
+      <Text
+        style={styles.balance}
+        numberOfLines={1}
+        suppressHighlighting={true}>
+        {isWallet ? currency + (balance ?? userInfo.credit) : ''}
+      </Text>
+      { topup
+        ? <Button
+            style={styles.topupView}
+            text="+ Top Up"
+            textStyle={styles.topupText}
+            viewStyle={styles.infoStatus}
+            onClick={topup}/>
+        : <Button
+            style={styles.topupView}
+            text="Selected"
+            textStyle={styles.topupText}
+            viewStyle={styles.infoStatus}
+            onClick={() => {if (onMethodChange) onMethodChange()}}/>
+      }
+      <LowCreditDialog
+        visible={visible}
+        onClose={topup => {
+          showDialog(false)
+          if (topup) {
+            toTopupPage()
+          } else {
+            //goBack();
+          }
+        }
+      }/>
+    </View>
+  );
+}
+
+export default Payment;
+
+export const Balance = ({balance=0, balanceText, action, page=PageList.wallet}) => {
+  return (
+    <Pressable
+      style={styles.balanceView}
+      onPress={() => startPage(page)}>
+      <Image
+        style={styles.balanceIcon}
+        source={require('../../images/user/card-wallet.png')}/>
+      <TextView style={styles.balanceTitle}>{$t('wallet.creditWalletLabel')}</TextView>
+      { balanceText
+      ? <TextView style={styles.balanceValue} numberOfLines={1}>{balanceText}</TextView>
+      : <TextView style={styles.balanceValue} numberOfLines={1}>{getBalance(utils.isNotEmpty(balance) ? balance : userInfo.credit)}</TextView>
+      }
+      <Text style={ui.flex1}></Text>
+      <TextView style={styles.actionText} numberOfLines={1} ellipsizeMode="middle">{action ?? $t('wallet.viewHistory')}</TextView>
+      { utils.isNotEmpty(page) &&
+        <MaterialIcons
+          size={20}
+          color={textCancel}
+          name='chevron-right'/>
+      }
+    </Pressable>
+  );
+}
+
+const getBalance = (balance) => {
+  console.log('getBalance', balance, userInfo);
+  return balance ? balance.toFixed(2) : '0.0'
+}
+
+const styles = StyleSheet.create({
+  paymentView: {
+    borderRadius: 8,
+    paddingTop: 12,
+    paddingLeft: 16,
+    paddingRight: 16,
+    paddingBottom: 12,
+    alignItems: 'center',
+    flexDirection: 'row',
+    ...ElevationObject(5),
+    backgroundColor: colorLight,
+    justifyContent: 'space-between'
+  },
+  walletIcon: {
+    width: 36,
+    height: 36
+  },
+  creditText: {
+    color: textPrimary,
+    fontSize: 14,
+  },
+  rateText: {
+    color: textPrimary,
+    fontSize: 14,
+  },
+  balance: {
+    flex: 1,
+    color: textPrimary,
+    fontSize: 16,
+    textAlign: 'right',
+    fontWeight: 'bold',
+    paddingRight: 24,
+    
+  },
+  balanceIcon: {
+    width: 30,
+    height: 30
+  },
+  balanceTitle: {
+    color: '#000',
+    fontSize: 16,
+    paddingLeft: 12,
+    fontWeight: 'bold'
+  },
+  balanceValue: {
+    color: '#000',
+    fontSize: 18,
+    paddingLeft: 6
+  },
+  infoStatus: {
+    paddingTop: 4,
+    paddingLeft: 10,
+    paddingRight: 10,
+    paddingBottom: 4,
+    borderRadius: 4
+  },
+  selected: {
+    color: colorAccent,
+    backgroundColor: colorDark
+  },
+  topupView: {
+    borderRadius: 4,
+    backgroundColor: colorDark
+  },
+  topupText: {
+    color: colorAccent,
+    fontSize: 12,
+    fontWeight: 'normal'
+  },
+  balanceView: {
+    margin: 16,
+    padding: 16,
+    alignItems: 'center',
+    flexDirection: 'row',
+    borderRadius: 6,
+    overflow: 'hidden',
+    ...ElevationObject(5),
+    backgroundColor: colorLight
+  },
+  actionText: {
+    color: textCancel,
+    fontSize: 12,
+    paddingLeft: 8,
+    paddingRight: 2
+  }
+});