dev #12

Merged
zhangyao merged 3 commits from dev into test 3 years ago
  1. 9
      CHANGELOG.md
  2. 4
      package-lock.json
  3. 2
      package.json
  4. 2
      public/static/offline/JSON/GetDevCoordinateByIP.json
  5. 2
      public/static/offline/JSON/getBackTime.json
  6. 230
      public/static/qm/MainMap_QM.js
  7. 96
      public/static/qm/three.js
  8. 17
      src/assets/images/guide/bg_floor.svg
  9. 15
      src/assets/images/guide/bg_shop.svg
  10. 5
      src/assets/images/guide/direction.svg
  11. 3
      src/assets/images/guide/pos_icon.svg
  12. 12
      src/assets/images/guide/reset.svg
  13. 22
      src/assets/images/guide/search.svg
  14. 47
      src/assets/images/header/logo.svg
  15. BIN
      src/assets/images/index/activity.png
  16. BIN
      src/assets/images/index/brand.png
  17. BIN
      src/assets/images/index/guide.png
  18. 15
      src/assets/images/index/home_tip.svg
  19. BIN
      src/assets/images/index/icon_brand.png
  20. BIN
      src/assets/images/index/park.png
  21. BIN
      src/assets/images/index/school.png
  22. BIN
      src/assets/images/menu/brand.png
  23. BIN
      src/assets/images/menu/brands.png
  24. BIN
      src/assets/images/menu/guide.png
  25. BIN
      src/assets/images/menu/guides.png
  26. 5
      src/components/CarInfo/CarInfo.vue
  27. 174
      src/components/GuideFloors/GuideFloors.vue
  28. 102
      src/components/HomeDialog/HomeDialog.vue
  29. 2
      src/components/Map/Map.vue
  30. 12
      src/components/Menu/Menu.vue
  31. 6
      src/components/PublicComponent/PublicComponent.vue
  32. 2
      src/composables/useHandleScreen.ts
  33. 2
      src/composables/useInitMap.ts
  34. 6
      src/composables/useMapNavControl.ts
  35. 274
      src/views/Guide/Guide.vue
  36. 16
      src/views/Guide/list.ts
  37. 37
      src/views/Index/Middle.vue
  38. 2
      src/views/Transfer/Transfer.vue

9
CHANGELOG.md

@ -2,6 +2,15 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
## [1.1.0-B.0](https://company/project-shenyangk11/sy_k11_H_base_daoshi_vue_ts/compare/v1.0.1...v1.1.0-B.0) (2023-05-25)
### Features
* 🚀 增加导览模块,首页默认跳到导览,无人操作的时候会有一个大圆圈出现在屏幕上移动,修改默认logo,停车模块改名为智能寻车,品牌模块改名为品牌搜索,地图角度调整 ([57d2be0](https://company/project-shenyangk11/sy_k11_H_base_daoshi_vue_ts/commit/57d2be0b0268c592c92679916d26342869bebfe9))
### [1.0.1](https://git.1000my.com/project-shenyangk11/sy_k11_H_base_daoshi_vue_ts/compare/v1.0.1-B.0...v1.0.1) (2023-05-22)
### [1.0.1-B.0](https://git.1000my.com/project-shenyangk11/sy_k11_H_base_daoshi_vue_ts/compare/v1.0.0...v1.0.1-B.0) (2023-05-19)

4
package-lock.json

@ -1,12 +1,12 @@
{
"name": "vue_cli_ts",
"version": "1.0.1-B.0",
"version": "1.1.0-B.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "vue_cli_ts",
"version": "1.0.1-B.0",
"version": "1.1.0-B.0",
"dependencies": {
"@better-scroll/core": "^2.5.0",
"@better-scroll/observe-image": "^2.5.0",

2
package.json

@ -1,6 +1,6 @@
{
"name": "vue_cli_ts",
"version": "1.0.1-B.0",
"version": "1.1.0-B.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",

2
public/static/offline/JSON/GetDevCoordinateByIP.json

@ -8,7 +8,7 @@
"label": "windows",
"screenAttribute": "1920*1080横屏",
"building": "主楼",
"buildingCode": "h-8eWvLqbPZP5cuWHY-vA",
"buildingCode": "2v4-EWupfqgBko4j84mku",
"buildingOrder": 0,
"floor": "L1",
"floorCode": "p6U4SCkoJf9Xq5gBGpa3L",

2
public/static/offline/JSON/getBackTime.json

@ -1,5 +1,5 @@
{
"code": 200,
"msg": "操作成功",
"data": [600, null]
"data": [15, null]
}

230
public/static/qm/MainMap_QM.js

@ -39,7 +39,7 @@ QMUtil = function () {
fSpace: 500, //双叠层状态下楼层的间距
maxDis: 1000,
minDis: 60,
shadow: true, //是否显示阴影
shadow: false, //是否显示阴影
navColor: 0xEE6A50, //途径店铺颜色
aRadius: 2, //圆角半径 大于2 则店铺box显示圆角
overlap: false, //是否叠层
@ -51,7 +51,7 @@ QMUtil = function () {
inArea: false, //点击后是否聚焦到店铺
camZoom: 3, //设置我的方向状态地图放大倍数
boxShop: [], //设置box上显示的文字(过滤指),可点击触发onlyShop
deviceAng: false, //地图初始化方向是否使用设备角度
deviceAng: true, //地图初始化方向是否使用设备角度
}
this.lightOptions = {
d_col: "#ffffff",
@ -97,9 +97,6 @@ QMUtil = function () {
this.modelStr = [ //种树
{ 'key': 'tree', 'url': 'static/img/model/tree.gltf', 'colorModel': 'line', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 1, 'y': 1, 'z': 1 } },
{ 'key': 'tree2', 'url': 'static/img/model/tree2.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } },
{ 'key': 'huatan1', 'url': 'static/img/model/huatan1.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } },
{ 'key': 'huatan2', 'url': 'static/img/model/huatan2.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } },
{ 'key': 'penquan2', 'url': 'static/img/model/penquan2.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } },
{ 'key': 'qiche1', 'url': 'static/img/model/qiche1.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } },
{ 'key': 'qiche2', 'url': 'static/img/model/qiche2.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } },
{ 'key': 'qiche3', 'url': 'static/img/model/qiche3.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } },
@ -124,8 +121,7 @@ QMUtil = function () {
{ 'key': 'ren4', 'url': 'static/img/model/ren4.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } },
{ 'key': 'ren5', 'url': 'static/img/model/ren5.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } },
{ 'key': 'ren6', 'url': 'static/img/model/ren6.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } },
{ 'key': 'yizi1', 'url': 'static/img/model/yizi1.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } },
{ 'key': 'gjz1', 'url': 'static/img/model/gjz1.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } }
{ 'key': 'yizi1', 'url': 'static/img/model/yizi1.glb', 'colorModel': 'gama', 'rot': { 'x': 1.5708, 'y': 0, 'z': 0 }, 'size': { 'x': 20, 'y': 20, 'z': 20 } }
];
this.fbxModels = []; //精灵模型
/**
@ -677,7 +673,7 @@ QMUtil = function () {
this.getPointArr = function (s1, s3, s4, s2, sp = 0.01) {
let pArr = [];
let sz = [s1, s3, s4, s2];
let p = Map_QM.util.P_BEZ(0, sz);
let p;
for (let j = 0; j < 1; j += sp) {
p = Map_QM.util.P_BEZ(j, sz);
pArr.push(p);
@ -1132,9 +1128,7 @@ MainMap_QM = function (callBack, options) {
//this.renderer.outputEncoding = THREE.sRGBEncoding;
this.renderer.setSize(this.w, this.h);
this.renderer.setPixelRatio(window.devicePixelRatio);
this.renderer.shadowMap.enabled = true;
// 阴影类型
this.renderer.shadowMap.type = THREE.PCFSoftShadowMap;
ele.appendChild(this.renderer.domElement);
this.labelRenderer = new THREE.CSS2DRenderer();
@ -1152,16 +1146,6 @@ MainMap_QM = function (callBack, options) {
this.shawLight = new THREE.DirectionalLight(this.util.lightOptions.d_col, this.util.lightOptions.d_int);
this.shawLight.name = "light";
this.shawLight.position.set(280, 400, -300);
this.shawLight.castShadow = this.util.options.shadow; //阴影
this.shawLight.shadow.camera.top = 200;
this.shawLight.shadow.camera.bottom = -200;
this.shawLight.shadow.camera.right = 200;
this.shawLight.shadow.camera.left = -200;
this.shawLight.shadow.camera.far = 800;
this.shawLight.shadow.camera.near = 100;
this.shawLight.shadow.bias = -0.001;
this.shawLight.shadow.darkness = 0.3;
this.shawLight.shadow.mapSize.set(2048, 2048);
this.scene.add(this.shawLight);
this.mixers = [];
@ -1660,32 +1644,32 @@ MainMap_QM.prototype = {
let ftPathObj = JSON.parse(jcStr);
let dtPathObj = JSON.parse(jcStr);
try {
for (let j = 0; j < Map_QM.util.pathStateObj.facAllArr.length; j++) {
for (let k = 0; k < Map_QM.util.pathStateObj.facAllArr[j].length; k++) {
let facP = Map_QM.util.pathStateObj.facAllArr[j][k].buildOrder + "_" + Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder + "_" + Map_QM.util.pathStateObj.facAllArr[j][k].navCode;
for (let h = 0; h < Map_QM.util.pathStateObj.facAllArr[j].length; h++) {
if (h != k && Map_QM.util.pathStateObj.facAllArr[j][k].buildOrder == Map_QM.util.pathStateObj.facAllArr[j][h].buildOrder) {
let nP = Map_QM.util.pathStateObj.facAllArr[j][h].buildOrder + "_" + Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder + "_" + Map_QM.util.pathStateObj.facAllArr[j][h].navCode;
if (Map_QM.util.pathStateObj.facAllArr[j][h].facCode == "dt") {
ftPathObj[facP][nP] = 1000 + 3000 * Math.abs(parseInt(Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder));;
if (Map_QM.util.pathStateObj.facAllArr[j][k].no == Map_QM.util.pathStateObj.seldtFacNo) {
graphPathObj[facP][nP] = 300 + 200 * Math.abs(parseInt(Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder));
for (let j = 0; j < this.util.pathStateObj.facAllArr.length; j++) {
for (let k = 0; k < this.util.pathStateObj.facAllArr[j].length; k++) {
let facP = this.util.pathStateObj.facAllArr[j][k].buildOrder + "_" + this.util.pathStateObj.facAllArr[j][k].floorOrder + "_" + this.util.pathStateObj.facAllArr[j][k].navCode;
for (let h = 0; h < this.util.pathStateObj.facAllArr[j].length; h++) {
if (h != k && this.util.pathStateObj.facAllArr[j][k].buildOrder == this.util.pathStateObj.facAllArr[j][h].buildOrder) {
let nP = this.util.pathStateObj.facAllArr[j][h].buildOrder + "_" + this.util.pathStateObj.facAllArr[j][h].floorOrder + "_" + this.util.pathStateObj.facAllArr[j][h].navCode;
if (this.util.pathStateObj.facAllArr[j][h].facCode == "dt") {
ftPathObj[facP][nP] = 1000 + 3000 * Math.abs(parseInt(this.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(this.util.pathStateObj.facAllArr[j][k].floorOrder));;
if (this.util.pathStateObj.facAllArr[j][k].no == this.util.pathStateObj.seldtFacNo) {
graphPathObj[facP][nP] = 300 + 200 * Math.abs(parseInt(this.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(this.util.pathStateObj.facAllArr[j][k].floorOrder));
} else {
graphPathObj[facP][nP] = 800 + 200 * Math.abs(parseInt(Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder));
graphPathObj[facP][nP] = 800 + 200 * Math.abs(parseInt(this.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(this.util.pathStateObj.facAllArr[j][k].floorOrder));
}
dtPathObj[facP][nP] = 1000 + 200 * Math.abs(parseInt(Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder));
} else if (Map_QM.util.pathStateObj.facAllArr[j][h].facCode == "td") {
graphPathObj[facP][nP] = 800 + 300 * Math.abs(parseInt(Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder));
ftPathObj[facP][nP] = 800 + 300 * Math.abs(parseInt(Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder));
dtPathObj[facP][nP] = 800 + 300 * Math.abs(parseInt(Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder));
dtPathObj[facP][nP] = 1000 + 200 * Math.abs(parseInt(this.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(this.util.pathStateObj.facAllArr[j][k].floorOrder));
} else if (this.util.pathStateObj.facAllArr[j][h].facCode == "td") {
graphPathObj[facP][nP] = 800 + 300 * Math.abs(parseInt(this.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(this.util.pathStateObj.facAllArr[j][k].floorOrder));
ftPathObj[facP][nP] = 800 + 300 * Math.abs(parseInt(this.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(this.util.pathStateObj.facAllArr[j][k].floorOrder));
dtPathObj[facP][nP] = 800 + 300 * Math.abs(parseInt(this.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(this.util.pathStateObj.facAllArr[j][k].floorOrder));
} else {
dtPathObj[facP][nP] = 1000 + 3000 * Math.abs(parseInt(Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder));
if (Map_QM.util.pathStateObj.facAllArr[j][k].no == Map_QM.util.pathStateObj.selupftFacNo || Map_QM.util.pathStateObj.facAllArr[j][k].no == Map_QM.util.pathStateObj.seldownftFacNo) {
graphPathObj[facP][nP] = 300 + 200 * Math.abs(parseInt(Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder));
dtPathObj[facP][nP] = 1000 + 3000 * Math.abs(parseInt(this.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(this.util.pathStateObj.facAllArr[j][k].floorOrder));
if (this.util.pathStateObj.facAllArr[j][k].no == this.util.pathStateObj.selupftFacNo || this.util.pathStateObj.facAllArr[j][k].no == this.util.pathStateObj.seldownftFacNo) {
graphPathObj[facP][nP] = 300 + 200 * Math.abs(parseInt(this.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(this.util.pathStateObj.facAllArr[j][k].floorOrder));
} else {
graphPathObj[facP][nP] = 800 + 200 * Math.abs(parseInt(Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder));
graphPathObj[facP][nP] = 800 + 200 * Math.abs(parseInt(this.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(this.util.pathStateObj.facAllArr[j][k].floorOrder));
}
ftPathObj[facP][nP] = 1000 + 200 * Math.abs(parseInt(Map_QM.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(Map_QM.util.pathStateObj.facAllArr[j][k].floorOrder));
ftPathObj[facP][nP] = 1000 + 200 * Math.abs(parseInt(this.util.pathStateObj.facAllArr[j][h].floorOrder) - parseInt(this.util.pathStateObj.facAllArr[j][k].floorOrder));
}
}
}
@ -1695,9 +1679,9 @@ MainMap_QM.prototype = {
console.log("交通设施点位问题: " + e);
}
Map_QM.util.pathStateObj.graphPath = graphPathObj;
Map_QM.util.pathStateObj.ftPath = ftPathObj;
Map_QM.util.pathStateObj.dtPath = dtPathObj;
this.util.pathStateObj.graphPath = graphPathObj;
this.util.pathStateObj.ftPath = ftPathObj;
this.util.pathStateObj.dtPath = dtPathObj;
var fIndex = 0, bIndex = 0;
this.mapArr[bIndex] = [];
intTimer = setInterval(() => {
@ -1727,7 +1711,7 @@ MainMap_QM.prototype = {
Map_QM.mapArr[parseInt(Map_QM.util.deviceObj.build)][parseInt(Map_QM.util.deviceObj.floor)].setStartSite(Map_QM.util.deviceObj.xaxis, Map_QM.util.deviceObj.yaxis, parseInt(Map_QM.util.shopHeight));
} else {
if (parseInt(Map_QM.util.deviceObj.node) != -1) {
pathData.nodes.sort(Map_QM.util.sortNode);
pathData && pathData.nodes.sort(Map_QM.util.sortNode);
if (pathData && !Map_QM.util.deviceObj.xaxis && pathData.nodes.length > parseInt(Map_QM.util.deviceObj.node)) {
Map_QM.util.deviceObj.xaxis = pathData.nodes[parseInt(Map_QM.util.deviceObj.node)].x;
Map_QM.util.deviceObj.yaxis = pathData.nodes[parseInt(Map_QM.util.deviceObj.node)].y;
@ -2079,10 +2063,6 @@ MainMap_QM.prototype = {
Map_QM.mapArr[t][i].labelObj.traverse((obj) => {
obj.visible = false;
});
Map_QM.mapArr[t][i].iconLabel.traverse((obj) => {
obj.visible = false;
});
Map_QM.mapArr[t][i].tagObj.traverse((obj) => {
obj.visible = false;
});
@ -2103,9 +2083,6 @@ MainMap_QM.prototype = {
Map_QM.mapArr[build][i].labelObj.traverse((obj) => {
obj.visible = true;
});
Map_QM.mapArr[build][i].iconLabel.traverse((obj) => {
obj.visible = true;
});
Map_QM.mapArr[build][i].showTagObj.traverse((obj) => {
obj.visible = true;
});
@ -2753,6 +2730,10 @@ MainMap_QM.prototype = {
Map_QM.controls.update();
Map_QM.renderer.render(Map_QM.scene, Map_QM.camera);
Map_QM.labelRenderer.render(Map_QM.scene, Map_QM.camera);
if(Map_QM.mapArr[Map_QM.util.selectBuild] && Map_QM.mapArr[Map_QM.util.selectBuild][Map_QM.util.selectFloor]){
Map_QM.labelRenderer.renderObject( Map_QM.mapArr[Map_QM.util.selectBuild][Map_QM.util.selectFloor].labelObj, Map_QM.camera );
Map_QM.labelRenderer.renderObject( Map_QM.CSSObject, Map_QM.camera );
}
for (let item of Map_QM.mixers) {
item.update(T);
}
@ -3109,6 +3090,8 @@ MainMap_QM.prototype = {
Map_QM.controls.update();
Map_QM.renderer.render(Map_QM.scene, Map_QM.camera);
Map_QM.labelRenderer.render(Map_QM.scene, Map_QM.camera);
Map_QM.labelRenderer.renderObject( Map_QM.mapArr[Map_QM.util.selectBuild][Map_QM.util.selectFloor].labelObj, Map_QM.camera );
Map_QM.labelRenderer.zOrder( Map_QM.mapArr[Map_QM.util.selectBuild][Map_QM.util.selectFloor].labelObj );
if (Map_QM.callBackLoadOver) {
let floorData = [];
for (let i = 0; i < Map_QM.util.allMap.length; i++) {
@ -3293,6 +3276,7 @@ MainMap_QM.prototype = {
return;
}
clearTimeout(Map_QM.util.timeObj.collTime);
Map_QM.util.timeObj.collTime = setTimeout(() => {
clearTimeout(Map_QM.util.timeObj.collTime);
let checkList = [];
@ -3305,7 +3289,7 @@ MainMap_QM.prototype = {
});
}
}
if (Map_QM.mapArr[Map_QM.util.selectBuild]) {
if (Map_QM.mapArr[Map_QM.util.selectBuild] && Map_QM.buildObj.visible) {
for (let m = 0; m < Map_QM.mapArr[Map_QM.util.selectBuild].length; m++) {
if (Map_QM.mapArr[Map_QM.util.selectBuild][m].allObj.visible && (!Map_QM.buildObj.userData.hasOwnProperty("visible") || Map_QM.buildObj.userData.visible)) {
let childs = Map_QM.mapArr[Map_QM.util.selectBuild][m].labelObj.children;
@ -4658,8 +4642,6 @@ FloorMap_QM = function (bIndex, fIndex, floorName) {
this.allObj.rotation.x = Math.PI / -2;
this.labelObj = new THREE.Group();
this.labelObj.renderOrder = 100;
this.iconLabel = new THREE.Group();
this.iconLabel.renderOrder = 100;
this.floorOrder = fIndex;
this.buildOrder = bIndex
@ -4682,7 +4664,7 @@ FloorMap_QM = function (bIndex, fIndex, floorName) {
this.allObj.add(this.serObj);
this.allObj.add(this.devObj);
this.allObj.add(this.labelObj);
this.allObj.add(this.iconLabel);
this.allObj.add(this.tagObj);
//标签
this.showTagObj = new THREE.Group();
@ -4729,8 +4711,8 @@ FloorMap_QM.prototype = {
let mod = object.scene;
mod.traverse(function (child) {
if (child.isMesh) {
child.receiveShadow = Map_QM.util.options.shadow;
child.castShadow = Map_QM.util.options.shadow;
//child.receiveShadow = Map_QM.util.options.shadow;
//child.castShadow = Map_QM.util.options.shadow;
child.userData.opacity = child.material.opacity;
if (child.material.map) {
child.material.map.encoding = THREE.LinearEncoding; //贴图需要转换成 线性编码
@ -4842,7 +4824,7 @@ FloorMap_QM.prototype = {
borderColor = parseInt(mapData.buildArea[i].borderColor.replace("#", "0x"), 16);
Map_QM.util.buildHeight = Math.max(parseInt(mapData.buildArea[i].toHeight), Map_QM.util.buildHeight);
buildH = parseInt(mapData.buildArea[i].toHeight);
let mash = this.Model_QM.MyModelShape(build, hows, mapData.buildArea[i], entColor, borderColor, 30);
let mash = this.Model_QM.MyPlaneShape(build, hows, mapData.buildArea[i], entColor, borderColor, 30);
mash.receiveShadow = true;
mash.castShadow = false;
mash.userData = {
@ -4896,14 +4878,10 @@ FloorMap_QM.prototype = {
}
if (shopData[h].formatColor) {
entColor = parseInt(shopData[h].formatColor.replace("#", "0x"), 16);
} else {
entColor = "#eab16e";
}
}
if (shopData[h].borderColor) {
borderColor = parseInt(shopData[h].borderColor.replace("#", "0x"), 16);
} else {
borderColor = "#eab16e";
}
}
break;
}
}
@ -5161,7 +5139,12 @@ FloorMap_QM.prototype = {
hollShop.push(Map_QM.util.changeAreaToString(mapData.decos[i].hollArea[k]));
}
}
let mahc = this.Model_QM.MyModelShape(arr, hollShop, mapData.decos[i], entColor, borderColor, 240);
let mahc;
if(mapData.decos[i].toHeight<3){
mahc = this.Model_QM.MyPlaneShape(arr, hollShop, mapData.decos[i], entColor, borderColor, 240);
}else{
mahc = this.Model_QM.MyModelShape(arr, hollShop, mapData.decos[i], entColor, borderColor, 240);
}
mahc.xaxis = mapData.decos[i].xaxis >> 0;
mahc.yaxis = mapData.decos[i].yaxis >> 0;
mahc.node = mapData.decos[i].shopNav;
@ -5531,13 +5514,13 @@ MyModel_QM.prototype.MyModelShape = function (areaArr, howllowArr, opObj, entity
let scanGeometry, meshMaterial, options = {
depth: parseInt(opObj.toHeight),
bevelEnabled: false,
curveSegments: 24
curveSegments: 12
};
scanGeometry = new THREE.ExtrudeGeometry(shape, options);
let meshColor = new THREE.Color(entityColor);
for (let e = 0; e < Map_QM.util.meshMaterialArr.length; e++) {
let color2 = new THREE.Color(entityColor);
if (Map_QM.util.meshMaterialArr[e].color.equals(color2) && Map_QM.util.meshMaterialArr[e].opacity == alphaModle) {
if (Map_QM.util.meshMaterialArr[e].color.equals(meshColor) && Map_QM.util.meshMaterialArr[e].opacity == alphaModle) {
meshMaterial = Map_QM.util.meshMaterialArr[e];
}
}
@ -5549,7 +5532,6 @@ MyModel_QM.prototype.MyModelShape = function (areaArr, howllowArr, opObj, entity
side: THREE.DoubleSide,
depthTest: true
});
//meshMaterial.color.convertLinearToGamma(0.4);
Map_QM.util.meshMaterialArr.push(meshMaterial);
}
if (opObj.angleY || opObj.angleZ) {
@ -5574,6 +5556,88 @@ MyModel_QM.prototype.MyModelShape = function (areaArr, howllowArr, opObj, entity
return mesh;
}
//绘制平面
MyModel_QM.prototype.MyPlaneShape = function (areaArr, howllowArr, opObj, entityColor = "#dadada", lineColor = "#eeeeee", indexOrder = 1) {
let len = areaArr.length;
if (len == 0) {
return;
}
let alphaModle = opObj.alphaModle / 100 || 0;
// 实例化shape对象
let shape = new THREE.Shape();
// 设置开始点的位置
shape.moveTo(areaArr[0][0], -1 * areaArr[0][1]);
for (let i = 0; i < areaArr.length; i++) {
if (areaArr[i].length == 4) {
shape.lineTo(areaArr[i][2], -1 * areaArr[i][3]);
} else {
shape.bezierCurveTo(areaArr[i][2], -1 * areaArr[i][3], areaArr[i][4], -1 * areaArr[i][5], areaArr[i][6], -1 * areaArr[i][7]);
}
}
let material;
for (let k = 0; k < Map_QM.util.lineBasicMaterialArr.length; k++) {
let color2 = new THREE.Color(lineColor)
if (Map_QM.util.lineBasicMaterialArr[k].color.equals(color2)) {
material = Map_QM.util.lineBasicMaterialArr[k];
}
}
if (!material) {
material = new THREE.LineBasicMaterial({
color: lineColor
}); //材质对象lineColor
Map_QM.util.lineBasicMaterialArr.push(material);
}
if (howllowArr && howllowArr.length > 0) {
for (let n = 0; n < howllowArr.length; n++) {
let hole = new THREE.Path(); // 添加孔洞
hole.moveTo(howllowArr[n][0][0], -1 * howllowArr[n][0][1]);
for (let k = 0; k < howllowArr[n].length; k++) {
if (howllowArr[n][k].length == 4) {
hole.lineTo(howllowArr[n][k][2], -1 * howllowArr[n][k][3]);
} else {
hole.bezierCurveTo(howllowArr[n][k][2], -1 * howllowArr[n][k][3], howllowArr[n][k][4], -1 * howllowArr[n][k][5], howllowArr[n][k][6], -1 * howllowArr[n][k][7]);
}
}
shape.holes.push(hole);
}
}
let scanGeometry, meshMaterial;
scanGeometry = new THREE.ShapeGeometry(shape, 8);
for (let e = 0; e < Map_QM.util.meshMaterialArr.length; e++) {
let color2 = new THREE.Color(entityColor);
if (Map_QM.util.meshMaterialArr[e].color.equals(color2) && Map_QM.util.meshMaterialArr[e].opacity == alphaModle) {
meshMaterial = Map_QM.util.meshMaterialArr[e];
}
}
if (!meshMaterial) {
meshMaterial = new THREE.MeshPhongMaterial({
color: entityColor,
transparent: true,
opacity: alphaModle,
depthTest: true
});
Map_QM.util.meshMaterialArr.push(meshMaterial);
}
if (opObj.angleY || opObj.angleZ) {
Map_QM.util.rotateYZ(scanGeometry, opObj.angleY * Math.PI / 180, opObj.angleZ * Math.PI / 180);
}
// 创建模型
let mesh = new THREE.Mesh(scanGeometry, meshMaterial);
let cubeEdges = new THREE.EdgesGeometry(scanGeometry, 60);
let cubeLine = new THREE.LineSegments(cubeEdges, material);
cubeLine.renderOrder = indexOrder - 5;
mesh.add(cubeLine);
mesh.position.z = parseInt(opObj.toHeight)+parseInt(opObj.site);
mesh.castShadow = true;
mesh.renderOrder = indexOrder;
mesh.name = opObj.name || "";
return mesh;
}
MyModel_QM.prototype.MyModelText = function (svgArea) {
let text = svgArea.data;
@ -5607,19 +5671,12 @@ MyModel_QM.prototype.MyModelText = function (svgArea) {
for (let i = 0; i < paths.length; i++) {
const path = paths[i];
let shapes = path.toShapes(true);
for (let j = 0; j < shapes.length; j++) {
const shape = shapes[j];
const geometry = new THREE.ExtrudeBufferGeometry(shape, {
depth: svgArea.toHeight,
bevelEnabled: false,
curveSegments: 24
});
const mesh = new THREE.Mesh(geometry, meshMaterial);
mesh.renderOrder = 50;
mesh.name = svgArea.name || "";
mesh.position.set(-svgArea.width / 2, -svgArea.height / 2, 0);
group.add(mesh);
}
const geometry = new THREE.ShapeGeometry(shapes, 4);
const mesh = new THREE.Mesh(geometry, meshMaterial);
mesh.renderOrder = 50;
mesh.name = svgArea.name || "";
mesh.position.set(-svgArea.width / 2, -svgArea.height / 2, parseInt(svgArea.toHeight));
group.add(mesh);
}
return group;
}
@ -5686,6 +5743,7 @@ Facilities_QM.prototype.renderIcon = function (obj, _this, isShow = true, ele =
map: spriteMap,
depthTest: true,
transparent: true,
alphaTest: 0.8
});
spriteMaterial.name = obj.facCode;
Map_QM.util.spriteMaterialArr.push(spriteMaterial);
@ -5704,7 +5762,7 @@ Facilities_QM.prototype.renderIcon = function (obj, _this, isShow = true, ele =
sprite.renderOrder = 300;
sprite.visible = isShow;
_this.serObj.add(sprite);
if (Map_QM.util.options.iconName) {
if (obj.facCode == "dt") {
let shopDiv = document.createElement('div');
shopDiv.className = "map_label"
shopDiv.innerText = obj.title;
@ -5712,7 +5770,8 @@ Facilities_QM.prototype.renderIcon = function (obj, _this, isShow = true, ele =
shopDiv.dataset.nameEn = Map_QM.util.iconEn[obj.title];
let shopLabel = new THREE.CSS2DObject(shopDiv);
shopLabel.position.set(obj.x, -1 * obj.y, 30);
_this.iconLabel.add(shopLabel);
shopLabel.userData.mapShow = true;
_this.labelObj.add(shopLabel);
}
}
}
@ -5978,3 +6037,4 @@ FindPath_QM.prototype.playMoveGuide = function () {
}
}

96
public/static/qm/three.js

File diff suppressed because one or more lines are too long

17
src/assets/images/guide/bg_floor.svg

@ -0,0 +1,17 @@
<svg width="80" height="114" viewBox="0 0 80 114" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_b_683_15405)">
<path d="M63.9223 12.7845L0 0V114L63.9223 101.216C73.2708 99.3458 80 91.1375 80 81.6039V32.3961C80 22.8625 73.2708 14.6542 63.9223 12.7845Z" fill="url(#paint0_linear_683_15405)"/>
</g>
<defs>
<filter id="filter0_b_683_15405" x="-4" y="-4" width="88" height="122" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feGaussianBlur in="BackgroundImageFix" stdDeviation="2"/>
<feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_683_15405"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_backgroundBlur_683_15405" result="shape"/>
</filter>
<linearGradient id="paint0_linear_683_15405" x1="76.5" y1="61" x2="-2.034e-06" y2="63" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0.5"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1014 B

15
src/assets/images/guide/bg_shop.svg

@ -0,0 +1,15 @@
<svg width="524" height="1080" viewBox="0 0 524 1080" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_816_2469)">
<rect width="524" height="1080" rx="8" fill="#D9D3C6"/>
<path d="M524 350.033C375.844 309.233 112.457 367.033 0 401.033V1115H524V350.033Z" fill="url(#paint0_linear_816_2469)"/>
</g>
<defs>
<linearGradient id="paint0_linear_816_2469" x1="262" y1="336" x2="262" y2="1115" gradientUnits="userSpaceOnUse">
<stop stop-color="#F2F0EC"/>
<stop offset="1" stop-color="#E9DEC3"/>
</linearGradient>
<clipPath id="clip0_816_2469">
<rect width="524" height="1080" rx="8" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 640 B

5
src/assets/images/guide/direction.svg

@ -1,4 +1,3 @@
<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="44" height="44" rx="12" fill="white"/>
<path d="M29.3237 15.0959L25.7777 27.5059L22.7377 21.4259L17.1007 19.1709L29.3237 15.0959ZM31.3897 12.2999L12.5837 18.5679C12.4864 18.6002 12.4013 18.6616 12.3401 18.7438C12.2788 18.8261 12.2443 18.9251 12.2413 19.0276C12.2382 19.1301 12.2667 19.2311 12.323 19.3168C12.3792 19.4026 12.4605 19.4689 12.5557 19.5069L21.2887 22.9999L25.7137 31.8499C25.7587 31.94 25.8299 32.0145 25.918 32.0634C26.006 32.1124 26.1068 32.1336 26.2071 32.1243C26.3074 32.115 26.4026 32.0756 26.4802 32.0113C26.5577 31.947 26.614 31.8608 26.6417 31.7639L32.0287 12.9109C32.0537 12.8233 32.0542 12.7306 32.0303 12.6427C32.0064 12.5548 31.959 12.4752 31.8931 12.4123C31.8272 12.3494 31.7454 12.3057 31.6566 12.2859C31.5677 12.2661 31.4751 12.2709 31.3887 12.2999H31.3897Z" fill="#535D75"/>
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19.3235 5.09593L15.7775 17.5059L12.7375 11.4259L7.10047 9.17093L19.3235 5.09593ZM21.3895 2.29993L2.58347 8.56793C2.48614 8.60019 2.40108 8.6616 2.33982 8.74383C2.27856 8.82606 2.24406 8.92514 2.24101 9.02763C2.23795 9.13013 2.26648 9.23108 2.32273 9.31682C2.37898 9.40255 2.46024 9.46892 2.55547 9.50693L11.2885 12.9999L15.7135 21.8499C15.7585 21.94 15.8297 22.0145 15.9177 22.0634C16.0058 22.1124 16.1066 22.1336 16.2069 22.1243C16.3072 22.115 16.4024 22.0756 16.4799 22.0113C16.5575 21.947 16.6138 21.8608 16.6415 21.7639L22.0285 2.91093C22.0534 2.82334 22.054 2.7306 22.0301 2.64272C22.0062 2.55484 21.9587 2.47516 21.8929 2.41227C21.827 2.34939 21.7452 2.30568 21.6563 2.28589C21.5674 2.26609 21.4748 2.27094 21.3885 2.29993H21.3895Z" fill="#B7A475"/>
</svg>

Before

Width:  |  Height:  |  Size: 920 B

After

Width:  |  Height:  |  Size: 869 B

3
src/assets/images/guide/pos_icon.svg

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8 13.9334L11.3 10.6334C11.9526 9.98078 12.397 9.14926 12.577 8.24403C12.7571 7.33879 12.6646 6.40051 12.3114 5.54781C11.9582 4.69512 11.36 3.96632 10.5926 3.45356C9.82519 2.9408 8.92296 2.66711 8 2.66711C7.07704 2.66711 6.17481 2.9408 5.40739 3.45356C4.63997 3.96632 4.04183 4.69512 3.68861 5.54781C3.33539 6.40051 3.24294 7.33879 3.42297 8.24403C3.603 9.14926 4.04741 9.98078 4.7 10.6334L8 13.9334ZM8 15.8188L3.75734 11.5761C2.91823 10.737 2.34679 9.66789 2.11529 8.50401C1.88378 7.34013 2.0026 6.13373 2.45673 5.03738C2.91086 3.94103 3.6799 3.00396 4.66659 2.34467C5.65328 1.68539 6.81332 1.3335 8 1.3335C9.18669 1.3335 10.3467 1.68539 11.3334 2.34467C12.3201 3.00396 13.0891 3.94103 13.5433 5.03738C13.9974 6.13373 14.1162 7.34013 13.8847 8.50401C13.6532 9.66789 13.0818 10.737 12.2427 11.5761L8 15.8188ZM8 8.66678C8.35362 8.66678 8.69276 8.5263 8.94281 8.27625C9.19286 8.0262 9.33334 7.68707 9.33334 7.33344C9.33334 6.97982 9.19286 6.64068 8.94281 6.39064C8.69276 6.14059 8.35362 6.00011 8 6.00011C7.64638 6.00011 7.30724 6.14059 7.05719 6.39064C6.80715 6.64068 6.66667 6.97982 6.66667 7.33344C6.66667 7.68707 6.80715 8.0262 7.05719 8.27625C7.30724 8.5263 7.64638 8.66678 8 8.66678ZM8 10.0001C7.29276 10.0001 6.61448 9.71916 6.11438 9.21906C5.61429 8.71896 5.33334 8.04069 5.33334 7.33344C5.33334 6.6262 5.61429 5.94792 6.11438 5.44783C6.61448 4.94773 7.29276 4.66678 8 4.66678C8.70725 4.66678 9.38552 4.94773 9.88562 5.44783C10.3857 5.94792 10.6667 6.6262 10.6667 7.33344C10.6667 8.04069 10.3857 8.71896 9.88562 9.21906C9.38552 9.71916 8.70725 10.0001 8 10.0001Z" fill="#84754E"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

12
src/assets/images/guide/reset.svg

@ -1,4 +1,10 @@
<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="44" height="44" rx="12" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M22 10C22.5523 10 23 10.4477 23 11V12.0494C27.7244 12.5184 31.4816 16.2756 31.9506 21L33 21C33.5523 21 34 21.4477 34 22C34 22.5523 33.5523 23 33 23L31.9506 23C31.4816 27.7244 27.7244 31.4816 23 31.9506V33C23 33.5523 22.5523 34 22 34C21.4477 34 21 33.5523 21 33V31.9506C16.2756 31.4816 12.5184 27.7244 12.0494 23H11C10.4477 23 10 22.5523 10 22C10 21.4477 10.4477 21 11 21H12.0494C12.5184 16.2756 16.2756 12.5184 21 12.0494V11C21 10.4477 21.4477 10 22 10ZM22 14C17.5817 14 14 17.5817 14 22C14 26.4183 17.5817 30 22 30C26.4183 30 30 26.4183 30 22C30 17.5817 26.4183 14 22 14ZM22 19C20.3431 19 19 20.3431 19 22C19 23.6569 20.3431 25 22 25C23.6569 25 25 23.6569 25 22C25 20.3431 23.6569 19 22 19ZM17 22C17 19.2386 19.2386 17 22 17C24.7614 17 27 19.2386 27 22C27 24.7614 24.7614 27 22 27C19.2386 27 17 24.7614 17 22Z" fill="#535D75"/>
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_691_21502)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 0C12.5523 0 13 0.447715 13 1V2.04938C17.7244 2.51844 21.4816 6.27558 21.9506 11L23 11C23.5523 11 24 11.4477 24 12C24 12.5523 23.5523 13 23 13L21.9506 13C21.4816 17.7244 17.7244 21.4816 13 21.9506V23C13 23.5523 12.5523 24 12 24C11.4477 24 11 23.5523 11 23V21.9506C6.27558 21.4816 2.51844 17.7244 2.04938 13H1C0.447715 13 0 12.5523 0 12C0 11.4477 0.447715 11 1 11H2.04938C2.51844 6.27558 6.27558 2.51844 11 2.04938V1C11 0.447715 11.4477 0 12 0ZM12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4ZM12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9ZM7 12C7 9.23858 9.23858 7 12 7C14.7614 7 17 9.23858 17 12C17 14.7614 14.7614 17 12 17C9.23858 17 7 14.7614 7 12Z" fill="#B7A475"/>
</g>
<defs>
<clipPath id="clip0_691_21502">
<rect width="24" height="24" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

22
src/assets/images/guide/search.svg

@ -0,0 +1,22 @@
<svg width="257" height="72" viewBox="0 0 257 72" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_b_683_15477)">
<rect width="257" height="72" rx="36" fill="url(#paint0_linear_683_15477)"/>
<path d="M44.6667 22.6665C51.2907 22.6665 56.6667 28.0425 56.6667 34.6665C56.6667 41.2905 51.2907 46.6665 44.6667 46.6665C38.0427 46.6665 32.6667 41.2905 32.6667 34.6665C32.6667 28.0425 38.0427 22.6665 44.6667 22.6665ZM44.6667 43.9998C49.8227 43.9998 54.0001 39.8225 54.0001 34.6665C54.0001 29.5092 49.8227 25.3332 44.6667 25.3332C39.5094 25.3332 35.3334 29.5092 35.3334 34.6665C35.3334 39.8225 39.5094 43.9998 44.6667 43.9998ZM55.9801 44.0945L59.7521 47.8652L57.8654 49.7518L54.0947 45.9798L55.9801 44.0945Z" fill="#A6976F"/>
<rect x="78" y="24" width="2" height="24" fill="#C7C2B7"/>
<path d="M110.832 35.456C108.859 35.04 107.269 34.528 106.064 33.92C104.805 34.464 103.141 34.9867 101.072 35.488L100.528 33.68C102.075 33.4133 103.333 33.1253 104.304 32.816C103.557 32.24 102.896 31.536 102.32 30.704H101.6V29.152H105.2V28.256H101.616V21.936C101.979 21.8613 102.411 21.744 102.912 21.584C103.413 21.4133 103.909 21.2373 104.4 21.056L105.04 22.56C104.368 22.8373 103.787 23.0453 103.296 23.184V24.192H104.672V25.6H103.296V26.704H105.2V20.64H106.944V26.704H108.912V25.6H107.424V24.176H108.912V23.184H107.408V21.648H110.592V28.256H106.944V29.152H110.24V30.688C109.483 31.6267 108.709 32.3627 107.92 32.896C108.72 33.1413 109.867 33.376 111.36 33.6L110.832 35.456ZM101.168 28.304C100.955 28.4107 100.539 28.6027 99.92 28.88V33.504C99.92 34.0053 99.8613 34.3787 99.744 34.624C99.6373 34.8693 99.4347 35.04 99.136 35.136C98.848 35.232 98.4053 35.28 97.808 35.28C97.4987 35.28 97.2 35.264 96.912 35.232L96.544 33.392C96.8853 33.4453 97.1947 33.472 97.472 33.472C97.7493 33.472 97.9307 33.4293 98.016 33.344C98.112 33.2587 98.16 33.088 98.16 32.832V29.664L96.704 30.272L96.48 28.32C97.024 28.1067 97.584 27.8773 98.16 27.632V25.12H96.768V23.264H98.16V20.672H99.92V23.264H101.2V25.12H99.92V26.848C100.069 26.784 100.416 26.624 100.96 26.368L101.168 28.304ZM104.384 30.704C104.885 31.28 105.44 31.7493 106.048 32.112C106.741 31.7493 107.408 31.28 108.048 30.704H104.384ZM121.152 31.248V33.216C121.152 33.9627 121.008 34.4907 120.72 34.8C120.432 35.12 119.957 35.2853 119.296 35.296C118.699 35.296 118.187 35.2693 117.76 35.216L117.408 33.472C117.888 33.5467 118.315 33.5893 118.688 33.6C118.901 33.6 119.051 33.5253 119.136 33.376C119.221 33.2267 119.264 33.008 119.264 32.72V31.36L116.912 31.472L117.744 32.736C117.093 33.1733 116.373 33.6107 115.584 34.048C114.805 34.4853 114.043 34.8693 113.296 35.2L112.608 33.52C114.325 32.816 115.648 32.1387 116.576 31.488L115.168 31.568C114.859 31.5787 114.421 31.6053 113.856 31.648L113.568 30.016C114.229 30.016 114.832 29.9627 115.376 29.856C116.123 29.6533 117.152 29.2427 118.464 28.624L115.824 28.816L114.816 28.896L114.592 27.616C114.859 27.5733 115.093 27.5307 115.296 27.488C115.509 27.4453 115.669 27.3973 115.776 27.344C116.352 27.0453 117.157 26.5173 118.192 25.76H115.072V27.264H113.104V24.144H119.04V23.264H113.616V21.648H119.04V20.576H120.928V21.648H126.384V23.264H120.928V24.144H126.896V27.296H124.928V25.76H120.736C119.787 26.464 118.981 27.0133 118.32 27.408C119.376 27.3547 120.304 27.2907 121.104 27.216C121.851 26.768 122.432 26.3947 122.848 26.096L124.112 27.168C123.216 27.7333 122.283 28.2613 121.312 28.752C120.352 29.2427 119.504 29.632 118.768 29.92L123.184 29.664L122.4 28.976L123.696 28.064L124.064 28.384C125.461 29.6213 126.373 30.4693 126.8 30.928L125.712 32.048L125.44 31.776C125.227 31.552 124.987 31.312 124.72 31.056L121.152 31.248ZM122.8 31.376C123.344 31.6213 124.091 31.984 125.04 32.464C126 32.9333 126.752 33.312 127.296 33.6L126.48 35.152C125.957 34.864 125.216 34.48 124.256 34C123.307 33.5093 122.549 33.136 121.984 32.88L122.8 31.376Z" fill="#736661"/>
<path d="M103.036 47.456C103.036 48.056 102.88 48.56 102.568 48.968C102.264 49.368 101.864 49.664 101.368 49.856C100.88 50.048 100.356 50.144 99.7956 50.144C98.9796 50.144 98.2436 49.956 97.5876 49.58C96.9316 49.196 96.4956 48.656 96.2796 47.96L97.6956 47.156C97.8876 47.604 98.1676 47.952 98.5356 48.2C98.9036 48.448 99.3436 48.572 99.8556 48.572C100.272 48.572 100.6 48.488 100.84 48.32C101.088 48.152 101.212 47.908 101.212 47.588C101.212 47.332 101.128 47.12 100.96 46.952C100.8 46.784 100.596 46.652 100.348 46.556C100.108 46.46 99.7756 46.348 99.3516 46.22C98.7836 46.052 98.3196 45.888 97.9596 45.728C97.5996 45.56 97.2916 45.312 97.0356 44.984C96.7796 44.656 96.6516 44.224 96.6516 43.688C96.6516 43.12 96.7996 42.64 97.0956 42.248C97.3996 41.848 97.7956 41.552 98.2836 41.36C98.7796 41.16 99.3116 41.06 99.8796 41.06C100.656 41.06 101.32 41.236 101.872 41.588C102.424 41.94 102.78 42.416 102.94 43.016L101.524 43.82C101.38 43.444 101.164 43.152 100.876 42.944C100.588 42.728 100.228 42.62 99.7956 42.62C99.4036 42.62 99.0836 42.712 98.8356 42.896C98.5956 43.072 98.4756 43.308 98.4756 43.604C98.4756 43.828 98.5516 44.016 98.7036 44.168C98.8556 44.312 99.0476 44.432 99.2796 44.528C99.5196 44.616 99.8396 44.72 100.24 44.84C100.816 45.008 101.292 45.18 101.668 45.356C102.044 45.524 102.364 45.78 102.628 46.124C102.9 46.46 103.036 46.904 103.036 47.456ZM109.513 46.292H105.949V48.476H110.065V50H104.209V41.216H109.933V42.728H105.949V44.792H109.513V46.292ZM115.626 41.216L119.178 50H117.33L116.562 47.996H113.142L112.398 50H110.658L114.102 41.216H115.626ZM115.998 46.508L114.822 43.424L113.682 46.508H115.998ZM127.478 50L125.402 49.988L123.266 46.832H123.194H121.922V50H120.182V41.216H123.218C123.906 41.216 124.51 41.332 125.03 41.564C125.55 41.796 125.95 42.128 126.23 42.56C126.51 42.984 126.65 43.472 126.65 44.024C126.65 44.584 126.506 45.076 126.218 45.5C125.93 45.924 125.526 46.248 125.006 46.472L127.478 50ZM121.922 42.692V45.356H123.014C123.526 45.356 123.95 45.248 124.286 45.032C124.63 44.808 124.802 44.472 124.802 44.024C124.802 43.568 124.634 43.232 124.298 43.016C123.962 42.8 123.534 42.692 123.014 42.692H121.922ZM132.024 48.548C132.448 48.548 132.812 48.436 133.116 48.212C133.428 47.988 133.676 47.676 133.86 47.276L135.312 48.116C135.096 48.708 134.7 49.196 134.124 49.58C133.548 49.956 132.86 50.144 132.06 50.144C131.284 50.144 130.576 49.956 129.936 49.58C129.296 49.204 128.788 48.672 128.412 47.984C128.036 47.288 127.848 46.492 127.848 45.596C127.848 44.7 128.032 43.908 128.4 43.22C128.776 42.532 129.284 42 129.924 41.624C130.572 41.248 131.284 41.06 132.06 41.06C132.86 41.06 133.548 41.252 134.124 41.636C134.7 42.012 135.096 42.496 135.312 43.088L133.86 43.928C133.676 43.528 133.428 43.216 133.116 42.992C132.812 42.768 132.448 42.656 132.024 42.656C131.576 42.656 131.176 42.776 130.824 43.016C130.472 43.256 130.192 43.6 129.984 44.048C129.784 44.488 129.684 45.004 129.684 45.596C129.684 46.188 129.784 46.708 129.984 47.156C130.192 47.604 130.472 47.948 130.824 48.188C131.176 48.428 131.576 48.548 132.024 48.548ZM138.176 44.672H142.136V41.216H143.888V50H142.136V46.22H138.176V50H136.436V41.216H138.176V44.672Z" fill="#C7C2B7"/>
<rect x="0.5" y="0.5" width="256" height="71" rx="35.5" stroke="white"/>
</g>
<defs>
<filter id="filter0_b_683_15477" x="-16" y="-16" width="289" height="104" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feGaussianBlur in="BackgroundImageFix" stdDeviation="8"/>
<feComposite in2="SourceAlpha" operator="in" result="effect1_backgroundBlur_683_15477"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_backgroundBlur_683_15477" result="shape"/>
</filter>
<linearGradient id="paint0_linear_683_15477" x1="9.5" y1="49" x2="260.5" y2="41.5" gradientUnits="userSpaceOnUse">
<stop stop-color="#EFEDE7"/>
<stop offset="1" stop-color="#F5F2E8"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.6 KiB

47
src/assets/images/header/logo.svg

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
src/assets/images/index/activity.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 49 KiB

BIN
src/assets/images/index/brand.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 62 KiB

BIN
src/assets/images/index/guide.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

15
src/assets/images/index/home_tip.svg

@ -0,0 +1,15 @@
<svg width="480" height="480" viewBox="0 0 480 480" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="480" height="480" rx="240" fill="url(#paint0_linear_685_20762)"/>
<path d="M203.338 388.899V385.242H190.118V388.899H203.338ZM206.822 382.074V392.067H186.864V382.074H194.928V373.606H198.413V376.141H208.723V379.338H198.413V382.074H206.822ZM186.461 400.39L183.293 398.864C184.704 397.597 186.086 395.322 186.893 393.248L190.205 394.054C189.37 396.358 187.987 398.864 186.461 400.39ZM191.616 394.256L194.87 393.939C195.302 395.898 195.619 398.374 195.677 399.872L192.192 400.304C192.192 398.806 191.962 396.243 191.616 394.256ZM197.491 394.285L200.63 393.594C201.523 395.408 202.474 397.798 202.819 399.296L199.507 400.16C199.19 398.662 198.326 396.186 197.491 394.285ZM203.338 394.112L206.419 393.018C207.802 394.832 209.472 397.338 210.192 399.037L206.88 400.304C206.275 398.662 204.72 396.042 203.338 394.112ZM227.587 387.747V395.869H232.598V389.389H236.17V400.534H232.598V399.181H215.088V389.446H218.774V395.869H223.93V387.747H212.726V384.32H223.93V380.979H214.771V377.581H223.93V373.606H227.587V377.581H236.63V380.979H227.587V384.32H238.531V387.747H227.587ZM256.819 381.843V383.715C256.819 384.406 256.79 385.069 256.762 385.818H260.074V381.843H256.819ZM260.074 389.101H256.301C255.754 391.693 254.659 394.256 252.499 396.013C252.038 395.322 250.685 394.054 249.965 393.594C251.491 392.326 252.326 390.771 252.816 389.101H249.562V385.818H253.363C253.421 385.069 253.421 384.378 253.421 383.658V381.843H249.821V378.531H253.421V374.355H256.819V378.531H260.074V374.413H263.501V378.531H266.784V381.843H263.501V385.818H267.36V389.101H263.501V395.581H260.074V389.101ZM248.813 378.762L246.192 380.922C245.328 379.597 243.341 377.494 241.814 376.054L244.234 374.154C245.789 375.507 247.862 377.466 248.813 378.762ZM248.006 384.003V394.515C248.467 394.803 248.986 395.149 249.619 395.494C251.578 396.589 254.227 396.762 257.424 396.762C260.477 396.762 265.114 396.531 267.994 396.099C267.648 397.021 267.072 398.691 267.043 399.67C264.97 399.786 260.246 399.958 257.309 399.958C253.651 399.958 251.232 399.642 249.13 398.461C247.805 397.77 246.826 396.877 246.192 396.877C245.328 396.877 244.061 398.749 243.024 400.477L240.72 397.222C242.045 395.811 243.398 394.746 244.637 394.198V387.2H241.296V384.003H248.006ZM276.662 376.746L278.765 373.779C287.923 380.49 287.635 390.483 296.88 396.33C296.333 397.28 295.411 399.21 295.238 400.275C289.334 396.963 286.858 391.059 283.92 385.674C281.674 392.269 278.102 397.136 272.918 400.189C272.285 399.469 270.701 398.058 269.779 397.395C275.914 394.371 279.456 388.813 281.126 381.152C279.917 379.453 278.448 377.955 276.662 376.746Z" fill="white"/>
<path d="M123.581 341.865H118.224V358.8H114.221V341.865H108.864V338.294H123.581V341.865ZM140.739 348.547C140.739 352.089 140.767 354.653 138.694 356.726C137.254 358.166 135.497 358.973 133.164 358.973C130.831 358.973 129.046 358.166 127.606 356.726C125.532 354.653 125.59 352.089 125.59 348.547C125.59 345.005 125.532 342.441 127.606 340.368C129.046 338.928 130.831 338.121 133.164 338.121C135.497 338.121 137.254 338.928 138.694 340.368C140.767 342.441 140.739 345.005 140.739 348.547ZM136.735 348.547C136.735 344.601 136.505 343.651 135.727 342.787C135.151 342.125 134.259 341.693 133.164 341.693C132.07 341.693 131.148 342.125 130.572 342.787C129.795 343.651 129.593 344.601 129.593 348.547C129.593 352.493 129.795 353.443 130.572 354.307C131.148 354.969 132.07 355.401 133.164 355.401C134.259 355.401 135.151 354.969 135.727 354.307C136.505 353.443 136.735 352.493 136.735 348.547ZM159.59 351.773C159.59 356.121 156.249 358.973 152.044 358.973C147.839 358.973 144.499 356.121 144.499 351.773V338.294H148.502V351.629C148.502 353.99 149.884 355.401 152.044 355.401C154.204 355.401 155.615 353.99 155.615 351.629V338.294H159.59V351.773ZM178.453 352.493C177.762 356.669 174.824 358.973 170.907 358.973C168.719 358.973 166.875 358.224 165.378 356.726C164.485 355.833 163.938 354.797 163.707 353.645C163.477 352.493 163.362 350.793 163.362 348.547C163.362 346.301 163.477 344.601 163.707 343.449C163.938 342.269 164.485 341.261 165.378 340.368C166.875 338.87 168.719 338.121 170.907 338.121C174.853 338.121 177.762 340.425 178.453 344.601H174.392C173.96 342.845 172.866 341.693 170.936 341.693C169.842 341.693 168.978 342.038 168.373 342.758C167.538 343.651 167.365 344.573 167.365 348.547C167.365 352.521 167.538 353.443 168.373 354.336C168.978 355.056 169.842 355.401 170.936 355.401C172.866 355.401 173.96 354.249 174.392 352.493H178.453ZM196.859 358.8H192.856V350.217H185.915V358.8H181.912V338.294H185.915V346.675H192.856V338.294H196.859V358.8ZM226.898 358.8H222.894V346.848L218.978 354.624H216.27L212.325 346.848V358.8H208.322V338.294H212.267L217.624 349.382L222.952 338.294H226.898V358.8ZM245.173 358.8H231.665V338.294H245.173V341.865H235.669V346.675H243.761V350.246H235.669V355.229H245.173V358.8ZM268.987 341.865H263.63V358.8H259.627V341.865H254.27V338.294H268.987V341.865ZM286.145 348.547C286.145 352.089 286.174 354.653 284.1 356.726C282.66 358.166 280.903 358.973 278.57 358.973C276.238 358.973 274.452 358.166 273.012 356.726C270.938 354.653 270.996 352.089 270.996 348.547C270.996 345.005 270.938 342.441 273.012 340.368C274.452 338.928 276.238 338.121 278.57 338.121C280.903 338.121 282.66 338.928 284.1 340.368C286.174 342.441 286.145 345.005 286.145 348.547ZM282.142 348.547C282.142 344.601 281.911 343.651 281.134 342.787C280.558 342.125 279.665 341.693 278.57 341.693C277.476 341.693 276.554 342.125 275.978 342.787C275.201 343.651 274.999 344.601 274.999 348.547C274.999 352.493 275.201 353.443 275.978 354.307C276.554 354.969 277.476 355.401 278.57 355.401C279.665 355.401 280.558 354.969 281.134 354.307C281.911 353.443 282.142 352.493 282.142 348.547ZM310.163 352.752C310.163 356.726 306.851 358.973 302.56 358.973C299.45 358.973 297.088 358.31 295.072 356.265L297.664 353.673C298.96 354.969 300.717 355.401 302.618 355.401C304.979 355.401 306.247 354.509 306.247 352.867C306.247 352.147 306.045 351.542 305.613 351.139C305.21 350.765 304.749 350.563 303.799 350.419L301.322 350.073C299.565 349.814 298.269 349.267 297.347 348.374C296.368 347.395 295.879 346.07 295.879 344.342C295.879 340.685 298.586 338.121 303.021 338.121C305.843 338.121 307.888 338.813 309.645 340.512L307.111 343.017C305.815 341.779 304.259 341.606 302.906 341.606C300.775 341.606 299.738 342.787 299.738 344.198C299.738 344.717 299.911 345.264 300.343 345.667C300.746 346.041 301.408 346.358 302.243 346.473L304.663 346.819C306.535 347.078 307.715 347.597 308.579 348.403C309.674 349.44 310.163 350.937 310.163 352.752ZM327.121 341.865H321.765V358.8H317.761V341.865H312.405V338.294H327.121V341.865ZM344.509 358.8H340.333L339.123 355.171H331.837L330.598 358.8H326.422L333.881 338.294H337.021L344.509 358.8ZM338.057 351.801L335.552 344.342L332.96 351.801H338.057ZM362.557 358.8H357.921L353.917 350.621H351.037V358.8H347.034V338.294H355.069C359.245 338.294 361.722 341.145 361.722 344.573C361.722 347.453 359.965 349.238 357.978 349.958L362.557 358.8ZM357.719 344.573C357.719 342.989 356.567 341.865 354.81 341.865H351.037V347.28H354.81C356.567 347.28 357.719 346.157 357.719 344.573Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M248.821 181.507L238.229 149.005C238.229 149.005 233.69 139.471 222.979 142.555C212.268 145.64 212.391 157.199 212.391 157.199L227.419 211.218C207.206 214.896 213.768 236.815 220.668 259.862C220.929 260.734 221.19 261.608 221.451 262.482C226.427 279.183 259.588 290.83 259.588 290.83L256.935 283.657L256.603 283.517C253.545 282.219 249.442 280.33 245.216 277.959C240.966 275.575 236.744 272.788 233.358 269.73C229.915 266.619 227.744 263.594 226.917 260.818C226.696 260.078 226.477 259.342 226.259 258.612L226.247 258.572C222.673 246.613 219.539 236.126 219.577 228.18C219.596 224.123 220.467 221.606 221.787 220.032C222.897 218.707 224.922 217.344 228.948 216.715L236.674 244.488L240.839 238.144L218.133 156.522C218.146 156.388 218.164 156.235 218.187 156.066C218.297 155.264 218.522 154.195 218.962 153.094C219.806 150.982 221.316 148.935 224.514 148.014C227.791 147.071 229.722 148.015 231.007 149.053C231.734 149.64 232.293 150.311 232.669 150.848C232.796 151.028 232.895 151.184 232.967 151.303L253.085 213.032L258.508 211.23L251.383 189.368C251.568 189.384 251.567 189.386 251.567 189.386L251.567 189.391L251.566 189.4L251.565 189.415L251.563 189.434C251.562 189.442 251.562 189.441 251.563 189.43C251.566 189.408 251.574 189.351 251.588 189.264C251.617 189.087 251.671 188.797 251.764 188.43C251.955 187.677 252.281 186.71 252.806 185.77C253.77 184.047 255.305 182.458 258.517 182.216C261.773 181.971 263.78 183.369 265.215 185.095C265.968 186.001 266.511 186.956 266.865 187.699C267.039 188.063 267.156 188.355 267.224 188.534C267.258 188.624 267.279 188.683 267.287 188.708L267.343 188.892L273.463 204.274L281.369 208.683L273.933 189.991C273.943 189.947 273.955 189.901 273.967 189.854C274.158 189.1 274.484 188.134 275.009 187.194C275.973 185.471 277.508 183.882 280.72 183.64C283.976 183.395 285.982 184.792 287.418 186.519C288.171 187.424 288.714 188.38 289.068 189.123C289.241 189.487 289.359 189.779 289.427 189.958C289.444 190.003 289.458 190.041 289.468 190.07L289.49 190.132L289.546 190.316L295.665 205.697L303.572 210.107L296.163 191.483C297.057 191.1 298.142 190.701 299.327 190.399C302.593 189.565 305.661 189.671 308.051 191.459C308.973 192.149 311.047 194.811 313.305 200.102C315.439 205.1 317.427 211.709 318.654 219.327C320.826 232.813 320.555 249.054 314.902 264.843L317.557 273.388C334.858 235.484 320.211 193.421 311.5 186.902C305.538 182.44 298.112 184.495 294.02 186.236C292.386 183.01 288.356 177.369 280.342 177.973C275.585 178.331 272.658 180.63 270.865 183.149C268.82 179.97 264.896 176.04 258.14 176.549C253.52 176.897 250.626 179.075 248.821 181.507Z" fill="white" fill-opacity="0.8"/>
<path d="M208.676 186.139C202.494 181.748 197.727 175.216 195.596 167.261C190.796 149.348 201.176 131.002 218.78 126.285C236.384 121.568 254.547 132.266 259.347 150.179C260.392 154.081 260.718 158.004 260.405 161.802" stroke="white" stroke-width="6" stroke-linecap="round"/>
<path d="M194.975 205.961C184.278 198.309 176.022 186.94 172.315 173.106C163.967 141.951 181.85 110.091 212.258 101.943C242.665 93.7954 274.083 112.446 282.431 143.6C284.249 150.387 284.823 157.206 284.294 163.807" stroke="white" stroke-opacity="0.5" stroke-width="10.8" stroke-linecap="round"/>
<rect x="4.8" y="4.8" width="470.4" height="470.4" rx="235.2" stroke="white" stroke-opacity="0.8" stroke-width="9.6"/>
<defs>
<linearGradient id="paint0_linear_685_20762" x1="240" y1="5.43594e-06" x2="422.4" y2="480" gradientUnits="userSpaceOnUse">
<stop stop-color="#C4B280"/>
<stop offset="1" stop-color="#A89866"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

BIN
src/assets/images/index/icon_brand.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 B

BIN
src/assets/images/index/park.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 105 KiB

BIN
src/assets/images/index/school.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 110 KiB

BIN
src/assets/images/menu/brand.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 548 B

BIN
src/assets/images/menu/brands.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 539 B

BIN
src/assets/images/menu/guide.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/assets/images/menu/guides.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

5
src/components/CarInfo/CarInfo.vue

@ -12,7 +12,7 @@
<span class="tip">车位号</span>
<span class="text">{{ carInfo.spaceNo }}</span>
</div>
<div class="car-group">
<div v-if="carInfo.parkingTime" class="car-group">
<span class="tip">停车时长</span>
<span class="text">{{ carInfo.parkingTime }}</span>
</div>
@ -58,7 +58,7 @@ function close() {
function go() {
const info = window.Map_QM.pathPark({ shopNum: props.carInfo.spaceNo })
if (info?.node?.length) {
if (info?.node) {
const floor: any = store.buildingList[0].floorList.find(item => item.floorOrder === info.floor)?.floor
const shop = {
shopCode: '',
@ -117,6 +117,7 @@ function go() {
}
.car {
display: flex;
justify-content: center;
align-items: center;
padding: 48px 56px;
margin-top: -3px;

174
src/components/GuideFloors/GuideFloors.vue

@ -0,0 +1,174 @@
<template>
<div class="floors-wrapper">
<img ref="bg" src="../../assets/images/guide/bg_floor.svg" alt="" class="floors-active" />
<ul class="floor-nav-items">
<li
v-for="(item, index) of reverseFloors"
:id="`floor${index}`"
:key="item.floorCode"
ref="li"
:class="{ active: item.floorOrder === currentOrder }"
class="floor-nav-item"
@click="clickItem(item, index)"
>
<!-- <img v-if="item.name === currentFloor.floorName" class="bg-wrapper" :src="getFloorBg(item)" /> -->
<p class="floor">{{ item.floor }}</p>
<img
v-if="item.floor === device.floor"
class="loc"
src="@/assets/images/guide/pos_icon.svg"
:style="{ opacity: item.floor === currentOrder ? 1 : 1 }"
alt=""
/>
<!-- <p class="loc" v-if="item.name === device.floorName" v-text="$t('guide.loc')"></p> -->
</li>
</ul>
</div>
</template>
<script setup lang="ts">
import { useRootStore } from '@/store/root'
import { storeToRefs } from 'pinia'
import { toRaw, ref, computed, nextTick, onMounted } from 'vue'
const currentOrder = ref()
const store = useRootStore()
const { currentBuildingFloorsList, device } = storeToRefs(store)
const emit = defineEmits(['click'])
const reverseFloors = computed(() => {
const arr: Floor[] = JSON.parse(JSON.stringify(toRaw(currentBuildingFloorsList.value)))
return arr //.reverse()
})
const bg = ref()
const li = ref<[]>([])
currentOrder.value = device.value.floorOrder
function clickItem(item: Floor, index: number) {
if (item) {
currentOrder.value = item.floorOrder
emit('click', item)
}
if (index !== null) {
nextTick(() => {
const selFloor: any = li.value[index] ?? null
if (selFloor) {
bg.value.style.top = parseInt(selFloor.offsetTop, 10) - 20 + 'px'
}
})
}
}
function goCurrentFloor() {
let index = 0
const obj: Floor | undefined = reverseFloors.value.find((item: Floor, idx) => {
if (item.floorOrder === device.value.floorOrder) {
index = idx
return true
}
})
if (obj) {
clickItem(obj, index)
}
}
function goSelectFloor(val: Floor) {
let index = 0
const obj: Floor | undefined = reverseFloors.value.find((item: Floor, idx) => {
if (item.floorOrder === val.floorOrder) {
index = idx
return true
}
})
if (obj) {
clickItem(obj, index)
}
}
onMounted(() => {
goCurrentFloor()
})
defineExpose({
goCurrentFloor,
goSelectFloor
})
</script>
<style lang="scss" scoped>
.floors-wrapper {
position: absolute;
top: 266px;
left: 0;
z-index: 2;
width: 80px;
padding: 0;
.floors-active {
position: absolute;
z-index: -1;
}
.floor-nav-items {
display: flex;
justify-content: space-between;
width: 31px;
height: fit-content;
margin-left: 28px;
flex-direction: column;
// align-items: center;
.floor-nav-item {
position: relative;
width: 100%;
height: 72px;
line-height: 72px;
margin-right: 0;
margin-bottom: 0;
font-size: 16px;
font-family: 'font_bold';
text-align: center;
color: #84754e;
background: #fff0;
border-radius: 0;
font-style: normal;
font-weight: 700;
.loc {
position: absolute;
top: 27px;
left: -21px;
font-size: 10px;
// margin: 0 auto;
// filter: grayscale(1);
// color: rgba(0, 0, 0, 0.4);
}
.bg-wrapper {
position: absolute;
top: 5px;
left: -53px;
// z-index: -1;
// width: 100%;
// height: 100%;
}
&.active {
font-size: 24px;
color: #b7a475;
// .floor {
// // color: #fff;
// // top: px;
// }
.loc {
// color: #fff;
// filter: brightness(2.5);
}
&::after {
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 24px;
content: '';
// background: #e9487300;
// border-radius: 4px 0px 0px 4px;
// transform: matrix(-1, 0, 0, 1, 0, 0);
}
}
}
}
}
</style>

102
src/components/HomeDialog/HomeDialog.vue

@ -0,0 +1,102 @@
<template>
<transition appear enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__fadeOut">
<masker v-if="showThis" @click="close">
<transition appear enter-active-class="animate__animated animate__fadeInUp" leave-active-class="animate__animated animate__zoomOut">
<div class="dialog-wrapper" @click="close">
<img ref="tip" src="@/assets/images/index/home_tip.svg" alt="" @load="loadHandler" />
</div>
</transition>
</masker>
</transition>
</template>
<script setup lang="ts">
import masker from '@/base/Masker/Masker.vue'
import { ref, onMounted, onBeforeUnmount } from 'vue'
const tip = ref()
const showThis = ref(false)
function show() {
showThis.value = true
}
function close() {
showThis.value = false
clearInterval(Number(timeId))
}
function getNum(min: number, max = 0) {
min > max ? ([min, max] = [max, min]) : ''
return parseInt((Math.random() * (max - min + 1)).toString(), 10) + min
}
let timeId: NodeJS.Timeout
//
function move() {
clearInterval(Number(timeId)) //
let winWidth = window.innerWidth //
let winHeight = window.innerHeight
winWidth -= parseInt(tip.value.width) //
winHeight -= parseInt(tip.value.height)
console.log(winWidth)
let i = 0
let j = 0
let x = 0
let y = 0 //
timeId = setInterval(() => {
//
// if (i === 0 || j === 0 || i === winWidth || j === winHeight) {
// tip.value.backgroundColor = `rgb(${getNum(0, 255)},${getNum(0, 255)},${getNum(0, 255)})`
// }
// console.log('x,y :>> ', x, y)
tip.value.style.transform = `translate(${x}px,${y}px)` //
i += 0.5 //35
//10i+=3i36912...
j += 0.5
x = i
y = j
if (i >= winWidth) {
x = 2 * winWidth - i //xii
if (i >= 2 * winWidth) {
//i=0
i = 0
x = 0
}
}
if (j >= winHeight) {
y = 2 * winHeight - j
if (j >= 2 * winHeight) {
j = 0
y = 0
}
}
}, 1)
}
function loadHandler() {
if (tip.value) {
move()
}
}
onMounted(() => {})
onBeforeUnmount(() => {
clearInterval(Number(timeId))
})
defineExpose({
show,
close
})
</script>
<style scoped lang="scss">
.dialog-wrapper {
width: 1920px;
height: 1080px;
img {
position: absolute;
top: 0;
left: 0;
width: 480px;
}
}
</style>

2
src/components/Map/Map.vue

@ -42,7 +42,7 @@ function handleDetail() {
#mapContainer {
position: absolute;
z-index: 0;
width: 1220px;
width: 1420px;
height: 1080px;
}
.map-flex {

12
src/components/Menu/Menu.vue

@ -39,7 +39,15 @@ const list = ref<MenuItem[]>([
status: 0
},
{
title: '店铺导航',
title: '地图导览',
titleEn: 'Guide',
icon: require('@/assets/images/menu/guide.png'),
iconS: require('@/assets/images/menu/guides.png'),
path: '/guide',
status: 0
},
{
title: '品牌搜索',
titleEn: 'Brand',
icon: require('@/assets/images/menu/brand.png'),
iconS: require('@/assets/images/menu/brands.png'),
@ -71,7 +79,7 @@ const list = ref<MenuItem[]>([
status: 0
},
{
title: '停车与缴费',
title: '智能寻车',
titleEn: 'Parking',
icon: require('@/assets/images/menu/parking.png'),
iconS: require('@/assets/images/menu/parkings.png'),

6
src/components/PublicComponent/PublicComponent.vue

@ -4,6 +4,7 @@
<!-- 地图容器 -->
<Map v-show="$route.meta.showMap" @handle-go="handleGO" @handle-detail="handleDetail" />
<homeDialog ref="homeDialogRef"></homeDialog>
<shopDetail v-if="showDetail"></shopDetail>
<!-- 退出弹框 -->
<Logout v-model="logout" />
@ -15,8 +16,9 @@
</template>
<script setup lang="ts">
import homeDialog from '@/components/HomeDialog/HomeDialog.vue'
import shopDetail from '@/components/ShopDetail/ShopDetail.vue'
import { defineAsyncComponent, watch, onMounted, onBeforeUnmount } from 'vue'
import { ref, defineAsyncComponent, watch, onMounted, onBeforeUnmount } from 'vue'
import { storeToRefs } from 'pinia'
import { useRootStore } from '@/store/root'
import { useRouter, useRoute } from 'vue-router'
@ -28,6 +30,7 @@ import Menu from '../Menu/Menu.vue'
const Logout = defineAsyncComponent(() => import('@/base/Logout/Logout.vue'))
const AutoBackNotification = defineAsyncComponent(() => import('@/base/AutoBackNotification/AutoBackNotification.vue'))
const homeDialogRef = ref()
const router = useRouter()
const route = useRoute()
const store = useRootStore()
@ -43,6 +46,7 @@ function handleScreen() {
showDetail.value && store.SET_SHOW_DETAIL(false)
language.value !== 'zh' && store.SET_LANGUAGE('zh')
router.push('/transfer')
homeDialogRef.value.show()
}
function handleGO() {
router.push('/nav')

2
src/composables/useHandleScreen.ts

@ -64,7 +64,7 @@ export const useHandleScreen = (callback: () => void) => {
clearTimeout(delayCheckRoutePathTimer.value)
delayCheckRoutePathTimer.value = setTimeout(async () => {
if (router.currentRoute.value.fullPath !== '/') {
if (router.currentRoute.value.fullPath !== '/guide') {
await sleepToIndex()
callback()
}

2
src/composables/useInitMap.ts

@ -27,6 +27,8 @@ export const useInitMap = async function () {
angle: device.value.angle,
iconUrl: delPrefixOfFacilityList,
mapData: data,
playSpeed: 20,
iconName: true,
shopData: shopList.value.slice()
}
)

6
src/composables/useMapNavControl.ts

@ -8,7 +8,7 @@ export const useMapNavControl = () => {
//重播
function handleReplay() {
window.Map_QM.util.changePlaySpeed(6)
window.Map_QM.util.changePlaySpeed(20)
replay.value = true
pause.value = false
speedUp.value = false
@ -37,7 +37,7 @@ export const useMapNavControl = () => {
speedUp.value = !speedUp.value
window.Map_QM.pathStop(true)
nextTick(() => {
speedUp.value ? window.Map_QM.util.changePlaySpeed(10) : window.Map_QM.util.changePlaySpeed(6)
speedUp.value ? window.Map_QM.util.changePlaySpeed(25) : window.Map_QM.util.changePlaySpeed(20)
})
}
@ -48,7 +48,7 @@ export const useMapNavControl = () => {
onBeforeUnmount(() => {
clearTimeout(replayTimer.value)
replayTimer.value = null
window.Map_QM.util.changePlaySpeed(6)
window.Map_QM.util.changePlaySpeed(20)
})
return { replay, pause, speedUp, handleReplay, togglePause, handleSpeedUp, resetPause }

274
src/views/Guide/Guide.vue

@ -1,13 +1,273 @@
<template>
<div class="guide-container"></div>
<div class="guide-container">
<!-- 楼层 -->
<guideFloors ref="guideFloorsRef" @click="clickFloor"></guideFloors>
<!-- 品牌 -->
<div class="bg"></div>
<scrollView
class="shop-container-scroll animate__animated animate__fadeInUp"
:pull-up="false"
:list="selectedShopList"
:scrollbar="true"
>
<ul class="shop-items-wrapper">
<div class="shop-format-wrapper">
<!-- <h4 v-if="item.length">{{ switchLanguage(item, 'name') }}</h4> -->
<div v-if="selectedShopList.length" class="brand-list">
<shop-item v-for="shop of selectedShopList" :key="shop.shopCode" :shop="shop" @click="handleShop(shop)"></shop-item>
</div>
</div>
</ul>
</scrollView>
<!-- 控制地图 -->
<!-- 公共设施 -->
<div class="fac-list animate__animated animate__fadeInUp">
<div v-for="(item, index) in facilityList" :key="index" class="fac-item" @click="clickFac(item)">
<img :src="item.filePath" alt="" />
<p v-text="switchLanguage(item, 'name')"></p>
</div>
</div>
<div class="map-btns-list">
<div
v-for="(item, index) in list"
:key="index"
class="map-btn animate__animated animate__fadeInUp"
:class="{ active: index === mapIdx }"
@mousedown="mapIdx = index"
@mouseup="mapIdx = -1"
@click="clickMapItem(item, index)"
>
<div class="img-wrapper">
<img :src="index === mapIdx ? item.iconActive : item.icon" alt="" />
</div>
<p v-text="switchLanguage(item, 'name')"></p>
</div>
</div>
<!-- 搜索图 -->
<img src="@/assets/images/guide/search.svg" class="search-btn" alt="" @click="router.push('/brand')" />
<!-- 手势图 -->
<img
class="tip"
:src="
language === 'zh'
? require('@/assets/images/nav/tip_zh.svg')
: language === 'tw'
? require('@/assets/images/nav/tip_tw.svg')
: require('@/assets/images/nav/tip_en.svg')
"
alt=""
/>
</div>
</template>
<script setup lang="ts">
// import { useGuideMapOperation } from '@/composables/useGuideMapOperation'
// import { useFacilityNav } from '@/composables/useFacilityNav'
// import { useGuideFilterShop } from '@/composables/useGuideFilterShop'
import guideFloors from '@/components/GuideFloors/GuideFloors.vue'
import type { Item } from '@/views/Guide/list'
import { hideMapDialog } from '@/composables/useInitMap'
import shopItem from '@/components/ShopItem/ShopItem.vue'
import scrollView from '@/base/ScrollView/ScrollView.vue'
import { storeToRefs } from 'pinia'
import { useRootStore } from '@/store/root'
const store = useRootStore()
const { language, facilityList, mapStatus, device } = storeToRefs(store)
import { useGuideMapOperation } from '@/composables/useGuideMapOperation'
import { useFacilityNav } from '@/composables/useFacilityNav'
import { useGuideFilterShop } from '@/composables/useGuideFilterShop'
import { ref, onMounted, watch } from 'vue'
import { useRouter } from 'vue-router'
const router = useRouter()
const { floorIdx, selectedShopList, filterShopByFloorName, filterAboutCurrentInfo } = useGuideFilterShop() //
const { switchFloor, handleMapIcon, list, mapIdx } = useGuideMapOperation() //
const { handleFacility } = useFacilityNav() //
const selectFloor = ref<Floor>()
//
function clickFloor(floorItem: Floor) {
store.shop.houseNumber && store.shop.formatColor && window.Map_QM.changeMapIPState(store.shop.houseNumber, store.shop.formatColor)
selectFloor.value = floorItem
mapIdx.value = -1
filterShopByFloorName(floorItem.floor)
switchFloor(floorItem.floorOrder)
}
//
function clickFac(item: Facility) {
store.shop.houseNumber && store.shop.formatColor && window.Map_QM.changeMapIPState(store.shop.houseNumber, store.shop.formatColor)
handleFacility(item)
}
//
const guideFloorsRef = ref()
function clickMapItem(item: Item, index: number) {
store.shop.houseNumber && store.shop.formatColor && window.Map_QM.changeMapIPState(store.shop.houseNumber, store.shop.formatColor)
if (index === 2) {
// clickFloor(selectFloor.value) //
if (selectFloor.value) {
guideFloorsRef.value.goSelectFloor(selectFloor.value)
} else {
guideFloorsRef.value.goCurrentFloor()
}
} else {
guideFloorsRef.value.goCurrentFloor()
}
handleMapIcon(item, index)
}
//
function handleShop(item: Shop) {
hideMapDialog()
store.shop.houseNumber && store.shop.formatColor && window.Map_QM.changeMapIPState(store.shop.houseNumber, store.shop.formatColor)
store.SET_SHOP(item)
store.SET_SHOW_DETAIL(true)
}
// const { floorIdx, selectedShopList, filterShopByFloorName, filterAboutCurrentInfo } = useGuideFilterShop() //
// const { switchFloor, handleMapIcon, list, mapIdx } = useGuideMapOperation() //
// const { handleFacility } = useFacilityNav() //
onMounted(() => {
if (mapStatus.value) {
clickFloor({
floorCode: device.value.floorCode,
floor: device.value.floor,
floorOrder: device.value.floorOrder,
floorMapUrl: '',
floorMapCode: ''
})
}
})
watch(mapStatus, newValue => {
if (newValue) {
clickFloor({
floorCode: device.value.floorCode,
floor: device.value.floor,
floorOrder: device.value.floorOrder,
floorMapUrl: '',
floorMapCode: ''
})
}
})
</script>
<style lang="scss" scoped>
.guide-container {
.bg {
position: absolute;
right: 0;
bottom: 0;
z-index: 1;
width: 524px;
height: 1080px;
background-repeat: no-repeat;
background-size: contain;
background-image: url('@/assets/images/guide/bg_shop.svg');
}
.shop-container-scroll {
position: absolute;
top: 188px;
right: 4px;
bottom: 0;
z-index: 1;
overflow: hidden;
width: 496px;
height: 880px;
padding-right: 20px;
.shop-items-wrapper {
.shop-format-wrapper {
width: 496px;
.brand-list {
display: flex;
flex-wrap: wrap;
gap: 24px 16px;
margin-bottom: 48px;
}
}
}
}
.fac-list {
position: absolute;
top: 881px;
left: 590px;
z-index: 1;
display: flex;
justify-content: flex-start;
.fac-item {
width: 44px;
margin-right: 16px;
font-size: 10px;
font-family: 'font_regular';
text-align: center;
color: #736661;
img {
width: 44px;
height: 44px;
margin-bottom: 6px;
border-radius: 14px;
}
p {
width: 100%;
padding-left: 0;
}
}
}
.map-btns-list {
position: absolute;
top: 881px;
left: 421px;
z-index: 2;
display: flex;
.map-btn {
display: inline-block;
width: 44px;
margin-right: 16px;
text-align: center;
vertical-align: top;
.img-wrapper {
position: relative;
width: 44px;
height: 44px;
margin-bottom: 6px;
background: #fff;
border: 1px solid rgb(38 36 36 / 10%);
border-radius: 12px;
img {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
filter: initial;
}
}
p {
font-size: 10px;
font-family: 'font_regular';
text-align: center;
white-space: nowrap;
color: #736661;
}
&:active,
&.active {
.img-wrapper {
background-color: #a6976f;
img {
filter: brightness(2.5);
}
}
}
}
}
.tip {
position: absolute;
top: 93px;
left: 421px;
}
.search-btn {
position: absolute;
top: 992px;
left: 38px;
z-index: 1;
}
}
</style>

16
src/views/Guide/list.ts

@ -16,18 +16,18 @@ export const list: Item[] = [
name: MapControl.RESET,
nameEn: 'reset',
icon: require('@/assets/images/guide/reset.svg'),
iconActive: require('@/assets/images/guide/reset_active.svg')
iconActive: require('@/assets/images/guide/reset.svg')
},
{
name: MapControl.DIRECTION,
nameEn: 'direction',
icon: require('@/assets/images/guide/direction.svg'),
iconActive: require('@/assets/images/guide/direction_active.svg')
},
{
name: MapControl.ACTIVITY_BRAND,
nameEn: 'activity',
icon: require('@/assets/images/guide/brand.svg'),
iconActive: require('@/assets/images/guide/brand_active.svg')
iconActive: require('@/assets/images/guide/direction.svg')
}
// {
// name: MapControl.ACTIVITY_BRAND,
// nameEn: 'activity',
// icon: require('@/assets/images/guide/brand.svg'),
// iconActive: require('@/assets/images/guide/brand_active.svg')
// }
]

37
src/views/Index/Middle.vue

@ -1,12 +1,15 @@
<template>
<Transition name="zoom">
<div class="middle-container">
<div class="brand" @click="go('brand', '店铺导航')">
<div class="guide" @click="go('guide', '地图导览')">
<div class="txt_w">{{ switchLanguage(list[7], 'title') }}</div>
</div>
<div class="brand" @click="go('brand', '品牌搜索')">
<div class="txt_w">{{ switchLanguage(list[0], 'title') }}</div>
<div class="sear">{{ $t('searB') }}</div>
</div>
<div class="activity" @click="go('activity', '优惠与活动')">
<div class="txt">{{ switchLanguage(list[1], 'title') }}</div>
<div class="txt_w">{{ switchLanguage(list[1], 'title') }}</div>
</div>
<div class="art" @click="go('art', '艺术')">
<div class="txt_w">{{ switchLanguage(list[6], 'title') }}</div>
@ -35,7 +38,7 @@ import { useRootStore } from '@/store/root'
import Message from '@/base/Message/Message'
const list = [
{
title: '店铺导航',
title: '品牌搜索',
titleEn: 'Brand'
},
{
@ -51,7 +54,7 @@ const list = [
titleEn: 'Service'
},
{
title: '停车缴费',
title: '智能寻车',
titleEn: 'Parking'
},
{
@ -61,6 +64,10 @@ const list = [
{
title: '艺术中心',
titleEn: 'Art'
},
{
title: '地图导览',
titleEn: 'Guide'
}
]
const router = useRouter()
@ -91,19 +98,29 @@ function go(path: string, moduleName: string) {
left: 295px;
width: 1330px;
height: 536px;
.brand {
.guide {
@include ab(0, 0, 1);
position: relative;
width: 535px;
height: 263px;
padding-top: 32px;
padding-left: 24px;
background: url('@/assets/images/index/guide.png') no-repeat;
background-size: 100% 100%;
}
.brand {
@include ab(273px, 0, 1);
width: 270px;
height: 536px;
height: 263px;
padding-top: 32px;
padding-left: 24px;
background: url('@/assets/images/index/brand.png') no-repeat;
background-size: 100% 100%;
.sear {
position: absolute;
top: 125px;
top: 84px;
left: 24px;
font-size: 16px;
font-family: 'font_regular';
@ -114,9 +131,9 @@ function go(path: string, moduleName: string) {
}
}
.activity {
@include ab(0, 280px, 1);
@include ab(0, 545px, 1);
width: 520px;
width: 255px;
height: 263px;
padding-top: 32px;
padding-left: 24px;

2
src/views/Transfer/Transfer.vue

@ -10,6 +10,6 @@ import { useRouter } from 'vue-router'
const router = useRouter()
onMounted(() => {
router.replace('/')
router.replace('/guide')
})
</script>

Loading…
Cancel
Save