Răsfoiți Sursa

feat: ✨ 完成动态路由

@sun-chaoqun 2 ani în urmă
părinte
comite
9f4b9f0c55

+ 149 - 38
package-lock.json

@@ -9,6 +9,7 @@
       "version": "0.0.0",
       "dependencies": {
         "@element-plus/icons-vue": "^2.1.0",
+        "@vueuse/core": "^10.1.0",
         "animate.css": "^4.1.1",
         "axios": "^1.3.4",
         "dayjs": "^1.11.7",
@@ -1564,20 +1565,20 @@
       "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
     },
     "node_modules/@vueuse/core": {
-      "version": "9.13.0",
-      "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
-      "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.1.0.tgz",
+      "integrity": "sha512-3Znoa5m5RO+z4/C9w6DRaKTR3wCVJvD5rav8HTDGsr+7rOZRHtcgFJ8NcCs0ZvIpmev2kExTa311ns5j2RbzDQ==",
       "dependencies": {
         "@types/web-bluetooth": "^0.0.16",
-        "@vueuse/metadata": "9.13.0",
-        "@vueuse/shared": "9.13.0",
-        "vue-demi": "*"
+        "@vueuse/metadata": "10.1.0",
+        "@vueuse/shared": "10.1.0",
+        "vue-demi": ">=0.14.0"
       }
     },
     "node_modules/@vueuse/core/node_modules/vue-demi": {
-      "version": "0.13.11",
-      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz",
-      "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+      "version": "0.14.0",
+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz",
+      "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
       "hasInstallScript": true,
       "bin": {
         "vue-demi-fix": "bin/vue-demi-fix.js",
@@ -1597,22 +1598,22 @@
       }
     },
     "node_modules/@vueuse/metadata": {
-      "version": "9.13.0",
-      "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
-      "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ=="
+      "version": "10.1.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.1.0.tgz",
+      "integrity": "sha512-cM28HjDEw5FIrPE9rgSPFZvQ0ZYnOLAOr8hl1XM6tFl80U3WAR5ROdnAqiYybniwP5gt9MKKAJAqd/ab2aHkqg=="
     },
     "node_modules/@vueuse/shared": {
-      "version": "9.13.0",
-      "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
-      "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.1.0.tgz",
+      "integrity": "sha512-2X52ogu12i9DkKOQ01yeb/BKg9UO87RNnpm5sXkQvyORlbq8ONS5l39MYkjkeVWWjdT0teJru7a2S41dmHmqjQ==",
       "dependencies": {
-        "vue-demi": "*"
+        "vue-demi": ">=0.14.0"
       }
     },
     "node_modules/@vueuse/shared/node_modules/vue-demi": {
-      "version": "0.13.11",
-      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz",
-      "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+      "version": "0.14.0",
+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz",
+      "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
       "hasInstallScript": true,
       "bin": {
         "vue-demi-fix": "bin/vue-demi-fix.js",
@@ -2201,6 +2202,74 @@
         "vue": "^3.2.0"
       }
     },
+    "node_modules/element-plus/node_modules/@vueuse/core": {
+      "version": "9.13.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
+      "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
+      "dependencies": {
+        "@types/web-bluetooth": "^0.0.16",
+        "@vueuse/metadata": "9.13.0",
+        "@vueuse/shared": "9.13.0",
+        "vue-demi": "*"
+      }
+    },
+    "node_modules/element-plus/node_modules/@vueuse/core/node_modules/vue-demi": {
+      "version": "0.14.0",
+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz",
+      "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
+      "hasInstallScript": true,
+      "bin": {
+        "vue-demi-fix": "bin/vue-demi-fix.js",
+        "vue-demi-switch": "bin/vue-demi-switch.js"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "@vue/composition-api": "^1.0.0-rc.1",
+        "vue": "^3.0.0-0 || ^2.6.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/element-plus/node_modules/@vueuse/metadata": {
+      "version": "9.13.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
+      "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ=="
+    },
+    "node_modules/element-plus/node_modules/@vueuse/shared": {
+      "version": "9.13.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
+      "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
+      "dependencies": {
+        "vue-demi": "*"
+      }
+    },
+    "node_modules/element-plus/node_modules/@vueuse/shared/node_modules/vue-demi": {
+      "version": "0.14.0",
+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz",
+      "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
+      "hasInstallScript": true,
+      "bin": {
+        "vue-demi-fix": "bin/vue-demi-fix.js",
+        "vue-demi-switch": "bin/vue-demi-switch.js"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "@vue/composition-api": "^1.0.0-rc.1",
+        "vue": "^3.0.0-0 || ^2.6.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/entities": {
       "version": "2.2.0",
       "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz",
@@ -5618,41 +5687,41 @@
       "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
     },
     "@vueuse/core": {
-      "version": "9.13.0",
-      "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
-      "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.1.0.tgz",
+      "integrity": "sha512-3Znoa5m5RO+z4/C9w6DRaKTR3wCVJvD5rav8HTDGsr+7rOZRHtcgFJ8NcCs0ZvIpmev2kExTa311ns5j2RbzDQ==",
       "requires": {
         "@types/web-bluetooth": "^0.0.16",
-        "@vueuse/metadata": "9.13.0",
-        "@vueuse/shared": "9.13.0",
-        "vue-demi": "*"
+        "@vueuse/metadata": "10.1.0",
+        "@vueuse/shared": "10.1.0",
+        "vue-demi": ">=0.14.0"
       },
       "dependencies": {
         "vue-demi": {
-          "version": "0.13.11",
-          "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz",
-          "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+          "version": "0.14.0",
+          "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz",
+          "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
           "requires": {}
         }
       }
     },
     "@vueuse/metadata": {
-      "version": "9.13.0",
-      "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
-      "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ=="
+      "version": "10.1.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.1.0.tgz",
+      "integrity": "sha512-cM28HjDEw5FIrPE9rgSPFZvQ0ZYnOLAOr8hl1XM6tFl80U3WAR5ROdnAqiYybniwP5gt9MKKAJAqd/ab2aHkqg=="
     },
     "@vueuse/shared": {
-      "version": "9.13.0",
-      "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
-      "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.1.0.tgz",
+      "integrity": "sha512-2X52ogu12i9DkKOQ01yeb/BKg9UO87RNnpm5sXkQvyORlbq8ONS5l39MYkjkeVWWjdT0teJru7a2S41dmHmqjQ==",
       "requires": {
-        "vue-demi": "*"
+        "vue-demi": ">=0.14.0"
       },
       "dependencies": {
         "vue-demi": {
-          "version": "0.13.11",
-          "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.13.11.tgz",
-          "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+          "version": "0.14.0",
+          "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz",
+          "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
           "requires": {}
         }
       }
@@ -6119,6 +6188,48 @@
         "lodash-unified": "^1.0.2",
         "memoize-one": "^6.0.0",
         "normalize-wheel-es": "^1.2.0"
+      },
+      "dependencies": {
+        "@vueuse/core": {
+          "version": "9.13.0",
+          "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
+          "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
+          "requires": {
+            "@types/web-bluetooth": "^0.0.16",
+            "@vueuse/metadata": "9.13.0",
+            "@vueuse/shared": "9.13.0",
+            "vue-demi": "*"
+          },
+          "dependencies": {
+            "vue-demi": {
+              "version": "0.14.0",
+              "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz",
+              "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
+              "requires": {}
+            }
+          }
+        },
+        "@vueuse/metadata": {
+          "version": "9.13.0",
+          "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
+          "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ=="
+        },
+        "@vueuse/shared": {
+          "version": "9.13.0",
+          "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
+          "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
+          "requires": {
+            "vue-demi": "*"
+          },
+          "dependencies": {
+            "vue-demi": {
+              "version": "0.14.0",
+              "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.0.tgz",
+              "integrity": "sha512-gt58r2ogsNQeVoQ3EhoUAvUsH9xviydl0dWJj7dabBC/2L4uBId7ujtCwDRD0JhkGsV1i0CtfLAeyYKBht9oWg==",
+              "requires": {}
+            }
+          }
+        }
       }
     },
     "entities": {

+ 2 - 1
package.json

@@ -5,12 +5,13 @@
   "type": "module",
   "scripts": {
     "dev": "vite",
-    "server":"vite",
+    "server": "vite",
     "build": "vue-tsc && vite build --mode production",
     "preview": "vite preview"
   },
   "dependencies": {
     "@element-plus/icons-vue": "^2.1.0",
+    "@vueuse/core": "^10.1.0",
     "animate.css": "^4.1.1",
     "axios": "^1.3.4",
     "dayjs": "^1.11.7",

BIN
src/assets/fdgClRuIWv9y.woff


BIN
src/assets/fdgClRuIWv9y.woff2


+ 82 - 2
src/assets/iconfont.css

@@ -1,7 +1,7 @@
 @font-face {
   font-family: 'iconfont'; /* Project id 3967191 */
-  src: url('./iconfont.woff2?t=1680587659492') format('woff2'), url('./iconfont.woff?t=1680587659492') format('woff'),
-    url('./iconfont.ttf?t=1680587659492') format('truetype');
+  src: url('iconfont.woff2?t=1682575238340') format('woff2'), url('iconfont.woff?t=1682575238340') format('woff'),
+    url('iconfont.ttf?t=1682575238340') format('truetype');
 }
 
 .iconfont {
@@ -12,6 +12,86 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-cangkujichushuju:before {
+  content: '\ue7d3';
+}
+
+.icon-zichanguanli-zichanweihu:before {
+  content: '\ue63a';
+}
+
+.icon-a-ziyuan12:before {
+  content: '\ue62a';
+}
+
+.icon-chukuguanli1:before {
+  content: '\ue7e8';
+}
+
+.icon-ruku1:before {
+  content: '\ue60f';
+}
+
+.icon-hetongxiangqing:before {
+  content: '\ue628';
+}
+
+.icon-chanpinliebiao-02:before {
+  content: '\ue613';
+}
+
+.icon-cangkuliebiao:before {
+  content: '\ue60a';
+}
+
+.icon-peijiankucuntongji:before {
+  content: '\ue612';
+}
+
+.icon-kucun:before {
+  content: '\ue88f';
+}
+
+.icon-shebeiguanli:before {
+  content: '\ue60b';
+}
+
+.icon-wulianwang:before {
+  content: '\ue670';
+}
+
+.icon-hetongguanli:before {
+  content: '\ue682';
+}
+
+.icon-cangku:before {
+  content: '\ue71f';
+}
+
+.icon-yuchuku:before {
+  content: '\ue72c';
+}
+
+.icon-cangkuguanli:before {
+  content: '\ue607';
+}
+
+.icon-hetongguanli1:before {
+  content: '\ue60c';
+}
+
+.icon-chanpinguanli:before {
+  content: '\ue608';
+}
+
+.icon-ruku:before {
+  content: '\ue626';
+}
+
+.icon-chukuguanli:before {
+  content: '\ue7ec';
+}
+
 .icon-notice:before {
   content: '\ue63e';
 }

BIN
src/assets/iconfont.ttf


BIN
src/assets/iconfont.woff


BIN
src/assets/iconfont.woff2


+ 1 - 1
src/components/dialog/Dialog.vue

@@ -3,7 +3,7 @@ import { ref } from 'vue'
 const dialogVisible = ref(false)
 interface DialogProps {
   width?: string
-  alignCenter: boolean
+  alignCenter?: boolean
 }
 withDefaults(defineProps<DialogProps>(), {
   width: '50%',

+ 4 - 0
src/composables/dark.ts

@@ -0,0 +1,4 @@
+import { useDark, useToggle } from '@vueuse/core'
+
+export const isDark = useDark()
+export const toggleDark = useToggle(isDark)

+ 3 - 18
src/layouts/Header/index.vue

@@ -6,6 +6,7 @@ import Breadcrumb from './Breadcrumb.vue'
 // import Notice from './Notice.vue'
 import { Expand, Fold, List, SwitchButton, UserFilled } from '@element-plus/icons-vue'
 import 'element-plus/theme-chalk/src/dropdown.scss'
+
 const globalStore = GlobalStore()
 const router = useRouter()
 const logOut = () => {
@@ -37,7 +38,7 @@ setInterval(() => {
 <template>
   <div class="header">
     <el-row>
-      <el-col :xl="15" :lg="13" :sm="12" class="d-flex">
+      <el-col :xl="16" :lg="14" :sm="13" class="d-flex">
         <el-button
           class="isCollapse"
           type="primary"
@@ -89,24 +90,8 @@ setInterval(() => {
           </template>
         </el-dropdown>
       </el-col>
-      <el-col :xl="2" :sm="3" class="notice">{{ time }}</el-col>
+      <el-col :xl="1" :sm="2" class="notice">{{ time }}</el-col>
     </el-row>
-    <!-- <el-menu class="el-menu-demo" mode="horizontal" :ellipsis="false">
-      <div style="flex-grow: 1" />
-      <el-menu-item index="1">Element Plus</el-menu-item>
-      <el-sub-menu index="2">
-        <template #title>Workspace</template>
-        <el-menu-item index="2-1">item one</el-menu-item>
-        <el-menu-item index="2-2">item two</el-menu-item>
-        <el-menu-item index="2-3">item three</el-menu-item>
-        <el-sub-menu index="2-4">
-          <template #title>item four</template>
-          <el-menu-item index="2-4-1">item one</el-menu-item>
-          <el-menu-item index="2-4-2">item two</el-menu-item>
-          <el-menu-item index="2-4-3">item three</el-menu-item>
-        </el-sub-menu>
-      </el-sub-menu>
-    </el-menu> -->
   </div>
 </template>
 

+ 2 - 98
src/router/modules/staticRouter.ts

@@ -15,70 +15,22 @@ export const staticRouter: RouteRecordRaw[] = [
     },
     children: [
       {
-        path: '/list',
-        name: 'List',
-        component: () => import('@/views/storehouse/List.vue'),
-        meta: {
-          title: '仓库列表'
-        }
-      },
-      {
-        path: '/classify',
-        name: 'Classify',
-        component: () => import('@/views/storehouse/Classify.vue'),
-        meta: {
-          title: '产品分类'
-        }
-      },
-      {
-        path: '/productionList',
-        name: 'ProductionList',
-        component: () => import('@/views/storehouse/ProductionList.vue'),
-        meta: {
-          title: '产品列表'
-        }
-      },
-      {
-        path: '/ioTNetworkCard',
-        name: 'IoTNetworkCard',
-        component: () => import('@/views/storehouse/IoTNetworkCard.vue'),
-        meta: {
-          title: '物联网卡'
-        }
-      },
-      {
         path: '/saleMange',
         name: 'SaleMange',
         component: () => import('@/views/storehouse/sales/index.vue'),
-        // redirect: '/contract',
+        redirect: '/contract',
         meta: {
           routerView: true,
           title: '销售管理'
         },
         children: [
           {
-            path: '/contract',
-            name: 'Contract',
-            component: () => import('@/views/storehouse/sales/Contract.vue'),
-            meta: {
-              title: '合同管理'
-            }
-          },
-          {
             path: '/contractDetail/:id/:type',
             name: 'ContractDetail',
             component: () => import('@/views/storehouse/sales/ContractDetail.vue'),
             meta: {
               title: '合同详情'
             }
-          },
-          {
-            path: '/contractSale',
-            name: 'ContractSale',
-            component: () => import('@/views/storehouse/sales/ContractSale.vue'),
-            meta: {
-              title: '合同详情(销售)'
-            }
           }
         ]
       },
@@ -86,29 +38,13 @@ export const staticRouter: RouteRecordRaw[] = [
         path: '/inventoryMange',
         name: 'InventoryMange',
         component: () => import('@/views/storehouse/inventory/index.vue'),
-        // redirect: '/contract',
+        redirect: '/contract',
         meta: {
           routerView: true,
           title: '库存管理'
         },
         children: [
           {
-            path: '/device',
-            name: 'Device',
-            component: () => import('@/views/storehouse/inventory/Device.vue'),
-            meta: {
-              title: '设备列表'
-            }
-          },
-          {
-            path: '/inStorage',
-            name: 'InStorage',
-            component: () => import('@/views/storehouse/inventory/InStorage.vue'),
-            meta: {
-              title: '入库管理'
-            }
-          },
-          {
             path: '/inStorageDetail/:id',
             name: 'InStorageDetail',
             component: () => import('@/views/storehouse/inventory/InStorageDetail.vue'),
@@ -117,14 +53,6 @@ export const staticRouter: RouteRecordRaw[] = [
             }
           },
           {
-            path: '/outStock',
-            name: 'OutStock',
-            component: () => import('@/views/storehouse/outStock/OutStock.vue'),
-            meta: {
-              title: '出库管理'
-            }
-          },
-          {
             path: '/receiveOutStock',
             name: 'ReceiveOutStock',
             component: () => import('@/views/storehouse/outStock/ReceiveOutStock.vue'),
@@ -147,33 +75,9 @@ export const staticRouter: RouteRecordRaw[] = [
             meta: {
               title: '出库详情'
             }
-          },
-          {
-            path: '/inventoryStatistics',
-            name: 'InventoryStatistics',
-            component: () => import('@/views/storehouse/InventoryStatistics.vue'),
-            meta: {
-              title: '库存统计'
-            }
           }
         ]
       },
-      // {
-      //   path: '/contract',
-      //   name: 'Contract',
-      //   component: () => import('@/views/storehouse/sales/Contract.vue'),
-      //   meta: {
-      //     title: '合同管理'
-      //   }
-      // },
-      // {
-      //   path: '/contract-detail/:id',
-      //   name: 'ContractDetail',
-      //   component: () => import('@/views/storehouse/sales/ContractDetail.vue'),
-      //   meta: {
-      //     title: '合同详情'
-      //   }
-      // },
       {
         path: '/user',
         name: 'User',

+ 11 - 0
src/styles/element/dark.scss

@@ -0,0 +1,11 @@
+// only scss variables
+
+$--colors: (
+  'primary': (
+    'base': #589ef8
+  )
+);
+
+@forward 'element-plus/theme-chalk/src/dark/var.scss' with (
+  $colors: $--colors
+);

+ 42 - 0
src/styles/element/index.scss

@@ -0,0 +1,42 @@
+$--colors: (
+  'primary': (
+    'base': green
+  ),
+  'success': (
+    'base': #21ba45
+  ),
+  'warning': (
+    'base': #f2711c
+  ),
+  'danger': (
+    'base': #db2828
+  ),
+  'error': (
+    'base': #db2828
+  ),
+  'info': (
+    'base': #42b8dd
+  )
+);
+
+// we can add this to custom namespace, default is 'el'
+@forward 'element-plus/theme-chalk/src/mixins/config.scss' with (
+  $namespace: 'ep'
+);
+
+// You should use them in scss, because we calculate it by sass.
+// comment next lines to use default color
+@forward 'element-plus/theme-chalk/src/common/var.scss' with (
+  // do not use same name, it will override.
+  $colors: $--colors,
+  $button-padding-horizontal: ('default': 50px)
+);
+
+// if you want to import all
+// @use "element-plus/theme-chalk/src/index.scss" as *;
+
+// You can comment it to hide debug info.
+// @debug $--colors;
+
+// custom dark variables
+@use './dark.scss';

+ 15 - 0
src/styles/index.scss

@@ -0,0 +1,15 @@
+// @use 'element-plus/theme-chalk/src/index.scss' as *;
+
+// @forward 'element-plus/theme-chalk/src/common/var.scss' with (
+//   $colors: (
+//     'primary': (
+//       'base': green
+//     )
+//   )
+// );
+
+$--color-primary: #0078d7;
+$--color-success: #107c10;
+$--color-warning: #d9822b;
+$--color-danger: #a80000;
+$--el-color-primary: #eebe77;

+ 34 - 16
src/utils/common.ts

@@ -44,7 +44,11 @@ const path = {
   salary: ['/salary'],
   salarys: ['/salaryCount', '/salaryMy'],
   workAttendance: ['/leave', '/myLeave', '/myOvertime', '/overtime', '/recordsFinance'],
-  records: ['/records']
+  records: ['/records'],
+  storehouse: ['/list', '/classify', '/productionList', '/ioTNetworkCard', '/inventoryStatistics'],
+  inventory: ['/device', '/inStorage'],
+  outStock: ['/outStock'],
+  sales: ['/contract', '/contractSale']
 }
 
 const permissionPath = (permission: string): string => {
@@ -60,22 +64,16 @@ const permissionPath = (permission: string): string => {
     return '/workAttendance'
   } else if (path.records.includes(permission)) {
     return '/workAttendance/records'
+  } else if (path.storehouse.includes(permission)) {
+    return '/storehouse'
+  } else if (path.inventory.includes(permission)) {
+    return '/storehouse/inventory'
+  } else if (path.outStock.includes(permission)) {
+    return '/storehouse/outStock'
+  } else if (path.sales.includes(permission)) {
+    return '/storehouse/sales'
   }
   return '/home'
-  // switch (permission) {
-  //   case '/roles':
-  //     return '/account/roles'
-  //   case '/users':
-  //     return '/account/users'
-  //   case '/salarys':
-  //     return '/salarys'
-  //   case '/workAttendance':
-  //     return '/workAttendance'
-  //   case '/records':
-  //     return '/workAttendance/records'
-  //   default:
-  //     return '/home'
-  // }
 }
 
 const get_name = (name: string): string => {
@@ -169,7 +167,27 @@ export const icons: iconsType = {
   ue690: '\ue690',
   ue663: '\ue663',
   ue7cd: '\ue7cd',
-  ue831: '\ue831'
+  ue831: '\ue831',
+  ue7ec: '\ue7ec',
+  ue626: '\ue626',
+  ue608: '\ue608',
+  ue60c: '\ue60c',
+  ue607: '\ue607',
+  ue72c: '\ue72c',
+  ue71f: '\ue71f',
+  ue682: '\ue682',
+  ue670: '\ue670',
+  ue60b: '\ue60b',
+  ue88f: '\ue88f',
+  ue612: '\ue612',
+  ue60a: '\ue60a',
+  ue613: '\ue613',
+  ue628: '\ue628',
+  ue60f: '\ue60f',
+  ue7e8: '\ue7e8',
+  ue62a: '\ue62a',
+  ue63a: '\ue63a',
+  ue7d3: '\ue7d3'
 }
 export function debounce<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => void {
   let timerId: number | undefined

+ 1 - 1
src/views/workAttendance/Leave.vue

@@ -132,7 +132,7 @@ const tableRowClassName = (data: any): any => {
               >
               <el-descriptions-item label="开始时间:"
                 ><el-text class="mx-1" type="primary">{{
-                  userInfo.T_start_time ? userInfo.T_type_name : '-'
+                  userInfo.T_start_time ? userInfo.T_start_time : '-'
                 }}</el-text></el-descriptions-item
               >
               <el-descriptions-item label="结束时间:" :span="2"

+ 3 - 7
src/views/workAttendance/MyLeave.vue

@@ -59,8 +59,9 @@ const openDrawerLeave = (str: string, row: any) => {
     nextTick(() => {
       form.value = { ...row }
       uuid = row.T_approver
-      form.value.T_approver = row.T_user_name
+      form.value.T_approver = row.T_approver_name
       form.value.T_id = row.Id
+      form.value.T_duration = row.T_duration / 60
     })
   }
 }
@@ -187,13 +188,9 @@ const computedDuration = async () => {
     T_end_time: form.value.T_end_time
   }
   const res: any = await Leave_Duration(parasm)
-  res.Data && (form.value.T_duration = res.Data / 60)
+  res.Data && (form.value.T_duration = Number((res.Data / 60).toFixed(1)))
 }
 
-const onResize = () => {
-  const height = document.documentElement.clientHeight
-  return height / 2
-}
 onMounted(() => {
   getLeaveTypeList()
   getLeaveDaysOff()
@@ -306,7 +303,6 @@ onMounted(() => {
         :initParam="approverInitParam"
         :requestApi="User_List"
         layout="total, prev, pager, next"
-        :onResize="onResize"
       >
         <template #table-header>
           <el-row :gutter="20">

+ 7 - 0
vite.config.ts

@@ -20,6 +20,13 @@ export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
         '@assets': path.resolve(__dirname, './assets/images')
       }
     },
+    css: {
+      preprocessorOptions: {
+        scss: {
+          additionalData: `@use "@/styles/index.scss";`
+        }
+      }
+    },
     server: {
       open: true,
       host: '0.0.0.0',