Przeglądaj źródła

添加 message 列表

wennjie 6 lat temu
rodzic
commit
def877ba11
39 zmienionych plików z 1386 dodań i 376 usunięć
  1. 2 0
      huiliaoAPP/android/app/build.gradle
  2. 860 0
      huiliaoAPP/android/app/src/main/assets/index.android.bundle
  3. 4 0
      huiliaoAPP/android/app/src/main/java/com/huiliaoapp/MainApplication.java
  4. 4 3
      huiliaoAPP/android/app/src/main/res/values-v19/styles.xml
  5. 7 0
      huiliaoAPP/android/app/src/main/res/values/color.xml
  6. 4 2
      huiliaoAPP/android/app/src/main/res/values/styles.xml
  7. 12 1
      huiliaoAPP/android/build.gradle
  8. 4 0
      huiliaoAPP/android/settings.gradle
  9. 17 1
      huiliaoAPP/index.js
  10. 80 6
      huiliaoAPP/ios/huiliaoAPP.xcodeproj/project.pbxproj
  11. 2 0
      huiliaoAPP/ios/huiliaoAPP/Info.plist
  12. 6 3
      huiliaoAPP/package.json
  13. 18 40
      huiliaoAPP/src/components/LoginInput.js
  14. 7 0
      huiliaoAPP/src/config/register.js
  15. 4 7
      huiliaoAPP/src/navigators/BottomTabNavigator.js
  16. 15 24
      huiliaoAPP/src/pages/Contact/AddFriend/index.js
  17. 5 12
      huiliaoAPP/src/pages/Contact/CheckValidation/index.js
  18. 2 2
      huiliaoAPP/src/pages/Contact/DetailedInfo/index.js
  19. 2 2
      huiliaoAPP/src/pages/Contact/FriendsValidation/index.js
  20. 11 10
      huiliaoAPP/src/pages/Contact/NewFriend/index.js
  21. 6 3
      huiliaoAPP/src/pages/Contact/Search/index.js
  22. 8 14
      huiliaoAPP/src/pages/Contact/components/ContactList/index.js
  23. 3 4
      huiliaoAPP/src/pages/Contact/components/ItemInContact.js
  24. 8 12
      huiliaoAPP/src/pages/Contact/components/searchBar.js
  25. 4 14
      huiliaoAPP/src/pages/Contact/index.js
  26. 4 14
      huiliaoAPP/src/pages/Login/index.js
  27. 66 33
      huiliaoAPP/src/pages/Message/index.js
  28. 0 67
      huiliaoAPP/src/pages/Mine/Camera/index.js
  29. 0 24
      huiliaoAPP/src/pages/Mine/ImagePicker/index.js
  30. 6 3
      huiliaoAPP/src/pages/Mine/Infomation/index.js
  31. 1 1
      huiliaoAPP/src/pages/Mine/Notice/index.js
  32. 1 1
      huiliaoAPP/src/pages/Mine/QrCode/index.js
  33. 1 1
      huiliaoAPP/src/pages/Mine/ReName/index.js
  34. 1 1
      huiliaoAPP/src/pages/Mine/RePassword/index.js
  35. 1 1
      huiliaoAPP/src/pages/Mine/Setting/index.js
  36. 8 4
      huiliaoAPP/src/pages/Mine/index.js
  37. 42 44
      huiliaoAPP/src/tool/icon.js
  38. 1 3
      huiliaoAPP/src/tool/index.js
  39. 159 19
      huiliaoAPP/yarn.lock

+ 2 - 0
huiliaoAPP/android/app/build.gradle

@@ -149,6 +149,8 @@ android {
 }
 
 dependencies {
+    compile project(':react-native-sound')
+    compile project(':react-native-audio')
     implementation(project(':react-native-camera')) {
         exclude group: "com.google.android.gms"
     }

Plik diff jest za duży
+ 860 - 0
huiliaoAPP/android/app/src/main/assets/index.android.bundle


+ 4 - 0
huiliaoAPP/android/app/src/main/java/com/huiliaoapp/MainApplication.java

@@ -3,6 +3,8 @@ package com.huiliaoapp;
 import android.app.Application;
 
 import com.facebook.react.ReactApplication;
+import com.zmxv.RNSound.RNSoundPackage;
+import com.rnim.rn.audio.ReactNativeAudioPackage;
 import org.reactnative.camera.RNCameraPackage;
 import com.lynxit.contactswrapper.ContactsWrapperPackage;
 import com.xb.contactpicker.ReactNativeContacts;
@@ -27,6 +29,8 @@ public class MainApplication extends Application implements ReactApplication {
     protected List<ReactPackage> getPackages() {
       return Arrays.<ReactPackage>asList(
           new MainReactPackage(),
+            new RNSoundPackage(),
+            new ReactNativeAudioPackage(),
             new RNCameraPackage(),
             new ContactsWrapperPackage(),
             new ReactNativeContacts(),

+ 4 - 3
huiliaoAPP/android/app/src/main/res/values-v19/styles.xml

@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
-<resources>
-
+<resources xmlns:tools="http://schemas.android.com/tools">
     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
+        <!-- Customize your theme here. -->
+        <item name="android:windowLightStatusBar">true</item>
         <item name="android:windowTranslucentStatus">true</item>
-        <item name="android:windowTranslucentNavigation">true</item>
+
     </style>
 </resources>

+ 7 - 0
huiliaoAPP/android/app/src/main/res/values/color.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <color name="colorPrimary">#1c90f5</color>
+    <color name="colorPrimaryDark">#1c90f5</color>
+    <color name="colorAccent">#1c90f5</color>
+</resources>

+ 4 - 2
huiliaoAPP/android/app/src/main/res/values/styles.xml

@@ -1,9 +1,11 @@
-<resources>
+<resources xmlns:tools="http://schemas.android.com/tools">
 
     <!-- Base application theme. -->
     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
+        <item name="android:windowLightStatusBar">true</item>
+
         <item name="android:windowTranslucentStatus">true</item>
-        <item name="android:windowTranslucentNavigation">true</item>
+
     </style>
 
 </resources>

+ 12 - 1
huiliaoAPP/android/build.gradle

@@ -16,7 +16,18 @@ buildscript {
         // in the individual module build.gradle files
     }
 }
-
+subprojects {
+    project.configurations.all {
+        afterEvaluate {project ->
+            if (project.hasProperty("android")) {
+                android {
+                    compileSdkVersion 27
+                    buildToolsVersion '27.0.3'
+                }
+            }
+        }
+    }
+}
 allprojects {
     repositories {
         mavenLocal()

+ 4 - 0
huiliaoAPP/android/settings.gradle

@@ -1,4 +1,8 @@
 rootProject.name = 'huiliaoAPP'
+include ':react-native-sound'
+project(':react-native-sound').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sound/android')
+include ':react-native-audio'
+project(':react-native-audio').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-audio/android')
 include ':react-native-camera'
 project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android')
 include ':react-native-contacts-wrapper'

+ 17 - 1
huiliaoAPP/index.js

@@ -1,8 +1,24 @@
 /** @format */
 
-import {AppRegistry} from 'react-native';
+import {AppRegistry,AsyncStorage} from 'react-native';
 import App from './App';
 import {name as appName} from './app.json';
+import BottomTabNavigator from './src/navigators/BottomTabNavigator'
 
 
+import register from './src/config/register'
+
+// register.isRegister=true
+
+
+// AsyncStorage.getItem('USER').then((res)=>{
+
+//     console.log(res)
+
+
+// },(err)=>{
+
+// })
+
+// console.log(123)
 AppRegistry.registerComponent(appName, () => App);

+ 80 - 6
huiliaoAPP/ios/huiliaoAPP.xcodeproj/project.pbxproj

@@ -37,7 +37,9 @@
 		2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; };
 		3A467E62F5A64656A979023B /* libRNContactsPicker.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B67DBD86D72F4F5596A86A19 /* libRNContactsPicker.a */; };
 		5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
+		68A67C54DE4A4431B1A3EC36 /* libRNAudio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3890EECA88C8405FA795AE2C /* libRNAudio.a */; };
 		832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
+		999AEF39D5BB4D40AFBA0D40 /* libRNSound.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F3B64675D12B4CC3A837A903 /* libRNSound.a */; };
 		AC0E38A9407146FD97D072A4 /* libimageCropPicker.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B01B1EB32104611B4BD75FB /* libimageCropPicker.a */; };
 		ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; };
 		AE3B4C4D21328968006E0B16 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
@@ -342,6 +344,20 @@
 			remoteGlobalIDString = 3400A8081CEB54A6008A0BC7;
 			remoteInfo = imageCropPicker;
 		};
+		AE9B3B0F21383CFD0031A7C6 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = F9B117C4D457407EB2C3A904 /* RNAudio.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 42F559BA1CFC90C400DC3F84;
+			remoteInfo = RNAudio;
+		};
+		AE9B3B5121383D0C0031A7C6 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = BB015EF9C63046F188C80664 /* RNSound.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = 19825A1E1BD4A89800EE0337;
+			remoteInfo = RNSound;
+		};
 		AEAADD11213263FF00FED8AE /* PBXContainerItemProxy */ = {
 			isa = PBXContainerItemProxy;
 			containerPortal = 268208B1EC93416CB5EA17A7 /* RNContactsPicker.xcodeproj */;
@@ -391,6 +407,7 @@
 		2D02E47B1E0B4A5D006451C7 /* huiliaoAPP-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "huiliaoAPP-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 		2D02E4901E0B4A5D006451C7 /* huiliaoAPP-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "huiliaoAPP-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		3890EECA88C8405FA795AE2C /* libRNAudio.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNAudio.a; sourceTree = "<group>"; };
 		3B01B1EB32104611B4BD75FB /* libimageCropPicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libimageCropPicker.a; sourceTree = "<group>"; };
 		4209115BA512474B952551EB /* RNCamera.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNCamera.xcodeproj; path = "../node_modules/react-native-camera/ios/RNCamera.xcodeproj"; sourceTree = "<group>"; };
 		5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = "<group>"; };
@@ -401,8 +418,11 @@
 		AE9332AD212FD01900A82ECC /* RSKImageCropper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RSKImageCropper.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		AE9332B1212FD01C00A82ECC /* QBImagePicker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = QBImagePicker.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		B67DBD86D72F4F5596A86A19 /* libRNContactsPicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNContactsPicker.a; sourceTree = "<group>"; };
+		BB015EF9C63046F188C80664 /* RNSound.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSound.xcodeproj; path = "../node_modules/react-native-sound/RNSound.xcodeproj"; sourceTree = "<group>"; };
 		DDD93A23D5194D9E8D22AB47 /* imageCropPicker.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = imageCropPicker.xcodeproj; path = "../node_modules/react-native-image-crop-picker/ios/imageCropPicker.xcodeproj"; sourceTree = "<group>"; };
+		F3B64675D12B4CC3A837A903 /* libRNSound.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSound.a; sourceTree = "<group>"; };
 		F4E8CB53ED554B1CB24E57F9 /* libRCTContactsWrapper.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTContactsWrapper.a; sourceTree = "<group>"; };
+		F9B117C4D457407EB2C3A904 /* RNAudio.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNAudio.xcodeproj; path = "../node_modules/react-native-audio/ios/RNAudio.xcodeproj"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -437,6 +457,8 @@
 				3A467E62F5A64656A979023B /* libRNContactsPicker.a in Frameworks */,
 				22FA7E94BA01484D85CF4080 /* libRCTContactsWrapper.a in Frameworks */,
 				2C1F4425C44A495DB39A2CC3 /* libRNCamera.a in Frameworks */,
+				68A67C54DE4A4431B1A3EC36 /* libRNAudio.a in Frameworks */,
+				999AEF39D5BB4D40AFBA0D40 /* libRNSound.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -627,6 +649,8 @@
 				268208B1EC93416CB5EA17A7 /* RNContactsPicker.xcodeproj */,
 				79CCA97F54174204BA6D55E9 /* ContactsWrapper.xcodeproj */,
 				4209115BA512474B952551EB /* RNCamera.xcodeproj */,
+				F9B117C4D457407EB2C3A904 /* RNAudio.xcodeproj */,
+				BB015EF9C63046F188C80664 /* RNSound.xcodeproj */,
 			);
 			name = Libraries;
 			sourceTree = "<group>";
@@ -700,6 +724,8 @@
 				B67DBD86D72F4F5596A86A19 /* libRNContactsPicker.a */,
 				F4E8CB53ED554B1CB24E57F9 /* libRCTContactsWrapper.a */,
 				2166474F6CB8470497E126B1 /* libRNCamera.a */,
+				3890EECA88C8405FA795AE2C /* libRNAudio.a */,
+				F3B64675D12B4CC3A837A903 /* libRNSound.a */,
 			);
 			name = "Recovered References";
 			sourceTree = "<group>";
@@ -712,6 +738,22 @@
 			name = Products;
 			sourceTree = "<group>";
 		};
+		AE9B3B0C21383CFD0031A7C6 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				AE9B3B1021383CFD0031A7C6 /* libRNAudio.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		AE9B3B4E21383D0C0031A7C6 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				AE9B3B5221383D0C0031A7C6 /* libRNSound.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
 		AEAADD0E213263FF00FED8AE /* Products */ = {
 			isa = PBXGroup;
 			children = (
@@ -892,6 +934,10 @@
 					ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
 				},
 				{
+					ProductGroup = AE9B3B0C21383CFD0031A7C6 /* Products */;
+					ProjectRef = F9B117C4D457407EB2C3A904 /* RNAudio.xcodeproj */;
+				},
+				{
 					ProductGroup = AE81389921351B160081B250 /* Products */;
 					ProjectRef = 4209115BA512474B952551EB /* RNCamera.xcodeproj */;
 				},
@@ -899,6 +945,10 @@
 					ProductGroup = AEAADD0E213263FF00FED8AE /* Products */;
 					ProjectRef = 268208B1EC93416CB5EA17A7 /* RNContactsPicker.xcodeproj */;
 				},
+				{
+					ProductGroup = AE9B3B4E21383D0C0031A7C6 /* Products */;
+					ProjectRef = BB015EF9C63046F188C80664 /* RNSound.xcodeproj */;
+				},
 			);
 			projectRoot = "";
 			targets = (
@@ -1191,6 +1241,20 @@
 			remoteRef = AE9332AB212FD00E00A82ECC /* PBXContainerItemProxy */;
 			sourceTree = BUILT_PRODUCTS_DIR;
 		};
+		AE9B3B1021383CFD0031A7C6 /* libRNAudio.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libRNAudio.a;
+			remoteRef = AE9B3B0F21383CFD0031A7C6 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
+		AE9B3B5221383D0C0031A7C6 /* libRNSound.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libRNSound.a;
+			remoteRef = AE9B3B5121383D0C0031A7C6 /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
 		AEAADD12213263FF00FED8AE /* libRNContactsPicker.a */ = {
 			isa = PBXReferenceProxy;
 			fileType = archive.ar;
@@ -1341,6 +1405,8 @@
 					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 					"$(SRCROOT)/../node_modules/react-native-contacts-wrapper/ios/RCTContactsWrapper",
 					"$(SRCROOT)/../node_modules/react-native-camera/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-audio/ios",
+					"$(SRCROOT)/../node_modules/react-native-sound/RNSound",
 				);
 				INFOPLIST_FILE = huiliaoAPPTests/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
@@ -1349,7 +1415,6 @@
 					"$(inherited)",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
-					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 				);
 				OTHER_LDFLAGS = (
 					"-ObjC",
@@ -1371,6 +1436,8 @@
 					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 					"$(SRCROOT)/../node_modules/react-native-contacts-wrapper/ios/RCTContactsWrapper",
 					"$(SRCROOT)/../node_modules/react-native-camera/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-audio/ios",
+					"$(SRCROOT)/../node_modules/react-native-sound/RNSound",
 				);
 				INFOPLIST_FILE = huiliaoAPPTests/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
@@ -1379,7 +1446,6 @@
 					"$(inherited)",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
-					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 				);
 				OTHER_LDFLAGS = (
 					"-ObjC",
@@ -1404,6 +1470,8 @@
 					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 					"$(SRCROOT)/../node_modules/react-native-contacts-wrapper/ios/RCTContactsWrapper",
 					"$(SRCROOT)/../node_modules/react-native-camera/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-audio/ios",
+					"$(SRCROOT)/../node_modules/react-native-sound/RNSound",
 				);
 				INFOPLIST_FILE = huiliaoAPP/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -1431,6 +1499,8 @@
 					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 					"$(SRCROOT)/../node_modules/react-native-contacts-wrapper/ios/RCTContactsWrapper",
 					"$(SRCROOT)/../node_modules/react-native-camera/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-audio/ios",
+					"$(SRCROOT)/../node_modules/react-native-sound/RNSound",
 				);
 				INFOPLIST_FILE = huiliaoAPP/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -1463,6 +1533,8 @@
 					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 					"$(SRCROOT)/../node_modules/react-native-contacts-wrapper/ios/RCTContactsWrapper",
 					"$(SRCROOT)/../node_modules/react-native-camera/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-audio/ios",
+					"$(SRCROOT)/../node_modules/react-native-sound/RNSound",
 				);
 				INFOPLIST_FILE = "huiliaoAPP-tvOS/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -1470,7 +1542,6 @@
 					"$(inherited)",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
-					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 				);
 				OTHER_LDFLAGS = (
 					"-ObjC",
@@ -1502,6 +1573,8 @@
 					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 					"$(SRCROOT)/../node_modules/react-native-contacts-wrapper/ios/RCTContactsWrapper",
 					"$(SRCROOT)/../node_modules/react-native-camera/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-audio/ios",
+					"$(SRCROOT)/../node_modules/react-native-sound/RNSound",
 				);
 				INFOPLIST_FILE = "huiliaoAPP-tvOS/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -1509,7 +1582,6 @@
 					"$(inherited)",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
-					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 				);
 				OTHER_LDFLAGS = (
 					"-ObjC",
@@ -1540,6 +1612,8 @@
 					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 					"$(SRCROOT)/../node_modules/react-native-contacts-wrapper/ios/RCTContactsWrapper",
 					"$(SRCROOT)/../node_modules/react-native-camera/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-audio/ios",
+					"$(SRCROOT)/../node_modules/react-native-sound/RNSound",
 				);
 				INFOPLIST_FILE = "huiliaoAPP-tvOSTests/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
@@ -1547,7 +1621,6 @@
 					"$(inherited)",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
-					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 				);
 				OTHER_LDFLAGS = (
 					"-ObjC",
@@ -1578,6 +1651,8 @@
 					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 					"$(SRCROOT)/../node_modules/react-native-contacts-wrapper/ios/RCTContactsWrapper",
 					"$(SRCROOT)/../node_modules/react-native-camera/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-audio/ios",
+					"$(SRCROOT)/../node_modules/react-native-sound/RNSound",
 				);
 				INFOPLIST_FILE = "huiliaoAPP-tvOSTests/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
@@ -1585,7 +1660,6 @@
 					"$(inherited)",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 					"\"$(SRCROOT)/$(TARGET_NAME)\"",
-					"\"$(SRCROOT)/$(TARGET_NAME)\"",
 				);
 				OTHER_LDFLAGS = (
 					"-ObjC",

+ 2 - 0
huiliaoAPP/ios/huiliaoAPP/Info.plist

@@ -47,6 +47,8 @@
 	<string>是否允许此App访问通讯录?</string>
 	<key>NSLocationWhenInUseUsageDescription</key>
 	<string>是否允许此App获取你的地理位置?</string>
+	<key>NSMicrophoneUsageDescription</key>
+	<string>是否允许此App访问你的麦克风?</string>
 	<key>NSPhotoLibraryAddUsageDescription</key>
 	<string>是否允许此App访问你的相册?</string>
 	<key>NSPhotoLibraryUsageDescription</key>

+ 6 - 3
huiliaoAPP/package.json

@@ -9,14 +9,14 @@
   "dependencies": {
     "ac-qrcode": "^1.0.1",
     "antd-mobile-rn": "^2.2.1",
-    "buffer": "^5.2.0",
     "leancloud-realtime": "^4.2.0",
     "leancloud-realtime-plugin-typed-messages": "^3.0.1",
     "leancloud-storage": "^3.10.0",
-    "pinyin4js": "^1.3.5",
+    "native-base": "^2.8.0",
     "prop-types": "^15.5.10",
     "react": "16.4.1",
     "react-native": "0.56.0",
+    "react-native-audio": "^4.1.3",
     "react-native-camera": "^1.2.0",
     "react-native-contacts-picker": "^0.0.7",
     "react-native-contacts-wrapper": "^0.2.4",
@@ -24,10 +24,13 @@
     "react-native-image-crop-picker": "^0.21.1",
     "react-native-keyboard-aware-scroll-view": "^0.7.0",
     "react-native-qrcode": "^0.2.7",
+    "react-native-sound": "^0.10.9",
+    "react-native-swipeout": "^2.3.6",
     "react-navigation": "^2.11.2",
     "react-navigation-redux-helpers": "^2.0.0-beta.1",
     "react-redux": "^5.0.6",
-    "redux": "^3.7.2"
+    "redux": "^3.7.2",
+    "simple-pinyin": "^3.0.2"
   },
   "devDependencies": {
     "babel-jest": "23.4.2",

+ 18 - 40
huiliaoAPP/src/components/LoginInput.js

@@ -1,7 +1,8 @@
 import React,{Component} from 'react';
 import {View ,Image,TextInput,StyleSheet,Text,Button} from  'react-native';
 
-import {Device,Icon} from '../tool'
+import {Device} from '../tool'
+
 
 class LoginInput extends Component{
     constructor(props){
@@ -54,46 +55,25 @@ class LoginInput extends Component{
     render(){
         const { type ,placeholder,style } = this.props
         const { active } = this.state
-
+        const lock = active ? require('../../assets/2x/Login/lock-click.png') :require('../../assets/2x/Login/lock.png')
+        const phone = active ? require('../../assets/2x/Login/phone-click.png') :require('../../assets/2x/Login/phone.png')
         const imageBox=()=>{
             if(type==='password'){
-                if(active){
-                    return (
-                        <Image
-                        style={styles.lockimage}
-                         source={Icon.Login.lockClick}
-                        >
-                        </Image>
-                    )
-                }else{
-                    return (
-                        <Image
-                        style={styles.lockimage}
-                         source={Icon.Login.lock}
-                        >
-                        </Image>
-                    )
-    
-                }
+                return (
+                    <Image
+                    style={styles.lockimage}
+                        source={lock}
+                    >
+                    </Image>
+                )
             }else{
-                if(active){
-                    return (
-                        <Image
-                        style={styles.phoneimage}
-                         source={Icon.Login.phoneClick}
-                        >
-                        </Image>
-                    )
-                }else{
-                    return (
-                        <Image
-                        style={styles.phoneimage}
-                         source={Icon.Login.phone}
-                        >
-                        </Image>
-                    )
-    
-                }
+                return (
+                    <Image
+                    style={styles.phoneimage}
+                        source={phone}
+                    >
+                    </Image>
+                )
             }
             
         }
@@ -114,8 +94,6 @@ class LoginInput extends Component{
                     placeholder={placeholder} 
                     style={[styles.input,{height:Device.scale(35),padding:0}]} />
                 </View>
-                
-
             </View>
         )
     }

+ 7 - 0
huiliaoAPP/src/config/register.js

@@ -0,0 +1,7 @@
+
+
+class register  {
+
+    isRegister=false
+
+}

+ 4 - 7
huiliaoAPP/src/navigators/BottomTabNavigator.js

@@ -1,10 +1,8 @@
 import React from 'react';
 import {createBottomTabNavigator} from 'react-navigation';
 import TabBarItem from '../components/TabBarItem';
-import Device from '../tool/Device'
-import {Text,DeviceEventEmitter} from 'react-native'
-import {Icon } from '../tool'
-
+import {Device} from '../tool'
+import {DeviceEventEmitter} from 'react-native'
 import  RightButton from "../components/RightButton";
 
 //mine
@@ -95,7 +93,7 @@ BottomTabNavigator.navigationOptions = ({ navigation }) => {
     title = '消息';
     headerRight=(
       <RightButton 
-        Icon={Icon.Message.add}
+        Icon={require('../../assets/2x/message/add.png')}
         Click={()=>{
           navigation.dispatch({type:'OPENMENUMESSAGE'})
       }} />)
@@ -104,10 +102,9 @@ BottomTabNavigator.navigationOptions = ({ navigation }) => {
     title = '通讯录';
     headerRight=(
       <RightButton 
-        Icon={Icon.Contact.add}
+        Icon={require('../../assets/2x/contact/add.png')}
         Click={()=>{
           DeviceEventEmitter.emit('OPENMENUCONTACT');
-          // navigation.dispatch({type:'OPENMENUCONTACT'})
         }} />)
   }else if(routeName === 'MineTab'){
     title = '我的';

+ 15 - 24
huiliaoAPP/src/pages/Contact/AddFriend/index.js

@@ -1,41 +1,36 @@
 import React from 'react';
-import { Image, ScrollView, Alert ,StyleSheet, Text, View,TextInput ,TouchableOpacity} from 'react-native';
-import Button from 'antd-mobile-rn/lib/button';
-import { List,Switch,SearchBar } from 'antd-mobile-rn';
+import { Image,StyleSheet, Text, View,TextInput ,TouchableOpacity} from 'react-native';
 import commonStyles from '../../../styles/styles'
-import {Icon,Device} from '../../../tool'
+import {Device} from '../../../tool'
+
 
-const Item = List.Item;
-const Brief = Item.Brief;
 
 
 
 export default class AddFriend extends React.Component {
   constructor(props) {
     super(props);
-    this. state = {
-      //value: '美食',
-    };
   }
 
   static navigationOptions ={
     title:'添加朋友'
    }
-  onBlur = (value) => {
-   //跳转
-  }
-
+   
   render() {
     const {navigation} =this.props
+    const Icon_in = require('../../../../assets/2x/in.png')
+    const Icon_Contact_scan = require('../../../../assets/2x/contact/scan.png')
+    const Icon_Contact_search = require('../../../../assets/2x/contact/search.png')
+    const Icon_Contact_phoneCall = require('../../../../assets/2x/contact/phoneCall.png')
+    const Icon_Contact_code = require('../../../../assets/2x/contact/code.png')
     return (
       <View style={commonStyles.page}>
         <View style={styles.searchBarWrap}>
           <View style={styles.serchWrap}>
-             <Image style={styles.searchImg} source={Icon.Contact.search}/>
+             <Image style={styles.searchImg} source={Icon_Contact_search}/>
              <TextInput
                 style={[styles.searchBar,{padding:0}]}
                 placeholder="手机号/ID号搜索"
-              //  onFocus
               />
           </View>
         </View>
@@ -44,7 +39,7 @@ export default class AddFriend extends React.Component {
           <TouchableOpacity onPress={()=>{
             navigation.navigate({ routeName:"QrCode" })
           }}>
-          <Image style={styles.idEWM}  source={Icon.Contact.code}/>
+          <Image style={styles.idEWM}  source={Icon_Contact_code}/>
           </TouchableOpacity>
           
         </View>
@@ -54,22 +49,22 @@ export default class AddFriend extends React.Component {
           navigation.navigate({ routeName:"QRScannerView" })
         }}>
         <View style={styles.list}>
-             <Image style={styles.scanImg} source={Icon.Contact.scan}/>
+             <Image style={styles.scanImg} source={Icon_Contact_scan}/>
              <View style={styles.listTitle}>
                <Text style={styles.listOne}>扫一扫</Text>
                <Text style={styles.listTwo}>扫描二维码名片</Text>
              </View>
-             <Image style={styles.inImg} source={Icon.in}/>
+             <Image style={styles.inImg} source={Icon_in}/>
           </View>
         </TouchableOpacity>
           
           <View style={styles.list}>
-             <Image style={styles.scanImg} source={Icon.Contact.phoneCall}/>
+             <Image style={styles.scanImg} source={Icon_Contact_phoneCall}/>
              <View style={styles.listTitle}>
                <Text style={styles.listOne}>手机联系人</Text>
                <Text style={styles.listTwo}>添加或邀请通讯录中的朋友</Text>
              </View>
-             <Image style={styles.inImg}  source={Icon.in}/>
+             <Image style={styles.inImg}  source={Icon_in}/>
           </View>
         </View>
       </View>
@@ -83,10 +78,6 @@ const styles = StyleSheet.create({
   searchBarWrap:{
     backgroundColor:'#f0f0f0',
     height:Device.scale(58),
-    // paddingLeft:8,
-    // paddingRight:8,
-    // paddingTop:11,
-    // paddingBottom:11,
   },
   serchWrap:{
     borderRadius:Device.scale(8),

+ 5 - 12
huiliaoAPP/src/pages/Contact/CheckValidation/index.js

@@ -1,32 +1,25 @@
 import React from 'react';
-import { Image, ScrollView, Alert ,StyleSheet, Text, View,TextInput } from 'react-native';
-import { List,Switch,SearchBar,Button } from 'antd-mobile-rn';
-import {Icon,Device} from '../../../tool'
+import { Image,StyleSheet, Text, View,TextInput } from 'react-native';
+import { Button } from 'antd-mobile-rn';
+import {Device} from '../../../tool'
 import commonStyles from '../../../styles/styles'
-const Item = List.Item;
-const Brief = Item.Brief;
 
 
 
 export default class App extends React.Component {
   constructor(props) {
     super(props);
-    this. state = {
-      //value: '美食',
-    };
   }
   static navigationOptions ={
     title:'详细资料'
    }
-  onBlur = (value) => {
-   //跳转
-  }
 
   render() {
+    const Icon_Contact_code = require('../../../../assets/2x/contact/code.png')
     return (
       <View style={commonStyles.page}>
         <View style={styles.listWrap}>
-           <Image style={styles.scanImg} source={Icon.Contact.code}/>
+           <Image style={styles.scanImg} source={Icon_Contact_code}/>
            <View style={styles.info}>
              <Text style={styles.infoName}>春花</Text>
              <Text style={styles.infoId}>ID:123456</Text>

+ 2 - 2
huiliaoAPP/src/pages/Contact/DetailedInfo/index.js

@@ -1,7 +1,7 @@
 import React from 'react';
 import { Image, ScrollView, Alert ,StyleSheet, Text, View,TextInput } from 'react-native';
 import { List,Switch,SearchBar,Button } from 'antd-mobile-rn';
-import {Icon,Device} from '../../../tool'
+import {Device} from '../../../tool'
 import commonStyles from '../../../styles/styles'
 
 const Item = List.Item;
@@ -30,7 +30,7 @@ export default class App extends React.Component {
     return (
       <View style={commonStyles.page}>
         <View style={styles.listWrap}>
-           <Image style={styles.scanImg} source={Icon.Contact.search}/>
+           <Image style={styles.scanImg} source={require('../../../../assets/icon.png')}/>
            <View style={styles.info}>
              <Text style={styles.infoName}>春花</Text>
              <Text style={styles.infoId}>ID:123456</Text>

+ 2 - 2
huiliaoAPP/src/pages/Contact/FriendsValidation/index.js

@@ -1,6 +1,6 @@
 import React from 'react';
-import { Image, ScrollView, Alert ,StyleSheet, Text, View,TextInput,TouchableOpacity } from 'react-native';
-import { List,Switch,SearchBar,Button,InputItem } from 'antd-mobile-rn';
+import { StyleSheet, Text, View,TouchableOpacity } from 'react-native';
+import { List,InputItem } from 'antd-mobile-rn';
 import {Device} from '../../../tool'
 
 import commonStyles from '../../../styles/styles'

+ 11 - 10
huiliaoAPP/src/pages/Contact/NewFriend/index.js

@@ -1,12 +1,9 @@
 import React from 'react';
-import { Image, ScrollView, Alert ,StyleSheet, Text, View,TextInput,TouchableOpacity } from 'react-native';
-import Button from 'antd-mobile-rn/lib/button';
-import { List,Switch,SearchBar } from 'antd-mobile-rn';
-import {Icon,Device} from '../../../tool'
+import { Image ,StyleSheet, Text, View,TextInput,TouchableOpacity } from 'react-native';
+
+import {Device} from '../../../tool'
 import commonStyles from '../../../styles/styles'
 
-const Item = List.Item;
-const Brief = Item.Brief;
 
 
 
@@ -26,11 +23,15 @@ export default class App extends React.Component {
 
   render() {
     const {navigation} =this.props
+    const Icon_Contact_scan = require('../../../../assets/2x/contact/scan.png')
+    const Icon_Contact_search = require('../../../../assets/2x/contact/search.png')
+    const Icon_Contact_phone = require('../../../../assets/2x/contact/phone.png')
+
     return (
       <View style={commonStyles.page}>
         <View style={styles.searchBarWrap}>
           <View style={styles.serchWrap}>
-             <Image style={styles.searchImg} source={Icon.Contact.search}/>
+             <Image style={styles.searchImg} source={Icon_Contact_search}/>
              <TextInput
                 style={[styles.searchBar,{padding:0}]}
                 placeholder="手机号/ID号搜索"
@@ -39,7 +40,7 @@ export default class App extends React.Component {
           </View>
         </View>
         <View style={styles.phoneCont}>
-          <Image style={styles.phoneImg} source={Icon.Contact.phone}/>
+          <Image style={styles.phoneImg} source={Icon_Contact_phone}/>
           <Text style={styles.labelName} >添加手机联系人</Text>
         </View>
         <View style={styles.listWrap}>
@@ -50,7 +51,7 @@ export default class App extends React.Component {
           }}>
           <Image 
               style={styles.scanImg}
-              source={Icon.Contact.scan}
+              source={Icon_Contact_scan}
               
               />
           </TouchableOpacity>
@@ -67,7 +68,7 @@ export default class App extends React.Component {
           <View style={styles.list}>
              <Image 
               style={styles.scanImg}
-              source={Icon.Contact.scan}
+              source={Icon_Contact_scan}
               onPress={()=>{
                 alert(1)
               }}

+ 6 - 3
huiliaoAPP/src/pages/Contact/Search/index.js

@@ -20,16 +20,19 @@ export default class App extends React.Component {
   }
   render() {
     const {navigation} =this.props
+    const Icon_Contact_search = require('../../../../assets/2x/contact/search.png')
+    const Icon_Contact_searchBg = require('../../../../assets/2x/contact/searchBg.png')
+    const Icon_Contact_close = require('../../../../assets/2x/contact/close.png')
     return (
      <View >
           <View style={[styles.searchBarWrap,{paddingTop:Device.statusBarHeight,height:Device.navBarHeight}]}>
               <View style={styles.serchWrap}>
-                <Image style={styles.searchImg} source={Icon.Contact.search}/>
+                <Image style={styles.searchImg} source={Icon_Contact_search}/>
                 <TextInput
                     style={[styles.searchBar,{padding:0}]}
                     placeholder="搜索"
                   />
-                <Image style={styles.clear} source={Icon.Contact.close}/>
+                <Image style={styles.clear} source={Icon_Contact_close}/>
               </View>
               <View style={styles.cancel}>
                  <Text style={styles.cancelTitle}
@@ -42,7 +45,7 @@ export default class App extends React.Component {
     
          <View style={styles.tipWrap}>
               <View style={styles.tip1}>
-                  <Image style={styles.iconImg1} source={Icon.Contact.searchBg}/>
+                  <Image style={styles.iconImg1} source={Icon_Contact_searchBg}/>
                   <View style={styles.tipTitleWrap}>
                     <Text style={styles.search}>搜索:</Text>
                     <Text style={styles.searchNum}>13281203999</Text>

+ 8 - 14
huiliaoAPP/src/pages/Contact/components/ContactList/index.js

@@ -9,11 +9,11 @@ import {
   TouchableOpacity,
 } from 'react-native'
 import {connect} from 'react-redux'
-import 'pinyin4js'
-import {Device,Icon} from '../../../../tool'
+import {Device} from '../../../../tool'
 import  SearchBar from '../searchBar'
 import ItemInContact from '../ItemInContact';
 import SeparatorLine from './SeparatorLine';
+import simplePinyin from 'simple-pinyin';
 
 
  class ContactList extends Component {
@@ -56,10 +56,7 @@ import SeparatorLine from './SeparatorLine';
     }
   }
   componentWillMount() {
-
-    // console.log(this.props)
     this._dataConvert(this._pySegSort(this.state.contacts, 'username'))
-
   }
   componentDidMount() {
 
@@ -71,9 +68,7 @@ import SeparatorLine from './SeparatorLine';
     let segs = []
     let curr
     let otherName = []
-
     let t = new Date()
-
     arr.map((a,m)=>{
         let firstKey = a[key][0]
         let reg = new RegExp("^[A-Za-z\u4e00-\u9fa5]+$");
@@ -86,11 +81,11 @@ import SeparatorLine from './SeparatorLine';
 
 
       arr.map((a,m) =>{
-        if(a[key]=='') return 
+        if(a[key]==='') return 
         let firstKey = a[key][0]
-        let nameKey = PinyinHelper.convertToPinyinString(a[key], '', PinyinFormat.FIRST_LETTER)[0].toUpperCase()
-
-        if(nameKey===l.toUpperCase()){
+        let nameKey = simplePinyin(firstKey,{ pinyinOnly: false })
+        if(nameKey.length===0) return 
+        if(nameKey[0][0].toUpperCase()===l.toUpperCase()){
           curr.data.push(JSON.parse(JSON.stringify(a)))
           arr[m][key]=''
         }
@@ -148,6 +143,7 @@ import SeparatorLine from './SeparatorLine';
   render() {
     const { contacts, labels } = this.state
     const {navigation} =this.props.props
+    const Icon_Contact_search = require('../../../../../assets/2x/contact/search.png')
     const scollTo = (item) => {
       // 当viewPosition 为 0 时将它滚动到屏幕顶部,为 1 时将它滚动到屏幕底部,为 0.5 时将它滚动到屏幕中央。
       this._flatList.scrollToIndex({viewPosition:0, index:item.index})
@@ -156,8 +152,6 @@ import SeparatorLine from './SeparatorLine';
       const onPress = () => {
         navigation.navigate({ routeName:"DetailedInfo" })
       }
-
-
       if(item.index===0){
           return (<SearchBar props={this.props.props}/>)
       }
@@ -191,7 +185,7 @@ import SeparatorLine from './SeparatorLine';
                     onPress={()=> scollTo(item)}>
                         <Image 
                         style={{width:Device.scale(12),height:Device.scale(12)}}
-                        source={Icon.Contact.search}></Image>
+                        source={Icon_Contact_search}></Image>
                     </TouchableOpacity>
                   )
               }

+ 3 - 4
huiliaoAPP/src/pages/Contact/components/ItemInContact.js

@@ -1,7 +1,7 @@
 import React from 'react';
 import { Image} from 'react-native';
 import { StyleSheet, Text, View } from 'react-native';
-import {Icon,Device} from '../../../tool'
+import {Device} from '../../../tool'
 export default class App extends React.Component {
 
   constructor(props){
@@ -9,12 +9,11 @@ export default class App extends React.Component {
   }
   render() {
     const {username,telphone,head} = this.props.item
-
-    const {navigation} =this.props.props
+    const Icon_Contact_newFriendIcon = require('../../../../assets/2x/contact/newFriendIcon.png')
     return (
           <View style={styles.tipWrap}>
               <View style={styles.tip1}>
-                  <Image style={styles.iconImg1} source={Icon.Contact.newFriendIcon}/>
+                  <Image style={styles.iconImg1} source={Icon_Contact_newFriendIcon}/>
                   <View style={styles.tipTitleWrap}>
                     <Text style={styles.tipName}>{username}</Text>
                     <Text style={styles.tipNum}>{telphone}</Text>

+ 8 - 12
huiliaoAPP/src/pages/Contact/components/searchBar.js

@@ -2,7 +2,7 @@ import React from 'react';
 import { Image, ScrollView,TextInput} from 'react-native';
 import { StyleSheet, Text, View } from 'react-native';
 import { List } from 'antd-mobile-rn';
-import {Icon,Device} from '../../../tool'
+import {Device} from '../../../tool'
 import {connect} from 'react-redux'
 
 
@@ -15,18 +15,14 @@ class SearchBar extends React.Component {
 
   render() {
     const {navigation} =this.props.props
+    const Icon_Contact_newFriendIcon = require('../../../../assets/2x/contact/newFriendIcon.png')
+    const Icon_Contact_search = require('../../../../assets/2x/contact/search.png')
+    const Icon_Contact_groupChatIcon = require('../../../../assets/2x/contact/groupChatIcon.png')
+
     return (
       <View style={styles.searchBarWrap}>
       <View style={styles.serchWrap}>
-         <Image style={styles.searchImg} source={Icon.Contact.search}/>
-         {/* <TextInput
-            style={[styles.searchBar,{padding:0}]}
-            placeholder="手机号/ID号搜索"
-          
-           onFocus={()=>{
-            navigation.navigate({ routeName:"Search" })
-           }}
-          /> */}
+         <Image style={styles.searchImg} source={Icon_Contact_search}/>
           <Text
              style={[styles.searchBar,{padding:0}]}
              onPress={()=>{
@@ -43,11 +39,11 @@ class SearchBar extends React.Component {
         }}
         
         >
-          <Image style={styles.iconImg} source={Icon.Contact.newFriendIcon}/>
+          <Image style={styles.iconImg} source={Icon_Contact_newFriendIcon}/>
           <Text style={styles.tipTitle}>新的朋友</Text>
         </View>
         <View style={styles.tip1}>
-          <Image style={styles.iconImg} source={Icon.Contact.groupChatIcon}/>
+          <Image style={styles.iconImg} source={Icon_Contact_groupChatIcon}/>
           <Text style={styles.tipTitle}>群聊</Text>
         </View>
       </View>

+ 4 - 14
huiliaoAPP/src/pages/Contact/index.js

@@ -1,10 +1,7 @@
 import React, {Component} from 'react';
 import {
     StyleSheet,
-    Text,
-    View,
     Platform,
-    ScrollView,
     DeviceEventEmitter
     
 } from 'react-native';
@@ -13,19 +10,12 @@ import ContactsWrapper from 'react-native-contacts-wrapper';
 import checkContactsPermission from '../../tool/requestPermission';
 import { connect } from 'react-redux';
 import ContactList from './components/ContactList'
-import searchBar from './components/searchBar'
-import Search from './Search'
-import NewFriend from './NewFriend'
-import FriendsValidation from './FriendsValidation'
-import DetailedInfo from './DetailedInfo'
-import AddFriend from './AddFriend'
-
-import BottomTabNavigator from '../../navigators/BottomTabNavigator'
 if(Platform.OS==='android'){
     checkContactsPermission()
 }
 
-class ContactPicker extends Component {
+
+class Contact extends Component {
     constructor(props){
         super(props)
     }
@@ -109,10 +99,10 @@ const styles = StyleSheet.create({
 
 
 
-ContactPicker.navigationOptions ={
+Contact.navigationOptions ={
         header: null
 }
  const getHeaderButtonClick =(state)=>{
     return {...state.menu}
  }
-export default connect(getHeaderButtonClick)(ContactPicker);
+export default connect(getHeaderButtonClick)(Contact);

+ 4 - 14
huiliaoAPP/src/pages/Login/index.js

@@ -1,21 +1,16 @@
 import React,{Component} from 'react';
 import PropTypes from 'prop-types';
-import {StyleSheet, View,StatusBar,Image ,Text,Dimensions,AsyncStorage} from 'react-native';
+import {StyleSheet, View,StatusBar,Image ,Text,AsyncStorage} from 'react-native';
 import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'
 import {Button} from 'antd-mobile-rn';
 import commonStyle from '../../styles/styles.js';
 import LoginInput from '../../components/LoginInput';
-import {Device ,Icon} from '../../tool'
-
+import {Device} from '../../tool'
 import Leancloud from '../../leancloud'
 
-const {width,height} = Dimensions.get('window');
-
-
 class LoginScreen extends Component{
   static navigationOptions = {title: '登录',header:null}
   async componentWillMount(){
-
     let user = JSON.parse(await AsyncStorage.getItem('USERINFO'))
     if(user) {
       this.setState({
@@ -24,9 +19,7 @@ class LoginScreen extends Component{
       },()=>{
         this.submit()
       })
-     
     }
-
   }
   constructor(props){
     super(props)
@@ -56,12 +49,12 @@ class LoginScreen extends Component{
         >  
         </StatusBar>  
         <View style={styles.bgView}>
-          <Image source={Icon.Login.bg} style={styles.bgViewImage}></Image>
+          <Image source={require('../../../assets/2x/Login/bg.png')} style={styles.bgViewImage}></Image>
         </View>
 
         <View style={[styles.form,{}]}>
             <Text style={{fontSize:Device.scale(17),color:'#b3b3b3',marginTop:Device.scale(10)}}>登录</Text>
-            <Image source={Icon.Login.line} style={{height:2,width:Device.scale(60),marginTop:Device.scale(10)}}></Image>
+            <Image source={require('../../../assets/2x/Login/line.png')} style={{height:2,width:Device.scale(60),marginTop:Device.scale(10)}}></Image>
             <LoginInput type='text' style={{marginTop:Device.scale(45)}}
               onChange={(telphone)=>{
                 this.setState({
@@ -109,9 +102,6 @@ const styles = StyleSheet.create({
     position:'absolute',
     padding:Device.scale(26),
     alignItems:'center',
-    // borderWidth:1,
-    // borderColor:'red',
-    // borderStyle:'solid'
   },
   btn:{
     width:Device.scale(280),

+ 66 - 33
huiliaoAPP/src/pages/Message/index.js

@@ -1,41 +1,74 @@
-import React,{Component} from 'react';
-import { View ,Text,StatusBar } from 'react-native';
+import React, { Component } from 'react';
+import { ListView ,View,Text,Image} from 'react-native';
+import { Container, Content, Button, List, ListItem} from 'native-base';
+import {Icon} from '../../tool'
+const datas = [
+  1,2,3,4,5,6,7,8,9,10
+];
+export default class SwipeableListExample extends Component {
+  constructor(props) {
+    super(props);
+    this.ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
+    this.state = {
+      basic: true,
+      listViewData: datas,
+    };
+  }
+  deleteRow(secId, rowId, rowMap) {
+    rowMap[`${secId}${rowId}`].props.closeRow();
+    const newData = [...this.state.listViewData];
+    newData.splice(rowId, 1);
+    this.setState({ listViewData: newData });
+  }
+  render() {
+    const ds = new ListView.DataSource({ rowHasChanged: (r1, r2) => r1 !== r2 });
+    const Icon_icon = require('../../../assets/icon.png')
+    return (
+      <Container>
+        <Content>
+          <List
+            rightOpenValue={-120}
+            dataSource={this.ds.cloneWithRows(this.state.listViewData)}
+            disableRightSwipe={true}
+            renderRow={data =>
+              <ListItem style={{height:65,position:'relative',padding:0}}>
+                <View style={{marginLeft:10}}>
+                    <Image source={Icon_icon} style={{width:45,height:45}}></Image>
+                </View>
+                <View style={{justifyContent:'space-around',height:45,marginLeft:10}}>
+                    <Text style={{fontSize:16,color:'#000'}}>文杰欧巴{data}</Text>
+                    <Text style={{fontSize:14,color:'rgba(0,0,0,0.6)'}}> 这个是最后一条消息?</Text>
+                </View>
+                <View style={{position:"absolute",right:10,top:10}}>
+                    <Text>2018.1.1</Text>
+                </View>
+              </ListItem>}
+    
+            renderRightHiddenRow={(data, secId, rowId, rowMap) =>
+             <View style={{flexDirection:'row'}}>
+                <Button full onPress={() => {
+                    this.render()
 
+                }} style={{height:65,width:60}}>
+                    <Text>置顶</Text>
 
-class Message extends Component {
-    constructor(props){
-        super(props)
-    }
-    componentWillMount(){
+                </Button>
+                <Button full danger onPress={_ => this.deleteRow(secId, rowId, rowMap)} style={{height:65,width:60}}>
+                    <Text>删除</Text>
+                </Button>
+             </View>}
+          />
+        </Content>
+      </Container>
+    );
+  }
+}
 
-        console.log('message')
-        
+// export default Message;
 
-    }
-    render(){
-        return (
-            <View>
-                <StatusBar  
+{/* <StatusBar  
                 animated={true} //指定状态栏的变化是否应以动画形式呈现。目前支持这几种样式:backgroundColor, barStyle和hidden    
                 translucent={false}//指定状态栏是否透明。设置为true时,应用会在状态栏之下绘制(即所谓“沉浸式”——被状态栏遮住一部分)。常和带有半透明背景色的状态栏搭配使用。  
                 barStyle={'light-content'} // enum('default', 'light-content', 'dark-content')   
                 >  
-                </StatusBar>  
-                <Text>Message</Text>
-            </View>
-        )
-    }
-}
-Message.navigationOptions = {
-    // title: '登录',
-    // header:null,
-    // // headerMode: 'none',
-    // cardStack: {
-    //     gesturesEnabled: true
-    // }
-  
-  };
-
-
-export default Message;
-
+                </StatusBar>   */}

+ 0 - 67
huiliaoAPP/src/pages/Mine/Camera/index.js

@@ -1,67 +0,0 @@
-import React, { Component } from 'react';
-import {
-  AppRegistry,
-  Dimensions,
-  StyleSheet,
-  Text,
-  TouchableOpacity,
-  View
-} from 'react-native';
-import { RNCamera } from 'react-native-camera';
-
-export default class BadInstagramCloneApp extends Component {
-  render() {
-    return (
-      <View style={styles.container}>
-        <RNCamera
-            ref={ref => {
-              this.camera = ref;
-            }}
-            style = {styles.preview}
-            type={RNCamera.Constants.Type.back}
-            flashMode={RNCamera.Constants.FlashMode.on}
-            permissionDialogTitle={'Permission to use camera'}
-            permissionDialogMessage={'We need your permission to use your camera phone'}
-        />
-        <View style={{flex: 0, flexDirection: 'row', justifyContent: 'center',}}>
-        <TouchableOpacity
-            onPress={this.takePicture.bind(this)}
-            style = {styles.capture}
-        >
-            <Text style={{fontSize: 14}}> 拍摄 </Text>
-        </TouchableOpacity>
-        </View>
-      </View>
-    );
-  }
-
-  takePicture = async function() {
-    if (this.camera) {
-      const options = { quality: 0.5, base64: true };
-      const data = await this.camera.takePictureAsync(options)
-      console.log(data.uri);
-    }
-  };
-}
-
-const styles = StyleSheet.create({
-  container: {
-    flex: 1,
-    flexDirection: 'column',
-    backgroundColor: 'black'
-  },
-  preview: {
-    flex: 1,
-    justifyContent: 'flex-end',
-    alignItems: 'center'
-  },
-  capture: {
-    flex: 0,
-    backgroundColor: '#fff',
-    borderRadius: 5,
-    padding: 15,
-    paddingHorizontal: 20,
-    alignSelf: 'center',
-    margin: 20
-  }
-});

+ 0 - 24
huiliaoAPP/src/pages/Mine/ImagePicker/index.js

@@ -1,24 +0,0 @@
-import React,{Component} from 'react';
-import { View ,Text } from 'react-native';
-
-
-class Contact extends Component {
-    constructor(props){
-        super(props)
-    }
-    componentWillMount(){
-
-        console.log('contact')
-
-    }
-    render(){
-        return (
-            <View>
-                <Text>Contact</Text>
-            </View>
-        )
-    }
-}
-
-export default Contact;
-

+ 6 - 3
huiliaoAPP/src/pages/Mine/Infomation/index.js

@@ -8,7 +8,7 @@ import ImagePicker from 'react-native-image-crop-picker';
 import commonStyle from '../../../styles/styles.js';
 // import FileSystem from 'react-native-filesystem';
 
-import {Device ,Icon} from '../../../tool';
+import {Device} from '../../../tool';
 
 
 
@@ -100,13 +100,16 @@ class Infomation extends Component {
     render(){
         const {UserAction } =this.props
         const { id ,username ,head,mobilePhoneNumber} =UserAction
+        const Icon_icon = require('../../../../assets/icon.png')
+        const Icon_Mine_code = require('../../../../assets/2x/code.png')
+      
         if(head){
              source = {
                 uri:head,
                 cache: 'force-cache'
             }
         }else{
-            source = Icon.icon
+            source = Icon_icon
         }
         return (
             <View style={commonStyle.page}>
@@ -165,7 +168,7 @@ class Infomation extends Component {
                     onClick={() => {this.push('QrCode')}}
                     extra={
                         <Image
-                        source={Icon.Mine.code}
+                        source={Icon_Mine_code}
                         style={{ width: Device.scale(29), height: Device.scale(29) }}
                         />
                     }

+ 1 - 1
huiliaoAPP/src/pages/Mine/Notice/index.js

@@ -3,7 +3,7 @@ import { ScrollView} from 'react-native';
 import { StyleSheet, Text, View } from 'react-native';
 import { List,Switch } from 'antd-mobile-rn';
 import commonStyle from '../../../styles/styles.js';
-import Device from '../../../tool/Device';
+import {Device} from '../../../tool';
 const Item = List.Item;
 const Brief = Item.Brief;
 

+ 1 - 1
huiliaoAPP/src/pages/Mine/QrCode/index.js

@@ -2,7 +2,7 @@ import React,{Component} from 'react';
 import { StyleSheet, Text, View ,Image} from 'react-native';
 import QRCode from 'react-native-qrcode';
 import {connect} from 'react-redux'
-import Device from '../../../tool/Device';
+import {Device} from '../../../tool';
 
 class QrCode extends Component {
     constructor(props){

+ 1 - 1
huiliaoAPP/src/pages/Mine/ReName/index.js

@@ -4,7 +4,7 @@ import { List ,InputItem, WingBlank,Button} from 'antd-mobile-rn';
 import commonStyle from '../../../styles/styles.js';
 import {connect} from 'react-redux'
 import Leancloud from '../../../leancloud'
-import Device from '../../../tool/Device'
+import {Device} from '../../../tool'
 const Item = List.Item;
 const Brief = Item.Brief;
 

+ 1 - 1
huiliaoAPP/src/pages/Mine/RePassword/index.js

@@ -5,7 +5,7 @@ import { List ,InputItem, WhiteSpace, WingBlank,Button,Toast} from 'antd-mobile-
 import {connect} from 'react-redux';
 import commonStyle from '../../../styles/styles.js';
 import Leancloud from '../../../leancloud/index.js';
-import Device from '../../../tool/Device'
+import {Device} from '../../../tool'
 const Item = List.Item;
 const Brief = Item.Brief;
 

+ 1 - 1
huiliaoAPP/src/pages/Mine/Setting/index.js

@@ -4,7 +4,7 @@ import { StyleSheet, Text, View,AsyncStorage } from 'react-native';
 import { List,Button } from 'antd-mobile-rn';
 import commonStyle from '../../../styles/styles.js';
 
-import Device from '../../../tool/Device'
+import {Device} from '../../../tool'
 
 const Item = List.Item;
 

+ 8 - 4
huiliaoAPP/src/pages/Mine/index.js

@@ -3,7 +3,7 @@ import { View ,Text,Image,StyleSheet} from 'react-native';
 import commonStyle from '../../styles/styles.js';
 import { connect } from 'react-redux';
 import { List } from 'antd-mobile-rn';
-import {Device,Icon} from '../../tool'
+import {Device} from '../../tool'
 const Item = List.Item;
 const Brief = Item.Brief;
 
@@ -18,6 +18,10 @@ class Mine extends Component {
     render(){
         const {UserAction } =this.props
         const {username,id,head} =UserAction
+
+        const Icon_icon = require('../../../assets/icon.png')
+        const Icon_Mine_set = require('../../../assets/2x/set.png')
+        const Icon_Mine_code = require('../../../assets/2x/code.png')
         let source={}
         if(head){
              source = {
@@ -25,7 +29,7 @@ class Mine extends Component {
                 cache: 'force-cache'
             }
         }else{
-            source = Icon.icon
+            source = Icon_icon
         }
         
         return (
@@ -44,7 +48,7 @@ class Mine extends Component {
                         }
                         extra={
                         <Image
-                            source={Icon.Mine.code}
+                            source={Icon_Mine_code}
                             style={styles.code}
                         />
                         }
@@ -61,7 +65,7 @@ class Mine extends Component {
                         onClick={()=>{this.push('Setting')}}
                         thumb={
                             <Image
-                             source={Icon.Mine.set}
+                             source={Icon_Mine_set}
                               style={
                                   styles.icon
                               }

+ 42 - 44
huiliaoAPP/src/tool/icon.js

@@ -1,48 +1,46 @@
+console.log(1)
 
+//login
+export const Icon_Login_bg = require('../../assets/2x/Login/bg.png')
+export const Icon_Login_line = require('../../assets/2x/Login/line.png')
+export const Icon_Login_lock = require('../../assets/2x/Login/lock.png')
+export const Icon_Login_lockClick = require('../../assets/2x/Login/lock-click.png')
+export const Icon_Login_phone = require('../../assets/2x/Login/phone.png')
+export const Icon_Login_phoneClick = require('../../assets/2x/Login/phone-click.png')
 
-const Icon ={
-    return:require('../../assets/2x/return.png'),
-    in:require('../../assets/2x/in.png'),
-    icon:require('../../assets/icon.png'),
-    Login:{
-        bg:require('../../assets/2x/Login/bg.png'),
-        line:require('../../assets/2x/Login/line.png'),
-        lock:require('../../assets/2x/Login/lock.png'),
-        lockClick:require('../../assets/2x/Login/lock-click.png'),
-        phone:require('../../assets/2x/Login/phone.png'),
-        phoneClick:require('../../assets/2x/Login/phone-click.png')
-    },
-    Mine:{
-        set:require('../../assets/2x/set.png'),
-        code:require('../../assets/2x/code.png'),
-        codeBg:require('../../assets/2x/code-bg.png')
+//all
+export const Icon_return = require('../../assets/2x/return.png')
+export const Icon_in = require('../../assets/2x/in.png')
+export const Icon_icon = require('../../assets/icon.png')
 
-    },
-    Message:{
-        add:require('../../assets/2x/message/add.png')
-    },
-    Contact:{
-        newFriendIcon:require('../../assets/2x/contact/newFriendIcon.png'),
-        scan:require('../../assets/2x/contact/scan.png'),
-        search:require('../../assets/2x/contact/search.png'),
-        groupChatIcon:require('../../assets/2x/contact/groupChatIcon.png'),
-        phone:require('../../assets/2x/contact/phone.png'),
-        phoneClick:require('../../assets/2x/contact/phone-click.png'),
-        phoneCall:require('../../assets/2x/contact/phoneCall.png'),
-        searchBg:require('../../assets/2x/contact/searchBg.png'),
-        addClick:require('../../assets/2x/contact/add-click.png'),
-        add:require('../../assets/2x/contact/add.png'),
-        close:require('../../assets/2x/contact/close.png'),
-        code:require('../../assets/2x/contact/code.png')
-    },
-    TabIcon:{
-        mine:require('../../assets/tabicon/mine.png'),
-        mineClick:require('../../assets/tabicon/mineClick.png'),
-        news:require('../../assets/tabicon/news.png'),
-        newsClick:require('../../assets/tabicon/newsClick.png'),
-        phoneClick:require('../../assets/tabicon/phoneClick.png'),
-        phone:require('../../assets/tabicon/phone.png'),
-    }
-}
+//mine
+export const Icon_Mine_set = require('../../assets/2x/set.png')
+export const Icon_Mine_code = require('../../assets/2x/code.png')
+export const Icon_Mine_codeBg = require('../../assets/2x/code-bg.png')
+console.log(2)
+//message
+export const Icon_Message_add = require('../../assets/2x/message/add.png')
 
-export default Icon
+//contact
+export const Icon_Contact_newFriendIcon = require('../../assets/2x/contact/newFriendIcon.png')
+export const Icon_Contact_scan = require('../../assets/2x/contact/scan.png')
+export const Icon_Contact_search = require('../../assets/2x/contact/search.png')
+export const Icon_Contact_groupChatIcon = require('../../assets/2x/contact/groupChatIcon.png')
+export const Icon_Contact_phone = require('../../assets/2x/contact/phone.png')
+export const Icon_Contact_phoneClick = require('../../assets/2x/contact/phone-click.png')
+export const Icon_Contact_phoneCall = require('../../assets/2x/contact/phoneCall.png')
+export const Icon_Contact_searchBg = require('../../assets/2x/contact/searchBg.png')
+export const Icon_Contact_addClick = require('../../assets/2x/contact/add-click.png')
+export const Icon_Contact_add = require('../../assets/2x/contact/add.png')
+export const Icon_Contact_close = require('../../assets/2x/contact/close.png')
+export const Icon_Contact_code = require('../../assets/2x/contact/code.png')
+
+//tabicon
+export const Icon_TabIcon_mine = require('../../assets/tabicon/mine.png')
+export const Icon_TabIconmineClick = require('../../assets/tabicon/mineClick.png')
+export const Icon_TabIconnews = require('../../assets/tabicon/news.png')
+export const Icon_TabIconnewsClick = require('../../assets/tabicon/newsClick.png')
+export const Icon_TabIconphoneClick = require('../../assets/tabicon/phoneClick.png')
+export const Icon_TabIconphone = require('../../assets/tabicon/phone.png')
+
+console.log(3)

+ 1 - 3
huiliaoAPP/src/tool/index.js

@@ -1,10 +1,8 @@
 import Device from './Device'
 import requestPermission from './requestPermission';
-import Icon from './icon';
 
 
 export {
     Device,
-    requestPermission,
-    Icon
+    requestPermission
 }

+ 159 - 19
huiliaoAPP/yarn.lock

@@ -744,7 +744,7 @@ ansi-regex@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
 
-ansi-styles@^2.2.1:
+ansi-styles@^2.1.0, ansi-styles@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
 
@@ -1555,7 +1555,7 @@ base64-js@1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
 
-base64-js@^1.0.2, base64-js@^1.1.2, base64-js@^1.2.0, base64-js@^1.2.3:
+base64-js@^1.1.2, base64-js@^1.2.0, base64-js@^1.2.3:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
 
@@ -1591,6 +1591,10 @@ bluebird@^2.10.2:
   version "2.11.0"
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
 
+blueimp-md5@^2.5.0:
+  version "2.10.0"
+  resolved "http://registry.npm.taobao.org/blueimp-md5/download/blueimp-md5-2.10.0.tgz#02f0843921f90dca14f5b8920a38593201d6964d"
+
 body-parser@1.18.2:
   version "1.18.2"
   resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
@@ -1687,13 +1691,6 @@ buffer-from@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
 
-buffer@^5.2.0:
-  version "5.2.0"
-  resolved "http://registry.npm.taobao.org/buffer/download/buffer-5.2.0.tgz#53cf98241100099e9eeae20ee6d51d21b16e541e"
-  dependencies:
-    base64-js "^1.0.2"
-    ieee754 "^1.1.4"
-
 builtin-modules@^1.0.0:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
@@ -1770,6 +1767,16 @@ center-align@^0.1.1:
     align-text "^0.1.3"
     lazy-cache "^1.0.3"
 
+chalk@1.1.1:
+  version "1.1.1"
+  resolved "http://registry.npm.taobao.org/chalk/download/chalk-1.1.1.tgz#509afb67066e7499f7eb3535c77445772ae2d019"
+  dependencies:
+    ansi-styles "^2.1.0"
+    escape-string-regexp "^1.0.2"
+    has-ansi "^2.0.0"
+    strip-ansi "^3.0.0"
+    supports-color "^2.0.0"
+
 chalk@^1.1.1, chalk@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@@ -1895,6 +1902,12 @@ collection-visit@^1.0.0:
     map-visit "^1.0.0"
     object-visit "^1.0.0"
 
+color-convert@^1.8.2:
+  version "1.9.3"
+  resolved "http://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+  dependencies:
+    color-name "1.1.3"
+
 color-convert@^1.9.0:
   version "1.9.2"
   resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147"
@@ -1905,10 +1918,28 @@ color-name@1.1.1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689"
 
+color-name@1.1.3, color-name@^1.0.0:
+  version "1.1.3"
+  resolved "http://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+
+color-string@^1.4.0:
+  version "1.5.3"
+  resolved "http://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
+  dependencies:
+    color-name "^1.0.0"
+    simple-swizzle "^0.2.2"
+
 color-support@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
 
+color@~1.0.3:
+  version "1.0.3"
+  resolved "http://registry.npm.taobao.org/color/download/color-1.0.3.tgz#e48e832d85f14ef694fb468811c2d5cfe729b55d"
+  dependencies:
+    color-convert "^1.8.2"
+    color-string "^1.4.0"
+
 colour@~0.7.1:
   version "0.7.1"
   resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778"
@@ -2776,6 +2807,13 @@ fs-extra@^1.0.0:
     jsonfile "^2.1.0"
     klaw "^1.0.0"
 
+fs-extra@^2.0.0:
+  version "2.1.2"
+  resolved "http://registry.npm.taobao.org/fs-extra/download/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35"
+  dependencies:
+    graceful-fs "^4.1.2"
+    jsonfile "^2.1.0"
+
 fs-extra@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
@@ -3059,6 +3097,10 @@ hoek@4.x.x:
   version "4.2.1"
   resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
 
+hoist-non-react-statics@^1.0.5:
+  version "1.2.0"
+  resolved "http://registry.npm.taobao.org/hoist-non-react-statics/download/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
+
 hoist-non-react-statics@^2.2.0, hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0:
   version "2.5.5"
   resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
@@ -3152,10 +3194,6 @@ idx@^2.1.0:
   version "2.4.0"
   resolved "https://registry.yarnpkg.com/idx/-/idx-2.4.0.tgz#e89e6650c889a44bf889f79d47f40fe09b4eeaa3"
 
-ieee754@^1.1.4:
-  version "1.1.12"
-  resolved "http://registry.npm.taobao.org/ieee754/download/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
-
 ignore-walk@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
@@ -3271,6 +3309,10 @@ is-arrayish@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
 
+is-arrayish@^0.3.1:
+  version "0.3.2"
+  resolved "http://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
+
 is-buffer@^1.1.5, is-buffer@~1.1.1:
   version "1.1.6"
   resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
@@ -3749,6 +3791,10 @@ jest-mock@^23.2.0:
   version "23.2.0"
   resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134"
 
+jest-react-native@^18.0.0:
+  version "18.0.0"
+  resolved "http://registry.npm.taobao.org/jest-react-native/download/jest-react-native-18.0.0.tgz#77dd909f069324599f227c58c61c2e62168726ba"
+
 jest-regex-util@^23.3.0:
   version "23.3.0"
   resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5"
@@ -4209,7 +4255,7 @@ lodash.throttle@^4.1.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
 
-lodash@4.x, lodash@^4.13.1, lodash@^4.14.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1:
+lodash@4.17.10, lodash@4.x, lodash@^4.0.0, lodash@^4.10.1, lodash@^4.11.1, lodash@^4.13.1, lodash@^4.14.1, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1:
   version "4.17.10"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
 
@@ -4691,6 +4737,34 @@ nanomatch@^1.2.9:
     snapdragon "^0.8.1"
     to-regex "^3.0.1"
 
+native-base-shoutem-theme@0.2.2:
+  version "0.2.2"
+  resolved "http://registry.npm.taobao.org/native-base-shoutem-theme/download/native-base-shoutem-theme-0.2.2.tgz#5823310455fe391adf72236469c039fd44f56a20"
+  dependencies:
+    hoist-non-react-statics "^1.0.5"
+    lodash "^4.10.1"
+    prop-types "^15.5.10"
+
+native-base@^2.8.0:
+  version "2.8.0"
+  resolved "http://registry.npm.taobao.org/native-base/download/native-base-2.8.0.tgz#6043d01dd6f79540105f07afea456d5c01d72ebd"
+  dependencies:
+    blueimp-md5 "^2.5.0"
+    clamp "^1.0.1"
+    color "~1.0.3"
+    fs-extra "^2.0.0"
+    jest-react-native "^18.0.0"
+    lodash "4.17.10"
+    native-base-shoutem-theme "0.2.2"
+    print-message "^2.1.0"
+    prop-types "^15.5.10"
+    react-native-drawer "2.5.0"
+    react-native-easy-grid "0.2.0"
+    react-native-keyboard-aware-scroll-view "0.5.0"
+    react-native-vector-icons "4.6.0"
+    react-tween-state "^0.1.5"
+    tween-functions "^1.0.1"
+
 natural-compare@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -5132,10 +5206,6 @@ pinkie@^2.0.0:
   version "2.0.4"
   resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
 
-pinyin4js@^1.3.5:
-  version "1.3.5"
-  resolved "http://registry.npm.taobao.org/pinyin4js/download/pinyin4js-1.3.5.tgz#9c96eea297bcd6e85856173325aa242a6c9337a1"
-
 pirates@^3.0.1:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/pirates/-/pirates-3.0.2.tgz#7e6f85413fd9161ab4e12b539b06010d85954bb9"
@@ -5213,6 +5283,12 @@ pretty-format@^4.2.1:
   version "4.3.1"
   resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.3.1.tgz#530be5c42b3c05b36414a7a2a4337aa80acd0e8d"
 
+print-message@^2.1.0:
+  version "2.1.0"
+  resolved "http://registry.npm.taobao.org/print-message/download/print-message-2.1.0.tgz#b5588ed08b0e1bf77ac7bcb5cb78004afaf9a891"
+  dependencies:
+    chalk "1.1.1"
+
 private@^0.1.6, private@^0.1.8:
   version "0.1.8"
   resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
@@ -5445,6 +5521,10 @@ react-lifecycles-compat@^3, react-lifecycles-compat@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
 
+react-native-audio@^4.1.3:
+  version "4.1.3"
+  resolved "http://registry.npm.taobao.org/react-native-audio/download/react-native-audio-4.1.3.tgz#cab41703419f57c6d4de9c6bfd27f8fc54a4acaf"
+
 react-native-camera-roll-picker@^1.2.1:
   version "1.2.3"
   resolved "https://registry.yarnpkg.com/react-native-camera-roll-picker/-/react-native-camera-roll-picker-1.2.3.tgz#b117fd3a2b9012dcccee1261a9bc427226b8d6d2"
@@ -5490,6 +5570,19 @@ react-native-drawer-layout@1.3.2, react-native-drawer-layout@~1.3.0:
   dependencies:
     react-native-dismiss-keyboard "1.0.0"
 
+react-native-drawer@2.5.0:
+  version "2.5.0"
+  resolved "http://registry.npm.taobao.org/react-native-drawer/download/react-native-drawer-2.5.0.tgz#022cba5c0516126a9fc9cce3185cb46c644b51c4"
+  dependencies:
+    prop-types "^15.5.8"
+    tween-functions "^1.0.1"
+
+react-native-easy-grid@0.2.0:
+  version "0.2.0"
+  resolved "http://registry.npm.taobao.org/react-native-easy-grid/download/react-native-easy-grid-0.2.0.tgz#4718031aa1baaa2613b829fc807da288eb0d2797"
+  dependencies:
+    lodash "^4.11.1"
+
 react-native-filesystem@^0.1.0:
   version "0.1.0"
   resolved "http://registry.npm.taobao.org/react-native-filesystem/download/react-native-filesystem-0.1.0.tgz#b66eebbfa046ac12cb5d2503eda78641fca58c23"
@@ -5502,6 +5595,13 @@ react-native-iphone-x-helper@^1.0.1:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.0.3.tgz#7a2f1e0574e899a0f1d426e6167fd98990083214"
 
+react-native-keyboard-aware-scroll-view@0.5.0:
+  version "0.5.0"
+  resolved "http://registry.npm.taobao.org/react-native-keyboard-aware-scroll-view/download/react-native-keyboard-aware-scroll-view-0.5.0.tgz#57ab933089375bf62f4324797e8be949ad97849d"
+  dependencies:
+    prop-types "^15.6.0"
+    react-native-iphone-x-helper "^1.0.1"
+
 react-native-keyboard-aware-scroll-view@^0.7.0:
   version "0.7.0"
   resolved "https://registry.yarnpkg.com/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.7.0.tgz#70cf2c53b3610c210421e1a70653d9c03cf101d6"
@@ -5557,7 +5657,11 @@ react-native-scripts@^1.3.1:
     rimraf "^2.6.1"
     xdl "48.1.4"
 
-react-native-swipeout@^2.2.2:
+react-native-sound@^0.10.9:
+  version "0.10.9"
+  resolved "http://registry.npm.taobao.org/react-native-sound/download/react-native-sound-0.10.9.tgz#6b00b0f4afd017cde09fbb9d171df1b5d5b851a8"
+
+react-native-swipeout@^2.2.2, react-native-swipeout@^2.3.6:
   version "2.3.6"
   resolved "https://registry.yarnpkg.com/react-native-swipeout/-/react-native-swipeout-2.3.6.tgz#47dac8a835825cf3f2eef9e495574a3d9ab6d3fa"
   dependencies:
@@ -5577,6 +5681,14 @@ react-native-tab-view@^1.0.0:
   dependencies:
     prop-types "^15.6.1"
 
+react-native-vector-icons@4.6.0:
+  version "4.6.0"
+  resolved "http://registry.npm.taobao.org/react-native-vector-icons/download/react-native-vector-icons-4.6.0.tgz#e4014311ffa6de397d914ffc31b7097a874cc8d5"
+  dependencies:
+    lodash "^4.0.0"
+    prop-types "^15.5.10"
+    yargs "^8.0.2"
+
 react-native@0.56.0:
   version "0.56.0"
   resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.56.0.tgz#66686f781ec39a44376aadd4bbc55c8573ab61e5"
@@ -6274,6 +6386,10 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
 
+simple-pinyin@^3.0.2:
+  version "3.0.2"
+  resolved "http://registry.npm.taobao.org/simple-pinyin/download/simple-pinyin-3.0.2.tgz#cb67789a4931fc73bf865632fefc6dbc02a05f2d"
+
 simple-plist@^0.2.1:
   version "0.2.1"
   resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-0.2.1.tgz#71766db352326928cf3a807242ba762322636723"
@@ -6282,6 +6398,12 @@ simple-plist@^0.2.1:
     bplist-parser "0.1.1"
     plist "2.0.1"
 
+simple-swizzle@^0.2.2:
+  version "0.2.2"
+  resolved "http://registry.npm.taobao.org/simple-swizzle/download/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
+  dependencies:
+    is-arrayish "^0.3.1"
+
 sisteransi@^0.1.1:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce"
@@ -7294,6 +7416,24 @@ yargs@^3.10.0:
     window-size "^0.1.4"
     y18n "^3.2.0"
 
+yargs@^8.0.2:
+  version "8.0.2"
+  resolved "http://registry.npm.taobao.org/yargs/download/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
+  dependencies:
+    camelcase "^4.1.0"
+    cliui "^3.2.0"
+    decamelize "^1.1.1"
+    get-caller-file "^1.0.1"
+    os-locale "^2.0.0"
+    read-pkg-up "^2.0.0"
+    require-directory "^2.1.1"
+    require-main-filename "^1.0.1"
+    set-blocking "^2.0.0"
+    string-width "^2.0.0"
+    which-module "^2.0.0"
+    y18n "^3.2.1"
+    yargs-parser "^7.0.0"
+
 yargs@^9.0.0:
   version "9.0.1"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c"