فهرست منبع

版本号,自动更新

panxingxin 5 سال پیش
والد
کامیت
1b128f7ef9

+ 2 - 2
config.xml

@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='utf-8'?>
-<widget id="io.ionic.starter" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
-    <name>MyApp</name>
+<widget id="io.ionic.starter" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+    <name>SG扫描</name>
     <description>An awesome Ionic/Cordova app.</description>
     <author email="hi@ionicframework.com" href="http://ionicframework.com/">Ionic Framework Team</author>
     <content src="index.html" />

+ 1 - 1
ionic.config.json

@@ -1,5 +1,5 @@
 {
-  "name": "myAndroid",
+  "name": "SG扫描",
   "integrations": {
     "cordova": {}
   },

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 421 - 1478
package-lock.json


+ 5 - 4
package.json

@@ -1,5 +1,5 @@
 {
-  "name": "myAndroid",
+  "name": "SG扫描",
   "version": "0.0.1",
   "author": "Ionic Framework",
   "homepage": "https://ionicframework.com/",
@@ -35,10 +35,12 @@
     "@ionic-native/http": "^5.6.0",
     "@ionic-native/keyboard": "^5.9.0",
     "@ionic-native/local-notifications": "^5.16.0",
+    "@ionic-native/photo-viewer": "^5.16.0",
     "@ionic-native/splash-screen": "^5.0.0",
     "@ionic-native/status-bar": "^5.0.0",
     "@ionic/angular": "^4.1.0",
     "@ionic/storage": "^2.2.0",
+    "com-sarriaroman-photoviewer": "^1.2.4",
     "cordova-android": "8.0.0",
     "cordova-browser": "6.0.0",
     "cordova-plugin-advanced-http": "2.0.9",
@@ -54,7 +56,6 @@
     "cordova-sqlite-storage": "3.2.0",
     "core-js": "^2.5.4",
     "crypto-js": "^3.1.9-1",
-    "es.keensoft.fullscreenimage": "^0.2.10",
     "hammerjs": "^2.0.8",
     "rxjs": "~6.5.1",
     "tslib": "^1.9.0",
@@ -109,13 +110,13 @@
       "cordova-plugin-bluetoothle": {},
       "cordova-plugin-bluetooth-serial": {},
       "cordova-plugin-local-notification": {},
-      "es.keensoft.fullscreenimage": {},
       "cordova-plugin-app-version": {},
       "cordova-plugin-file-opener2": {
         "ANDROID_SUPPORT_V4_VERSION": "27.+"
       },
       "cordova-plugin-file-transfer": {},
-      "cordova-plugin-file": {}
+      "cordova-plugin-file": {},
+      "com-sarriaroman-photoviewer": {}
     },
     "platforms": [
       "browser",

+ 2 - 1
src/app/app-routing.module.ts

@@ -21,7 +21,8 @@ const routes: Routes = [
   { path: 'store-qc', loadChildren: './store-qc/store-qc.module#StoreQCPageModule' },
   { path: 'store-qc-detail', loadChildren: './store-qc-detail/store-qc-detail.module#StoreQCDetailPageModule' },
   { path: 'store-qc-scanning', loadChildren: './store-qc-scanning/store-qc-scanning.module#StoreQCScanningPageModule' },
-  { path: 'store-sample-pending', loadChildren: './store-sample-pending/store-sample-pending.module#StoreSamplePendingPageModule' }
+  { path: 'store-sample-pending', loadChildren: './store-sample-pending/store-sample-pending.module#StoreSamplePendingPageModule' },
+  { path: 'warehouse-manage-pending', loadChildren: './warehouse-manage-pending/warehouse-manage-pending.module#WarehouseManagePendingPageModule' }
   // { path: 'scanning', loadChildren: './scanning/scanning.module#ScanningPageModule', canActivate: [LoginGuardGuard] }
 ];
 @NgModule({

+ 3 - 0
src/app/app.component.html

@@ -151,6 +151,9 @@
             </ion-item>
           </ion-menu-toggle>
         </ion-list>
+        <ion-item lines="none">
+          <span slot="end">{{version_number}}</span>
+        </ion-item>
         <!-- <ion-list>
           <ion-list-header>
             Tutorial

+ 9 - 9
src/app/app.component.ts

@@ -1,5 +1,4 @@
 import { Component } from '@angular/core';
-
 import { Platform, Events, AlertController } from '@ionic/angular';
 import { SplashScreen } from '@ionic-native/splash-screen/ngx';
 import { StatusBar } from '@ionic-native/status-bar/ngx';
@@ -7,11 +6,7 @@ import { Storage } from '@ionic/storage'
 import { UserData } from '../providers/user-data';
 import { Router } from '@angular/router';
 import { LocalNotifications } from '@ionic-native/local-notifications/ngx';
-// import { FileOpener } from '@ionic-native/file-opener/ngx';
-// import { FileTransfer } from '@ionic-native/file-transfer/ngx'; 
-import { AppVersion } from '@ionic-native/app-version/ngx'; 
-// import { File } from '@ionic-native/file/ngx';
-import { WebSocketService } from '../providers/WebSocketService';
+// import { WebSocketService } from '../providers/WebSocketService';
 import { Device } from '@ionic-native/device/ngx';
 import { Update } from '../providers/update'
 
@@ -20,13 +15,12 @@ import { Update } from '../providers/update'
   templateUrl: 'app.component.html'
 })
 export class AppComponent {
-  private access_token: string
   private loggedIn: boolean = false;
+  private version_number: any
   constructor(
     private device: Device,
     private localNotifications: LocalNotifications,
     private router: Router,
-    private appVersion: AppVersion,
     private events: Events,
     private update: Update,
     private userData: UserData,
@@ -35,7 +29,7 @@ export class AppComponent {
     private alertController: AlertController,
     private splashScreen: SplashScreen,
     private statusBar: StatusBar,
-    private wsService: WebSocketService
+    // private wsService: WebSocketService
   ) {
     this.initializeApp();
     // this.update.isUpdate()
@@ -43,6 +37,7 @@ export class AppComponent {
   }
   ngOnInit() {
     this.initWebSocket()
+    this.getVersionNumber()
     //WS连接的IP和端口提前保存在localStorage里,现在读出来
     // this.wsService.createObservableSocket(`ws://192.168.20.32:8804/websocket/403`);
     // this.wsService.sendMessage('testhis.fullScreenImaget')
@@ -53,10 +48,15 @@ export class AppComponent {
 
   getUserId(): Promise<string> {
     return this.storage.get('user_id').then((value) => {
+      // this.update.isUpdate()
       return value;
     });
   }
 
+ async getVersionNumber() {
+    this.version_number =  await this.update.getVersionNumber()
+  }
+
   async initWebSocket() {
     let _this = this
     let user_id = await this.getUserId()

+ 2 - 2
src/app/app.module.ts

@@ -13,7 +13,7 @@ import { HttpClientModule } from '@angular/common/http';
 import { HTTP } from '@ionic-native/http/ngx';
 import { IonicStorageModule  } from '@ionic/storage'
 import { Camera } from '@ionic-native/camera/ngx';
-import { FullScreenImage } from '@ionic-native/full-screen-image/ngx';
+import { PhotoViewer } from '@ionic-native/photo-viewer/ngx';
 import { PhotoService } from '../services/photo.service';
 import { HttpserviceService} from '../services/httpservice.service';
 import { Keyboard } from '@ionic-native/keyboard/ngx';
@@ -40,7 +40,7 @@ import { FileTransfer, FileTransferObject } from '@ionic-native/file-transfer/ng
     LoginGuardGuard,
     PhotoService,
     Camera,
-    FullScreenImage,
+    PhotoViewer,
     Device,
     File,
     FileOpener,

+ 2 - 2
src/app/sample-detail/sample-detail.page.html

@@ -46,7 +46,7 @@
 
     <ion-item lines="none">
       <span>产品图片:</span>
-      <img slot="end" [src]="sample.imgsrc" class="title-image"/>
+      <img slot="end" [src]="sample.imgsrc" @click="showFullScreenImage(sample.imgsrc)" class="title-image"/>
     </ion-item>
 
     <ion-item>
@@ -87,7 +87,7 @@
       <ion-label>QA日志图片:</ion-label>
       <!-- <ng-container *ngFor="let photo of sample.imgList index as i"> -->
       <ion-thumbnail *ngIf="sample.imgUrl">
-        <ion-img [src]="sample.imgUrl"></ion-img>
+        <ion-img [src]="sample.imgUrl" (click)="showFullScreenImage(sample.imgUrl)"></ion-img>
       </ion-thumbnail>
       <ion-icon *ngIf="sample.imgUrl" name="close-circle-outline" (click)="deletePicture(sample)" slot="end"></ion-icon>
     <!-- </ng-container> -->

+ 7 - 0
src/app/sample-detail/sample-detail.page.ts

@@ -1,6 +1,7 @@
 import { Component, OnInit } from '@angular/core';
 import { Storage } from '@ionic/storage'
 import { UserData } from '../../providers/user-data';
+import { commonService } from '../../providers/common.service'
 import { Camera, CameraOptions } from '@ionic-native/camera/ngx';
 // import { PhotoService, Photo } from '../services/photo.service';
 
@@ -16,6 +17,7 @@ export class SampleDetailPage implements OnInit {
     // public photoService: PhotoService,
     private camera: Camera,
     private storage: Storage,
+    public commonService: commonService,
     public userData: UserData) { }
   defaultHref = '';
   sdDocument = ''
@@ -70,6 +72,11 @@ export class SampleDetailPage implements OnInit {
       console.log("Camera issue: " + err);
     });
   }
+
+  showFullScreenImage(url) {
+    this.commonService.fullScreenImg(url)
+  }
+
   async saveDetail() {
     for (let i of this.sampleDetailList) {
       if (i.qalog && i.imgData) {

+ 14 - 0
src/providers/common.service.ts

@@ -0,0 +1,14 @@
+import { Injectable } from "@angular/core"
+import { PhotoViewer } from '@ionic-native/photo-viewer/ngx';
+
+@Injectable({
+    providedIn: 'root'
+})
+
+export class commonService {
+    constructor(private photoViewer: PhotoViewer, ) { }
+
+    fullScreenImg(url) {
+        this.photoViewer.show(url);
+    }
+}

+ 49 - 20
src/providers/update.ts

@@ -5,6 +5,9 @@ import { FileTransfer, FileTransferObject } from '@ionic-native/file-transfer/ng
 import { AppVersion } from '@ionic-native/app-version/ngx';
 import { File } from '@ionic-native/file/ngx';
 import { AlertController } from '@ionic/angular';
+import { HTTP } from '@ionic-native/http/ngx';
+import { from } from 'rxjs';
+import { finalize } from 'rxjs/operators';
 
 @Injectable({
     providedIn: 'root'
@@ -14,10 +17,11 @@ export class Update {
 
 
     constructor(private file: File,
-         private transfer: FileTransfer,
-          private appVersion: AppVersion,
-           private fileOpener: FileOpener,
-            public alertController: AlertController) {
+        private transfer: FileTransfer,
+        private nativeHttp: HTTP,
+        private appVersion: AppVersion,
+        private fileOpener: FileOpener,
+        public alertController: AlertController) {
     }
 
     //设备加载完成再去调用硬件
@@ -28,30 +32,56 @@ export class Update {
     //     this.isUpdate();
     // }
 
-    isUpdate() {
+    async isUpdate() {
         // 1、获取当前应用的版本号
+        // console.log(this.appVersion.getAppName())
+        let version_number = await this.getVersionNumber()
+        let server_version_number = await this.getServerVersionNumber()
+        if (version_number !== server_version_number) {
+            await this.appVersion.getVersionNumber().then((value: any) => {
+                // console.log('ss'+server_version_number)
+                //2、请求服务器接口获取服务器的版本号
 
-        this.appVersion.getVersionNumber().then((value: any) => {
-            console.log(value)
+                this.showAlert(server_version_number);
 
-            //2、请求服务器接口获取服务器的版本号
+            }).catch(err => {
+                console.log('getVersionNumber:' + err);
+            });
+        }
 
-            this.showAlert();
-
-        }).catch(err => {
-            console.log('getVersionNumber:' + err);
-        });
+    }
 
+    getVersionNumber() {
+        return new Promise((resolve, reject) => {
+            this.appVersion.getVersionNumber().then((value: any) => {
+                resolve(value)
+            }).catch(err => {
+                console.log('getVersionNumber:' + err);
+                return
+            });
+        })
     }
 
-    async showAlert() {
-        const fileTransfer: FileTransferObject = this.transfer.create();
-        console.log(this.file.dataDirectory);
+    getServerVersionNumber() {
+        return new Promise((resolve, reject) => {
+            from(this.nativeHttp.get(`http://192.168.20.15:803/SoftUpdate/SgApp/version.txt`,
+                {},
+                {})).pipe(
+                    finalize(() => { })
+                ).subscribe(data => {
+                    resolve(JSON.parse(data.data).version)
+                }, async err => {
+                    console.log(err)
+                });
+            return
+        })
+    }
 
+    async showAlert(version) {
         //3.弹窗提示用户是否更新    
         const alert = await this.alertController.create({
             header: '升级!',
-            message: '发现新版本,是否立即升级?',
+            message: `发现新版本(${version}),是否立即升级?`,
             buttons: [
                 {
                     text: '取消',
@@ -77,10 +107,9 @@ export class Update {
         //4.下载apk
         const targetUrl = 'http://192.168.20.15:803/SoftUpdate/SgApp/app-debug.apk';
         const fileTransfer: FileTransferObject = this.transfer.create();
+        //获取当前应用的安装(home)目录     1、应用包名称要一致   2、升级的包的版本号要大于当前应用的版本号   3、签名要一致    4、sdk 要安装
 
-        console.log(this.file.dataDirectory);   //获取当前应用的安装(home)目录     1、应用包名称要一致   2、升级的包的版本号要大于当前应用的版本号   3、签名要一致    4、sdk 要安装
-
-        fileTransfer.download(targetUrl, this.file.dataDirectory + 'app-debug.apk').then((entry) => {
+        fileTransfer.download(targetUrl, this.file.externalDataDirectory + 'app-debug.apk').then((entry) => {
             //6、下载完成调用打开应用
 
             this.fileOpener.open(entry.toURL(),

+ 1 - 1
src/providers/user-data.ts

@@ -55,7 +55,7 @@ export class UserData {
       // this.nativeHttp.setDataSerializer('json')
 
       // tslint:disable-next-line:max-line-length
-      from(this.nativeHttp.post(`http://dev.sgsino.cn/auth/oauth/token?username=${encodeURIComponent(account)}&password=${encodeURIComponent(password)}&grant_type=password&scope=server`,
+      from(this.nativeHttp.post(`http://dev.sgsino.cn/auth/oauth/token?username=${account}&password=${encodeURIComponent(password)}&grant_type=password&scope=server`,
         {},
         { Authorization: 'Basic cGlnOnBpZw==', TENANT_ID: '1', isToken: 'false', })).pipe(
           finalize(() => loading.dismiss())

+ 0 - 1
test

@@ -1 +0,0 @@
-ss

+ 0 - 5
version.xml

@@ -1,5 +0,0 @@
-    <update>
-        <version>201910111607</version>
-        <name>SG Scanning</name>
-        <url>http://192.168.20.15:803/SoftUpdate/SgApp/app-debug.apk</url>
-    </update>