zhuangyunsheng преди 4 месеца
родител
ревизия
1fd9a66141

+ 4 - 2
.env.development

@@ -6,9 +6,11 @@ VUE_APP_TITLE = EasyDo运营中心
 
 # 接口地址
 # VUE_APP_API_BASEURL = http://www.qdeasydo.com/api
+# VUE_APP_OPS_BASEURL = http://www.qdeasydo.com/ops
 # VUE_APP_ZEROAPI_BASEURL = http://www.qdeasydo.com
-VUE_APP_API_BASEURL  = http://192.168.101.93:8804
-VUE_APP_ZEROAPI_BASEURL  = http://192.168.101.93:8804
+VUE_APP_API_BASEURL  = http://192.168.101.93:8802
+VUE_APP_OPS_BASEURL = http://192.168.101.93:8804
+VUE_APP_ZEROAPI_BASEURL  = http://192.168.101.93:8802
 
 # 本地端口
 VUE_APP_PORT = 3200

+ 3 - 3
src/api/model/auth.js

@@ -4,7 +4,7 @@ import http from "@/utils/request"
 
 export default {
 	token: {
-		url: `${config.API_URL}/api/auth/login`,
+		url: `${config.API_URL}/ops/auth/login`,
 		name: "登录获取TOKEN",
 		post: async function (data = {}) {
 			const query = {
@@ -18,7 +18,7 @@ export default {
 	},
 
 	codeImg: {
-		url: `${config.API_URL}/api/auth/code`,
+		url: `${config.API_URL}/ops/auth/code`,
 		name: "获取登录验证码",
 		get: async function () {
 			return await http.get(this.url);
@@ -26,7 +26,7 @@ export default {
 	},
 
     updatePassword: {
-		url: `${config.API_URL}/api/users/updatePass`,
+		url: `${config.API_URL}/ops/users/updatePass`,
 		name: "修改密码",
 		post: async function (data = {}) {
 			const query = {

+ 1 - 1
src/api/model/carwash.js

@@ -3,7 +3,7 @@ import http from "@/utils/request"
 
 export default {
     check: {
-        url: `${config.API_URL}//zeroapi/v2/cwashm/device/check`,
+        url: `${config.API_URL}/zeroapi/v2/cwashm/device/check`,
         name: "查询在线状态",
         get: async function (data = {}) {
             return await http.post(this.url, data);

+ 0 - 1
src/components/scTable/index.vue

@@ -28,7 +28,6 @@ import VxeUI from "vxe-pc-ui";
 import XEUtils from "xe-utils";
 import store from "@/store";
 import config from "@/config/table";
-import { mockData } from "@/mock/mock";
 import pagerBatchDel from "./renderer/pager-batch-del";
 
 const props = defineProps({

+ 34 - 0
src/config/route.js

@@ -0,0 +1,34 @@
+// 静态路由配置
+// 书写格式与动态路由格式一致,全部经由框架统一转换
+// 比较动态路由在meta中多加入了role角色权限,为数组类型。一个菜单是否有权限显示,取决于它以及后代菜单是否有权限。
+// routes 显示在左侧菜单中的路由(显示顺序在动态路由之前)
+// 示例如下
+
+const routes = [
+    {
+        name: "device",
+        path: "/device",
+        meta: { title: "在线设备", icon: "ant-design:code-sandbox-outlined", affix: true },
+        component: "device"
+    },
+    {
+        name: "group",
+        path: "/group",
+        meta: { title: "组控识别", icon: "clarity:organization-line" },
+        component: "group"
+    },
+    {
+        name: "record",
+        path: "/record",
+        meta: { title: "识别记录", icon: "ant-design:reconciliation-outlined" },
+        component: "record"
+    },
+    {
+        name: "system",
+        path: "/system",
+        meta: { title: "系统配置", icon: "uil:setting" },
+        component: "system"
+    }
+]
+
+export default routes;

+ 9 - 7
src/layout/components/tags.vue

@@ -1,13 +1,15 @@
 <template>
 	<div class="aminui-tags">
 		<ul ref="tags">
-			<li v-for="tag in tagList" v-bind:key="tag" :class="[isActive(tag) && 'active', tag.meta.affix && 'affix']" @contextmenu.prevent="openContextMenu($event, tag)">
-                <router-link v-if="!tag.meta?.hidden" :to="tag">
-                    <sc-iconify v-if="tag.meta?.icon" style="margin-left: 0;margin-right: 5px;" :icon="tag.meta.icon" size="16"></sc-iconify>
-                    <scTooltip :content="tag.meta.title"></scTooltip>
-				    <el-icon v-if="!tag.meta.affix" @click.prevent.stop='closeSelectedTag(tag)'><el-icon-close /></el-icon>
-				</router-link>
-			</li>
+            <template v-for="tag in tagList" v-bind:key="tag">
+                <li v-if="!tag.meta?.hidden" :class="[isActive(tag) && 'active', tag.meta.affix && 'affix']" @contextmenu.prevent="openContextMenu($event, tag)">
+                    <router-link :to="tag">
+                        <sc-iconify v-if="tag.meta?.icon" style="margin-left: 0;margin-right: 5px;" :icon="tag.meta.icon" size="16"></sc-iconify>
+                        <scTooltip :content="tag.meta.title"></scTooltip>
+                        <el-icon v-if="!tag.meta.affix" @click.prevent.stop='closeSelectedTag(tag)'><el-icon-close /></el-icon>
+                    </router-link>
+                </li>
+            </template>
 		</ul>
 	</div>
 

+ 3 - 1
src/router/index.js

@@ -41,6 +41,8 @@ router.beforeEach(async (to, from, next) => {
 
 	let token = tool.cookie.get("TOKEN");
 
+	let user = tool.data.get("USER_INFO");
+
 	if (to.path === "/login") {
 		// 删除路由(替换当前layout路由)
 		router.addRoute(routes[0])
@@ -56,7 +58,7 @@ router.beforeEach(async (to, from, next) => {
 		return false;
 	}
 
-	if (!token) {
+	if (!token || XEUtils.get(user, "id") != 1) {
 		next({ path: "/login" });
 		return false;
 	}

+ 1 - 1
src/style/app.scss

@@ -47,7 +47,7 @@ a,button,input,textarea{-webkit-tap-highlight-color:rgba(0,0,0,0);box-sizing: bo
 .aminui-side-scroll {overflow: auto;overflow-x:hidden;flex: 1;}
 
 .el-menu, .side-menu-popper .el-menu .el-menu-item {--el-menu-active-color: var(--el-fill-color-blank);--el-menu-hover-bg-color: var(--el-menu-bg-color);--el-menu-item-hover-fill: var(--el-menu-bg-color);}
-.el-menu .el-menu-item.is-active, .el-menu .el-menu-item.is-active:hover, .el-menu--collapse .el-sub-menu.is-active .el-sub-menu__title {background: var(--el-color-primary);}
+.el-menu .el-menu-item.is-active, .el-menu .el-menu-item.is-active:hover, .el-menu--collapse .el-sub-menu.is-active .el-sub-menu__title {background: var(--el-color-primary);--el-menu-active-color: var(--el-color-white);}
 
 .aminui-side-bottom {border-top: 1px solid #ebeef5;height:51px;cursor: pointer;display: flex;align-items: center;justify-content: center;}
 .aminui-side-bottom i {font-size: 16px;}

+ 17 - 0
src/style/dark.scss

@@ -19,6 +19,11 @@ html.dark {
         .el-input__prefix, .el-input__clear, .el-input__password {color: #fff;}
     }
 
+	//个人信息
+    .user-container .el-card .el-form {
+        .el-form-item__label, .el-form-item__content {color: unset;}
+    }
+
 	//框架
 	.aminui-header {background: var(--el-bg-color-overlay);border-bottom: 1px solid var(--el-border-color-light);height:59px;}
 	.aminui-side {background: var(--el-bg-color-overlay);border-color: var(--el-border-color-light);}
@@ -27,6 +32,14 @@ html.dark {
 	.aminui-topbar, .aminui-tags {background: var(--el-bg-color-overlay);border-color: var(--el-border-color-light);}
 	.aminui-main {background: var(--el-bg-color);}
 	.drawerBG {background: var(--el-bg-color);}
+	.el-tabs {background: var(--el-bg-color);}
+    .el-card .el-card__header {background: var(--el-bg-color-overlay);}
+    .el-badge__content {border: none;}
+
+    .home-container .el-card.home-menu .el-card__body {
+        .menu-item {background-color: var(--el-bg-color-overlay);}
+        .menu-item:hover {box-shadow: 1px 0 var(--el-text-color-disabled), 0 1px var(--el-text-color-disabled), 1px 1px var(--el-text-color-disabled), 1px 0 var(--el-text-color-disabled) inset, 0 1px var(--el-text-color-disabled) inset;}
+    }
 	.aminui-header-menu .el-menu {--el-menu-bg-color:var(--el-bg-color-overlay) !important;--el-menu-hover-bg-color: #171819 !important;}
 	.aminui-header-menu .el-menu .el-sub-menu__title {background-color:transparent !important;}
 
@@ -43,4 +56,8 @@ html.dark {
 
     .scPageHeader {background: var(--el-bg-color);}
     .scPageHeader .el-page-header__header .el-page-header__extra .extra-title {color: #fff;}
+
+    .vxe-grid.size--mini {
+        .vxe-table-query {background-color: var(--el-bg-color-overlay);}
+    }
 }

+ 4 - 4
src/views/home/index.vue

@@ -28,7 +28,7 @@
                     <el-col :md="6" :xs="24" v-for="item in filterCardList(cardItem)" :key="item.name">
                         <el-dropdown v-if="item.children" placement="bottom-end" @command="command">
                             <div class="menu-item">
-                                <sc-iconify :icon="item.meta.icon" size="26" color="#3f88fd"></sc-iconify>
+                                <sc-iconify :icon="item.meta.icon" size="26"></sc-iconify>
                                 <div class="menu-item__tooltip"><scTooltip :content="item.meta?.title"></scTooltip></div>
                                 <el-badge :value="36" :max="99"></el-badge>
                             </div>
@@ -44,7 +44,7 @@
                         </el-dropdown>
                         
                         <div v-else class="menu-item" @click="showMenu(cardItem, item)">
-                            <sc-iconify :icon="item.meta.icon" size="26" color="#3f88fd"></sc-iconify>
+                            <sc-iconify :icon="item.meta.icon" size="26"></sc-iconify>
                             <div class="menu-item__tooltip"><scTooltip :content="item.meta?.title"></scTooltip></div>
                             <el-popover popper-class="mock-detail-popover" placement="right" :width="400" trigger="click" @hide="popoverHide(item)">
                                 <template #reference>
@@ -162,7 +162,7 @@ const showMenu = (cardItem, item) => {
 
     .el-card {
         background: transparent;margin-bottom: 0;border: none;
-        :deep(.el-card__header) {padding: 22px 0 10px;border-bottom: none;font-size: 20px;}
+        :deep(.el-card__header) {padding: 22px 0 10px;background: transparent;border-bottom: none;font-size: 20px;}
     }
 
     .el-card.home-menu :deep(.el-card__header) {display: flex;align-items: center;
@@ -174,7 +174,7 @@ const showMenu = (cardItem, item) => {
         .el-dropdown {width: 100%;}
         .menu-item {cursor: pointer;position: relative;display: flex;align-items: center;width: calc(100% - 2px);padding: 25px;background-color: #fff;border-radius: 10px;font-size: 16px;}
         .menu-item:hover {box-shadow: 1px 0 #dbdbdb, 0 1px #dbdbdb, 1px 1px #dbdbdb, 1px 0 #dbdbdb inset, 0 1px #dbdbdb inset;}
-        .sc-iconify-icon {margin-right: 20px;}
+        .sc-iconify-icon {margin-right: 20px;color: var(--el-color-primary);}
         .menu-item__tooltip {display: flex;width: calc(100% - 26px - 20px);}
         .el-badge {right: -20px;top: -20px;}
     }

+ 0 - 2
src/views/login/index.vue

@@ -56,7 +56,6 @@
 
 <script>
 import { VxeUI } from "vxe-table";
-import { mockData } from "@/mock/mock";
 
 export default {
     data() {
@@ -150,7 +149,6 @@ export default {
                     expires: this.form.rememberMe ? 24 * 60 * 60 : 2 * 60 * 60
                 });
                 this.$TOOL.data.set("USER_INFO", user.user);
-                this.$TOOL.data.set("MENU", mockData.menus);
                 
                 this.$router.replace({ path: this.$route.redirectedFrom ? this.$route.redirectedFrom.fullPath : "/" });
                 this.$message.success("Login Success 登录成功");

+ 7 - 0
vue.config.js

@@ -24,6 +24,13 @@ module.exports = defineConfig({
 					"^/api": ""
 				}
 			},
+            "/ops": {
+				target: process.env.VUE_APP_OPS_BASEURL,
+				ws: true,
+				pathRewrite: {
+					"^/ops": ""
+				}
+			},
             "/zeroapi": {
 				target: process.env.VUE_APP_ZEROAPI_BASEURL,
 				ws: true,