浏览代码

静态页面

刘洋 1 年之前
父节点
当前提交
cf6e57e681

+ 17 - 2
src/layout/index.vue

@@ -57,15 +57,30 @@
 </template>
 </template>
 
 
 <script setup name="Layout">
 <script setup name="Layout">
-import { ref } from 'vue';
+import { ref, onMounted } from 'vue';
 import { useAppStore, useUserStore } from '@/store';
 import { useAppStore, useUserStore } from '@/store';
+import { useRouter, useRoute } from 'vue-router';
 import LeftMenu from './left-menu.vue';
 import LeftMenu from './left-menu.vue';
 import { Color } from 'tvision-color';
 import { Color } from 'tvision-color';
 import { generateColorMap, insertThemeStylesheet } from '@/config/color';
 import { generateColorMap, insertThemeStylesheet } from '@/config/color';
+import { moduleMap } from '@/router/asyncRoutes';
 
 
+const router = useRouter();
+const route = useRoute();
 const appStore = useAppStore();
 const appStore = useAppStore();
 const userStore = useUserStore();
 const userStore = useUserStore();
-const moduleChange = () => {};
+const moduleChange = (name) => {
+  userStore.setCurPageModule(name);
+  router.push({ name });
+};
+const setModuleByPath = () => {
+  let firstPath = route.path.split('/')[1];
+  let curModuleName = moduleMap[firstPath];
+  userStore.setCurPageModule(curModuleName);
+};
+onMounted(() => {
+  setModuleByPath();
+});
 const colorOptions = ref([
 const colorOptions = ref([
   { content: '默认主题', value: '#0052d9' },
   { content: '默认主题', value: '#0052d9' },
   { content: '天蓝主题', value: '#2fa4e7' },
   { content: '天蓝主题', value: '#2fa4e7' },

+ 28 - 16
src/layout/left-menu.vue

@@ -1,6 +1,7 @@
 <template>
 <template>
   <div class="left-menu">
   <div class="left-menu">
     <t-menu
     <t-menu
+      :key="key"
       theme="dark"
       theme="dark"
       v-model:expanded="openKeys"
       v-model:expanded="openKeys"
       :default-value="activeKey"
       :default-value="activeKey"
@@ -35,7 +36,7 @@
 
 
 <script setup name="LeftMenu">
 <script setup name="LeftMenu">
 import { ref, watch, onBeforeMount } from 'vue';
 import { ref, watch, onBeforeMount } from 'vue';
-import { useRoute, useRouter } from 'vue-router';
+import { useRoute, useRouter, onBeforeRouteUpdate } from 'vue-router';
 import { useAppStore, useUserStore } from '@/store';
 import { useAppStore, useUserStore } from '@/store';
 import childrenMenu from './children-menu.vue';
 import childrenMenu from './children-menu.vue';
 
 
@@ -46,32 +47,43 @@ const activeKey = ref('');
 const openKeys = ref([]);
 const openKeys = ref([]);
 const appStore = useAppStore();
 const appStore = useAppStore();
 const userStore = useUserStore();
 const userStore = useUserStore();
-
-const title = ref('');
+const key = ref(new Date().getTime() + '');
 
 
 onBeforeMount(() => {
 onBeforeMount(() => {
   activeKey.value = route.name;
   activeKey.value = route.name;
   setOpenMenu();
   setOpenMenu();
 });
 });
+onBeforeRouteUpdate((to) => {
+  activeKey.value = to.name;
+});
+watch(
+  () => userStore.moduleMenus,
+  () => {
+    setOpenMenu();
+    setTimeout(() => {
+      key.value = new Date().getTime() + '';
+    }, 0);
+  }
+);
 const onCollapse = () => {
 const onCollapse = () => {
   appStore.toggleMenu();
   appStore.toggleMenu();
 };
 };
-// watch(
-//   () => route,
-//   (v) => {
-//     initMenu();
-//   },
-//   { deep: true }
-// );
 const setOpenMenu = () => {
 const setOpenMenu = () => {
   openKeys.value = [];
   openKeys.value = [];
-  if (route.matched.length && route.matched.length > 1) {
-    const last = route.matched[route.matched.length - 1];
-    if (last.meta && Array.isArray(last.meta.breadcrumb))
-      last.meta.breadcrumb.map((item) => {
-        openKeys.value.push(item.name);
-      });
+  //如果初始化的时候左侧全部展开
+  const moduleMenus = userStore.moduleMenus;
+  for (const item of moduleMenus) {
+    openKeys.value.push(item.name);
   }
   }
+
+  //如果只展开当前页面所在的父菜单
+  // if (route.matched.length && route.matched.length > 1) {
+  //   const last = route.matched[route.matched.length - 1];
+  //   if (last.meta && Array.isArray(last.meta.breadcrumb))
+  //     last.meta.breadcrumb.map((item) => {
+  //       openKeys.value.push(item.name);
+  //     });
+  // }
 };
 };
 </script>
 </script>
 
 

+ 25 - 1
src/mock/index.js

@@ -4,7 +4,7 @@ const menusList = [
   {
   {
     id: 1,
     id: 1,
     title: '服务单元管理',
     title: '服务单元管理',
-    parentId: -1,
+    parentId: 0,
     url: '/service-unit-manage',
     url: '/service-unit-manage',
     sort: 1,
     sort: 1,
     name: 'ServiceUnitManage',
     name: 'ServiceUnitManage',
@@ -57,6 +57,30 @@ const menusList = [
     sort: 3,
     sort: 3,
     name: 'RegionalPlanning',
     name: 'RegionalPlanning',
   },
   },
+  {
+    id: 8,
+    title: 'SOP管理',
+    parentId: 0,
+    url: '/sop',
+    sort: 2,
+    name: 'Sop',
+  },
+  {
+    id: 9,
+    title: 'SOP管理',
+    parentId: 8,
+    url: '/sop/sop-manage',
+    sort: 1,
+    name: 'SopManage',
+  },
+  {
+    id: 10,
+    title: '教务处SOP管理',
+    parentId: 9,
+    url: '/sop/sop-manage/office-sop',
+    sort: 1,
+    name: 'OfficeSop',
+  },
 ];
 ];
 
 
 export const menusApi = Mock.mock('/api/getMenus', 'get', () => {
 export const menusApi = Mock.mock('/api/getMenus', 'get', () => {

+ 7 - 1
src/router/asyncRoutes.js

@@ -1,3 +1,9 @@
 import serviceUnitManage from './modules/serviceUnitManage';
 import serviceUnitManage from './modules/serviceUnitManage';
+import sop from './modules/sop';
 
 
-export default [serviceUnitManage];
+const asyncRoutes = [serviceUnitManage, sop];
+export const moduleMap = asyncRoutes.reduce((obj, item) => {
+  obj[item.path.slice(1)] = item.name;
+  return obj;
+}, {});
+export default asyncRoutes;

+ 1 - 1
src/router/modules/serviceUnitManage.js

@@ -5,7 +5,7 @@ export default {
   meta: {
   meta: {
     title: '服务单元管理',
     title: '服务单元管理',
     sort: 1,
     sort: 1,
-    icon: 'bulletpoint',
+    isModule: true,
   },
   },
   children: [
   children: [
     {
     {

+ 34 - 0
src/router/modules/sop.js

@@ -0,0 +1,34 @@
+export default {
+  name: 'Sop',
+  path: '/sop',
+  redirect: '/sop/sop-manage',
+  meta: {
+    title: 'SOP管理',
+    sort: 2,
+    isModule: true,
+  },
+  children: [
+    {
+      name: 'SopManage',
+      path: '/sop/sop-manage',
+      redirect: '/sop/sop-manage/office-sop',
+      meta: {
+        title: 'SOP管理',
+        sort: 1,
+        icon: '',
+      },
+      children: [
+        {
+          name: 'OfficeSop',
+          path: '/sop/sop-manage/office-sop',
+          component: () =>
+            import('@/views/sop/sop-manage/office-sop/index.vue'),
+          meta: {
+            title: '教务处SOP管理',
+            sort: 1,
+          },
+        },
+      ],
+    },
+  ],
+};

+ 0 - 3
src/store/modules/user.js

@@ -104,8 +104,6 @@ const useUserStore = defineStore('user', {
     },
     },
     setCurPageModule(name) {
     setCurPageModule(name) {
       this.curPageModule = name;
       this.curPageModule = name;
-    },
-    setModuleMenusByName(name) {
       let item = this.menus.find((item) => item.name === name);
       let item = this.menus.find((item) => item.name === name);
       this.moduleMenus = item.children;
       this.moduleMenus = item.children;
     },
     },
@@ -125,7 +123,6 @@ const useUserStore = defineStore('user', {
       if (menus.length) {
       if (menus.length) {
         this.setHeaderMenus(menus);
         this.setHeaderMenus(menus);
         this.setCurPageModule(menus[0].name);
         this.setCurPageModule(menus[0].name);
-        this.setModuleMenusByName(menus[0].name);
       }
       }
     },
     },
 
 

+ 1 - 1
src/style/animation.less

@@ -52,7 +52,7 @@
 /* fade-slide */
 /* fade-slide */
 .fade-slide-leave-active,
 .fade-slide-leave-active,
 .fade-slide-enter-active {
 .fade-slide-enter-active {
-  transition: all 0.28s cubic-bezier(0.645, 0.045, 0.355, 1);
+  transition: all 0.25s cubic-bezier(0.645, 0.045, 0.355, 1);
 }
 }
 
 
 .fade-slide-enter-from {
 .fade-slide-enter-from {

+ 2 - 2
src/views/service-unit-manage/dispatch/dispatch-manage/add-dispatch-dialog.vue

@@ -29,10 +29,10 @@
       <t-form-item label="客户名称:">
       <t-form-item label="客户名称:">
         <t-select v-model="formData.g"></t-select>
         <t-select v-model="formData.g"></t-select>
       </t-form-item>
       </t-form-item>
-      <t-form-item label="考试开始时间">
+      <t-form-item label="考试开始时间">
         <t-date-picker v-model="formData.h" />
         <t-date-picker v-model="formData.h" />
       </t-form-item>
       </t-form-item>
-      <t-form-item label="考试结束时间">
+      <t-form-item label="考试结束时间">
         <t-date-picker v-model="formData.i" />
         <t-date-picker v-model="formData.i" />
       </t-form-item>
       </t-form-item>
       <t-form-item label="实施产品:">
       <t-form-item label="实施产品:">

+ 1 - 1
src/views/service-unit-manage/dispatch/dispatch-manage/delineation-dialog.vue

@@ -10,7 +10,7 @@
   >
   >
     <div class="form-title">派单信息</div>
     <div class="form-title">派单信息</div>
     <t-form ref="formRef" :model="formData">
     <t-form ref="formRef" :model="formData">
-      <t-form-item label="服务单元名称">
+      <t-form-item label="服务单元名称">
         <t-select v-model="formData.a"></t-select>
         <t-select v-model="formData.a"></t-select>
       </t-form-item>
       </t-form-item>
     </t-form>
     </t-form>

+ 1 - 1
src/views/service-unit-manage/dispatch/dispatch-manage/mult-delineation-dialog.vue

@@ -9,7 +9,7 @@
     :closeOnOverlayClick="false"
     :closeOnOverlayClick="false"
   >
   >
     <t-form ref="formRef" :model="formData">
     <t-form ref="formRef" :model="formData">
-      <t-form-item label="服务单元名称">
+      <t-form-item label="服务单元名称">
         <t-select v-model="formData.a"></t-select>
         <t-select v-model="formData.a"></t-select>
       </t-form-item>
       </t-form-item>
     </t-form>
     </t-form>

+ 2 - 2
src/views/service-unit-manage/service-unit/regional-planning/add-region-dialog.vue

@@ -8,10 +8,10 @@
     :closeOnOverlayClick="false"
     :closeOnOverlayClick="false"
   >
   >
     <t-form ref="formRef" :model="formData" layout="inline">
     <t-form ref="formRef" :model="formData" layout="inline">
-      <t-form-item label="服务单元名称">
+      <t-form-item label="服务单元名称">
         <t-select v-model="formData.a"> </t-select>
         <t-select v-model="formData.a"> </t-select>
       </t-form-item>
       </t-form-item>
-      <t-form-item label="大区经理">
+      <t-form-item label="大区经理">
         <t-select v-model="formData.b"> </t-select>
         <t-select v-model="formData.b"> </t-select>
       </t-form-item>
       </t-form-item>
       <t-transfer
       <t-transfer

+ 7 - 0
src/views/sop/sop-manage/office-sop/index.vue

@@ -0,0 +1,7 @@
+<template>
+  <div class="office-sop">教务处SOP</div>
+</template>
+
+<script setup name="OfficeSop"></script>
+
+<style></style>