Bladeren bron

Just for Debug

Patrick Bozic 4 jaren geleden
bovenliggende
commit
43ed5e2059

+ 3 - 0
.browserslistrc

@@ -0,0 +1,3 @@
+> 1%
+last 2 versions
+not dead

+ 17 - 0
.eslintrc.js

@@ -0,0 +1,17 @@
+module.exports = {
+  root: true,
+  env: {
+    node: true
+  },
+  'extends': [
+    'plugin:vue/essential',
+    'eslint:recommended'
+  ],
+  parserOptions: {
+    parser: 'babel-eslint'
+  },
+  rules: {
+    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
+  }
+}

+ 23 - 0
.gitignore

@@ -0,0 +1,23 @@
+.DS_Store
+node_modules
+/dist
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?

+ 22 - 0
README.md

@@ -1,2 +1,24 @@
 # ar-navigation
 
+## Project setup
+```
+npm install
+```
+
+### Compiles and hot-reloads for development
+```
+npm run serve
+```
+
+### Compiles and minifies for production
+```
+npm run build
+```
+
+### Lints and fixes files
+```
+npm run lint
+```
+
+### Customize configuration
+See [Configuration Reference](https://cli.vuejs.org/config/).

+ 5 - 0
babel.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  presets: [
+    '@vue/cli-plugin-babel/preset'
+  ]
+}

File diff suppressed because it is too large
+ 12284 - 0
package-lock.json


+ 28 - 0
package.json

@@ -0,0 +1,28 @@
+{
+  "name": "ar-navigation",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "serve": "vue-cli-service serve",
+    "build": "vue-cli-service build",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "aframe": "^1.2.0",
+    "aframe-curve-component": "^0.1.3",
+    "aframe-look-at-component": "^1.0.0",
+    "ar.js": "../AR.js/",
+    "axios": "^0.21.1",
+    "browserify-css": "*",
+    "core-js": "^3.6.5",
+    "envify": "*",
+    "vue": "^2.6.11",
+    "webar": "0.0.0"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "~4.5.0",
+    "@vue/cli-service": "~4.5.0",
+    "babel-eslint": "^10.1.0",
+    "vue-template-compiler": "^2.6.11"
+  }
+}

BIN
public/favicon.ico


+ 21 - 0
public/index.html

@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <title><%= htmlWebpackPlugin.options.title %></title>
+    <!-- <script src="./js/aframe.min.js"></script>
+    <script src="./js/aframe-look-at-component.min.js"></script>
+    <script src="./js/aframe-ar-nft.js"></script>
+    <script src="./js/aframe-route.js"></script>  -->
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+  </body>
+</html>

File diff suppressed because it is too large
+ 1 - 0
public/js/aframe-ar.js


File diff suppressed because it is too large
+ 6059 - 0
public/js/old/aframe-ar-nft.js


File diff suppressed because it is too large
+ 1 - 0
public/js/old/aframe-look-at-component.min.js


+ 307 - 0
public/js/old/aframe-route.js

@@ -0,0 +1,307 @@
+if (typeof AFRAME === 'undefined') {
+  throw new Error('Component attempted to register before AFRAME was available.');
+}
+
+/**
+* Curve component for A-Frame to deal with spline curves
+*/
+var zAxis = new THREE.Vector3(0, 0, 1);
+var degToRad = THREE.Math.degToRad;
+
+AFRAME.registerComponent('curve-point', {
+
+  //dependencies: ['position'],
+
+  schema: {},
+
+  init: function () {
+      this.el.addEventListener("componentchanged", this.changeHandler.bind(this));
+      this.el.emit("curve-point-change");
+  },
+
+  changeHandler: function (event) {
+      if (event.detail.name == "position") {
+          this.el.emit("curve-point-change");
+      }
+  }
+
+});
+
+AFRAME.registerComponent('curve', {
+
+  //dependencies: ['curve-point'],
+
+  schema: {
+      type: {
+          type: 'string',
+          default: 'CatmullRom',
+          oneOf: ['CatmullRom', 'CubicBezier', 'QuadraticBezier', 'Line']
+      },
+      closed: {
+          type: 'boolean',
+          default: false
+      }
+  },
+
+  init: function () {
+      this.pathPoints = null;
+      this.curve = null;
+
+      this.el.addEventListener("curve-point-change", this.update.bind(this));
+      this.el.addEventListener("gps-entity-place-update-position", this.update.bind(this));
+      
+  },
+
+  update: function (oldData) {
+
+      this.points = Array.from(this.el.querySelectorAll("a-curve-point, [curve-point]"));
+      console.log(this.points);
+      if (this.points.length <= 1) {
+          console.warn("At least 2 curve-points needed to draw a curve");
+          this.curve = null;
+      } else {
+          // Get Array of Positions from Curve-Points
+          var pointsArray = this.points.map(function (point) {
+
+              if (point.x !== undefined && point.y !== undefined && point.z !== undefined) {
+                  return point;
+              }
+
+              return point.object3D.getWorldPosition();
+          });
+
+          // Update the Curve if either the Curve-Points or other Properties changed
+          if (!AFRAME.utils.deepEqual(pointsArray, this.pathPoints) || (oldData !== 'CustomEvent' && !AFRAME.utils.deepEqual(this.data, oldData))) {
+              this.curve = null;
+
+              this.pathPoints = pointsArray;
+
+              // Create Curve
+              switch (this.data.type) {
+                  case 'CubicBezier':
+                      if (this.pathPoints.length != 4) {
+                          throw new Error('The Three constructor of type CubicBezierCurve3 requires 4 points');
+                      }
+                      this.curve = new THREE.CubicBezierCurve3(this.pathPoints[0], this.pathPoints[1], this.pathPoints[2], this.pathPoints[3]);
+                      break;
+                  case 'QuadraticBezier':
+                      if (this.pathPoints.length != 3) {
+                          throw new Error('The Three constructor of type QuadraticBezierCurve3 requires 3 points');
+                      }
+                      this.curve = new THREE.QuadraticBezierCurve3(this.pathPoints[0], this.pathPoints[1], this.pathPoints[2]);
+                      break;
+                  case 'Line':
+                      if (this.pathPoints.length != 2) {
+                          throw new Error('The Three constructor of type LineCurve3 requires 2 points');
+                      }
+                      this.curve = new THREE.LineCurve3(this.pathPoints[0], this.pathPoints[1]);
+                      break;
+                  case 'CatmullRom':
+                      this.curve = new THREE.CatmullRomCurve3(this.pathPoints);
+                      break;
+                  case 'Spline':
+                      this.curve = new THREE.SplineCurve3(this.pathPoints);
+                      break;
+                  default:
+                      throw new Error('No Three constructor of type (case sensitive): ' + this.data.type + 'Curve3');
+              }
+
+              this.curve.closed = this.data.closed;
+
+              this.el.emit('curve-updated');
+          }
+      }
+
+  },
+
+  remove: function () {
+      this.el.removeEventListener("curve-point-change", this.update.bind(this));
+  },
+
+  closestPointInLocalSpace: function closestPoint(point, resolution, testPoint, currentRes) {
+      if (!this.curve) throw Error('Curve not instantiated yet.');
+      resolution = resolution || 0.1 / this.curve.getLength();
+      currentRes = currentRes || 0.5;
+      testPoint = testPoint || 0.5;
+      currentRes /= 2;
+      var aTest = testPoint + currentRes;
+      var bTest = testPoint - currentRes;
+      var a = this.curve.getPointAt(aTest);
+      var b = this.curve.getPointAt(bTest);
+      var aDistance = a.distanceTo(point);
+      var bDistance = b.distanceTo(point);
+      var aSmaller = aDistance < bDistance;
+      if (currentRes < resolution) {
+
+          var tangent = this.curve.getTangentAt(aSmaller ? aTest : bTest);
+          if (currentRes < resolution) return {
+              result: aSmaller ? aTest : bTest,
+              location: aSmaller ? a : b,
+              distance: aSmaller ? aDistance : bDistance,
+              normal: normalFromTangent(tangent),
+              tangent: tangent
+          };
+      }
+      if (aDistance < bDistance) {
+          return this.closestPointInLocalSpace(point, resolution, aTest, currentRes);
+      } else {
+          return this.closestPointInLocalSpace(point, resolution, bTest, currentRes);
+      }
+  }
+});
+
+
+var tempQuaternion = new THREE.Quaternion();
+
+function normalFromTangent(tangent) {
+  var lineEnd = new THREE.Vector3(0, 1, 0);
+  tempQuaternion.setFromUnitVectors(zAxis, tangent);
+  lineEnd.applyQuaternion(tempQuaternion);
+  return lineEnd;
+}
+
+AFRAME.registerShader('line', {
+  schema: {
+      color: {default: '#ff0000'},
+  },
+
+  init: function (data) {
+      this.material = new THREE.LineBasicMaterial(data);
+  },
+
+  update: function (data) {
+      this.material = new THREE.LineBasicMaterial(data);
+  },
+});
+
+AFRAME.registerComponent('draw-curve', {
+
+  //dependencies: ['curve', 'material'],
+
+  schema: {
+      curve: {type: 'selector'}
+  },
+
+  init: function () {
+    console.log(this.data);
+      this.data.curve.addEventListener('curve-updated', this.update.bind(this));
+  },
+
+  update: function () {
+      if (this.data.curve) {
+          this.curve = this.data.curve.components.curve;
+      }
+
+      if (this.curve && this.curve.curve) {
+          var lineGeometry = new THREE.BufferGeometry().setFromPoints(this.curve.curve.getPoints(this.curve.curve.getPoints().length * 10));
+          var mesh = this.el.getOrCreateObject3D('mesh', THREE.Line);
+          var lineMaterial = mesh.material ? mesh.material : new THREE.LineBasicMaterial({
+              color: "#ff0000"
+          });
+
+          this.el.setObject3D('mesh', new THREE.Line(lineGeometry, lineMaterial));
+      }
+  },
+
+  remove: function () {
+      this.data.curve.removeEventListener('curve-updated', this.update.bind(this));
+      this.el.getObject3D('mesh').geometry = new THREE.Geometry();
+  }
+
+});
+
+AFRAME.registerComponent('clone-along-curve', {
+
+  //dependencies: ['curve'],
+
+  schema: {
+      curve: {type: 'selector'},
+      spacing: {default: 1},
+      rotation: {
+          type: 'vec3',
+          default: '0 0 0'
+      },
+      scale: {
+          type: 'vec3',
+          default: '1 1 1'
+      }
+  },
+
+  init: function () {
+      this.el.addEventListener('model-loaded', this.update.bind(this));
+      this.data.curve.addEventListener('curve-updated', this.update.bind(this));
+  },
+
+  update: function () {
+      this.remove();
+
+      if (this.data.curve) {
+          this.curve = this.data.curve.components.curve;
+      }
+
+      if (!this.el.getObject3D('clones') && this.curve && this.curve.curve) {
+          var mesh = this.el.getObject3D('mesh');
+
+          var length = this.curve.curve.getLength();
+          var start = 0;
+          var counter = start;
+
+          var cloneMesh = this.el.getOrCreateObject3D('clones', THREE.Group);
+
+          var parent = new THREE.Object3D();
+          mesh.scale.set(this.data.scale.x, this.data.scale.y, this.data.scale.z);
+          mesh.rotation.set(degToRad(this.data.rotation.x), degToRad(this.data.rotation.y), degToRad(this.data.rotation.z));
+          mesh.rotation.order = 'YXZ';
+
+          parent.add(mesh);
+
+          while (counter <= length) {
+              var child = parent.clone(true);
+
+              child.position.copy(this.curve.curve.getPointAt(counter / length));
+
+              tangent = this.curve.curve.getTangentAt(counter / length).normalize();
+
+              child.quaternion.setFromUnitVectors(zAxis, tangent);
+
+              cloneMesh.add(child);
+
+              counter += this.data.spacing;
+          }
+      }
+  },
+
+  remove: function () {
+      this.curve = null;
+      if (this.el.getObject3D('clones')) {
+          this.el.removeObject3D('clones');
+      }
+  }
+
+});
+
+AFRAME.registerPrimitive('a-draw-curve', {
+  defaultComponents: {
+      'draw-curve': {},
+  },
+  mappings: {
+      curveref: 'draw-curve.curve',
+  }
+});
+
+AFRAME.registerPrimitive('a-curve-point', {
+  defaultComponents: {
+      'curve-point': {},
+  },
+  mappings: {}
+});
+
+AFRAME.registerPrimitive('a-curve', {
+  defaultComponents: {
+      'curve': {}
+  },
+
+  mappings: {
+      type: 'curve.type',
+  }
+});

File diff suppressed because it is too large
+ 1091 - 0
public/js/old/aframe.min.js


File diff suppressed because it is too large
+ 1 - 0
public/js/old/aframe.min.js.map


+ 27 - 0
src/App.vue

@@ -0,0 +1,27 @@
+<template>
+  <div id="app">
+    <Navigation/>
+  </div>
+</template>
+
+<script>
+import Navigation from './components/Navigation.vue'
+
+export default {
+  name: 'App',
+  components: {
+    Navigation
+  }
+}
+</script>
+
+<style>
+#app {
+  font-family: Avenir, Helvetica, Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  text-align: center;
+  color: #2c3e50;
+  margin-top: 60px;
+}
+</style>

File diff suppressed because it is too large
+ 1 - 0
src/assets/js/aframe-ar.js


BIN
src/assets/logo.png


+ 109 - 0
src/components/Navigation.vue

@@ -0,0 +1,109 @@
+<template>
+  <div class="navigation">
+    <a-scene
+      vr-mode-ui="enabled: false"
+      embedded
+      arjs="sourceType: webcam; debugUIEnabled: false;"
+    >
+      
+
+      <a-camera gps-camera rotation-reader> </a-camera>
+      <a-curve id="route1" v-if="route.length">
+        <template v-for="(coord, index) in route">
+          <a-text :key="index" position="abc">{{ coord.lat }}</a-text>
+          <span :key="index" :position="coord.lat"></span>
+        </template>
+      </a-curve>
+    </a-scene>
+  </div>
+</template>
+
+<script>
+
+// API:
+// http://dev.virtualearth.net/REST/v1/Routes/Walking?wayPoint.1=22.364563,113.600967&wayPoint.2=22.363379,113.598615&routeAttributes=routePath&key=Ahwqh1mUNte20qOAphNKU-hSGsmEnavPTOU-749M7MJl7MYIdsTmL4XFoSwS4QvP
+
+
+export default {
+  name: 'Navigation',
+  props: {
+    
+  },
+  data() {
+    return {
+      scene: undefined,
+      start: {lat: 22.364563, lon: 113.600967},
+      end: {lat: 22.363379, lon: 113.598615},
+      route: [],
+      test: '23.323, 344.23423'
+    }
+  },
+  mounted() {
+    this.scene = document.querySelector('a-scene');
+    this.getRoute(this.start, this.end);
+  },
+  methods: {
+    getRoute(start, end) {
+      this.$http.get('https://dev.virtualearth.net/REST/v1/Routes/Walking', {
+        params: {
+          'wayPoint.1':      `${start.lat},${start.lon}`,
+          'wayPoint.2':      `${end.lat},${end.lon}`,
+          'routeAttributes': 'routePath',
+          'key':             'Ahwqh1mUNte20qOAphNKU-hSGsmEnavPTOU-749M7MJl7MYIdsTmL4XFoSwS4QvP'
+        }
+      })
+      .then(response => {
+        if(response.status === 200) {
+          // this.route = response.data.resourceSets[0].resources[0].routePath.line.coordinates;
+          this.createRoute(response.data.resourceSets[0].resources[0].routePath.line.coordinates);
+        } else {
+          throw new Error(response.status);
+        }
+      })
+    },
+    createRoute(path) {
+      if(path.length) {
+        path.forEach((coordinate, i) => {
+          this.route.push({id: i, lat: coordinate[0], lon: coordinate[1]});
+        });
+        console.log(this.route);
+      }
+    },
+
+    drawRoute(path) {
+      if(path.length) {
+console.log(path);
+        const curve = document.createElement('a-curve');
+        curve.id = 'route';
+        this.scene.appendChild(curve);
+
+        path.forEach(coordinate => {
+          const lat = coordinate[0];
+          const lon = coordinate[1];
+console.log(coordinate);
+          const placeText = document.createElement('a-text'); //curve-point
+          placeText.setAttribute('gps-entity-place', `latitude: ${lat}; longitude: ${lon};`);
+          placeText.setAttribute('title', 'PATH');
+          placeText.setAttribute('scale', '15 15 15');
+
+          placeText.addEventListener('loaded', () => {
+              window.dispatchEvent(new CustomEvent('gps-entity-place-loaded'))
+          });
+
+          curve.appendChild(placeText);
+        });
+
+        const drawCurve = document.createElement('a-draw-curve');
+        drawCurve.setAttribute('curveref', 'route');
+        drawCurve.setAttribute('material', 'shader: line; color: white');
+        this.scene.appendChild(drawCurve);
+      }
+    }
+  }
+}
+</script>
+
+
+<style scoped>
+
+</style>

+ 29 - 0
src/main.js

@@ -0,0 +1,29 @@
+import Vue from 'vue'
+import App from './App.vue'
+// import 'aframe'
+import 'ar.js'
+// import '../node_modules/aframe-look-at-component'
+// import 'aframe-curve-component'
+
+Vue.prototype.$bus = new Vue()
+
+
+let {axios} = require('./utils/http.js')
+
+Vue.prototype.$http = axios
+
+Vue.config.productionTip = false
+
+Vue.config.ignoredElements = [
+  'a-scene',
+  'a-camera',
+  'a-box',
+  'a-image',
+  'a-curve',
+  'a-curve-point',
+  'a-text'
+]
+
+new Vue({
+  render: h => h(App),
+}).$mount('#app')

+ 6 - 0
src/utils/http.js

@@ -0,0 +1,6 @@
+import axios from 'axios'
+
+axios.defaults.baseURL = ''
+axios.defaults.headers['X-Requested-with'] = 'XMLHttpRequest'
+
+export { axios }

+ 24 - 0
ssl-cert/cert.pem

@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIID/zCCAuegAwIBAgIUR05lKqIACQJayrVSK14YM/wOYWswDQYJKoZIhvcNAQEL
+BQAwgY4xCzAJBgNVBAYTAkNOMRIwEAYDVQQIDAlHdWFuZ2RvbmcxDzANBgNVBAcM
+BlpodWhhaTEOMAwGA1UECgwFNERhZ2UxDDAKBgNVBAsMA1dlYjEQMA4GA1UEAwwH
+UGF0cmljazEqMCgGCSqGSIb3DQEJARYbcGF0cmlja2JvemljQHByb3Rvbm1haWwu
+Y29tMB4XDTIxMDgyNTA0MDIwNVoXDTMxMDgyMzA0MDIwNVowgY4xCzAJBgNVBAYT
+AkNOMRIwEAYDVQQIDAlHdWFuZ2RvbmcxDzANBgNVBAcMBlpodWhhaTEOMAwGA1UE
+CgwFNERhZ2UxDDAKBgNVBAsMA1dlYjEQMA4GA1UEAwwHUGF0cmljazEqMCgGCSqG
+SIb3DQEJARYbcGF0cmlja2JvemljQHByb3Rvbm1haWwuY29tMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA33DJHgd2VuZTAWAXe+zZ4gf+IB+B70Q+Nj55
+zvTexK2jxtxC5uBzrAX597D+54TmBYmhLT4ke6fTX0PzO55C6r+pbOXPtfTUsyAW
+v9AqwU/HjEchHnCoXwuBHT/yTx5CR2WI5u//IHrgmjWJZimb6ZjmQvzAzheGveFP
+hQUPHkLQGyLivZICKef50AJetftgKUieoTr9wc8T+ZXOgA6teqirVhiPkqM16DA7
+DrNUbcqcNLNM40yUi4AIxRaIhmO4DyZ0pUKdUhqAeOKKoDdaN8DlwBQ7dy2JtvT5
+71biZF/Acypg8FmK9IvozYraXKF0bBWWeYGAp2GLsMkKp5dyXwIDAQABo1MwUTAd
+BgNVHQ4EFgQUva77VhIWwOgshceu6Zz52M8kdmUwHwYDVR0jBBgwFoAUva77VhIW
+wOgshceu6Zz52M8kdmUwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC
+AQEAFd0lcDM3zkrSeUTpytvZqvTUPjVJp9sxj/sSAnUvVeZuqDce2n57IHriAoOB
+2NQ6mSaM8/VMZyjo8dVGyH0iwy/gwml+eR7gTDdB8ZlP3tVPi5L4OQMmOx3mKGMS
+yF5BqXPNwQVD/ogN7fCz2eI9LUE66tHOOVXJDY84NeiZx2imt6xolCMbfl22W92N
+MRwZlLj7vREUUhP7/b2+mj8MywZOEAkuTuXaITC0RkrrZxNgUP9C5ydDVyqUk+L2
+0rhSxQI0KuaxKrOEvXDqUNGaWWtDbrDvBPYAqbq0eSW2HvOPAs4qPiDjbW0TD1go
+gTn9ufy+Nb6KPxoyN7wCHI6yGw==
+-----END CERTIFICATE-----

+ 28 - 0
ssl-cert/key.pem

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDfcMkeB3ZW5lMB
+YBd77NniB/4gH4HvRD42PnnO9N7EraPG3ELm4HOsBfn3sP7nhOYFiaEtPiR7p9Nf
+Q/M7nkLqv6ls5c+19NSzIBa/0CrBT8eMRyEecKhfC4EdP/JPHkJHZYjm7/8geuCa
+NYlmKZvpmOZC/MDOF4a94U+FBQ8eQtAbIuK9kgIp5/nQAl61+2ApSJ6hOv3BzxP5
+lc6ADq16qKtWGI+SozXoMDsOs1Rtypw0s0zjTJSLgAjFFoiGY7gPJnSlQp1SGoB4
+4oqgN1o3wOXAFDt3LYm29PnvVuJkX8BzKmDwWYr0i+jNitpcoXRsFZZ5gYCnYYuw
+yQqnl3JfAgMBAAECggEAB/icFCgr/pmk6G2nKNKgS0IBvN+i4QhMN98utUVjFR0k
+tJlzAY2MUty7uCxmS5ggJJ5uU5Dd+FNaZRGlgcD5nipMPwhLyq/7TpCcfydL/y17
+bvOyqMVYHFvqtUJswInRz349zg9NyLjZfmbeifh+CW1c+ZLOxgts0SVSkupFSc0D
+UFUfcqTu1lkF6/V6dncotT0YayqGE+CXtKsAgIWMkfALyiwfJlj08hkfnLCoUB5z
+2wxgUPS+/SrSOYGDg7Tz9hY9+3Qwxh2YZnBr9E0oQ/vpkqwmO3IMT6R7z3QjsWvr
+24uOE1h0ewUBLC+nQTGg+MatUqdpvQtee3dSJyr10QKBgQD3v+pJgZxw690FBUBa
+sLJZg2WTYKlpaLMPKcCFrw2x6/FuWlpnuh1+Prwqaynn2zce1pzfogjHcz8EEZZr
+5i2/hc6T0TKazN88Qodn12THiBAWmz/KHN/7uBtipY3Hm3FjC97stQE4FVT9sVLO
+QKXpSn5ENVaPO+ABtRksfGeJtQKBgQDm4aItFA+vGpTkCozBPBMGmr1qQ/gmXvLk
+65FE7T9+ke7kRK0mCuDlGLFqAeRqFCJ+TFLwEMBprrinYBf6xIMXhPDx8WNrmjbU
+hfqEmBW9s9T9uY4MOTRlvDCXE3s8xsiO9CuF3xeFhCu6lTr0laUGKNsylf1ZnAAq
+2YvGruXIQwKBgGGSySAIFuf2TMbUaaMOIj/U2yVvFWm5XYQkSnmcFwWyyhRPK3nc
+uA7ngE4ohImXMZ9IoOIGu/RpdDETCC4Yqn3aoiBfbNHAzE68WP3RvBRFhyiQHlBo
+jOJjgQ2Z7DvoAYEjxLlvFDrVU/LSaq1mkrFNsGsGor+osjGZ9H8rw89dAoGAGqo6
+gbxMZ2vJgGDbisG2bM/YSnqZIU1b/iZau7wu1h5imch4uukMukjUzKp1R+8VYMLN
+3V4B6vK77tDBVDv36/J1pWu8kMPZy0fB/ChYcnVfhwI0LqM4svs+HWSpmgZXSXNX
+x3lRjSELr9vmWDMkQQbc8gWyofPLbSd85jBy52MCgYEArspyduHY3a9L9dXIbJH3
+igJDpHis/5RllAlslf+wMXQdBXVxo0iTPKvw25wW20P7tST3LRqa4sjCjQd7idnq
+efTIr0pqPXCIzLgdoes60sBBtR3i8ohB0u738C3KjhX0s+D4SrDeUWzHNLBJ5P1U
+Omf9upXQWPooLUMvbhPOHCs=
+-----END PRIVATE KEY-----

+ 12 - 0
vue.config.js

@@ -0,0 +1,12 @@
+const fs = require('fs')
+
+module.exports = {
+  publicPath: "./",
+  devServer: {
+    https: {
+      key: fs.readFileSync('./ssl-cert/key.pem'),
+      cert: fs.readFileSync('./ssl-cert/cert.pem'),
+    },
+    public: 'https://localhost:8080/'
+  }
+}//http://192.168.0.72:8080