Explorar o código

提交内容的备注信息

AAA123 hai 3 meses
pai
achega
1f12d0366c
Modificáronse 94 ficheiros con 1078 adicións e 77 borrados
  1. 101 0
      android/.gitignore
  2. 2 0
      android/app/.gitignore
  3. 54 0
      android/app/build.gradle
  4. 21 0
      android/app/proguard-rules.pro
  5. 26 0
      android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java
  6. 41 0
      android/app/src/main/AndroidManifest.xml
  7. 5 0
      android/app/src/main/java/io/ionic/starter/MainActivity.java
  8. BIN=BIN
      android/app/src/main/res/drawable-land-hdpi/splash.png
  9. BIN=BIN
      android/app/src/main/res/drawable-land-mdpi/splash.png
  10. BIN=BIN
      android/app/src/main/res/drawable-land-xhdpi/splash.png
  11. BIN=BIN
      android/app/src/main/res/drawable-land-xxhdpi/splash.png
  12. BIN=BIN
      android/app/src/main/res/drawable-land-xxxhdpi/splash.png
  13. BIN=BIN
      android/app/src/main/res/drawable-port-hdpi/splash.png
  14. BIN=BIN
      android/app/src/main/res/drawable-port-mdpi/splash.png
  15. BIN=BIN
      android/app/src/main/res/drawable-port-xhdpi/splash.png
  16. BIN=BIN
      android/app/src/main/res/drawable-port-xxhdpi/splash.png
  17. BIN=BIN
      android/app/src/main/res/drawable-port-xxxhdpi/splash.png
  18. 34 0
      android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
  19. 170 0
      android/app/src/main/res/drawable/ic_launcher_background.xml
  20. BIN=BIN
      android/app/src/main/res/drawable/splash.png
  21. 12 0
      android/app/src/main/res/layout/activity_main.xml
  22. 5 0
      android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  23. 5 0
      android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  24. BIN=BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  25. BIN=BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
  26. BIN=BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
  27. BIN=BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  28. BIN=BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
  29. BIN=BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
  30. BIN=BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  31. BIN=BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
  32. BIN=BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
  33. BIN=BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  34. BIN=BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
  35. BIN=BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
  36. BIN=BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  37. BIN=BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
  38. BIN=BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
  39. 4 0
      android/app/src/main/res/values/ic_launcher_background.xml
  40. 7 0
      android/app/src/main/res/values/strings.xml
  41. 22 0
      android/app/src/main/res/values/styles.xml
  42. 5 0
      android/app/src/main/res/xml/file_paths.xml
  43. 18 0
      android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java
  44. 29 0
      android/build.gradle
  45. 22 0
      android/gradle.properties
  46. BIN=BIN
      android/gradle/wrapper/gradle-wrapper.jar
  47. 7 0
      android/gradle/wrapper/gradle-wrapper.properties
  48. 248 0
      android/gradlew
  49. 92 0
      android/gradlew.bat
  50. 5 0
      android/settings.gradle
  51. 16 0
      android/variables.gradle
  52. 2 2
      angular.json
  53. 30 2
      package-lock.json
  54. 5 2
      package.json
  55. 29 29
      src/app/annual-checkup/annual-checkup.page.ts
  56. 5 5
      src/app/consultation/consultation.page.ts
  57. 3 3
      src/app/edit-profile/edit-profile.page.ts
  58. 5 5
      src/app/expert-lectures/expert-lectures.page.ts
  59. 2 2
      src/app/eye-exam/eye-exam.page.ts
  60. 4 4
      src/app/health-community/health-community.page.ts
  61. 1 1
      src/app/manage-family/manage-family.page.html
  62. 2 2
      src/app/medicine-purchase/medicine-purchase.page.ts
  63. 2 2
      src/app/services/medicine.service.ts
  64. 3 3
      src/app/services/user.service.ts
  65. 1 1
      src/app/tab1/tab1.page.scss
  66. 9 9
      src/app/tab1/tab1.page.ts
  67. 2 2
      src/app/tab2/tab2.page.html
  68. 1 1
      src/app/tab3/tab3.page.scss
  69. 2 2
      src/app/tab3/tab3.page.ts
  70. 0 0
      src/assets/images/AIdoctor.png
  71. 0 0
      src/assets/images/action.jpg
  72. 0 0
      src/assets/images/brackground1.jpg
  73. 0 0
      src/assets/images/brackground2.jpg
  74. 0 0
      src/assets/images/brackground3.jpeg
  75. 0 0
      src/assets/images/doctor1.jpg
  76. 0 0
      src/assets/images/doctor2.jpg
  77. 0 0
      src/assets/images/doctor3.jpg
  78. 0 0
      src/assets/images/doctor4.jpg
  79. 0 0
      src/assets/images/doctor5.jpg
  80. 0 0
      src/assets/images/eye1.jpg
  81. 0 0
      src/assets/images/eye2.jpg
  82. 0 0
      src/assets/images/ill1.jpg
  83. 0 0
      src/assets/images/ill2.jpg
  84. 0 0
      src/assets/images/ill3.jpg
  85. 0 0
      src/assets/images/ill4.jpg
  86. 0 0
      src/assets/images/ill5.jpg
  87. 0 0
      src/assets/images/medicine1.png
  88. 0 0
      src/assets/images/medicine2.png
  89. 0 0
      src/assets/images/user.png
  90. 0 0
      src/assets/images/user1.jpg
  91. 0 0
      src/assets/images/user2.jpg
  92. 0 0
      src/assets/images/user3.jpg
  93. 0 0
      src/assets/images/user4.jpg
  94. 19 0
      src/dev/jxnu/202226701052

+ 101 - 0
android/.gitignore

@@ -0,0 +1,101 @@
+# Using Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore
+
+# Built application files
+*.apk
+*.aar
+*.ap_
+*.aab
+
+# Files for the ART/Dalvik VM
+*.dex
+
+# Java class files
+*.class
+
+# Generated files
+bin/
+gen/
+out/
+#  Uncomment the following line in case you need and you don't have the release build type files in your app
+# release/
+
+# Gradle files
+.gradle/
+build/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Proguard folder generated by Eclipse
+proguard/
+
+# Log Files
+*.log
+
+# Android Studio Navigation editor temp files
+.navigation/
+
+# Android Studio captures folder
+captures/
+
+# IntelliJ
+*.iml
+.idea/workspace.xml
+.idea/tasks.xml
+.idea/gradle.xml
+.idea/assetWizardSettings.xml
+.idea/dictionaries
+.idea/libraries
+# Android Studio 3 in .gitignore file.
+.idea/caches
+.idea/modules.xml
+# Comment next line if keeping position of elements in Navigation Editor is relevant for you
+.idea/navEditor.xml
+
+# Keystore files
+# Uncomment the following lines if you do not want to check your keystore files in.
+#*.jks
+#*.keystore
+
+# External native build folder generated in Android Studio 2.2 and later
+.externalNativeBuild
+.cxx/
+
+# Google Services (e.g. APIs or Firebase)
+# google-services.json
+
+# Freeline
+freeline.py
+freeline/
+freeline_project_description.json
+
+# fastlane
+fastlane/report.xml
+fastlane/Preview.html
+fastlane/screenshots
+fastlane/test_output
+fastlane/readme.md
+
+# Version control
+vcs.xml
+
+# lint
+lint/intermediates/
+lint/generated/
+lint/outputs/
+lint/tmp/
+# lint/reports/
+
+# Android Profiling
+*.hprof
+
+# Cordova plugins for Capacitor
+capacitor-cordova-android-plugins
+
+# Copied web assets
+app/src/main/assets/public
+
+# Generated Config files
+app/src/main/assets/capacitor.config.json
+app/src/main/assets/capacitor.plugins.json
+app/src/main/res/xml/config.xml

+ 2 - 0
android/app/.gitignore

@@ -0,0 +1,2 @@
+/build/*
+!/build/.npmkeep

+ 54 - 0
android/app/build.gradle

@@ -0,0 +1,54 @@
+apply plugin: 'com.android.application'
+
+android {
+    namespace "io.ionic.starter"
+    compileSdk rootProject.ext.compileSdkVersion
+    defaultConfig {
+        applicationId "io.ionic.starter"
+        minSdkVersion rootProject.ext.minSdkVersion
+        targetSdkVersion rootProject.ext.targetSdkVersion
+        versionCode 1
+        versionName "1.0"
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+        aaptOptions {
+             // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
+             // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61
+            ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
+        }
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+repositories {
+    flatDir{
+        dirs '../capacitor-cordova-android-plugins/src/main/libs', 'libs'
+    }
+}
+
+dependencies {
+    implementation fileTree(include: ['*.jar'], dir: 'libs')
+    implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
+    implementation "androidx.coordinatorlayout:coordinatorlayout:$androidxCoordinatorLayoutVersion"
+    implementation "androidx.core:core-splashscreen:$coreSplashScreenVersion"
+    implementation project(':capacitor-android')
+    testImplementation "junit:junit:$junitVersion"
+    androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
+    androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
+    implementation project(':capacitor-cordova-android-plugins')
+}
+
+apply from: 'capacitor.build.gradle'
+
+try {
+    def servicesJSON = file('google-services.json')
+    if (servicesJSON.text) {
+        apply plugin: 'com.google.gms.google-services'
+    }
+} catch(Exception e) {
+    logger.info("google-services.json not found, google-services plugin not applied. Push Notifications won't work")
+}

+ 21 - 0
android/app/proguard-rules.pro

@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 26 - 0
android/app/src/androidTest/java/com/getcapacitor/myapp/ExampleInstrumentedTest.java

@@ -0,0 +1,26 @@
+package com.getcapacitor.myapp;
+
+import static org.junit.Assert.*;
+
+import android.content.Context;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.platform.app.InstrumentationRegistry;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+
+    @Test
+    public void useAppContext() throws Exception {
+        // Context of the app under test.
+        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+
+        assertEquals("com.getcapacitor.app", appContext.getPackageName());
+    }
+}

+ 41 - 0
android/app/src/main/AndroidManifest.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <application
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:roundIcon="@mipmap/ic_launcher_round"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme">
+
+        <activity
+            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
+            android:name=".MainActivity"
+            android:label="@string/title_activity_main"
+            android:theme="@style/AppTheme.NoActionBarLaunch"
+            android:launchMode="singleTask"
+            android:exported="true">
+
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+
+        </activity>
+
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="${applicationId}.fileprovider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/file_paths"></meta-data>
+        </provider>
+    </application>
+
+    <!-- Permissions -->
+
+    <uses-permission android:name="android.permission.INTERNET" />
+</manifest>

+ 5 - 0
android/app/src/main/java/io/ionic/starter/MainActivity.java

@@ -0,0 +1,5 @@
+package io.ionic.starter;
+
+import com.getcapacitor.BridgeActivity;
+
+public class MainActivity extends BridgeActivity {}

BIN=BIN
android/app/src/main/res/drawable-land-hdpi/splash.png


BIN=BIN
android/app/src/main/res/drawable-land-mdpi/splash.png


BIN=BIN
android/app/src/main/res/drawable-land-xhdpi/splash.png


BIN=BIN
android/app/src/main/res/drawable-land-xxhdpi/splash.png


BIN=BIN
android/app/src/main/res/drawable-land-xxxhdpi/splash.png


BIN=BIN
android/app/src/main/res/drawable-port-hdpi/splash.png


BIN=BIN
android/app/src/main/res/drawable-port-mdpi/splash.png


BIN=BIN
android/app/src/main/res/drawable-port-xhdpi/splash.png


BIN=BIN
android/app/src/main/res/drawable-port-xxhdpi/splash.png


BIN=BIN
android/app/src/main/res/drawable-port-xxxhdpi/splash.png


+ 34 - 0
android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml

@@ -0,0 +1,34 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:width="108dp"
+    android:height="108dp"
+    android:viewportHeight="108"
+    android:viewportWidth="108">
+    <path
+        android:fillType="evenOdd"
+        android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
+        android:strokeColor="#00000000"
+        android:strokeWidth="1">
+        <aapt:attr name="android:fillColor">
+            <gradient
+                android:endX="78.5885"
+                android:endY="90.9159"
+                android:startX="48.7653"
+                android:startY="61.0927"
+                android:type="linear">
+                <item
+                    android:color="#44000000"
+                    android:offset="0.0" />
+                <item
+                    android:color="#00000000"
+                    android:offset="1.0" />
+            </gradient>
+        </aapt:attr>
+    </path>
+    <path
+        android:fillColor="#FFFFFF"
+        android:fillType="nonZero"
+        android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
+        android:strokeColor="#00000000"
+        android:strokeWidth="1" />
+</vector>

+ 170 - 0
android/app/src/main/res/drawable/ic_launcher_background.xml

@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="108dp"
+    android:height="108dp"
+    android:viewportHeight="108"
+    android:viewportWidth="108">
+    <path
+        android:fillColor="#26A69A"
+        android:pathData="M0,0h108v108h-108z" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M9,0L9,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,0L19,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M29,0L29,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M39,0L39,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M49,0L49,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M59,0L59,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M69,0L69,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M79,0L79,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M89,0L89,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M99,0L99,108"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,9L108,9"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,19L108,19"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,29L108,29"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,39L108,39"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,49L108,49"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,59L108,59"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,69L108,69"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,79L108,79"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,89L108,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M0,99L108,99"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,29L89,29"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,39L89,39"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,49L89,49"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,59L89,59"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,69L89,69"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M19,79L89,79"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M29,19L29,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M39,19L39,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M49,19L49,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M59,19L59,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M69,19L69,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+    <path
+        android:fillColor="#00000000"
+        android:pathData="M79,19L79,89"
+        android:strokeColor="#33FFFFFF"
+        android:strokeWidth="0.8" />
+</vector>

BIN=BIN
android/app/src/main/res/drawable/splash.png


+ 12 - 0
android/app/src/main/res/layout/activity_main.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".MainActivity">
+
+    <WebView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+</androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 5 - 0
android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/ic_launcher_background"/>
+    <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon>

+ 5 - 0
android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/ic_launcher_background"/>
+    <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon>

BIN=BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher.png


BIN=BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png


BIN=BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png


BIN=BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher.png


BIN=BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png


BIN=BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png


BIN=BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher.png


BIN=BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png


BIN=BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png


BIN=BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png


BIN=BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png


BIN=BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


BIN=BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


BIN=BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png


BIN=BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


+ 4 - 0
android/app/src/main/res/values/ic_launcher_background.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="ic_launcher_background">#FFFFFF</color>
+</resources>

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

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<resources>
+    <string name="app_name">myapp</string>
+    <string name="title_activity_main">myapp</string>
+    <string name="package_name">io.ionic.starter</string>
+    <string name="custom_url_scheme">io.ionic.starter</string>
+</resources>

+ 22 - 0
android/app/src/main/res/values/styles.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+        <!-- Customize your theme here. -->
+        <item name="colorPrimary">@color/colorPrimary</item>
+        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+        <item name="colorAccent">@color/colorAccent</item>
+    </style>
+
+    <style name="AppTheme.NoActionBar" parent="Theme.AppCompat.DayNight.NoActionBar">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+        <item name="android:background">@null</item>
+    </style>
+
+
+    <style name="AppTheme.NoActionBarLaunch" parent="Theme.SplashScreen">
+        <item name="android:background">@drawable/splash</item>
+    </style>
+</resources>

+ 5 - 0
android/app/src/main/res/xml/file_paths.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<paths xmlns:android="http://schemas.android.com/apk/res/android">
+    <external-path name="my_images" path="." />
+    <cache-path name="my_cache_images" path="." />
+</paths>

+ 18 - 0
android/app/src/test/java/com/getcapacitor/myapp/ExampleUnitTest.java

@@ -0,0 +1,18 @@
+package com.getcapacitor.myapp;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest {
+
+    @Test
+    public void addition_isCorrect() throws Exception {
+        assertEquals(4, 2 + 2);
+    }
+}

+ 29 - 0
android/build.gradle

@@ -0,0 +1,29 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+    
+    repositories {
+        google()
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:8.2.1'
+        classpath 'com.google.gms:google-services:4.4.0'
+
+        // NOTE: Do not place your application dependencies here; they belong
+        // in the individual module build.gradle files
+    }
+}
+
+apply from: "variables.gradle"
+
+allprojects {
+    repositories {
+        google()
+        mavenCentral()
+    }
+}
+
+task clean(type: Delete) {
+    delete rootProject.buildDir
+}

+ 22 - 0
android/gradle.properties

@@ -0,0 +1,22 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true

BIN=BIN
android/gradle/wrapper/gradle-wrapper.jar


+ 7 - 0
android/gradle/wrapper/gradle-wrapper.properties

@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-all.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists

+ 248 - 0
android/gradlew

@@ -0,0 +1,248 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed 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
+#
+#      https://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.
+#
+
+##############################################################################
+#
+#   Gradle start up script for POSIX generated by Gradle.
+#
+#   Important for running:
+#
+#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+#       noncompliant, but you have some other compliant shell such as ksh or
+#       bash, then to run this script, type that shell name before the whole
+#       command line, like:
+#
+#           ksh Gradle
+#
+#       Busybox and similar reduced shells will NOT work, because this script
+#       requires all of these POSIX shell features:
+#         * functions;
+#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+#         * compound commands having a testable exit status, especially «case»;
+#         * various built-in commands including «command», «set», and «ulimit».
+#
+#   Important for patching:
+#
+#   (2) This script targets any POSIX shell, so it avoids extensions provided
+#       by Bash, Ksh, etc; in particular arrays are avoided.
+#
+#       The "traditional" practice of packing multiple parameters into a
+#       space-separated string is a well documented source of bugs and security
+#       problems, so this is (mostly) avoided, by progressively accumulating
+#       options in "$@", and eventually passing that to Java.
+#
+#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+#       see the in-line comments for details.
+#
+#       There are tweaks for specific operating systems such as AIX, CygWin,
+#       Darwin, MinGW, and NonStop.
+#
+#   (3) This script is generated from the Groovy template
+#       https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       within the Gradle project.
+#
+#       You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
+    [ -h "$app_path" ]
+do
+    ls=$( ls -ld "$app_path" )
+    link=${ls#*' -> '}
+    case $link in             #(
+      /*)   app_path=$link ;; #(
+      *)    app_path=$APP_HOME$link ;;
+    esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+    echo "$*"
+} >&2
+
+die () {
+    echo
+    echo "$*"
+    echo
+    exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in                #(
+  CYGWIN* )         cygwin=true  ;; #(
+  Darwin* )         darwin=true  ;; #(
+  MSYS* | MINGW* )  msys=true    ;; #(
+  NONSTOP* )        nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD=$JAVA_HOME/jre/sh/java
+    else
+        JAVACMD=$JAVA_HOME/bin/java
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD=java
+    if ! command -v java >/dev/null 2>&1
+    then
+        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+    case $MAX_FD in #(
+      max*)
+        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
+        MAX_FD=$( ulimit -H -n ) ||
+            warn "Could not query maximum file descriptor limit"
+    esac
+    case $MAX_FD in  #(
+      '' | soft) :;; #(
+      *)
+        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC3045
+        ulimit -n "$MAX_FD" ||
+            warn "Could not set maximum file descriptor limit to $MAX_FD"
+    esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+#   * args from the command line
+#   * the main class name
+#   * -classpath
+#   * -D...appname settings
+#   * --module-path (only if needed)
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+    JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    for arg do
+        if
+            case $arg in                                #(
+              -*)   false ;;                            # don't mess with options #(
+              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
+                    [ -e "$t" ] ;;                      #(
+              *)    false ;;
+            esac
+        then
+            arg=$( cygpath --path --ignore --mixed "$arg" )
+        fi
+        # Roll the args list around exactly as many times as the number of
+        # args, so each arg winds up back in the position where it started, but
+        # possibly modified.
+        #
+        # NB: a `for` loop captures its iteration list before it begins, so
+        # changing the positional parameters here affects neither the number of
+        # iterations, nor the values presented in `arg`.
+        shift                   # remove old arg
+        set -- "$@" "$arg"      # push replacement arg
+    done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command;
+#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+#     shell script including quotes and variable substitutions, so put them in
+#     double quotes to make sure that they get re-expanded; and
+#   * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+        "-Dorg.gradle.appname=$APP_BASE_NAME" \
+        -classpath "$CLASSPATH" \
+        org.gradle.wrapper.GradleWrapperMain \
+        "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+    die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+#   set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+        xargs -n1 |
+        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+        tr '\n' ' '
+    )" '"$@"'
+
+exec "$JAVACMD" "$@"

+ 92 - 0
android/gradlew.bat

@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

+ 5 - 0
android/settings.gradle

@@ -0,0 +1,5 @@
+include ':app'
+include ':capacitor-cordova-android-plugins'
+project(':capacitor-cordova-android-plugins').projectDir = new File('./capacitor-cordova-android-plugins/')
+
+apply from: 'capacitor.settings.gradle'

+ 16 - 0
android/variables.gradle

@@ -0,0 +1,16 @@
+ext {
+    minSdkVersion = 22
+    compileSdkVersion = 34
+    targetSdkVersion = 34
+    androidxActivityVersion = '1.8.0'
+    androidxAppCompatVersion = '1.6.1'
+    androidxCoordinatorLayoutVersion = '1.2.0'
+    androidxCoreVersion = '1.12.0'
+    androidxFragmentVersion = '1.6.2'
+    coreSplashScreenVersion = '1.0.1'
+    androidxWebkitVersion = '1.9.0'
+    junitVersion = '4.13.2'
+    androidxJunitVersion = '1.1.5'
+    androidxEspressoCoreVersion = '3.5.1'
+    cordovaAndroidVersion = '10.1.1'
+}

+ 2 - 2
angular.json

@@ -44,8 +44,8 @@
                 },
                 {
                   "type": "anyComponentStyle",
-                  "maximumWarning": "2kb",
-                  "maximumError": "4kb"
+                  "maximumWarning": "8kb",
+                  "maximumError": "10kb"
                 }
               ],
               "fileReplacements": [

+ 30 - 2
package-lock.json

@@ -16,10 +16,12 @@
         "@angular/platform-browser": "^18.0.0",
         "@angular/platform-browser-dynamic": "^18.0.0",
         "@angular/router": "^18.0.0",
+        "@capacitor/android": "^6.2.0",
         "@capacitor/app": "6.0.2",
-        "@capacitor/core": "6.2.0",
+        "@capacitor/core": "^6.2.0",
         "@capacitor/haptics": "6.0.2",
         "@capacitor/keyboard": "6.0.3",
+        "@capacitor/splash-screen": "^6.0.3",
         "@capacitor/status-bar": "6.0.2",
         "@ionic/angular": "^8.4.1",
         "ionicons": "^7.0.0",
@@ -37,9 +39,10 @@
         "@angular/cli": "18.2.12",
         "@angular/compiler-cli": "^18.0.0",
         "@angular/language-service": "^18.0.0",
-        "@capacitor/cli": "6.2.0",
+        "@capacitor/cli": "^6.2.0",
         "@ionic/angular-toolkit": "^11.0.1",
         "@types/jasmine": "~5.1.0",
+        "@types/uuid": "^10.0.0",
         "@typescript-eslint/eslint-plugin": "^6.0.0",
         "@typescript-eslint/parser": "^6.0.0",
         "eslint": "^8.57.0",
@@ -2629,6 +2632,15 @@
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@capacitor/android": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/@capacitor/android/-/android-6.2.0.tgz",
+      "integrity": "sha512-3YIDPylV0Q2adEQ/H568p496QdYG0jK/XGMdx7OGSqdBZen92ciAsYdyhLtyl91UVsN1lBhDi5H6j3T2KS6aJg==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@capacitor/core": "^6.2.0"
+      }
+    },
     "node_modules/@capacitor/app": {
       "version": "6.0.2",
       "resolved": "https://registry.npmmirror.com/@capacitor/app/-/app-6.0.2.tgz",
@@ -2829,6 +2841,15 @@
         "@capacitor/core": "^6.0.0"
       }
     },
+    "node_modules/@capacitor/splash-screen": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmmirror.com/@capacitor/splash-screen/-/splash-screen-6.0.3.tgz",
+      "integrity": "sha512-tpVljeNGSwVCIc8lMQkyiCQFokk2PwgYPdDtPnGjFthqmXW/WhIxW8QYl4MUqyLwwgwTEbp4u3Kcv2zqQu2L6Q==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@capacitor/core": "^6.0.0"
+      }
+    },
     "node_modules/@capacitor/status-bar": {
       "version": "6.0.2",
       "resolved": "https://registry.npmmirror.com/@capacitor/status-bar/-/status-bar-6.0.2.tgz",
@@ -5834,6 +5855,13 @@
         "@types/node": "*"
       }
     },
+    "node_modules/@types/uuid": {
+      "version": "10.0.0",
+      "resolved": "https://registry.npmmirror.com/@types/uuid/-/uuid-10.0.0.tgz",
+      "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@types/wrap-ansi": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz",

+ 5 - 2
package.json

@@ -21,10 +21,12 @@
     "@angular/platform-browser": "^18.0.0",
     "@angular/platform-browser-dynamic": "^18.0.0",
     "@angular/router": "^18.0.0",
+    "@capacitor/android": "^6.2.0",
     "@capacitor/app": "6.0.2",
-    "@capacitor/core": "6.2.0",
+    "@capacitor/core": "^6.2.0",
     "@capacitor/haptics": "6.0.2",
     "@capacitor/keyboard": "6.0.3",
+    "@capacitor/splash-screen": "^6.0.3",
     "@capacitor/status-bar": "6.0.2",
     "@ionic/angular": "^8.4.1",
     "ionicons": "^7.0.0",
@@ -42,9 +44,10 @@
     "@angular/cli": "18.2.12",
     "@angular/compiler-cli": "^18.0.0",
     "@angular/language-service": "^18.0.0",
-    "@capacitor/cli": "6.2.0",
+    "@capacitor/cli": "^6.2.0",
     "@ionic/angular-toolkit": "^11.0.1",
     "@types/jasmine": "~5.1.0",
+    "@types/uuid": "^10.0.0",
     "@typescript-eslint/eslint-plugin": "^6.0.0",
     "@typescript-eslint/parser": "^6.0.0",
     "eslint": "^8.57.0",

+ 29 - 29
src/app/annual-checkup/annual-checkup.page.ts

@@ -1,29 +1,29 @@
-import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
-
-@Component({
-  selector: 'app-annual-checkup',
-  templateUrl: './annual-checkup.page.html',
-  styleUrls: ['./annual-checkup.page.scss'],
-})
-export class AnnualCheckupPage implements OnInit {
-  checkupData: any;
-
-  constructor(private route: ActivatedRoute) {}
-
-  ngOnInit() {
-    // 假设从服务中获取数据
-    this.checkupData = {
-      title: '年度体检',
-      date: new Date(),
-      results: [
-        { name: '血压', value: '120/80 mmHg', status: '正常' },
-        { name: '血糖', value: '5.6 mmol/L', status: '正常' },
-        { name: '胆固醇', value: '4.5 mmol/L', status: '正常' },
-        { name: '体重', value: '70 kg', status: '正常' },
-        { name: '身高', value: '175 cm', status: '正常' }
-      ],
-      notes: '总体健康状况良好,建议继续保持良好的生活习惯。'
-    };
-  }
-}
+import { Component, OnInit } from '@angular/core';
+import { ActivatedRoute } from '@angular/router';
+
+@Component({
+  selector: 'app-annual-checkup',
+  templateUrl: './annual-checkup.page.html',
+  styleUrls: ['./annual-checkup.page.scss'],
+})
+export class AnnualCheckupPage implements OnInit {
+  checkupData: any;
+
+  constructor(private route: ActivatedRoute) {}
+
+  ngOnInit() {
+    // 假设从服务中获取数据
+    this.checkupData = {
+      title: '年度体检',
+      date: new Date(),
+      results: [
+        { name: '血压', value: '120/80 mmHg', status: '正常' },
+        { name: '血糖', value: '5.6 mmol/L', status: '正常' },
+        { name: '胆固醇', value: '4.5 mmol/L', status: '正常' },
+        { name: '体重', value: '70 kg', status: '正常' },
+        { name: '身高', value: '175 cm', status: '正常' }
+      ],
+      notes: '总体健康状况良好,建议继续保持良好的生活习惯。'
+    };
+  }
+}

+ 5 - 5
src/app/consultation/consultation.page.ts

@@ -14,27 +14,27 @@ export class ConsultationPage {
   // 示例专家列表
   experts = [
     {
-      avatar: '../../assets/images/医生1.jpg',
+      avatar: '../../assets/images/doctor1.jpg',
       name: '张医生',
       specialty: '心血管科'
     },
     {
-      avatar: '../../assets/images/医生2.jpg',
+      avatar: '../../assets/images/doctor2.jpg',
       name: '李医生',
       specialty: '神经科'
     },
     {
-      avatar: '../../assets/images/医生3.jpg',
+      avatar: '../../assets/images/doctor3.jpg',
       name: '王医生',
       specialty: '儿科'
     },
     {
-      avatar: '../../assets/images/医生4.jpg',
+      avatar: '../../assets/images/doctor4.jpg',
       name: '赵医生',
       specialty: '外科'
     },
     {
-      avatar: '../../assets/images/医生5.jpg',
+      avatar: '../../assets/images/doctor5.jpg',
       name: '陈医生',
       specialty: '内科'
     }

+ 3 - 3
src/app/edit-profile/edit-profile.page.ts

@@ -12,7 +12,7 @@ import { ActivatedRoute, Router } from '@angular/router';
 })
 export class EditProfilePage implements OnInit {
   profileForm: FormGroup;
-  previewImage: string | null = '../../assets/images/user-avatar.png'; // 默认头像路径
+  previewImage: string | null = '../../assets/images/user.png'; // 默认头像路径
   selectedFile: File | null = null;
 
   constructor(
@@ -36,7 +36,7 @@ export class EditProfilePage implements OnInit {
     this.userService.getUserInfo().subscribe(userInfo => {
       if (userInfo) {
         this.profileForm.patchValue(userInfo);
-        this.previewImage = userInfo.userAvatar ?? '../../assets/images/user-avatar.png'; // 确保预览图像是最新的头像或默认值
+        this.previewImage = userInfo.userAvatar ?? '../../assets/images/user.png'; // 确保预览图像是最新的头像或默认值
       }
     });
   }
@@ -63,7 +63,7 @@ export class EditProfilePage implements OnInit {
         alert('请选择有效的图片文件(支持的格式:JPEG, PNG, GIF)。');
         input.value = '';
         this.selectedFile = null;
-        this.previewImage = '../../assets/images/user-avatar.png'; // 清除预览图并恢复默认值
+        this.previewImage = '../../assets/images/user.png'; // 清除预览图并恢复默认值
       }
     }
   }

+ 5 - 5
src/app/expert-lectures/expert-lectures.page.ts

@@ -14,35 +14,35 @@ export class ExpertLecturesPage implements OnInit {
       speaker: '李教授',
       date: '2024-12-25',
       description: '了解如何通过生活方式改变和医学干预来预防心血管疾病...',
-      imageUrl: '../assets/images/1.jpg' // 确保图片路径正确
+      imageUrl: '../assets/images/ill1.jpg' // 确保图片路径正确
     },
     {
       title: '糖尿病管理的新进展',
       speaker: '王博士',
       date: '2024-12-30',
       description: '探讨最新的糖尿病管理技术和方法,帮助患者更好地控制病情...',
-      imageUrl: '../assets/images/2.jpg' // 确保图片路径正确
+      imageUrl: '../assets/images/ill2.jpg' // 确保图片路径正确
     },
     {
       title: '心理健康的重要性',
       speaker: '张心理学家',
       date: '2024-12-27',
       description: '心理健康对整体健康的影响及日常维护的方法...',
-      imageUrl: '../assets/images/3.jpg' // 确保图片路径正确
+      imageUrl: '../assets/images/ill3.jpg' // 确保图片路径正确
     },
     {
       title: '癌症早期筛查的意义',
       speaker: '赵医生',
       date: '2024-12-28',
       description: '介绍癌症早期筛查的重要性和常用方法...',
-      imageUrl: '../assets/images/4.jpg' // 确保图片路径正确
+      imageUrl: '../assets/images/ill4.jpg' // 确保图片路径正确
     },
     {
       title: '营养与免疫系统的关系',
       speaker: '孙营养师',
       date: '2024-12-29',
       description: '探讨营养在增强免疫系统中的作用及合理膳食建议...',
-      imageUrl: '../assets/images/5.jpg' // 确保图片路径正确
+      imageUrl: '../assets/images/ill5.jpg' // 确保图片路径正确
     },
     // 添加更多讲座...
   ];

+ 2 - 2
src/app/eye-exam/eye-exam.page.ts

@@ -36,8 +36,8 @@ export class EyeExamPage implements OnInit {
       date: new Date(),
       details: '视力良好,无异常。建议定期复查。',
       attachments: [
-        { url: '../../assets/images/眼科图.jpg', name: '附件1' },
-        { url: '../../assets/images/眼科图2.jpg', name: '附件2' }
+        { url: '../../assets/images/eye1.jpg', name: '附件1' },
+        { url: '../../assets/images/eye2.jpg', name: '附件2' }
       ]
     };
   }

+ 4 - 4
src/app/health-community/health-community.page.ts

@@ -17,7 +17,7 @@ export class HealthCommunityPage implements OnInit {
       author: '张三',
       date: new Date('2024-12-18'),
       content: '保持健康的饮食习惯对于维持良好的身体状态非常重要...',
-      imageUrl: '../../assets/images/用户1.jpg', // 确保图片路径正确
+      imageUrl: '../../assets/images/user1.jpg', // 确保图片路径正确
       authorAvatar: '' // 添加作者头像属性,默认为空字符串
     },
     {
@@ -26,7 +26,7 @@ export class HealthCommunityPage implements OnInit {
       author: '李四',
       date: new Date('2024-12-17'),
       content: '适量的运动不仅有助于增强体质,还能改善心情...',
-      imageUrl: '../../assets/images/用户2.jpg', // 确保图片路径正确
+      imageUrl: '../../assets/images/user2.jpg', // 确保图片路径正确
       authorAvatar: '' // 添加作者头像属性,默认为空字符串
     },
     // 添加更多帖子...
@@ -116,7 +116,7 @@ export class HealthCommunityPage implements OnInit {
       if (data && data.data) {
         // 在创建新帖子之前获取当前用户的头像
         const currentUserInfo = await firstValueFrom(this.userService.getUserInfo());
-        const authorAvatar = currentUserInfo?.userAvatar || '../../assets/images/user-avatar.png';
+        const authorAvatar = currentUserInfo?.userAvatar || '../../assets/images/user.png';
 
         const newPost = {
           id: this.posts.length + 1,
@@ -124,7 +124,7 @@ export class HealthCommunityPage implements OnInit {
           author: this.currentUser || '当前用户', // 使用当前用户名
           date: new Date(),
           content: data.data.content,
-          imageUrl: data.data.imageUrl || '../assets/images/用户4.jpg', // 根据实际需求设置默认图片或允许上传图片
+          imageUrl: data.data.imageUrl || '../assets/images/user3.jpg', // 根据实际需求设置默认图片或允许上传图片
           authorAvatar: authorAvatar // 添加作者头像
         };
         this.posts.unshift(newPost); // 将新帖子添加到最前面

+ 1 - 1
src/app/manage-family/manage-family.page.html

@@ -20,7 +20,7 @@
   <ion-list *ngIf="!isLoading && familyMembers.length > 0">
     <ion-item *ngFor="let member of familyMembers" button (click)="editMember(member)">
       <ion-avatar slot="start">
-        <img [src]="member.avatar || '../assets/images/用户4.jpg'" alt="Avatar" />
+        <img [src]="member.avatar || '../assets/images/user4.jpg'" alt="Avatar" />
       </ion-avatar>
       <ion-label>
         <h2>{{ member.name }}</h2>

+ 2 - 2
src/app/medicine-purchase/medicine-purchase.page.ts

@@ -22,8 +22,8 @@ import { trigger, state, style, transition, animate } from '@angular/animations'
 })
 export class MedicinePurchasePage implements OnInit {
   medicines = [
-    { id: 1, name: '阿司匹林', price: 15.99, description: '用于缓解轻度至中度疼痛...', imageUrl: '../assets/images/1.png' },
-    { id: 2, name: '布洛芬', price: 12.99, description: '非甾体抗炎药...', imageUrl: '../assets/images/2.png' },
+    { id: 1, name: '阿司匹林', price: 15.99, description: '用于缓解轻度至中度疼痛...', imageUrl: '../assets/images/medicine1.png' },
+    { id: 2, name: '布洛芬', price: 12.99, description: '非甾体抗炎药...', imageUrl: '../assets/images/medicine2.png' },
     // 添加更多药品...
   ];
 

+ 2 - 2
src/app/services/medicine.service.ts

@@ -25,7 +25,7 @@ export class MedicineService {
       name: '阿司匹林',
       price: 15.99,
       description: '用于缓解轻度至中度疼痛...',
-      imageUrl: '../assets/images/1.png',
+      imageUrl: '../assets/images/medicine1.png',
       usage: '成人常用量:口服,一次0.3-0.6g,每日3次...',
       precautions: '不宜长期大量服用...',
       sideEffects: '可能出现恶心、呕吐、上腹部不适或疼痛...'
@@ -35,7 +35,7 @@ export class MedicineService {
       name: '布洛芬',
       price: 12.99,
       description: '非甾体抗炎药...',
-      imageUrl: '../assets/images/2.png',
+      imageUrl: '../assets/images/medicine2.png',
       usage: '成人及12岁以上儿童,一次1片,若持续疼痛或发热,可间隔4~6小时重复用药一次...',
       precautions: '本品最好在饭后服用...',
       sideEffects: '少数患者可能会出现消化不良、胃痛、头痛等症状...'

+ 3 - 3
src/app/services/user.service.ts

@@ -36,7 +36,7 @@ export class UserService {
         phone: userInfo.phone ?? (currentUserInfo as UserInfo).phone,
         gender: userInfo.gender ?? (currentUserInfo as UserInfo).gender,
         birthday: userInfo.birthday ?? (currentUserInfo as UserInfo).birthday,
-        userAvatar: userInfo.userAvatar ?? (currentUserInfo as UserInfo).userAvatar ?? '../../assets/images/user-avatar.png',
+        userAvatar: userInfo.userAvatar ?? (currentUserInfo as UserInfo).userAvatar ?? '../../assets/images/user.png',
         userType: userInfo.userType ?? (currentUserInfo as UserInfo).userType ?? '普通用户'
       };
 
@@ -84,7 +84,7 @@ export class UserService {
         this.userInfoSubject.next({
           ...parsedUserInfo,
           username: parsedUserInfo.username || '',
-          userAvatar: parsedUserInfo.userAvatar || '../../assets/images/user-avatar.png',
+          userAvatar: parsedUserInfo.userAvatar || '../../assets/images/user.png',
           userType: parsedUserInfo.userType || '普通用户',
           gender: parsedUserInfo.gender || '',
           phone: parsedUserInfo.phone || '',
@@ -96,7 +96,7 @@ export class UserService {
         // 设置默认用户信息,确保所有字段都有值
         this.userInfoSubject.next({
           username: '张三',
-          userAvatar: '../../assets/images/user-avatar.png',
+          userAvatar: '../../assets/images/user.png',
           userType: '普通用户',
           gender: 'male',
           phone: '123456789',

+ 1 - 1
src/app/tab1/tab1.page.scss

@@ -48,7 +48,7 @@ ion-toolbar {
     width: 100%; /* 占满整个宽度 */
      /* 使用min-height代替padding-top */
      min-height: 300px; /* 根据需要调整 */
-    background: url('../../assets/images/user-avatar.png') no-repeat center center / cover;
+    background: url('../../assets/images/user.png') no-repeat center center / cover;
     overflow: hidden;
     margin: 0 0; /* 只保留上下外边距 */
     border-radius: 0; /* 移除圆角 */

+ 9 - 9
src/app/tab1/tab1.page.ts

@@ -23,36 +23,36 @@ export class Tab1Page implements AfterViewInit {
 
   doctors = [
     {
-      avatar: '../../assets/images/医生1.jpg',
+      avatar: '../../assets/images/doctor1.jpg',
       name: '张医生',
       specialty: '心血管科'
     },
     {
-      avatar: '../../assets/images/医生2.jpg',
+      avatar: '../../assets/images/doctor2.jpg',
       name: '李医生',
       specialty: '神经科'
     },
     {
-      avatar: '../../assets/images/医生3.jpg',
+      avatar: '../../assets/images/doctor3.jpg',
       name: '王医生',
       specialty: '儿科'
     },
     {
-      avatar: '../../assets/images/医生4.jpg',
+      avatar: '../../assets/images/doctor4.jpg',
       name: '赵医生',
       specialty: '外科'
     },
     {
-      avatar: '../../assets/images/医生5.jpg',
+      avatar: '../../assets/images/doctor5.jpg',
       name: '陈医生',
       specialty: '内科'
     }
   ];
 
   images = [
-    '../../assets/images/背景图1.jpg',
-    '../../assets/images/背景图2.jpg',
-    '../../assets/images/背景图3.jpeg'
+    '../../assets/images/brackground.jpg',
+    '../../assets/images/brackground2.jpg',
+    '../../assets/images/brackground3.jpeg'
   ];
 
   // 功能按钮数据
@@ -71,7 +71,7 @@ export class Tab1Page implements AfterViewInit {
     { label: '健康社区', icon: 'people', route: '/health-community' }
   ];
 
-  userAvatar: string = '../../assets/images/user-avatar.png'; // 默认头像
+  userAvatar: string = '../../assets/images/user.png'; // 默认头像
   private userInfoSubscription!: Subscription;
 
   currentIndex = 0;

+ 2 - 2
src/app/tab2/tab2.page.html

@@ -11,7 +11,7 @@
       <div class="message-container" [class.user-message]="message.sender === 'user'" [class.ai-message]="message.sender === 'ai'">
         <div class="avatar-container" *ngIf="message.sender === 'user'">
           <ion-avatar class="user-avatar">
-            <img [src]="'../../assets/images/user-avatar.png'" />
+            <img [src]="'../../assets/images/user.png'" />
           </ion-avatar>
         </div>
         <div class="message-text">
@@ -20,7 +20,7 @@
         </div>
         <div class="avatar-container" *ngIf="message.sender === 'ai'">
           <ion-avatar class="ai-avatar">
-            <img [src]="'../../assets/images/AI医生.png'" />
+            <img [src]="'../../assets/images/AIdoctor.png'" />
           </ion-avatar>
         </div>
       </div>

+ 1 - 1
src/app/tab3/tab3.page.scss

@@ -167,7 +167,7 @@ ion-button {
   }
 
   .promotion-image {
-    background: url('../../assets/images/活动.jpg') no-repeat center center / cover;
+    background: url('../../assets/images/action.jpg') no-repeat center center / cover;
     width: 100%;
     transition: opacity 0.3s ease;
     &:hover {

+ 2 - 2
src/app/tab3/tab3.page.ts

@@ -11,7 +11,7 @@ import { Subscription } from 'rxjs';
 export class Tab3Page implements OnInit {
 
   username: string = '';
-  userAvatar: string | null = '../../assets/images/user-avatar.png'; // 允许 null
+  userAvatar: string | null = '../../assets/images/user.png'; // 允许 null
   userType: string = '普通用户';
   previewImage: string | null = null;
   private userInfoSubscription?: Subscription;
@@ -53,7 +53,7 @@ export class Tab3Page implements OnInit {
         this.userType = userInfo.userType ?? '普通用户';
         this.previewImage = userInfo.userAvatar ?? null; // 设置预览图像
       } else {
-        this.userAvatar = '../../assets/images/user-avatar.png'; // 如果没有用户信息,使用默认头像
+        this.userAvatar = '../../assets/images/user.png'; // 如果没有用户信息,使用默认头像
         this.previewImage = null;
       }
     });

+ 0 - 0
src/assets/images/AI医生.png → src/assets/images/AIdoctor.png


+ 0 - 0
src/assets/images/活动.jpg → src/assets/images/action.jpg


+ 0 - 0
src/assets/images/背景图1.jpg → src/assets/images/brackground1.jpg


+ 0 - 0
src/assets/images/背景图2.jpg → src/assets/images/brackground2.jpg


+ 0 - 0
src/assets/images/背景图3.jpeg → src/assets/images/brackground3.jpeg


+ 0 - 0
src/assets/images/医生1.jpg → src/assets/images/doctor1.jpg


+ 0 - 0
src/assets/images/医生2.jpg → src/assets/images/doctor2.jpg


+ 0 - 0
src/assets/images/医生3.jpg → src/assets/images/doctor3.jpg


+ 0 - 0
src/assets/images/医生4.jpg → src/assets/images/doctor4.jpg


+ 0 - 0
src/assets/images/医生5.jpg → src/assets/images/doctor5.jpg


+ 0 - 0
src/assets/images/眼科图.jpg → src/assets/images/eye1.jpg


+ 0 - 0
src/assets/images/眼科图2.jpg → src/assets/images/eye2.jpg


+ 0 - 0
src/assets/images/病1.jpg → src/assets/images/ill1.jpg


+ 0 - 0
src/assets/images/病2.jpg → src/assets/images/ill2.jpg


+ 0 - 0
src/assets/images/病3.jpg → src/assets/images/ill3.jpg


+ 0 - 0
src/assets/images/病4.jpg → src/assets/images/ill4.jpg


+ 0 - 0
src/assets/images/病5.jpg → src/assets/images/ill5.jpg


+ 0 - 0
src/assets/images/药1.png → src/assets/images/medicine1.png


+ 0 - 0
src/assets/images/药2.png → src/assets/images/medicine2.png


+ 0 - 0
src/assets/images/user-avatar.png → src/assets/images/user.png


+ 0 - 0
src/assets/images/用户1.jpg → src/assets/images/user1.jpg


+ 0 - 0
src/assets/images/用户2.jpg → src/assets/images/user2.jpg


+ 0 - 0
src/assets/images/用户3.jpg → src/assets/images/user3.jpg


+ 0 - 0
src/assets/images/用户4.jpg → src/assets/images/user4.jpg


+ 19 - 0
src/dev/jxnu/202226701052

@@ -0,0 +1,19 @@
+# 打包项目,携带应用前缀(index.html中相对路径将自动修复为/dev/jxnu/<学号>前缀)
+# /dev/ 项目测试版上传路径
+# /dev/jxnu/<学号> nova-crm项目预留路径
+set NODE_OPTIONS=–max_old_space_size=16000
+node ./node_modules/@angular/cli/bin/ng build --base-href="/dev/jxnu/20226701052/"
+
+# 清空旧文件目录
+obsutil rm obs://nova-cloud/dev/jxnu/20226701052 -r -f -i=XSUWJSVMZNHLWFAINRZ1 -k=P4TyfwfDovVNqz08tI1IXoLWXyEOSTKJRVlsGcV6 -e="obs.cn-south-1.myhuaweicloud.com"
+
+# 同步文件目录
+obsutil sync ./www obs://nova-cloud/dev/jxnu/20226701052  -i=XSUWJSVMZNHLWFAINRZ1 -k=P4TyfwfDovVNqz08tI1IXoLWXyEOSTKJRVlsGcV6 -e="obs.cn-south-1.myhuaweicloud.com" -acl=public-read
+
+
+# 授权公开可读
+obsutil chattri obs://nova-cloud/dev/jxnu/20226701052 -r -f -i=XSUWJSVMZNHLWFAINRZ1 -k=P4TyfwfDovVNqz08tI1IXoLWXyEOSTKJRVlsGcV6 -e="obs.cn-south-1.myhuaweicloud.com" -acl=public-read
+
+# 列举对象
+obsutil ls obs://nova-cloud/dev/jxnu/20226701052  -i=XSUWJSVMZNHLWFAINRZ1 -k=P4TyfwfDovVNqz08tI1IXoLWXyEOSTKJRVlsGcV6 -e="obs.cn-south-1.myhuaweicloud.com"
+