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",