浏览代码

代码推送

panxingxin 5 年之前
当前提交
557cb7faf8
共有 100 个文件被更改,包括 13879 次插入0 次删除
  1. 31 0
      .gitignore
  2. 36 0
      README.en.md
  3. 37 0
      README.md
  4. 187 0
      angular.json
  5. 12 0
      browserslist
  6. 105 0
      config.xml
  7. 33 0
      dev.sh
  8. 107 0
      dev.xml
  9. 28 0
      e2e/protractor.conf.js
  10. 19 0
      e2e/src/app.e2e-spec.ts
  11. 15 0
      e2e/src/app.po.ts
  12. 13 0
      e2e/tsconfig.json
  13. 7 0
      ionic.config.json
  14. 31 0
      karma.conf.js
  15. 12544 0
      package-lock.json
  16. 103 0
      package.json
  17. 27 0
      prod.sh
  18. 107 0
      prod.xml
  19. 8 0
      resources/README.md
  20. 二进制
      resources/android/icon/drawable-hdpi-icon.png
  21. 二进制
      resources/android/icon/drawable-ldpi-icon.png
  22. 二进制
      resources/android/icon/drawable-mdpi-icon.png
  23. 二进制
      resources/android/icon/drawable-xhdpi-icon.png
  24. 二进制
      resources/android/icon/drawable-xxhdpi-icon.png
  25. 二进制
      resources/android/icon/drawable-xxxhdpi-icon.png
  26. 二进制
      resources/android/splash/drawable-land-hdpi-screen.png
  27. 二进制
      resources/android/splash/drawable-land-ldpi-screen.png
  28. 二进制
      resources/android/splash/drawable-land-mdpi-screen.png
  29. 二进制
      resources/android/splash/drawable-land-xhdpi-screen.png
  30. 二进制
      resources/android/splash/drawable-land-xxhdpi-screen.png
  31. 二进制
      resources/android/splash/drawable-land-xxxhdpi-screen.png
  32. 二进制
      resources/android/splash/drawable-port-hdpi-screen.png
  33. 二进制
      resources/android/splash/drawable-port-ldpi-screen.png
  34. 二进制
      resources/android/splash/drawable-port-mdpi-screen.png
  35. 二进制
      resources/android/splash/drawable-port-xhdpi-screen.png
  36. 二进制
      resources/android/splash/drawable-port-xxhdpi-screen.png
  37. 二进制
      resources/android/splash/drawable-port-xxxhdpi-screen.png
  38. 6 0
      resources/android/xml/network_security_config.xml
  39. 二进制
      resources/icon-initial.png
  40. 二进制
      resources/icon.png
  41. 二进制
      resources/ios/icon/icon-1024.png
  42. 二进制
      resources/ios/icon/icon-108@2x.png
  43. 二进制
      resources/ios/icon/icon-20.png
  44. 二进制
      resources/ios/icon/icon-20@2x.png
  45. 二进制
      resources/ios/icon/icon-20@3x.png
  46. 二进制
      resources/ios/icon/icon-24@2x.png
  47. 二进制
      resources/ios/icon/icon-27.5@2x.png
  48. 二进制
      resources/ios/icon/icon-29.png
  49. 二进制
      resources/ios/icon/icon-29@2x.png
  50. 二进制
      resources/ios/icon/icon-29@3x.png
  51. 二进制
      resources/ios/icon/icon-40.png
  52. 二进制
      resources/ios/icon/icon-40@2x.png
  53. 二进制
      resources/ios/icon/icon-40@3x.png
  54. 二进制
      resources/ios/icon/icon-44@2x.png
  55. 二进制
      resources/ios/icon/icon-50.png
  56. 二进制
      resources/ios/icon/icon-50@2x.png
  57. 二进制
      resources/ios/icon/icon-60.png
  58. 二进制
      resources/ios/icon/icon-60@2x.png
  59. 二进制
      resources/ios/icon/icon-60@3x.png
  60. 二进制
      resources/ios/icon/icon-72.png
  61. 二进制
      resources/ios/icon/icon-72@2x.png
  62. 二进制
      resources/ios/icon/icon-76.png
  63. 二进制
      resources/ios/icon/icon-76@2x.png
  64. 二进制
      resources/ios/icon/icon-83.5@2x.png
  65. 二进制
      resources/ios/icon/icon-86@2x.png
  66. 二进制
      resources/ios/icon/icon-98@2x.png
  67. 二进制
      resources/ios/icon/icon-small.png
  68. 二进制
      resources/ios/icon/icon-small@2x.png
  69. 二进制
      resources/ios/icon/icon-small@3x.png
  70. 二进制
      resources/ios/icon/icon.png
  71. 二进制
      resources/ios/icon/icon@2x.png
  72. 二进制
      resources/ios/splash/Default-1792h~iphone.png
  73. 二进制
      resources/ios/splash/Default-2436h.png
  74. 二进制
      resources/ios/splash/Default-2688h~iphone.png
  75. 二进制
      resources/ios/splash/Default-568h@2x~iphone.png
  76. 二进制
      resources/ios/splash/Default-667h.png
  77. 二进制
      resources/ios/splash/Default-736h.png
  78. 二进制
      resources/ios/splash/Default-Landscape-1792h~iphone.png
  79. 二进制
      resources/ios/splash/Default-Landscape-2436h.png
  80. 二进制
      resources/ios/splash/Default-Landscape-2688h~iphone.png
  81. 二进制
      resources/ios/splash/Default-Landscape-736h.png
  82. 二进制
      resources/ios/splash/Default-Landscape@2x~ipad.png
  83. 二进制
      resources/ios/splash/Default-Landscape@~ipadpro.png
  84. 二进制
      resources/ios/splash/Default-Landscape~ipad.png
  85. 二进制
      resources/ios/splash/Default-Portrait@2x~ipad.png
  86. 二进制
      resources/ios/splash/Default-Portrait@~ipadpro.png
  87. 二进制
      resources/ios/splash/Default-Portrait~ipad.png
  88. 二进制
      resources/ios/splash/Default@2x~iphone.png
  89. 二进制
      resources/ios/splash/Default@2x~universal~anyany.png
  90. 二进制
      resources/ios/splash/Default~iphone.png
  91. 二进制
      resources/splash.png
  92. 42 0
      src/app/app-routing.module.ts
  93. 63 0
      src/app/app.component.html
  94. 0 0
      src/app/app.component.scss
  95. 67 0
      src/app/app.component.spec.ts
  96. 171 0
      src/app/app.component.ts
  97. 43 0
      src/app/app.module.ts
  98. 17 0
      src/app/contract-list/contract-list-routing.module.ts
  99. 20 0
      src/app/contract-list/contract-list.module.ts
  100. 0 0
      src/app/contract-list/contract-list.page.html

+ 31 - 0
.gitignore

@@ -0,0 +1,31 @@
+# Specifies intentionally untracked files to ignore when using Git
+# http://git-scm.com/docs/gitignore
+
+*~
+*.sw[mnpcod]
+.tmp
+*.tmp
+*.tmp.*
+*.sublime-project
+*.sublime-workspace
+.DS_Store
+Thumbs.db
+UserInterfaceState.xcuserstate
+$RECYCLE.BIN/
+
+*.log
+log.txt
+npm-debug.log*
+
+/.idea
+/.ionic
+/.sass-cache
+/.sourcemaps
+/.versions
+/.vscode
+/coverage
+/dist
+/node_modules
+/platforms
+/plugins
+/www

+ 36 - 0
README.en.md

@@ -0,0 +1,36 @@
+# sgFactoryApp
+
+#### Description
+仙办工厂办公用
+
+#### Software Architecture
+Software architecture description
+
+#### Installation
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### Instructions
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### Contribution
+
+1.  Fork the repository
+2.  Create Feat_xxx branch
+3.  Commit your code
+4.  Create Pull Request
+
+
+#### Gitee Feature
+
+1.  You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
+2.  Gitee blog [blog.gitee.com](https://blog.gitee.com)
+3.  Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
+4.  The most valuable open source project [GVP](https://gitee.com/gvp)
+5.  The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
+6.  The most popular members  [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

+ 37 - 0
README.md

@@ -0,0 +1,37 @@
+# sgFactoryApp
+
+#### 介绍
+仙办工厂办公用
+
+#### 软件架构
+软件架构说明
+
+
+#### 安装教程
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### 使用说明
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### 参与贡献
+
+1.  Fork 本仓库
+2.  新建 Feat_xxx 分支
+3.  提交代码
+4.  新建 Pull Request
+
+
+#### 码云特技
+
+1.  使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
+2.  码云官方博客 [blog.gitee.com](https://blog.gitee.com)
+3.  你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
+4.  [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
+5.  码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
+6.  码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

+ 187 - 0
angular.json

@@ -0,0 +1,187 @@
+{
+  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+  "version": 1,
+  "defaultProject": "app",
+  "newProjectRoot": "projects",
+  "projects": {
+    "app": {
+      "root": "",
+      "sourceRoot": "src",
+      "projectType": "application",
+      "prefix": "app",
+      "schematics": {},
+      "architect": {
+        "build": {
+          "builder": "@angular-devkit/build-angular:browser",
+          "options": {
+            "outputPath": "www",
+            "index": "src/index.html",
+            "main": "src/main.ts",
+            "polyfills": "src/polyfills.ts",
+            "tsConfig": "tsconfig.app.json",
+            "assets": [
+              {
+                "glob": "**/*",
+                "input": "src/assets",
+                "output": "assets"
+              },
+              {
+                "glob": "**/*.svg",
+                "input": "node_modules/ionicons/dist/ionicons/svg",
+                "output": "./svg"
+              }
+            ],
+            "styles": [
+              {
+                "input": "src/theme/variables.scss"
+              },
+              {
+                "input": "src/global.scss"
+              }
+            ],
+            "scripts": []
+          },
+          "configurations": {
+            "production": {
+              "fileReplacements": [
+                {
+                  "replace": "src/environments/environment.ts",
+                  "with": "src/environments/environment.prod.ts"
+                }
+              ],
+              "optimization": true,
+              "outputHashing": "all",
+              "sourceMap": false,
+              "extractCss": true,
+              "namedChunks": false,
+              "aot": true,
+              "extractLicenses": true,
+              "vendorChunk": false,
+              "buildOptimizer": true,
+              "budgets": [
+                {
+                  "type": "initial",
+                  "maximumWarning": "2mb",
+                  "maximumError": "5mb"
+                }
+              ]
+            },
+            "ci": {
+              "progress": false
+            }
+          }
+        },
+        "serve": {
+          "builder": "@angular-devkit/build-angular:dev-server",
+          "options": {
+            "browserTarget": "app:build"
+          },
+          "configurations": {
+            "production": {
+              "browserTarget": "app:build:production"
+            },
+            "ci": {
+              "progress": false
+            }
+          }
+        },
+        "extract-i18n": {
+          "builder": "@angular-devkit/build-angular:extract-i18n",
+          "options": {
+            "browserTarget": "app:build"
+          }
+        },
+        "test": {
+          "builder": "@angular-devkit/build-angular:karma",
+          "options": {
+            "main": "src/test.ts",
+            "polyfills": "src/polyfills.ts",
+            "tsConfig": "tsconfig.spec.json",
+            "karmaConfig": "karma.conf.js",
+            "styles": [],
+            "scripts": [],
+            "assets": [
+              {
+                "glob": "favicon.ico",
+                "input": "src/",
+                "output": "/"
+              },
+              {
+                "glob": "**/*",
+                "input": "src/assets",
+                "output": "/assets"
+              }
+            ]
+          },
+          "configurations": {
+            "ci": {
+              "progress": false,
+              "watch": false
+            }
+          }
+        },
+        "lint": {
+          "builder": "@angular-devkit/build-angular:tslint",
+          "options": {
+            "tsConfig": [
+              "tsconfig.app.json",
+              "tsconfig.spec.json",
+              "e2e/tsconfig.json"
+            ],
+            "exclude": ["**/node_modules/**"]
+          }
+        },
+        "e2e": {
+          "builder": "@angular-devkit/build-angular:protractor",
+          "options": {
+            "protractorConfig": "e2e/protractor.conf.js",
+            "devServerTarget": "app:serve"
+          },
+          "configurations": {
+            "production": {
+              "devServerTarget": "app:serve:production"
+            },
+            "ci": {
+              "devServerTarget": "app:serve:ci"
+            }
+          }
+        },
+        "ionic-cordova-build": {
+          "builder": "@ionic/angular-toolkit:cordova-build",
+          "options": {
+            "browserTarget": "app:build"
+          },
+          "configurations": {
+            "production": {
+              "browserTarget": "app:build:production"
+            }
+          }
+        },
+        "ionic-cordova-serve": {
+          "builder": "@ionic/angular-toolkit:cordova-serve",
+          "options": {
+            "cordovaBuildTarget": "app:ionic-cordova-build",
+            "devServerTarget": "app:serve"
+          },
+          "configurations": {
+            "production": {
+              "cordovaBuildTarget": "app:ionic-cordova-build:production",
+              "devServerTarget": "app:serve:production"
+            }
+          }
+        }
+      }
+    }
+  },
+  "cli": {
+    "defaultCollection": "@ionic/angular-toolkit"
+  },
+  "schematics": {
+    "@ionic/angular-toolkit:component": {
+      "styleext": "scss"
+    },
+    "@ionic/angular-toolkit:page": {
+      "styleext": "scss"
+    }
+  }
+}

+ 12 - 0
browserslist

@@ -0,0 +1,12 @@
+# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
+# For additional information regarding the format and rule options, please see:
+# https://github.com/browserslist/browserslist#queries
+
+# You can see what browsers were selected by your queries by running:
+#   npx browserslist
+
+> 0.5%
+last 2 versions
+Firefox ESR
+not dead
+not IE 9-11 # For IE 9-11 support, remove 'not'.

+ 105 - 0
config.xml

@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='utf-8'?>
+<widget id="io.sgFactory.prod" version="1.0.7" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
+    <name>MyApp</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" />
+    <access origin="*" />
+    <allow-intent href="http://*/*" />
+    <allow-intent href="https://*/*" />
+    <allow-intent href="tel:*" />
+    <allow-intent href="sms:*" />
+    <allow-intent href="mailto:*" />
+    <allow-intent href="geo:*" />
+    <preference name="ScrollEnabled" value="false" />
+    <preference name="android-minSdkVersion" value="19" />
+    <preference name="BackupWebStorage" value="none" />
+    <preference name="SplashMaintainAspectRatio" value="true" />
+    <preference name="FadeSplashScreenDuration" value="300" />
+    <preference name="SplashShowOnlyFirstTime" value="false" />
+    <preference name="SplashScreen" value="screen" />
+    <preference name="SplashScreenDelay" value="3000" />
+    <platform name="android">
+        <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
+        </edit-config>
+        <allow-intent href="market:*" />
+        <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
+        <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
+        <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
+        <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
+        <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
+        <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
+        <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
+        <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
+        <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
+        <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
+        <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
+        <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
+        <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
+        <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
+        <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
+        <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
+        <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
+        <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
+    </platform>
+    <platform name="ios">
+        <allow-intent href="itms:*" />
+        <allow-intent href="itms-apps:*" />
+        <icon height="57" src="resources/ios/icon/icon.png" width="57" />
+        <icon height="114" src="resources/ios/icon/icon@2x.png" width="114" />
+        <icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
+        <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" />
+        <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" />
+        <icon height="20" src="resources/ios/icon/icon-20.png" width="20" />
+        <icon height="40" src="resources/ios/icon/icon-20@2x.png" width="40" />
+        <icon height="60" src="resources/ios/icon/icon-20@3x.png" width="60" />
+        <icon height="48" src="resources/ios/icon/icon-24@2x.png" width="48" />
+        <icon height="55" src="resources/ios/icon/icon-27.5@2x.png" width="55" />
+        <icon height="29" src="resources/ios/icon/icon-29.png" width="29" />
+        <icon height="58" src="resources/ios/icon/icon-29@2x.png" width="58" />
+        <icon height="87" src="resources/ios/icon/icon-29@3x.png" width="87" />
+        <icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
+        <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" />
+        <icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" />
+        <icon height="88" src="resources/ios/icon/icon-44@2x.png" width="88" />
+        <icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
+        <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" />
+        <icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
+        <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" />
+        <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" />
+        <icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
+        <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" />
+        <icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
+        <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" />
+        <icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167" />
+        <icon height="172" src="resources/ios/icon/icon-86@2x.png" width="172" />
+        <icon height="196" src="resources/ios/icon/icon-98@2x.png" width="196" />
+        <icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
+        <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
+        <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
+        <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
+        <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
+        <splash height="1125" src="resources/ios/splash/Default-Landscape-2436h.png" width="2436" />
+        <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
+        <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
+        <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
+        <splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
+        <splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
+        <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
+        <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
+        <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
+        <splash height="2436" src="resources/ios/splash/Default-2436h.png" width="1125" />
+        <splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
+        <icon height="216" src="resources/ios/icon/icon-108@2x.png" width="216" />
+        <splash height="2688" src="resources/ios/splash/Default-2688h~iphone.png" width="1242" />
+        <splash height="1242" src="resources/ios/splash/Default-Landscape-2688h~iphone.png" width="2688" />
+        <splash height="1792" src="resources/ios/splash/Default-1792h~iphone.png" width="828" />
+        <splash height="828" src="resources/ios/splash/Default-Landscape-1792h~iphone.png" width="1792" />
+    </platform>
+    <plugin name="cordova-plugin-whitelist" spec="1.3.3" />
+    <plugin name="cordova-plugin-statusbar" spec="2.4.2" />
+    <plugin name="cordova-plugin-device" spec="2.0.2" />
+    <plugin name="cordova-plugin-splashscreen" spec="5.0.2" />
+    <plugin name="cordova-plugin-ionic-webview" spec="^4.0.0" />
+    <plugin name="cordova-plugin-ionic-keyboard" spec="^2.0.5" />
+</widget>

+ 33 - 0
dev.sh

@@ -0,0 +1,33 @@
+
+
+source /etc/profile
+
+cp  ./dev.xml ./config.xml
+
+version_new=$(grep -E "version" config.xml  | awk -F"\"" '{print $4}')
+
+
+echo '{
+        "name":"SG综礼",
+        "version":"'${version_new}'"
+  }' > fversion.json
+
+#sed -e "s@1@$cversion_old@g" -i version.json
+
+#ionic cordova platform rm android
+
+#ionic cordova platform add android
+
+# ionic cordova resources
+
+ionic cordova build android
+
+mv  /var/lib/jenkins/workspace/test-sgFactoryApp/platforms/android/app/build/outputs/apk/debug/app-debug.apk  ./sgFactoryApp.apk
+
+scp -r ./sgFactoryApp.apk root@192.168.20.32:/usr/app
+
+scp -r ./fversion.json root@192.168.20.32:/usr/app
+
+
+
+

+ 107 - 0
dev.xml

@@ -0,0 +1,107 @@
+<?xml version='1.0' encoding='utf-8'?>
+<widget id="io.sgFactory.dev" version="1.0.9" 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" />
+    <access origin="*" />
+    <allow-intent href="http://*/*" />
+    <allow-intent href="https://*/*" />
+    <allow-intent href="tel:*" />
+    <allow-intent href="sms:*" />
+    <allow-intent href="mailto:*" />
+    <allow-intent href="geo:*" />
+    <preference name="ScrollEnabled" value="false" />
+    <preference name="android-minSdkVersion" value="19" />
+    <preference name="BackupWebStorage" value="none" />
+    <preference name="SplashMaintainAspectRatio" value="true" />
+    <preference name="FadeSplashScreenDuration" value="300" />
+    <preference name="SplashShowOnlyFirstTime" value="false" />
+    <preference name="SplashScreen" value="screen" />
+    <preference name="SplashScreenDelay" value="3000" />
+    <platform name="android">
+        <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
+            <!-- <application android:networkSecurityConfig="@xml/network_security_config" /> -->
+        </edit-config>
+        <!-- <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" /> -->
+        <allow-intent href="market:*" />
+        <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
+        <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
+        <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
+        <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
+        <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
+        <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
+        <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
+        <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
+        <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
+        <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
+        <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
+        <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
+        <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
+        <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
+        <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
+        <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
+        <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
+        <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
+    </platform>
+    <platform name="ios">
+        <allow-intent href="itms:*" />
+        <allow-intent href="itms-apps:*" />
+        <icon height="57" src="resources/ios/icon/icon.png" width="57" />
+        <icon height="114" src="resources/ios/icon/icon@2x.png" width="114" />
+        <icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
+        <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" />
+        <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" />
+        <icon height="20" src="resources/ios/icon/icon-20.png" width="20" />
+        <icon height="40" src="resources/ios/icon/icon-20@2x.png" width="40" />
+        <icon height="60" src="resources/ios/icon/icon-20@3x.png" width="60" />
+        <icon height="48" src="resources/ios/icon/icon-24@2x.png" width="48" />
+        <icon height="55" src="resources/ios/icon/icon-27.5@2x.png" width="55" />
+        <icon height="29" src="resources/ios/icon/icon-29.png" width="29" />
+        <icon height="58" src="resources/ios/icon/icon-29@2x.png" width="58" />
+        <icon height="87" src="resources/ios/icon/icon-29@3x.png" width="87" />
+        <icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
+        <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" />
+        <icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" />
+        <icon height="88" src="resources/ios/icon/icon-44@2x.png" width="88" />
+        <icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
+        <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" />
+        <icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
+        <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" />
+        <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" />
+        <icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
+        <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" />
+        <icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
+        <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" />
+        <icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167" />
+        <icon height="172" src="resources/ios/icon/icon-86@2x.png" width="172" />
+        <icon height="196" src="resources/ios/icon/icon-98@2x.png" width="196" />
+        <icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
+        <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
+        <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
+        <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
+        <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
+        <splash height="1125" src="resources/ios/splash/Default-Landscape-2436h.png" width="2436" />
+        <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
+        <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
+        <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
+        <splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
+        <splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
+        <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
+        <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
+        <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
+        <splash height="2436" src="resources/ios/splash/Default-2436h.png" width="1125" />
+        <splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
+        <icon height="216" src="resources/ios/icon/icon-108@2x.png" width="216" />
+        <splash height="2688" src="resources/ios/splash/Default-2688h~iphone.png" width="1242" />
+        <splash height="1242" src="resources/ios/splash/Default-Landscape-2688h~iphone.png" width="2688" />
+        <splash height="1792" src="resources/ios/splash/Default-1792h~iphone.png" width="828" />
+        <splash height="828" src="resources/ios/splash/Default-Landscape-1792h~iphone.png" width="1792" />
+    </platform>
+    <plugin name="cordova-plugin-whitelist" spec="1.3.3" />
+    <plugin name="cordova-plugin-statusbar" spec="2.4.2" />
+    <plugin name="cordova-plugin-device" spec="2.0.2" />
+    <plugin name="cordova-plugin-splashscreen" spec="5.0.2" />
+    <plugin name="cordova-plugin-ionic-webview" spec="^4.0.0" />
+    <plugin name="cordova-plugin-ionic-keyboard" spec="^2.0.5" />
+</widget>

+ 28 - 0
e2e/protractor.conf.js

@@ -0,0 +1,28 @@
+// Protractor configuration file, see link for more information
+// https://github.com/angular/protractor/blob/master/lib/config.ts
+
+const { SpecReporter } = require('jasmine-spec-reporter');
+
+exports.config = {
+  allScriptsTimeout: 11000,
+  specs: [
+    './src/**/*.e2e-spec.ts'
+  ],
+  capabilities: {
+    'browserName': 'chrome'
+  },
+  directConnect: true,
+  baseUrl: 'http://localhost:4200/',
+  framework: 'jasmine',
+  jasmineNodeOpts: {
+    showColors: true,
+    defaultTimeoutInterval: 30000,
+    print: function() {}
+  },
+  onPrepare() {
+    require('ts-node').register({
+      project: require('path').join(__dirname, './tsconfig.json')
+    });
+    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
+  }
+};

+ 19 - 0
e2e/src/app.e2e-spec.ts

@@ -0,0 +1,19 @@
+import { AppPage } from './app.po';
+
+describe('new App', () => {
+  let page: AppPage;
+
+  beforeEach(() => {
+    page = new AppPage();
+  });
+  describe('default screen', () => {
+    beforeEach(() => {
+      page.navigateTo('/home');
+    });
+    it('should have a title saying Home', () => {
+      page.getPageOneTitleText().then(title => {
+        expect(title).toEqual('Home');
+      });
+    });
+  });
+});

+ 15 - 0
e2e/src/app.po.ts

@@ -0,0 +1,15 @@
+import { browser, by, element } from 'protractor';
+
+export class AppPage {
+  navigateTo(destination) {
+    return browser.get(destination);
+  }
+
+  getTitle() {
+    return browser.getTitle();
+  }
+
+  getPageOneTitleText() {
+    return element(by.tagName('app-home')).element(by.deepCss('ion-title')).getText();
+  }
+}

+ 13 - 0
e2e/tsconfig.json

@@ -0,0 +1,13 @@
+{
+  "extends": "../tsconfig.json",
+  "compilerOptions": {
+    "outDir": "../out-tsc/app",
+    "module": "commonjs",
+    "target": "es5",
+    "types": [
+      "jasmine",
+      "jasminewd2",
+      "node"
+    ]
+  }
+}

+ 7 - 0
ionic.config.json

@@ -0,0 +1,7 @@
+{
+  "name": "test",
+  "integrations": {
+    "cordova": {}
+  },
+  "type": "angular"
+}

+ 31 - 0
karma.conf.js

@@ -0,0 +1,31 @@
+// Karma configuration file, see link for more information
+// https://karma-runner.github.io/1.0/config/configuration-file.html
+
+module.exports = function (config) {
+  config.set({
+    basePath: '',
+    frameworks: ['jasmine', '@angular-devkit/build-angular'],
+    plugins: [
+      require('karma-jasmine'),
+      require('karma-chrome-launcher'),
+      require('karma-jasmine-html-reporter'),
+      require('karma-coverage-istanbul-reporter'),
+      require('@angular-devkit/build-angular/plugins/karma')
+    ],
+    client: {
+      clearContext: false // leave Jasmine Spec Runner output visible in browser
+    },
+    coverageIstanbulReporter: {
+      dir: require('path').join(__dirname, '../coverage'),
+      reports: ['html', 'lcovonly', 'text-summary'],
+      fixWebpackSourcePaths: true
+    },
+    reporters: ['progress', 'kjhtml'],
+    port: 9876,
+    colors: true,
+    logLevel: config.LOG_INFO,
+    autoWatch: true,
+    browsers: ['Chrome'],
+    singleRun: false
+  });
+};

文件差异内容过多而无法显示
+ 12544 - 0
package-lock.json


+ 103 - 0
package.json

@@ -0,0 +1,103 @@
+{
+  "name": "sgFactoryApp",
+  "version": "0.0.1",
+  "author": "Ionic Framework",
+  "homepage": "https://ionicframework.com/",
+  "scripts": {
+    "ng": "ng",
+    "start": "ng serve",
+    "build": "ng build",
+    "test": "ng test",
+    "lint": "ng lint",
+    "e2e": "ng e2e"
+  },
+  "private": true,
+  "dependencies": {
+    "@angular/common": "~8.1.2",
+    "@angular/core": "~8.1.2",
+    "@angular/forms": "~8.1.2",
+    "@angular/platform-browser": "~8.1.2",
+    "@angular/platform-browser-dynamic": "~8.1.2",
+    "@angular/router": "~8.1.2",
+    "@ionic-native/app-version": "^5.18.0",
+    "@ionic-native/core": "^5.0.0",
+    "@ionic-native/file": "^5.18.0",
+    "@ionic-native/file-opener": "^5.18.0",
+    "@ionic-native/file-transfer": "^5.18.0",
+    "@ionic-native/http": "^5.18.0",
+    "@ionic-native/photo-viewer": "^5.18.0",
+    "@ionic-native/splash-screen": "^5.0.0",
+    "@ionic-native/status-bar": "^5.0.0",
+    "@ionic/angular": "^4.7.1",
+    "@ionic/storage": "^2.2.0",
+    "com-sarriaroman-photoviewer": "^1.2.4",
+    "cordova-android": "8.1.0",
+    "cordova-plugin-advanced-http": "^2.3.0",
+    "cordova-plugin-app-version": "^0.1.9",
+    "cordova-plugin-file": "^6.0.2",
+    "cordova-plugin-file-opener2": "^2.2.1",
+    "cordova-plugin-file-transfer": "^1.7.1",
+    "cordova-sqlite-storage": "^4.0.0",
+    "core-js": "^2.5.4",
+    "rxjs": "~6.5.1",
+    "tslib": "^1.9.0",
+    "zone.js": "~0.9.1"
+  },
+  "devDependencies": {
+    "@angular-devkit/architect": "~0.801.2",
+    "@angular-devkit/build-angular": "~0.801.2",
+    "@angular-devkit/core": "~8.1.2",
+    "@angular-devkit/schematics": "~8.1.2",
+    "@angular/cli": "~8.1.2",
+    "@angular/compiler": "~8.1.2",
+    "@angular/compiler-cli": "~8.1.2",
+    "@angular/language-service": "~8.1.2",
+    "@ionic/angular-toolkit": "^2.1.1",
+    "@types/jasmine": "~3.3.8",
+    "@types/jasminewd2": "~2.0.3",
+    "@types/node": "~8.9.4",
+    "codelyzer": "^5.0.0",
+    "cordova-plugin-device": "^2.0.2",
+    "cordova-plugin-ionic-keyboard": "^2.2.0",
+    "cordova-plugin-ionic-webview": "^4.1.3",
+    "cordova-plugin-splashscreen": "^5.0.2",
+    "cordova-plugin-statusbar": "^2.4.2",
+    "cordova-plugin-whitelist": "^1.3.3",
+    "jasmine-core": "~3.4.0",
+    "jasmine-spec-reporter": "~4.2.1",
+    "karma": "~4.1.0",
+    "karma-chrome-launcher": "~2.2.0",
+    "karma-coverage-istanbul-reporter": "~2.0.1",
+    "karma-jasmine": "~2.0.1",
+    "karma-jasmine-html-reporter": "^1.4.0",
+    "protractor": "~5.4.0",
+    "ts-node": "~7.0.0",
+    "tslint": "~5.15.0",
+    "typescript": "~3.4.3"
+  },
+  "description": "An Ionic project",
+  "cordova": {
+    "plugins": {
+      "cordova-sqlite-storage": {},
+      "cordova-plugin-advanced-http": {},
+      "cordova-plugin-app-version": {},
+      "com-sarriaroman-photoviewer": {},
+      "cordova-plugin-whitelist": {},
+      "cordova-plugin-statusbar": {},
+      "cordova-plugin-device": {},
+      "cordova-plugin-splashscreen": {},
+      "cordova-plugin-ionic-webview": {
+        "ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
+      },
+      "cordova-plugin-ionic-keyboard": {},
+      "cordova-plugin-file-opener2": {
+        "ANDROID_SUPPORT_V4_VERSION": "27.+"
+      },
+      "cordova-plugin-file-transfer": {},
+      "cordova-plugin-file": {}
+    },
+    "platforms": [
+      "android"
+    ]
+  }
+}

+ 27 - 0
prod.sh

@@ -0,0 +1,27 @@
+
+source /etc/profile
+
+cp  ./prod.xml ./config.xml
+
+version_new=$(grep -E "version" config.xml  | awk -F"\"" '{print $4}')
+
+
+echo '{
+        "name":"SG综礼",
+        "version":"'${version_new}'"
+  }' > fversion.json
+
+#sed -e "s@1@$cversion_old@g" -i version.json
+
+ ionic cordova build android --prod
+
+mv  ./platforms/android/app/build/outputs/apk/debug/app-debug.apk  ./sgFactoryApp.apk
+# mv  ./app-debug.apk  ./sgFactoryApp.apk
+
+scp -r ./sgFactoryApp.apk root@192.168.20.16:/usr/app
+
+scp -r ./fversion.json root@192.168.20.16:/usr/app
+
+
+
+

+ 107 - 0
prod.xml

@@ -0,0 +1,107 @@
+<?xml version='1.0' encoding='utf-8'?>
+<widget id="io.sgFactory.prod" version="1.0.7" 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" />
+    <access origin="*" />
+    <allow-intent href="http://*/*" />
+    <allow-intent href="https://*/*" />
+    <allow-intent href="tel:*" />
+    <allow-intent href="sms:*" />
+    <allow-intent href="mailto:*" />
+    <allow-intent href="geo:*" />
+    <preference name="ScrollEnabled" value="false" />
+    <preference name="android-minSdkVersion" value="19" />
+    <preference name="BackupWebStorage" value="none" />
+    <preference name="SplashMaintainAspectRatio" value="true" />
+    <preference name="FadeSplashScreenDuration" value="300" />
+    <preference name="SplashShowOnlyFirstTime" value="false" />
+    <preference name="SplashScreen" value="screen" />
+    <preference name="SplashScreenDelay" value="3000" />
+    <platform name="android">
+        <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
+            <!-- <application android:networkSecurityConfig="@xml/network_security_config" /> -->
+        </edit-config>
+        <!-- <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" /> -->
+        <allow-intent href="market:*" />
+        <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
+        <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
+        <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
+        <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
+        <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
+        <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
+        <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
+        <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
+        <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
+        <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
+        <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
+        <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
+        <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
+        <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
+        <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
+        <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
+        <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
+        <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
+    </platform>
+    <platform name="ios">
+        <allow-intent href="itms:*" />
+        <allow-intent href="itms-apps:*" />
+        <icon height="57" src="resources/ios/icon/icon.png" width="57" />
+        <icon height="114" src="resources/ios/icon/icon@2x.png" width="114" />
+        <icon height="29" src="resources/ios/icon/icon-small.png" width="29" />
+        <icon height="58" src="resources/ios/icon/icon-small@2x.png" width="58" />
+        <icon height="87" src="resources/ios/icon/icon-small@3x.png" width="87" />
+        <icon height="20" src="resources/ios/icon/icon-20.png" width="20" />
+        <icon height="40" src="resources/ios/icon/icon-20@2x.png" width="40" />
+        <icon height="60" src="resources/ios/icon/icon-20@3x.png" width="60" />
+        <icon height="48" src="resources/ios/icon/icon-24@2x.png" width="48" />
+        <icon height="55" src="resources/ios/icon/icon-27.5@2x.png" width="55" />
+        <icon height="29" src="resources/ios/icon/icon-29.png" width="29" />
+        <icon height="58" src="resources/ios/icon/icon-29@2x.png" width="58" />
+        <icon height="87" src="resources/ios/icon/icon-29@3x.png" width="87" />
+        <icon height="40" src="resources/ios/icon/icon-40.png" width="40" />
+        <icon height="80" src="resources/ios/icon/icon-40@2x.png" width="80" />
+        <icon height="120" src="resources/ios/icon/icon-40@3x.png" width="120" />
+        <icon height="88" src="resources/ios/icon/icon-44@2x.png" width="88" />
+        <icon height="50" src="resources/ios/icon/icon-50.png" width="50" />
+        <icon height="100" src="resources/ios/icon/icon-50@2x.png" width="100" />
+        <icon height="60" src="resources/ios/icon/icon-60.png" width="60" />
+        <icon height="120" src="resources/ios/icon/icon-60@2x.png" width="120" />
+        <icon height="180" src="resources/ios/icon/icon-60@3x.png" width="180" />
+        <icon height="72" src="resources/ios/icon/icon-72.png" width="72" />
+        <icon height="144" src="resources/ios/icon/icon-72@2x.png" width="144" />
+        <icon height="76" src="resources/ios/icon/icon-76.png" width="76" />
+        <icon height="152" src="resources/ios/icon/icon-76@2x.png" width="152" />
+        <icon height="167" src="resources/ios/icon/icon-83.5@2x.png" width="167" />
+        <icon height="172" src="resources/ios/icon/icon-86@2x.png" width="172" />
+        <icon height="196" src="resources/ios/icon/icon-98@2x.png" width="196" />
+        <icon height="1024" src="resources/ios/icon/icon-1024.png" width="1024" />
+        <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
+        <splash height="960" src="resources/ios/splash/Default@2x~iphone.png" width="640" />
+        <splash height="1024" src="resources/ios/splash/Default-Portrait~ipad.png" width="768" />
+        <splash height="768" src="resources/ios/splash/Default-Landscape~ipad.png" width="1024" />
+        <splash height="1125" src="resources/ios/splash/Default-Landscape-2436h.png" width="2436" />
+        <splash height="1242" src="resources/ios/splash/Default-Landscape-736h.png" width="2208" />
+        <splash height="2048" src="resources/ios/splash/Default-Portrait@2x~ipad.png" width="1536" />
+        <splash height="1536" src="resources/ios/splash/Default-Landscape@2x~ipad.png" width="2048" />
+        <splash height="2732" src="resources/ios/splash/Default-Portrait@~ipadpro.png" width="2048" />
+        <splash height="2048" src="resources/ios/splash/Default-Landscape@~ipadpro.png" width="2732" />
+        <splash height="1136" src="resources/ios/splash/Default-568h@2x~iphone.png" width="640" />
+        <splash height="1334" src="resources/ios/splash/Default-667h.png" width="750" />
+        <splash height="2208" src="resources/ios/splash/Default-736h.png" width="1242" />
+        <splash height="2436" src="resources/ios/splash/Default-2436h.png" width="1125" />
+        <splash height="2732" src="resources/ios/splash/Default@2x~universal~anyany.png" width="2732" />
+        <icon height="216" src="resources/ios/icon/icon-108@2x.png" width="216" />
+        <splash height="2688" src="resources/ios/splash/Default-2688h~iphone.png" width="1242" />
+        <splash height="1242" src="resources/ios/splash/Default-Landscape-2688h~iphone.png" width="2688" />
+        <splash height="1792" src="resources/ios/splash/Default-1792h~iphone.png" width="828" />
+        <splash height="828" src="resources/ios/splash/Default-Landscape-1792h~iphone.png" width="1792" />
+    </platform>
+    <plugin name="cordova-plugin-whitelist" spec="1.3.3" />
+    <plugin name="cordova-plugin-statusbar" spec="2.4.2" />
+    <plugin name="cordova-plugin-device" spec="2.0.2" />
+    <plugin name="cordova-plugin-splashscreen" spec="5.0.2" />
+    <plugin name="cordova-plugin-ionic-webview" spec="^4.0.0" />
+    <plugin name="cordova-plugin-ionic-keyboard" spec="^2.0.5" />
+</widget>

+ 8 - 0
resources/README.md

@@ -0,0 +1,8 @@
+These are Cordova resources. You can replace icon.png and splash.png and run
+`ionic cordova resources` to generate custom icons and splash screens for your
+app. See `ionic cordova resources --help` for details.
+
+Cordova reference documentation:
+
+- Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html
+- Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/

二进制
resources/android/icon/drawable-hdpi-icon.png


二进制
resources/android/icon/drawable-ldpi-icon.png


二进制
resources/android/icon/drawable-mdpi-icon.png


二进制
resources/android/icon/drawable-xhdpi-icon.png


二进制
resources/android/icon/drawable-xxhdpi-icon.png


二进制
resources/android/icon/drawable-xxxhdpi-icon.png


二进制
resources/android/splash/drawable-land-hdpi-screen.png


二进制
resources/android/splash/drawable-land-ldpi-screen.png


二进制
resources/android/splash/drawable-land-mdpi-screen.png


二进制
resources/android/splash/drawable-land-xhdpi-screen.png


二进制
resources/android/splash/drawable-land-xxhdpi-screen.png


二进制
resources/android/splash/drawable-land-xxxhdpi-screen.png


二进制
resources/android/splash/drawable-port-hdpi-screen.png


二进制
resources/android/splash/drawable-port-ldpi-screen.png


二进制
resources/android/splash/drawable-port-mdpi-screen.png


二进制
resources/android/splash/drawable-port-xhdpi-screen.png


二进制
resources/android/splash/drawable-port-xxhdpi-screen.png


二进制
resources/android/splash/drawable-port-xxxhdpi-screen.png


+ 6 - 0
resources/android/xml/network_security_config.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+    <domain-config cleartextTrafficPermitted="true">
+        <domain includeSubdomains="true">localhost</domain>
+    </domain-config>
+</network-security-config>

二进制
resources/icon-initial.png


二进制
resources/icon.png


二进制
resources/ios/icon/icon-1024.png


二进制
resources/ios/icon/icon-108@2x.png


二进制
resources/ios/icon/icon-20.png


二进制
resources/ios/icon/icon-20@2x.png


二进制
resources/ios/icon/icon-20@3x.png


二进制
resources/ios/icon/icon-24@2x.png


二进制
resources/ios/icon/icon-27.5@2x.png


二进制
resources/ios/icon/icon-29.png


二进制
resources/ios/icon/icon-29@2x.png


二进制
resources/ios/icon/icon-29@3x.png


二进制
resources/ios/icon/icon-40.png


二进制
resources/ios/icon/icon-40@2x.png


二进制
resources/ios/icon/icon-40@3x.png


二进制
resources/ios/icon/icon-44@2x.png


二进制
resources/ios/icon/icon-50.png


二进制
resources/ios/icon/icon-50@2x.png


二进制
resources/ios/icon/icon-60.png


二进制
resources/ios/icon/icon-60@2x.png


二进制
resources/ios/icon/icon-60@3x.png


二进制
resources/ios/icon/icon-72.png


二进制
resources/ios/icon/icon-72@2x.png


二进制
resources/ios/icon/icon-76.png


二进制
resources/ios/icon/icon-76@2x.png


二进制
resources/ios/icon/icon-83.5@2x.png


二进制
resources/ios/icon/icon-86@2x.png


二进制
resources/ios/icon/icon-98@2x.png


二进制
resources/ios/icon/icon-small.png


二进制
resources/ios/icon/icon-small@2x.png


二进制
resources/ios/icon/icon-small@3x.png


二进制
resources/ios/icon/icon.png


二进制
resources/ios/icon/icon@2x.png


二进制
resources/ios/splash/Default-1792h~iphone.png


二进制
resources/ios/splash/Default-2436h.png


二进制
resources/ios/splash/Default-2688h~iphone.png


二进制
resources/ios/splash/Default-568h@2x~iphone.png


二进制
resources/ios/splash/Default-667h.png


二进制
resources/ios/splash/Default-736h.png


二进制
resources/ios/splash/Default-Landscape-1792h~iphone.png


二进制
resources/ios/splash/Default-Landscape-2436h.png


二进制
resources/ios/splash/Default-Landscape-2688h~iphone.png


二进制
resources/ios/splash/Default-Landscape-736h.png


二进制
resources/ios/splash/Default-Landscape@2x~ipad.png


二进制
resources/ios/splash/Default-Landscape@~ipadpro.png


二进制
resources/ios/splash/Default-Landscape~ipad.png


二进制
resources/ios/splash/Default-Portrait@2x~ipad.png


二进制
resources/ios/splash/Default-Portrait@~ipadpro.png


二进制
resources/ios/splash/Default-Portrait~ipad.png


二进制
resources/ios/splash/Default@2x~iphone.png


二进制
resources/ios/splash/Default@2x~universal~anyany.png


二进制
resources/ios/splash/Default~iphone.png


二进制
resources/splash.png


+ 42 - 0
src/app/app-routing.module.ts

@@ -0,0 +1,42 @@
+import { NgModule } from '@angular/core';
+import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
+
+const routes: Routes = [
+  {
+    path: '',
+    redirectTo: 'login',
+    pathMatch: 'full'
+  },
+  {
+    path: 'home',
+    loadChildren: () => import('./home/home.module').then(m => m.HomePageModule)
+  },
+  {
+    path: 'login',
+    loadChildren: () => import('./login/login.module').then( m => m.LoginPageModule)
+  },
+  {
+    path: 'enter-store-apply',
+    loadChildren: () => import('./enter-store-apply/enter-store-apply.module').then( m => m.EnterStoreApplyPageModule)
+  },
+  {
+    path: 'contract-list',
+    loadChildren: () => import('./contract-list/contract-list.module').then( m => m.ContractListPageModule)
+  },
+  {
+    path: 'es-apply-list',
+    loadChildren: () => import('./es-apply-list/es-apply-list.module').then( m => m.EsApplyListPageModule)
+  },
+  {
+    path: 'es-apply-detail/:applyCode',
+    loadChildren: () => import('./es-apply-detail/es-apply-detail.module').then( m => m.EsApplyDetailPageModule)
+  }
+];
+
+@NgModule({
+  imports: [
+    RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })
+  ],
+  exports: [RouterModule]
+})
+export class AppRoutingModule {}

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

@@ -0,0 +1,63 @@
+<ion-app>
+  <ion-split-pane contentId="main-content">
+    <ion-menu contentId="main-content" type="overlay">
+      <ion-header>
+        <ion-toolbar>
+          <ion-title>菜单</ion-title>
+        </ion-toolbar>
+      </ion-header>
+      <ion-content>
+        <ion-list>
+          <ion-item lines="none">
+            <div style="text-align: -webkit-center;width:100%;">
+              <ion-avatar>
+                <img src="../assets/img/favicon.ico" style="margin-top: 10px;">
+              </ion-avatar>
+              <p>欢迎您,{{username}}</p>
+            </div>
+          </ion-item>
+          <ion-list-header>
+            账户
+          </ion-list-header>
+          <ion-menu-toggle auto-hide="false">
+            <ion-item [routerDirection]="'root'" routerLink="/login">
+              <ion-icon slot="start" name="log-in"></ion-icon>
+              <ion-label>
+                登录
+              </ion-label>
+            </ion-item>
+          </ion-menu-toggle>
+          <ion-menu-toggle auto-hide="false">
+            <ion-item button (click)="logout()">
+              <ion-icon slot="start" name="log-out"></ion-icon>
+              <ion-label>
+                登出
+              </ion-label>
+            </ion-item>
+          </ion-menu-toggle>
+        </ion-list>
+
+        <ion-list *ngFor="let menu of menuList">
+          <ion-list-header>
+            {{menu.title}}
+          </ion-list-header>
+          <ion-menu-toggle autoHide="false" *ngFor="let item of menu.children">
+            <ion-item [routerLink]="item.url">
+              <ion-icon slot="start" [name]="item.icon"></ion-icon>
+              <ion-label>
+                {{item.name}}
+              </ion-label>
+            </ion-item>
+          </ion-menu-toggle>
+        </ion-list>
+
+        <ion-item lines="none">
+          <span slot="end">{{version_number}}</span>
+          <span slot="end" *ngIf="environment">(正式版)</span>
+          <span slot="end" *ngIf="!environment">(测试版)</span>
+        </ion-item>
+      </ion-content>
+    </ion-menu>
+    <ion-router-outlet id="main-content"></ion-router-outlet>
+  </ion-split-pane>
+</ion-app>

+ 0 - 0
src/app/app.component.scss


+ 67 - 0
src/app/app.component.spec.ts

@@ -0,0 +1,67 @@
+import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
+import { TestBed, async } from '@angular/core/testing';
+
+import { Platform } from '@ionic/angular';
+import { SplashScreen } from '@ionic-native/splash-screen/ngx';
+import { StatusBar } from '@ionic-native/status-bar/ngx';
+import { RouterTestingModule } from '@angular/router/testing';
+
+import { AppComponent } from './app.component';
+
+describe('AppComponent', () => {
+
+  let statusBarSpy, splashScreenSpy, platformReadySpy, platformSpy;
+
+  beforeEach(async(() => {
+    statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']);
+    splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']);
+    platformReadySpy = Promise.resolve();
+    platformSpy = jasmine.createSpyObj('Platform', { ready: platformReadySpy });
+
+    TestBed.configureTestingModule({
+      declarations: [AppComponent],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA],
+      providers: [
+        { provide: StatusBar, useValue: statusBarSpy },
+        { provide: SplashScreen, useValue: splashScreenSpy },
+        { provide: Platform, useValue: platformSpy },
+      ],
+      imports: [ RouterTestingModule.withRoutes([])],
+    }).compileComponents();
+  }));
+
+  it('should create the app', async () => {
+    const fixture = TestBed.createComponent(AppComponent);
+    const app = fixture.debugElement.componentInstance;
+    expect(app).toBeTruthy();
+  });
+
+  it('should initialize the app', async () => {
+    TestBed.createComponent(AppComponent);
+    expect(platformSpy.ready).toHaveBeenCalled();
+    await platformReadySpy;
+    expect(statusBarSpy.styleDefault).toHaveBeenCalled();
+    expect(splashScreenSpy.hide).toHaveBeenCalled();
+  });
+
+  it('should have menu labels', async () => {
+    const fixture = await TestBed.createComponent(AppComponent);
+    await fixture.detectChanges();
+    const app = fixture.nativeElement;
+    const menuItems = app.querySelectorAll('ion-label');
+    expect(menuItems.length).toEqual(2);
+    expect(menuItems[0].textContent).toContain('Home');
+    expect(menuItems[1].textContent).toContain('List');
+  });
+
+  it('should have urls', async () => {
+    const fixture = await TestBed.createComponent(AppComponent);
+    await fixture.detectChanges();
+    const app = fixture.nativeElement;
+    const menuItems = app.querySelectorAll('ion-item');
+    expect(menuItems.length).toEqual(2);
+    expect(menuItems[0].getAttribute('ng-reflect-router-link')).toEqual('/home');
+    expect(menuItems[1].getAttribute('ng-reflect-router-link')).toEqual('/list');
+  });
+
+});

+ 171 - 0
src/app/app.component.ts

@@ -0,0 +1,171 @@
+import { Component } from '@angular/core';
+
+import { Platform, AlertController, Events } from '@ionic/angular';
+import { Storage } from '@ionic/storage'
+import { SplashScreen } from '@ionic-native/splash-screen/ngx';
+import { StatusBar } from '@ionic-native/status-bar/ngx';
+import { Router } from '@angular/router';
+import { UserData } from '../providers/user-data';
+import { Update } from '../providers/update'
+import { menu_list } from './menu/menu'
+import { environment } from '../environments/environment'
+
+@Component({
+  selector: 'app-root',
+  templateUrl: 'app.component.html',
+  styleUrls: ['app.component.scss']
+})
+export class AppComponent {
+  public loggedIn: boolean = false;
+  public menuList = [];
+  public version_number: any
+  public username: string
+  public environment = false
+
+  constructor(
+    private router: Router,
+    private storage: Storage,
+    private userData: UserData,
+    private events: Events,
+    private alertController: AlertController,
+    private platform: Platform,
+    private update: Update,
+    private splashScreen: SplashScreen,
+    private statusBar: StatusBar
+  ) {
+    if (environment.production) {
+      this.environment = true
+    }
+    this.initializeApp();
+    this.backButtonEvent()
+  }
+  ngOnInit() {
+    this.checkLoginStatus()
+    this.listenForLoginEvents()
+    this.getUserName()
+  }
+
+  initializeApp() {
+    this.platform.ready().then(async () => {
+      this.statusBar.styleDefault();
+      this.splashScreen.hide();
+      await this.getVersionNumber()
+      await this.update.isUpdate()
+    });
+  }
+
+  checkLoginStatus() {
+    return this.userData.isLoggedIn().then(loggedIn => {
+      return this.updateLoggedInStatus(loggedIn);
+    });
+  }
+
+  updateLoggedInStatus(loggedIn: boolean) {
+    setTimeout(() => {
+      this.loggedIn = loggedIn;
+      if (this.loggedIn) {
+        this.getMenuList()
+      }
+    }, 300);
+  }
+
+  getUserName() {
+    this.storage.get('username').then((val) => {
+      this.username = val
+    });
+  }
+
+  listenForLoginEvents() {
+    this.events.subscribe('user:login', () => {
+      this.updateLoggedInStatus(true);
+      this.getMenuList()
+      this.getUserName()
+    });
+    this.events.subscribe('user:logout', () => {
+      this.updateLoggedInStatus(false);
+      this.username = ''
+      this.menuList = []
+    });
+    this.events.subscribe('update:refuse', () => {
+      navigator['app'].exitApp();
+      this.userData.clear()
+    });
+  }
+
+  async getVersionNumber() {
+    this.version_number = await this.update.getVersionNumber()
+  }
+
+  //android通过返回按钮退出应用
+  lastTimeBackPress = 0;
+  timePeriodToExit = 2000;
+  backButtonEvent() {
+    this.platform.backButton.subscribe(() => {
+      if (this.router.url.indexOf('home') > -1 || this.router.url.indexOf('login') > -1 || this.router.url.indexOf('tab3') > -1) {
+        if (new Date().getTime() - this.lastTimeBackPress < this.timePeriodToExit) {
+          navigator['app'].exitApp(); //退出APP
+        } else {
+          this.presentAlertConfirm();
+          this.lastTimeBackPress = new Date().getTime();
+        }
+        // navigator['app'].exitApp(); //ionic4 退出APP的方法
+      }
+    })
+  }
+
+  async getMenuList() {
+    await this.userData.getMenuList()
+    this.menuList = menu_list
+    // let newList = []
+    // let allPerMission = data.permissions.filter(item => { return item.name === '所有权限' })
+    // if (allPerMission.length !== 0) {
+    //   this.menuList = menu_list
+    // } else {
+    //   for (let i of menu_list) {
+    //     let filterArr = []
+    //     for (let j of i.children) {
+    //       let arr = data.permissions.filter(item => { return item.name === j.name })
+    //       if (arr.length !== 0) {
+    //         filterArr = filterArr.concat(j)
+    //       }
+    //     }
+    //     // 如果有符合的菜单项则push进去
+    //     if (filterArr.length !== 0) {
+    //       newList.push({
+    //         title: i.title,
+    //         children: filterArr
+    //       })
+    //     }
+    //   }
+    //   this.menuList = newList
+    // }
+  }
+
+  async presentAlertConfirm() {
+    const alert = await this.alertController.create({
+      // header: 'Confirm!',
+      message: '您要退出APP吗?',
+      buttons: [
+        {
+          text: '取消',
+          role: 'cancel',
+          cssClass: 'secondary',
+          handler: (blah) => {
+          }
+        }, {
+          text: '退出',
+          handler: () => {
+            navigator['app'].exitApp();
+            this.userData.clear()
+          }
+        }
+      ]
+    });
+
+    await alert.present();
+  }
+
+  logout() {
+    this.userData.logout()
+  }
+}

+ 43 - 0
src/app/app.module.ts

@@ -0,0 +1,43 @@
+import { NgModule } from '@angular/core';
+import { BrowserModule } from '@angular/platform-browser';
+import { RouteReuseStrategy } from '@angular/router';
+
+import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
+import { SplashScreen } from '@ionic-native/splash-screen/ngx';
+import { StatusBar } from '@ionic-native/status-bar/ngx';
+import { IonicStorageModule  } from '@ionic/storage'
+import { AppVersion } from '@ionic-native/app-version/ngx';
+import { HTTP } from '@ionic-native/http/ngx';
+import { PhotoViewer } from '@ionic-native/photo-viewer/ngx';
+
+import { File } from '@ionic-native/file/ngx';
+import { FileOpener } from '@ionic-native/file-opener/ngx';
+import { FileTransfer, FileTransferObject } from '@ionic-native/file-transfer/ngx';
+
+import { AppComponent } from './app.component';
+import { AppRoutingModule } from './app-routing.module';
+
+@NgModule({
+  declarations: [AppComponent],
+  entryComponents: [],
+  imports: [
+    BrowserModule,
+    IonicStorageModule.forRoot(),
+    IonicModule.forRoot(),
+    AppRoutingModule
+  ],
+  providers: [
+    StatusBar,
+    SplashScreen,
+    AppVersion,
+    PhotoViewer,
+    HTTP,
+    File,
+    FileOpener,
+    FileTransfer,
+    FileTransferObject,
+    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
+  ],
+  bootstrap: [AppComponent]
+})
+export class AppModule {}

+ 17 - 0
src/app/contract-list/contract-list-routing.module.ts

@@ -0,0 +1,17 @@
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { ContractListPage } from './contract-list.page';
+
+const routes: Routes = [
+  {
+    path: '',
+    component: ContractListPage
+  }
+];
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+  exports: [RouterModule],
+})
+export class ContractListPageRoutingModule {}

+ 20 - 0
src/app/contract-list/contract-list.module.ts

@@ -0,0 +1,20 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule } from '@angular/forms';
+
+import { IonicModule } from '@ionic/angular';
+
+import { ContractListPageRoutingModule } from './contract-list-routing.module';
+
+import { ContractListPage } from './contract-list.page';
+
+@NgModule({
+  imports: [
+    CommonModule,
+    FormsModule,
+    IonicModule,
+    ContractListPageRoutingModule
+  ],
+  declarations: [ContractListPage]
+})
+export class ContractListPageModule {}

+ 0 - 0
src/app/contract-list/contract-list.page.html


部分文件因为文件数量过多而无法显示