wuheng 1 an în urmă
părinte
comite
2b1b29eed5
48 a modificat fișierele cu 168 adăugiri și 299 ștergeri
  1. 1 0
      .env
  2. 0 32
      docker/.dockerignore
  3. 0 24
      docker/Dockerfile
  4. 0 54
      docker/nginx.conf
  5. 0 1
      src/composables/system.ts
  6. 20 0
      src/layouts/common/global-header/components/drawer-toggle.vue
  7. 0 23
      src/layouts/common/global-header/components/github-site.vue
  8. 3 3
      src/layouts/common/global-header/components/index.ts
  9. 4 4
      src/layouts/common/global-header/index.vue
  10. 2 1
      src/layouts/common/setting-drawer/index.vue
  11. 1 1
      src/locales/lang/en.ts
  12. 1 1
      src/locales/lang/zh-cn.ts
  13. 4 1
      src/router/modules/lesson.ts
  14. 0 92
      src/router/modules/management.ts
  15. 88 0
      src/router/modules/system.ts
  16. 4 4
      src/store/modules/auth/index.ts
  17. 1 1
      src/typings/business.d.ts
  18. 15 21
      src/typings/page-route.d.ts
  19. 1 1
      src/typings/system.d.ts
  20. 15 5
      src/views/_builtin/login/components/pwd-login/components/other-account.vue
  21. 1 5
      src/views/_builtin/login/components/pwd-login/index.vue
  22. 0 5
      src/views/archives/attendance/index.vue
  23. 0 5
      src/views/archives/other/index.vue
  24. 0 5
      src/views/archives/scores/index.vue
  25. 7 10
      src/views/index.ts
  26. 0 0
      src/views/system/attendance/api.ts
  27. 0 0
      src/views/system/attendance/crud.ts
  28. 0 0
      src/views/system/attendance/index.vue
  29. 0 0
      src/views/system/auth/index.vue
  30. 0 0
      src/views/system/role/api.ts
  31. 0 0
      src/views/system/role/crud.ts
  32. 0 0
      src/views/system/role/index.vue
  33. 0 0
      src/views/system/route/api.ts
  34. 0 0
      src/views/system/route/component/crud.ts
  35. 0 0
      src/views/system/route/component/curd.ts
  36. 0 0
      src/views/system/route/component/importScores.vue
  37. 0 0
      src/views/system/route/component/viewScores.vue
  38. 0 0
      src/views/system/route/crud.ts
  39. 0 0
      src/views/system/route/index.vue
  40. 0 0
      src/views/system/sort/api.ts
  41. 0 0
      src/views/system/sort/crud.ts
  42. 0 0
      src/views/system/sort/index.vue
  43. 0 0
      src/views/system/student/api.ts
  44. 0 0
      src/views/system/student/crud.ts
  45. 0 0
      src/views/system/student/index.vue
  46. 0 0
      src/views/system/user/api.ts
  47. 0 0
      src/views/system/user/curd.ts
  48. 0 0
      src/views/system/user/index.vue

+ 1 - 0
.env

@@ -19,3 +19,4 @@ VITE_ICON_PREFFIX=icon
 # 格式 {VITE_ICON_PREFFIX}-{本地图标集合名称}
 VITE_ICON_LOCAL_PREFFIX=icon-local
 
+VITE_VERCEL=N

+ 0 - 32
docker/.dockerignore

@@ -1,32 +0,0 @@
-node_modules
-.DS_Store
-dist
-.npmrc
-.cache
-
-tests/server/static
-tests/server/static/upload
-
-.local
-# local env files
-.env.local
-.env.*.local
-.eslintcache
-
-# Log files
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-
-# Editor directories and files
-.idea
-# .vscode
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
-yarn.lock
-pnpm-lock.yaml
-/vite-profile.cpuprofile

+ 0 - 24
docker/Dockerfile

@@ -1,24 +0,0 @@
-FROM node:16.17.0 as builder
-
-ENV WORKDIR=/soybean-admin
-
-WORKDIR $WORKDIR
-
-COPY ./ $WORKDIR/
-
-ARG version
-ENV COMMITID=$version
-
-RUN npm i -g pnpm
-
-RUN pnpm install
-RUN pnpm build
-
-FROM nginx:alpine as prod
-
-RUN mkdir /soybean
-
-COPY --from=builder /soybean-admin/dist /soybean-admin
-COPY --from=builder /soybean-admin/docker/nginx.conf /etc/nginx/nginx.conf
-
-EXPOSE 80

+ 0 - 54
docker/nginx.conf

@@ -1,54 +0,0 @@
-user  nginx;
-worker_processes  1;
-error_log  /var/log/nginx/error.log warn;
-pid        /var/run/nginx.pid;
-
-events {
-  worker_connections  1024;
-}
-
-http {
-  include       /etc/nginx/mime.types;
-  default_type  application/octet-stream;
-  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-                    '$status $body_bytes_sent "$http_referer" '
-                    '"$http_user_agent" "$http_x_forwarded_for"';
-  access_log  /var/log/nginx/access.log  main;
-  sendfile        on;
-  keepalive_timeout  65;
-
-  server {
-    listen       80;
-    server_name  localhost;
-
-    location / {
-      # 不缓存html,防止程序更新后缓存继续生效
-      if ($request_filename ~* .*\.(?:htm|html)$) {
-        add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
-        access_log on;
-      }
-      root   /soybean-admin/;
-      index  index.html index.htm;
-      try_files $uri $uri/ /index.html;
-    }
-
-    # location /soybean/soybean-webserver/v1 {
-    #     proxy_set_header Host $host;
-    #     proxy_set_header X-Real-IP $remote_addr;
-    #     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-    #     proxy_set_header REMOTE-HOST $remote_addr;
-
-    #     # 后台接口地址
-    #     proxy_pass http://192.168.1.99:30597/v1;
-    #     proxy_redirect default;
-    #     add_header Access-Control-Allow-Origin *;
-    #     add_header Access-Control-Allow-Headers X-Requested-With;
-    #     add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
-    # }
-
-    error_page   500 502 503 504  /50x.html;
-    location = /50x.html {
-      root   /usr/share/nginx/html;
-    }
-  }
-}

+ 0 - 1
src/composables/system.ts

@@ -35,7 +35,6 @@ export function usePermission() {
 
   function hasPermission(permission: Auth.RoleType | Auth.RoleType[]) {
     const { userType } = auth.userInfo;
-
     let has = userType === 'admin';
     if (!has) {
       if (isArray(permission)) {

+ 20 - 0
src/layouts/common/global-header/components/drawer-toggle.vue

@@ -0,0 +1,20 @@
+<template>
+  <hover-container
+    class="w-40px h-full"
+    tooltip-content="主题设置"
+    :inverted="theme.header.inverted"
+    @click="app.toggleSettingDrawerVisible"
+  >
+    <icon-ant-design-setting-outlined class="text-18px" />
+  </hover-container>
+</template>
+
+<script lang="ts" setup>
+defineOptions({ name: 'DrawerToggle' });
+import { useAppStore, useThemeStore } from '@/store';
+
+const app = useAppStore();
+const theme = useThemeStore();
+</script>
+
+<style scoped></style>

+ 0 - 23
src/layouts/common/global-header/components/github-site.vue

@@ -1,23 +0,0 @@
-<template>
-  <hover-container
-    tooltip-content="github"
-    class="w-40px h-full"
-    :inverted="theme.header.inverted"
-    @click="handleClickLink"
-  >
-    <icon-mdi-github class="text-20px" />
-  </hover-container>
-</template>
-
-<script lang="ts" setup>
-import { useThemeStore } from '@/store';
-
-defineOptions({ name: 'GithubSite' });
-
-const theme = useThemeStore();
-function handleClickLink() {
-  window.open('https://github.com/honghuangdc/soybean-admin', '_blank');
-}
-</script>
-
-<style scoped></style>

+ 3 - 3
src/layouts/common/global-header/components/index.ts

@@ -1,23 +1,23 @@
 import MenuCollapse from './menu-collapse.vue';
 import GlobalBreadcrumb from './global-breadcrumb.vue';
 import HeaderMenu from './header-menu.vue';
-import GithubSite from './github-site.vue';
 import FullScreen from './full-screen.vue';
 import ThemeMode from './theme-mode.vue';
 import UserAvatar from './user-avatar.vue';
 import SystemMessage from './system-message.vue';
 import SettingButton from './setting-button.vue';
 import ToggleLang from './toggle-lang.vue';
+import DrawerToggle from './drawer-toggle.vue';
 
 export {
   MenuCollapse,
   GlobalBreadcrumb,
   HeaderMenu,
-  GithubSite,
   FullScreen,
   ThemeMode,
   UserAvatar,
   SystemMessage,
   SettingButton,
-  ToggleLang
+  ToggleLang,
+  DrawerToggle
 };

+ 4 - 4
src/layouts/common/global-header/index.vue

@@ -8,11 +8,11 @@
     <header-menu v-else />
     <div class="flex justify-end h-full">
       <global-search />
-      <github-site />
       <full-screen />
       <theme-mode />
+      <drawer-toggle />
       <toggle-lang />
-      <system-message />
+      <system-message v-if="false" />
       <setting-button v-if="showButton" />
       <user-avatar />
     </div>
@@ -26,7 +26,6 @@ import GlobalLogo from '../global-logo/index.vue';
 import GlobalSearch from '../global-search/index.vue';
 import {
   FullScreen,
-  GithubSite,
   GlobalBreadcrumb,
   HeaderMenu,
   MenuCollapse,
@@ -34,7 +33,8 @@ import {
   SystemMessage,
   ThemeMode,
   UserAvatar,
-  ToggleLang
+  ToggleLang,
+  DrawerToggle
 } from './components';
 
 defineOptions({ name: 'GlobalHeader' });

+ 2 - 1
src/layouts/common/setting-drawer/index.vue

@@ -20,7 +20,8 @@ defineOptions({ name: 'SettingDrawer' });
 
 const app = useAppStore();
 
-const showButton = import.meta.env.DEV || import.meta.env.VITE_VERCEL === 'Y';
+// const showButton = import.meta.env.DEV || import.meta.env.VITE_VERCEL === 'Y';
+const showButton = import.meta.env.VITE_VERCEL === 'Y';
 </script>
 
 <style scoped></style>

+ 1 - 1
src/locales/lang/en.ts

@@ -10,7 +10,7 @@ const locale: LocaleMessages<I18nType.Schema> = {
         dashboard: 'Dashboard',
         workbench: 'Workbench'
       },
-      management: {
+      system: {
         _value: 'System Management',
         auth: 'Auth',
         role: 'Role',

+ 1 - 1
src/locales/lang/zh-cn.ts

@@ -10,7 +10,7 @@ const locale: LocaleMessages<I18nType.Schema> = {
         dashboard: '仪表盘',
         workbench: '工作台'
       },
-      management: {
+      system: {
         _value: '系统管理',
         auth: '权限管理',
         role: '角色管理',

+ 4 - 1
src/router/modules/lesson.ts

@@ -10,6 +10,7 @@ const lesson: AuthRoute.Route = {
       meta: {
         title: '班级管理',
         i18nTitle: 'message.routes.lesson.group',
+        permissions: ['admin', 'teacher'],
         requiresAuth: true,
         localIcon: 'class'
       }
@@ -63,8 +64,9 @@ const lesson: AuthRoute.Route = {
       path: '/lesson/student',
       component: 'self',
       meta: {
-        title: '排课日历',
+        title: '班级学员',
         i18nTitle: 'message.routes.lesson.student',
+        permissions: ['admin', 'teacher'],
         requiresAuth: true,
         icon: 'typcn:group'
       }
@@ -76,6 +78,7 @@ const lesson: AuthRoute.Route = {
       meta: {
         title: '教室管理',
         i18nTitle: 'message.routes.lesson.classroom',
+        permissions: ['admin', 'teacher'],
         requiresAuth: true,
         localIcon: 'classroom'
       }

+ 0 - 92
src/router/modules/management.ts

@@ -1,92 +0,0 @@
-const management: AuthRoute.Route = {
-  name: 'management',
-  path: '/management',
-  component: 'basic',
-  children: [
-    {
-      name: 'management_auth',
-      path: '/management/auth',
-      component: 'self',
-      meta: {
-        title: '权限管理',
-        i18nTitle: 'message.routes.management.auth',
-        requiresAuth: true,
-        icon: 'ic:baseline-security'
-      }
-    },
-    {
-      name: 'management_role',
-      path: '/management/role',
-      component: 'self',
-      meta: {
-        title: '角色管理',
-        i18nTitle: 'message.routes.management.role',
-        requiresAuth: true,
-        icon: 'carbon:user-role'
-      }
-    },
-    {
-      name: 'management_user',
-      path: '/management/user',
-      component: 'self',
-      meta: {
-        title: '用户管理',
-        i18nTitle: 'message.routes.management.user',
-        requiresAuth: true,
-        icon: 'ic:round-manage-accounts'
-      }
-    },
-    {
-      name: 'management_student',
-      path: '/management/student',
-      component: 'self',
-      meta: {
-        title: '学员管理',
-        i18nTitle: 'message.routes.management.student',
-        requiresAuth: true,
-        localIcon: 'academic-cap'
-      }
-    },
-    {
-      name: 'management_attendance',
-      path: '/management/attendance',
-      component: 'self',
-      meta: {
-        title: '学员出勤',
-        i18nTitle: 'message.routes.management.attendance',
-        requiresAuth: true,
-        icon: 'emojione:kiss-mark'
-      }
-    },
-    {
-      name: 'management_sort',
-      path: '/management/sort',
-      component: 'self',
-      meta: {
-        title: '课程分类',
-        i18nTitle: 'message.routes.management.sort',
-        requiresAuth: true,
-        icon: 'material-symbols:sort'
-      }
-    },
-    {
-      name: 'management_route',
-      path: '/management/route',
-      component: 'self',
-      meta: {
-        title: '系列分类',
-        i18nTitle: 'message.routes.management.route',
-        requiresAuth: true,
-        icon: 'material-symbols:route'
-      }
-    }
-  ],
-  meta: {
-    title: '系统管理',
-    i18nTitle: 'message.routes.management._value',
-    icon: 'carbon:cloud-service-management',
-    order: 9
-  }
-};
-
-export default management;

+ 88 - 0
src/router/modules/system.ts

@@ -0,0 +1,88 @@
+const system: AuthRoute.Route = {
+  name: 'system',
+  path: '/system',
+  component: 'basic',
+  children: [
+    {
+      name: 'system_role',
+      path: '/system/role',
+      component: 'self',
+      meta: {
+        title: '角色管理',
+        i18nTitle: 'message.routes.system.role',
+        permissions: ['admin', 'teacher'],
+        requiresAuth: true,
+        icon: 'carbon:user-role'
+      }
+    },
+    {
+      name: 'system_user',
+      path: '/system/user',
+      component: 'self',
+      meta: {
+        title: '用户管理',
+        i18nTitle: 'message.routes.system.user',
+        permissions: ['admin', 'teacher'],
+        requiresAuth: true,
+        icon: 'ic:round-manage-accounts'
+      }
+    },
+    {
+      name: 'system_student',
+      path: '/system/student',
+      component: 'self',
+      meta: {
+        title: '学员管理',
+        i18nTitle: 'message.routes.system.student',
+        permissions: ['admin', 'teacher'],
+        requiresAuth: true,
+        localIcon: 'academic-cap'
+      }
+    },
+    {
+      name: 'system_attendance',
+      path: '/system/attendance',
+      component: 'self',
+      meta: {
+        title: '学员出勤',
+        permissions: ['admin', 'teacher'],
+        i18nTitle: 'message.routes.system.attendance',
+        requiresAuth: true,
+        icon: 'emojione:kiss-mark'
+      }
+    },
+    {
+      name: 'system_sort',
+      path: '/system/sort',
+      component: 'self',
+      meta: {
+        title: '课程分类',
+        i18nTitle: 'message.routes.system.sort',
+        permissions: ['admin', 'teacher'],
+        requiresAuth: true,
+        icon: 'material-symbols:sort'
+      }
+    },
+    {
+      name: 'system_route',
+      path: '/system/route',
+      component: 'self',
+      meta: {
+        title: '系列分类',
+        i18nTitle: 'message.routes.system.route',
+        permissions: ['admin', 'teacher'],
+        requiresAuth: true,
+        icon: 'material-symbols:route'
+      }
+    }
+  ],
+  meta: {
+    title: '系统管理',
+    i18nTitle: 'message.routes.system._value',
+    permissions: ['admin', 'teacher'],
+    icon: 'carbon:cloud-service-management',
+    order: 9
+  }
+};
+
+export default system;

+ 4 - 4
src/store/modules/auth/index.ts

@@ -108,8 +108,8 @@ export const useAuthStore = defineStore('auth-store', {
 
     async studentLogin(params: AdminLoginParams) {
       this.loginLoading = true;
-      const { data } = await fetchStudentLogin(params);
-      if (data) {
+      const { data, status, code } = await fetchStudentLogin(params);
+      if (status && code === 200) {
         await this.handleActionAfterLogin(data as ApiAuth.Token);
         return true;
       }
@@ -125,8 +125,8 @@ export const useAuthStore = defineStore('auth-store', {
 
     async login(params: AdminLoginParams) {
       this.loginLoading = true;
-      const { data } = await fetchLogin(params);
-      if (data) {
+      const { code, status, data } = await fetchLogin(params);
+      if (status && code === 200) {
         await this.handleActionAfterLogin(data as ApiAuth.Token);
         return true;
       }

+ 1 - 1
src/typings/business.d.ts

@@ -6,7 +6,7 @@ declare namespace Auth {
    * - admin: 管理员
    * - user: 用户
    */
-  type RoleType = 'admin' | 'teacher' | 'member' | '';
+  type RoleType = 'admin' | 'teacher' | 'member' | 'disable' | '';
 
   /** 用户信息 */
   interface UserInfo {

+ 15 - 21
src/typings/page-route.d.ts

@@ -23,9 +23,6 @@ declare namespace PageRoute {
     | 'not-found'
     | 'about'
     | 'archives'
-    | 'archives_attendance'
-    | 'archives_other'
-    | 'archives_scores'
     | 'archives_students'
     | 'archives_students_component'
     | 'dashboard'
@@ -42,14 +39,14 @@ declare namespace PageRoute {
     | 'lesson_schedule'
     | 'lesson_score'
     | 'lesson_student'
-    | 'management'
-    | 'management_attendance'
-    | 'management_auth'
-    | 'management_role'
-    | 'management_route'
-    | 'management_sort'
-    | 'management_student'
-    | 'management_user';
+    | 'system'
+    | 'system_attendance'
+    | 'system_auth'
+    | 'system_role'
+    | 'system_route'
+    | 'system_sort'
+    | 'system_student'
+    | 'system_user';
 
   /**
    * last degree route key, which has the page file
@@ -63,9 +60,6 @@ declare namespace PageRoute {
     | 'login'
     | 'not-found'
     | 'about'
-    | 'archives_attendance'
-    | 'archives_other'
-    | 'archives_scores'
     | 'archives_students_component'
     | 'archives_students'
     | 'dashboard_workbench'
@@ -79,12 +73,12 @@ declare namespace PageRoute {
     | 'lesson_schedule'
     | 'lesson_score'
     | 'lesson_student'
-    | 'management_attendance'
-    | 'management_auth'
-    | 'management_role'
-    | 'management_route'
-    | 'management_sort'
-    | 'management_student'
-    | 'management_user'
+    | 'system_attendance'
+    | 'system_auth'
+    | 'system_role'
+    | 'system_route'
+    | 'system_sort'
+    | 'system_student'
+    | 'system_user'
   >;
 }

+ 1 - 1
src/typings/system.d.ts

@@ -323,7 +323,7 @@ declare namespace I18nType {
         dashboard: string;
         workbench: string;
       };
-      management: {
+      system: {
         _value: string;
         auth: string;
         role: string;

+ 15 - 5
src/views/_builtin/login/components/pwd-login/components/other-account.vue

@@ -2,25 +2,35 @@
   <n-space :vertical="true">
     <n-divider class="!mb-0 text-14px text-#666">登录账户类型</n-divider>
     <n-space justify="center">
-      <n-button v-for="item in accounts" :key="item.type" type="primary" @click="change(item.type)">
-        {{ item.label }}
-      </n-button>
+      <n-radio-group v-model:value="checkedValue" name="loginType" size="large">
+        <n-radio-button
+          v-for="item in accounts"
+          :key="item.type"
+          :value="item.type"
+          type="primary"
+          @click="change(item.type)"
+        >
+          {{ item.label }}
+        </n-radio-button>
+      </n-radio-group>
     </n-space>
   </n-space>
 </template>
 
 <script lang="ts" setup>
+import { ref } from 'vue';
 interface Emits {
   (e: 'change', param: { type: string }): void;
 }
+const checkedValue = ref('admin');
 const emit = defineEmits<Emits>();
 const accounts = [
   {
-    label: '教务人员',
+    label: '教务人员登录',
     type: 'admin'
   },
   {
-    label: '学生账户',
+    label: '学生账户登录',
     type: 'student'
   }
 ];

+ 1 - 5
src/views/_builtin/login/components/pwd-login/index.vue

@@ -7,9 +7,6 @@
       <n-input v-model:value="model.passwd" type="password" show-password-on="click" placeholder="请输入密码" />
     </n-form-item>
     <n-space :vertical="true" :size="24">
-      <div class="flex-y-center justify-between">
-        <n-checkbox v-model:checked="rememberMe">记住我</n-checkbox>
-      </div>
       <n-button
         type="primary"
         size="large"
@@ -56,7 +53,7 @@ const closeBox = () => {
 const loginType = ref<string>('admin');
 
 const model = reactive<AdminLoginParams>({
-  username: 'admin',
+  username: '武恒',
   passwd: '123456',
   captchaVerification: ''
 });
@@ -86,7 +83,6 @@ const formRef = ref<HTMLElement & FormInst>();
 const rules: FormRules = {
   password: formRules.pwd
 };
-const rememberMe = ref(false);
 async function handleSubmit() {
   mode.value = 'pop';
   await formRef.value?.validate();

+ 0 - 5
src/views/archives/attendance/index.vue

@@ -1,5 +0,0 @@
-<template>
-  <div></div>
-</template>
-<script setup lang="ts"></script>
-<style scoped></style>

+ 0 - 5
src/views/archives/other/index.vue

@@ -1,5 +0,0 @@
-<template>
-  <div></div>
-</template>
-<script setup lang="ts"></script>
-<style scoped></style>

+ 0 - 5
src/views/archives/scores/index.vue

@@ -1,5 +0,0 @@
-<template>
-  <div></div>
-</template>
-<script setup lang="ts"></script>
-<style scoped></style>

+ 7 - 10
src/views/index.ts

@@ -10,9 +10,6 @@ export const views: Record<
   login: () => import('./_builtin/login/index.vue'),
   'not-found': () => import('./_builtin/not-found/index.vue'),
   about: () => import('./about/index.vue'),
-  archives_attendance: () => import('./archives/attendance/index.vue'),
-  archives_other: () => import('./archives/other/index.vue'),
-  archives_scores: () => import('./archives/scores/index.vue'),
   archives_students_component: () => import('./archives/students/component/index.vue'),
   archives_students: () => import('./archives/students/index.vue'),
   dashboard_workbench: () => import('./dashboard/workbench/index.vue'),
@@ -26,11 +23,11 @@ export const views: Record<
   lesson_schedule: () => import('./lesson/schedule/index.vue'),
   lesson_score: () => import('./lesson/score/index.vue'),
   lesson_student: () => import('./lesson/student/index.vue'),
-  management_attendance: () => import('./management/attendance/index.vue'),
-  management_auth: () => import('./management/auth/index.vue'),
-  management_role: () => import('./management/role/index.vue'),
-  management_route: () => import('./management/route/index.vue'),
-  management_sort: () => import('./management/sort/index.vue'),
-  management_student: () => import('./management/student/index.vue'),
-  management_user: () => import('./management/user/index.vue')
+  system_attendance: () => import('./system/attendance/index.vue'),
+  system_auth: () => import('./system/auth/index.vue'),
+  system_role: () => import('./system/role/index.vue'),
+  system_route: () => import('./system/route/index.vue'),
+  system_sort: () => import('./system/sort/index.vue'),
+  system_student: () => import('./system/student/index.vue'),
+  system_user: () => import('./system/user/index.vue')
 };

+ 0 - 0
src/views/management/attendance/api.ts → src/views/system/attendance/api.ts


+ 0 - 0
src/views/management/attendance/crud.ts → src/views/system/attendance/crud.ts


+ 0 - 0
src/views/management/attendance/index.vue → src/views/system/attendance/index.vue


+ 0 - 0
src/views/management/auth/index.vue → src/views/system/auth/index.vue


+ 0 - 0
src/views/management/role/api.ts → src/views/system/role/api.ts


+ 0 - 0
src/views/management/role/crud.ts → src/views/system/role/crud.ts


+ 0 - 0
src/views/management/role/index.vue → src/views/system/role/index.vue


+ 0 - 0
src/views/management/route/api.ts → src/views/system/route/api.ts


+ 0 - 0
src/views/management/route/component/crud.ts → src/views/system/route/component/crud.ts


+ 0 - 0
src/views/management/route/component/curd.ts → src/views/system/route/component/curd.ts


+ 0 - 0
src/views/management/route/component/importScores.vue → src/views/system/route/component/importScores.vue


+ 0 - 0
src/views/management/route/component/viewScores.vue → src/views/system/route/component/viewScores.vue


+ 0 - 0
src/views/management/route/crud.ts → src/views/system/route/crud.ts


+ 0 - 0
src/views/management/route/index.vue → src/views/system/route/index.vue


+ 0 - 0
src/views/management/sort/api.ts → src/views/system/sort/api.ts


+ 0 - 0
src/views/management/sort/crud.ts → src/views/system/sort/crud.ts


+ 0 - 0
src/views/management/sort/index.vue → src/views/system/sort/index.vue


+ 0 - 0
src/views/management/student/api.ts → src/views/system/student/api.ts


+ 0 - 0
src/views/management/student/crud.ts → src/views/system/student/crud.ts


+ 0 - 0
src/views/management/student/index.vue → src/views/system/student/index.vue


+ 0 - 0
src/views/management/user/api.ts → src/views/system/user/api.ts


+ 0 - 0
src/views/management/user/curd.ts → src/views/system/user/curd.ts


+ 0 - 0
src/views/management/user/index.vue → src/views/system/user/index.vue