Przeglądaj źródła

接口地址更新

yunxing 4 lat temu
rodzic
commit
6d0fca3d2d

+ 1 - 1
src/api/datacenter.ts

@@ -2,7 +2,7 @@
  * 数据中台通用接口文档
  */
 import httputils from "@/api/httputils";
-const baseApi = "/datacenter4";
+const baseApi = "/datacenter";
 
 // 查询建筑信息
 export function buildingQuery(postParams: any): any {

+ 1 - 1
src/api/equipcomponent.ts

@@ -2,7 +2,7 @@
  * 数据中台专用接口文档
  */
 import httputils from "@/api/httputils";
-const baseApi = "/equip-component4";
+const baseApi = "/equip-component";
 
 // 查询项目下所有的设备类型 --> 编辑器 添加设备 设备实例范围树
 export function categoryQuery(postParams: any): any {

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

@@ -11,6 +11,7 @@
             </ul>
         </div>
         <div class="sidebarCustom" v-show="showSidebar">
+            <!-- 加key防止siderbar收起后,点击其他tab,sidebar不展开的问题, 但是加key会导致抽屉中的组件,重新渲染 -->
             <SidebarCustom :key="showSidebarKey" :show="showSidebarLeft" :width="222">
                 <template #left>
                     <legendList class="m-legend-list" style="width: 220px" :chiceStatus="chiceStatus"></legendList>
@@ -21,7 +22,7 @@
             </SidebarCustom>
         </div>
         <!-- TODO: -->
-        <!-- <edit-info-point type='equipment'/> -->
+        <!-- <edit-info-point type="equipment"  /> -->
     </div>
 </template>
 <script>
@@ -60,9 +61,9 @@ const leftData = [
 import { SidebarCustom } from "meri-design";
 import legendList from "./leftToolBar/legendList.vue";
 import { mapMutations } from "vuex";
-import editInfoPoint from './leftToolBar/editInfoPoint'
+import editInfoPoint from "./leftToolBar/editInfoPoint";
 export default {
-    components: { legendList, SidebarCustom ,editInfoPoint},
+    components: { legendList, SidebarCustom, editInfoPoint },
     data() {
         return {
             chiceStatus: -1, //选中按钮状态

+ 6 - 15
src/components/editview/leftToolBar/addEquipmentDialog.vue

@@ -123,7 +123,7 @@
             <el-button :disabled="!tableData.length" :type="tableData.length ? 'primary' : 'info'" @click="confirm">确 定</el-button>
         </div>
         <!-- TODO:  -->
-        <!-- <edit-info-point type="equipment" @closeModal="showEditInfoPoint = false" :showDialog="showEditInfoPoint" /> -->
+        <edit-info-point type="equipment" @closeModal="showEditInfoPoint = false" :showDialog="showEditInfoPoint" />
     </el-dialog>
 </template>
 <script>
@@ -135,7 +135,7 @@ import { Select, TreeSelect } from "meri-design";
 import { cloneDeep } from "lodash";
 import { dictCategoryQuery, dictQuery, PartiInstancQuery } from "@/api/datacenter";
 import { categoryQuery, typeQuery, equipQuery } from "@/api/equipcomponent";
-import { array2Tree } from "@/utils/utils";
+import { array2Tree, mapTree } from "@/utils/utils";
 const dataTree = [
     {
         id: "0",
@@ -189,8 +189,8 @@ export default {
             timer: null,
             showPopover: false, //选择设备 popover是否显示
             dataTree1: [],
-            dataTree2: cloneDeep(dataTree),
-            dataTree3: cloneDeep(dataTree),
+            dataTree2: [], // cloneDeep(dataTree),
+            dataTree3: [], // cloneDeep(dataTree),
             selectedIds1: [],
             selectedIds2: [],
             selectedIds3: [],
@@ -312,17 +312,8 @@ export default {
             let res = await dictCategoryQuery({ type: "majorSystemEquip" });
             console.log(res);
             let tree = res?.content || [];
-            // tree.map((v) => (v.id = v.code));
-            tree.forEach((item) => {
-                item._id = item.id;
-                item.id = item.code;
-                item?.children?.forEach((detail) => {
-                    detail._id = detail.id;
-                    detail.id = detail.code;
-                    detail?.children.forEach((v) => (v.id = v.code));
-                });
-            });
-            this.dataTree1 = tree;
+            // 遍历tree,使其id属性变为为_id属性, code属性变成id属性
+            this.dataTree1 = mapTree(tree, "id->_id", "code->id");
         },
         /**
          * 空间分区类型 列表

+ 84 - 23
src/components/editview/leftToolBar/editInfoPoint.vue

@@ -63,7 +63,7 @@
         <!-- 属性 -->
         <div class="property-tab" v-show="tab === 1">
             <!-- 设备的属性 -->
-            <div class="equipment" v-if="false && type === 'equipment'">
+            <div class="equipment" v-if="true && type === 'equipment'">
                 <div class="color">
                     <p>字符颜色</p>
                     <div class="color-select">
@@ -123,7 +123,7 @@
                 <div class="fill-color">
                     <p>填充色</p>
                     <div class="color-select">
-                        <el-color-picker show-alpha @change="changeColor" class="fix-box-1" v-model="spaceData.color"></el-color-picker>
+                        <el-color-picker show-alpha @change="changeColor" class="fix-box-1" v-model="spaceData.fillColor"></el-color-picker>
                     </div>
                 </div>
                 <!-- 边框 -->
@@ -134,7 +134,7 @@
                             <div class="cololorSelect">
                                 <el-color-picker show-alpha @change="" class="fix-box-1" v-model="spaceData.borderColor"></el-color-picker>
                             </div>
-                            <span>颜色</span>
+                            <span class="text">颜色</span>
                         </div>
                         <div class="line-width">
                             <el-input-number
@@ -147,15 +147,24 @@
                                 :max="20"
                                 :maxlength="100"
                             ></el-input-number>
-                            <span>线宽</span>
+                            <span class="text">线宽</span>
                         </div>
+
                         <div class="line-width">
-                            <a-select style="width: 80px" v-model="linestyle" :default-value="borderLineOption[0].id" @change="changeLineStyle">
-                                <a-select-option v-for="item in borderLineOption" :key="item.id" :label="item.src" :value="item.id">
+                            <el-select
+                                v-model="spaceData.linestyle"
+                                :default-value="borderLineOption[0].id"
+                                size="mini"
+                                style="width: 90px"
+                                placeholder="请选择"
+                                :ref="`selectLine`"
+                                @change="changeLineStyle()"
+                            >
+                                <el-option v-for="item in borderLineOption" :key="item.id" :label="item.src" :value="item.id">
                                     <img :src="item.src" alt width="60" />
-                                </a-select-option>
-                            </a-select>
-                            <span>线型</span>
+                                </el-option>
+                            </el-select>
+                            <span class="text">线型</span>
                         </div>
                     </div>
                 </div>
@@ -208,7 +217,7 @@ export default {
     data() {
         return {
             dialogVisible: false,
-            tab: 0,
+            tab: 1,
             dynamicTags: Array(10).fill(123),
             inputVisible: false,
             inputValue: null,
@@ -225,14 +234,17 @@ export default {
                 size: 1,
                 iconUrl: undefined,
             },
+            /** -------------------设备属性使用值end-------------------------- */
+            /** -------------------空间属性使用值start-------------------------- */
             spaceData: {
                 color: "",
                 size: 1,
-                iconUrl: undefined,
+                fillColor: "",
                 borderColor: "#cccccc",
                 linewidth: 1,
+                linestyle: "Solid",
+                linestyle: "",
             },
-            linewidth: 1,
             borderLineOption: [
                 {
                     id: "Solid",
@@ -247,30 +259,49 @@ export default {
                     src: require("@/assets/images/dotLine.png"),
                 },
             ],
-            linestyle: "solid",
-            /** -------------------设备属性使用值end-------------------------- */
+            /** -------------------空间属性使用值end-------------------------- */
         };
     },
     watch: {
         // 是否打开弹窗
         showDialog(val) {
             this.dialogVisible = val;
-            if (val) {
-                this.initModal();
-            }
+            // 打开弹窗
+            this.initDialog();
+        },
+        spaceData: {
+            handler(newV, oldV) {
+                // console.log("spaceData");
+                if (newV.linestyle) {
+                    this.$nextTick(() => {
+                        this.setLineStyle();
+                    });
+                }
+            },
+            deep: true,
         },
     },
     beforeMount() {},
     mounted() {
-        window.vm = this;
+        // window.vm = this;
     },
     methods: {
-        initModal() {},
         // 展示标签输入框
         showInput() {
             this.inputVisible = true;
+            this.initDialog();
+        },
+        initDialog() {
+            this.spaceData = {
+                color: "",
+                size: 1,
+                fillColor: "",
+                borderColor: "#cccccc",
+                linewidth: 1,
+                linestyle: "",
+            };
             this.$nextTick(() => {
-                this.$refs.saveTagInput.$refs.input.focus();
+                this.setLineStyle();
             });
         },
         // 添加标签
@@ -306,7 +337,7 @@ export default {
         /** ----------设备的属性---------- */
         // 改变颜色
         changeColor(val) {
-            console.log("changeColor: ", val);
+            // console.log("changeColor: ", val);
         },
         beforeAvatarUpload(file) {
             let that = this;
@@ -392,6 +423,36 @@ export default {
                 (second > 10 ? second : "0" + second)
             );
         },
+        /**------------空间的属性----------------- */
+        changeLineWidth() {},
+        changeLineStyle() {
+            // this.setLineStyle();
+        },
+        setLineStyle() {
+            let img = this.borderLineOption.filter((v) => v.id === this.spaceData.linestyle)[0]?.src;
+            // console.log(img);
+            if (img) {
+                this.$refs.selectLine?.$el?.children[0].children[0].setAttribute(
+                    "style",
+                    `
+                        background: url(${img}) no-repeat;
+                        color: rgba(0,0,0,0);
+                        text-indent: -9999px;
+                        background-position: 15px center;
+                        background-size: 40px 1px;
+                    `
+                );
+            } else {
+                this.$refs.selectLine?.$el?.children[0].children[0].setAttribute(
+                    "style",
+                    `
+                        background: inherit;
+                        color:inherit;
+                        text-indent: 0;
+                    `
+                );
+            }
+        },
     },
 };
 </script>
@@ -575,7 +636,7 @@ export default {
                 // height: 20px;
                 .color {
                     margin-right: 20px;
-                    p{
+                    p {
                         margin-bottom: 10px;
                     }
                     .color-select {
@@ -617,7 +678,7 @@ export default {
                         margin-left: 20px;
                         position: relative;
                     }
-                    span {
+                    span.text {
                         font-size: 12px;
                         color: #1f2429;
                         margin-top: 4px;

+ 1 - 1
src/components/editview/rightPropertyBar/baseLinePro.vue

@@ -110,7 +110,6 @@ export default {
           id: "Dashed",
           src: require("@/assets/images/dashedLine.png"),
         },
-        {},
       ],
       // 箭头
       arrowType: [
@@ -170,6 +169,7 @@ export default {
       this.linewidth = val;
     },
     lineStyle(val) {
+        console.log('lineStyle::::')
       this.linestyle = val;
     },
     Begin(val) {

src/components/homeView/topoImageCard.vue → src/components/homeView/planImageCard.vue


+ 3 - 3
src/components/homeView/recycle.vue

@@ -12,7 +12,7 @@
     </div>
     <div class="main-body" :class="{'no-data': !cardList.length}" v-loading="recycleLoading">
       <template v-for="t in cardList">
-        <topoImageCard :isRecycle="true" :data="t" :key="t.id" @recover="recover" @deleteRecycle="deleteRecycle"></topoImageCard>
+        <planImageCard :isRecycle="true" :data="t" :key="t.id" @recover="recover" @deleteRecycle="deleteRecycle"></planImageCard>
       </template>
       <div v-if="!cardList.length" style="margin-top: 112px;">
         <img :src="require('@/assets/images/no-data.png')" style="width: 116px;height:116px;">
@@ -27,7 +27,7 @@
 <script>
 import { queryDraftsGraph } from "@/api/home"
 import { Dropdown } from "meri-design";
-import topoImageCard from "@/components/homeView/topoImageCard.vue";
+import planImageCard from "@/components/homeView/planImageCard.vue";
 import recycleDialog from "@/components/homeView/recycleDialog.vue";
 export default {
   data() {
@@ -90,7 +90,7 @@ export default {
       this.$emit('recycleDialogClose');
     }
   },
-  components: { Dropdown, topoImageCard, recycleDialog },
+  components: { Dropdown, planImageCard, recycleDialog },
   watch: {
     // 排序方式修改
     selVal(n, o) {

+ 0 - 255
src/components/homeView/topoImageCard copy.vue

@@ -1,255 +0,0 @@
-<!--拓扑图缩略图卡片-->
-<template>
-    <el-card :class="{ 'box-card': true, active: data.checked }" shadow="hover" :body-style="{ padding: '0px' }">
-        <div class="image" v-if="!data.pic" style="line-height: 120px; text-align: center">
-            <img :src="require('@/assets/images/noImg.png')" style="height: 60px" />
-        </div>
-        <img class="image" v-else :src="`/image-service/common/image_get?systemId=dataPlatform&key=${data.pic}`" />
-        <div class="shadow image" v-if="!isRecycle" @click.stop="toEdit">
-            <el-checkbox v-model="data.checked" class="shadowCheck" @change="changeCheck"></el-checkbox>
-        </div>
-        <div class="content">
-            <div>
-                <span class="title" :title="data.name">{{ data.name }}</span>
-                <!-- <span class="title" :title="data.name">中央空调系统中央空调系统中央空调系统中央空调系统</span> -->
-                <div class="func">
-                    <el-popover placement="top" width="220" trigger="hover" popper-class="customPop">
-                        <p>版本 : {{ data.version }}</p>
-                        <p>更新时间 : {{ data.lastUpdate }}</p>
-                        <p>更新人 : {{ data.putUser || "张三" }}</p>
-                        <span slot="reference">
-                            <img :src="require('@/assets/images/tips.png')" style="width: 20px; height: 20px" />
-                        </span>
-                    </el-popover>
-                    <el-dropdown :hide-on-click="false" placement="bottom-start" trigger="click" @command="handleCommand">
-                        <span class="el-dropdown-link">
-                            <img :src="require('@/assets/images/more.png')" style="width: 20px; height: 20px" />
-                        </span>
-                        <el-dropdown-menu slot="dropdown">
-                            <template v-for="t in moreList">
-                                <el-dropdown-item :key="t.name" :command="t.name" v-if="dropdownItemShow(t)">{{ t.label }}</el-dropdown-item>
-                            </template>
-                        </el-dropdown-menu>
-                    </el-dropdown>
-                </div>
-            </div>
-            <!-- 下方标签 -->
-            <div class="tags">
-                <span v-for="(t, i) in data.label" :key="data.name + i">{{ t }}</span>
-                <el-popover v-if="data.label.length" placement="top" trigger="hover" popper-class="tags-popover">
-                    <div>
-                        <span v-for="(t, i) in data.label" :key="data.name + i">{{ t }}</span>
-                    </div>
-
-                    <i slot="reference"> ... </i>
-                </el-popover>
-            </div>
-            <!-- <div class="tags">
-                <span v-for="(t, i) in data.label" :key="data.name + i">{{ t }}</span>
-            </div> -->
-            <!-- <span v-for="(t,i) in data.label.slice(0,2).concat(['...'])" :key="data.name + i" @click="handleTagClick(t)">{{t}}</span> -->
-        </div>
-    </el-card>
-</template>
-<script>
-import { publishGraph } from "@/api/home";
-export default {
-    props: {
-        data: {
-            type: Object,
-            default: () => {
-                return {};
-            },
-        },
-        isRecycle: {
-            type: Boolean,
-            default: false,
-        },
-        isPub: {
-            type: Number,
-            default: 0,
-        },
-    },
-    data() {
-        return {
-            moreList: [
-                { name: "edit", label: "编辑", show: "any" }, // 类型为 已发布 时出现
-                { name: "rename", label: "重命名", show: "any" }, // 类型为 未发布/已发布 时出现
-                { name: "publish", label: "发布", show: 0 }, // 类型为 未发布 时出现
-                { name: "download", label: "下载", show: 1 }, // 类型为 已发布 时出现
-                { name: "editTag", label: "修改标签", show: 1 }, // 类型为 已发布 时出现
-                { name: "moveTo", label: "移动到", show: "any" }, // 类型为 未发布/已发布 时出现
-                { name: "delete", label: "删除", show: "any" }, // 类型为 未发布/已发布 时出现
-                { name: "recover", label: "恢复", show: "isRecycle" }, // 类型为 回收站 时出现
-                { name: "deleteRecycle", label: "永久删除", show: "isRecycle" }, // 类型为 回收站 时出现
-            ],
-            checked: false,
-            showMoreTags: false, //是否显示更多标签
-        };
-    },
-    methods: {
-        // 显示下拉框内容选项判断
-        dropdownItemShow(item) {
-            return (!this.isRecycle && (item.show == "any" || item.show == this.isPub)) || (this.isRecycle && item.show == "isRecycle");
-        },
-        // 复选框改变时
-        changeCheck() {
-            this.$emit("changeCheck", this.data);
-        },
-        // 点击更多中的命令时
-        handleCommand(command) {
-            const pa = {
-                graphId: this.data.graphId,
-                id: this.data.id,
-            };
-            switch (command) {
-                case "rename":
-                case "download":
-                case "editTag":
-                case "moveTo":
-                case "delete":
-                case "recover":
-                case "deleteRecycle":
-                    this.$emit(command, this.data);
-                    break;
-                case "publish":
-                    publishGraph(pa).then((res) => {
-                        if (res.result == "success") {
-                            this.$message.success("发布成功");
-                            this.$emit("publishSuc");
-                        } else {
-                            this.$message.success("发布失败");
-                        }
-                    });
-                    break;
-            }
-        },
-        // 进入编辑页面
-        toEdit(e) {
-            const targetName = e.target.nodeName.toLowerCase();
-            if (targetName == "div") {
-                this.$emit("toEdit", this.data);
-            }
-        },
-        /**
-         * 点击...标签,显示popover所有标签
-         */
-        handleTagClick(item) {
-            if (item === "...") {
-                this.showMoreTags = true;
-            }
-        },
-    },
-};
-</script>
-<style lang="less" scoped>
-.box-card {
-    position: relative;
-    width: 260px;
-    height: 193px;
-    border-radius: 8px;
-    margin-right: 20px;
-    margin-bottom: 20px;
-    cursor: pointer;
-    &:hover,
-    &.active {
-        border-color: #0091ff80;
-        box-shadow: 0px 8px 16px 0px rgba(195, 199, 203, 0.4);
-        .shadow {
-            display: block;
-        }
-        .content {
-            .func {
-                display: block;
-            }
-        }
-    }
-    .image {
-        display: block;
-        width: 100%;
-        height: 120px;
-        background-color: #f7f9fa;
-    }
-    .shadow {
-        display: none;
-        position: absolute;
-        top: 0;
-        left: 0;
-        background-color: #8d939926;
-        .shadowCheck {
-            position: absolute;
-            top: 8px;
-            left: 12px;
-        }
-    }
-    .content {
-        padding: 8px 12px;
-        vertical-align: middle;
-        .title {
-            display: inline-block;
-            color: #1f2429;
-            margin: 0;
-            max-width: 182px;
-            white-space: nowrap;
-            overflow: hidden;
-            text-overflow: ellipsis;
-        }
-        .func {
-            & > * + * {
-                margin-left: 8px;
-            }
-            display: none;
-            float: right;
-            vertical-align: middle;
-            i {
-                font-size: 20px;
-            }
-        }
-        & > .tags {
-            margin-top: 4px;
-            & > span {
-                display: inline-block;
-                padding: 1px 6px;
-                font-size: 12px;
-                color: #8d9399;
-                line-height: 18px;
-                border: 1px solid #8d9399;
-                border-radius: 3px;
-                margin-bottom: 11px;
-                margin-right: 4px;
-                // & + span {
-                //     margin-left: 4px;
-                // }
-            }
-        }
-    }
-}
-.customPop {
-    p {
-        font-size: 12px;
-        & + p {
-            margin-top: 10px;
-        }
-    }
-}
-.tags-popover {
-    div {
-        margin-top: 4px;
-        max-width: 480px !important;
-        max-height: 200px !important;
-        overflow: auto !important;
-        & > span {
-            color: red;
-            display: inline-block;
-            padding: 1px 6px;
-            font-size: 12px;
-            color: #8d9399;
-            line-height: 18px;
-            border: 1px solid #8d9399;
-            border-radius: 3px;
-            margin-bottom: 11px;
-            margin-right: 4px;
-        }
-    }
-}
-</style>

+ 39 - 2
src/utils/utils.js

@@ -5,7 +5,7 @@
  * @param {String} id id名称,默认为"id"
  */
 function array2Tree(arr, parentId, id = "id") {
-    if (!Array.isArray(arr) || !arr.length) throw new Error("请传入数组");
+    if (!Array.isArray(arr)) throw new Error("请传入数组");
     if (!parentId || typeof parentId !== "string") throw new Error("请传入 父id 字段名称");
     let map = {};
     arr.map((item) => (map[item[id]] = item));
@@ -21,4 +21,41 @@ function array2Tree(arr, parentId, id = "id") {
     map = null;
     return roots;
 }
-export { array2Tree };
+// const person = {
+//     name: "sudada",
+//     gender: "female",
+// };
+// const omit = (prop, { [prop]: _, ...rest }) => rest;
+// const newObj = omit("name", person); // 删除 name 属性
+
+/**
+ *
+ * @param {*} tree 需要转换的tree,可以是树,或者是数组,每一项是树
+ * @param  {...any} transfor  转换的键名  'id->_id' 老键名->新键名    mapTree(tree, "id->_id", "code->id")
+ */
+function mapTree(tree, ...transfor) {
+    //  传入数组
+    let arrayTree = Array.isArray(tree);
+    if (arrayTree) {
+        return tree.map((i) => mapTree(i, ...transfor));
+    } else {
+        // 传入对象
+        const haveChildren = Array.isArray(tree.children) && tree.children.length;
+        let obj = {};
+        transfor.map((v) => {
+            const key = v.split("->")[0],
+                newKey = v.split("->")[1];
+            obj[newKey] = tree[key];
+        });
+        return {
+            //分别将我们查询出来的值做出改变他的key
+            ...tree,
+            ...obj,
+            // _id: tree.id,
+            // id: tree.code,
+            //判断它是否存在子集,若果存在就进行再次进行遍历操作,知道不存在子集便对其他的元素进行操作
+            children: haveChildren ? tree.children.map((i) => mapTree(i, ...transfor)) : [],
+        };
+    }
+}
+export { array2Tree, mapTree };

+ 7 - 5
src/views/home.vue

@@ -75,7 +75,7 @@
                             <div class="floor" v-for="floor in buildingData.floorList" :key="floor.floorId">
                                 <p class="floor-name">{{ floor.localName }}</p>
                                 <template v-for="t in floor.planarGraphList">
-                                    <topoImageCard
+                                    <planImageCard
                                         :isPub="isPub"
                                         :data="t"
                                         :key="`${Math.random()}_${t.id}`"
@@ -87,7 +87,7 @@
                                         @editTag="editTag"
                                         @toEdit="toEdit(t, floor.infos)"
                                         @download="download"
-                                    ></topoImageCard>
+                                    ></planImageCard>
                                 </template>
                             </div>
                         </div>
@@ -121,7 +121,7 @@
 import { Select, Dropdown, DropDownButton } from "meri-design";
 import leftFolder from "@/components/homeView/leftFolder.vue";
 import leftAsideTree from "@/components/homeView/leftAsideTree.vue";
-import topoImageCard from "@/components/homeView/topoImageCard.vue";
+import planImageCard from "@/components/homeView/planImageCard.vue";
 import { queryDraftsGraph, queryPubGraph } from "@/api/home";
 import { planerQuery, pubPlanerQuery } from "@/api/labsl";
 import rename from "@/components/homeView/rename";
@@ -140,7 +140,7 @@ export default {
         Select,
         Dropdown,
         DropDownButton,
-        topoImageCard,
+        planImageCard,
         rename,
         move,
         deleteDialog,
@@ -378,7 +378,7 @@ export default {
          * 跳转编辑器
          */
         toEdit(data, infos) {
-            const { id, graphId } = data,
+            const { id, graphId, buildingId, floorId } = data,
                 { floorMap } = infos,
                 { folderId, folderName } = this;
             console.log(data, infos);
@@ -387,6 +387,8 @@ export default {
             this.$router.push({
                 name: "Editer",
                 query: {
+                    buildingId,
+                    floorId,
                     id,
                     graphId,
                     floorMap: infos.floorMap,

+ 4 - 4
vue.config.js

@@ -10,21 +10,21 @@ module.exports = {
         open: true,
         proxy: {
             "/labsl": {
-                target: "http://60.205.177.43:28888",
+                target: "http://60.205.177.43:8080",
                 changeOrigin: true,
                 secure: false,
             },
             "/meiku": {
-                target: "http://60.205.177.43:28888",
+                target: "http://60.205.177.43:8080",
                 changeOrigin: true,
                 secure: false,
             },
-            "/datacenter4": {
+            "/datacenter": {
                 target: "http://60.205.177.43:8080",
                 changeOrigin: true,
                 secure: false,
             },
-            "/equip-component4": {
+            "/equip-component": {
                 target: "http://60.205.177.43:8080",
                 changeOrigin: true,
                 secure: false,