From 91f291a2c3b4e41fc0b44f2395ad5c956803ee8c Mon Sep 17 00:00:00 2001
From: 廖井涛 <2265517004@qq.com>
Date: 星期六, 11 五月 2024 08:34:24 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override

---
 north-glass-erp/northglass-erp/src/layout/MainErpView.vue |  394 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 394 insertions(+), 0 deletions(-)

diff --git a/north-glass-erp/northglass-erp/src/layout/MainErpView.vue b/north-glass-erp/northglass-erp/src/layout/MainErpView.vue
new file mode 100644
index 0000000..86a58c2
--- /dev/null
+++ b/north-glass-erp/northglass-erp/src/layout/MainErpView.vue
@@ -0,0 +1,394 @@
+<script setup>
+import { RouterLink,useRouter} from 'vue-router'
+import  useUserInfoStore from '@/stores/userInfo'
+import request from "@/utils/request"
+import {ElMessage} from "element-plus"
+import {onMounted, reactive, ref, watch} from "vue"
+import deepClone from "@/utils/deepClone"
+import userInfo from '@/stores/userInfo'
+import {Close, Grid, Histogram, MessageBox, SwitchButton} from "@element-plus/icons-vue"
+import { useI18n } from 'vue-i18n'
+import i18n from "@/lang/index"
+const lang = i18n.global.locale.value
+//璇█鑾峰彇
+const { t } = useI18n()
+const store=userInfo()
+
+const router = useRouter()
+const userStore = useUserInfoStore()
+const user = userStore.user.userName
+//鐩戝惉寮傛杩斿洖浠g爜
+watch(()=>userStore.responseCode,(newVal) => {
+    switch (newVal){
+      case 401:{
+        if(userStore.msg.split('.')[1] === 'search'){
+          router.push({path:'/main/user/notPermission'});
+        }else{
+          ElMessage.warning(t('error.Code_401'))
+        }
+        userStore.responseCode=null
+        break
+      }
+      case 402:{
+        ElMessage.warning(t('error.Code_402'))
+        router.push("/login")
+        break
+      }
+      default:{
+        break
+      }
+    }
+  }
+)
+
+store.createWebSocket();
+
+// 閫�鍑虹櫥褰�
+function quit(){
+  userStore.$patch({
+    user:null
+  })
+  request.post('/userInfo/logout').finally(()=>{
+    router.push("/login")
+  })
+
+  //
+}
+
+
+
+
+//鎻愬彇妯″潡鍒楄〃
+let menuList=$ref([])
+onMounted(()=>{
+  request.get(`/menu/getMenu/${lang}`).then((res) => {
+    if(res.code==200){
+      menuList= deepClone(res.data)
+    }
+  })
+
+})
+
+
+//鑾峰彇鑿滃崟鍒楄〃
+let menuItemList=$ref([])
+request.get(`/menuItem/getMenuItem/${lang}`).then((res) => {
+  if(res.code==200){
+    menuItemList= deepClone(res.data)
+  }else{
+    ElMessage.warning(res.msg)
+    router.push("/login")
+  }
+})
+
+const menu = ref(null)
+let indexKey = ref(null)
+function handleOpen(key) {
+  indexKey.value=key
+}
+watch(indexKey,(newVal,oldVal) => {
+  if(oldVal !== newVal && oldVal !== null){
+    menu.value.close(oldVal)
+  }
+},
+    {deep:true}
+)
+
+router.beforeEach((to, from) => {
+  //return false
+})
+
+
+let openFlag = $ref(null)
+//鍘熷鑿滃崟鎵撳紑
+const openMenu = (menuID) => {
+    if(menuID===openFlag){
+      openFlag = null
+    }else {
+      openFlag = menuID
+    }
+}
+
+
+</script>
+
+<template>
+  <div>
+    <el-container>
+      <el-header >
+        <div style="height: 100%;width: 100%;display: flex">
+          <img src="../assets/northGlass.ico" alt="" style="max-width: 100%;max-height: 100%">
+          <h3 style="margin: 1rem  ;font-weight: bold;width: 40vw;"> {{$t('main.titleFirst') + user + $t('main.titleLast')}}</h3>
+          <span style="height: 70%;width: 78vw;margin-top: 1.5rem;" >
+
+<!--            <el-button   class="sys-quit" @click="quit"  type="info" round>-->
+              <el-icon @click="quit"  style="float: right;margin-right: 1rem" size="large" ><SwitchButton  size=""/></el-icon>
+<!--            </el-button>-->
+          </span>
+        </div>
+      </el-header>
+      <el-container >
+        <el-aside width="160px" style="height: 97%; " >
+<!--          <el-menu
+              style=" border-radius:0.5rem;border: 0.01rem solid #409EFF;margin-bottom: 0.5rem"
+              @open="handleOpen"
+              ref="menu"
+              active-color="#ffd04b"
+              background-color="#409EFF"
+              default-active="2"
+              text-color="#fff">
+            <el-sub-menu
+
+                v-for="items in menuList"
+                :index="items.id"
+                :key="items.id">
+              <template #title>
+                <el-icon v-if="items.id==1"><Grid/></el-icon>
+                <el-icon v-if="items.id==2"><Histogram/></el-icon>
+                <el-icon v-if="items.id==3"><MessageBox/></el-icon>
+                <span style="font-weight: bold;">{{items.menuName}}</span>
+              </template>
+              <router-link
+                  v-show="items.id==menuItem.menuID"
+                  v-for="menuItem in menuItemList"
+                  :to="{path:menuItem.url}">
+                <el-menu-item  >
+                  {{ menuItem.itemName}}
+                </el-menu-item>
+              </router-link>
+
+            </el-sub-menu>
+          </el-menu>-->
+          <div class="menu"  >
+              <div v-for="items in menuList">
+                <div class='menu_title' @click="openMenu(items.id)"  >{{items.menuName}}<span class='indicator' >鈻�</span></div>
+                <ul class='enter-x-left' v-show="openFlag==items.id">
+
+                  <li v-for="menuItem in menuItemList"
+                      v-show="items.id==menuItem.menuID"
+                      style="margin-bottom: 2px"
+                  >
+                    <router-link
+                        :to="{path:menuItem.url}">
+                      {{ menuItem.itemName}}
+                    </router-link>
+
+                  </li>
+                </ul>
+              </div>
+          </div>
+        </el-aside>
+
+        <el-main>
+          <div id="main">
+            <router-view></router-view>
+          </div>
+        </el-main>
+
+      </el-container>
+    </el-container>
+  </div>
+</template>
+
+<style scoped>
+.el-container{
+  height: 100vh;
+  width: 100vw
+}
+
+*{
+  padding: 0;
+  margin: 0;
+}
+:deep(.sys-quit){
+  float: right;
+  margin-right: 1rem;
+  width: 5rem;
+
+}
+:deep(span){
+  margin-right: 0;
+
+}
+.el-collapse{
+  font-size: 16px;
+  font-weight: bold;
+}
+#main{
+  width: 99%;
+  float: right;
+  height: 99%;
+}
+
+
+
+
+/*------------*/
+
+
+
+
+.menu div div{
+
+  width: 138px;
+  height: 35px;
+  line-height: 35px;
+  background: #C6E2FF;
+  color: #000000;
+  font-size: 16px;
+  padding-left: 15px;
+  transition: all 0.3s ease;
+  cursor: pointer;
+  position: relative;
+  font-weight: bold;
+  overflow: hidden;
+  border-bottom: 12px ;
+  margin-bottom:4px;
+  text-align: left;
+  cursor: pointer;
+  border-radius:8px;
+  /*   outline: none; */
+
+  background-color:#5CADFE;
+  box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19);
+
+
+
+}
+
+.menu {
+  width: 138px;
+  height: 33px;
+  line-height: 25px;
+
+  color: #000000;
+  font-size: 16px;
+  padding-left: 15px;
+  padding-right: 2px;
+
+
+
+}
+
+ul {
+  height: auto;
+  margin: 1px auto;
+  text-align: center;
+}
+
+ul li {
+
+  height: 28px;
+  line-height: 30px;
+  background: rgb(128, 128, 128);
+  color: #000000;
+  padding-left: 36px;
+  cursor: pointer;
+  overflow: hidden;
+  text-align: left;
+  border-radius:8px;
+  /*   outline: none; */
+
+  background: #5CADFE;
+  box-shadow: 0 8px 16px 0 rgba(0,0,0,0), 0 6px 5px 0 rgba(0,0,0,0.19);
+}
+
+ul li:hover {
+  background:#5CADFE ;
+  color: #ffffff;
+}
+
+ul li a {
+  text-decoration: none;
+  color: #000000;
+  font-size: 14px;
+}
+ul li a:hover {
+
+  color: #ffffff;
+}
+
+.item_divider {
+  width: 118px;
+  height: 0px;
+  /* background-color: white;
+  opacity: 0.8; */
+  margin-bottom:2px;
+}
+.item a{
+  width: 138px;
+  height: 35px;
+  display: block;
+  text-decoration: none;
+  color: white;
+  font-size: 14px;
+  text-decoration: none;
+}
+
+.menu_title {
+  width: 138px;
+  height: 35px;
+  line-height: 35px;
+  background: #fafafa;
+  color: rgb(128, 128, 128);
+  font-size: 16px;
+  padding-left: 15px;
+  transition: all 0.3s ease;
+  cursor: pointer;
+  position: relative;
+  font-weight: bold;
+  overflow: hidden;
+
+}
+
+.menu_title:hover {
+  /* background: #dedede; */
+  color: #ffffff;
+}
+
+.indicator {
+  display: block;
+  width: 50px;
+  height: 35px;
+  font-weight: bold;
+  position: absolute;
+  right: 0px;
+  top: 0px;
+  transition: all 0.3s ease;
+  text-align: center;
+}
+
+
+
+/* 鍔ㄧ敾鏁堟灉 */
+.enter-x-left {
+  z-index: 9;
+  opacity: 0;
+  animation: enter-x-left 0.4s ease-in-out 0.3s;
+  animation-fill-mode: forwards;
+  transform: translateX(-50px);
+  transition: all 0.3s ease;
+}
+.enter-x-left:nth-child(1){
+  animation-delay: 0.1s;
+}
+.enter-x-left:nth-child(2){
+  animation-delay: 0.2s;
+}
+.enter-x-left:nth-child(3) {
+  animation-delay: 0.3s;
+}
+.enter-x-left:nth-child(4){
+  animation-delay: 0.4s;
+}
+
+
+@keyframes enter-x-left {
+  to {
+    opacity: 1;
+    transform: translateX(0);
+  }
+}
+
+
+</style>
\ No newline at end of file

--
Gitblit v1.8.0