소스 검색

#13784 PHV Application in Member page

vbea 2 년 전
부모
커밋
dad0afa186

+ 8 - 2
Strides-APP/app/i18n/locales/en.js

@@ -436,9 +436,14 @@ export default {
     statusPending: "Pending",
     statusRejected: "Rejected",
     labelUpload: "Upload\nMembership\nCard (Front)",
+    labelPHVNo: "PHV No.",
+    labelPDVPhotos: "Upload\nPHV Photos\n(Front)",
+    labelRequirement: "Submission\nRequirements",
+    placeLast4Digits: "Input last 4 Digits",
     noData: "You not have any membership",
     errMembershipNo: "Please type Membership No",
-    errUploadCard: "Please upload Membership Card"
+    errUploadCard: "Please upload Membership Card or PHV Photos",
+    contentRequirement: "Please upload one of the following\n1. Membership Card\n2. Vocational License\n3. Ride Hailing App Account"
   },
   receipt: {
     breakdownChargingFees: "Charging Fees Breakdown",
@@ -494,6 +499,7 @@ export default {
     labelDetails: "DETAILS:",
     labelLinks: "LINKS:",
     startTime: "Start Time: ",
-    endTime: "End Time: "
+    endTime: "End Time: ",
+    btnReadAll: "Read All"
   }
 }

+ 9 - 3
Strides-APP/app/i18n/locales/zh-TW.js

@@ -435,10 +435,15 @@ export default {
     statusApproved: "審核通過",
     statusPending: "等待審核",
     statusRejected: "審核拒絕",
-    labelUpload: "請上載會員卡\n前面相片",
+    labelUpload: "請上載會員卡\n正面照片",
+    labelPHVNo: "PHV駕駛證號",
+    labelPDVPhotos: "請上載駕駛證\n照片 (正面)",
+    labelRequirement: "提交須知",
+    placeLast4Digits: "請鍵入最後4位數字",
     noData: "你還没有申請任何会员",
     errMembershipNo: "請鍵入會員卡號",
-    errUploadCard: "請上載會員卡相片"
+    errUploadCard: "請上載會員卡或駕駛證相片",
+    contentRequirement: "請上載以下內容之一\n1. 會員卡\n2. 職業執照\n3. 叫車應用程式賬號"
   },
   receipt: {
     breakdownChargingFees: "充電費用明細",
@@ -494,6 +499,7 @@ export default {
     labelDetails: "詳情:",
     labelLinks: "鏈接:",
     startTime: "開始時間:",
-    endTime: "結束時間:"
+    endTime: "結束時間:",
+    btnReadAll: "全部設為已讀"
   }
 }

+ 8 - 2
Strides-APP/app/i18n/locales/zh.js

@@ -436,9 +436,14 @@ export default {
     statusPending: "等待审核中",
     statusRejected: "审核未通过",
     labelUpload: "请上传会员卡\n正面照片",
+    labelPHVNo: "PHV驾驶证号",
+    labelPDVPhotos: "请上传驾驶证\n照片 (正面)",
+    labelRequirement: "提交须知",
+    placeLast4Digits: "请输入最后4位数字",
     noData: "你还没有申请任何会员",
     errMembershipNo: "请输入会员卡号",
-    errUploadCard: "请上传会员卡照片"
+    errUploadCard: "请上传会员卡或驾驶证照片",
+    contentRequirement: "请上传以下内容之一\n1. 会员卡\n2. 职业执照\n3. 叫车应用账号"
   },
   receipt: {
     breakdownChargingFees: "充电费用明细",
@@ -494,6 +499,7 @@ export default {
     labelDetails: "详情:",
     labelLinks: "链接:",
     startTime: "开始时间:",
-    endTime: "结束时间:"
+    endTime: "结束时间:",
+    btnReadAll: "全部设为已读"
   }
 }

+ 51 - 0
Strides-APP/app/pages/alert/ListAlerts.js

@@ -5,6 +5,7 @@
 import React, { Component } from 'react';
 import { Text, View, FlatList, StyleSheet, RefreshControl, PixelRatio } from 'react-native';
 import apiNotification from '../../api/apiNotification';
+import Button from '../../components/Button';
 import Dialog from '../../components/Dialog';
 import { MyRefreshProps } from '../../components/ThemesConfig';
 import { PageList } from '../Router';
@@ -108,6 +109,18 @@ export default class ListAlerts extends Component {
     }
   }
 
+  onClickReadAll() {
+    Dialog.showProgressDialog();
+    setTimeout(() => {
+      this.readAllMessage();
+    }, 1000);
+  }
+
+  readAllMessage() {
+    Dialog.dismissLoading();
+    this.onRefresh();
+  }
+
   listItem = (props) => {
     return (
       <ItemView
@@ -118,6 +131,23 @@ export default class ListAlerts extends Component {
     )
   }
 
+  topView = (props) => {
+    if (this.state.dataList.length > 0) {
+      return (
+        <View style={styles.topView}>
+          <Button
+            style={styles.topButton}
+            viewStyle={styles.topButtonView}
+            textStyle={styles.topButtonText}
+            text={$t("notification.btnReadAll")}
+            onClick={() => this.onClickReadAll()}/>
+        </View>
+      )
+    } else {
+      return null;
+    }
+  }
+
   divideView = (props) => {
     return (<View style={{height: 1.5/PixelRatio.get()}}></View>)
   }
@@ -128,6 +158,7 @@ export default class ListAlerts extends Component {
         style={styles.listView}
         data={this.state.dataList}
         renderItem={this.listItem}
+        ListHeaderComponent={this.topView}
         ItemSeparatorComponent={this.divideView}
         keyExtractor={item => item.notificationId}
         onEndReached={() => this.getMessageListPage()}
@@ -153,5 +184,25 @@ const styles = StyleSheet.create({
     fontSize: 14,
     padding: 20,
     textAlign: 'center'
+  },
+  topView: {
+    padding: 8,
+    flexDirection: 'row',
+    justifyContent: 'flex-end'
+  },
+  topButton: {
+    flexDirection: 'row',
+    backgroundColor: 'white',
+    borderColor: textCancel,
+    borderWidth: 1,
+    borderStyle: 'solid'
+  },
+  topButtonView: {
+    ...$padding(6, 16),
+    alignItems: 'center'
+  },
+  topButtonText: {
+    color: textPrimary,
+    fontSize: 12
   }
 })

+ 6 - 6
Strides-APP/app/pages/alert/Notification.js

@@ -23,11 +23,11 @@ export default class Notification extends Component {
       refreshing: false,
       countInfo: {}
     };
-    this.pageAdapter = [{
+    this.pageAdapter = [/*{
       title: $t('notification.tabCampaign'),
       name: "Campaigns",
       component: ListCampaign
-    }, {
+    }, */{
       title: $t('notification.tabAlerts'),
       name: "Alerts",
       component: ListAlerts
@@ -48,7 +48,7 @@ export default class Notification extends Component {
   }
 
   componentDidMount() {
-    utils.setBackClick([this.props?.route?.name, "Alerts", "Promotions"], this.backPage)
+    utils.setBackClick([this.props?.route?.name, "Campaigns", "Alerts", "Promotions"], this.backPage)
     this.props.navigation.addListener('focus', () => {
       if (this.isHide) {
         this.isHide = false;
@@ -95,10 +95,10 @@ export default class Notification extends Component {
   getBadgeText(index) {
     let count = 0;
     switch (index) {
-      case 0:
+      /*case 0:
         count = this.state.countInfo?.campaignUnreadCount;
-        break;
-      case 1:
+        break;*/
+      case 0:
         count = this.state.countInfo?.alertUnreadCount;
         break
       case 2:

+ 31 - 11
Strides-APP/app/pages/member/ApplyMember.js

@@ -3,7 +3,7 @@
  * @邠心vbe on 2023/07/14
  */
 import React, { Component } from 'react';
-import { View, Text, StyleSheet, TextInput } from 'react-native';
+import { View, Text, StyleSheet, TextInput, ScrollView } from 'react-native';
 import apiMember from '../../api/apiMember';
 import apiUpload from '../../api/apiUpload';
 import { GetCountryList } from '../../components/CountryIcon';
@@ -38,7 +38,8 @@ export default class ApplyMember extends Component {
         groupPk: "",
         membershipNo: "",
         cardFront: ""
-      }
+      },
+      isFleet: false
     };
   }
 
@@ -56,6 +57,14 @@ export default class ApplyMember extends Component {
     })
   }
 
+  changeGroup(value, index) {
+    const group = this.state.groupList[index];
+    this.setState({
+      isFleet: group?.groupType == "FLEET"
+    })
+    this.changeForm("groupPk", value);
+  }
+
   getCountryList() {
     GetCountryList(list => {
       this.setState({
@@ -128,7 +137,7 @@ export default class ApplyMember extends Component {
   render() {
     return (
       <View style={styles.container}>
-        <View style={styles.applyForm}>
+        <ScrollView style={styles.applyForm}>
           <View style={styles.formItem}>
             <TextView style={styles.inputLabel}>{$t('members.membership')}</TextView>
             <Dropdown
@@ -139,16 +148,16 @@ export default class ApplyMember extends Component {
               value={this.state.memberForm.groupPk}
               valueKey='groupPk'
               nameKey='groupName'
-              onChange={(value, index)=> {
-                this.changeForm("groupPk", value);
-              }}/>
+              onChange={(value, index)=> this.changeGroup(value, index)}/>
           </View>
           <View style={styles.formItem}>
-            <TextView style={styles.inputLabel}>{$t('members.membershipNo')}</TextView>
+            <TextView style={styles.inputLabel}>
+              {this.state.isFleet ? $t('members.labelPHVNo') : $t('members.membershipNo')}
+            </TextView>
             <TextInput
               style={styles.inputView}
               allowFontScaling={false}
-              placeholder={$t('members.membershipNo')}
+              placeholder={this.state.isFleet ? $t('members.placeLast4Digits') : $t('members.membershipNo')}
               placeholderTextColor={textPlacehoder}
               maxLength={50}
               //keyboardType='phone-pad'
@@ -156,7 +165,9 @@ export default class ApplyMember extends Component {
             />
           </View>
           <View style={styles.formItem}>
-            <TextView style={styles.inputLabel}>{$t('members.labelUpload')}</TextView>
+            <TextView style={styles.inputLabel}>
+              {this.state.isFleet ? $t('members.labelPDVPhotos') : $t('members.labelUpload')}
+            </TextView>
             <View style={styles.uploadGroup}>
               <UploadView
                 style={styles.uploadView}
@@ -165,9 +176,13 @@ export default class ApplyMember extends Component {
                 url={this.state.memberForm.cardFront}/>
             </View>
           </View>
-        </View>
-        <View style={styles.agreeView}>
           <View style={styles.formItem}>
+            <TextView style={styles.inputLabel}>{$t('members.labelRequirement')}</TextView>
+            <TextView style={styles.contentView}>{$t('members.contentRequirement')}</TextView>
+          </View>
+        </ScrollView>
+        <View style={styles.agreeView}>
+          <View style={ui.flex}>
             <CheckBoxText
               value={this.state.agree}
               text={$t('sign.agreePDVInfoAccurate')}
@@ -234,6 +249,11 @@ const styles = StyleSheet.create({
     flexDirection: 'row',
     backgroundColor: '#F5F5F5'
   },
+  contentView: {
+    flex: 2,
+    color: textPrimary,
+    fontSize: 14
+  },
   selectText: {
     flex: 1,
     color: textPrimary,