解约、解绑
authorqiaowei <jov123@163.com>
Thu, 5 Dec 2019 03:40:00 +0000 (11:40 +0800)
committerqiaowei <jov123@163.com>
Thu, 5 Dec 2019 03:40:00 +0000 (11:40 +0800)
98 files changed:
config.xml
package.json
platforms/android/app/build.gradle
platforms/android/app/release/app-release.apk
platforms/android/app/release/output.json
platforms/android/app/src/main/AndroidManifest.xml
platforms/android/app/src/main/assets/www/cordova_plugins.js
platforms/android/app/src/main/assets/www/js/main.js
platforms/android/app/src/main/assets/www/js/qrcode.js
platforms/android/app/src/main/assets/www/js/server.js
platforms/android/app/src/main/assets/www/main.html
platforms/android/app/src/main/assets/www/qrcode.html
platforms/android/app/src/main/java/com/QRScanner_Back.java_back [new file with mode: 0755]
platforms/android/platform_www/cordova_plugins.js
platforms/android/platform_www/plugins/cordova-plugin-crop/www/crop.js [new file with mode: 0644]
platforms/android/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js [new file with mode: 0644]
platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js [new file with mode: 0644]
platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js [new file with mode: 0644]
platforms/browser/platform_www/plugins/cordova-plugin-crop/www/crop.js [new file with mode: 0644]
platforms/browser/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js [new file with mode: 0644]
platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js [new file with mode: 0644]
platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js [new file with mode: 0644]
platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/browser/FileTransfer.js [new file with mode: 0644]
platforms/ios/dlapp.xcarchive/Info.plist
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x~ipad.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@3x.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20~ipad.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x~ipad.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@3x.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29~ipad.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x~ipad.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@3x.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40~ipad.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@2x.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@3x.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76@2x~ipad.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76~ipad.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon83.5x83.5@2x~ipad.png
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Assets.car
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftAVFoundation.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCore.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreAudio.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreFoundation.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreGraphics.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreImage.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreMedia.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDarwin.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDispatch.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftFoundation.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftMetal.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftObjectiveC.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftQuartzCore.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftSwiftOnoneSupport.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftUIKit.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftos.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftsimd.dylib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/MainViewController.nib
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/_CodeSignature/CodeResources
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/config.xml
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/dlapp
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/bindcheck.html
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/cardinfor.html
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/cordova_plugins.js
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/bindcard.js
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/bindcheck.js
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/cardinfor.js
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/main.js
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/qrcode.js
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/register.js
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/scan.js
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/server.js
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/js/signxycheck.js
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/main.html
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/my.html [new file with mode: 0644]
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/plugins/cordova-plugin-brightness/www/brightness.js [new file with mode: 0644]
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/qrcode.html
platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/signxycheck.html
platforms/ios/dlapp.xcodeproj/project.pbxproj
platforms/ios/dlapp/dlapp-Info.plist
plugins/android.json
plugins/browser.json
plugins/fetch.json
plugins/ios.json
release-key-1.keystore [new file with mode: 0644]
www/cardinfor.html
www/js/cardinfor.js
www/js/main.js
www/js/qrcode.js
www/js/server.js
www/js/signxycheck.js
www/main.html
www/my.html [new file with mode: 0644]
www/qrcode.html
www/signxycheck.html

index b657713..2eab5ec 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version='1.0' encoding='utf-8'?>
-<widget id="com.dalicitycard.app" version="1.0.5" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+<widget id="com.dalicitycard.app" version="1.0.6" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
     <name short="大理市民卡">dlapp</name>
     <description>
         A sample Apache Cordova application that responds to the deviceready event.
index 7f29550..e358ecb 100644 (file)
@@ -56,7 +56,8 @@
       },
       "cordova-plugin-app-version": {},
       "cordova-plugin-wkwebview-engine": {},
-      "cordova-plugin-brightness": {}
+      "cordova-plugin-brightness": {},
+      "cordova-plugin-file": {}
     },
     "platforms": [
       "android",
index 41524d3..13c0960 100644 (file)
@@ -165,23 +165,22 @@ task cdvPrintProps {
 
 android {
     defaultConfig {
-        applicationId privateHelpers.extractStringFromManifest("package")
+        applicationId 'com.dalicitycard.app'
         if (cdvMinSdkVersion != null) {
             minSdkVersion cdvMinSdkVersion
         }
-        minSdkVersion 24
+        minSdkVersion 23
         ndk {
             abiFilters "armeabi"
         }
-        versionCode 10
-        versionName '1.3.6'
-        versionNameSuffix 'v1'
+        versionCode 11
+        versionName '1.3.7'
         targetSdkVersion 26
     }
     lintOptions {
-        abortOnError false;
+        abortOnError false
     }
-    compileSdkVersion 24
+    compileSdkVersion 26
     buildToolsVersion '28.0.3'
     // This code exists for Crosswalk and other Native APIs.
     // By default, we multiply the existing version code in the
index be551b3..e3b9bf3 100644 (file)
Binary files a/platforms/android/app/release/app-release.apk and b/platforms/android/app/release/app-release.apk differ
index 8aa304e..67e22e8 100644 (file)
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":10,"versionName":"1.3.6v1","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":11,"versionName":"1.3.7","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
index 93b3137..4591837 100644 (file)
@@ -91,7 +91,6 @@
     <uses-permission android:name="com.dalicitycard.app.permission.JPUSH_MESSAGE" />
     <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
     <uses-permission android:name="android.permission.GET_TASKS" />
     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 </manifest>
index 951ded8..fb0347b 100644 (file)
@@ -343,6 +343,38 @@ cordova.define('cordova/plugin_list', function(require, exports, module) {
       "clobbers": [
         "cordova.plugins.brightness"
       ]
+    },
+    {
+      "id": "cordova-plugin-file-opener2.FileOpener2",
+      "file": "plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js",
+      "pluginId": "cordova-plugin-file-opener2",
+      "clobbers": [
+        "cordova.plugins.fileOpener2"
+      ]
+    },
+    {
+      "id": "cordova-plugin-file-transfer.FileTransferError",
+      "file": "plugins/cordova-plugin-file-transfer/www/FileTransferError.js",
+      "pluginId": "cordova-plugin-file-transfer",
+      "clobbers": [
+        "window.FileTransferError"
+      ]
+    },
+    {
+      "id": "cordova-plugin-file-transfer.FileTransfer",
+      "file": "plugins/cordova-plugin-file-transfer/www/FileTransfer.js",
+      "pluginId": "cordova-plugin-file-transfer",
+      "clobbers": [
+        "window.FileTransfer"
+      ]
+    },
+    {
+      "id": "cordova-plugin-crop.CropPlugin",
+      "file": "plugins/cordova-plugin-crop/www/crop.js",
+      "pluginId": "cordova-plugin-crop",
+      "clobbers": [
+        "plugins.crop"
+      ]
     }
   ];
   module.exports.metadata = {
@@ -363,6 +395,9 @@ cordova.define('cordova/plugin_list', function(require, exports, module) {
     "jpush-phonegap-plugin": "3.7.2",
     "cordova-plugin-app-version": "0.1.9",
     "cordova-plugin-wkwebview-engine": "1.2.1",
-    "cordova-plugin-brightness": "0.1.5"
+    "cordova-plugin-brightness": "0.1.5",
+    "cordova-plugin-file-opener2": "2.2.1",
+    "cordova-plugin-file-transfer": "1.7.1",
+    "cordova-plugin-crop": "0.3.1"
   };
 });
\ No newline at end of file
index e0a358f..9d3b017 100644 (file)
@@ -328,6 +328,10 @@ var app = {
         } else {
             window.location = 'cardinfor.html'
         }
+    },
+    logout:function(){
+        window.localStorage.removeItem("token");
+        window.location = "login.html";
     }
 };
 app.initialize();
index 79ae312..b9d81b9 100644 (file)
@@ -88,7 +88,7 @@ var app = {
           console.log(e)
         });
       } 
-      window,location.href='main.html';
+      window.location.href='main.html';
     }
 };
 app.initialize();
\ No newline at end of file
index 64a6da6..0674e1a 100644 (file)
@@ -7,6 +7,13 @@ var CURRENT_INDEX=1;
 if (dev) {
     SERVER = "http://172.28.43.7:8099/payapi/mobileapi";
 }
+function V1Unbindcard(param,callback){
+    ajaxPost("/v1/unbindcard", param, callback)
+}
+
+function V1UnSignbxy(param,callback){
+    ajaxPost("/v1/unsignbxy", param, callback)
+}
 
 function V1Qrcode(callback) {
     ajaxPost("/v1/qrcode", {}, callback)
@@ -76,7 +83,6 @@ function IGetCode(param,callback) {
     ajaxPost("/i/code", param, callback)
 }
 
-
 function IServeTime(callback) {
     ajaxPost("/i/time", {}, callback)
 }
index 3ade7e7..79e824b 100644 (file)
         <header class="aui-bar aui-bar-nav" style="padding-top:25px;font-size: 22px">
             我的
         </header>
-        <section class="aui-content bg-white aui-margin-b-15" style=" margin-top: -2px;">
+        <!-- bg-white -->
+        <section class="aui-content aui-margin-b-15" style=" margin-top: -2px;">
             <div class="aui-list aui-media-list aui-list-noborder aui-bg-info user-info">
                 <div class="aui-list-item aui-list-item-middle top-btn">
                     <div class="aui-media-list-item-inner ">
                     </div>
                 </div>
             </div>
-            <section class="aui-content aui-grid ">
-                <div class="aui-row aui-margin-t-10">
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-warning" id="user-amount">0.00</big>
-                        <div class="aui-gird-lable aui-font-size-12">余额</div>
-                    </div>
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-success" id="user-point">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">积分</div>
-                    </div>
-                    <div class="aui-col-xs-4 ">
-                        <big class="aui-text-danger" id="user-coupon">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">优惠券</div>
-                    </div>
-                </div>
-            </section>
-            
+            <!--<section class="aui-content aui-grid ">
+                  <div class="aui-row aui-margin-t-10">
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-warning" id="user-amount">0.00</big>
+                          <div class="aui-gird-lable aui-font-size-12">余额</div>
+                      </div>
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-success" id="user-point">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">积分</div>
+                      </div>
+                      <div class="aui-col-xs-4 ">
+                          <big class="aui-text-danger" id="user-coupon">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">优惠券</div>
+                      </div>
+                  </div>
+              </section>-->
         </section>
         <section class="aui-content">
             <ul class="aui-list aui-list-in aui-margin-b-15">
                     </div>
                 </li>
             </ul>
+            <div style="padding: 20px;margin-top: 40px;">
+                <a href="javascript:app.logout();" class="weui-btn weui-btn_warn">退出登录</a>
+            </div>  
         </section>
     </div>
     <footer class="aui-bar aui-bar-tab aui-border-t" id="footer">
index 48e9b69..3edeb36 100644 (file)
@@ -15,7 +15,7 @@
 </head>
 <body style="background: #fff"  >
     <header class="aui-bar aui-bar-nav" style="padding-top:25px;">
-        <a class="aui-pull-left" href="app.backTo()">
+        <a class="aui-pull-left" href="javascript:app.backTo()">
             <span class="aui-iconfont aui-icon-left"></span>
         </a>
         <div class="aui-title">付款码</div>
diff --git a/platforms/android/app/src/main/java/com/QRScanner_Back.java_back b/platforms/android/app/src/main/java/com/QRScanner_Back.java_back
new file mode 100755 (executable)
index 0000000..a588628
--- /dev/null
@@ -0,0 +1,856 @@
+package com;
+
+import android.Manifest;
+import android.content.Intent;
+import android.content.pm.FeatureInfo;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.hardware.Camera;
+import android.hardware.camera2.CameraAccessException;
+import android.net.Uri;
+import android.provider.Settings;
+import android.support.v4.app.ActivityCompat;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import com.google.zxing.BarcodeFormat;
+import com.journeyapps.barcodescanner.BarcodeView;
+import com.journeyapps.barcodescanner.camera.CameraSettings;
+import com.visionsmarts.VSBarcodeReader;
+import com.visionsmarts.pic2shop.view.ScannerLiveView;
+
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.PermissionHelper;
+import org.apache.cordova.PluginResult;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+
+@SuppressWarnings("deprecation")
+public class QRScanner_Back extends CordovaPlugin  {
+    private ScannerLiveView scannerLiveView;
+    private CallbackContext callbackContext;
+    private boolean cameraClosing;
+    private static Boolean flashAvailable;
+    private boolean lightOn = false;
+    private boolean showing = false;
+    private boolean prepared = false;
+    private int currentCameraId = Camera.CameraInfo.CAMERA_FACING_BACK;
+    private String[] permissions = {Manifest.permission.CAMERA};
+    //Preview started or paused
+    private boolean previewing = false;
+    private BarcodeView  mBarcodeView;
+    private boolean switchFlashOn = false;
+    private boolean switchFlashOff = false;
+    private boolean cameraPreviewing;
+    private boolean scanning = false;
+    private CallbackContext nextScanCallback;
+    private boolean shouldScanAgain;
+    private boolean denied;
+    private boolean authorized;
+    private boolean restricted;
+    private boolean oneTime = true;
+    private boolean keepDenied = false;
+    private boolean appPausedWithActivePreview = false;
+    private ScannerLiveView.Listener listener = new ScannerLiveView.Listener() {
+        @Override
+        public void onCodeScanned(String str, String data) {
+            if (nextScanCallback == null) {
+                return;
+            }
+
+            if(data != null) {
+                scanning = false;
+                nextScanCallback.success(data);
+                nextScanCallback = null;
+            }
+            else {
+                scan(nextScanCallback);
+            }
+        }
+
+        @Override
+        public void onCameraIssue() {
+
+        }
+    };
+
+    public void onCodeScanned(String type, String data) {
+        //PluginResult result = new PluginResult(PluginResult.Status.OK, data);
+        //callbackContext.sendPluginResult(result);
+        if (this.nextScanCallback == null) {
+            return;
+        }
+
+        if(data != null) {
+            scanning = false;
+            this.nextScanCallback.success(data);
+            this.nextScanCallback = null;
+        }
+        else {
+            scan(this.nextScanCallback);
+        }
+    }
+    public void onCameraIssue() {
+
+    }
+
+    static class QRScannerError {
+        private static final int UNEXPECTED_ERROR = 0,
+                CAMERA_ACCESS_DENIED = 1,
+                CAMERA_ACCESS_RESTRICTED = 2,
+                BACK_CAMERA_UNAVAILABLE = 3,
+                FRONT_CAMERA_UNAVAILABLE = 4,
+                CAMERA_UNAVAILABLE = 5,
+                SCAN_CANCELED = 6,
+                LIGHT_UNAVAILABLE = 7,
+                OPEN_SETTINGS_UNAVAILABLE = 8;
+    }
+
+    @Override
+    public boolean execute(final String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException {
+        this.callbackContext = callbackContext;
+        try {
+            if (action.equals("show")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        show(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("scan")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        scan(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("cancelScan")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        cancelScan(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("openSettings")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        openSettings(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("pausePreview")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        pausePreview(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("useCamera")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        switchCamera(callbackContext, args);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("resumePreview")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        resumePreview(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if(action.equals("hide")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        hide(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if (action.equals("enableLight")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        while (cameraClosing) {
+                            try {
+                                Thread.sleep(10);
+                            } catch (InterruptedException ignore) {
+                            }
+                        }
+                        switchFlashOn = true;
+                        if (hasFlash()) {
+                            if (!hasPermission()) {
+                                requestPermission(33);
+                            } else
+                                enableLight(callbackContext);
+                        } else {
+                            callbackContext.error(QRScannerError.LIGHT_UNAVAILABLE);
+                        }
+                    }
+                });
+                return true;
+            }
+            else if (action.equals("disableLight")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        switchFlashOff = true;
+                        if (hasFlash()) {
+                            if (!hasPermission()) {
+                                requestPermission(33);
+                            } else
+                                disableLight(callbackContext);
+                        } else {
+                            callbackContext.error(QRScannerError.LIGHT_UNAVAILABLE);
+                        }
+                    }
+                });
+                return true;
+            }
+            else if (action.equals("prepare")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        cordova.getActivity().runOnUiThread(new Runnable() {
+                            @Override
+                            public void run() {
+                                try {
+                                    currentCameraId = args.getInt(0);
+                                } catch (JSONException e) {
+                                }
+                                prepare(callbackContext);
+                            }
+                        });
+                    }
+                });
+                return true;
+            }
+            else if (action.equals("destroy")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        destroy(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else if (action.equals("getStatus")) {
+                cordova.getThreadPool().execute(new Runnable() {
+                    public void run() {
+                        getStatus(callbackContext);
+                    }
+                });
+                return true;
+            }
+            else {
+                return false;
+            }
+        } catch (Exception e) {
+            callbackContext.error(QRScannerError.UNEXPECTED_ERROR);
+            return false;
+        }
+    }
+
+    @Override
+    public void onPause(boolean multitasking) {
+        if (previewing) {
+            this.appPausedWithActivePreview = true;
+            this.pausePreview(null);
+        }
+    }
+
+    @Override
+    public void onResume(boolean multitasking) {
+        if (this.appPausedWithActivePreview) {
+            this.appPausedWithActivePreview = false;
+            this.resumePreview(null);
+        }
+    }
+
+    private boolean hasFlash() {
+        if (flashAvailable == null) {
+            flashAvailable = false;
+            final PackageManager packageManager = this.cordova.getActivity().getPackageManager();
+            for (final FeatureInfo feature : packageManager.getSystemAvailableFeatures()) {
+                if (PackageManager.FEATURE_CAMERA_FLASH.equalsIgnoreCase(feature.name)) {
+                    flashAvailable = true;
+                    break;
+                }
+            }
+        }
+        return flashAvailable;
+    }
+
+    private void switchFlash(boolean toggleLight, CallbackContext callbackContext) {
+        try {
+            if (hasFlash()) {
+                doswitchFlash(toggleLight, callbackContext);
+            } else {
+                callbackContext.error(QRScannerError.LIGHT_UNAVAILABLE);
+            }
+        } catch (Exception e) {
+            lightOn = false;
+            callbackContext.error(QRScannerError.LIGHT_UNAVAILABLE);
+        }
+    }
+
+    private String boolToNumberString(Boolean bool) {
+        if(bool)
+            return "1";
+        else
+            return "0";
+    }
+
+    private void doswitchFlash(final boolean toggleLight, final CallbackContext callbackContext) throws IOException, CameraAccessException {        //No flash for front facing cameras
+        if (getCurrentCameraId() == Camera.CameraInfo.CAMERA_FACING_FRONT) {
+            callbackContext.error(QRScannerError.LIGHT_UNAVAILABLE);
+            return;
+        }
+        if (!prepared) {
+            if (toggleLight)
+                lightOn = true;
+            else
+                lightOn = false;
+            prepare(callbackContext);
+        }
+        cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if (mBarcodeView != null) {
+                    mBarcodeView.setTorch(toggleLight);
+                    if (toggleLight)
+                        lightOn = true;
+                    else
+                        lightOn = false;
+                }
+                if(scannerLiveView!=null){
+                    scannerLiveView.setTorch(toggleLight);
+                    if (toggleLight)
+                        lightOn = true;
+                    else
+                        lightOn = false;
+                }
+                getStatus(callbackContext);
+            }
+        });
+    }
+
+    public int getCurrentCameraId() {
+        return this.currentCameraId;
+    }
+
+    private boolean canChangeCamera() {
+        int numCameras= Camera.getNumberOfCameras();
+        for(int i=0;i<numCameras;i++){
+            Camera.CameraInfo info = new Camera.CameraInfo();
+            Camera.getCameraInfo(i, info);
+            if(info.CAMERA_FACING_FRONT == info.facing){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void switchCamera(CallbackContext callbackContext, JSONArray args) {
+        int cameraId = 0;
+
+        try {
+            cameraId = args.getInt(0);
+        } catch (JSONException d) {
+            callbackContext.error(QRScannerError.UNEXPECTED_ERROR);
+        }
+        currentCameraId = cameraId;
+        if(scanning) {
+            scanning = false;
+            prepared = false;
+            if(cameraPreviewing) {
+                this.cordova.getActivity().runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        ((ViewGroup) mBarcodeView.getParent()).removeView(mBarcodeView);
+                        cameraPreviewing = false;
+                    }
+                });
+            }
+            closeCamera();
+            prepare(callbackContext);
+            scan(this.nextScanCallback);
+        }
+        else
+            prepare(callbackContext);
+    }
+
+    public void onRequestPermissionResult(int requestCode, String[] permissions,
+                                          int[] grantResults) throws JSONException {
+        oneTime = false;
+        if (requestCode == 33) {
+            // for each permission check if the user granted/denied them
+            // you may want to group the rationale in a single dialog,
+            // this is just an example
+            for (int i = 0; i < permissions.length; i++) {
+                String permission = permissions[i];
+                if (grantResults[i] == PackageManager.PERMISSION_DENIED) {
+                    boolean showRationale = ActivityCompat.shouldShowRequestPermissionRationale(cordova.getActivity(), permission);
+                    if (! showRationale) {
+                        // user denied flagging NEVER ASK AGAIN
+                        denied = true;
+                        authorized = false;
+                        callbackContext.error(QRScannerError.CAMERA_ACCESS_DENIED);
+                        return;
+                    } else {
+                        authorized = false;
+                        denied = false;
+                        callbackContext.error(QRScannerError.CAMERA_ACCESS_DENIED);
+                        return;
+                    }
+                } else if (grantResults[i] == PackageManager.PERMISSION_GRANTED){
+                    authorized = true;
+                    denied = false;
+                    switch (requestCode) {
+                        case 33:
+                            if(switchFlashOn && !scanning && !switchFlashOff)
+                                switchFlash(true, callbackContext);
+                            else if(switchFlashOff && !scanning)
+                                switchFlash(false, callbackContext);
+                            else {
+                                setupCamera(callbackContext);
+                                if(!scanning)
+                                    getStatus(callbackContext);
+                            }
+                            break;
+                    }
+                }
+                else {
+                    authorized = false;
+                    denied = false;
+                    restricted = false;
+                }
+            }
+        }
+    }
+
+    public boolean hasPermission() {
+        for(String p : permissions)
+        {
+            if(!PermissionHelper.hasPermission(this, p))
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private void requestPermission(int requestCode) {
+        PermissionHelper.requestPermissions(this, requestCode, permissions);
+    }
+
+    private void closeCamera() {
+        cameraClosing = true;
+        cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if (mBarcodeView != null) {
+                    mBarcodeView.pause();
+                }
+
+                cameraClosing = false;
+            }
+        });
+    }
+
+    private void makeOpaque() {
+        this.cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                webView.getView().setBackgroundColor(Color.TRANSPARENT);
+            }
+        });
+        showing = false;
+    }
+
+    private boolean hasCamera() {
+        if (this.cordova.getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    private boolean hasFrontCamera() {
+        if (this.cordova.getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)){
+            return true;
+        } else {
+            return false;
+        }
+    }
+    private void setupCamera(CallbackContext callbackContext) {
+        cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                // Create our Preview view and set it as the content of our activity.
+                //mBarcodeView = new BarcodeView(cordova.getActivity());
+                scannerLiveView = new ScannerLiveView(cordova.getActivity(),listener);
+
+                VSBarcodeReader.VSinit();
+                VSBarcodeReader.setBlurryAcceptanceThresholdWithAF(0.0d);
+                //Configure the decoder
+                ArrayList<BarcodeFormat> formatList = new ArrayList<BarcodeFormat>();
+                formatList.add(BarcodeFormat.QR_CODE);
+                //mBarcodeView.setDecoderFactory(new DefaultDecoderFactory(formatList, null, null));
+
+                //Configure the camera (front/back)
+                CameraSettings settings = new CameraSettings();
+                settings.setRequestedCameraId(getCurrentCameraId());
+                //mBarcodeView.setCameraSettings(settings);
+
+                FrameLayout.LayoutParams cameraPreviewParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
+                //((ViewGroup) webView.getView().getParent()).addView(mBarcodeView, cameraPreviewParams);
+                ((ViewGroup) webView.getView().getParent()).addView(scannerLiveView, cameraPreviewParams);
+                cameraPreviewing = true;
+                webView.getView().bringToFront();
+
+                //mBarcodeView.resume();
+                //scannerLiveView.onResume();
+            }
+        });
+        prepared = true;
+        previewing = true;
+        if(shouldScanAgain)
+            scan(callbackContext);
+
+    }
+
+    /*@Override
+    public void barcodeResult(BarcodeResult barcodeResult) {
+        if (this.nextScanCallback == null) {
+            return;
+        }
+
+        if(barcodeResult.getText() != null) {
+            scanning = false;
+            this.nextScanCallback.success(barcodeResult.getText());
+            this.nextScanCallback = null;
+        }
+        else {
+            scan(this.nextScanCallback);
+        }
+    }
+
+    @Override
+    public void possibleResultPoints(List<ResultPoint> list) {
+    }*/
+
+    // ---- BEGIN EXTERNAL API ----
+    private void prepare(final CallbackContext callbackContext) {
+        if(!prepared) {
+            if(currentCameraId == Camera.CameraInfo.CAMERA_FACING_BACK) {
+                if (hasCamera()) {
+                    if (!hasPermission()) {
+                        requestPermission(33);
+                    }
+                    else {
+                        setupCamera(callbackContext);
+                        if (!scanning)
+                            getStatus(callbackContext);
+                    }
+                }
+                else {
+                    callbackContext.error(QRScannerError.BACK_CAMERA_UNAVAILABLE);
+                }
+            }
+            else if(currentCameraId == Camera.CameraInfo.CAMERA_FACING_FRONT) {
+                if (hasFrontCamera()) {
+                    if (!hasPermission()) {
+                        requestPermission(33);
+                    }
+                    else {
+                        setupCamera(callbackContext);
+                        if (!scanning)
+                            getStatus(callbackContext);
+                    }
+                }
+                else {
+                    callbackContext.error(QRScannerError.FRONT_CAMERA_UNAVAILABLE);
+                }
+            }
+            else {
+                callbackContext.error(QRScannerError.CAMERA_UNAVAILABLE);
+            }
+        }
+        else {
+            prepared = false;
+            this.cordova.getActivity().runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    mBarcodeView.pause();
+                }
+            });
+            if(cameraPreviewing) {
+                this.cordova.getActivity().runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        ((ViewGroup) mBarcodeView.getParent()).removeView(mBarcodeView);
+                        cameraPreviewing = false;
+                    }
+                });
+
+                previewing = true;
+                lightOn = false;
+            }
+            setupCamera(callbackContext);
+            getStatus(callbackContext);
+        }
+    }
+
+    private void scan(final CallbackContext callbackContext) {
+        scanning = true;
+        if (!prepared) {
+            shouldScanAgain = true;
+            if (hasCamera()) {
+                if (!hasPermission()) {
+                    requestPermission(33);
+                } else {
+                    setupCamera(callbackContext);
+                }
+            }
+        } else {
+            if(!previewing) {
+                this.cordova.getActivity().runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        if(mBarcodeView != null) {
+                            mBarcodeView.resume();
+                            previewing = true;
+                            if(switchFlashOn)
+                                lightOn = true;
+                        }
+                    }
+                });
+            }
+            shouldScanAgain = false;
+            this.nextScanCallback = callbackContext;
+            /*final BarcodeCallback b = this;
+            this.cordova.getActivity().runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    if (mBarcodeView != null) {
+                        mBarcodeView.decodeSingle(b);
+                    }
+                }
+            });*/
+
+            if(scannerLiveView!=null){
+                scannerLiveView.onResume();
+            }
+        }
+    }
+
+    private void cancelScan(final CallbackContext callbackContext) {
+        this.cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                scanning = false;
+                if (mBarcodeView != null) {
+                    mBarcodeView.stopDecoding();
+                }
+            }
+        });
+        if(this.nextScanCallback != null)
+            this.nextScanCallback.error(QRScannerError.SCAN_CANCELED);
+        this.nextScanCallback = null;
+    }
+
+    private void show(final CallbackContext callbackContext) {
+        this.cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                webView.getView().setBackgroundColor(Color.argb(1, 0, 0, 0));
+                if(scannerLiveView!=null){
+                    scannerLiveView.startCamera();
+                }
+                showing = true;
+                getStatus(callbackContext);
+            }
+        });
+    }
+
+    private void hide(final CallbackContext callbackContext) {
+        makeOpaque();
+        getStatus(callbackContext);
+    }
+
+    private void pausePreview(final CallbackContext callbackContext) {
+        this.cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if(mBarcodeView != null) {
+                    mBarcodeView.pause();
+                    previewing = false;
+                    if(lightOn)
+                        lightOn = false;
+                }
+                
+                if (callbackContext != null)
+                    getStatus(callbackContext);
+            }
+        });
+
+    }
+
+    private void resumePreview(final CallbackContext callbackContext) {
+        this.cordova.getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if(mBarcodeView != null) {
+                    mBarcodeView.resume();
+                    previewing = true;
+                    if(switchFlashOn)
+                        lightOn = true;
+                }
+                
+                if (callbackContext != null)
+                    getStatus(callbackContext);
+            }
+        });
+    }
+
+    private void enableLight(CallbackContext callbackContext) {
+        lightOn = true;
+        if(hasPermission())
+            switchFlash(true, callbackContext);
+        else callbackContext.error(QRScannerError.CAMERA_ACCESS_DENIED);
+    }
+
+    private void disableLight(CallbackContext callbackContext) {
+        lightOn = false;
+        switchFlashOn = false;
+        if(hasPermission())
+            switchFlash(false, callbackContext);
+        else callbackContext.error(QRScannerError.CAMERA_ACCESS_DENIED);
+    }
+
+    private void openSettings(CallbackContext callbackContext) {
+        oneTime = true;
+        if(denied)
+            keepDenied = true;
+        try {
+            denied = false;
+            authorized = false;
+            boolean shouldPrepare = prepared;
+            boolean shouldFlash = lightOn;
+            boolean shouldShow = showing;
+            if(prepared)
+                destroy(callbackContext);
+            lightOn = false;
+            Intent intent = new Intent();
+            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            Uri uri = Uri.fromParts("package", this.cordova.getActivity().getPackageName(), null);
+            intent.setData(uri);
+            this.cordova.getActivity().getApplicationContext().startActivity(intent);
+            getStatus(callbackContext);
+            if (shouldPrepare)
+                prepare(callbackContext);
+            if (shouldFlash)
+                enableLight(callbackContext);
+            if (shouldShow)
+                show(callbackContext);
+        } catch (Exception e) {
+            callbackContext.error(QRScannerError.OPEN_SETTINGS_UNAVAILABLE);
+        }
+
+    }
+
+    private void getStatus(CallbackContext callbackContext) {
+
+        if(oneTime) {
+            boolean authorizationStatus = hasPermission();
+
+            authorized = false;
+            if (authorizationStatus)
+                authorized = true;
+
+            if(keepDenied && !authorized)
+                denied = true;
+            else
+                denied = false;
+
+            //No applicable API
+            restricted = false;
+        }
+        boolean canOpenSettings = true;
+
+        boolean canEnableLight = hasFlash();
+
+        if(currentCameraId == Camera.CameraInfo.CAMERA_FACING_FRONT)
+            canEnableLight = false;
+
+        HashMap status = new HashMap();
+        status.put("authorized",boolToNumberString(authorized));
+        status.put("denied",boolToNumberString(denied));
+        status.put("restricted",boolToNumberString(restricted));
+        status.put("prepared",boolToNumberString(prepared));
+        status.put("scanning",boolToNumberString(scanning));
+        status.put("previewing",boolToNumberString(previewing));
+        status.put("showing",boolToNumberString(showing));
+        status.put("lightEnabled",boolToNumberString(lightOn));
+        status.put("canOpenSettings",boolToNumberString(canOpenSettings));
+        status.put("canEnableLight",boolToNumberString(canEnableLight));
+        status.put("canChangeCamera",boolToNumberString(canChangeCamera()));
+        status.put("currentCamera",Integer.toString(getCurrentCameraId()));
+
+        JSONObject obj = new JSONObject(status);
+        PluginResult result = new PluginResult(PluginResult.Status.OK, obj);
+        callbackContext.sendPluginResult(result);
+    }
+
+    private void destroy(CallbackContext callbackContext) {
+        prepared = false;
+        makeOpaque();
+        previewing = false;
+        if(scanning) {
+            this.cordova.getActivity().runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    scanning = false;
+                    if (mBarcodeView != null) {
+                        mBarcodeView.stopDecoding();
+                    }
+                }
+            });
+            this.nextScanCallback = null;
+        }
+
+        if(cameraPreviewing) {
+            this.cordova.getActivity().runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                  if(mBarcodeView!=null) {
+                    ((ViewGroup) mBarcodeView.getParent()).removeView(mBarcodeView);
+                    cameraPreviewing = false;
+                  }
+                }
+            });
+        }
+        if(currentCameraId != Camera.CameraInfo.CAMERA_FACING_FRONT) {
+            if (lightOn)
+                switchFlash(false, callbackContext);
+        }
+        closeCamera();
+        currentCameraId = 0;
+        if(scannerLiveView!=null){
+          scannerLiveView.onPause();
+        }
+        getStatus(callbackContext);
+    }
+}
index 951ded8..fb0347b 100644 (file)
@@ -343,6 +343,38 @@ cordova.define('cordova/plugin_list', function(require, exports, module) {
       "clobbers": [
         "cordova.plugins.brightness"
       ]
+    },
+    {
+      "id": "cordova-plugin-file-opener2.FileOpener2",
+      "file": "plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js",
+      "pluginId": "cordova-plugin-file-opener2",
+      "clobbers": [
+        "cordova.plugins.fileOpener2"
+      ]
+    },
+    {
+      "id": "cordova-plugin-file-transfer.FileTransferError",
+      "file": "plugins/cordova-plugin-file-transfer/www/FileTransferError.js",
+      "pluginId": "cordova-plugin-file-transfer",
+      "clobbers": [
+        "window.FileTransferError"
+      ]
+    },
+    {
+      "id": "cordova-plugin-file-transfer.FileTransfer",
+      "file": "plugins/cordova-plugin-file-transfer/www/FileTransfer.js",
+      "pluginId": "cordova-plugin-file-transfer",
+      "clobbers": [
+        "window.FileTransfer"
+      ]
+    },
+    {
+      "id": "cordova-plugin-crop.CropPlugin",
+      "file": "plugins/cordova-plugin-crop/www/crop.js",
+      "pluginId": "cordova-plugin-crop",
+      "clobbers": [
+        "plugins.crop"
+      ]
     }
   ];
   module.exports.metadata = {
@@ -363,6 +395,9 @@ cordova.define('cordova/plugin_list', function(require, exports, module) {
     "jpush-phonegap-plugin": "3.7.2",
     "cordova-plugin-app-version": "0.1.9",
     "cordova-plugin-wkwebview-engine": "1.2.1",
-    "cordova-plugin-brightness": "0.1.5"
+    "cordova-plugin-brightness": "0.1.5",
+    "cordova-plugin-file-opener2": "2.2.1",
+    "cordova-plugin-file-transfer": "1.7.1",
+    "cordova-plugin-crop": "0.3.1"
   };
 });
\ No newline at end of file
diff --git a/platforms/android/platform_www/plugins/cordova-plugin-crop/www/crop.js b/platforms/android/platform_www/plugins/cordova-plugin-crop/www/crop.js
new file mode 100644 (file)
index 0000000..4c80399
--- /dev/null
@@ -0,0 +1,15 @@
+cordova.define("cordova-plugin-crop.CropPlugin", function(require, exports, module) {
+/* global cordova */
+var crop = module.exports = function cropImage (success, fail, image, options) {
+  options = options || {}
+  options.quality = options.quality || 100
+  return cordova.exec(success, fail, 'CropPlugin', 'cropImage', [image, options])
+}
+
+module.exports.promise = function cropAsync (image, options) {
+  return new Promise(function (resolve, reject) {
+    crop(resolve, reject, image, options)
+  })
+}
+
+});
diff --git a/platforms/android/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js b/platforms/android/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js
new file mode 100644 (file)
index 0000000..3b806cb
--- /dev/null
@@ -0,0 +1,54 @@
+cordova.define("cordova-plugin-file-opener2.FileOpener2", function(require, exports, module) {
+/*jslint browser: true, devel: true, node: true, sloppy: true, plusplus: true*/
+/*global require, cordova */
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013 pwlin - pwlin05@gmail.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+var exec = require('cordova/exec');
+
+function FileOpener2() {}
+
+FileOpener2.prototype.open = function (fileName, contentType, callbackContext) {
+    contentType = contentType || '';
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'open', [fileName, contentType]);
+};
+
+FileOpener2.prototype.showOpenWithDialog = function (fileName, contentType, callbackContext) {
+    contentType = contentType || '';
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'open', [fileName, contentType, false]);
+};
+
+FileOpener2.prototype.uninstall = function (packageId, callbackContext) {
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'uninstall', [packageId]);
+};
+
+FileOpener2.prototype.appIsInstalled = function (packageId, callbackContext) {
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'appIsInstalled', [packageId]);
+};
+
+module.exports = new FileOpener2();
+
+});
diff --git a/platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js b/platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js
new file mode 100644 (file)
index 0000000..3019d5e
--- /dev/null
@@ -0,0 +1,242 @@
+cordova.define("cordova-plugin-file-transfer.FileTransfer", function(require, exports, module) {
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/* global cordova, FileSystem */
+
+var argscheck = require('cordova/argscheck'),
+    exec = require('cordova/exec'),
+    FileTransferError = require('./FileTransferError'),
+    ProgressEvent = require('cordova-plugin-file.ProgressEvent');
+
+function newProgressEvent(result) {
+    var pe = new ProgressEvent();
+    pe.lengthComputable = result.lengthComputable;
+    pe.loaded = result.loaded;
+    pe.total = result.total;
+    return pe;
+}
+
+function getUrlCredentials(urlString) {
+    var credentialsPattern = /^https?\:\/\/(?:(?:(([^:@\/]*)(?::([^@\/]*))?)?@)?([^:\/?#]*)(?::(\d*))?).*$/,
+        credentials = credentialsPattern.exec(urlString);
+
+    return credentials && credentials[1];
+}
+
+function getBasicAuthHeader(urlString) {
+    var header =  null;
+
+
+    // This is changed due to MS Windows doesn't support credentials in http uris
+    // so we detect them by regexp and strip off from result url
+    // Proof: http://social.msdn.microsoft.com/Forums/windowsapps/en-US/a327cf3c-f033-4a54-8b7f-03c56ba3203f/windows-foundation-uri-security-problem
+
+    if (window.btoa) {
+        var credentials = getUrlCredentials(urlString);
+        if (credentials) {
+            var authHeader = "Authorization";
+            var authHeaderValue = "Basic " + window.btoa(credentials);
+
+            header = {
+                name : authHeader,
+                value : authHeaderValue
+            };
+        }
+    }
+
+    return header;
+}
+
+function convertHeadersToArray(headers) {
+    var result = [];
+    for (var header in headers) {
+        if (headers.hasOwnProperty(header)) {
+            var headerValue = headers[header];
+            result.push({
+                name: header,
+                value: headerValue.toString()
+            });
+        }
+    }
+    return result;
+}
+
+var idCounter = 0;
+
+/**
+ * FileTransfer uploads a file to a remote server.
+ * @constructor
+ */
+var FileTransfer = function() {
+    this._id = ++idCounter;
+    this.onprogress = null; // optional callback
+};
+
+/**
+* Given an absolute file path, uploads a file on the device to a remote server
+* using a multipart HTTP request.
+* @param filePath {String}           Full path of the file on the device
+* @param server {String}             URL of the server to receive the file
+* @param successCallback (Function}  Callback to be invoked when upload has completed
+* @param errorCallback {Function}    Callback to be invoked upon error
+* @param options {FileUploadOptions} Optional parameters such as file name and mimetype
+* @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+*/
+FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) {
+    argscheck.checkArgs('ssFFO*', 'FileTransfer.upload', arguments);
+    // check for options
+    var fileKey = null;
+    var fileName = null;
+    var mimeType = null;
+    var params = null;
+    var chunkedMode = true;
+    var headers = null;
+    var httpMethod = null;
+    var basicAuthHeader = getBasicAuthHeader(server);
+    if (basicAuthHeader) {
+        server = server.replace(getUrlCredentials(server) + '@', '');
+
+        options = options || {};
+        options.headers = options.headers || {};
+        options.headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    if (options) {
+        fileKey = options.fileKey;
+        fileName = options.fileName;
+        mimeType = options.mimeType;
+        headers = options.headers;
+        httpMethod = options.httpMethod || "POST";
+        if (httpMethod.toUpperCase() == "PUT"){
+            httpMethod = "PUT";
+        } else {
+            httpMethod = "POST";
+        }
+        if (options.chunkedMode !== null || typeof options.chunkedMode != "undefined") {
+            chunkedMode = options.chunkedMode;
+        }
+        if (options.params) {
+            params = options.params;
+        }
+        else {
+            params = {};
+        }
+    }
+
+    if (cordova.platformId === "windowsphone") {
+        headers = headers && convertHeadersToArray(headers);
+        params = params && convertHeadersToArray(params);
+    }
+
+    var fail = errorCallback && function(e) {
+        var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body, e.exception);
+        errorCallback(error);
+    };
+
+    var self = this;
+    var win = function(result) {
+        if (typeof result.lengthComputable != "undefined") {
+            if (self.onprogress) {
+                self.onprogress(newProgressEvent(result));
+            }
+        } else {
+            if (successCallback) {
+                successCallback(result);
+            }
+        }
+    };
+    exec(win, fail, 'FileTransfer', 'upload', [filePath, server, fileKey, fileName, mimeType, params, trustAllHosts, chunkedMode, headers, this._id, httpMethod]);
+};
+
+/**
+ * Downloads a file form a given URL and saves it to the specified directory.
+ * @param source {String}          URL of the server to receive the file
+ * @param target {String}         Full path of the file on the device
+ * @param successCallback (Function}  Callback to be invoked when upload has completed
+ * @param errorCallback {Function}    Callback to be invoked upon error
+ * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+ * @param options {FileDownloadOptions} Optional parameters such as headers
+ */
+FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts, options) {
+    argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments);
+    var self = this;
+
+    var basicAuthHeader = getBasicAuthHeader(source);
+    if (basicAuthHeader) {
+        source = source.replace(getUrlCredentials(source) + '@', '');
+
+        options = options || {};
+        options.headers = options.headers || {};
+        options.headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    var headers = null;
+    if (options) {
+        headers = options.headers || null;
+    }
+
+    if (cordova.platformId === "windowsphone" && headers) {
+        headers = convertHeadersToArray(headers);
+    }
+
+    var win = function(result) {
+        if (typeof result.lengthComputable != "undefined") {
+            if (self.onprogress) {
+                return self.onprogress(newProgressEvent(result));
+            }
+        } else if (successCallback) {
+            var entry = null;
+            if (result.isDirectory) {
+                entry = new (require('cordova-plugin-file.DirectoryEntry'))();
+            }
+            else if (result.isFile) {
+                entry = new (require('cordova-plugin-file.FileEntry'))();
+            }
+            entry.isDirectory = result.isDirectory;
+            entry.isFile = result.isFile;
+            entry.name = result.name;
+            entry.fullPath = result.fullPath;
+            entry.filesystem = new FileSystem(result.filesystemName || (result.filesystem == window.PERSISTENT ? 'persistent' : 'temporary'));
+            entry.nativeURL = result.nativeURL;
+            successCallback(entry);
+        }
+    };
+
+    var fail = errorCallback && function(e) {
+        var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body, e.exception);
+        errorCallback(error);
+    };
+
+    exec(win, fail, 'FileTransfer', 'download', [source, target, trustAllHosts, this._id, headers]);
+};
+
+/**
+ * Aborts the ongoing file transfer on this object. The original error
+ * callback for the file transfer will be called if necessary.
+ */
+FileTransfer.prototype.abort = function() {
+    exec(null, null, 'FileTransfer', 'abort', [this._id]);
+};
+
+module.exports = FileTransfer;
+
+});
diff --git a/platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js b/platforms/android/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js
new file mode 100644 (file)
index 0000000..18fb64c
--- /dev/null
@@ -0,0 +1,44 @@
+cordova.define("cordova-plugin-file-transfer.FileTransferError", function(require, exports, module) {
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/**
+ * FileTransferError
+ * @constructor
+ */
+var FileTransferError = function(code, source, target, status, body, exception) {
+    this.code = code || null;
+    this.source = source || null;
+    this.target = target || null;
+    this.http_status = status || null;
+    this.body = body || null;
+    this.exception = exception || null;
+};
+
+FileTransferError.FILE_NOT_FOUND_ERR = 1;
+FileTransferError.INVALID_URL_ERR = 2;
+FileTransferError.CONNECTION_ERR = 3;
+FileTransferError.ABORT_ERR = 4;
+FileTransferError.NOT_MODIFIED_ERR = 5;
+
+module.exports = FileTransferError;
+
+});
diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-crop/www/crop.js b/platforms/browser/platform_www/plugins/cordova-plugin-crop/www/crop.js
new file mode 100644 (file)
index 0000000..a70b86d
--- /dev/null
@@ -0,0 +1,14 @@
+cordova.define("cordova-plugin-crop.CropPlugin", function(require, exports, module) { /* global cordova */
+var crop = module.exports = function cropImage (success, fail, image, options) {
+  options = options || {}
+  options.quality = options.quality || 100
+  return cordova.exec(success, fail, 'CropPlugin', 'cropImage', [image, options])
+}
+
+module.exports.promise = function cropAsync (image, options) {
+  return new Promise(function (resolve, reject) {
+    crop(resolve, reject, image, options)
+  })
+}
+
+});
diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js b/platforms/browser/platform_www/plugins/cordova-plugin-file-opener2/www/plugins.FileOpener2.js
new file mode 100644 (file)
index 0000000..d3c1540
--- /dev/null
@@ -0,0 +1,53 @@
+cordova.define("cordova-plugin-file-opener2.FileOpener2", function(require, exports, module) { /*jslint browser: true, devel: true, node: true, sloppy: true, plusplus: true*/
+/*global require, cordova */
+/*
+The MIT License (MIT)
+
+Copyright (c) 2013 pwlin - pwlin05@gmail.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+var exec = require('cordova/exec');
+
+function FileOpener2() {}
+
+FileOpener2.prototype.open = function (fileName, contentType, callbackContext) {
+    contentType = contentType || '';
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'open', [fileName, contentType]);
+};
+
+FileOpener2.prototype.showOpenWithDialog = function (fileName, contentType, callbackContext) {
+    contentType = contentType || '';
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'open', [fileName, contentType, false]);
+};
+
+FileOpener2.prototype.uninstall = function (packageId, callbackContext) {
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'uninstall', [packageId]);
+};
+
+FileOpener2.prototype.appIsInstalled = function (packageId, callbackContext) {
+    callbackContext = callbackContext || {};
+    exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'appIsInstalled', [packageId]);
+};
+
+module.exports = new FileOpener2();
+
+});
diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js b/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransfer.js
new file mode 100644 (file)
index 0000000..dd5a2a2
--- /dev/null
@@ -0,0 +1,241 @@
+cordova.define("cordova-plugin-file-transfer.FileTransfer", function(require, exports, module) { /*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/* global cordova, FileSystem */
+
+var argscheck = require('cordova/argscheck'),
+    exec = require('cordova/exec'),
+    FileTransferError = require('./FileTransferError'),
+    ProgressEvent = require('cordova-plugin-file.ProgressEvent');
+
+function newProgressEvent(result) {
+    var pe = new ProgressEvent();
+    pe.lengthComputable = result.lengthComputable;
+    pe.loaded = result.loaded;
+    pe.total = result.total;
+    return pe;
+}
+
+function getUrlCredentials(urlString) {
+    var credentialsPattern = /^https?\:\/\/(?:(?:(([^:@\/]*)(?::([^@\/]*))?)?@)?([^:\/?#]*)(?::(\d*))?).*$/,
+        credentials = credentialsPattern.exec(urlString);
+
+    return credentials && credentials[1];
+}
+
+function getBasicAuthHeader(urlString) {
+    var header =  null;
+
+
+    // This is changed due to MS Windows doesn't support credentials in http uris
+    // so we detect them by regexp and strip off from result url
+    // Proof: http://social.msdn.microsoft.com/Forums/windowsapps/en-US/a327cf3c-f033-4a54-8b7f-03c56ba3203f/windows-foundation-uri-security-problem
+
+    if (window.btoa) {
+        var credentials = getUrlCredentials(urlString);
+        if (credentials) {
+            var authHeader = "Authorization";
+            var authHeaderValue = "Basic " + window.btoa(credentials);
+
+            header = {
+                name : authHeader,
+                value : authHeaderValue
+            };
+        }
+    }
+
+    return header;
+}
+
+function convertHeadersToArray(headers) {
+    var result = [];
+    for (var header in headers) {
+        if (headers.hasOwnProperty(header)) {
+            var headerValue = headers[header];
+            result.push({
+                name: header,
+                value: headerValue.toString()
+            });
+        }
+    }
+    return result;
+}
+
+var idCounter = 0;
+
+/**
+ * FileTransfer uploads a file to a remote server.
+ * @constructor
+ */
+var FileTransfer = function() {
+    this._id = ++idCounter;
+    this.onprogress = null; // optional callback
+};
+
+/**
+* Given an absolute file path, uploads a file on the device to a remote server
+* using a multipart HTTP request.
+* @param filePath {String}           Full path of the file on the device
+* @param server {String}             URL of the server to receive the file
+* @param successCallback (Function}  Callback to be invoked when upload has completed
+* @param errorCallback {Function}    Callback to be invoked upon error
+* @param options {FileUploadOptions} Optional parameters such as file name and mimetype
+* @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+*/
+FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options, trustAllHosts) {
+    argscheck.checkArgs('ssFFO*', 'FileTransfer.upload', arguments);
+    // check for options
+    var fileKey = null;
+    var fileName = null;
+    var mimeType = null;
+    var params = null;
+    var chunkedMode = true;
+    var headers = null;
+    var httpMethod = null;
+    var basicAuthHeader = getBasicAuthHeader(server);
+    if (basicAuthHeader) {
+        server = server.replace(getUrlCredentials(server) + '@', '');
+
+        options = options || {};
+        options.headers = options.headers || {};
+        options.headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    if (options) {
+        fileKey = options.fileKey;
+        fileName = options.fileName;
+        mimeType = options.mimeType;
+        headers = options.headers;
+        httpMethod = options.httpMethod || "POST";
+        if (httpMethod.toUpperCase() == "PUT"){
+            httpMethod = "PUT";
+        } else {
+            httpMethod = "POST";
+        }
+        if (options.chunkedMode !== null || typeof options.chunkedMode != "undefined") {
+            chunkedMode = options.chunkedMode;
+        }
+        if (options.params) {
+            params = options.params;
+        }
+        else {
+            params = {};
+        }
+    }
+
+    if (cordova.platformId === "windowsphone") {
+        headers = headers && convertHeadersToArray(headers);
+        params = params && convertHeadersToArray(params);
+    }
+
+    var fail = errorCallback && function(e) {
+        var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body, e.exception);
+        errorCallback(error);
+    };
+
+    var self = this;
+    var win = function(result) {
+        if (typeof result.lengthComputable != "undefined") {
+            if (self.onprogress) {
+                self.onprogress(newProgressEvent(result));
+            }
+        } else {
+            if (successCallback) {
+                successCallback(result);
+            }
+        }
+    };
+    exec(win, fail, 'FileTransfer', 'upload', [filePath, server, fileKey, fileName, mimeType, params, trustAllHosts, chunkedMode, headers, this._id, httpMethod]);
+};
+
+/**
+ * Downloads a file form a given URL and saves it to the specified directory.
+ * @param source {String}          URL of the server to receive the file
+ * @param target {String}         Full path of the file on the device
+ * @param successCallback (Function}  Callback to be invoked when upload has completed
+ * @param errorCallback {Function}    Callback to be invoked upon error
+ * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+ * @param options {FileDownloadOptions} Optional parameters such as headers
+ */
+FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts, options) {
+    argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments);
+    var self = this;
+
+    var basicAuthHeader = getBasicAuthHeader(source);
+    if (basicAuthHeader) {
+        source = source.replace(getUrlCredentials(source) + '@', '');
+
+        options = options || {};
+        options.headers = options.headers || {};
+        options.headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    var headers = null;
+    if (options) {
+        headers = options.headers || null;
+    }
+
+    if (cordova.platformId === "windowsphone" && headers) {
+        headers = convertHeadersToArray(headers);
+    }
+
+    var win = function(result) {
+        if (typeof result.lengthComputable != "undefined") {
+            if (self.onprogress) {
+                return self.onprogress(newProgressEvent(result));
+            }
+        } else if (successCallback) {
+            var entry = null;
+            if (result.isDirectory) {
+                entry = new (require('cordova-plugin-file.DirectoryEntry'))();
+            }
+            else if (result.isFile) {
+                entry = new (require('cordova-plugin-file.FileEntry'))();
+            }
+            entry.isDirectory = result.isDirectory;
+            entry.isFile = result.isFile;
+            entry.name = result.name;
+            entry.fullPath = result.fullPath;
+            entry.filesystem = new FileSystem(result.filesystemName || (result.filesystem == window.PERSISTENT ? 'persistent' : 'temporary'));
+            entry.nativeURL = result.nativeURL;
+            successCallback(entry);
+        }
+    };
+
+    var fail = errorCallback && function(e) {
+        var error = new FileTransferError(e.code, e.source, e.target, e.http_status, e.body, e.exception);
+        errorCallback(error);
+    };
+
+    exec(win, fail, 'FileTransfer', 'download', [source, target, trustAllHosts, this._id, headers]);
+};
+
+/**
+ * Aborts the ongoing file transfer on this object. The original error
+ * callback for the file transfer will be called if necessary.
+ */
+FileTransfer.prototype.abort = function() {
+    exec(null, null, 'FileTransfer', 'abort', [this._id]);
+};
+
+module.exports = FileTransfer;
+
+});
diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js b/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/FileTransferError.js
new file mode 100644 (file)
index 0000000..8339c2b
--- /dev/null
@@ -0,0 +1,43 @@
+cordova.define("cordova-plugin-file-transfer.FileTransferError", function(require, exports, module) { /*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/**
+ * FileTransferError
+ * @constructor
+ */
+var FileTransferError = function(code, source, target, status, body, exception) {
+    this.code = code || null;
+    this.source = source || null;
+    this.target = target || null;
+    this.http_status = status || null;
+    this.body = body || null;
+    this.exception = exception || null;
+};
+
+FileTransferError.FILE_NOT_FOUND_ERR = 1;
+FileTransferError.INVALID_URL_ERR = 2;
+FileTransferError.CONNECTION_ERR = 3;
+FileTransferError.ABORT_ERR = 4;
+FileTransferError.NOT_MODIFIED_ERR = 5;
+
+module.exports = FileTransferError;
+
+});
diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/browser/FileTransfer.js b/platforms/browser/platform_www/plugins/cordova-plugin-file-transfer/www/browser/FileTransfer.js
new file mode 100644 (file)
index 0000000..6015719
--- /dev/null
@@ -0,0 +1,348 @@
+cordova.define("cordova-plugin-file-transfer.BrowserFileTransfer", function(require, exports, module) { /*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+/*global module, require*/
+
+var argscheck = require('cordova/argscheck'),
+    FileTransferError = require('./FileTransferError');
+
+function getParentPath(filePath) {
+    var pos = filePath.lastIndexOf('/');
+    return filePath.substring(0, pos + 1);
+}
+
+function getFileName(filePath) {
+    var pos = filePath.lastIndexOf('/');
+    return filePath.substring(pos + 1);
+}
+
+function getUrlCredentials(urlString) {
+    var credentialsPattern = /^https?\:\/\/(?:(?:(([^:@\/]*)(?::([^@\/]*))?)?@)?([^:\/?#]*)(?::(\d*))?).*$/,
+        credentials = credentialsPattern.exec(urlString);
+
+    return credentials && credentials[1];
+}
+
+function getBasicAuthHeader(urlString) {
+    var header =  null;
+
+
+    // This is changed due to MS Windows doesn't support credentials in http uris
+    // so we detect them by regexp and strip off from result url
+    // Proof: http://social.msdn.microsoft.com/Forums/windowsapps/en-US/a327cf3c-f033-4a54-8b7f-03c56ba3203f/windows-foundation-uri-security-problem
+
+    if (window.btoa) {
+        var credentials = getUrlCredentials(urlString);
+        if (credentials) {
+            var authHeader = "Authorization";
+            var authHeaderValue = "Basic " + window.btoa(credentials);
+
+            header = {
+                name : authHeader,
+                value : authHeaderValue
+            };
+        }
+    }
+
+    return header;
+}
+
+function checkURL(url) {
+    return url.indexOf(' ') === -1 ?  true : false;
+}
+
+var idCounter = 0;
+
+var transfers = {};
+
+/**
+ * FileTransfer uploads a file to a remote server.
+ * @constructor
+ */
+var FileTransfer = function() {
+    this._id = ++idCounter;
+    this.onprogress = null; // optional callback
+};
+
+/**
+ * Given an absolute file path, uploads a file on the device to a remote server
+ * using a multipart HTTP request.
+ * @param filePath {String}           Full path of the file on the device
+ * @param server {String}             URL of the server to receive the file
+ * @param successCallback (Function}  Callback to be invoked when upload has completed
+ * @param errorCallback {Function}    Callback to be invoked upon error
+ * @param options {FileUploadOptions} Optional parameters such as file name and mimetype
+ * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+ */
+FileTransfer.prototype.upload = function(filePath, server, successCallback, errorCallback, options) {
+    // check for arguments
+    argscheck.checkArgs('ssFFO*', 'FileTransfer.upload', arguments);
+
+    // Check if target URL doesn't contain spaces. If contains, it should be escaped first
+    // (see https://github.com/apache/cordova-plugin-file-transfer/blob/master/doc/index.md#upload)
+    if (!checkURL(server)) {
+        if (errorCallback) {
+            errorCallback(new FileTransferError(FileTransferError.INVALID_URL_ERR, filePath, server));
+        }
+        return;
+    }
+
+    options = options || {};
+
+    var fileKey = options.fileKey || "file";
+    var fileName = options.fileName || "image.jpg";
+    var mimeType = options.mimeType || "image/jpeg";
+    var params = options.params || {};
+    var withCredentials = options.withCredentials || false;
+    // var chunkedMode = !!options.chunkedMode; // Not supported
+    var headers = options.headers || {};
+    var httpMethod = options.httpMethod && options.httpMethod.toUpperCase() === "PUT" ? "PUT" : "POST";
+
+    var basicAuthHeader = getBasicAuthHeader(server);
+    if (basicAuthHeader) {
+        server = server.replace(getUrlCredentials(server) + '@', '');
+        headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    var that = this;
+    var xhr = transfers[this._id] = new XMLHttpRequest();
+    xhr.withCredentials = withCredentials;
+
+    var fail = errorCallback && function(code, status, response) {
+        if (transfers[this._id]) {
+            delete transfers[this._id];
+        }
+        var error = new FileTransferError(code, filePath, server, status, response);
+        if (errorCallback) {
+            errorCallback(error);
+        }
+    };
+
+    window.resolveLocalFileSystemURL(filePath, function(entry) {
+        entry.file(function(file) {
+            var reader = new FileReader();
+            reader.onloadend = function() {
+                var blob = new Blob([this.result], {type: mimeType});
+
+                // Prepare form data to send to server
+                var fd = new FormData();
+                fd.append(fileKey, blob, fileName);
+                for (var prop in params) {
+                    if (params.hasOwnProperty(prop)) {
+                        fd.append(prop, params[prop]);
+                    }
+                }
+
+                xhr.open(httpMethod, server);
+
+                // Fill XHR headers
+                for (var header in headers) {
+                    if (headers.hasOwnProperty(header)) {
+                        xhr.setRequestHeader(header, headers[header]);
+                    }
+                }
+
+                xhr.onload = function() {
+                    // 2xx codes are valid
+                    if (this.status >= 200 &&
+                       this.status < 300) {
+                        var result = new FileUploadResult(); // jshint ignore:line
+                        result.bytesSent = blob.size;
+                        result.responseCode = this.status;
+                        result.response = this.response;
+                        delete transfers[that._id];
+                        successCallback(result);
+                    } else if (this.status === 404) {
+                        fail(FileTransferError.INVALID_URL_ERR, this.status, this.response);
+                    } else {
+                        fail(FileTransferError.CONNECTION_ERR, this.status, this.response);
+                    }
+                };
+
+                xhr.ontimeout = function() {
+                    fail(FileTransferError.CONNECTION_ERR, this.status, this.response);
+                };
+
+                xhr.onerror = function() {
+                    fail(FileTransferError.CONNECTION_ERR, this.status, this.response);
+                };
+
+                xhr.onabort = function () {
+                    fail(FileTransferError.ABORT_ERR, this.status, this.response);
+                };
+
+                xhr.upload.onprogress = function (e) {
+                    if (that.onprogress) {
+                        that.onprogress(e);
+                    }
+                };
+
+                xhr.send(fd);
+                // Special case when transfer already aborted, but XHR isn't sent.
+                // In this case XHR won't fire an abort event, so we need to check if transfers record
+                // isn't deleted by filetransfer.abort and if so, call XHR's abort method again
+                if (!transfers[that._id]) {
+                    xhr.abort();
+                }
+            };
+            reader.readAsArrayBuffer(file);
+        }, function() {
+            fail(FileTransferError.FILE_NOT_FOUND_ERR);
+        });
+    }, function() {
+        fail(FileTransferError.FILE_NOT_FOUND_ERR);
+    });
+};
+
+/**
+ * Downloads a file form a given URL and saves it to the specified directory.
+ * @param source {String}          URL of the server to receive the file
+ * @param target {String}         Full path of the file on the device
+ * @param successCallback (Function}  Callback to be invoked when upload has completed
+ * @param errorCallback {Function}    Callback to be invoked upon error
+ * @param trustAllHosts {Boolean} Optional trust all hosts (e.g. for self-signed certs), defaults to false
+ * @param options {FileDownloadOptions} Optional parameters such as headers
+ */
+FileTransfer.prototype.download = function(source, target, successCallback, errorCallback, trustAllHosts, options) {
+    argscheck.checkArgs('ssFF*', 'FileTransfer.download', arguments);
+
+    // Check if target URL doesn't contain spaces. If contains, it should be escaped first
+    // (see https://github.com/apache/cordova-plugin-file-transfer/blob/master/doc/index.md#download)
+    if (!checkURL(source)) {
+        if (errorCallback) {
+            errorCallback(new FileTransferError(FileTransferError.INVALID_URL_ERR, source, target));
+        }
+        return;
+    }
+
+    options = options || {};
+    
+    var headers = options.headers || {};
+    var withCredentials = options.withCredentials || false;
+
+    var basicAuthHeader = getBasicAuthHeader(source);
+    if (basicAuthHeader) {
+        source = source.replace(getUrlCredentials(source) + '@', '');
+        headers[basicAuthHeader.name] = basicAuthHeader.value;
+    }
+
+    var that = this;
+    var xhr = transfers[this._id] = new XMLHttpRequest();
+    xhr.withCredentials = withCredentials;
+    var fail = errorCallback && function(code, status, response) {
+        if (transfers[that._id]) {
+            delete transfers[that._id];
+        }
+        // In XHR GET reqests we're setting response type to Blob
+        // but in case of error we need to raise event with plain text response
+        if (response instanceof Blob) {
+            var reader = new FileReader();
+            reader.readAsText(response);
+            reader.onloadend = function(e) {
+                var error = new FileTransferError(code, source, target, status, e.target.result);
+                errorCallback(error);
+            };
+        } else {
+            var error = new FileTransferError(code, source, target, status, response);
+            errorCallback(error);
+        }
+    };
+
+    xhr.onload = function (e) {
+
+        var fileNotFound = function () {
+            fail(FileTransferError.FILE_NOT_FOUND_ERR);
+        };
+
+        var req = e.target;
+        // req.status === 0 is special case for local files with file:// URI scheme
+        if ((req.status === 200 || req.status === 0) && req.response) {
+            window.resolveLocalFileSystemURL(getParentPath(target), function (dir) {
+                dir.getFile(getFileName(target), {create: true}, function writeFile(entry) {
+                    entry.createWriter(function (fileWriter) {
+                        fileWriter.onwriteend = function (evt) {
+                            if (!evt.target.error) {
+                                entry.filesystemName = entry.filesystem.name;
+                                delete transfers[that._id];
+                                if (successCallback) {
+                                    successCallback(entry);
+                                }
+                            } else {
+                                fail(FileTransferError.FILE_NOT_FOUND_ERR);
+                            }
+                        };
+                        fileWriter.onerror = function () {
+                            fail(FileTransferError.FILE_NOT_FOUND_ERR);
+                        };
+                        fileWriter.write(req.response);
+                    }, fileNotFound);
+                }, fileNotFound);
+            }, fileNotFound);
+        } else if (req.status === 404) {
+            fail(FileTransferError.INVALID_URL_ERR, req.status, req.response);
+        } else {
+            fail(FileTransferError.CONNECTION_ERR, req.status, req.response);
+        }
+    };
+
+    xhr.onprogress = function (e) {
+        if (that.onprogress) {
+            that.onprogress(e);
+        }
+    };
+
+    xhr.onerror = function () {
+        fail(FileTransferError.CONNECTION_ERR, this.status, this.response);
+    };
+
+    xhr.onabort = function () {
+        fail(FileTransferError.ABORT_ERR, this.status, this.response);
+    };
+
+    xhr.open("GET", source, true);
+
+    for (var header in headers) {
+        if (headers.hasOwnProperty(header)) {
+            xhr.setRequestHeader(header, headers[header]);
+        }
+    }
+
+    xhr.responseType = "blob";
+
+    xhr.send();
+};
+
+/**
+ * Aborts the ongoing file transfer on this object. The original error
+ * callback for the file transfer will be called if necessary.
+ */
+FileTransfer.prototype.abort = function() {
+    if (this instanceof FileTransfer) {
+        if (transfers[this._id]) {
+            transfers[this._id].abort();
+            delete transfers[this._id];
+        }
+    }
+};
+
+module.exports = FileTransfer;
+
+});
index 6dfc268..1188234 100644 (file)
@@ -20,7 +20,7 @@
        <key>ArchiveVersion</key>
        <integer>2</integer>
        <key>CreationDate</key>
-       <date>2019-10-15T06:27:42Z</date>
+       <date>2019-12-05T03:31:51Z</date>
        <key>Name</key>
        <string>dlapp</string>
        <key>SchemeName</key>
index b6d39e0..1eccaa6 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x.png differ
index b6d39e0..1eccaa6 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x~ipad.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@2x~ipad.png differ
index 6c57027..3b82b8e 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@3x.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20@3x.png differ
index cf8d677..041611d 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20~ipad.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon20x20~ipad.png differ
index 0300838..72797b6 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29.png differ
index f0b5e77..4b3c6b6 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x.png differ
index f0b5e77..4b3c6b6 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x~ipad.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@2x~ipad.png differ
index 4b12f07..d6b36b2 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@3x.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29@3x.png differ
index 0300838..72797b6 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29~ipad.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon29x29~ipad.png differ
index 0eed434..f225050 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x.png differ
index 0eed434..f225050 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x~ipad.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@2x~ipad.png differ
index d7269ae..60de1b7 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@3x.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40@3x.png differ
index b6d39e0..1eccaa6 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40~ipad.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon40x40~ipad.png differ
index d7269ae..60de1b7 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@2x.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@2x.png differ
index 23fc9e6..f7b4e8b 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@3x.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon60x60@3x.png differ
index 95c031b..7a93042 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76@2x~ipad.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76@2x~ipad.png differ
index c9fb74c..35476ad 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76~ipad.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon76x76~ipad.png differ
index c9e7e72..528d3fb 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon83.5x83.5@2x~ipad.png and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/AppIcon83.5x83.5@2x~ipad.png differ
index 469f982..87dace3 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Assets.car and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Assets.car differ
index f847568..067774f 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftAVFoundation.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftAVFoundation.dylib differ
index f92050a..e0af03d 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCore.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCore.dylib differ
index b47d26d..e547d8a 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreAudio.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreAudio.dylib differ
index 9e69faf..44fa745 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreFoundation.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreFoundation.dylib differ
index bb04266..79e7863 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreGraphics.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreGraphics.dylib differ
index 52a6c7b..62cd987 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreImage.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreImage.dylib differ
index 8b84edc..da5e8bf 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreMedia.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftCoreMedia.dylib differ
index 6f48cc7..28617f5 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDarwin.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDarwin.dylib differ
index 94f285a..534e4a9 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDispatch.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftDispatch.dylib differ
index d08c753..3e6ec4c 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftFoundation.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftFoundation.dylib differ
index 32022d1..cbc8652 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftMetal.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftMetal.dylib differ
index d864b8a..736844d 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftObjectiveC.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftObjectiveC.dylib differ
index 65a6924..5ab4fc6 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftQuartzCore.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftQuartzCore.dylib differ
index 8ce3457..c0faa0d 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftSwiftOnoneSupport.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftSwiftOnoneSupport.dylib differ
index 40be0c4..d2a3b8d 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftUIKit.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftUIKit.dylib differ
index b4d2a6c..2ad5b46 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftos.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftos.dylib differ
index d4d32c5..7105c57 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftsimd.dylib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/Frameworks/libswiftsimd.dylib differ
index 45fc475..ab7b9d5 100644 (file)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/MainViewController.nib and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/MainViewController.nib differ
index 297e03c..e77d55e 100644 (file)
        <dict>
                <key>AppIcon20x20@2x.png</key>
                <data>
-               4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+               ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
                </data>
                <key>AppIcon20x20@2x~ipad.png</key>
                <data>
-               4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+               ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
                </data>
                <key>AppIcon20x20@3x.png</key>
                <data>
-               inNMZ0LYnXYtiXOTodGWImyL6MU=
+               GhZ+99neDdxiVNHn8p/7t9f0WRU=
                </data>
                <key>AppIcon20x20~ipad.png</key>
                <data>
-               QgEmJmozGUfF6Gxc90W4zVT/ZEk=
+               KKdJn0/ZdWeM5CyeUGdX1k3Ulvs=
                </data>
                <key>AppIcon29x29.png</key>
                <data>
-               HHDfUCqu1hpJ1qn2R16w+JzH8/k=
+               dZxsAzYemCu20R1t07HWjs5LOlE=
                </data>
                <key>AppIcon29x29@2x.png</key>
                <data>
-               dpGzXh2r7rpz2qmVWfS/drJRxFk=
+               R0vEfvATPAFnCHYMnHg1qoJA57Y=
                </data>
                <key>AppIcon29x29@2x~ipad.png</key>
                <data>
-               dpGzXh2r7rpz2qmVWfS/drJRxFk=
+               R0vEfvATPAFnCHYMnHg1qoJA57Y=
                </data>
                <key>AppIcon29x29@3x.png</key>
                <data>
-               gcxHkRSzkCsIG42uKL9uYXOrdJE=
+               RrPJcSN0hluyHzEVVtCzp9/YaPM=
                </data>
                <key>AppIcon29x29~ipad.png</key>
                <data>
-               HHDfUCqu1hpJ1qn2R16w+JzH8/k=
+               dZxsAzYemCu20R1t07HWjs5LOlE=
                </data>
                <key>AppIcon40x40@2x.png</key>
                <data>
-               BcBek5g6jsOqa0ibWCnC1JTgL+c=
+               BS4flHNyMz69N+DP5pU+eLZlHp8=
                </data>
                <key>AppIcon40x40@2x~ipad.png</key>
                <data>
-               BcBek5g6jsOqa0ibWCnC1JTgL+c=
+               BS4flHNyMz69N+DP5pU+eLZlHp8=
                </data>
                <key>AppIcon40x40@3x.png</key>
                <data>
-               +0oGxBUPkB+c6Z7XyUmtZpCo2lU=
+               GgR7ZKUL6tnhZi2VaWX9QUiExPY=
                </data>
                <key>AppIcon40x40~ipad.png</key>
                <data>
-               4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+               ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
                </data>
                <key>AppIcon60x60@2x.png</key>
                <data>
-               +0oGxBUPkB+c6Z7XyUmtZpCo2lU=
+               GgR7ZKUL6tnhZi2VaWX9QUiExPY=
                </data>
                <key>AppIcon60x60@3x.png</key>
                <data>
-               2N92m9WnIZ8k7WASphMkppCl7HA=
+               gU5edvZx0WsuQ5EzxLy7eiiOmVo=
                </data>
                <key>AppIcon76x76@2x~ipad.png</key>
                <data>
-               iMfY34hWth/mR2xKqlWonHWYrDQ=
+               IvvQEhgl2Vu/ivPtc25ye4hwts8=
                </data>
                <key>AppIcon76x76~ipad.png</key>
                <data>
-               z6rQV98PVDRhQUXa/DwAbinm0SA=
+               iIx7D0jU/5FXBsFwS1+znaxCpkA=
                </data>
                <key>AppIcon83.5x83.5@2x~ipad.png</key>
                <data>
-               oJtSiDfNgPpCB0QhhFClnkrbXcQ=
+               ZIKT43nA0D1URGsAOPDKV+NZS8M=
                </data>
                <key>Assets.car</key>
                <data>
-               MI34mk5EtOkVCHYwJBxmd39rUbk=
+               e9+5CE8NLHRmZwrjjeZ5OyxzJqU=
                </data>
                <key>Frameworks/libswiftAVFoundation.dylib</key>
                <data>
-               BBuJ8uNJrWrURIdexWl4e+vXAvA=
+               dmDQw9y9GvcdtpoWZBMHwT1K17c=
                </data>
                <key>Frameworks/libswiftCore.dylib</key>
                <data>
-               pTbPSHWWYG/yscK8pmh9JLGa/gU=
+               3zT2JcjxbeofEWNjBIZCE/PuSjw=
                </data>
                <key>Frameworks/libswiftCoreAudio.dylib</key>
                <data>
-               DsyD0FTqKYXHdKQ8o342ImVv/7Q=
+               GTT9D8redyF1vbkZ0D5Zobxe3cU=
                </data>
                <key>Frameworks/libswiftCoreFoundation.dylib</key>
                <data>
-               m6o/BG4l4chH3kGhzkxMA8Lh4fs=
+               juqWoBPjkkOkjY3otgQxSc1zkxw=
                </data>
                <key>Frameworks/libswiftCoreGraphics.dylib</key>
                <data>
-               peI1hRvkz/2wJYUVhxcjJ5AZJ/w=
+               hEeFWPEZNK+DBc171H2vJmaNEww=
                </data>
                <key>Frameworks/libswiftCoreImage.dylib</key>
                <data>
-               v4j+K3FiRAz0UoIhS/aE9kwxpHc=
+               srsBV/CBnRVmsOEmfbDxjnA2neA=
                </data>
                <key>Frameworks/libswiftCoreMedia.dylib</key>
                <data>
-               BPp/U4KnUvs/EIcuSuyjUEiCunM=
+               rcyGNo+lZP9hVzN7sjLpJO6e9YQ=
                </data>
                <key>Frameworks/libswiftDarwin.dylib</key>
                <data>
-               Rl5le1b8dTOLgzeejpIkLEFsgfM=
+               EFpRh65DL9akn+Z6ioeP2sjrllQ=
                </data>
                <key>Frameworks/libswiftDispatch.dylib</key>
                <data>
-               ZwVOe6/BFZQXWdo7M3VhyJC3TM8=
+               vBO/esLYhyJ7rkEbhvQi04JZ6iU=
                </data>
                <key>Frameworks/libswiftFoundation.dylib</key>
                <data>
-               QprHd55Ei5gjTxPmBVMkw0JfYAo=
+               1oREHDzKKiajdNGHcuaW4qzORrU=
                </data>
                <key>Frameworks/libswiftMetal.dylib</key>
                <data>
-               6pTO4txXfyz4hfKC7qOe2ZdJ1dg=
+               xMHjkPynvVQO70kI+xUD63pu1eE=
                </data>
                <key>Frameworks/libswiftObjectiveC.dylib</key>
                <data>
-               Vfj4ZqWFmvVgPHMkJXGsKnjVkig=
+               KdkvGCWAngQJpp6nxwLaQpiYW6A=
                </data>
                <key>Frameworks/libswiftQuartzCore.dylib</key>
                <data>
-               vC9jL88UMDMhknN4r/y6P4p8IIU=
+               p/AgbrtrlTXI7b9eqxVagyqxq3E=
                </data>
                <key>Frameworks/libswiftSwiftOnoneSupport.dylib</key>
                <data>
-               3Rz7pIIRUUs4BJrkfMth2M8Z9K0=
+               QkG2/piR66ZmT/xtTOAg8YZ1YXs=
                </data>
                <key>Frameworks/libswiftUIKit.dylib</key>
                <data>
-               0tEY9Ldxj6zceqZg2JXlDnHhDS8=
+               R2vzCSRtekxwt/w3hyC5uDQDP4U=
                </data>
                <key>Frameworks/libswiftos.dylib</key>
                <data>
-               A1vyKE/09WJVYoo7x0E3+ZVXeBM=
+               m3+9HKfuR3qMJDRQow6DtDyXQQ8=
                </data>
                <key>Frameworks/libswiftsimd.dylib</key>
                <data>
-               Q9gxSQV8yq+0XtSjd4c3qCNqghU=
+               Galldu67qIFDrTH/MeGzh8sDv9k=
                </data>
                <key>Info.plist</key>
                <data>
                </data>
                <key>MainViewController.nib</key>
                <data>
-               h27QShEEqp2YliUGmzbvowlsX9I=
+               koWBzWcwwj6XJLRkyaGGkmV2Bcc=
                </data>
                <key>PkgInfo</key>
                <data>
                </data>
                <key>config.xml</key>
                <data>
-               PZUzb4/2ynWqr9WkAFnsX6KOZ1k=
+               n1EAWuZ4faYwmjuBbQ0QES0F67A=
                </data>
                <key>embedded.mobileprovision</key>
                <data>
                </data>
                <key>www/bindcheck.html</key>
                <data>
-               jGx5uAhkm+a3PdC0Z5ENLMfZa+M=
+               XH5dN9nTWa/E+s6V+Zwi0P/FUYw=
                </data>
                <key>www/card.html</key>
                <data>
                </data>
                <key>www/cardinfor.html</key>
                <data>
-               QQg8HZreHawxjyGafVvCyGhCGrw=
+               RHBhk2UhuNxYzG8kf7pOAsw4kGU=
                </data>
                <key>www/cordova-js-src/exec.js</key>
                <data>
                </data>
                <key>www/cordova_plugins.js</key>
                <data>
-               mjZMhcaV9rGT+gEJycqyUiJiwp8=
+               HQOKu0hTPe6fq1P1wO1LoP8HtgI=
                </data>
                <key>www/css/aui-iconfont.ttf</key>
                <data>
                </data>
                <key>www/js/bindcard.js</key>
                <data>
-               0B7mevzLJOBg0VXTUpHtZ//18PQ=
+               Ysntrs0q1qAqlEefYvglyu3eoI4=
                </data>
                <key>www/js/bindcheck.js</key>
                <data>
-               5RfLHKNNVVwPSEOzS8TfUZ0lpJQ=
+               GTPsPGLI8aaV2k5LtPK0c2+NnGE=
                </data>
                <key>www/js/card.js</key>
                <data>
                </data>
                <key>www/js/cardinfor.js</key>
                <data>
-               H5Qek3wUoBtXbL/Ry+v/gt4riXg=
+               62jCoaZTsDLir4Rxq8Q8TIwQufc=
                </data>
                <key>www/js/db.js</key>
                <data>
                </data>
                <key>www/js/main.js</key>
                <data>
-               0GJu73OFCX3YlRcB4DWzCmggX94=
+               HpZT8Ysc+/FTRb3MxKtp3lvPYAM=
                </data>
                <key>www/js/mobile.js</key>
                <data>
                </data>
                <key>www/js/qrcode.js</key>
                <data>
-               Cx6iRRJAH08QlPBBT//jwM7LZP4=
+               JeNJiL4CmSC5LsD8KK/ZtGtp70k=
                </data>
                <key>www/js/register.js</key>
                <data>
-               kEIN8Lt6KbeSEYmiYk47uhchWg8=
+               JQaJE5lT+p3bMdfpHRMD7mVk7rA=
                </data>
                <key>www/js/scan.js</key>
                <data>
-               u/uxG7pig1OIhkJvIOSMYiOTs8c=
+               9kMdeIdvvtMD2cLcujur6+v1ntE=
                </data>
                <key>www/js/security.js</key>
                <data>
                </data>
                <key>www/js/server.js</key>
                <data>
-               7hP5JogQrZX3Y7gz7anbjekAU1k=
+               6Cwg320/oc/nsmU2Fbj4eNG8dGo=
                </data>
                <key>www/js/signxy.js</key>
                <data>
                </data>
                <key>www/js/signxycheck.js</key>
                <data>
-               OQxn/Q3V2ODyeXPO0htt940uIyM=
+               66nnYQb6FRQcu9XGNEDjLhRZRaQ=
                </data>
                <key>www/js/uxy.js</key>
                <data>
                </data>
                <key>www/main.html</key>
                <data>
-               PEdyDAoIJ4z2Zwdw7nZQKul7P9M=
+               SVOoElUZsKWPwn7lvgGYAuu4wPs=
                </data>
                <key>www/main1.html</key>
                <data>
                <data>
                heGNNKQaZlidpB3qvXFXCW/7bX0=
                </data>
+               <key>www/my.html</key>
+               <data>
+               BUBrEJQD4PffOvTDZFrKmckMu24=
+               </data>
                <key>www/paypwdmng.html</key>
                <data>
                +Mjis5f4NK8v7VpKUbilfHxz4no=
                <data>
                V7Ywjbu2Kj4wesp8mWW2lF5aDpE=
                </data>
+               <key>www/plugins/cordova-plugin-brightness/www/brightness.js</key>
+               <data>
+               FrJFTczXZ/W9VS3gElKUNATvxE4=
+               </data>
                <key>www/plugins/cordova-plugin-camera/www/Camera.js</key>
                <data>
                /Tl12sGFo/UZbPqnupaaV0Hg0vU=
                </data>
                <key>www/qrcode.html</key>
                <data>
-               FK8oc1oB59vB31qmvZp+SzcB9/U=
+               PmFDX7bCnDmVlZ5pDAXyikKJwMQ=
                </data>
                <key>www/register.html</key>
                <data>
                </data>
                <key>www/signxycheck.html</key>
                <data>
-               OC5VO7siXCVWFdZQFLrRkOG5Jdk=
+               0eypcjj4wr9SerMRKUWVOazcxEU=
                </data>
                <key>www/uxy.html</key>
                <data>
                <dict>
                        <key>hash</key>
                        <data>
-                       4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+                       ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
                        </data>
                        <key>hash2</key>
                        <data>
-                       /jx2HIiBG+oNpd+0usVeIZxAvkA27ZpiSAex3riWFHQ=
+                       MsmE6TTzj1kEqSbH1BlcQ4QdZvL3Cy33ta/Sh6RqUw8=
                        </data>
                </dict>
                <key>AppIcon20x20@2x~ipad.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+                       ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
                        </data>
                        <key>hash2</key>
                        <data>
-                       /jx2HIiBG+oNpd+0usVeIZxAvkA27ZpiSAex3riWFHQ=
+                       MsmE6TTzj1kEqSbH1BlcQ4QdZvL3Cy33ta/Sh6RqUw8=
                        </data>
                </dict>
                <key>AppIcon20x20@3x.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       inNMZ0LYnXYtiXOTodGWImyL6MU=
+                       GhZ+99neDdxiVNHn8p/7t9f0WRU=
                        </data>
                        <key>hash2</key>
                        <data>
-                       BR1eZknKOY1H7MAyXZld2yKSOCayLZBdlj5QRFNTSws=
+                       ZwyEzr6tEUlDxmAvi9vcjkdY4EihbJZqSM/cGEQHPG8=
                        </data>
                </dict>
                <key>AppIcon20x20~ipad.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       QgEmJmozGUfF6Gxc90W4zVT/ZEk=
+                       KKdJn0/ZdWeM5CyeUGdX1k3Ulvs=
                        </data>
                        <key>hash2</key>
                        <data>
-                       Ck2d8ewvZ1cjSx6Vo6hRiwiKcwV7Khb61Rslp5EBorE=
+                       d3IKJOYrSapm2LZSsPpnNaIfiacEh5zrYjyeL24bi1o=
                        </data>
                </dict>
                <key>AppIcon29x29.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       HHDfUCqu1hpJ1qn2R16w+JzH8/k=
+                       dZxsAzYemCu20R1t07HWjs5LOlE=
                        </data>
                        <key>hash2</key>
                        <data>
-                       lFwBNCRgbv9HY1G5bOKNhPiyURhYafyWeI84Xcl8ljg=
+                       onxUDJUW/zHu3m5H+9mJBqcONmO769E4c/0uE7fAPo4=
                        </data>
                </dict>
                <key>AppIcon29x29@2x.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       dpGzXh2r7rpz2qmVWfS/drJRxFk=
+                       R0vEfvATPAFnCHYMnHg1qoJA57Y=
                        </data>
                        <key>hash2</key>
                        <data>
-                       nqN/EqFaooiXfy5K9WhOXvone1cRRvxgsXw4DnLmVlA=
+                       sBLYe+F/UI90kgRg6HHpEGPcYIrGhSizKGSbzLZYnyc=
                        </data>
                </dict>
                <key>AppIcon29x29@2x~ipad.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       dpGzXh2r7rpz2qmVWfS/drJRxFk=
+                       R0vEfvATPAFnCHYMnHg1qoJA57Y=
                        </data>
                        <key>hash2</key>
                        <data>
-                       nqN/EqFaooiXfy5K9WhOXvone1cRRvxgsXw4DnLmVlA=
+                       sBLYe+F/UI90kgRg6HHpEGPcYIrGhSizKGSbzLZYnyc=
                        </data>
                </dict>
                <key>AppIcon29x29@3x.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       gcxHkRSzkCsIG42uKL9uYXOrdJE=
+                       RrPJcSN0hluyHzEVVtCzp9/YaPM=
                        </data>
                        <key>hash2</key>
                        <data>
-                       4VwirX+1pgq35pmm0UyXcG2+NXkxl6DvDAFQ9dvqiLs=
+                       gZW7wGeYjOoAtkOf4paX58K65oUqySqICya26prwmaw=
                        </data>
                </dict>
                <key>AppIcon29x29~ipad.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       HHDfUCqu1hpJ1qn2R16w+JzH8/k=
+                       dZxsAzYemCu20R1t07HWjs5LOlE=
                        </data>
                        <key>hash2</key>
                        <data>
-                       lFwBNCRgbv9HY1G5bOKNhPiyURhYafyWeI84Xcl8ljg=
+                       onxUDJUW/zHu3m5H+9mJBqcONmO769E4c/0uE7fAPo4=
                        </data>
                </dict>
                <key>AppIcon40x40@2x.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       BcBek5g6jsOqa0ibWCnC1JTgL+c=
+                       BS4flHNyMz69N+DP5pU+eLZlHp8=
                        </data>
                        <key>hash2</key>
                        <data>
-                       9WHfcGm0K8HueWfC1UjexYAfaBhvFKeDZfsEyFCEtx4=
+                       EvDh32SrdFfyGSkceOrHpYaGmfUw7pDIkd3OvLiPo28=
                        </data>
                </dict>
                <key>AppIcon40x40@2x~ipad.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       BcBek5g6jsOqa0ibWCnC1JTgL+c=
+                       BS4flHNyMz69N+DP5pU+eLZlHp8=
                        </data>
                        <key>hash2</key>
                        <data>
-                       9WHfcGm0K8HueWfC1UjexYAfaBhvFKeDZfsEyFCEtx4=
+                       EvDh32SrdFfyGSkceOrHpYaGmfUw7pDIkd3OvLiPo28=
                        </data>
                </dict>
                <key>AppIcon40x40@3x.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       +0oGxBUPkB+c6Z7XyUmtZpCo2lU=
+                       GgR7ZKUL6tnhZi2VaWX9QUiExPY=
                        </data>
                        <key>hash2</key>
                        <data>
-                       F6dGIPQp/X9Huj5SI1FnfRlgqZsfJ8plPgS5DLXmyHc=
+                       cs6fxgIoK170dcGdkiAhzRTfYvUHvnT0zCQIjXRqLDE=
                        </data>
                </dict>
                <key>AppIcon40x40~ipad.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       4s3iHwVtc4D5rEDx0dsVP3Ccp+M=
+                       ccS6pC3ve2K3q7Q0T5ChWwyXnrs=
                        </data>
                        <key>hash2</key>
                        <data>
-                       /jx2HIiBG+oNpd+0usVeIZxAvkA27ZpiSAex3riWFHQ=
+                       MsmE6TTzj1kEqSbH1BlcQ4QdZvL3Cy33ta/Sh6RqUw8=
                        </data>
                </dict>
                <key>AppIcon60x60@2x.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       +0oGxBUPkB+c6Z7XyUmtZpCo2lU=
+                       GgR7ZKUL6tnhZi2VaWX9QUiExPY=
                        </data>
                        <key>hash2</key>
                        <data>
-                       F6dGIPQp/X9Huj5SI1FnfRlgqZsfJ8plPgS5DLXmyHc=
+                       cs6fxgIoK170dcGdkiAhzRTfYvUHvnT0zCQIjXRqLDE=
                        </data>
                </dict>
                <key>AppIcon60x60@3x.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       2N92m9WnIZ8k7WASphMkppCl7HA=
+                       gU5edvZx0WsuQ5EzxLy7eiiOmVo=
                        </data>
                        <key>hash2</key>
                        <data>
-                       dQmhVBOE7LllJ1jQuS6MlUwqAY9rw3N83U9OpTvQmUI=
+                       u3YgSHECpcRbp4Wa59b47Zwm+bCrrzSrS1JmUG6BtGo=
                        </data>
                </dict>
                <key>AppIcon76x76@2x~ipad.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       iMfY34hWth/mR2xKqlWonHWYrDQ=
+                       IvvQEhgl2Vu/ivPtc25ye4hwts8=
                        </data>
                        <key>hash2</key>
                        <data>
-                       zDK30NWfjipDfaQp5rJ1roBf5sk1HCHP1AHfE8Koa3c=
+                       Wgdfvd/gB5hdNDv9cwcZASD/YrHBus8NjmInFDI1J+A=
                        </data>
                </dict>
                <key>AppIcon76x76~ipad.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       z6rQV98PVDRhQUXa/DwAbinm0SA=
+                       iIx7D0jU/5FXBsFwS1+znaxCpkA=
                        </data>
                        <key>hash2</key>
                        <data>
-                       SEIGmphMB4mPWfJUCc/8/OEHXuPaOTnpwx7fqG/I01U=
+                       wOX8ArTYN5K2FpMXLGclESNN1lIEev2DJBLmfMYOUwg=
                        </data>
                </dict>
                <key>AppIcon83.5x83.5@2x~ipad.png</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       oJtSiDfNgPpCB0QhhFClnkrbXcQ=
+                       ZIKT43nA0D1URGsAOPDKV+NZS8M=
                        </data>
                        <key>hash2</key>
                        <data>
-                       p9CZ5DH6P6Cwm2CIRfkZRVd5VcVYXRhHPP0Zdeujh7o=
+                       tTaeRZFYhMoDi2ZImxgarDOCu32VsnidQxbXySCYSIQ=
                        </data>
                </dict>
                <key>Assets.car</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       MI34mk5EtOkVCHYwJBxmd39rUbk=
+                       e9+5CE8NLHRmZwrjjeZ5OyxzJqU=
                        </data>
                        <key>hash2</key>
                        <data>
-                       uO+oqQYOdNiKEekqzK4ijCuCF/a4db6Mq2/LLL5vdf0=
+                       z6pNTT1RTC09Zjpy2bxhJWQCeGSPvt3+kTJ3CVT7R+4=
                        </data>
                </dict>
                <key>Frameworks/libswiftAVFoundation.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       BBuJ8uNJrWrURIdexWl4e+vXAvA=
+                       dmDQw9y9GvcdtpoWZBMHwT1K17c=
                        </data>
                        <key>hash2</key>
                        <data>
-                       d7GBGJ88UJXlcjpidc9UpdiVDowkgZKRfhEp6wUJ3Ns=
+                       uTMRUm0VqcFy37eIRUW4qsiF9S4trLtowk/jCUKH6N0=
                        </data>
                </dict>
                <key>Frameworks/libswiftCore.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       pTbPSHWWYG/yscK8pmh9JLGa/gU=
+                       3zT2JcjxbeofEWNjBIZCE/PuSjw=
                        </data>
                        <key>hash2</key>
                        <data>
-                       jblnNK1CWUwV17+/SUKyUv4Fmb4siTscmDzLy2PzalQ=
+                       WSbGoO8iA7F9/Jh8n/ffunc8LLNG23/oXSZHakkRZAs=
                        </data>
                </dict>
                <key>Frameworks/libswiftCoreAudio.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       DsyD0FTqKYXHdKQ8o342ImVv/7Q=
+                       GTT9D8redyF1vbkZ0D5Zobxe3cU=
                        </data>
                        <key>hash2</key>
                        <data>
-                       asjY2hknIzUab1BxkSMdcSn3ee03/69poDXj6hLXwmE=
+                       QUHqXaYMt0GtY8pQnAoP76HgM2ptnK1FTaPKuucWiDg=
                        </data>
                </dict>
                <key>Frameworks/libswiftCoreFoundation.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       m6o/BG4l4chH3kGhzkxMA8Lh4fs=
+                       juqWoBPjkkOkjY3otgQxSc1zkxw=
                        </data>
                        <key>hash2</key>
                        <data>
-                       pZBaz9EW7u38t7hqTe0TDFsNFrdQBKnGW/+ZXMBMhss=
+                       UChvnOGr7S5lSleyuqPmwisEXpzi+LOw7G5LgmCOVPI=
                        </data>
                </dict>
                <key>Frameworks/libswiftCoreGraphics.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       peI1hRvkz/2wJYUVhxcjJ5AZJ/w=
+                       hEeFWPEZNK+DBc171H2vJmaNEww=
                        </data>
                        <key>hash2</key>
                        <data>
-                       kBO8Kl3ds8wsnUOYL32g9BUEwELWNjAXAhpGA21+HKA=
+                       xd2hz37QDRWhBZi0N0YZpLZ6b6SBn6uMgFMBYVBbA/E=
                        </data>
                </dict>
                <key>Frameworks/libswiftCoreImage.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       v4j+K3FiRAz0UoIhS/aE9kwxpHc=
+                       srsBV/CBnRVmsOEmfbDxjnA2neA=
                        </data>
                        <key>hash2</key>
                        <data>
-                       nac0nVGh8w40GNw+4tWE//3bl9iYMIFzW4vmI/j0xJM=
+                       uijDFlioqd8tgh8DYkP+/Hv9CHRUdOD62MHhEdR5b4Y=
                        </data>
                </dict>
                <key>Frameworks/libswiftCoreMedia.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       BPp/U4KnUvs/EIcuSuyjUEiCunM=
+                       rcyGNo+lZP9hVzN7sjLpJO6e9YQ=
                        </data>
                        <key>hash2</key>
                        <data>
-                       U3QuWNbGqePs/LgfOxB9hU/lNooMogZWgnvRpcbgftM=
+                       Gd3ECjIsgZErJwfF+lUValGdezl4W3Iy//pQOcW27K4=
                        </data>
                </dict>
                <key>Frameworks/libswiftDarwin.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       Rl5le1b8dTOLgzeejpIkLEFsgfM=
+                       EFpRh65DL9akn+Z6ioeP2sjrllQ=
                        </data>
                        <key>hash2</key>
                        <data>
-                       aFXxvzO47QW6Yuw8F31XrkEAPIZ518pYm3HajzW0hJ4=
+                       sTgr1BEKCgBu+Fw40N/pJ0ggfWYe8WmunldRw06uaWk=
                        </data>
                </dict>
                <key>Frameworks/libswiftDispatch.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       ZwVOe6/BFZQXWdo7M3VhyJC3TM8=
+                       vBO/esLYhyJ7rkEbhvQi04JZ6iU=
                        </data>
                        <key>hash2</key>
                        <data>
-                       HPX9eGXjnf04VcRF9oQpnCh/tDfurqRzU9TJaSpY4pU=
+                       R0PbCUcYaEKpdm5aJ2/FQ1ECYWpIOoyl0TF1gdN7u5A=
                        </data>
                </dict>
                <key>Frameworks/libswiftFoundation.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       QprHd55Ei5gjTxPmBVMkw0JfYAo=
+                       1oREHDzKKiajdNGHcuaW4qzORrU=
                        </data>
                        <key>hash2</key>
                        <data>
-                       qBHE5OUugUs5FnLR7A6gKW4VwCHYHMhAU+DrKQnNlQE=
+                       /iHrWF/ujVm3A+S6ebyrh7ScUbEmduaB+uJdk7olM8Y=
                        </data>
                </dict>
                <key>Frameworks/libswiftMetal.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       6pTO4txXfyz4hfKC7qOe2ZdJ1dg=
+                       xMHjkPynvVQO70kI+xUD63pu1eE=
                        </data>
                        <key>hash2</key>
                        <data>
-                       EhdUiIrVd7iF8MhxoNg0fQtL8y07sba269/5Lc8VLFA=
+                       RAvPyJ2ZYiYD7/ByGol66KRd7PhjBuoKv5LfqiMZMsA=
                        </data>
                </dict>
                <key>Frameworks/libswiftObjectiveC.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       Vfj4ZqWFmvVgPHMkJXGsKnjVkig=
+                       KdkvGCWAngQJpp6nxwLaQpiYW6A=
                        </data>
                        <key>hash2</key>
                        <data>
-                       xd8CDu0sjqbrupXDENHFR4DZj7gc6YGcEstyRUa9iOg=
+                       upd25/zAqhaR4eNZ08pfAKgYHqRzW6//OwD/KpmS2bY=
                        </data>
                </dict>
                <key>Frameworks/libswiftQuartzCore.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       vC9jL88UMDMhknN4r/y6P4p8IIU=
+                       p/AgbrtrlTXI7b9eqxVagyqxq3E=
                        </data>
                        <key>hash2</key>
                        <data>
-                       LVpsrClPMhwoCxYgGdvl6oFT/d4TK2wDp5icwZyD+8g=
+                       vFMv8rZ4upTxXYKpvSQZuAugl3ltOGYaX/LtIWoMitE=
                        </data>
                </dict>
                <key>Frameworks/libswiftSwiftOnoneSupport.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       3Rz7pIIRUUs4BJrkfMth2M8Z9K0=
+                       QkG2/piR66ZmT/xtTOAg8YZ1YXs=
                        </data>
                        <key>hash2</key>
                        <data>
-                       MsKil6JqwHfu4+8fStyHf3RpXOBPSs0JdyxrAQxBWuw=
+                       R+cBZr/hVR/dPCgEV4SbpT44gAx6aI3H2/yMmFUqar4=
                        </data>
                </dict>
                <key>Frameworks/libswiftUIKit.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       0tEY9Ldxj6zceqZg2JXlDnHhDS8=
+                       R2vzCSRtekxwt/w3hyC5uDQDP4U=
                        </data>
                        <key>hash2</key>
                        <data>
-                       klDw4B7e7ynMPKIJ1GhZpBFjE5WEJ2h71dkIGj0GraE=
+                       PvTYCyFwbZiEbJ7aXR2X5i5ANnfMtiQ8bR3Tviscaik=
                        </data>
                </dict>
                <key>Frameworks/libswiftos.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       A1vyKE/09WJVYoo7x0E3+ZVXeBM=
+                       m3+9HKfuR3qMJDRQow6DtDyXQQ8=
                        </data>
                        <key>hash2</key>
                        <data>
-                       xY7vJEHoJdTu/o0ZpKxTJSllUToMl6Ad6eCSfkhQN6k=
+                       tv80YkF7OiONqp8laV1iPgLrnJwrUgaCT+bCHzDelmE=
                        </data>
                </dict>
                <key>Frameworks/libswiftsimd.dylib</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       Q9gxSQV8yq+0XtSjd4c3qCNqghU=
+                       Galldu67qIFDrTH/MeGzh8sDv9k=
                        </data>
                        <key>hash2</key>
                        <data>
-                       JjSEYizqevaXQNra2PZx9+82xduqZlc+vVRIfuSSzWA=
+                       Ir4rA18QhYdUfm7//DP56JZubdVNSY7LRSnjddCYRN8=
                        </data>
                </dict>
                <key>JPushConfig.plist</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       h27QShEEqp2YliUGmzbvowlsX9I=
+                       koWBzWcwwj6XJLRkyaGGkmV2Bcc=
                        </data>
                        <key>hash2</key>
                        <data>
-                       QDd8NaAdWQLfXjj1XMvoaqVfhmYvLf9OwrQ0CPKsob4=
+                       QrGika2EwsYPw4qDYyjWY+tKBAJUKrq60LVbb7m1dF0=
                        </data>
                </dict>
                <key>config.xml</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       PZUzb4/2ynWqr9WkAFnsX6KOZ1k=
+                       n1EAWuZ4faYwmjuBbQ0QES0F67A=
                        </data>
                        <key>hash2</key>
                        <data>
-                       Rc9fXTgQhylUY1cVz6eRZG2E2MiHf7lNVaYC/IY6ZD8=
+                       1XwfAuQjuTHoqw6dtT6caUUQZzuM+B7w5txQLmLiwMQ=
                        </data>
                </dict>
                <key>embedded.mobileprovision</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       jGx5uAhkm+a3PdC0Z5ENLMfZa+M=
+                       XH5dN9nTWa/E+s6V+Zwi0P/FUYw=
                        </data>
                        <key>hash2</key>
                        <data>
-                       xlAGhILXieaQ+He/c01QmmUhffREXODF7o31Lf64ah8=
+                       VTUsTd+9TLvVRzDGZmPWE0KWjMPL1SZzMwcSf3gSRzk=
                        </data>
                </dict>
                <key>www/card.html</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       QQg8HZreHawxjyGafVvCyGhCGrw=
+                       RHBhk2UhuNxYzG8kf7pOAsw4kGU=
                        </data>
                        <key>hash2</key>
                        <data>
-                       dLCHrYVEZUVA/9OSA1MYq9G/NQhW9Q6iTid44oVzVCc=
+                       rlU4EBXI/nZ53oKehs/zRVeck4i/V6M0Yr6DATYt9GQ=
                        </data>
                </dict>
                <key>www/cordova-js-src/exec.js</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       mjZMhcaV9rGT+gEJycqyUiJiwp8=
+                       HQOKu0hTPe6fq1P1wO1LoP8HtgI=
                        </data>
                        <key>hash2</key>
                        <data>
-                       NAGln7mA1gWlhX8EULmd8KjWEz3VwOZVBK1TutRZiQ4=
+                       sm2blQo73RzNr/seRXdVpGhyUzyFYU7GIHsuYEERK0I=
                        </data>
                </dict>
                <key>www/css/aui-iconfont.ttf</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       0B7mevzLJOBg0VXTUpHtZ//18PQ=
+                       Ysntrs0q1qAqlEefYvglyu3eoI4=
                        </data>
                        <key>hash2</key>
                        <data>
-                       RTbz/7lGwjEFRysFNUCFqZu0zLr5jrz4hYhhqEhW6co=
+                       CO2rVnhm3/WaB883+VEt+r4jiBGJESy3xQWdp8GUT7c=
                        </data>
                </dict>
                <key>www/js/bindcheck.js</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       5RfLHKNNVVwPSEOzS8TfUZ0lpJQ=
+                       GTPsPGLI8aaV2k5LtPK0c2+NnGE=
                        </data>
                        <key>hash2</key>
                        <data>
-                       iIc+Xy+koHZAAKkSK4SrrTOz6KoHuiM/du4yk7IV3xI=
+                       +DGxUBVhoqEwBw5z3SiT5FYooZDZHMvJMVDCh+nW+x4=
                        </data>
                </dict>
                <key>www/js/card.js</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       H5Qek3wUoBtXbL/Ry+v/gt4riXg=
+                       62jCoaZTsDLir4Rxq8Q8TIwQufc=
                        </data>
                        <key>hash2</key>
                        <data>
-                       ImlzAkXWit52+Okzsr+w8kHaTnJMmM0IHcp5lU6u9zw=
+                       z5IvWANnFsUHTM0eF7PrmN7mA0l6oGhJQ9uQNwTxTl8=
                        </data>
                </dict>
                <key>www/js/db.js</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       0GJu73OFCX3YlRcB4DWzCmggX94=
+                       HpZT8Ysc+/FTRb3MxKtp3lvPYAM=
                        </data>
                        <key>hash2</key>
                        <data>
-                       yGpzeGfw2KACSa3Hu+tA/5uXUpfDEj2LubnWxDqJxFs=
+                       YmWMZ4ay1dj6Sv3/gBd9FKw+Cx778K7ZxZv+ivK0aRg=
                        </data>
                </dict>
                <key>www/js/mobile.js</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       Cx6iRRJAH08QlPBBT//jwM7LZP4=
+                       JeNJiL4CmSC5LsD8KK/ZtGtp70k=
                        </data>
                        <key>hash2</key>
                        <data>
-                       y5y66ieXeEONknB6UKddmxUSVsTEKM0JD/kEZBuBQ+I=
+                       nE3dTx5GBPzcOVSZafV7jam4d1ZWYdsTK2hW140AEYg=
                        </data>
                </dict>
                <key>www/js/register.js</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       kEIN8Lt6KbeSEYmiYk47uhchWg8=
+                       JQaJE5lT+p3bMdfpHRMD7mVk7rA=
                        </data>
                        <key>hash2</key>
                        <data>
-                       SWhxKePIt9pzPkMUPoRj0WTaXD4Z7GYBGqdsoqvRyuo=
+                       x+qKVPMMkoIo27fquMOLrq+XQFV42PVbuDC6cjvtkl8=
                        </data>
                </dict>
                <key>www/js/scan.js</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       u/uxG7pig1OIhkJvIOSMYiOTs8c=
+                       9kMdeIdvvtMD2cLcujur6+v1ntE=
                        </data>
                        <key>hash2</key>
                        <data>
-                       gPLadH5W2VlCuZ52V99qWeU68uCz62OtFYHpY3jTFBc=
+                       8cb+0T4ga9G125lfrCJTBtT6K/LUyXyXJPU4ofn4A+g=
                        </data>
                </dict>
                <key>www/js/security.js</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       7hP5JogQrZX3Y7gz7anbjekAU1k=
+                       6Cwg320/oc/nsmU2Fbj4eNG8dGo=
                        </data>
                        <key>hash2</key>
                        <data>
-                       2ffigLo1Xa+Z/rgoGad55by5Ug4RwJz4mZ2lOkasD/c=
+                       mVXgdJ2LEIOlzsufDFQJGy3EL1rlWr+TWn3jhnH0of8=
                        </data>
                </dict>
                <key>www/js/signxy.js</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       OQxn/Q3V2ODyeXPO0htt940uIyM=
+                       66nnYQb6FRQcu9XGNEDjLhRZRaQ=
                        </data>
                        <key>hash2</key>
                        <data>
-                       eW7ouno0m+7r/ecUWfaUCLB8d/xGdvBMxK+RmBI3bYQ=
+                       ZcabwVnNmUkVPMvmDMoeSie8f33j0aBksf199emc9T4=
                        </data>
                </dict>
                <key>www/js/uxy.js</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       PEdyDAoIJ4z2Zwdw7nZQKul7P9M=
+                       SVOoElUZsKWPwn7lvgGYAuu4wPs=
                        </data>
                        <key>hash2</key>
                        <data>
-                       8D/UG2CsfJAhOus4F7r4s3uOZI76ibYPcwpvMMIZv0c=
+                       wX11N5M8XIFOUBDxbYR33D3IXyMzsyg2nA6LqD2DTg4=
                        </data>
                </dict>
                <key>www/main1.html</key>
                        otER8eJerTAz1mG9IypR/8h6ZnJtH1dwz3H0eVsHA5M=
                        </data>
                </dict>
+               <key>www/my.html</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       BUBrEJQD4PffOvTDZFrKmckMu24=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       jrzhEa99VLLIvclsq6udEOfzFfOvq2eTC+I1LBy9hsE=
+                       </data>
+               </dict>
                <key>www/paypwdmng.html</key>
                <dict>
                        <key>hash</key>
                        hULEK/sXXYA5Q+DEGduyGZlT2gUtMhRcybSoo9TWM+0=
                        </data>
                </dict>
+               <key>www/plugins/cordova-plugin-brightness/www/brightness.js</key>
+               <dict>
+                       <key>hash</key>
+                       <data>
+                       FrJFTczXZ/W9VS3gElKUNATvxE4=
+                       </data>
+                       <key>hash2</key>
+                       <data>
+                       KRfwyv/7WE/uiPHoXPiJHi/ZptefxPS/08ettF1uOuY=
+                       </data>
+               </dict>
                <key>www/plugins/cordova-plugin-camera/www/Camera.js</key>
                <dict>
                        <key>hash</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       FK8oc1oB59vB31qmvZp+SzcB9/U=
+                       PmFDX7bCnDmVlZ5pDAXyikKJwMQ=
                        </data>
                        <key>hash2</key>
                        <data>
-                       hKaZe4Brj53BLM4b10F58QehbRHB4aCSmOpVeXW/8sM=
+                       JsVXB5l7Z9EaOIrvC0frSCDKRbXgmplNjiZk1bh02VM=
                        </data>
                </dict>
                <key>www/register.html</key>
                <dict>
                        <key>hash</key>
                        <data>
-                       OC5VO7siXCVWFdZQFLrRkOG5Jdk=
+                       0eypcjj4wr9SerMRKUWVOazcxEU=
                        </data>
                        <key>hash2</key>
                        <data>
-                       K+OIpvhIfjlVjmqcZ0zX2HKs3wgjAPTg2JdK+oCYhGg=
+                       VYrrnWZvzLvw19ynhsBzLskzFV66f9OLlBWDtIr8LhM=
                        </data>
                </dict>
                <key>www/uxy.html</key>
index 14bae9c..a06aded 100755 (executable)
@@ -64,6 +64,9 @@
     <feature name="CDVWKWebViewEngine">
         <param name="ios-package" value="CDVWKWebViewEngine" />
     </feature>
+    <feature name="Brightness">
+        <param name="ios-package" value="Brightness" />
+    </feature>
     <name short="大理市民卡">dlapp</name>
     <description>
         A sample Apache Cordova application that responds to the deviceready event.
index 916cc72..225a82c 100755 (executable)
Binary files a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/dlapp and b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/dlapp differ
index 51e13e9..9e2560a 100644 (file)
@@ -30,6 +30,9 @@
                 <div class="weui-cell__bd">
                     <input class="weui-input" type="tel" id="code" style="font-size: 14px;" placeholder="请输入验证码" maxlength="6">
                 </div>
+                <div class="weui-cell__ft">
+                    <button class="weui-vcode-btn" onclick="app.getCode()" id="codebtn" style="width: 100px;height: 1rem;font-size: 14px;">获取验证码</button>
+                </div>
             </div>
         </div>
         <section class="aui-content-padded" style="margin-top: 30px;">
index 19ea1df..bcda2dd 100644 (file)
                 <div class="weui-cell__ft" id="cardstatus"></div>
             </div>
         </div>
+        <div style="padding: 20px;margin-top: 40px;">
+                <a href="javascript:app.unBindcard();" class="weui-btn weui-btn_warn">解除绑定</a>
+            </div>  
     </div>
 </body>
 </html>
 <script type="text/javascript" src="cordova.js"></script>
 <script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
 <script type="text/javascript" src="js/lib/jquery-weui.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
 <script type="text/javascript" src="js/server.js"></script>
 <script type="text/javascript" src="js/cardinfor.js"></script>
\ No newline at end of file
index 99f7689..eca1f34 100644 (file)
@@ -351,6 +351,14 @@ cordova.define('cordova/plugin_list', function(require, exports, module) {
       "clobbers": [
         "window.WkWebView"
       ]
+    },
+    {
+      "id": "cordova-plugin-brightness.Brightness",
+      "file": "plugins/cordova-plugin-brightness/www/brightness.js",
+      "pluginId": "cordova-plugin-brightness",
+      "clobbers": [
+        "cordova.plugins.brightness"
+      ]
     }
   ];
   module.exports.metadata = {
@@ -370,6 +378,7 @@ cordova.define('cordova/plugin_list', function(require, exports, module) {
     "cordova-plugin-jcore": "1.3.0",
     "jpush-phonegap-plugin": "3.7.2",
     "cordova-plugin-app-version": "0.1.9",
-    "cordova-plugin-wkwebview-engine": "1.2.1"
+    "cordova-plugin-wkwebview-engine": "1.2.1",
+    "cordova-plugin-brightness": "0.1.5"
   };
 });
\ No newline at end of file
index e9cb86c..f7e91a2 100644 (file)
@@ -21,15 +21,19 @@ var app = {
                     let vals = Object.values(dict);
                     console.log(keys, vals)
                     var items=[];
+                    var selectItem=items[0];
                     for(var key of keys){
                         var bean = {
                             "title":dict[key],
                             "value":key
                         }
+                        if(key == 'idcard'){
+                            selectItem=bean;
+                        }
                         items.push(bean)
                     }
-                    $("#idtype").val(items[0].title)
-                    $("#idtype").attr("data-values",items[0].value)
+                    $("#idtype").val(selectItem.title)
+                    $("#idtype").attr("data-values",selectItem.value)
                     $("#idtype").select({
                       title: "请选择证件类型",
                       items: items
@@ -55,11 +59,10 @@ var app = {
             $.alert("请选择证件类型", "错误");
             return;
         }
-        /*var agree = $("input[type=checkbox]:checked").val();
-        if(isEmpty(agree)){
-            $.alert("请同意用户协议与隐私条款", "提示");
-            return;
-        }*/
+        cardnum = cardnum.trim();
+        name = name.trim();
+        idno = idno.trim();
+        
         $.showLoading("正在处理");
         var param = {
             "cardno": cardnum,
@@ -72,8 +75,11 @@ var app = {
                 $.hideLoading();
                 console.log(ret)
                 if (ret.code == 200) {
-                    window.localStorage.setItem("phoneX",ret.phonex);
                     window.localStorage.setItem("name", name);
+                    window.localStorage.setItem("cardno", cardnum);
+                    window.localStorage.setItem("idtype", idtype);
+                    window.localStorage.setItem("idno", idno);
+                    window.localStorage.setItem("phoneX",ret.phonex);
                     window.localStorage.setItem("personid", ret.personid);
                     window.localStorage.setItem("signed", ret.signed);
                     window.localStorage.setItem("paypwdset", ret.paypwdset);
index a4214fc..32dba4c 100644 (file)
@@ -13,6 +13,44 @@ var app = {
             phone =  window.localStorage.getItem("phone");
             $("#phone").text(phone)
         }
+        $("#codebtn").attr("disabled","disabled")
+        $("#codebtn").addClass("vcodedisabled")
+        btnTime('codebtn');
+    },
+    getCode: function() {
+        var name = window.localStorage.getItem("name");
+        var cardno = window.localStorage.getItem("cardno");
+        var idtype = window.localStorage.getItem("idtype");
+        var idno = window.localStorage.getItem("idno");
+
+        $.showLoading("正在请求");
+        var param = {
+            "cardno": cardno,
+            "idtype": idtype,
+            "name": name,
+            "idno": idno
+        }
+        V1Bindcard(param, function(ok, ret) {
+            if (ok) {
+                $.hideLoading();
+                if (ret.code == 200) {
+                   $("#codebtn").attr("disabled","disabled")
+                   $("#codebtn").addClass("vcodedisabled")
+                   btnTime('codebtn');
+                } else {
+                    if (ret.code == -1) {
+                        $.alert(ret.msg, "提示", function() {
+                            window.location = "main.html"
+                        });
+                    } else {
+                        $.alert(ret.msg, "错误");
+                    }
+                }
+            } else {
+                $.hideLoading();
+                $.alert("请求失败了 " + ret.status + ",请稍后再试", "错误");
+            }
+        })
     },
     doNext: function() {
         var code =  $("#code").val();
index 3d8f675..da6e04f 100644 (file)
@@ -22,6 +22,44 @@ var app = {
                 $.alert("加载失败了:" + ret.status, "错误");
             }
         })
+    },
+    unBindcard: function(){
+        var dialog = new auiDialog({})
+        dialog.prompt({
+            title:"请输入支付密码",
+            text:'请输入支付密码',
+            buttons:['取消','确定']
+        },function(ret){
+            console.log(ret);
+            if(ret.buttonIndex == 2){
+                if(!isEmpty(ret.text)){
+                    $.showLoading("正在请求");
+                    var param = {
+                        "paypwd":ret.text
+                    }
+                    V1Unbindcard(param,function(ok, ret, err) {
+                        if (ok) {
+                            $.hideLoading(); 
+                            if(ret.code==200){
+                                window.localStorage.removeItem("userid");
+                                $.alert('解绑成功', "提示", function() {
+                                    window.location = 'main.html'
+                                });
+                            }else{
+                                $.alert(ret.msg, "错误");
+                            }
+                        } else {
+                            $.hideLoading();
+                            $.alert("请求失败了:" + ret.status, "错误");
+                        }
+                    })
+                }
+            }
+        });
+        var input = $(".aui-dialog-body").find("input");
+        if(input){
+            input.attr("type","password");
+        }
     }
 };
 app.initialize();
index 43938a2..9d3b017 100644 (file)
@@ -92,18 +92,18 @@ var app = {
             })
         });
         $('#secBtn').click(function() {
-            window.location = "security.html";
-            /*app.checkBefore(function() {
+            //window.location = "security.html";
+            app.checkBefore(function() {
                 app.checkOther(function() {
                     window.location = "security.html";
                 })
-            })*/
+            })
         });
-        $("#doorBtn").click(function(){
+        /*$("#doorBtn").click(function(){
             app.checkBefore(function() {
                 showRet(DOOR_URl);
             })
-        })
+        })*/
         $('#usersec').click(function() {
             app.checkBefore(function() {
                 app.checkOther(function() {
@@ -112,6 +112,13 @@ var app = {
             })
         });
         this.initData();
+        this.backBtn();
+    },
+    backBtn: function(){
+        document.addEventListener("backbutton", function(e){
+               e.preventDefault();
+               navigator.app.exitApp();
+            }, false);
     },
     initTab: function() {
         $("#maincontent").css("top", $("#maintop").height())
@@ -321,6 +328,10 @@ var app = {
         } else {
             window.location = 'cardinfor.html'
         }
+    },
+    logout:function(){
+        window.localStorage.removeItem("token");
+        window.location = "login.html";
     }
 };
 app.initialize();
index 4664a9b..b9d81b9 100644 (file)
@@ -1,16 +1,27 @@
+var brightness;
+var bvalue;
+var setted= false;
 var app = {
 
     // Application Constructor
     initialize: function() {
         document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
     },
-
     onDeviceReady: function() {
         var uid = window.localStorage.getItem("token");
-        this.loadQrcode();
+        app.loadQrcode();
         setInterval(function () {
             window.location.reload();
         },100000);
+
+        brightness = cordova.plugins.brightness;
+        if(brightness){
+          brightness.getBrightness(function(val){
+              bvalue = val;
+          }, function(err){
+            console.log(err);
+          });
+        }
     },
     loadQrcode: function() {
         $.showLoading("加载中");
@@ -21,12 +32,21 @@ var app = {
                     $.hideLoading();
                     var qrcode = new QRCode(document.getElementById("qrcode"), {
                       text: ret.qrcode,
-                      width: 150,
-                      height: 150,
+                      width: 200,
+                      height: 200,
                       colorDark: "#000000",
                       colorLight: "#ffffff",
                       correctLevel: QRCode.CorrectLevel.L
                     });
+                    if(!setted&&brightness){
+                      brightness.setBrightness(1, function(ret){
+                        console.log(ret);
+                        setted = true;
+                        brightness.setKeepScreenOn(true);
+                      }, function(e){
+                        console.log(e)
+                      });
+                    }
                 } else {
                     $.hideLoading();
                     $.alert("请求失败,请稍后再试", "错误");
@@ -44,8 +64,8 @@ var app = {
                     $.hideLoading();
                     var qrcode = new QRCode(document.getElementById("qrcode"), {
                       text: ret.qrcode,
-                      width: 150,
-                      height: 150,
+                      width: 200,
+                      height: 200,
                       colorDark: "#000000",
                       colorLight: "#ffffff",
                       correctLevel: QRCode.CorrectLevel.L
@@ -59,6 +79,16 @@ var app = {
                 $.alert("请求失败了:" + ret.status + "请稍后再试", "错误");
             }
         })
+    },
+    backTo:function(){
+      if(brightness&&bvalue){
+        brightness.setBrightness(bvalue, function(ret){
+          brightness.setKeepScreenOn(false);
+        }, function(e){
+          console.log(e)
+        });
+      } 
+      window.location.href='main.html';
     }
 };
 app.initialize();
\ No newline at end of file
index d10558e..f53220a 100644 (file)
@@ -27,7 +27,6 @@ var app = {
             "platform":device.name+","+device.platform+","+device.version,
             "uuid":device.uuid
         }
-        console.log(param)
         ICheckCode(param,function(ok,ret){
             if(ok){
                 $.hideLoading();
index f331281..cc50c0b 100644 (file)
@@ -33,11 +33,13 @@ var app = {
                     } else {
                         // The scan completed, display the contents of the QR code:
                         QRScanner.destroy();
+                        //$.alert(text, '提示');
                         showRet(text);
                     }
                 }
                 //开始扫描,需要将页面的背景设置成透明
                 QRScanner.show();
+                console.log("QRScanner.scan");
             } else if (status.denied) {
                 // The video preview will remain black, and scanning is disabled. We can
                 // try to ask the user to change their mind, but we'll have to send them
@@ -64,12 +66,12 @@ var app = {
         });
     },
     goPage: function() {
-        //QRScanner.destroy();
         window.location = "main.html"
     }
 };
 app.initialize();
-function showRet1(url){
+var inAppBrowserRef;
+function showRet(url){
   if(isEmpty(url)){
       return;
   }
@@ -99,22 +101,21 @@ function showRet1(url){
        }
      }
   });
+  //ref.show();
 }
 
-function showRet(url) {
+function showRet1(url) {
     if(isEmpty(url)){
         return;
     }
     var userid = window.localStorage.getItem("userid"); 
-    if (url.indexOf("yy.dlsmk.cn")>=0) {
-        if(url.indexOf("?")>0){
-            url=url+'&userid='+userid;
-        }else{
-            url=url+'?userid='+userid;
-        }
+    if(url.indexOf("?")>0){
+        url=url+'&userid='+userid;
+    }else{
+        url=url+'?userid='+userid;
     }
     console.log(url)
-    var inAppBrowserRef = cordova.ThemeableBrowser.open(url, '_blank', {
+    inAppBrowserRef = cordova.ThemeableBrowser.open(url, '_blank', {
         statusbar: {
             color: '#03a9f4ff'
         },
@@ -127,41 +128,82 @@ function showRet(url) {
             showPageTitle: true
         },
         backButton: {
-            image: 'back.png',
-            imagePressed: 'back.png',
+            wwwImage: 'img/back.png',
+            wwwImagePressed: 'img/back.png',
             align: 'left',
             event: 'backPressed'
         },
         closeButton: {
-            image: 'close.png',
-            imagePressed: 'close.png',
+            wwwImage: 'img/close.png',
+            wwwImagePressed: 'img/close.png',
             align: 'left',
             event: 'closePressed'
         },
         backButtonCanClose: true
-    }).addEventListener('loadstart', function(params){
-     if (params.url.indexOf("yy.dlsmk.cn")>=0) {
-       if (params.url.indexOf("userid")<0) {
-           if(params.url.indexOf("?")>0){
-               params.url=params.url+'&userid='+userid;
-           }else{
-               params.url=params.url+'?userid='+userid;
-           }
-           //ref.hide();
-           var neRef = cordova.ThemeableBrowser.open(params.url, '_blank');
-           neRef.addEventListener('closePressed', function(e){
-               neRef.close();
-               window.location = "main.html"
-           });
-       }
-     }
-  });
+    }).addEventListener('backPressed', function(e) {
+        //alert('back pressed');
+    }).addEventListener('closePressed', function(e) {
+        //alert('closePressed pressed');
+        inAppBrowserRef.close();
+        window.location = "main.html"
+    }).addEventListener(cordova.ThemeableBrowser.EVT_ERR, function(e) {
+        console.error(e.message);
+    }).addEventListener(cordova.ThemeableBrowser.EVT_WRN, function(e) {
+        console.log(e.message);
+    }).addEventListener('loadstart', function(params,e){
+      console.log("11111111"+JSON.stringify(params));
+      if (params.url.indexOf("yy.dlsmk.cn")>=0) {
+        if (params.url.indexOf("userid")<0) {
+            if(params.url.indexOf("?")>0){
+                params.url=params.url+'&userid='+userid;
+            }else{
+                params.url=params.url+'?userid='+userid;
+            }
+            inAppBrowserRef.close();
+            inAppBrowserRef = null;
+            openUrl(params.url);
+        }
+      }
+    });
     //inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);
     //inAppBrowserRef.addEventListener('beforeload', beforeloadCallBack);
 }
-function loadStartCallBack(params,callback) {
-    console.log("1",params.url);
-}
-function beforeloadCallBack(params,callback) {
-    console.log("2",params.url);
+
+function openUrl(url){
+      inAppBrowserRef = cordova.ThemeableBrowser.open(url, '_blank', {
+          statusbar: {
+              color: '#03a9f4ff'
+          },
+          toolbar: {
+              height: 44,
+              color: '#03a9f4ff'
+          },
+          title: {
+              color: '#ffffffff',
+              showPageTitle: true
+          },
+          backButton: {
+              wwwImage: 'img/back.png',
+              wwwImagePressed: 'img/back.png',
+              align: 'left',
+              event: 'backPressed'
+          },
+          closeButton: {
+              wwwImage: 'img/close.png',
+              wwwImagePressed: 'img/close.png',
+              align: 'left',
+              event: 'closePressed'
+          },
+          backButtonCanClose: true
+      }).addEventListener('backPressed', function(e) {
+      }).addEventListener('closePressed', function(e) {
+          inAppBrowserRef.close();
+          window.location = "main.html"
+      }).addEventListener(cordova.ThemeableBrowser.EVT_ERR, function(e) {
+          console.error(e.message);
+      }).addEventListener(cordova.ThemeableBrowser.EVT_WRN, function(e) {
+          console.log(e.message);
+      }).addEventListener('loadstart', function(params,e){
+          console.log("333333"+JSON.stringify(params));
+      });
 }
index b5ec388..aba520d 100644 (file)
@@ -1,11 +1,18 @@
-var dev = false;
+var dev = true;
 var SERVER = "https://yy.dlsmk.cn/payapi/mobileapi";
 var DOOR_URl = "http://172.28.43.8:8099/door/app/appMintUIindex";//门禁服务地址
 var GLOBAL_TODAY="";
 var GLOBAL_YESTERDAY="";
 var CURRENT_INDEX=1;
 if (dev) {
-    SERVER = "http://172.28.201.70:10010/payapi/mobileapi";
+    SERVER = "http://172.28.43.7:8099/payapi/mobileapi";
+}
+function V1Unbindcard(param,callback){
+    ajaxPost("/v1/unbindcard", param, callback)
+}
+
+function V1UnSignbxy(param,callback){
+    ajaxPost("/v1/unsignbxy", param, callback)
 }
 
 function V1Qrcode(callback) {
@@ -76,7 +83,6 @@ function IGetCode(param,callback) {
     ajaxPost("/i/code", param, callback)
 }
 
-
 function IServeTime(callback) {
     ajaxPost("/i/time", {}, callback)
 }
index 4e52298..80ef9d7 100644 (file)
@@ -1,11 +1,13 @@
 var db = null;
+var canCheck = false;
+var wait = 5;
 var app = {
-
     // Application Constructor
     initialize: function() {
         document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
+        canCheck = false;
+        wait=5;
     },
-
     onDeviceReady: function() {
         $.showLoading("加载中");
         V1Bxy(function(ok, ret, err) {
@@ -15,8 +17,10 @@ var app = {
                     $("#content").html(ret.page);
                     if (isEmpty(ret.signed) || ret.signed != 'yes') {
                         $("#btn").show();
+                        app.checkTime();
                         $("#content").css("bottom", "135px");
                     } else {
+                        $("#unbtn").show();
                         $("#content").css("bottom", "10px");
                     }
                 } else {
@@ -34,7 +38,39 @@ var app = {
             }
         })
     },
+    unAgreeXY: function(){
+        var cum = new auiDialog({});
+        var confirm = cum.alert({
+            title: "提示",
+            msg: '确定解除代扣协议吗?',
+            buttons: ['取消', '解除']
+        }, function(ret) {
+            if (ret.buttonIndex == 2) {
+                $.showLoading("正在请求");
+                var param = {}
+                V1UnSignbxy(param, function(ok, ret, err) {
+                    if (ok) {
+                        $.hideLoading();
+                        if (ret.code == 200) {
+                            window.localStorage.setItem("signed", ret.signed);
+                            $.alert('解除成功', "提示", function() {
+                                window.location = 'main.html'
+                            });
+                        } else {
+                            $.alert(ret.msg, "错误");
+                        }
+                    } else {
+                        $.hideLoading();
+                        $.alert("请求失败了:" + ret.status + "请稍后再试", "错误");
+                    }
+                })
+            }
+        })
+    },
     agreeXY: function() {
+        if(!canCheck){
+            return;
+        }
         var agree = $("input[type=checkbox]:checked").val();
         if (isEmpty(agree)) {
             $.alert("请同意签约代扣协议", "提示");
@@ -58,6 +94,20 @@ var app = {
                 $.alert("请求失败了:" + ret.status + "请稍后再试", "错误");
             }
         })
+    },
+    checkTime: function(){
+      if (wait == 0) {
+        $("#signBtn").text("签约代扣协议");
+        $("#signBtn").addClass("aui-btn-info");
+        canCheck = true;
+      }else{
+        $("#signBtn").text(wait+"s 签约代扣协议");
+        wait--;
+         setTimeout(function() {
+              app.checkTime();
+            },1000)
+      }
     }
+
 };
 app.initialize();
\ No newline at end of file
index e788ea0..79e824b 100644 (file)
                             <div class="center-in"><img src="img/icon_securty.png" style="width:28px;height: 28px"></div>
                             <div class="aui-grid-label" style="margin-top:10px;">账户安全</div>
                         </div>
-                        <div class="aui-col-xs-4" id="doorBtn">
+                        <!--<div class="aui-col-xs-4" id="doorBtn">
                             <div class="center-in"><img src="img/icon_door.png" style="width:28px;height: 28px"></div>
                             <div class="aui-grid-label" style="margin-top:10px;">远程开门</div>
-                        </div>
+                        </div>-->
                     </div>
                 </div>
             </section>
         <header class="aui-bar aui-bar-nav" style="padding-top:25px;font-size: 22px">
             我的
         </header>
-        <section class="aui-content bg-white aui-margin-b-15" style=" margin-top: -2px;">
+        <!-- bg-white -->
+        <section class="aui-content aui-margin-b-15" style=" margin-top: -2px;">
             <div class="aui-list aui-media-list aui-list-noborder aui-bg-info user-info">
                 <div class="aui-list-item aui-list-item-middle top-btn">
                     <div class="aui-media-list-item-inner ">
                     </div>
                 </div>
             </div>
-            <section class="aui-content aui-grid ">
-                <div class="aui-row aui-margin-t-10">
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-warning" id="user-amount">0.00</big>
-                        <div class="aui-gird-lable aui-font-size-12">余额</div>
-                    </div>
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-success" id="user-point">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">积分</div>
-                    </div>
-                    <div class="aui-col-xs-4 ">
-                        <big class="aui-text-danger" id="user-coupon">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">优惠券</div>
-                    </div>
-                </div>
-            </section>
-            
+            <!--<section class="aui-content aui-grid ">
+                  <div class="aui-row aui-margin-t-10">
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-warning" id="user-amount">0.00</big>
+                          <div class="aui-gird-lable aui-font-size-12">余额</div>
+                      </div>
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-success" id="user-point">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">积分</div>
+                      </div>
+                      <div class="aui-col-xs-4 ">
+                          <big class="aui-text-danger" id="user-coupon">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">优惠券</div>
+                      </div>
+                  </div>
+              </section>-->
         </section>
         <section class="aui-content">
             <ul class="aui-list aui-list-in aui-margin-b-15">
                     </div>
                 </li>
             </ul>
+            <div style="padding: 20px;margin-top: 40px;">
+                <a href="javascript:app.logout();" class="weui-btn weui-btn_warn">退出登录</a>
+            </div>  
         </section>
     </div>
     <footer class="aui-bar aui-bar-tab aui-border-t" id="footer">
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/my.html b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/my.html
new file mode 100644 (file)
index 0000000..291f236
--- /dev/null
@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />
+    <meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
+    <link rel="stylesheet" type="text/css" href="css/aui.css" />
+    <link rel="stylesheet" type="text/css" href="css/weui.min.css">
+    <link rel="stylesheet" type="text/css" href="css/jquery-weui.min.css">
+    <link rel="stylesheet" type="text/css" href="css/index.css" />
+</head>
+<body>
+<header class="aui-bar aui-bar-nav" style="padding-top:25px;font-size: 22px">
+    个人信息
+</header>
+<section class="aui-content bg-white aui-margin-b-15" style=" margin-top: -2px;">
+    <div class="aui-list aui-media-list aui-list-noborder aui-bg-info user-info">
+        <div class="aui-list-item aui-list-item-middle top-btn">
+            <div class="aui-media-list-item-inner ">
+                <div class="aui-list-item-media" style="width:3rem;">
+                    <img src="img/icon_header.png" class="aui-img-round" id="userlogo">
+                </div>
+                <div class="aui-list-item-inner">
+                    <div class="aui-list-item-text text-white aui-font-size-18" id="username">匿名</div>
+                    <div class="aui-list-item-text text-white">
+                        <div><i class="aui-iconfont aui-icon-mobile aui-font-size-14"></i><span id="userphone"></span></div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <section class="aui-content aui-grid ">
+        <div class="aui-row aui-margin-t-10">
+            <div class="aui-col-xs-4 aui-border-r">
+                <big class="aui-text-warning" id="user-amount">0.00</big>
+                <div class="aui-gird-lable aui-font-size-12">余额</div>
+            </div>
+            <div class="aui-col-xs-4 aui-border-r">
+                <big class="aui-text-success" id="user-point">0</big>
+                <div class="aui-gird-lable aui-font-size-12">积分</div>
+            </div>
+            <div class="aui-col-xs-4 ">
+                <big class="aui-text-danger" id="user-coupon">0</big>
+                <div class="aui-gird-lable aui-font-size-12">优惠券</div>
+            </div>
+        </div>
+    </section>
+    
+</section>
+<section class="aui-content">
+    <ul class="aui-list aui-list-in aui-margin-b-15">
+        <li class="aui-list-item" onclick="app.toCard()">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-cert aui-text-info"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">银行卡</div>
+                <div class="aui-list-item-right" id="userbank"></div>
+            </div>
+        </li>
+        <li class="aui-list-item" onclick="app.toSign()">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-pencil aui-text-danger"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">签约代扣免密付</div>
+                <div class="aui-list-item-right" id="usersign"></div>
+            </div>
+        </li>
+    </ul>
+    <ul class="aui-list aui-list-in">
+        <li class="aui-list-item" id="usersec">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-lock aui-text-info"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">账户安全</div>
+            </div>
+        </li>
+    </ul>
+</section>
+</body>
+<script type="text/javascript" src="cordova.js"></script>
+<script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
+<script type="text/javascript" src="js/lib/aui-tab.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
+<script type="text/javascript" src="js/server.js"></script>
+<script type="text/javascript" src="js/main.js"></script>
+<script type="text/javascript">
+
+</script>
+</html>
\ No newline at end of file
diff --git a/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/plugins/cordova-plugin-brightness/www/brightness.js b/platforms/ios/dlapp.xcarchive/Products/Applications/dlapp.app/www/plugins/cordova-plugin-brightness/www/brightness.js
new file mode 100644 (file)
index 0000000..c1111d6
--- /dev/null
@@ -0,0 +1,18 @@
+cordova.define("cordova-plugin-brightness.Brightness", function(require, exports, module) {
+'use strict';
+
+var exec = require('cordova/exec');
+
+exports.getBrightness = function( success, error) {
+  exec(success, error, 'Brightness', 'getBrightness', []);
+};
+
+exports.setBrightness = function(value, success, error) {
+  exec(success, error, 'Brightness', 'setBrightness', [value]);
+};
+
+exports.setKeepScreenOn = function(value, success, error) {
+  exec(success, error, 'Brightness', 'setKeepScreenOn', [value]);
+};
+
+});
index ca6cb07..3edeb36 100644 (file)
@@ -15,7 +15,7 @@
 </head>
 <body style="background: #fff"  >
     <header class="aui-bar aui-bar-nav" style="padding-top:25px;">
-        <a class="aui-pull-left" href="main.html">
+        <a class="aui-pull-left" href="javascript:app.backTo()">
             <span class="aui-iconfont aui-icon-left"></span>
         </a>
         <div class="aui-title">付款码</div>
index ece02b5..180aa9b 100644 (file)
     </header>
     <div style="padding:10px;overflow: scroll;position: absolute;top:74px;bottom:135px;left: 0;right: 0" id="content">
         
+    </div>
+    <div class="weui-footer weui-footer_fixed-bottom" style="background: #fff;display: none;" id="unbtn">
+        <section class="aui-content-padded" style="margin-top: 20px;">
+            <div class="aui-btn aui-btn-block " apmode onclick="app.unAgreeXY()" id="unsignBtn">解除代扣协议</div>
+        </section>
     </div>
     <div class="weui-footer weui-footer_fixed-bottom" style="background: #fff;display: none;" id="btn">
-            <div style="margin-top: 10px;">
-                <label for="agree" class="weui-agree" style="padding: .5em 5px .5em 15px;display: inline-block;">
-                    <input id="agree" type="checkbox" class="weui-agree__checkbox" value="yes">
-                    <span class="weui-agree__text">
-                        我已阅读并同意该协议
-                    </span>
-                </label>
-            </div>
-            <section class="aui-content-padded" style="margin-top: 20px;">
-                <div class="aui-btn aui-btn-block aui-btn-info"  tapmode onclick="app.agreeXY()">签约代扣协议</div>
-            </section>
+        <div style="margin-top: 10px;">
+            <label for="agree" class="weui-agree" style="padding: .5em 5px .5em 15px;display: inline-block;">
+                <input id="agree" type="checkbox" class="weui-agree__checkbox" value="yes">
+                <span class="weui-agree__text">
+                    我已阅读并同意该协议
+                </span>
+            </label>
+        </div>
+        <section class="aui-content-padded" style="margin-top: 20px;">
+            <div class="aui-btn aui-btn-block "  tapmode onclick="app.agreeXY()" id="signBtn">签约代扣协议</div>
+        </section>
     </div>
 </body>
 </html>
 <script type="text/javascript" src="cordova.js"></script>
 <script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
 <script type="text/javascript" src="js/lib/jquery-weui.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
 <script type="text/javascript" src="js/server.js"></script>
 <script type="text/javascript" src="js/signxycheck.js"></script>
\ No newline at end of file
index 50e0385..92c3c27 100644 (file)
@@ -5,6 +5,7 @@
        };
        objectVersion = 46;
        objects = {
+
 /* Begin PBXBuildFile section */
                0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0207DA571B56EA530066E2B4 /* Images.xcassets */; };
                04347BD0ABAC4EE0B4CDDDB6 /* jcore-ios-2.1.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 444DBF371D8346D7BC7EE35D /* jcore-ios-2.1.1.a */; };
@@ -53,6 +54,7 @@
                BC998F935D174204820F4015 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 22AE2683802B4CB1BAF69ABF /* AFURLSessionManager.m */; };
                BFA0CF013EEC44F9B2C6FA6E /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0162975BB3964038A51EDED4 /* CFNetwork.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
                C04B4EC2FAAD4D328ABA0C95 /* jpush-ios-3.2.1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CCDEFB0C0632436FA86F0F31 /* jpush-ios-3.2.1.a */; };
+               C0A6FD40F47B434496535606 /* Brightness.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E4D2B8A1F474D9883C50B86 /* Brightness.m */; };
                C61263FC7FE642E9B25A81E5 /* DisableStatusbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 61106E22F1D348DDBDC4DC0B /* DisableStatusbar.m */; };
                CAE5A91F948A472F9D872EC8 /* CDVStatusBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ABBE12B040548F8909BFC7B /* CDVStatusBar.m */; };
                CDD6F217CA274CF18EC146D3 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 048B6FC037E1479790969D83 /* AdSupport.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
@@ -64,7 +66,6 @@
                F68EA21E51A3463A8FE2EE92 /* CDVWKWebViewUIDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B73EA28E46846FF84E6AF02 /* CDVWKWebViewUIDelegate.m */; };
                F939AD8D22BB769B006B371B /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = F939AD8C22BB769B006B371B /* libsqlite3.0.tbd */; };
                FDE92C386167415E8040F8AB /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = FDEE8379D7A34C55A616F700 /* AFURLResponseSerialization.m */; };
-               C0A6FD40F47B434496535606 /* Brightness.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E4D2B8A1F474D9883C50B86 /* Brightness.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
                1D3623240D0F684500981E51 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
                1D3623250D0F684500981E51 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
                1D6058910D05DD3D006BFB54 /* dlapp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = dlapp.app; sourceTree = BUILT_PRODUCTS_DIR; };
+               1E4D2B8A1F474D9883C50B86 /* Brightness.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = Brightness.m; path = "cordova-plugin-brightness/Brightness.m"; sourceTree = "<group>"; };
                1E5CB6025B2E4D14ABFDB037 /* CDVWKWebViewUIDelegate.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVWKWebViewUIDelegate.h; path = "cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.h"; sourceTree = "<group>"; };
                22AE2683802B4CB1BAF69ABF /* AFURLSessionManager.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = AFURLSessionManager.m; path = "cordova-plugin-advanced-http/AFURLSessionManager.m"; sourceTree = "<group>"; };
                22DF35565BBA44B1980FFAF5 /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
                7DC7711D3C76485B9E422E3A /* CDVWKProcessPoolFactory.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVWKProcessPoolFactory.h; path = "cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.h"; sourceTree = "<group>"; };
                7E931FBE72E74C4887498E5F /* AFURLSessionManager.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = AFURLSessionManager.h; path = "cordova-plugin-advanced-http/AFURLSessionManager.h"; sourceTree = "<group>"; };
                80B448E71F8941268B78692C /* CDVCamera.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVCamera.m; path = "cordova-plugin-camera/CDVCamera.m"; sourceTree = "<group>"; };
+               817A61F7D48245FA9567B115 /* Brightness.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = Brightness.h; path = "cordova-plugin-brightness/Brightness.h"; sourceTree = "<group>"; };
                8895AD78E31D471583178B91 /* TextResponseSerializer.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = TextResponseSerializer.h; path = "cordova-plugin-advanced-http/TextResponseSerializer.h"; sourceTree = "<group>"; };
                8A8DD2DDC8694A97A56F9FA7 /* CDVLocalFilesystem.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = CDVLocalFilesystem.m; path = "cordova-plugin-file/CDVLocalFilesystem.m"; sourceTree = "<group>"; };
                8BFF0D502E2241F0A89DF67F /* CDVStatusBar.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = CDVStatusBar.h; path = "cordova-plugin-statusbar/CDVStatusBar.h"; sourceTree = "<group>"; };
                FCC7E279D80D4FB9BCF2530A /* Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "Bridging-Header.h"; path = "cordova-plugin-fingerprint-aio/Bridging-Header.h"; sourceTree = "<group>"; };
                FDEE8379D7A34C55A616F700 /* AFURLResponseSerialization.m */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.objc; name = AFURLResponseSerialization.m; path = "cordova-plugin-advanced-http/AFURLResponseSerialization.m"; sourceTree = "<group>"; };
                FE0B455916A4481681D59FE0 /* WebKit.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
-               1E4D2B8A1F474D9883C50B86 /* Brightness.m */ = {isa = PBXFileReference; name = "Brightness.m"; path = "cordova-plugin-brightness/Brightness.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
-               817A61F7D48245FA9567B115 /* Brightness.h */ = {isa = PBXFileReference; name = "Brightness.h"; path = "cordova-plugin-brightness/Brightness.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
index 2804c2d..5f4d584 100644 (file)
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.0.5</string>
+       <string>1.0.6</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleVersion</key>
-       <string>1.0.5</string>
+       <string>1.0.6</string>
        <key>LSRequiresIPhoneOS</key>
        <true/>
        <key>NSAppTransportSecurity</key>
        <key>NSCameraUsageDescription</key>
        <string>APP需要使用您的相机权限,没有该权限将无法完成扫一扫功能</string>
        <key>NSFaceIDUsageDescription</key>
-       <string/>
+       <string></string>
        <key>NSMainNibFile</key>
-       <string/>
+       <string></string>
        <key>NSMainNibFile~ipad</key>
-       <string/>
+       <string></string>
        <key>NSPhotoLibraryUsageDescription</key>
        <string>APP需要使用您的相册权限,没有该权限将无法完成扫一扫功能</string>
        <key>UIBackgroundModes</key>
@@ -70,4 +70,4 @@
                <string>UIInterfaceOrientationPortraitUpsideDown</string>
        </array>
 </dict>
-</plist>
\ No newline at end of file
+</plist>
index 5cd402b..c516159 100644 (file)
     },
     "cordova-plugin-brightness": {
       "PACKAGE_NAME": "com.dalicitycard.app"
+    },
+    "cordova-plugin-file": {
+      "PACKAGE_NAME": "com.supwisdom.dlapp"
     }
   },
   "dependent_plugins": {
     "cordova-plugin-add-swift-support": {
       "PACKAGE_NAME": "com.supwisdom.dlapp"
     },
-    "cordova-plugin-file": {
-      "PACKAGE_NAME": "com.supwisdom.dlapp"
-    },
     "cordova-plugin-jcore": {
       "PACKAGE_NAME": "com.supwisdom.dlapp"
     }
index 1eb645a..fc76262 100644 (file)
     },
     "cordova-plugin-brightness": {
       "PACKAGE_NAME": "com.dalicitycard.app"
+    },
+    "cordova-plugin-file": {
+      "PACKAGE_NAME": "com.supwisdom.dlapp"
     }
   },
   "dependent_plugins": {
     "cordova-plugin-add-swift-support": {
       "PACKAGE_NAME": "com.supwisdom.dlapp"
     },
-    "cordova-plugin-file": {
-      "PACKAGE_NAME": "com.supwisdom.dlapp"
-    },
     "cordova-plugin-jcore": {
       "PACKAGE_NAME": "com.supwisdom.dlapp"
     }
index ebfe8ce..8734bac 100644 (file)
   "cordova-plugin-file": {
     "source": {
       "type": "registry",
-      "id": "cordova-plugin-file@>=2.0.0"
+      "id": "cordova-plugin-file@^6.0.1"
     },
-    "is_top_level": false,
-    "variables": {}
+    "is_top_level": true,
+    "variables": {
+      "ANDROID_SUPPORT_V4_VERSION": "27.+"
+    }
   },
   "cordova-plugin-statusbar": {
     "source": {
index 1ec3afc..22f9574 100644 (file)
     },
     "cordova-plugin-brightness": {
       "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
+    },
+    "cordova-plugin-file": {
+      "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
     }
   },
   "dependent_plugins": {
     "cordova-plugin-add-swift-support": {
       "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
     },
-    "cordova-plugin-file": {
-      "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
-    },
     "cordova-plugin-jcore": {
       "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
     }
diff --git a/release-key-1.keystore b/release-key-1.keystore
new file mode 100644 (file)
index 0000000..f0ad805
Binary files /dev/null and b/release-key-1.keystore differ
index 19ea1df..bcda2dd 100644 (file)
                 <div class="weui-cell__ft" id="cardstatus"></div>
             </div>
         </div>
+        <div style="padding: 20px;margin-top: 40px;">
+                <a href="javascript:app.unBindcard();" class="weui-btn weui-btn_warn">解除绑定</a>
+            </div>  
     </div>
 </body>
 </html>
 <script type="text/javascript" src="cordova.js"></script>
 <script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
 <script type="text/javascript" src="js/lib/jquery-weui.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
 <script type="text/javascript" src="js/server.js"></script>
 <script type="text/javascript" src="js/cardinfor.js"></script>
\ No newline at end of file
index 3d8f675..da6e04f 100644 (file)
@@ -22,6 +22,44 @@ var app = {
                 $.alert("加载失败了:" + ret.status, "错误");
             }
         })
+    },
+    unBindcard: function(){
+        var dialog = new auiDialog({})
+        dialog.prompt({
+            title:"请输入支付密码",
+            text:'请输入支付密码',
+            buttons:['取消','确定']
+        },function(ret){
+            console.log(ret);
+            if(ret.buttonIndex == 2){
+                if(!isEmpty(ret.text)){
+                    $.showLoading("正在请求");
+                    var param = {
+                        "paypwd":ret.text
+                    }
+                    V1Unbindcard(param,function(ok, ret, err) {
+                        if (ok) {
+                            $.hideLoading(); 
+                            if(ret.code==200){
+                                window.localStorage.removeItem("userid");
+                                $.alert('解绑成功', "提示", function() {
+                                    window.location = 'main.html'
+                                });
+                            }else{
+                                $.alert(ret.msg, "错误");
+                            }
+                        } else {
+                            $.hideLoading();
+                            $.alert("请求失败了:" + ret.status, "错误");
+                        }
+                    })
+                }
+            }
+        });
+        var input = $(".aui-dialog-body").find("input");
+        if(input){
+            input.attr("type","password");
+        }
     }
 };
 app.initialize();
index e0a358f..9d3b017 100644 (file)
@@ -328,6 +328,10 @@ var app = {
         } else {
             window.location = 'cardinfor.html'
         }
+    },
+    logout:function(){
+        window.localStorage.removeItem("token");
+        window.location = "login.html";
     }
 };
 app.initialize();
index 79ae312..b9d81b9 100644 (file)
@@ -88,7 +88,7 @@ var app = {
           console.log(e)
         });
       } 
-      window,location.href='main.html';
+      window.location.href='main.html';
     }
 };
 app.initialize();
\ No newline at end of file
index 64a6da6..0674e1a 100644 (file)
@@ -7,6 +7,13 @@ var CURRENT_INDEX=1;
 if (dev) {
     SERVER = "http://172.28.43.7:8099/payapi/mobileapi";
 }
+function V1Unbindcard(param,callback){
+    ajaxPost("/v1/unbindcard", param, callback)
+}
+
+function V1UnSignbxy(param,callback){
+    ajaxPost("/v1/unsignbxy", param, callback)
+}
 
 function V1Qrcode(callback) {
     ajaxPost("/v1/qrcode", {}, callback)
@@ -76,7 +83,6 @@ function IGetCode(param,callback) {
     ajaxPost("/i/code", param, callback)
 }
 
-
 function IServeTime(callback) {
     ajaxPost("/i/time", {}, callback)
 }
index dedeb88..80ef9d7 100644 (file)
@@ -20,6 +20,7 @@ var app = {
                         app.checkTime();
                         $("#content").css("bottom", "135px");
                     } else {
+                        $("#unbtn").show();
                         $("#content").css("bottom", "10px");
                     }
                 } else {
@@ -37,6 +38,35 @@ var app = {
             }
         })
     },
+    unAgreeXY: function(){
+        var cum = new auiDialog({});
+        var confirm = cum.alert({
+            title: "提示",
+            msg: '确定解除代扣协议吗?',
+            buttons: ['取消', '解除']
+        }, function(ret) {
+            if (ret.buttonIndex == 2) {
+                $.showLoading("正在请求");
+                var param = {}
+                V1UnSignbxy(param, function(ok, ret, err) {
+                    if (ok) {
+                        $.hideLoading();
+                        if (ret.code == 200) {
+                            window.localStorage.setItem("signed", ret.signed);
+                            $.alert('解除成功', "提示", function() {
+                                window.location = 'main.html'
+                            });
+                        } else {
+                            $.alert(ret.msg, "错误");
+                        }
+                    } else {
+                        $.hideLoading();
+                        $.alert("请求失败了:" + ret.status + "请稍后再试", "错误");
+                    }
+                })
+            }
+        })
+    },
     agreeXY: function() {
         if(!canCheck){
             return;
index 3ade7e7..79e824b 100644 (file)
         <header class="aui-bar aui-bar-nav" style="padding-top:25px;font-size: 22px">
             我的
         </header>
-        <section class="aui-content bg-white aui-margin-b-15" style=" margin-top: -2px;">
+        <!-- bg-white -->
+        <section class="aui-content aui-margin-b-15" style=" margin-top: -2px;">
             <div class="aui-list aui-media-list aui-list-noborder aui-bg-info user-info">
                 <div class="aui-list-item aui-list-item-middle top-btn">
                     <div class="aui-media-list-item-inner ">
                     </div>
                 </div>
             </div>
-            <section class="aui-content aui-grid ">
-                <div class="aui-row aui-margin-t-10">
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-warning" id="user-amount">0.00</big>
-                        <div class="aui-gird-lable aui-font-size-12">余额</div>
-                    </div>
-                    <div class="aui-col-xs-4 aui-border-r">
-                        <big class="aui-text-success" id="user-point">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">积分</div>
-                    </div>
-                    <div class="aui-col-xs-4 ">
-                        <big class="aui-text-danger" id="user-coupon">0</big>
-                        <div class="aui-gird-lable aui-font-size-12">优惠券</div>
-                    </div>
-                </div>
-            </section>
-            
+            <!--<section class="aui-content aui-grid ">
+                  <div class="aui-row aui-margin-t-10">
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-warning" id="user-amount">0.00</big>
+                          <div class="aui-gird-lable aui-font-size-12">余额</div>
+                      </div>
+                      <div class="aui-col-xs-4 aui-border-r">
+                          <big class="aui-text-success" id="user-point">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">积分</div>
+                      </div>
+                      <div class="aui-col-xs-4 ">
+                          <big class="aui-text-danger" id="user-coupon">0</big>
+                          <div class="aui-gird-lable aui-font-size-12">优惠券</div>
+                      </div>
+                  </div>
+              </section>-->
         </section>
         <section class="aui-content">
             <ul class="aui-list aui-list-in aui-margin-b-15">
                     </div>
                 </li>
             </ul>
+            <div style="padding: 20px;margin-top: 40px;">
+                <a href="javascript:app.logout();" class="weui-btn weui-btn_warn">退出登录</a>
+            </div>  
         </section>
     </div>
     <footer class="aui-bar aui-bar-tab aui-border-t" id="footer">
diff --git a/www/my.html b/www/my.html
new file mode 100644 (file)
index 0000000..291f236
--- /dev/null
@@ -0,0 +1,93 @@
+<!doctype html>
+<html>
+
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />
+    <meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
+    <link rel="stylesheet" type="text/css" href="css/aui.css" />
+    <link rel="stylesheet" type="text/css" href="css/weui.min.css">
+    <link rel="stylesheet" type="text/css" href="css/jquery-weui.min.css">
+    <link rel="stylesheet" type="text/css" href="css/index.css" />
+</head>
+<body>
+<header class="aui-bar aui-bar-nav" style="padding-top:25px;font-size: 22px">
+    个人信息
+</header>
+<section class="aui-content bg-white aui-margin-b-15" style=" margin-top: -2px;">
+    <div class="aui-list aui-media-list aui-list-noborder aui-bg-info user-info">
+        <div class="aui-list-item aui-list-item-middle top-btn">
+            <div class="aui-media-list-item-inner ">
+                <div class="aui-list-item-media" style="width:3rem;">
+                    <img src="img/icon_header.png" class="aui-img-round" id="userlogo">
+                </div>
+                <div class="aui-list-item-inner">
+                    <div class="aui-list-item-text text-white aui-font-size-18" id="username">匿名</div>
+                    <div class="aui-list-item-text text-white">
+                        <div><i class="aui-iconfont aui-icon-mobile aui-font-size-14"></i><span id="userphone"></span></div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <section class="aui-content aui-grid ">
+        <div class="aui-row aui-margin-t-10">
+            <div class="aui-col-xs-4 aui-border-r">
+                <big class="aui-text-warning" id="user-amount">0.00</big>
+                <div class="aui-gird-lable aui-font-size-12">余额</div>
+            </div>
+            <div class="aui-col-xs-4 aui-border-r">
+                <big class="aui-text-success" id="user-point">0</big>
+                <div class="aui-gird-lable aui-font-size-12">积分</div>
+            </div>
+            <div class="aui-col-xs-4 ">
+                <big class="aui-text-danger" id="user-coupon">0</big>
+                <div class="aui-gird-lable aui-font-size-12">优惠券</div>
+            </div>
+        </div>
+    </section>
+    
+</section>
+<section class="aui-content">
+    <ul class="aui-list aui-list-in aui-margin-b-15">
+        <li class="aui-list-item" onclick="app.toCard()">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-cert aui-text-info"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">银行卡</div>
+                <div class="aui-list-item-right" id="userbank"></div>
+            </div>
+        </li>
+        <li class="aui-list-item" onclick="app.toSign()">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-pencil aui-text-danger"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">签约代扣免密付</div>
+                <div class="aui-list-item-right" id="usersign"></div>
+            </div>
+        </li>
+    </ul>
+    <ul class="aui-list aui-list-in">
+        <li class="aui-list-item" id="usersec">
+            <div class="aui-list-item-label-icon">
+                <i class="aui-iconfont aui-icon-lock aui-text-info"></i>
+            </div>
+            <div class="aui-list-item-inner aui-list-item-arrow">
+                <div class="aui-list-item-title">账户安全</div>
+            </div>
+        </li>
+    </ul>
+</section>
+</body>
+<script type="text/javascript" src="cordova.js"></script>
+<script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
+<script type="text/javascript" src="js/lib/aui-tab.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
+<script type="text/javascript" src="js/server.js"></script>
+<script type="text/javascript" src="js/main.js"></script>
+<script type="text/javascript">
+
+</script>
+</html>
\ No newline at end of file
index 48e9b69..3edeb36 100644 (file)
@@ -15,7 +15,7 @@
 </head>
 <body style="background: #fff"  >
     <header class="aui-bar aui-bar-nav" style="padding-top:25px;">
-        <a class="aui-pull-left" href="app.backTo()">
+        <a class="aui-pull-left" href="javascript:app.backTo()">
             <span class="aui-iconfont aui-icon-left"></span>
         </a>
         <div class="aui-title">付款码</div>
index 17a1989..180aa9b 100644 (file)
     </header>
     <div style="padding:10px;overflow: scroll;position: absolute;top:74px;bottom:135px;left: 0;right: 0" id="content">
         
+    </div>
+    <div class="weui-footer weui-footer_fixed-bottom" style="background: #fff;display: none;" id="unbtn">
+        <section class="aui-content-padded" style="margin-top: 20px;">
+            <div class="aui-btn aui-btn-block " apmode onclick="app.unAgreeXY()" id="unsignBtn">解除代扣协议</div>
+        </section>
     </div>
     <div class="weui-footer weui-footer_fixed-bottom" style="background: #fff;display: none;" id="btn">
-            <div style="margin-top: 10px;">
-                <label for="agree" class="weui-agree" style="padding: .5em 5px .5em 15px;display: inline-block;">
-                    <input id="agree" type="checkbox" class="weui-agree__checkbox" value="yes">
-                    <span class="weui-agree__text">
-                        我已阅读并同意该协议
-                    </span>
-                </label>
-            </div>
-            <section class="aui-content-padded" style="margin-top: 20px;">
-                <div class="aui-btn aui-btn-block "  tapmode onclick="app.agreeXY()" id="signBtn">签约代扣协议</div>
-            </section>
+        <div style="margin-top: 10px;">
+            <label for="agree" class="weui-agree" style="padding: .5em 5px .5em 15px;display: inline-block;">
+                <input id="agree" type="checkbox" class="weui-agree__checkbox" value="yes">
+                <span class="weui-agree__text">
+                    我已阅读并同意该协议
+                </span>
+            </label>
+        </div>
+        <section class="aui-content-padded" style="margin-top: 20px;">
+            <div class="aui-btn aui-btn-block "  tapmode onclick="app.agreeXY()" id="signBtn">签约代扣协议</div>
+        </section>
     </div>
 </body>
 </html>
 <script type="text/javascript" src="cordova.js"></script>
 <script type="text/javascript" src="js/lib/jquery-2.1.4.js"></script>
 <script type="text/javascript" src="js/lib/jquery-weui.js"></script>
+<script type="text/javascript" src="js/lib/aui-dialog.js"></script>
 <script type="text/javascript" src="js/server.js"></script>
 <script type="text/javascript" src="js/signxycheck.js"></script>
\ No newline at end of file