From 2fe71b0f2740f7efefe5db97b70e2fdd5669f057 Mon Sep 17 00:00:00 2001
From: gaoshuaixing <530353222@qq.com>
Date: Sat, 11 Jan 2025 15:13:13 +0800
Subject: [PATCH] ui: add types
---
frontend/package.json | 2 +-
frontend/src/App.vue | 4 ++--
frontend/src/components/global/iconFont.ts | 8 +++++--
frontend/src/components/global/index.ts | 2 +-
frontend/src/layouts/AppSider.vue | 25 ++++++++++++++++------
frontend/src/layouts/Menu.vue | 15 +++++++------
frontend/src/main.ts | 23 ++++++++++++--------
frontend/src/router/index.ts | 4 ++--
frontend/src/router/subMenu.ts | 23 ++++++++++++++++++--
frontend/src/types/env.d.ts | 12 +++++++++++
frontend/src/types/pinia.d.ts | 0
frontend/src/types/shim.d.ts | 0
frontend/src/types/source.d.ts | 7 ++++++
frontend/src/utils/ipcRenderer.ts | 6 ++++++
frontend/tsconfig.json | 2 ++
package.json | 8 +++----
16 files changed, 105 insertions(+), 36 deletions(-)
create mode 100644 frontend/src/types/env.d.ts
create mode 100644 frontend/src/types/pinia.d.ts
create mode 100644 frontend/src/types/shim.d.ts
create mode 100644 frontend/src/types/source.d.ts
diff --git a/frontend/package.json b/frontend/package.json
index ed42903..b4637cc 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -29,7 +29,7 @@
"postcss-pxtorem": "^6.0.0",
"terser": "^5.19.1",
"typescript": "^5.4.2",
- "vite": "^4.4.4",
+ "vite": "^6.0.7",
"vite-plugin-compression": "^0.5.1"
}
}
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index f9684e6..49daf58 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -1,13 +1,13 @@
-
diff --git a/frontend/src/components/global/iconFont.ts b/frontend/src/components/global/iconFont.ts
index 6ee51f0..6c675dc 100644
--- a/frontend/src/components/global/iconFont.ts
+++ b/frontend/src/components/global/iconFont.ts
@@ -1,5 +1,5 @@
import { createFromIconfontCN } from '@ant-design/icons-vue'
-import { h } from 'vue'
+import { h, VNode } from 'vue'
const IconFont = createFromIconfontCN({
scriptUrl: 'https://at.alicdn.com/t/font_2456157_4ovzopz659q.js',
@@ -11,7 +11,11 @@ const IconFont = createFromIconfontCN({
},
})
-const DynamicIconFont = props => {
+interface Props {
+ type?: string;
+}
+
+const DynamicIconFont = (props: Props): VNode => {
return h(IconFont, { type: props.type || 'icon-fengche' })
}
diff --git a/frontend/src/components/global/index.ts b/frontend/src/components/global/index.ts
index ce4d0e2..3c7401f 100644
--- a/frontend/src/components/global/index.ts
+++ b/frontend/src/components/global/index.ts
@@ -1,7 +1,7 @@
import iconFont from './iconFont';
// Use import.meta.globEager to dynamically import all .vue files in the directory
-const modules = import.meta.globEager('./*.vue');
+const modules: { [key: string]: { default: any } } = import.meta.glob('./*.vue', { eager: true });
// Create a map of component names to their default exports
const map: { [key: string]: any } = {};
diff --git a/frontend/src/layouts/AppSider.vue b/frontend/src/layouts/AppSider.vue
index a9ff2b4..bd4b9ac 100644
--- a/frontend/src/layouts/AppSider.vue
+++ b/frontend/src/layouts/AppSider.vue
@@ -29,15 +29,28 @@
-
diff --git a/frontend/src/main.ts b/frontend/src/main.ts
index 8cc0c5f..06cf297 100644
--- a/frontend/src/main.ts
+++ b/frontend/src/main.ts
@@ -9,16 +9,21 @@ import Router from './router/index';
const app = createApp(App)
-// Register global components
-Object.keys(components).forEach((key) => {
- app.component(key, components[key]);
-});
+// components
+type ComponentsType = typeof components;
+for (const componentName in components) {
+ if (Object.prototype.hasOwnProperty.call(components, componentName)) {
+ const component = components[componentName as keyof ComponentsType];
+ app.component(componentName, component);
+ }
+}
-// Register Ant Design Vue icons
-Object.keys(AntIcon).forEach((key) => {
- const whiteList = ['createFromIconfontCN', 'getTwoToneColor', 'setTwoToneColor', 'default'];
- if (!whiteList.includes(key)) {
- app.component(key, AntIcon[key]);
+// icon
+const whiteList = ['createFromIconfontCN', 'getTwoToneColor', 'setTwoToneColor', 'default']
+const iconKeys = Object.keys(AntIcon) as Array;
+iconKeys.forEach(key => {
+ if (!whiteList.includes(key as typeof whiteList[number])) {
+ app.component(key.toString(), AntIcon[key]);
}
});
diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts
index e69c70f..bb03e09 100644
--- a/frontend/src/router/index.ts
+++ b/frontend/src/router/index.ts
@@ -1,9 +1,9 @@
-import { createRouter, createWebHashHistory } from 'vue-router'
+import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
import routerMap from './routerMap'
const Router = createRouter({
history: createWebHashHistory(),
- routes: routerMap,
+ routes: routerMap as RouteRecordRaw[],
})
export default Router
diff --git a/frontend/src/router/subMenu.ts b/frontend/src/router/subMenu.ts
index 9c5b462..be8c207 100644
--- a/frontend/src/router/subMenu.ts
+++ b/frontend/src/router/subMenu.ts
@@ -1,5 +1,24 @@
// 子菜单
-export default {
+
+export interface MenuItem {
+ icon: string;
+ title: string;
+ pageName: string;
+ params: Record;
+}
+
+export interface MenuCategory {
+ [key: string]: MenuItem;
+}
+
+export interface MenuStructure {
+ framework: MenuCategory;
+ os: MenuCategory;
+ effect: MenuCategory;
+ cross: MenuCategory;
+}
+
+export const subMenu: MenuStructure = {
framework: {
'menu_100' : {
icon: 'profile',
@@ -98,4 +117,4 @@ export default {
params: {}
},
},
-}
+}
\ No newline at end of file
diff --git a/frontend/src/types/env.d.ts b/frontend/src/types/env.d.ts
new file mode 100644
index 0000000..1d1226d
--- /dev/null
+++ b/frontend/src/types/env.d.ts
@@ -0,0 +1,12 @@
+///
+declare module '*.vue' {
+ import type { DefineComponent } from 'vue';
+ const component: DefineComponent<{}, {}, any>;
+ export default component;
+}
+
+// declare global {
+// interface Window {
+// electron?: any;
+// }
+// }
\ No newline at end of file
diff --git a/frontend/src/types/pinia.d.ts b/frontend/src/types/pinia.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/frontend/src/types/shim.d.ts b/frontend/src/types/shim.d.ts
new file mode 100644
index 0000000..e69de29
diff --git a/frontend/src/types/source.d.ts b/frontend/src/types/source.d.ts
new file mode 100644
index 0000000..d04f0da
--- /dev/null
+++ b/frontend/src/types/source.d.ts
@@ -0,0 +1,7 @@
+// 声明一个模块,防止引入文件时报错
+declare module '*.json';
+declare module '*.png';
+declare module '*.jpg';
+declare module '*.scss';
+declare module '*.ts';
+declare module '*.js';
\ No newline at end of file
diff --git a/frontend/src/utils/ipcRenderer.ts b/frontend/src/utils/ipcRenderer.ts
index b229b36..919fd77 100644
--- a/frontend/src/utils/ipcRenderer.ts
+++ b/frontend/src/utils/ipcRenderer.ts
@@ -1,3 +1,9 @@
+declare global {
+ interface Window {
+ electron?: any;
+ }
+}
+
const Renderer = (window.require && window.require('electron')) || window.electron || {};
/**
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
index b54c237..7d6abf9 100644
--- a/frontend/tsconfig.json
+++ b/frontend/tsconfig.json
@@ -12,6 +12,8 @@
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"importHelpers": true,
+ "resolveJsonModule": true,
+
// 定义一个变量就必须给它一个初始值
"strictPropertyInitialization": false,
// 允许使用obj[key]访问对象属性
diff --git a/package.json b/package.json
index d42af0d..d17c041 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,7 @@
"scripts": {
"dev": "ee-bin dev",
"build": "npm run build-frontend && ee-bin encrypt",
- "start": "ee-bin start",
+ "start": "ee-bin encrypt && ee-bin start",
"dev-frontend": "ee-bin dev --serve=frontend",
"dev-electron": "ee-bin dev --serve=electron",
"dev-go": "ee-bin exec --cmds=go",
@@ -17,14 +17,14 @@
"build-go-m": "ee-bin move --flag=go_static,go_config,go_package,go_images && ee-bin build --cmds=go_m",
"build-go-l": "ee-bin move --flag=go_static,go_config,go_package,go_images && ee-bin build --cmds=go_l",
"build-python": "ee-bin build --cmds=python && ee-bin move --flag=python_dist",
- "clean": "ee-bin clean",
- "icon": "ee-bin icon",
- "re-sqlite": "electron-rebuild -f -w better-sqlite3",
"build-w": "ee-bin build --cmds=win64",
"build-we": "ee-bin build --cmds=win_e",
"build-m": "ee-bin build --cmds=mac",
"build-m-arm64": "ee-bin build --cmds=mac_arm64",
"build-l": "ee-bin build --cmds=linux",
+ "clean": "ee-bin clean",
+ "icon": "ee-bin icon",
+ "re-sqlite": "electron-rebuild -f -w better-sqlite3",
"debug-dev": "cross-env DEBUG=ee-* ee-bin dev",
"debug-encrypt": "ee-bin encrypt",
"debug-electron": "cross-env DEBUG=ee-* ee-bin dev --serve=electron",