YaolongHan 4 年之前
父節點
當前提交
a61ad019a1
共有 61 個文件被更改,包括 795 次插入142 次删除
  1. 11 0
      babel.config.js
  2. 48 0
      package-lock.json
  3. 10 7
      package.json
  4. 8 0
      src/App.vue
  5. 二進制
      src/assets/images/leftImgs/三角形_n.png
  6. 二進制
      src/assets/images/leftImgs/三角形_s.png
  7. 二進制
      src/assets/images/leftImgs/三通_n.png
  8. 二進制
      src/assets/images/leftImgs/三通_s.png
  9. 二進制
      src/assets/images/leftImgs/信息点_n.png
  10. 二進制
      src/assets/images/leftImgs/信息点_s.png
  11. 二進制
      src/assets/images/leftImgs/公式_n.png
  12. 二進制
      src/assets/images/leftImgs/公式_s.png
  13. 二進制
      src/assets/images/leftImgs/划线_n.png
  14. 二進制
      src/assets/images/leftImgs/划线_s.png
  15. 二進制
      src/assets/images/leftImgs/四通_n.png
  16. 二進制
      src/assets/images/leftImgs/四通_s.png
  17. 二進制
      src/assets/images/leftImgs/图片_n.png
  18. 二進制
      src/assets/images/leftImgs/图片_s.png
  19. 二進制
      src/assets/images/leftImgs/圆形_n.png
  20. 二進制
      src/assets/images/leftImgs/圆形_s.png
  21. 二進制
      src/assets/images/leftImgs/弯头_n.png
  22. 二進制
      src/assets/images/leftImgs/弯头_s.png
  23. 二進制
      src/assets/images/leftImgs/批注_n.png
  24. 二進制
      src/assets/images/leftImgs/批注_s.png
  25. 二進制
      src/assets/images/leftImgs/文字_n.png
  26. 二進制
      src/assets/images/leftImgs/文字_s.png
  27. 二進制
      src/assets/images/leftImgs/矩形_n.png
  28. 二進制
      src/assets/images/leftImgs/矩形_s.png
  29. 二進制
      src/assets/images/leftImgs/箭头_n.png
  30. 二進制
      src/assets/images/leftImgs/箭头_s.png
  31. 二進制
      src/assets/images/leftImgs/设备组_n.png
  32. 二進制
      src/assets/images/leftImgs/设备组_s.png
  33. 二進制
      src/assets/images/leftImgs/通用实例_n.png
  34. 二進制
      src/assets/images/leftImgs/通用实例_s.png
  35. 3 0
      src/bus/bus.ts
  36. 0 61
      src/components/HelloWorld.vue
  37. 2 1
      src/components/editClass/big-edit/index.ts
  38. 11 0
      src/components/editClass/big-edit/items/SBaseImageEdit.ts
  39. 0 22
      src/components/editClass/big-edit/items/SBaseLineEdit.ts
  40. 130 0
      src/components/editClass/big-edit/items/SBasePolygonEdit.ts
  41. 9 2
      src/components/editClass/edit/SGraphEdit.ts
  42. 85 0
      src/components/editClass/edit/SObjectItemEdit.ts
  43. 2 2
      src/components/editClass/edit/index.ts
  44. 0 8
      src/components/editClass/edit/items/SImageEdit.ts
  45. 20 0
      src/components/editClass/edit/items/SLineEdit.ts
  46. 2 4
      src/components/editClass/edit/items/STextEdit.ts
  47. 122 9
      src/components/editClass/persagy-edit/PTopoScene.ts
  48. 2 1
      src/components/editClass/persagy-edit/index.ts
  49. 125 0
      src/components/editClass/persagy-edit/item/SPersagyImageEdit.ts
  50. 50 7
      src/components/editview/baseTopoEditer.vue
  51. 3 6
      src/components/editview/leftToolBar.vue
  52. 4 4
      src/components/editview/leftToolBar/legendList.vue
  53. 18 3
      src/components/editview/rightPropertyBar.vue
  54. 4 0
      src/components/editview/rightPropertyBar/BaseExplainPro.vue
  55. 4 0
      src/components/editview/rightPropertyBar/BaseImagePro.vue
  56. 4 0
      src/components/editview/rightPropertyBar/baseLinePro.vue
  57. 53 0
      src/components/editview/rightPropertyBar/baseTextPro.vue
  58. 41 0
      src/components/editview/rightPropertyBar/property.vue
  59. 3 3
      src/components/editview/topToolBar.vue
  60. 19 0
      src/components/editview/topoTooltip.vue
  61. 2 2
      src/main.ts

+ 11 - 0
babel.config.js

@@ -2,4 +2,15 @@ module.exports = {
   presets: [
     '@vue/cli-plugin-babel/preset'
   ],
+  plugins: [
+    [
+      "component",
+      {
+        "libraryName": "meri-design",
+        "camel2Dash": false,
+        "libDir": "dist",
+        "styleLibrary": { "name": "theme", "base": true }
+      }
+    ]
+  ]
 }

+ 48 - 0
package-lock.json

@@ -2773,6 +2773,38 @@
         "schema-utils": "^2.6.5"
       }
     },
+    "babel-plugin-component": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-component/-/babel-plugin-component-1.1.1.tgz",
+      "integrity": "sha512-WUw887kJf2GH80Ng/ZMctKZ511iamHNqPhd9uKo14yzisvV7Wt1EckIrb8oq/uCz3B3PpAW7Xfl7AkTLDYT6ag==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "7.0.0-beta.35"
+      },
+      "dependencies": {
+        "@babel/helper-module-imports": {
+          "version": "7.0.0-beta.35",
+          "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.35.tgz",
+          "integrity": "sha512-vaC1KyIZSuyWb3Lj277fX0pxivyHwuDU4xZsofqgYAbkDxNieMg2vuhzP5AgMweMY7fCQUMTi+BgPqTLjkxXFg==",
+          "dev": true,
+          "requires": {
+            "@babel/types": "7.0.0-beta.35",
+            "lodash": "^4.2.0"
+          }
+        },
+        "@babel/types": {
+          "version": "7.0.0-beta.35",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.35.tgz",
+          "integrity": "sha512-y9XT11CozHDgjWcTdxmhSj13rJVXpa5ZXwjjOiTedjaM0ba5ItqdS02t31EhPl7HtOWxsZkYCCUNrSfrOisA6w==",
+          "dev": true,
+          "requires": {
+            "esutils": "^2.0.2",
+            "lodash": "^4.2.0",
+            "to-fast-properties": "^2.0.0"
+          }
+        }
+      }
+    },
     "babel-plugin-dynamic-import-node": {
       "version": "2.3.3",
       "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz",
@@ -7558,6 +7590,11 @@
         "js-tokens": "^3.0.0 || ^4.0.0"
       }
     },
+    "lottie-web": {
+      "version": "5.7.3",
+      "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.7.3.tgz",
+      "integrity": "sha512-ftN4AdiNmtoVpCfN1doiUIUbhOrDSMikH1Yl64/xO5lzQ31AO0+G82bqrCNHIW5Ec2zE/g7y4iz7zBR1YJwDaA=="
+    },
     "lower-case": {
       "version": "1.1.4",
       "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz",
@@ -7676,6 +7713,17 @@
       "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=",
       "dev": true
     },
+    "meri-design": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/meri-design/-/meri-design-1.3.8.tgz",
+      "integrity": "sha512-YoAY+mpwobKlr40N9g7mXABfEU0xS8/CCgqp/C9czCkNOLNPHoXP+JaADiEzvOjCsbhraBmyuMjWIZhDXFgBTg==",
+      "requires": {
+        "lottie-web": "^5.6.5",
+        "vue": "^2.6.12",
+        "vue-router": "^3.1.3",
+        "vuex": "^3.1.1"
+      }
+    },
     "methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",

+ 10 - 7
package.json

@@ -8,18 +8,20 @@
     "lint": "vue-cli-service lint"
   },
   "dependencies": {
+    "@persagy-web/base": "2.2.1",
+    "@persagy-web/big": "2.2.1",
+    "@persagy-web/draw": "2.2.1",
+    "@persagy-web/graph": "2.2.1",
     "core-js": "^3.6.5",
     "element-ui": "^2.13.2",
     "lodash": "^4.17.20",
+    "meri-design": "^1.3.8",
+    "sybotan-vue-doc": "^1.1.7",
     "vue": "^2.6.11",
     "vue-class-component": "^7.2.3",
     "vue-property-decorator": "^8.4.2",
     "vue-router": "^3.2.0",
-    "vuex": "^3.4.0",
-    "@persagy-web/base": "2.2.1",
-    "@persagy-web/big": "2.2.1",
-    "@persagy-web/draw": "2.2.1",
-    "@persagy-web/graph": "2.2.1"
+    "vuex": "^3.4.0"
   },
   "devDependencies": {
     "@typescript-eslint/eslint-plugin": "^2.33.0",
@@ -31,12 +33,13 @@
     "@vue/cli-plugin-vuex": "^4.5.0",
     "@vue/cli-service": "^4.5.0",
     "@vue/eslint-config-typescript": "^5.0.2",
+    "babel-plugin-component": "^1.1.1",
     "eslint": "^6.7.2",
     "eslint-plugin-vue": "^6.2.2",
     "less": "^3.0.4",
     "less-loader": "^5.0.0",
+    "polybooljs": "^1.2.0",
     "typescript": "~3.9.3",
-    "vue-template-compiler": "^2.6.11",
-    "polybooljs": "^1.2.0"
+    "vue-template-compiler": "^2.6.11"
   }
 }

+ 8 - 0
src/App.vue

@@ -3,7 +3,15 @@
     <router-view />
   </div>
 </template>
+<script>
+export default {
+  data() {
+    return {
 
+    }
+  },
+}
+</script>
 <style lang="less">
 body,
 html {

二進制
src/assets/images/leftImgs/三角形_n.png


二進制
src/assets/images/leftImgs/三角形_s.png


二進制
src/assets/images/leftImgs/三通_n.png


二進制
src/assets/images/leftImgs/三通_s.png


二進制
src/assets/images/leftImgs/信息点_n.png


二進制
src/assets/images/leftImgs/信息点_s.png


二進制
src/assets/images/leftImgs/公式_n.png


二進制
src/assets/images/leftImgs/公式_s.png


二進制
src/assets/images/leftImgs/划线_n.png


二進制
src/assets/images/leftImgs/划线_s.png


二進制
src/assets/images/leftImgs/四通_n.png


二進制
src/assets/images/leftImgs/四通_s.png


二進制
src/assets/images/leftImgs/图片_n.png


二進制
src/assets/images/leftImgs/图片_s.png


二進制
src/assets/images/leftImgs/圆形_n.png


二進制
src/assets/images/leftImgs/圆形_s.png


二進制
src/assets/images/leftImgs/弯头_n.png


二進制
src/assets/images/leftImgs/弯头_s.png


二進制
src/assets/images/leftImgs/批注_n.png


二進制
src/assets/images/leftImgs/批注_s.png


二進制
src/assets/images/leftImgs/文字_n.png


二進制
src/assets/images/leftImgs/文字_s.png


二進制
src/assets/images/leftImgs/矩形_n.png


二進制
src/assets/images/leftImgs/矩形_s.png


二進制
src/assets/images/leftImgs/箭头_n.png


二進制
src/assets/images/leftImgs/箭头_s.png


二進制
src/assets/images/leftImgs/设备组_n.png


二進制
src/assets/images/leftImgs/设备组_s.png


二進制
src/assets/images/leftImgs/通用实例_n.png


二進制
src/assets/images/leftImgs/通用实例_s.png


+ 3 - 0
src/bus/bus.ts

@@ -0,0 +1,3 @@
+import Vue from 'vue'
+const bus = new Vue()
+export default bus

+ 0 - 61
src/components/HelloWorld.vue

@@ -1,61 +0,0 @@
-<template>
-  <div class="hello">
-    <h1>{{ msg }}</h1>
-    <p>
-      For a guide and recipes on how to configure / customize this project,<br>
-      check out the
-      <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
-    </p>
-    <h3>Installed CLI Plugins</h3>
-    <ul>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-typescript" target="_blank" rel="noopener">typescript</a></li>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router" target="_blank" rel="noopener">router</a></li>
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex" target="_blank" rel="noopener">vuex</a></li>
-    </ul>
-    <h3>Essential Links</h3>
-    <ul>
-      <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
-      <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
-      <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
-      <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
-      <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
-    </ul>
-    <h3>Ecosystem</h3>
-    <ul>
-      <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
-      <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
-      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
-      <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
-      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
-    </ul>
-  </div>
-</template>
-
-<script lang="ts">
-import { Component, Prop, Vue } from 'vue-property-decorator';
-
-@Component
-export default class HelloWorld extends Vue {
-  @Prop() private msg!: string;
-}
-</script>
-
-<!-- Add "scoped" attribute to limit CSS to this component only -->
-<style scoped lang="less">
-h3 {
-  margin: 40px 0 0;
-}
-ul {
-  list-style-type: none;
-  padding: 0;
-}
-li {
-  display: inline-block;
-  margin: 0 10px;
-}
-a {
-  color: #42b983;
-}
-</style>

+ 2 - 1
src/components/editClass/big-edit/index.ts

@@ -3,5 +3,6 @@ import {SBaseLineEdit} from "./items/SBaseLineEdit"
 import {SBaseTextEdit} from "./items/SBaseTextEdit"
 import {SBaseImageEdit} from "./items/SBaseImageEdit"
 import {SBaseExpainEdit} from "./items/SBaseExpainEdit"
+import {SBasePolygonEdit} from "./items/SBasePolygonEdit"
 
-export {SBaseEditScene,SBaseLineEdit,SBaseTextEdit,SBaseImageEdit,SBaseExpainEdit}
+export {SBaseEditScene,SBaseLineEdit,SBaseTextEdit,SBaseImageEdit,SBaseExpainEdit,SBasePolygonEdit}

+ 11 - 0
src/components/editClass/big-edit/items/SBaseImageEdit.ts

@@ -90,4 +90,15 @@ export class SBaseImageEdit extends SImageEdit {
     toData() {
         console.log(1230)
     }
+    /**
+   * 鼠标按下事件
+   *
+   * @param   event   保存事件参数
+   * @return  boolean
+   */
+    onDoubleClick(event: SMouseEvent): boolean {
+        super.onMouseDown(event)
+        return true;
+    } // Function onMouseDown()
+
 }

+ 0 - 22
src/components/editClass/big-edit/items/SBaseLineEdit.ts

@@ -69,26 +69,4 @@ export class SBaseLineEdit extends SLineEdit {
     toData() {
         console.log(1230)
     }
-    // onDraw(painter: SPainter) {
-    //     if (this.maskFlag && this.status == SItemStatus.Normal) {
-    //         let color = new SColor(this.strokeColor);
-    //         color.alpha = 100;
-    //         painter.pen.color = new SColor(this.strokeColor);
-    //         if (this.lineStyle == SLineStyle.Dashed) {
-    //             painter.pen.lineDash = [
-    //                 painter.toPx(this.lineWidth * 3),
-    //                 painter.toPx(this.lineWidth * 7)
-    //             ];
-    //         }
-    //         else if (this.lineStyle == SLineStyle.Dotted) {
-    //             painter.pen.lineDash = [
-    //                 painter.toPx(this.lineWidth),
-    //                 painter.toPx(this.lineWidth)
-    //             ];
-    //         }
-    //         painter.drawLine(this.line[0], this.line[1]);
-    //     } else {
-    //         super.onDraw(painter);
-    //     }
-    // }
 }

+ 130 - 0
src/components/editClass/big-edit/items/SBasePolygonEdit.ts

@@ -0,0 +1,130 @@
+/*
+ * *********************************************************************************************************************
+ *
+ *          !!
+ *        .F88X
+ *        X8888Y
+ *      .}888888N;
+ *        i888888N;        .:!              .I$WI:
+ *          R888888I      .'N88~            i8}+8Y&8"l8i$8>8W~'>W8}8]KW+8IIN"8&
+ *          .R888888I    .;N8888~          .X8'  "8I.!,/8"  !%NY8`"8I8~~8>,88I
+ *            +888888N;  .8888888Y                                  "&&8Y.}8,
+ *            ./888888N;  .R888888Y        .'}~    .>}'.`+>  i}!    "i'  +/'  .'i~  !11,.:">,  .~]!  .i}i
+ *              ~888888%:  .I888888l      .]88~`1/iY88Ii+1'.R$8$8]"888888888>  Y8$  W8E  X8E  W8888'188Il}Y88$*
+ *              18888888    E8888881    .]W%8$`R8X'&8%++N8i,8N%N8+l8%`  .}8N:.R$RE%N88N%N$K$R  188,FE$8%~Y88I
+ *            .E888888I  .i8888888'      .:$8I;88+`E8R:/8N,.>881.`$8E/1/]N8X.Y8N`"KF&&FK!'88*."88K./$88%RN888+~
+ *            8888888I  .,N888888~        ~88i"8W,!N8*.I88.}888%F,i$88"F88"  888:E8X.>88!i88>`888*.}Fl1]*}1YKi'
+ *          i888888N'      I888Y          ]88;/EX*IFKFK88X  K8R  .l8W  88Y  ~88}'88E&%8W.X8N``]88!.$8K  .:W8I
+ *        .i888888N;        I8Y          .&8$  .X88!  i881.:%888>I88  ;88]  +88+.';;;;:.Y88X  18N.,88l  .+88/
+ *      .:R888888I
+ *      .&888888I                                          Copyright (c) 2016-2020.  博锐尚格科技股份有限公司
+ *        ~8888'
+ *        .!88~                                                                     All rights reserved.
+ *
+ * *********************************************************************************************************************
+ */
+import { SColor, SFont,SPoint } from "@persagy-web/draw/";
+import { SPolygonEdit } from './../../edit';
+import { SGraphItem } from "@persagy-web/graph";
+import { Marker } from "./../types/Marker";
+import { SMouseEvent } from "@persagy-web/base/lib";
+import { ItemOrder } from '@persagy-web/big/lib';
+import { uuid } from "./../../big-edit/until";
+/**
+ * 编辑基础多边形类
+ *
+ * * @author  韩耀龙(han_yao_long#163.com)
+ */
+export class SBasePolygonEdit extends SPolygonEdit {
+    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    //属性
+    /**编辑相关操作的数据 */
+    data: Marker
+    /** 起始锚点  */
+    startItem: SGraphItem | null = null;
+    /** 结束锚点  */
+    endItem: SGraphItem | null = null;
+
+    constructor(parent: SGraphItem | null, data: Marker) {
+        super(parent);
+        // this.textItem.originPosition = STextOrigin.Centrum;
+        // this.textItem.isTransform = false;
+        this.zOrder = ItemOrder.polygonOrder;
+        this.data = data;
+        if (!data.ID) {
+            data.ID = uuid()
+        }
+        this.id = data.ID;
+        this.name = data.Name;
+        // this.text = data.Name;
+        if (data) {
+            this.setPointList = [];
+            let setPointList: SPoint[];
+            if (data.OutLine) {
+                if (data.OutLine[0] instanceof SPoint) {
+                    // @ts-ignore
+                    this.setPointList = data.OutLine;
+                } else {
+                    setPointList = data.OutLine.map(i => {
+                        return (new SPoint(i.X, i.Y))
+                    })
+                    this.setPointList = setPointList;
+                }
+            }
+            if (data.Properties.Zorder) {
+                this.zOrder = data.Properties.Zorder;
+            }
+            // 设置线宽
+            if (data.Properties.LineWidth) {
+                this.lineWidth = data.Properties.LineWidth;
+            }
+            if (data.Properties.StrokeColor) {
+                this.strokeColor = data.Properties.StrokeColor.includes('#') ? new SColor(data.Properties.StrokeColor) : new SColor(hexify(data.Properties.StrokeColor));
+            }
+            if (data.Properties.FillColor) {
+                this.fillColor = data.Properties.FillColor.includes('#') ? new SColor(data.Properties.FillColor) : new SColor(hexify(data.Properties.FillColor))
+            }
+            if (data.Properties.TextPos) {
+                this.textItem.moveTo(data.Properties.TextPos.X, data.Properties.TextPos.Y);
+            }
+            if (data.Properties.color) {
+                this.color = new SColor(data.Properties.color);
+            }
+            if (data.Properties.font) {
+                this.font = new SFont("sans-serif", data.Properties.font);
+            }
+            if (data.Properties && data.Properties.IsActive) {
+                this.isActive = data.Properties.IsActive;
+            }
+            if (data.AttachObjectIds && data.AttachObjectIds.length) {
+                this.isActive = true;
+            }
+            switch (data.Properties.LineDash) {
+                case "solid":
+                    this.lineStyle = SLineStyle.Solid;
+                    break;
+                case "dotted":
+                    this.lineStyle = SLineStyle.Dotted;
+                    break;
+                case "dashed":
+                    this.lineStyle = SLineStyle.Dashed;
+                    break;
+                default:
+                    this.lineStyle = SLineStyle.Solid;
+            }
+        }
+        /**
+         * 鼠标按下事件
+         *
+         * @param   event   保存事件参数
+         * @return  boolean
+         */
+        onMouseDown(event: SMouseEvent): boolean {
+            super.onMouseDown(event)
+            return true;
+        } // Function onMouseDown()
+
+        toData() {
+            console.log(1230)
+        }
+    }

+ 9 - 2
src/components/editClass/edit/SGraphEdit.ts

@@ -27,6 +27,7 @@
 import { SGraphItem } from "@persagy-web/graph/";
 import { SItemStatus } from "@persagy-web/big";
 import { ImageEdit, LineEdit, PolygonEdit, PolylineEdit, TextEdit, SGraphCommand, SGraphAddCommand, SGraphMoveCommand, SGraphPointListDelete, SGraphPointListInsert, SGraphPointListUpdate, SGraphPropertyCommand } from "./"
+import { SMouseEvent } from "@persagy-web/base/";
 
 /**
  * 编辑基类
@@ -57,8 +58,11 @@ export class SGraphEdit extends SGraphItem {
      *
      * @param   parent      指向父对象
      */
-    constructor(parent: SGraphItem | null, ) {
-        super(parent)
+    constructor(parent: SGraphItem | null,) {
+        super();
+        if (parent) {
+            this.parent = parent;
+        }
     }
 
     /**
@@ -69,5 +73,8 @@ export class SGraphEdit extends SGraphItem {
     toData(): any {
 
     }
+    onContextMenu(event: SMouseEvent): boolean {
 
+        return true
+    }
 }

+ 85 - 0
src/components/editClass/edit/SObjectItemEdit.ts

@@ -0,0 +1,85 @@
+/*
+ * *********************************************************************************************************************
+ *
+ *          !!
+ *        .F88X
+ *        X8888Y
+ *      .}888888N;
+ *        i888888N;        .:!              .I$WI:
+ *          R888888I      .'N88~            i8}+8Y&8"l8i$8>8W~'>W8}8]KW+8IIN"8&
+ *          .R888888I    .;N8888~          .X8'  "8I.!,/8"  !%NY8`"8I8~~8>,88I
+ *            +888888N;  .8888888Y                                  "&&8Y.}8,
+ *            ./888888N;  .R888888Y        .'}~    .>}'.`+>  i}!    "i'  +/'  .'i~  !11,.:">,  .~]!  .i}i
+ *              ~888888%:  .I888888l      .]88~`1/iY88Ii+1'.R$8$8]"888888888>  Y8$  W8E  X8E  W8888'188Il}Y88$*
+ *              18888888    E8888881    .]W%8$`R8X'&8%++N8i,8N%N8+l8%`  .}8N:.R$RE%N88N%N$K$R  188,FE$8%~Y88I
+ *            .E888888I  .i8888888'      .:$8I;88+`E8R:/8N,.>881.`$8E/1/]N8X.Y8N`"KF&&FK!'88*."88K./$88%RN888+~
+ *            8888888I  .,N888888~        ~88i"8W,!N8*.I88.}888%F,i$88"F88"  888:E8X.>88!i88>`888*.}Fl1]*}1YKi'
+ *          i888888N'      I888Y          ]88;/EX*IFKFK88X  K8R  .l8W  88Y  ~88}'88E&%8W.X8N``]88!.$8K  .:W8I
+ *        .i888888N;        I8Y          .&8$  .X88!  i881.:%888>I88  ;88]  +88+.';;;;:.Y88X  18N.,88l  .+88/
+ *      .:R888888I
+ *      .&888888I                                          Copyright (c) 2009-2020.  博锐尚格科技股份有限公司
+ *        ~8888'
+ *        .!88~                                                                     All rights reserved.
+ *
+ * *********************************************************************************************************************
+ */
+
+import { SAnchorItem } from "@persagy-web/graph/";
+import { SPoint, SSize } from "@persagy-web/draw";
+import { SGraphItem } from "@persagy-web/graph/";
+
+/**
+ * 对象item
+ *
+ * @author  郝建龙(1061851420@qq.com)
+ */
+export abstract class SObjectItemEdit extends SGraphItem {
+    /** 锚点list  */
+    anchorList: SAnchorItem[] = [];
+    /** 宽度  */
+    private _width: number = 64;
+    get width(): number {
+        return this._width;
+    }
+    set width(v: number) {
+        if (v > 0) {
+            if (v != this._width) {
+                let w = this._width;
+                this._width = v;
+                this.onResize(
+                    new SSize(w, this._height),
+                    new SSize(this._width, this._height)
+                );
+            }
+        }
+    }
+
+    /** 高度  */
+    private _height: number = 64;
+    get height(): number {
+        return this._height;
+    }
+    set height(v: number) {
+        if (v > 0) {
+            if (v != this._height) {
+                let h = this._height;
+                this._height = v;
+                this.onResize(
+                    new SSize(this._width, h),
+                    new SSize(this._width, this._height)
+                );
+            }
+        }
+    }
+
+    /** 原点  */
+    origin = new SPoint();
+
+    /**
+     * 宽高发发生变化
+     *
+     * @param   oldSize 改之前的大小
+     * @param   newSize 改之后大小
+     * */
+    protected onResize(oldSize: SSize, newSize: SSize) { } // Function onResize()
+} // Class SObjectItem

+ 2 - 2
src/components/editClass/edit/index.ts

@@ -31,6 +31,7 @@ import { SLineEdit } from "./items/SLineEdit";
 import { SPolygonEdit } from "./items/SPolygonEdit";
 import { SPolylineEdit } from "./items/SPolylineEdit";
 import { STextEdit } from "./items/STextEdit";
+import { SObjectItemEdit } from "./SObjectItemEdit";
 
 import { SGraphCommand } from "./commands/SGraphCommand";
 import { SGraphAddCommand } from "./commands/SGraphAddCommand";
@@ -39,5 +40,4 @@ import { SGraphPointListDelete } from "./commands/SGraphPointListDelete";
 import { SGraphPointListInsert } from "./commands/SGraphPointListInsert";
 import { SGraphPointListUpdate } from "./commands/SGraphPointListUpdate";
 import { SGraphPropertyCommand } from "./commands/SGraphPropertyCommand";
-
-export { SGraphEditScene, SGraphEdit, SImageEdit, SLineEdit, SPolygonEdit, SPolylineEdit, STextEdit, SGraphCommand, SGraphAddCommand, SGraphMoveCommand, SGraphPointListDelete, SGraphPointListInsert, SGraphPointListUpdate, SGraphPropertyCommand }
+export { SObjectItemEdit,SGraphEditScene, SGraphEdit, SImageEdit, SLineEdit, SPolygonEdit, SPolylineEdit, STextEdit, SGraphCommand, SGraphAddCommand, SGraphMoveCommand, SGraphPointListDelete, SGraphPointListInsert, SGraphPointListUpdate, SGraphPropertyCommand }

+ 0 - 8
src/components/editClass/edit/items/SImageEdit.ts

@@ -73,14 +73,6 @@ export class SImageEdit extends SImageItem {
     toData(): any {
 
     }
-    // 初始化item
-    // initItem() {
-    //     if (!this.url) {
-    //         this.strokeColor = SColor.Black;
-    //         this.width = 100;
-    //         this.height = 100
-    //     }
-    // }
 
     /**
      * 根据显示模式计算图片的宽高

+ 20 - 0
src/components/editClass/edit/items/SLineEdit.ts

@@ -285,6 +285,26 @@ export class SLineEdit extends SGraphEdit {
     } // Function onMouseUp()
 
     /**
+      * 鼠标抬起事件
+      *
+      * @param	event         事件参数
+      * @return	boolean
+      */
+    onKeyUp(event: KeyboardEvent): void {
+        // 当 ESC 时
+        if (27 == event.keyCode) {
+            if (this.status == SItemStatus.Edit) {
+                this.status = SItemStatus.Normal;
+                this.releaseItem();
+            } else if (this.status == SItemStatus.Create) {
+                this.update()
+                this.releaseItem();
+                this.parent = null;
+            }
+        }
+    } // Function onKeyUp()
+
+    /**
      * 鼠标移动事件
      *
      * @param   event   鼠标事件

+ 2 - 4
src/components/editClass/edit/items/STextEdit.ts

@@ -23,12 +23,10 @@
  *
  * *********************************************************************************************************************
  */
-
-import { SObjectItem } from "@persagy-web/graph/";
 import { SPainter, SRect, SColor, SFont, SPoint } from "@persagy-web/draw";
-import { SGraphItem, STextOrigin, SLineStyle } from "@persagy-web/graph/";
+import { SGraphItem, STextOrigin, SLineStyle, SObjectItem } from "@persagy-web/graph/";
 import { SItemStatus } from "@persagy-web/big";
-
+import { SObjectItemEdit } from ".."
 /**
  * 文本编辑类
  *

+ 122 - 9
src/components/editClass/persagy-edit/PTopoScene.ts

@@ -1,15 +1,43 @@
 import { SBaseEditScene, SBaseLineEdit, SBaseTextEdit, SBaseImageEdit, SBaseExpainEdit } from "./../big-edit";
+import { SPersagyImageEdit } from "./"
 // import { SGraphItem } from "@persagy-web/graph/";
 import { SGraphEdit } from "./../edit"
-import { SMouseEvent } from "@persagy-web/base/lib";
+import { SMouseEvent, SUndoStack } from "@persagy-web/base/lib";
 import { SItemStatus } from "@persagy-web/big/lib/enums/SItemStatus";
 import { uuid } from "./../big-edit/until";
+
+// 引入命令
+import { SGraphAddCommand } from "./../edit/commands/SGraphAddCommand"
 export class PTopoScene extends SBaseEditScene {
+    undoStack = new SUndoStack();
     constructor() {
         super()
+        // // 选择绑定选额item事件
+        this.selectContainer.connect("listChange", this, this.listChange);
     }
 
+    /**
+     * 选中返回的选中item回调方法
+     *
+     * @param   event   鼠标事件参数
+     */
+    listChange(list: any): void {
+        this.emitChoice(list.itemList)
+    }
 
+    /**
+     * 选中返回的选中item回调方法(用于场景的外部调用)
+     *
+     * @param   list   选中的item数组
+    */
+    emitChoice(list: any) {
+    }
+
+    /**
+     * 鼠标左键按下
+     *
+     * @param   event   鼠标事件参数
+     */
     onMouseDown(event: SMouseEvent): any {
         if (this.editCmd == "EditBaseLine") {
             this.addLine(event)
@@ -34,10 +62,26 @@ export class PTopoScene extends SBaseEditScene {
         } else if (this.editCmd == "") {
             super.onMouseDown(event);
         }
-
     }
-
-    addLine(event: SMouseEvent) {
+    /**
+     * 鼠标右键事件
+     *
+     * @param   event   鼠标事件参数
+     */
+    onContextMenu(event: SMouseEvent): boolean {
+        if (!super.onContextMenu(event)) {
+            this.getItem(event, null)
+        }
+        return true
+    }
+    /////////////////////////////////////////////////////////////////////////////////////////////////
+    //新增 item 类方法;
+    /**
+     * 新增基础类直线
+     *
+     * @param   event   鼠标事件参数
+     */
+    addLine(event: SMouseEvent): void {
         const data = {
             /** ID */
             ID: uuid(),
@@ -57,13 +101,21 @@ export class PTopoScene extends SBaseEditScene {
         const lineItem = new SBaseLineEdit(null, data);
         lineItem.status = SItemStatus.Create;
         this.addItem(lineItem);
+        this.undoStack.push(new SGraphAddCommand(this, lineItem));
+        lineItem.selectable = true;
         this.grabItem = lineItem;
         lineItem.connect("finishCreated", this, this.finishCreated);
         if (this.view) {
             this.view.update();
         }
     }
-    addTextItem(event: SMouseEvent) {
+
+    /**
+     * 新增基础类文本
+     *
+     * @param   event   鼠标事件参数
+     */
+    addTextItem(event: SMouseEvent): void {
         const data = {
             /** ID */
             ID: uuid(),
@@ -88,13 +140,20 @@ export class PTopoScene extends SBaseEditScene {
         item.selectable = true;
         item.moveable = true;
         this.addItem(item);
+        this.undoStack.push(new SGraphAddCommand(this, item));
         // this.Markers.push(item);
         this.grabItem = null;
         // this.focusItem = item;
         this.finishCreated(item);
         // this.scenceUpdate(this);
     }
-    addExplainItem(event: SMouseEvent) {
+
+    /**
+     * 新增基础类注释
+     *
+     * @param   event   鼠标事件参数
+     */
+    addExplainItem(event: SMouseEvent): void {
         const data = {
             /** ID */
             ID: uuid(),
@@ -119,13 +178,20 @@ export class PTopoScene extends SBaseEditScene {
         item.selectable = true;
         item.moveable = true;
         this.addItem(item);
+        this.undoStack.push(new SGraphAddCommand(this, item));
         // this.Markers.push(item);
         this.grabItem = null;
         // this.focusItem = item;
         this.finishCreated(item);
         // this.scenceUpdate(this);
     }
-    addImageItem(event: SMouseEvent) {
+
+    /**
+     * 新增基础类图片
+     *
+     * @param   event   鼠标事件参数
+     */
+    addImageItem(event: SMouseEvent): void {
         const data = {
             /** ID */
             ID: uuid(),
@@ -144,20 +210,67 @@ export class PTopoScene extends SBaseEditScene {
             },
             Style: {}
         }
-        const item = new SBaseImageEdit(null, data);
+        const item = new SPersagyImageEdit(null, data);
         item.selectable = true;
         item.moveable = true;
         this.addItem(item);
+        this.undoStack.push(new SGraphAddCommand(this, item));
         this.Markers.push(item);
         this.finishCreated(item);
     }
+    /////////////////////////////////////////////////////////////////////////////////////////////////
+    //修改 item 样式,数据等方法;
+    updateStyle(): void {
+        // 修改样式
+    }
 
+    /**
+     * item 创建完成后回调
+     *
+     * @param   event   鼠标事件参数
+     */
     finishCreated(item: SGraphEdit): void {
-        console.log('finishCreated', item)
         this.grabItem = null;
         item.status = SItemStatus.Normal;
     }
+    /**
+     * 修改 cmdstatus 函数;常在在业务中调用
+     *
+     */
     clearCmdStatus() {
+    }
+    /**
+     * 获取item (常用与场景外的调用F)
+     * @param  event SMouseEvent 鼠标事件
+     * @param  item SGraphEdit|null 返回item
+     *
+     */
+    getItem(event: SMouseEvent, item: SGraphEdit | null) {
+    }
 
+    /**
+     * 重做
+     *
+     * @return any
+     */
+    redo(): void {
+        if (this.grabItem && this.grabItem.redo) {
+            this.grabItem.redo()
+        } else {
+            this.undoStack.redo();
+        }
+    }
+
+    /**
+     * 撤销
+     *
+     * @return any
+     */
+    undo(): void {
+        if (this.grabItem && this.grabItem.undo) {
+            this.grabItem.undo()
+        } else {
+            this.undoStack.undo();
+        }
     }
 }

+ 2 - 1
src/components/editClass/persagy-edit/index.ts

@@ -1,2 +1,3 @@
 import { PTopoScene } from "./PTopoScene";
-export { PTopoScene }
+import {SPersagyImageEdit}from "./item/SPersagyImageEdit"
+export { PTopoScene,SPersagyImageEdit }

文件差異過大導致無法顯示
+ 125 - 0
src/components/editClass/persagy-edit/item/SPersagyImageEdit.ts


+ 50 - 7
src/components/editview/baseTopoEditer.vue

@@ -1,24 +1,33 @@
 <template>
-  <div class="baseTopo" ref="baseTopo">
-    <canvas id="persagy_topo" :width="canvasWidth" :height="canvasHeight" tabindex="0"></canvas>
+  <div class="baseTopo" id="baseTopo" ref="baseTopo">
+    <topoTooltip class="topoTooltip-box" ref="topoTooltip"></topoTooltip>
+    <canvas
+      id="persagy_topo"
+      :width="canvasWidth"
+      :height="canvasHeight"
+      tabindex="0"
+    ></canvas>
   </div>
 </template>
 <script>
 import { PTopoScene } from "@/components/editClass/persagy-edit";
 // import { BaseLineEdit } from "@/components/editClass/big-edit";
 import { SGraphView } from "@persagy-web/graph";
+import topoTooltip from "./topoTooltip.vue";
 import { mapState, mapMutations } from "vuex";
+import bus from "@/bus/bus";
 export default {
+  components: { topoTooltip },
   data() {
     return {
       scene: null, //场景
       view: null, //视图
       canvasWidth: 700, //画布宽
-      canvasHeight: 700 //画布高
+      canvasHeight: 700, //画布高
     };
   },
   computed: {
-    ...mapState(["choiceLegend"])
+    ...mapState(["choiceLegend"]),
   },
   mounted() {
     this.canvasWidth = this.$refs.baseTopo.offsetWidth;
@@ -27,6 +36,16 @@ export default {
     this.view = new SGraphView("persagy_topo");
     this.view.scene = this.scene;
     this.scene.clearCmdStatus = this.clearCmdStatus;
+    // 初始化bus绑定事件
+    this.initBusEvent();
+    // 右键事件
+    this.scene.getItem = this.onContextMenu;
+    this.scene.emitChoice = this.emitChoice;
+    // 屏蔽浏览器右键功能(防止与编辑器右键交互重合)
+    document.getElementById("baseTopo").oncontextmenu = function (e) {
+      return false;
+    };
+
     // this.scene.root.children = [];
     // this.lineItem = new BaseLineEdit(null, []);
     // this.lineItem.status = SItemStatus.Create;
@@ -40,7 +59,25 @@ export default {
     // 恢复命令状态
     clearCmdStatus() {
       this.SETCHOICELEHEND("");
-    }
+    },
+    // 右键获取item
+    onContextMenu(event, item) {
+      console.log("event,item", event, item);
+      const doms = document.getElementsByClassName("topoTooltip-box")[0];
+      doms.style.left = event.x + "px";
+      doms.style.top = event.y + "px";
+    },
+    // 选中后的回调函数
+    emitChoice(itemList){
+      bus.$emit('emitChoice',itemList)
+    },
+    //初始化bus绑定事件
+    initBusEvent() {
+      // 改变文字大小
+      bus.$on("baseTextSize", (val) => {
+        console.log("aaaaaaaaa", val);
+      });
+    },
   },
   watch: {
     choiceLegend(val) {
@@ -48,13 +85,19 @@ export default {
         // 设置当前编辑状态
         this.scene.editCmd = this.choiceLegend;
       }
-    }
-  }
+    },
+  },
 };
 </script>
 <style lang="less" scoped>
 .baseTopo {
   width: 100%;
   height: 100%;
+  position: relative;
+  .topoTooltip-box {
+    position: absolute;
+    left: 0;
+    top: 0;
+  }
 }
 </style>

+ 3 - 6
src/components/editview/leftToolBar.vue

@@ -3,9 +3,6 @@
   <div class="left-tool-bar">
     <div class="btn-list">
       <ul>
-        <li :class="{ 'btn-active': chiceStatus==0 }" @click="choiceStatus()">
-          <span class="icon iconfont iconjiantou-copy"></span>
-        </li>
         <li :class="{ 'btn-active': chiceStatus==1 }" @click="openTool(1)">
           <span class="icon iconfont iconzhongxin"></span>
         </li>
@@ -24,7 +21,7 @@
       </ul>
     </div>
     <el-drawer
-      size="240px"
+      size="220px"
       :with-header="false"
       :destroy-on-close="true"
       :visible.sync="drawer"
@@ -109,10 +106,10 @@ li {
         cursor: pointer;
       }
       li:hover {
-        background: #e1f2ff;
+        background: #E4E5E7;
       }
       .btn-active {
-        background: #e1f2ff;
+        background: #e1f2ff !important;
       }
     }
   }

+ 4 - 4
src/components/editview/leftToolBar/legendList.vue

@@ -49,11 +49,11 @@ export default {
     width: 100%;
     .legend-title {
       display: block;
-      font-size: 20px;
-      font-weight: bold;
-      height: 40px;
-      line-height: 40px;
+      font-size: 14px;
+      height: 14px;
+      line-height: 14px;
       margin-left: 10px;
+      color: #8D9399;
     }
     .legend-content {
       padding: 0 10 10px 10px;

+ 18 - 3
src/components/editview/rightPropertyBar.vue

@@ -1,12 +1,27 @@
 <!--右侧属性栏-->
 <template>
-  <div class="right-property-bar">右侧属性栏</div>
+  <div class="right-property-bar">
+    <el-tabs v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane label="属性" name="property">
+        <property></property>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
 </template>
 <script>
+import property from "./rightPropertyBar/property";
 export default {
+  components: {
+    property,
+  },
   data() {
-    return {};
-  }
+    return {
+      activeName: "property",
+    };
+  },
+  handleClick(tab, event) {
+    console.log(tab, event);
+  },
 };
 </script>
 <style lang="less" scoped>

+ 4 - 0
src/components/editview/rightPropertyBar/BaseExplainPro.vue

@@ -0,0 +1,4 @@
+<!-- 基本注释的属性框 -->
+<template>
+  <div class="baseLinePro">基本注释的属性框</div>
+</template>

+ 4 - 0
src/components/editview/rightPropertyBar/BaseImagePro.vue

@@ -0,0 +1,4 @@
+<!-- 基本图片的属性框 -->
+<template>
+  <div class="baseLinePro">基本图片的属性框</div>
+</template>

+ 4 - 0
src/components/editview/rightPropertyBar/baseLinePro.vue

@@ -0,0 +1,4 @@
+<!-- 基本线的属性框 -->
+<template>
+  <div class="baseLinePro">基本线的属性框</div>
+</template>

+ 53 - 0
src/components/editview/rightPropertyBar/baseTextPro.vue

@@ -0,0 +1,53 @@
+<!-- 基本的文本属性框 -->
+<template>
+  <div class="base-text">
+    基本文本框
+    <!-- <ul>
+      <li>
+        <span>字号:</span>
+        <el-input-number size="small" v-model="size" @change="updateSize" :min="1" :max="50"></el-input-number>
+      </li>
+      <li>
+        <span>文本框:</span>
+        <el-input
+          v-model="text"
+          @change="handleChangeText"
+          type="textarea"
+          :autosize="{ minRows: 1, maxRows: 1}"
+          placeholder="请输入内容"
+          style="width:200px;"
+        ></el-input>
+      </li>
+      <li>
+        <span>线颜色:</span>
+        <el-color-picker v-model="color" @change="changeColor" show-alpha></el-color-picker>
+      </li>
+    </ul>-->
+  </div>
+</template>
+<script>
+import bus from "@/bus/bus";
+export default {
+  data() {
+    return {
+      size: 12, //font-size
+      text: "", //文本
+      color: "#cccccc", //颜色
+    };
+  },
+  methods: {
+    // 改变文本大小
+    updateSize(val) {
+      bus.$emit("baseTextSize", val);
+    },
+    // 输入文本
+    handleChangeText() {},
+    // 改变文字颜色
+    changeColor() {},
+  },
+};
+</script>
+<style lang="less">
+.base-text {
+}
+</style>

+ 41 - 0
src/components/editview/rightPropertyBar/property.vue

@@ -0,0 +1,41 @@
+<!--属性栏-->
+<template>
+  <div class="propertys">
+    <baseTextProVue v-show="itemType == 'BaseText'"></baseTextProVue>
+    <baseLinePro v-show="itemType == 'BaseLine'"></baseLinePro>
+    <BaseExplainPro v-show="itemType == 'BaseExplain'"></BaseExplainPro>
+    <BaseImagePro v-show="itemType == 'BaseImage'"></BaseImagePro>
+  </div>
+</template>
+<script>
+import baseTextProVue from "./baseTextPro.vue";
+import baseLinePro from "./baseLinePro.vue";
+import BaseExplainPro from "./BaseExplainPro";
+import BaseImagePro from "./BaseImagePro";
+import bus from "@/bus/bus";
+export default {
+  components: { baseTextProVue, baseLinePro, BaseExplainPro, BaseImagePro },
+  data() {
+    return {
+      itemType: "",
+    };
+  },
+  mounted() {
+    bus.$on("emitChoice", this.emitChoice);
+  },
+  methods: {
+    emitChoice(itemList) {
+      console.log("itemList", itemList);
+      if (itemList.length == 1) {
+        this.itemType = itemList[0].data.Type ? itemList[0].data.Type : "";
+      } else {
+        this.itemType = "";
+      }
+    },
+  },
+};
+</script>
+<style lang="less" scoped>
+.propertys {
+}
+</style>

+ 3 - 3
src/components/editview/topToolBar.vue

@@ -2,7 +2,7 @@
   <div id="topToolBar">
     <div class="left">
       <ul>
-        <li class="zoom-window">
+        <!-- <li class="zoom-window">
           <div>
             <img
               class="lock"
@@ -17,7 +17,7 @@
             />
           </div>
           <span>缩放窗口</span>
-        </li>
+        </li> -->
         <li >
           <img class="lock" :src="require(`./../../assets/images/undo.png`)" alt />
           <span>撤销</span>
@@ -131,7 +131,7 @@ li {
   box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
   display: flex;
   align-items: center;
-  justify-content: space-between;
+  justify-content:center;
   padding: 0 24px 0 24px;
   box-sizing: border-box;
   .left {

+ 19 - 0
src/components/editview/topoTooltip.vue

@@ -0,0 +1,19 @@
+<!-- 弹框 -->
+<template>
+  <div class="topo_tooltip">弹窗</div>
+</template>
+<script>
+export default {
+  name: "topoTooltip",
+  data() {
+    return {};
+  },
+};
+</script>
+<style lang="less" scoped>
+.topo_tooltip {
+  position: absolute;
+  left: 0;
+  top: 0;
+}
+</style>

+ 2 - 2
src/main.ts

@@ -4,9 +4,9 @@ import router from './router'
 import store from './store'
 import './assets/font/iconfont.css';
 import ElementUI from 'element-ui';
-import 'element-ui/lib/theme-chalk/index.css';;
-
+import 'element-ui/lib/theme-chalk/index.css';
 Vue.use(ElementUI);
+
 Vue.config.productionTip = false
 
 new Vue({