Browse Source

新增项目

niuheng 3 years ago
commit
0839d3c184

+ 5 - 0
babel.config.js

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

+ 34 - 0
package.json

@@ -0,0 +1,34 @@
+{
+  "name": "padm",
+  "version": "0.0.0",
+  "private": true,
+  "description": "",
+  "scripts": {
+    "start": "vue-cli-service serve",
+    "build": "vue-cli-service build"
+  },
+  "dependencies": {
+    "font-awesome": "^4.7.0",
+    "vue-router": "^3.5.3",
+    "vuex": "^3.6.2"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "~4.5.0",
+    "@vue/cli-plugin-typescript": "^4.5.13",
+    "@vue/cli-service": "~4.5.0",
+    "axios": "^0.21.1",
+    "core-js": "^3.6.5",
+    "element-ui": "^2.15.6",
+    "less": "3.9.0",
+    "less-loader": "4.1.0",
+    "pixi.js": "^6.1.3",
+    "typescript": "^4.3.3",
+    "vue": "^2.6.11",
+    "vue-template-compiler": "^2.6.11"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions",
+    "not dead"
+  ]
+}

BIN
public/favicon.ico


+ 17 - 0
public/index.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
+    <title><%=htmlWebpackPlugin.options.title %></title>
+    <script type="text/javascript" src="<%=htmlWebpackPlugin.files.publicPath %>systemConf.js"></script>
+  </head>
+  <body>
+    <noscript>
+      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app"></div>
+    <!-- built files will be auto injected -->
+  </body>
+</html>

+ 58 - 0
public/systemConf.js

@@ -0,0 +1,58 @@
+var __systemConf = {
+  //基础数据根域名
+  baseServiceUrl: 'http://develop.ysbdtp.com',
+  //导航菜单
+  menus: [{
+    "id": "ready",
+    "name": "信息录入工具",
+    "orders": 1,
+    child: [{
+      "id": "build_floor",
+      "name": "建筑楼层管理",
+      "orders": 2,
+      "url": "/ready/buildfloor",
+      "type": "menu",
+      "icon": "icon-jianzhu"
+    },{
+      "id": "equipment",
+      "name": "设备台账",
+      "orders": 3,
+      "url": "/ledger/facility"
+    },
+    {
+      "id": "system",
+      "name": "系统台账",
+      "orders": 4,
+      "url": "/ledger/list"
+    },{
+      "id": "overview",
+      "name": "全部关系总览",
+      "orders": 5,
+      "url": "/relation/overview",
+      "icon": "icon-jiqixuexi-"
+    }]
+  }, {
+    "id": "xianchangjiaofugongjv",
+    "name": "现场交付工具",
+    "orders": 6,
+    child: [{
+      "id": "CADtuzhiguanli",
+      "name": "CAD核查图纸管理",
+      "orders": 7,
+      "url": "/systemGraph",
+      "icon": "icon-topology"
+    }]
+  }, {
+    "id": "draw",
+    "name": "绘图工具",
+    "orders": 8,
+    child: [{
+      "id": "xitongtubianji",
+      "name": "系统图编辑工具",
+      "orders": 9,
+      "url": "/systemGraph",
+      "icon": "icon-topology"
+    }]
+  }]
+};
+window.__systemConf = __systemConf;

+ 12 - 0
src/App.vue

@@ -0,0 +1,12 @@
+<template>
+  <div id="app">
+    <router-view />
+  </div>
+</template>
+
+<script>
+export default {
+  name: "App",
+  components: {},
+};
+</script>

+ 46 - 0
src/Main.vue

@@ -0,0 +1,46 @@
+<template>
+  <!-- <div id="page-main" v-bind:class="{ 'page-sidebar-closed': sidebarClosed }"> -->
+  <div id="page-main">
+    <div class="leftRegion">
+      <pageLeft></pageLeft>
+    </div>
+    <div class="rightRegion">
+      <pageRight></pageRight>
+    </div>
+  </div>
+</template>
+<script>
+import pageLeft from "./components/frame/pageLeft";
+import pageRight from "./components/frame/pageRight";
+
+export default {
+  name: "Main",
+  components: {
+    pageLeft,
+    pageRight
+  },
+  props: [],
+  data() {
+    return {};
+  },
+  computed: {},
+  methods: {},
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+#page-main {
+  height: 100%;
+  width: 100%;
+  display: flex;
+  flex-direction: row;
+}
+
+.leftRegion {
+  width: 235px;
+}
+.rightRegion {
+  flex: 1;
+}
+</style>

BIN
src/assets/images/login_bg.png


BIN
src/assets/images/logo.png


+ 503 - 0
src/assets/style/iconfont/iconfont.css

@@ -0,0 +1,503 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 1318214 */
+  src: url('iconfont.woff2?t=1623402928952') format('woff2'),
+       url('iconfont.woff?t=1623402928952') format('woff'),
+       url('iconfont.ttf?t=1623402928952') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-dangqian:before {
+  content: "\e653";
+}
+
+.icon-topology:before {
+  content: "\e67c";
+}
+
+.icon-pingmiantu:before {
+  content: "\e652";
+}
+
+.icon-biaogewushuju:before {
+  content: "\e651";
+}
+
+.icon-juxing:before {
+  content: "\e650";
+}
+
+.icon-delate:before {
+  content: "\e64e";
+}
+
+.icon-conduct:before {
+  content: "\e64d";
+}
+
+.icon-Error:before {
+  content: "\e64c";
+}
+
+.icon-trouble:before {
+  content: "\e64b";
+}
+
+.icon-json:before {
+  content: "\e646";
+}
+
+.icon-revit:before {
+  content: "\e645";
+}
+
+.icon-icon-test:before {
+  content: "\e643";
+}
+
+.icon-OSSserver:before {
+  content: "\e644";
+}
+
+.icon-iconfontgengduo:before {
+  content: "\e641";
+}
+
+.icon-shipin-tianchong:before {
+  content: "\e647";
+}
+
+.icon-shipin:before {
+  content: "\e683";
+}
+
+.icon-Excel:before {
+  content: "\edde";
+}
+
+.icon-weixiubeijing:before {
+  content: "\e63a";
+}
+
+.icon-kongqizhiliang:before {
+  content: "\e63c";
+}
+
+.icon-fujian:before {
+  content: "\e6ea";
+}
+
+.icon-shezhi1:before {
+  content: "\e63d";
+}
+
+.icon-zuzhiguanxi:before {
+  content: "\e6c1";
+}
+
+.icon-view:before {
+  content: "\e639";
+}
+
+.icon-icon:before {
+  content: "\e65b";
+}
+
+.icon-jiankongguizeweihu:before {
+  content: "\e637";
+}
+
+.icon-yiliaohangyedeICON-:before {
+  content: "\e638";
+}
+
+.icon-guizeyingyong:before {
+  content: "\e64a";
+}
+
+.icon-chakan:before {
+  content: "\e63f";
+}
+
+.icon-jilu:before {
+  content: "\e635";
+}
+
+.icon-yun--tianchong:before {
+  content: "\e682";
+}
+
+.icon-yun--tianchong1:before {
+  content: "\e684";
+}
+
+.icon-yun--tianchong2:before {
+  content: "\e687";
+}
+
+.icon-yun--tianchong3:before {
+  content: "\e689";
+}
+
+.icon-shenhetongguo:before {
+  content: "\e636";
+}
+
+.icon-daochuexcel:before {
+  content: "\e714";
+}
+
+.icon-qingdanguanli:before {
+  content: "\e604";
+}
+
+.icon-shangchuan1:before {
+  content: "\e775";
+}
+
+.icon-kong:before {
+  content: "\e709";
+}
+
+.icon-shuxingxuanze:before {
+  content: "\e633";
+}
+
+.icon-shezhi:before {
+  content: "\e660";
+}
+
+.icon-shubiaozhizhen:before {
+  content: "\e781";
+}
+
+.icon-zidong:before {
+  content: "\e7ee";
+}
+
+.icon-jiazai:before {
+  content: "\e634";
+}
+
+.icon-shenglvehao:before {
+  content: "\e708";
+}
+
+.icon-warn:before {
+  content: "\e630";
+}
+
+.icon-shangchuan:before {
+  content: "\e664";
+}
+
+.icon-23:before {
+  content: "\e6ba";
+}
+
+.icon-new:before {
+  content: "\e63e";
+}
+
+.icon-iconset0450:before {
+  content: "\e749";
+}
+
+.icon-shipinbofangyingpian2:before {
+  content: "\e78e";
+}
+
+.icon-quanjing-m:before {
+  content: "\e631";
+}
+
+.icon-bianji:before {
+  content: "\e640";
+}
+
+.icon-shuoming:before {
+  content: "\e632";
+}
+
+.icon-you:before {
+  content: "\e63b";
+}
+
+.icon-doc-line:before {
+  content: "\e64f";
+}
+
+.icon-bofang:before {
+  content: "\e866";
+}
+
+.icon-changyongtubiao-xianxingdaochu-zhuanqu-:before {
+  content: "\e776";
+}
+
+.icon-changyongtubiao-mianxing-:before {
+  content: "\e79b";
+}
+
+.icon-Anti-cancel:before {
+  content: "\e62f";
+}
+
+.icon-download1:before {
+  content: "\e62e";
+}
+
+.icon-zoom:before {
+  content: "\e62d";
+}
+
+.icon-narrow:before {
+  content: "\e62c";
+}
+
+.icon-Cancel:before {
+  content: "\e62b";
+}
+
+.icon-Erase:before {
+  content: "\e62a";
+}
+
+.icon-edit1:before {
+  content: "\e627";
+}
+
+.icon-maximize:before {
+  content: "\e626";
+}
+
+.icon-move:before {
+  content: "\e625";
+}
+
+.icon-lijiqueren:before {
+  content: "\e762";
+}
+
+.icon-ico:before {
+  content: "\e624";
+}
+
+.icon-xiangqing-copy:before {
+  content: "\e763";
+}
+
+.icon-xiangqing:before {
+  content: "\e649";
+}
+
+.icon-jinggao:before {
+  content: "\e603";
+}
+
+.icon-dingwei:before {
+  content: "\e629";
+}
+
+.icon-yushu_yingwen:before {
+  content: "\e623";
+}
+
+.icon-shanglou:before {
+  content: "\e600";
+}
+
+.icon-htmal5icon30:before {
+  content: "\e642";
+}
+
+.icon-app4:before {
+  content: "\e6f4";
+}
+
+.icon-xitong:before {
+  content: "\e61f";
+}
+
+.icon-jiaoseguanli:before {
+  content: "\e621";
+}
+
+.icon-jiqixuexi-:before {
+  content: "\e754";
+}
+
+.icon-taizhangzhangbushezhi:before {
+  content: "\e654";
+}
+
+.icon-xinxi:before {
+  content: "\e648";
+}
+
+.icon-project-o:before {
+  content: "\e628";
+}
+
+.icon-jianzhu:before {
+  content: "\e601";
+}
+
+.icon-guanxi:before {
+  content: "\e6ad";
+}
+
+.icon-kechengshouquan:before {
+  content: "\e622";
+}
+
+.icon-renyuanguanli:before {
+  content: "\e663";
+}
+
+.icon-moxing___:before {
+  content: "\e602";
+}
+
+.icon-shitixingwei:before {
+  content: "\e620";
+}
+
+.icon-shujukushili:before {
+  content: "\e66c";
+}
+
+.icon-tongbushujukumoxing:before {
+  content: "\e673";
+}
+
+.icon-right:before {
+  content: "\e6f8";
+}
+
+.icon-left:before {
+  content: "\e720";
+}
+
+.icon-bottom:before {
+  content: "\e869";
+}
+
+.icon-top:before {
+  content: "\e867";
+}
+
+.icon-edit-2:before {
+  content: "\e61e";
+}
+
+.icon-nopicture:before {
+  content: "\e61d";
+}
+
+.icon-cross:before {
+  content: "\e61c";
+}
+
+.icon-hook:before {
+  content: "\e61b";
+}
+
+.icon-mark:before {
+  content: "\e619";
+}
+
+.icon-positioning:before {
+  content: "\e618";
+}
+
+.icon-association:before {
+  content: "\e617";
+}
+
+.icon-batchassociation:before {
+  content: "\e616";
+}
+
+.icon-search:before {
+  content: "\e615";
+}
+
+.icon-Update:before {
+  content: "\e614";
+}
+
+.icon-download:before {
+  content: "\e613";
+}
+
+.icon-Log:before {
+  content: "\e612";
+}
+
+.icon-replace:before {
+  content: "\e611";
+}
+
+.icon-termination:before {
+  content: "\e610";
+}
+
+.icon-folder:before {
+  content: "\e60f";
+}
+
+.icon-add-control:before {
+  content: "\e60e";
+}
+
+.icon-delete-control:before {
+  content: "\e60d";
+}
+
+.icon-windowclosed:before {
+  content: "\e60c";
+}
+
+.icon-return:before {
+  content: "\e60b";
+}
+
+.icon-open:before {
+  content: "\e60a";
+}
+
+.icon-less:before {
+  content: "\e609";
+}
+
+.icon-plus:before {
+  content: "\e608";
+}
+
+.icon-edit:before {
+  content: "\e607";
+}
+
+.icon-floorplan:before {
+  content: "\e606";
+}
+
+.icon-delete:before {
+  content: "\e605";
+}
+
+.icon-guanbi:before {
+  content: "\e66b";
+}
+
+.icon-wushuju:before {
+  content: "\e61a";
+}
+

+ 863 - 0
src/assets/style/iconfont/iconfont.json

@@ -0,0 +1,863 @@
+{
+  "id": "1318214",
+  "name": "慧云盈运维平台V3.0",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon-",
+  "description": "运维平台3.0-图标",
+  "glyphs": [
+    {
+      "icon_id": "22214661",
+      "name": "当前",
+      "font_class": "dangqian",
+      "unicode": "e653",
+      "unicode_decimal": 58963
+    },
+    {
+      "icon_id": "4922685",
+      "name": "拓扑",
+      "font_class": "topology",
+      "unicode": "e67c",
+      "unicode_decimal": 59004
+    },
+    {
+      "icon_id": "18683496",
+      "name": "平面图设计",
+      "font_class": "pingmiantu",
+      "unicode": "e652",
+      "unicode_decimal": 58962
+    },
+    {
+      "icon_id": "7349170",
+      "name": "表格无数据",
+      "font_class": "biaogewushuju",
+      "unicode": "e651",
+      "unicode_decimal": 58961
+    },
+    {
+      "icon_id": "13956703",
+      "name": "矩形",
+      "font_class": "juxing",
+      "unicode": "e650",
+      "unicode_decimal": 58960
+    },
+    {
+      "icon_id": "13759213",
+      "name": "delate",
+      "font_class": "delate",
+      "unicode": "e64e",
+      "unicode_decimal": 58958
+    },
+    {
+      "icon_id": "13710533",
+      "name": "conduct",
+      "font_class": "conduct",
+      "unicode": "e64d",
+      "unicode_decimal": 58957
+    },
+    {
+      "icon_id": "13710530",
+      "name": "Error",
+      "font_class": "Error",
+      "unicode": "e64c",
+      "unicode_decimal": 58956
+    },
+    {
+      "icon_id": "13710517",
+      "name": "trouble",
+      "font_class": "trouble",
+      "unicode": "e64b",
+      "unicode_decimal": 58955
+    },
+    {
+      "icon_id": "13710513",
+      "name": "json",
+      "font_class": "json",
+      "unicode": "e646",
+      "unicode_decimal": 58950
+    },
+    {
+      "icon_id": "13710507",
+      "name": "revit",
+      "font_class": "revit",
+      "unicode": "e645",
+      "unicode_decimal": 58949
+    },
+    {
+      "icon_id": "12508700",
+      "name": "111",
+      "font_class": "icon-test",
+      "unicode": "e643",
+      "unicode_decimal": 58947
+    },
+    {
+      "icon_id": "13710494",
+      "name": "OSS server",
+      "font_class": "OSSserver",
+      "unicode": "e644",
+      "unicode_decimal": 58948
+    },
+    {
+      "icon_id": "645195",
+      "name": "更多",
+      "font_class": "iconfontgengduo",
+      "unicode": "e641",
+      "unicode_decimal": 58945
+    },
+    {
+      "icon_id": "2570109",
+      "name": "视频",
+      "font_class": "shipin-tianchong",
+      "unicode": "e647",
+      "unicode_decimal": 58951
+    },
+    {
+      "icon_id": "5321972",
+      "name": "视频",
+      "font_class": "shipin",
+      "unicode": "e683",
+      "unicode_decimal": 59011
+    },
+    {
+      "icon_id": "6808518",
+      "name": "Excel",
+      "font_class": "Excel",
+      "unicode": "edde",
+      "unicode_decimal": 60894
+    },
+    {
+      "icon_id": "7957905",
+      "name": "维修背景",
+      "font_class": "weixiubeijing",
+      "unicode": "e63a",
+      "unicode_decimal": 58938
+    },
+    {
+      "icon_id": "8628975",
+      "name": "空气质量",
+      "font_class": "kongqizhiliang",
+      "unicode": "e63c",
+      "unicode_decimal": 58940
+    },
+    {
+      "icon_id": "9881675",
+      "name": "KHCFDC_附件",
+      "font_class": "fujian",
+      "unicode": "e6ea",
+      "unicode_decimal": 59114
+    },
+    {
+      "icon_id": "10262050",
+      "name": "设 置",
+      "font_class": "shezhi1",
+      "unicode": "e63d",
+      "unicode_decimal": 58941
+    },
+    {
+      "icon_id": "8452524",
+      "name": "组织关系",
+      "font_class": "zuzhiguanxi",
+      "unicode": "e6c1",
+      "unicode_decimal": 59073
+    },
+    {
+      "icon_id": "10902058",
+      "name": "转换视图",
+      "font_class": "view",
+      "unicode": "e639",
+      "unicode_decimal": 58937
+    },
+    {
+      "icon_id": "744577",
+      "name": "空间",
+      "font_class": "icon",
+      "unicode": "e65b",
+      "unicode_decimal": 58971
+    },
+    {
+      "icon_id": "3978010",
+      "name": "监控规则维护",
+      "font_class": "jiankongguizeweihu",
+      "unicode": "e637",
+      "unicode_decimal": 58935
+    },
+    {
+      "icon_id": "6756829",
+      "name": "定位",
+      "font_class": "yiliaohangyedeICON-",
+      "unicode": "e638",
+      "unicode_decimal": 58936
+    },
+    {
+      "icon_id": "9589340",
+      "name": "规则应用",
+      "font_class": "guizeyingyong",
+      "unicode": "e64a",
+      "unicode_decimal": 58954
+    },
+    {
+      "icon_id": "573859",
+      "name": "查看",
+      "font_class": "chakan",
+      "unicode": "e63f",
+      "unicode_decimal": 58943
+    },
+    {
+      "icon_id": "738194",
+      "name": "记录",
+      "font_class": "jilu",
+      "unicode": "e635",
+      "unicode_decimal": 58933
+    },
+    {
+      "icon_id": "2570201",
+      "name": "云-4",
+      "font_class": "yun--tianchong",
+      "unicode": "e682",
+      "unicode_decimal": 59010
+    },
+    {
+      "icon_id": "2570203",
+      "name": "云-3",
+      "font_class": "yun--tianchong1",
+      "unicode": "e684",
+      "unicode_decimal": 59012
+    },
+    {
+      "icon_id": "2570206",
+      "name": "云-2",
+      "font_class": "yun--tianchong2",
+      "unicode": "e687",
+      "unicode_decimal": 59015
+    },
+    {
+      "icon_id": "2570208",
+      "name": "云-1",
+      "font_class": "yun--tianchong3",
+      "unicode": "e689",
+      "unicode_decimal": 59017
+    },
+    {
+      "icon_id": "7171938",
+      "name": "审核通过",
+      "font_class": "shenhetongguo",
+      "unicode": "e636",
+      "unicode_decimal": 58934
+    },
+    {
+      "icon_id": "7237252",
+      "name": "导出excel",
+      "font_class": "daochuexcel",
+      "unicode": "e714",
+      "unicode_decimal": 59156
+    },
+    {
+      "icon_id": "11408691",
+      "name": "清单管理",
+      "font_class": "qingdanguanli",
+      "unicode": "e604",
+      "unicode_decimal": 58884
+    },
+    {
+      "icon_id": "5330293",
+      "name": "上传",
+      "font_class": "shangchuan1",
+      "unicode": "e775",
+      "unicode_decimal": 59253
+    },
+    {
+      "icon_id": "6529905",
+      "name": "空",
+      "font_class": "kong",
+      "unicode": "e709",
+      "unicode_decimal": 59145
+    },
+    {
+      "icon_id": "1166327",
+      "name": "批量框选",
+      "font_class": "shuxingxuanze",
+      "unicode": "e633",
+      "unicode_decimal": 58931
+    },
+    {
+      "icon_id": "1212286",
+      "name": "设置",
+      "font_class": "shezhi",
+      "unicode": "e660",
+      "unicode_decimal": 58976
+    },
+    {
+      "icon_id": "5330405",
+      "name": "鼠标指针",
+      "font_class": "shubiaozhizhen",
+      "unicode": "e781",
+      "unicode_decimal": 59265
+    },
+    {
+      "icon_id": "5729578",
+      "name": "自动",
+      "font_class": "zidong",
+      "unicode": "e7ee",
+      "unicode_decimal": 59374
+    },
+    {
+      "icon_id": "7127384",
+      "name": "加载",
+      "font_class": "jiazai",
+      "unicode": "e634",
+      "unicode_decimal": 58932
+    },
+    {
+      "icon_id": "9974429",
+      "name": "省略号",
+      "font_class": "shenglvehao",
+      "unicode": "e708",
+      "unicode_decimal": 59144
+    },
+    {
+      "icon_id": "113537",
+      "name": "叹号",
+      "font_class": "warn",
+      "unicode": "e630",
+      "unicode_decimal": 58928
+    },
+    {
+      "icon_id": "167188",
+      "name": "上传",
+      "font_class": "shangchuan",
+      "unicode": "e664",
+      "unicode_decimal": 58980
+    },
+    {
+      "icon_id": "392180",
+      "name": "方向",
+      "font_class": "23",
+      "unicode": "e6ba",
+      "unicode_decimal": 59066
+    },
+    {
+      "icon_id": "430025",
+      "name": "添加",
+      "font_class": "new",
+      "unicode": "e63e",
+      "unicode_decimal": 58942
+    },
+    {
+      "icon_id": "554484",
+      "name": "数据",
+      "font_class": "iconset0450",
+      "unicode": "e749",
+      "unicode_decimal": 59209
+    },
+    {
+      "icon_id": "688101",
+      "name": "视频 播放 影片 2",
+      "font_class": "shipinbofangyingpian2",
+      "unicode": "e78e",
+      "unicode_decimal": 59278
+    },
+    {
+      "icon_id": "949686",
+      "name": "全景-互动",
+      "font_class": "quanjing-m",
+      "unicode": "e631",
+      "unicode_decimal": 58929
+    },
+    {
+      "icon_id": "976543",
+      "name": "编辑",
+      "font_class": "bianji",
+      "unicode": "e640",
+      "unicode_decimal": 58944
+    },
+    {
+      "icon_id": "2674482",
+      "name": "说明",
+      "font_class": "shuoming",
+      "unicode": "e632",
+      "unicode_decimal": 58930
+    },
+    {
+      "icon_id": "5203315",
+      "name": "方向-右",
+      "font_class": "you",
+      "unicode": "e63b",
+      "unicode_decimal": 58939
+    },
+    {
+      "icon_id": "6265221",
+      "name": "文件",
+      "font_class": "doc-line",
+      "unicode": "e64f",
+      "unicode_decimal": 58959
+    },
+    {
+      "icon_id": "9626836",
+      "name": "播放",
+      "font_class": "bofang",
+      "unicode": "e866",
+      "unicode_decimal": 59494
+    },
+    {
+      "icon_id": "10810190",
+      "name": "待办  等待 审核",
+      "font_class": "changyongtubiao-xianxingdaochu-zhuanqu-",
+      "unicode": "e776",
+      "unicode_decimal": 59254
+    },
+    {
+      "icon_id": "10866837",
+      "name": "计算机 算数",
+      "font_class": "changyongtubiao-mianxing-",
+      "unicode": "e79b",
+      "unicode_decimal": 59291
+    },
+    {
+      "icon_id": "10883859",
+      "name": "Anti-cancel",
+      "font_class": "Anti-cancel",
+      "unicode": "e62f",
+      "unicode_decimal": 58927
+    },
+    {
+      "icon_id": "10883806",
+      "name": "download",
+      "font_class": "download1",
+      "unicode": "e62e",
+      "unicode_decimal": 58926
+    },
+    {
+      "icon_id": "10883802",
+      "name": "zoom",
+      "font_class": "zoom",
+      "unicode": "e62d",
+      "unicode_decimal": 58925
+    },
+    {
+      "icon_id": "10883773",
+      "name": "narrow",
+      "font_class": "narrow",
+      "unicode": "e62c",
+      "unicode_decimal": 58924
+    },
+    {
+      "icon_id": "10883763",
+      "name": "Cancel",
+      "font_class": "Cancel",
+      "unicode": "e62b",
+      "unicode_decimal": 58923
+    },
+    {
+      "icon_id": "10883754",
+      "name": "Erase",
+      "font_class": "Erase",
+      "unicode": "e62a",
+      "unicode_decimal": 58922
+    },
+    {
+      "icon_id": "10883664",
+      "name": "edit",
+      "font_class": "edit1",
+      "unicode": "e627",
+      "unicode_decimal": 58919
+    },
+    {
+      "icon_id": "10883653",
+      "name": "maximize",
+      "font_class": "maximize",
+      "unicode": "e626",
+      "unicode_decimal": 58918
+    },
+    {
+      "icon_id": "10883630",
+      "name": "move",
+      "font_class": "move",
+      "unicode": "e625",
+      "unicode_decimal": 58917
+    },
+    {
+      "icon_id": "8475421",
+      "name": "立即确认20x20",
+      "font_class": "lijiqueren",
+      "unicode": "e762",
+      "unicode_decimal": 59234
+    },
+    {
+      "icon_id": "10461393",
+      "name": "ico",
+      "font_class": "ico",
+      "unicode": "e624",
+      "unicode_decimal": 58916
+    },
+    {
+      "icon_id": "11007160",
+      "name": "详情-2",
+      "font_class": "xiangqing-copy",
+      "unicode": "e763",
+      "unicode_decimal": 59235
+    },
+    {
+      "icon_id": "8802632",
+      "name": "详情-2",
+      "font_class": "xiangqing",
+      "unicode": "e649",
+      "unicode_decimal": 58953
+    },
+    {
+      "icon_id": "1112",
+      "name": "警告",
+      "font_class": "jinggao",
+      "unicode": "e603",
+      "unicode_decimal": 58883
+    },
+    {
+      "icon_id": "7291772",
+      "name": "定位",
+      "font_class": "dingwei",
+      "unicode": "e629",
+      "unicode_decimal": 58921
+    },
+    {
+      "icon_id": "10143964",
+      "name": "禹数_英文",
+      "font_class": "yushu_yingwen",
+      "unicode": "e623",
+      "unicode_decimal": 58915
+    },
+    {
+      "icon_id": "36770",
+      "name": "楼梯(上)",
+      "font_class": "shanglou",
+      "unicode": "e600",
+      "unicode_decimal": 58880
+    },
+    {
+      "icon_id": "400292",
+      "name": "筛选",
+      "font_class": "htmal5icon30",
+      "unicode": "e642",
+      "unicode_decimal": 58946
+    },
+    {
+      "icon_id": "826065",
+      "name": "app4",
+      "font_class": "app4",
+      "unicode": "e6f4",
+      "unicode_decimal": 59124
+    },
+    {
+      "icon_id": "1119123",
+      "name": "系统",
+      "font_class": "xitong",
+      "unicode": "e61f",
+      "unicode_decimal": 58911
+    },
+    {
+      "icon_id": "2486592",
+      "name": "角色管理",
+      "font_class": "jiaoseguanli",
+      "unicode": "e621",
+      "unicode_decimal": 58913
+    },
+    {
+      "icon_id": "3336992",
+      "name": "关系",
+      "font_class": "jiqixuexi-",
+      "unicode": "e754",
+      "unicode_decimal": 59220
+    },
+    {
+      "icon_id": "4423857",
+      "name": "台账账簿设置",
+      "font_class": "taizhangzhangbushezhi",
+      "unicode": "e654",
+      "unicode_decimal": 58964
+    },
+    {
+      "icon_id": "5064098",
+      "name": "信息",
+      "font_class": "xinxi",
+      "unicode": "e648",
+      "unicode_decimal": 58952
+    },
+    {
+      "icon_id": "5092841",
+      "name": "项目",
+      "font_class": "project-o",
+      "unicode": "e628",
+      "unicode_decimal": 58920
+    },
+    {
+      "icon_id": "5093336",
+      "name": "建筑",
+      "font_class": "jianzhu",
+      "unicode": "e601",
+      "unicode_decimal": 58881
+    },
+    {
+      "icon_id": "5325625",
+      "name": "关系",
+      "font_class": "guanxi",
+      "unicode": "e6ad",
+      "unicode_decimal": 59053
+    },
+    {
+      "icon_id": "6729600",
+      "name": "课程授权",
+      "font_class": "kechengshouquan",
+      "unicode": "e622",
+      "unicode_decimal": 58914
+    },
+    {
+      "icon_id": "7450628",
+      "name": "人员管理",
+      "font_class": "renyuanguanli",
+      "unicode": "e663",
+      "unicode_decimal": 58979
+    },
+    {
+      "icon_id": "10033410",
+      "name": "模型",
+      "font_class": "moxing___",
+      "unicode": "e602",
+      "unicode_decimal": 58882
+    },
+    {
+      "icon_id": "1010769",
+      "name": "实体行为",
+      "font_class": "shitixingwei",
+      "unicode": "e620",
+      "unicode_decimal": 58912
+    },
+    {
+      "icon_id": "1011014",
+      "name": "数据库实例",
+      "font_class": "shujukushili",
+      "unicode": "e66c",
+      "unicode_decimal": 58988
+    },
+    {
+      "icon_id": "1011261",
+      "name": "同步数据库模型",
+      "font_class": "tongbushujukumoxing",
+      "unicode": "e673",
+      "unicode_decimal": 58995
+    },
+    {
+      "icon_id": "2045204",
+      "name": "enter",
+      "font_class": "right",
+      "unicode": "e6f8",
+      "unicode_decimal": 59128
+    },
+    {
+      "icon_id": "2045309",
+      "name": "return",
+      "font_class": "left",
+      "unicode": "e720",
+      "unicode_decimal": 59168
+    },
+    {
+      "icon_id": "12508757",
+      "name": "return",
+      "font_class": "bottom",
+      "unicode": "e869",
+      "unicode_decimal": 59497
+    },
+    {
+      "icon_id": "12508371",
+      "name": "return",
+      "font_class": "top",
+      "unicode": "e867",
+      "unicode_decimal": 59495
+    },
+    {
+      "icon_id": "10066078",
+      "name": "编辑2",
+      "font_class": "edit-2",
+      "unicode": "e61e",
+      "unicode_decimal": 58910
+    },
+    {
+      "icon_id": "10066001",
+      "name": "无图片",
+      "font_class": "nopicture",
+      "unicode": "e61d",
+      "unicode_decimal": 58909
+    },
+    {
+      "icon_id": "10065960",
+      "name": "叉",
+      "font_class": "cross",
+      "unicode": "e61c",
+      "unicode_decimal": 58908
+    },
+    {
+      "icon_id": "10065949",
+      "name": "勾",
+      "font_class": "hook",
+      "unicode": "e61b",
+      "unicode_decimal": 58907
+    },
+    {
+      "icon_id": "10065823",
+      "name": "标记",
+      "font_class": "mark",
+      "unicode": "e619",
+      "unicode_decimal": 58905
+    },
+    {
+      "icon_id": "10065547",
+      "name": "定位",
+      "font_class": "positioning",
+      "unicode": "e618",
+      "unicode_decimal": 58904
+    },
+    {
+      "icon_id": "10065507",
+      "name": "关联",
+      "font_class": "association",
+      "unicode": "e617",
+      "unicode_decimal": 58903
+    },
+    {
+      "icon_id": "10064913",
+      "name": "批量关联",
+      "font_class": "batchassociation",
+      "unicode": "e616",
+      "unicode_decimal": 58902
+    },
+    {
+      "icon_id": "10064625",
+      "name": "搜索",
+      "font_class": "search",
+      "unicode": "e615",
+      "unicode_decimal": 58901
+    },
+    {
+      "icon_id": "10064600",
+      "name": "更新配置",
+      "font_class": "Update",
+      "unicode": "e614",
+      "unicode_decimal": 58900
+    },
+    {
+      "icon_id": "10064555",
+      "name": "下载",
+      "font_class": "download",
+      "unicode": "e613",
+      "unicode_decimal": 58899
+    },
+    {
+      "icon_id": "10064528",
+      "name": "日志",
+      "font_class": "Log",
+      "unicode": "e612",
+      "unicode_decimal": 58898
+    },
+    {
+      "icon_id": "10064509",
+      "name": "替换模型",
+      "font_class": "replace",
+      "unicode": "e611",
+      "unicode_decimal": 58897
+    },
+    {
+      "icon_id": "10064458",
+      "name": "终止任务",
+      "font_class": "termination",
+      "unicode": "e610",
+      "unicode_decimal": 58896
+    },
+    {
+      "icon_id": "10064441",
+      "name": "文件夹",
+      "font_class": "folder",
+      "unicode": "e60f",
+      "unicode_decimal": 58895
+    },
+    {
+      "icon_id": "10064137",
+      "name": "添加-控件",
+      "font_class": "add-control",
+      "unicode": "e60e",
+      "unicode_decimal": 58894
+    },
+    {
+      "icon_id": "10064030",
+      "name": "删除-控件",
+      "font_class": "delete-control",
+      "unicode": "e60d",
+      "unicode_decimal": 58893
+    },
+    {
+      "icon_id": "10063984",
+      "name": "窗口关闭",
+      "font_class": "windowclosed",
+      "unicode": "e60c",
+      "unicode_decimal": 58892
+    },
+    {
+      "icon_id": "10063792",
+      "name": "返回",
+      "font_class": "return",
+      "unicode": "e60b",
+      "unicode_decimal": 58891
+    },
+    {
+      "icon_id": "10063358",
+      "name": "前往",
+      "font_class": "open",
+      "unicode": "e60a",
+      "unicode_decimal": 58890
+    },
+    {
+      "icon_id": "10063221",
+      "name": "减",
+      "font_class": "less",
+      "unicode": "e609",
+      "unicode_decimal": 58889
+    },
+    {
+      "icon_id": "10063177",
+      "name": "加",
+      "font_class": "plus",
+      "unicode": "e608",
+      "unicode_decimal": 58888
+    },
+    {
+      "icon_id": "10063141",
+      "name": "编辑",
+      "font_class": "edit",
+      "unicode": "e607",
+      "unicode_decimal": 58887
+    },
+    {
+      "icon_id": "10063019",
+      "name": "图片",
+      "font_class": "floorplan",
+      "unicode": "e606",
+      "unicode_decimal": 58886
+    },
+    {
+      "icon_id": "10062926",
+      "name": "删除",
+      "font_class": "delete",
+      "unicode": "e605",
+      "unicode_decimal": 58885
+    },
+    {
+      "icon_id": "3978394",
+      "name": "关闭",
+      "font_class": "guanbi",
+      "unicode": "e66b",
+      "unicode_decimal": 58987
+    },
+    {
+      "icon_id": "8557519",
+      "name": "无数据",
+      "font_class": "wushuju",
+      "unicode": "e61a",
+      "unicode_decimal": 58906
+    }
+  ]
+}

BIN
src/assets/style/iconfont/iconfont.ttf


BIN
src/assets/style/iconfont/iconfont.woff


BIN
src/assets/style/iconfont/iconfont.woff2


+ 55 - 0
src/assets/style/main.less

@@ -0,0 +1,55 @@
+html,
+body {
+    padding: 0 !important;
+    margin: 0 !important;
+    font-size: 14px;
+    width: 100%;
+    height: 100%;
+    background: #f2f2f2;
+}
+
+/*---滚动条默认显示样式--*/
+::-webkit-scrollbar-thumb{
+    height:50px;
+    outline-offset:-2px;
+    outline:2px solid #dddee0;
+    border: 2px solid #dddee0;
+    background-color: #dddee0;
+    border-radius: 4px;
+}
+
+/*---鼠标点击滚动条显示样式--*/
+::-webkit-scrollbar-thumb:hover{
+    height:50px;
+}
+
+
+/*---滚动条大小--*/
+::-webkit-scrollbar{
+    width:8px;
+    height:8px;
+}
+
+/*---滚动框背景样式--*/
+::-webkit-scrollbar-track-piece{}
+
+#app {
+    width: 100%;
+    height: 100%;
+}
+
+.el-menu{
+    border-right: none;
+}
+
+.el-breadcrumb{
+    line-height: 30px;
+}
+
+.el-user-popover{
+    min-width: 90px;
+    display: flex;
+    flex-direction: column;
+    line-height: 26px;
+    padding: 0px;
+}

+ 58 - 0
src/components/frame/leftMenu.vue

@@ -0,0 +1,58 @@
+<template>
+  <div>
+    <el-submenu
+      :index="menu.orders.toString()"
+      v-if="menu.child && menu.child.length > 0"
+    >
+      <template slot="title">
+        <i
+          class="menuIcon"
+          :class="'iconfont ' + menu.icon"
+          v-if="!!menu.icon"
+        ></i>
+        <span v-text="menu.name"></span>
+      </template>
+      <leftMenu
+        :menu="subMenu"
+        v-for="subMenu in menu.child"
+        :key="subMenu.id"
+      ></leftMenu>
+    </el-submenu>
+    <el-menu-item
+      :index="menu.url"
+      v-if="!menu.child || menu.child.length == 0"
+    >
+      <i
+        class="menuIcon"
+        :class="'iconfont ' + menu.icon"
+        v-if="!!menu.icon"
+      ></i>
+      <span slot="title" v-text="menu.name"></span>
+    </el-menu-item>
+  </div>
+</template>
+<script>
+export default {
+  name: "leftMenu",
+  props: ["menu"],
+  data() {
+    return {};
+  },
+  computed: {},
+  methods: {},
+  created() {},
+
+  mounted() {},
+  components: {},
+};
+</script>
+
+<style scoped>
+.menuIcon {
+  margin-right: 6px;
+  color: #fff;
+  width: 16px;
+  height:16px;
+}
+</style>
+

File diff suppressed because it is too large
+ 170 - 0
src/components/frame/login.vue


+ 112 - 0
src/components/frame/pageLeft.vue

@@ -0,0 +1,112 @@
+<template>
+  <div id="pageLeft">
+    <div class="topContainer">
+      <div class="logoDiv">
+        <img :src="logoUrl" class="logoImg" />
+      </div>
+      <div class="middDiv">
+        <i class="el-icon-fa-bars fa fa-bars"></i>
+      </div>
+    </div>
+    <div class="menuDiv">
+      <el-menu
+        text-color="#fff"
+        active-text-color="#ffd04b"
+        background-color="#364150"
+        router
+      >
+        <el-menu-item-group v-for="menu in menus" :key="menu.id">
+          <template slot="title">
+            <span v-text="menu.name"></span>
+          </template>
+          <leftMenu
+            :menu="subMenu"
+            v-for="subMenu in menu.child"
+            :key="subMenu.id"
+            :index="subMenu.id"
+          ></leftMenu>
+        </el-menu-item-group>
+      </el-menu>
+    </div>
+  </div>
+</template>
+<script>
+import { mapState } from "vuex";
+import leftMenu from "./leftMenu";
+export default {
+  props: [],
+  data() {
+    return {
+      logoUrl: require("@/assets/images/logo.png"),
+    };
+  },
+  computed: {
+    ...mapState(["menus"]),
+  },
+  methods: {},
+  created() {},
+
+  mounted() {},
+  components: {
+    leftMenu,
+  },
+};
+</script>
+
+<style scoped>
+#pageLeft {
+  width: 235px;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+}
+
+.topContainer {
+  background: #2b3643;
+  height: 50px;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+}
+
+.menuDiv {
+  flex: 1;
+  background: #364150;
+}
+
+.logoImg {
+  height: 18px;
+  margin-left: 20px;
+}
+
+.el-icon-fa-bars {
+  font-family: FontAwesome !important;
+  font-size: inherit;
+  font-style: normal;
+  font-weight: 400;
+  font-variant: normal;
+  text-transform: none;
+  line-height: 1;
+  vertical-align: baseline;
+  display: inline-block;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  color: #ffffff;
+  margin-left: 88px;
+}
+
+.logoDiv {
+  flex: 1;
+}
+
+.middDiv {
+  flex: 1;
+}
+
+.el-menu-item-group__title span {
+  font-size: 14px !important;
+  color: #68707b;
+  font-weight: bold;
+}
+</style>
+

+ 152 - 0
src/components/frame/pageRight.vue

@@ -0,0 +1,152 @@
+<template>
+  <div id="pageRight">
+    <div class="headerContainer">
+      <div class="projectContainer">
+        <el-select
+          v-model="selectProject"
+          value-key="id"
+          filterable
+          placeholder="请选择"
+        >
+          <el-option
+            v-for="item in projects"
+            :key="item.id"
+            :label="item.name"
+            :value="item"
+          >
+          </el-option>
+        </el-select>
+      </div>
+      <div class="userContainer">
+        <el-popover trigger="hover" popper-class="el-user-popover">
+          <div class="userPropExit" @click="loginOut">
+            <i class="el-icon-switch-button"></i>
+            <span class="user-pro-oper">退出登录</span>
+          </div>
+          <div class="userPropLine"></div>
+          <div class="userPropUpPass">
+            <i class="el-icon-unlock"></i>
+            <span class="user-pro-oper">修改密码</span>
+          </div>
+
+          <div class="userInfo" slot="reference">
+            <span v-text="user.name"></span>
+            <i class="el-icon-fa-user fa fa-user"></i>
+          </div>
+        </el-popover>
+      </div>
+    </div>
+    <div class="breadcContainer">
+      <el-breadcrumb separator-class="el-icon-arrow-right">
+        <el-breadcrumb-item
+          v-for="bread in breadcrumbs"
+          :to="bread.to"
+          :key="bread.to"
+          v-text="bread.label"
+        ></el-breadcrumb-item>
+      </el-breadcrumb>
+    </div>
+    <div class="contentContainer">
+      <router-view class="page-content"></router-view>
+    </div>
+  </div>
+</template>
+<script>
+import { mapState } from "vuex";
+import { sessionStore } from "@/store/sessionStore";
+import { logicConfig } from '@/logicConfig'
+export default {
+  props: [],
+  data() {
+    return {};
+  },
+  computed: {
+    ...mapState(["breadcrumbs", "projects", "user"]),
+    selectProject: {
+      set(value) {
+        this.$store.commit("updateSelectProject", value);
+      },
+      get() {
+        return this.$store.state.selectProject;
+      },
+    },
+  },
+  methods: {
+    //注销
+    loginOut: function () {
+      this.$store.commit("loginOut");
+      sessionStore.loginOut();
+      this.$router.replace({ path:  logicConfig.routerNameConfig.loginRouteName });
+    },
+  },
+  created() {},
+  watch: {},
+  mounted() {},
+  components: {},
+};
+</script>
+
+<style scoped>
+#pageRight {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+}
+.breadcContainer {
+  height: 31px;
+  border-bottom: 1px solid #333;
+  margin: 0 10px 10px 10px;
+}
+
+.contentContainer {
+  flex: 1;
+  margin: 0 10px 10px 10px;
+}
+
+.headerContainer {
+  height: 50px;
+  background: #2b3643;
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+}
+
+.projectContainer {
+  flex: 1;
+}
+
+.userContainer {
+  flex: 1;
+}
+
+.userInfo {
+  float: right;
+  margin-right: 20px;
+  font-size: 18px;
+  color: #409eff;
+  cursor: pointer;
+}
+
+.el-icon-fa-user {
+  font-family: FontAwesome !important;
+  margin-left: 4px;
+}
+
+.user-pro-oper {
+  margin-left: 4px;
+}
+
+.userPropExit {
+  margin: 4px 8px 0px 8px;
+  cursor: pointer;
+}
+.userPropUpPass {
+  margin: 0px 8px;
+  cursor: pointer;
+}
+
+.userPropLine {
+  border-bottom: solid 1px #c0c4cc;
+}
+</style>

+ 23 - 0
src/components/systemGraph/index.vue

@@ -0,0 +1,23 @@
+<template>
+  <div>
+      我是系统图
+  </div>
+</template>
+<script>
+export default {
+  props: [],
+  data() {
+    return {};
+  },
+  computed: {},
+  methods: {},
+  created() {},
+
+  mounted() {},
+  components: {
+  },
+};
+</script>
+
+<style scoped>
+</style>

+ 327 - 0
src/controller/userController.ts

@@ -0,0 +1,327 @@
+/**
+ * 和用户相关的调用接口的入口类
+ */
+
+import { customHttpUtils } from "@/utils/http/customHttpUtils";
+import { sessionStore } from "@/store/sessionStore";
+
+export class userController {
+    /**
+     * 登录
+     * @param userName 
+     * @param userPass 
+     * @returns 
+     */
+    async login(userName: string, userPass: string) {
+        var _dataStr = JSON.stringify({
+            loginName: userName,
+            password: userPass,
+            loginDevice: "PC",
+            longitude: 1,
+            latitude: 1,
+        });
+
+        let requestUrl = (window as any).__systemConf.baseServiceUrl + "/login-service";
+        let requestHeaders = {
+            "Content-Type": "application/x-www-form-urlencoded",
+        };
+        let requestData = "jsonString=" + _dataStr;
+        let requestMethod = "post";
+
+        let customHttpUtilsInstance = new customHttpUtils();
+
+        let loginResult = await customHttpUtilsInstance.customRequest(
+            requestUrl,
+            requestHeaders,
+            requestData,
+            requestMethod
+        );
+        return loginResult;
+    };
+
+    async getUserInfoById(){
+        let userId = sessionStore.userId;
+        return {
+            result:'success',
+            content:[{
+                userId: userId,
+                userName: 'adm',
+                projects:[
+                    {
+                      "projectLocalName": "银泰中心",
+                      "projName": "银泰中心",
+                      "latitude": "36.5",
+                      "productLine": "",
+                      "projectCode": "",
+                      "detailAddress": "001号",
+                      "projectLocalID": "1101050031",
+                      "functionType": "230",
+                      "partitionAbbr": "银泰中心",
+                      "projectName": "银泰中心",
+                      "projectId": "Pj1101050031",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "博锐尚格",
+                      "projName": "博锐尚格",
+                      "latitude": "36.5",
+                      "productLine": "1",
+                      "projectCode": "",
+                      "detailAddress": "北京市海淀区建材城中路27号金隅智造工场N2-3层",
+                      "projectLocalID": "1101080259",
+                      "functionType": "230",
+                      "partitionAbbr": "博锐尚格",
+                      "projectName": "博锐尚格",
+                      "projectId": "Pj1101080259",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "禹数科技公司",
+                      "projName": "禹数科技公司",
+                      "latitude": "36.5",
+                      "productLine": "",
+                      "projectCode": null,
+                      "detailAddress": "金隅智造工厂N2楼3层",
+                      "projectLocalID": "1101101230",
+                      "functionType": "230",
+                      "partitionAbbr": "禹数科技公司",
+                      "projectName": "禹数科技公司",
+                      "projectId": "Pj1101101230",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "北京万科半岛广场",
+                      "projName": "北京万科半岛广场",
+                      "latitude": "36.5",
+                      "productLine": "1",
+                      "projectCode": "",
+                      "detailAddress": "广阳新路9号院1号楼1-4层(商业部分)",
+                      "projectLocalID": "1101110003",
+                      "functionType": "230",
+                      "partitionAbbr": "北京万科半岛广场",
+                      "projectName": "北京万科半岛广场",
+                      "projectId": "Pj1101110003",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "测试项目1",
+                      "projName": null,
+                      "latitude": "36.5",
+                      "productLine": "",
+                      "projectCode": "",
+                      "detailAddress": "",
+                      "projectLocalID": "1208001",
+                      "functionType": "200",
+                      "partitionAbbr": null,
+                      "projectName": "测试项目1",
+                      "projectId": "Pj1208001",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "测试项目2",
+                      "projName": null,
+                      "latitude": "36.5",
+                      "productLine": "",
+                      "projectCode": null,
+                      "detailAddress": "",
+                      "projectLocalID": "1208002",
+                      "functionType": "200",
+                      "partitionAbbr": null,
+                      "projectName": "测试项目2",
+                      "projectId": "Pj1208002",
+                      "liveStatus": "0",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "上海国际航空服务中心",
+                      "projName": "上海国际航空服务中心",
+                      "latitude": "36.5",
+                      "productLine": null,
+                      "projectCode": null,
+                      "detailAddress": null,
+                      "projectLocalID": "3101040002",
+                      "functionType": "230",
+                      "partitionAbbr": "上海国际航空服务中心",
+                      "projectName": "上海国际航空服务中心",
+                      "projectId": "Pj3101040002",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "济南印象城",
+                      "projName": "济南印象城",
+                      "latitude": "36.5",
+                      "productLine": "1",
+                      "projectCode": null,
+                      "detailAddress": " 花园路136号7号楼(印象城)",
+                      "projectLocalID": "3701020004",
+                      "functionType": "230",
+                      "partitionAbbr": "济南印象城",
+                      "projectName": "济南印象城",
+                      "projectId": "Pj3701020004",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "香港置地约克北郡",
+                      "projName": "香港置地约克北郡",
+                      "latitude": "36.5",
+                      "productLine": "1",
+                      "projectCode": "",
+                      "detailAddress": "重庆市渝北区0003项目",
+                      "projectLocalID": "5001120003",
+                      "functionType": "230",
+                      "partitionAbbr": "香港置地约克北郡",
+                      "projectName": "香港置地约克北郡",
+                      "projectId": "Pj5001120003",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "不知道做什么的2",
+                      "projName": null,
+                      "latitude": "36.5",
+                      "productLine": "",
+                      "projectCode": "",
+                      "detailAddress": "",
+                      "projectLocalID": "5555567890",
+                      "functionType": "230",
+                      "partitionAbbr": null,
+                      "projectName": "不知道做什么的2",
+                      "projectId": "Pj5555567890",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "不知道做什么的3",
+                      "projName": null,
+                      "latitude": "36.5",
+                      "productLine": "",
+                      "projectCode": null,
+                      "detailAddress": "",
+                      "projectLocalID": "6666667777",
+                      "functionType": "230",
+                      "partitionAbbr": null,
+                      "projectName": "不知道做什么的3",
+                      "projectId": "Pj6666667777",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "龙华交付测试项目",
+                      "projName": "龙华模拟交付",
+                      "latitude": "36.5",
+                      "productLine": "",
+                      "projectCode": null,
+                      "detailAddress": "",
+                      "projectLocalID": "8888888801",
+                      "functionType": "230",
+                      "partitionAbbr": "龙华模拟交付",
+                      "projectName": "龙华交付测试项目",
+                      "projectId": "Pj8888888801",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "京东测试项目",
+                      "projName": "京东测试项目",
+                      "latitude": "36.5",
+                      "productLine": "",
+                      "projectCode": null,
+                      "detailAddress": "",
+                      "projectLocalID": "9909990002",
+                      "functionType": "230",
+                      "partitionAbbr": "京东测试项目",
+                      "projectName": "京东测试项目",
+                      "projectId": "Pj9909990002",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "不知道做什么的4",
+                      "projName": null,
+                      "latitude": "36.5",
+                      "productLine": "",
+                      "projectCode": "",
+                      "detailAddress": "",
+                      "projectLocalID": "9909990003",
+                      "functionType": "230",
+                      "partitionAbbr": null,
+                      "projectName": "不知道做什么的4",
+                      "projectId": "Pj9909990003",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "京东本地测试项目",
+                      "projName": "京东本地测试项目",
+                      "latitude": "36.5",
+                      "productLine": "",
+                      "projectCode": null,
+                      "detailAddress": "",
+                      "projectLocalID": "9909990004",
+                      "functionType": "230",
+                      "partitionAbbr": "京东本地测试项目",
+                      "projectName": "京东本地测试项目",
+                      "projectId": "Pj9909990004",
+                      "liveStatus": "1",
+                      "longitude": "102.12",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    },
+                    {
+                      "projectLocalName": "测试003",
+                      "projName": null,
+                      "latitude": "39.93",
+                      "productLine": "",
+                      "projectCode": null,
+                      "detailAddress": "",
+                      "projectLocalID": "test003",
+                      "functionType": "111",
+                      "partitionAbbr": null,
+                      "projectName": "测试003",
+                      "projectId": "Pj129003",
+                      "liveStatus": "0",
+                      "longitude": "116.42",
+                      "totalArea": null,
+                      "groupCode": "BR"
+                    }
+                  ]
+            }],
+            reason: ''
+        };
+    };
+}

+ 22 - 0
src/logicConfig/index.ts

@@ -0,0 +1,22 @@
+/**
+ * 存放代码中用到的一些全局变量名称之类的配置
+ * nh 2021.12.23
+ */
+export class logicConfig {
+    //在sessionStorage中存放用户ID的值的key的名称
+    private static _tokenKeyName = 'tokenId';
+    public static get tokenKeyName() {
+        return this._tokenKeyName;
+    }
+
+    //路由名称配置
+    private static _routerNameConfig={
+        //登录页面路由名称
+        loginRouteName:'/login',
+        //系统图编辑器路由名称
+        systemGraphName:'/systemGraph'
+    };
+    public static get routerNameConfig() {
+        return this._routerNameConfig;
+    }
+}

+ 21 - 0
src/main.js

@@ -0,0 +1,21 @@
+import Vue from 'vue'
+import App from './App'
+import router from './router'
+import vueStore from './store'
+import ElementUI from 'element-ui'
+import 'element-ui/lib/theme-chalk/index.css'
+Vue.use(ElementUI, { size: "small", zIndex: 1000 })
+
+import 'font-awesome/less/font-awesome.less'
+import '@/assets/style/main.less'
+import '@/assets/style/iconfont/iconfont.css'
+
+Vue.config.productionTip = false
+Vue.config.devtools = true;
+new Vue({
+    el:'#app',
+    router,
+    store: vueStore,
+    components: { App },
+    template: '<App/>'
+})

+ 20 - 0
src/router/index.js

@@ -0,0 +1,20 @@
+import Vue from 'vue'
+import Router from 'vue-router'
+import systemRoute from './system'
+import packageConfig from '../../package.json'
+import {authUtils} from '@/utils/authUtils'
+
+Vue.use(Router)
+
+let routes = []
+routes = routes.concat(systemRoute)
+
+const router = new Router({
+  mode: 'history',
+  base: packageConfig.name,
+  routes: routes
+})
+
+router.beforeEach(new authUtils().routerBeforeEach)
+
+export default router

+ 24 - 0
src/router/system.js

@@ -0,0 +1,24 @@
+import {logicConfig} from '@/logicConfig'
+import layoutMain from '@/Main.vue'
+//登录页
+import login from '@/components/frame/login.vue'
+//系统图
+import systemGraph from '@/components/systemGraph'
+
+export default [{
+  path: logicConfig.routerNameConfig.loginRouteName,
+  name: '登录页',
+  component: login
+}, {
+  path: '/',
+  name: '首页',
+  component: layoutMain
+}, {
+  path: logicConfig.routerNameConfig.systemGraphName,
+  name: '系统图',
+  component: layoutMain,
+  children: [{
+    path:'/',
+    component: systemGraph
+  }]
+}]

+ 92 - 0
src/store/index.js

@@ -0,0 +1,92 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+Vue.use(Vuex)
+
+export default new Vuex.Store({
+    state: {
+        //左侧导航菜单
+        menus: [],
+        /**
+         * 用户信息 {id:'',name:''}
+         */
+        user: {},
+        //记录上一次访问的页面
+        fromPath: '',
+        //面包屑{label:'',to:''}
+        breadcrumbs: [],
+        //项目信息{id:'',name:''}
+        projects: [],
+        selectProject: {}
+    },
+    getters: {},
+    mutations: {
+        updateMenus(state, menus) {
+            state.menus = menus;
+        },
+        updateUser(state, user) {
+            state.user = user;
+        },
+        updateFromPath(state, fromPath) {
+            state.fromPath = fromPath;
+        },
+        /**
+         * 更新面包屑数据
+         * @param {*} state 
+         * @param {*} breadcrumb {label:'',to:'/a'}
+         */
+        updateBreadcrumbs(state, breadcrumb) {
+            var newBreadcrumbs = [];
+
+            find(state.menus);
+            //如果从菜单里找到了,说明是从菜单上点击的导航
+            if (newBreadcrumbs.length > 0) {
+                newBreadcrumbs.reverse();
+                state.breadcrumbs = newBreadcrumbs;
+                return;
+            }
+
+            //找不到时,说明是自定义面包屑,比如在页面内的跳转
+            newBreadcrumbs = state.breadcrumbs;
+            newBreadcrumbs.push(breadcrumb);
+            state.breadcrumbs = newBreadcrumbs;
+
+            //从菜单里找和breadcrumb对应的
+            function find(menus) {
+                for (let i = 0; i < menus.length; i++) {
+                    let currMenu = menus[i];
+                    if (currMenu.url == breadcrumb.to) {
+                        return currMenu;
+                    }
+                    if (currMenu.child && currMenu.child.length > 0) {
+                        let findMenu = find(currMenu.child);
+                        if (findMenu) {
+                            newBreadcrumbs.push({
+                                label: findMenu.name,
+                                to: findMenu.url
+                            });
+                            return currMenu;
+                        }
+                    }
+                }
+                return null;
+            };
+        },
+        updateProjects(state, projects) {
+            state.projects = projects;
+        },
+        updateSelectProject(state, selectProject) {
+            state.selectProject = selectProject;
+        },
+        //注销
+        loginOut(state) {
+            state.menus = [];
+            state.user = {};
+            state.fromPath = '';
+            state.breadcrumbs = [];
+            state.projects = [];
+            state.selectProject = {};
+        }
+    },
+    actions: {},
+    modules: {}
+})

+ 17 - 0
src/store/sessionStore.ts

@@ -0,0 +1,17 @@
+import {logicConfig} from '@/logicConfig'
+
+export class sessionStore{
+
+    public static get userId(){
+        return sessionStorage.getItem(logicConfig.tokenKeyName);
+    }
+
+    public static set userId(val){
+        sessionStorage.setItem(logicConfig.tokenKeyName, val);
+    }
+
+    //注销
+    public static loginOut() { 
+        sessionStorage.clear();
+    };
+}

+ 73 - 0
src/utils/authUtils.ts

@@ -0,0 +1,73 @@
+import vueStore from '@/store'
+import { sessionStore } from '@/store/sessionStore'
+import { logicConfig } from '@/logicConfig'
+import { userController } from "@/controller/userController";
+
+export class authUtils {
+  /**
+   *  路由守卫, 每次路由跳转时验证登录
+   * @param {*} to
+   * @param {*} from
+   * @param {*} next
+   */
+  async routerBeforeEach(to, from, next) {
+    //访问登录页面时直接显示
+    if (to.path == logicConfig.routerNameConfig.loginRouteName) {
+      !vueStore.state.fromPath ? vueStore.commit('updateFromPath', '/') : '';
+      next();
+      return;
+    }
+
+    //如果sessionStore里没有用户ID,说明用户没有登录,此时跳转到登录页
+    var userId = sessionStore.userId;
+    if (!userId) {
+      vueStore.commit('updateFromPath', to.path);
+      next({ path: logicConfig.routerNameConfig.loginRouteName });
+      return;
+    }
+
+    //如果vueStore里存在用户ID,说明已经缓存的有用户信息,不需要再次获取
+    if (vueStore.state.user.id) {
+      //更新面包屑数据
+      vueStore.commit('updateBreadcrumbs', { to: to.path });
+      return next();
+    }
+
+
+    let userControllerInstance = new userController();
+    let userInfoResult = await userControllerInstance.getUserInfoById();
+
+    if (userInfoResult.result != "success") {
+      console.error('获取用户信息失败,原因:' + userInfoResult.reason);
+      return next({ path: logicConfig.routerNameConfig.loginRouteName });
+    }
+
+
+    var _userInfo = (userInfoResult.content[0] || {}) as any;
+    if (!_userInfo.userId) {
+      console.error('获取用户信息失败,原因:无效的用户ID');
+      return next({ path: logicConfig.routerNameConfig.loginRouteName });
+    }
+
+    vueStore.commit("updateUser", {
+      id: _userInfo.userId,
+      name: _userInfo.userName,
+    });
+    vueStore.commit("updateMenus", (window as any).__systemConf.menus);
+
+    //更新面包屑数据
+    vueStore.commit('updateBreadcrumbs', { to: to.path });
+
+    var projects = [];
+    _userInfo.projects.forEach(_c => {
+      projects.push({
+        id: _c.projectLocalID,
+        name: _c.projectLocalName
+      });
+    });
+    vueStore.commit("updateProjects", projects);
+    vueStore.commit("updateSelectProject", projects[0]);
+
+    next();
+  }
+}

+ 94 - 0
src/utils/http/axiosUtils.ts

@@ -0,0 +1,94 @@
+/**
+ * 封装axios的类
+ * nh 2021.12.23
+ */
+
+
+import axios from 'axios'
+
+var CancelToken = axios.CancelToken
+var cancel
+
+// 创建axios实例
+const axiosservice = axios.create({
+    timeout: 3000000, // 请求超时时间
+    cancelToken: new CancelToken(function executor(c) {
+        // executor 函数接收一个 cancel 函数作为参数
+        cancel = c
+    })
+})
+
+axiosservice.interceptors.request.use(
+    config => {
+        return config
+    },
+    error => {
+        return Promise.reject(error)
+    }
+)
+
+axiosservice.interceptors.response.use(
+    function (res) {
+        //在这里对返回的数据进行处理
+        let resp = res.data
+        return res
+    },
+    function (err) {
+        console.log('axios interceptors err = ', err)
+        return Promise.reject(err)
+    }
+)
+
+export class axiosUtils {
+    /**
+     * get请求
+     * @param url 
+     * @param data 
+     * @returns 
+     */
+    protected async getRequest(url: string, data: any) {
+        try {
+            let response = await this.customRequest(url, {}, data, 'get');
+            return response.data;
+        } catch (err) {
+            throw err
+        }
+    };
+
+    /**
+     * post请求
+     * @param url 
+     * @param data 
+     * @returns 
+     */
+    protected async postRequest(url: string, data: any) {
+        try {
+            let response = await this.customRequest(url, {}, data, 'post');
+            return response.data;
+        } catch (err) {
+            throw err
+        }
+    };
+
+    /**
+     * 自定义请求
+     * @param url 
+     * @param headers 
+     * @param data 
+     * @param method get | post  默认post
+     * @returns 
+     */
+    protected async customRequest(url: string, headers: any, data: any, method: string = 'post') {
+        try {
+            let response = await axiosservice({
+                url,
+                headers: headers || {},
+                data,
+                method: method == 'post' ? 'post' : 'get'
+            })
+            return response.data
+        } catch (err) {
+            throw err
+        }
+    }
+}

+ 12 - 0
src/utils/http/baseHttpUtils.ts

@@ -0,0 +1,12 @@
+/**
+ * 基础数据访问的http辅助类,供业务调用
+ * nh 2021.12.23
+ */
+
+import { httpUtils } from "./httpUtils";
+
+export class baseHttpUtils extends httpUtils {
+    constructor() {
+        super((window as any).__systemConf.baseServiceUrl);
+    };
+}

+ 25 - 0
src/utils/http/customHttpUtils.ts

@@ -0,0 +1,25 @@
+/**
+ * 自定义数据访问的http辅助类,供业务调用
+ * nh 2021.12.28
+ */
+
+ import { httpUtils } from "./httpUtils";
+
+ export class customHttpUtils extends httpUtils {
+
+    constructor(){
+        super("");
+    };
+
+     /**
+     * 自定义请求
+     * @param url 带有http前缀的完整的url地址
+     * @param headers 
+     * @param data 
+     * @param method get | post  默认post
+     * @returns 
+     */
+    public async customRequest(url: string, headers: any, data: any, method: string) {
+        return await super.customRequest(url, headers, data, method);
+    }
+ }

+ 61 - 0
src/utils/http/httpUtils.ts

@@ -0,0 +1,61 @@
+/**
+ * 一切http辅助类的基类,用于调用axios
+ * nh 2021.12.23
+ */
+
+import { axiosUtils } from "./axiosUtils"
+import { toolUtils } from "../toolUtils";
+
+export class httpUtils extends axiosUtils {
+    protected constructor(baseUrl: string) {
+        super();
+        this.baseUrl = baseUrl;
+    };
+
+
+    //根域名地址
+    private _baseUrl = '';
+    private set baseUrl(val: string) {
+        this._baseUrl = val;
+    }
+    private get baseUrl() {
+        return this._baseUrl;
+    }
+
+    private async send(url: string, data: any, superFnName: string) {
+        var newUrl = toolUtils.getBaseHttpUrl(this.baseUrl, url);
+        return await super[superFnName](newUrl, data);
+    };
+
+    /**
+     * get请求
+     * @param url 
+     * @param data 
+     * @returns 
+     */
+    public async getRequest(url: string, data: any) {
+        return await this.send(url, data, 'getRequest');
+    };
+
+    /**
+     * post请求
+     * @param url 
+     * @param data 
+     * @returns 
+     */
+    public async postRequest(url: string, data: any) {
+        return await this.send(url, data, 'postRequest');
+    };
+
+    /**
+     * 自定义请求
+     * @param url 
+     * @param headers 
+     * @param data 
+     * @param method get | post  默认post
+     * @returns 
+     */
+    protected async customRequest(url: string, headers: any, data: any, method: string) {
+        return await super.customRequest(url, headers, data, method);
+    }
+}

+ 20 - 0
src/utils/toolUtils.ts

@@ -0,0 +1,20 @@
+/**
+ * 工具类
+ * nh 2021.12.23
+ */
+
+export class toolUtils{
+    /**
+     * 拼接完整的http请求地址
+     * @param baseUrl 根域名地址
+     * @param interfaceUrl 接口地址
+     * @returns string 完整的http请求地址
+     */
+    static getBaseHttpUrl(baseUrl: string, interfaceUrl: string) { 
+        baseUrl = baseUrl + (baseUrl.lastIndexOf('/') == baseUrl.length - 1 ? '' : '/');
+        
+        var _index = interfaceUrl.indexOf('/') == 0 ? 1 : 0;
+        interfaceUrl = interfaceUrl.substring(_index);
+        return baseUrl + interfaceUrl;
+    }
+}

+ 41 - 0
tsconfig.json

@@ -0,0 +1,41 @@
+{
+  "compilerOptions": {
+    "target": "esnext",
+    "module": "commonjs",
+    "strict": false,
+    "jsx": "preserve",
+    "importHelpers": true,
+    "moduleResolution": "node",
+    "alwaysStrict": false,
+    "experimentalDecorators": true,
+    "skipLibCheck": true,
+    "esModuleInterop": true,
+    "allowSyntheticDefaultImports": true,
+    "sourceMap": true,
+    "baseUrl": ".",
+    "allowJs": true,
+    "outDir": "./",
+    "types": [
+      "webpack-env"
+    ],
+    "paths": {
+      "@/*": [
+        "src/*"
+      ]
+    },
+    "lib": [
+      "esnext",
+      "dom",
+      "dom.iterable",
+      "scripthost"
+    ]
+  },
+  "include": [
+    "src/**/*.ts",
+    "src/**/*.tsx",
+    "src/**/*.vue",
+  ],
+  "exclude": [
+    "node_modules"
+  ]
+}

+ 76 - 0
vue.config.js

@@ -0,0 +1,76 @@
+const path = require('path');
+var packageConfig = require('./package.json');
+
+function resolve(dir) {
+  return path.join(__dirname, '..', dir);
+}
+
+module.exports = {
+  devServer: {
+    port: 8081,
+    proxy: {
+      '/2dapi/jsonz': {
+        // 此处的写法,目的是为了 将 /2dapi/jsonz 替换target的值
+        // target: 'http://apmstandard/',
+        target: 'http://82.157.159.41',
+        // 允许跨域
+        changeOrigin: true,
+        ws: true,
+        pathRewrite: {
+          '^/2dapi/jsonz': ''
+        }
+      },
+      '/2dapi/spacelist': {
+        target: 'http://82.157.159.41',
+        pathRewrite: { '^/2dapi/spacelist': '' },
+        changeOrigin: true,
+        secure: false
+      },
+    }
+  },
+  pages: {
+    index: {
+      entry: 'src/main.js',
+      template: 'public/index.html',
+      filename: 'index.html'
+    }
+  },
+  publicPath: '/' + packageConfig.name,
+  //当运行vue-cli-service build时生成的生产环境构建环境的目录。用法和webpack的output.path一样,不要修改output.path
+  outputDir: packageConfig.name,
+  //放置打包后生成的静态资源(js、css、img、fonts)的目录,该目录相对于outputDir。
+  assetsDir: 'public',
+  //指定生成的index.html的输出路径,相对于outputDir。也可以是一个绝对路径。
+  indexPath: 'index.html',
+  // chainWebpack: config => {
+  //   config.module
+  //     .rule('js')
+  //     .include
+  //     .add(resolve('packages'))
+  //     .end()
+  //     .use('babel')
+  //     .loader('babel-loader')
+  //     .tap(options => { return options })
+  //     .end();
+  //   const svgRule = config.module.rule('svg');
+  //   svgRule.uses.clear();
+  //   svgRule
+  //   // .test(/\.svg$/)
+  //   .include
+  //   .add(path.resolve(__dirname,"packages/static/svg"))
+  //   .end()
+  //     .use('vue-loader')
+  //     .loader('vue-loader')
+  //     .end()
+  //     .use('vuecomponent-svg-loader')
+  //     .loader('vuecomponent-svg-loader')
+  //     .end();
+  // },
+  configureWebpack: {
+    resolve: {
+      alias: {
+        'vue$': 'vue/dist/vue.esm.js'
+      }
+    }
+  }
+};