feat: 语法错误修复

This commit is contained in:
duanshuwen
2025-12-09 22:18:36 +08:00
parent b842f946a5
commit aab6ffb174
28 changed files with 372 additions and 3301 deletions

View File

@@ -1,80 +0,0 @@
{
"env": {
"browser": true,
"es6": true,
"node": true,
"no-console": "off"
},
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"plugin:import/recommended",
"plugin:import/electron",
"plugin:import/typescript"
],
"parser": "@typescript-eslint/parser",
"plugins": ["vue", "@typescript-eslint"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.vue"],
"rules": {
"no-undef": "off"
}
}
],
"rules": {
// http://eslint.cn/docs/rules/
// https://eslint.vuejs.org/rules/
// https://typescript-eslint.io/rules/no-unused-vars/
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/explicit-function-return-type": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-var-requires": "off",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-use-before-define": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/ban-types": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"@typescript-eslint/explicit-module-boundary-types": "off",
"@typescript-eslint/no-redeclare": "error",
"@typescript-eslint/no-non-null-asserted-optional-chain": "off",
"@typescript-eslint/no-unused-vars": [2],
"vue/custom-event-name-casing": "off",
"vue/attributes-order": "off",
"vue/one-component-per-file": "off",
"vue/html-closing-bracket-newline": "off",
"vue/max-attributes-per-line": "off",
"vue/multiline-html-element-content-newline": "off",
"vue/singleline-html-element-content-newline": "off",
"vue/attribute-hyphenation": "off",
"vue/html-self-closing": "off",
"vue/no-multiple-template-root": "off",
"vue/require-default-prop": "off",
"vue/no-v-model-argument": "off",
"vue/no-arrow-functions-in-watch": "off",
"vue/no-template-key": "off",
"vue/no-v-html": "off",
"vue/comment-directive": "off",
"vue/no-mutating-props": "off",
"vue/no-parsing-error": "off",
"vue/no-deprecated-v-on-native-modifier": "off",
"vue/multi-word-component-names": "off",
"no-useless-escape": "off",
"no-sparse-arrays": "off",
"no-prototype-builtins": "off",
"no-constant-condition": "off",
"no-use-before-define": "off",
"no-restricted-globals": "off",
"no-restricted-syntax": "off",
"generator-star-spacing": "off",
"no-unreachable": "off",
"no-multiple-template-root": "off",
"no-unused-vars": "error",
"no-v-model-argument": "off",
"no-case-declarations": "off",
"no-console": "error",
"no-redeclare": "off",
"no-mixed-spaces-and-tabs": "off"
}
}

7
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,7 @@
{
"i18n-ally.localesPaths": [
"locales"
],
"i18n-ally.displayLanguage": "zh",
"i18n-ally.keystyle": "nested"
}

7
env.d.ts vendored Normal file
View File

@@ -0,0 +1,7 @@
declare module "@store/*";
declare module "@modules/*";
declare module "@utils/*";
declare module "@assets/images/*";
declare module "@constant/*";
declare module "@remixicon/vue";
declare module "vue-router";

83
global.d.ts vendored
View File

@@ -1,7 +1,78 @@
declare module "@store/*";
declare module "@utils/*";
declare module "@assets/images/*";
declare module "@constant/*";
declare module "@remixicon/vue";
declare module "vue-router";
import { IPC_EVENTS } from '@common/constants'
declare global {
// 定义每个通道的参数和返回值类型
interface IPCTypings {
// 同步通信
[IPC_EVENTS.APP_MINIMIZE]: {
params: [window:number]
return: {success: boolean, error?: string}
}
[IPC_EVENTS.APP_MAXIMIZE]: {
params: [window:number]
return: {success: boolean, error?: string}
}
[IPC_EVENTS.GET_WINDOW_ID]: {
params: []
return: number
}
// 异步通信
[IPC_EVENTS.FILE_READ]: {
params: [filePath: string]
return: Promise<{success: boolean, data?: string, error?: string}>
}
[IPC_EVENTS.FILE_WRITE]: {
params: [filePath: string, content: string]
return: Promise<{success: boolean, error?: string}>
}
// 事件通信
[IPC_EVENTS.TIME_UPDATE]: {
params: [time: string]
return: void
}
[IPC_EVENTS.CUSTOM_EVENT]: {
params: [message: string]
return: void
}
}
// 定义IPC API 接口
interface WindowApi {
invoke<T extends keyof IPCTypings>(channel: T, ...args: IPCTypings[T]['params']): IPCTypings[T]['return'],
invokeAsync<T extends keyof IPCTypings>(channel: T, ...args: IPCTypings[T]['params']): IPCTypings[T]['return'],
on<T extends keyof IPCTypings>(channel: T, callback: (...args: IPCTypings[T]['params']) => void): () => void
send<T extends keyof IPCTypings>(channel: T, ...args: IPCTypings[T]['params']): void,
getCurrentWindowId(): number,
versions: NodeJS.ProcessVersions,
external: {
open: (url: string) => void
},
window: {
minimize: () => void,
maximize: () => void,
close: () => void
},
app: {
setFrameless: (route?: string) => void
},
tabs: {
create: (url?: string) => void,
list: () => void,
navigate: (tabId: string, url: string) => void,
reload: (tabId: string) => void,
back: (tabId: string) => void,
forward: (tabId: string) => void,
switch: (tabId: string) => void,
close: (tabId: string) => void,
on: (event: 'tab-updated' | 'tab-created' | 'tab-closed' | 'tab-switched', handler: (payload: any) => void) => void
},
readFile: (filePath: string) => Promise<{success: boolean, data?: string, error?: string}>,
logToMain: (logLevel: string, message: string) => void,
}
declare interface Window {
api: WindowApi;
}
}

3209
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -35,13 +35,9 @@
"@types/electron-squirrel-startup": "^1.0.2",
"@types/lodash-es": "^4.17.12",
"@typescript-eslint/parser": "^5.62.0",
"@types/node": "^24.0.8",
"@vitejs/plugin-vue": "^5.2.4",
"autoprefixer": "^10.4.21",
"electron": "38.2.2",
"eslint": "^8.57.1",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-vue": "^10.6.0",
"sass-embedded": "^1.89.1",
"tailwindcss": "^4.1.11",
"typescript": "^5.8.3",
"unplugin-auto-import": "^20.3.0",
@@ -52,7 +48,6 @@
"@vueuse/core": "^14.1.0",
"dotenv-cli": "^11.0.0",
"electron-log": "^5.4.3",
"axios": "^1.12.2",
"bytenode": "^1.5.7",
"crypto": "^1.0.1",
"electron-squirrel-startup": "^1.0.1",

View File

@@ -36,73 +36,6 @@ export const MAIN_WIN_SIZE = {
} as const
// 定义每个通道的参数和返回值类型
interface IPCTypings {
// 同步通信
[IPC_EVENTS.APP_MINIMIZE]: {
params: [window:number]
return: {success: boolean, error?: string}
}
[IPC_EVENTS.APP_MAXIMIZE]: {
params: [window:number]
return: {success: boolean, error?: string}
}
[IPC_EVENTS.GET_WINDOW_ID]: {
params: []
return: number
}
// 异步通信
[IPC_EVENTS.FILE_READ]: {
params: [filePath: string]
return: Promise<{success: boolean, data?: string, error?: string}>
}
[IPC_EVENTS.FILE_WRITE]: {
params: [filePath: string, content: string]
return: Promise<{success: boolean, error?: string}>
}
// 事件通信
[IPC_EVENTS.TIME_UPDATE]: {
params: [time: string]
return: void
}
[IPC_EVENTS.CUSTOM_EVENT]: {
params: [message: string]
return: void
}
}
// 定义IPC API 接口
export interface WindowApi {
invoke<T extends keyof IPCTypings>(channel: T, ...args: IPCTypings[T]['params']): IPCTypings[T]['return'],
invokeAsync<T extends keyof IPCTypings>(channel: T, ...args: IPCTypings[T]['params']): IPCTypings[T]['return'],
on<T extends keyof IPCTypings>(channel: T, callback: (...args: IPCTypings[T]['params']) => void): () => void
send<T extends keyof IPCTypings>(channel: T, ...args: IPCTypings[T]['params']): void,
getCurrentWindowId(): number,
versions: NodeJS.ProcessVersions,
external: {
open: (url: string) => void
},
window: {
minimize: () => void,
maximize: () => void,
close: () => void
},
app: {
setFrameless: (route?: string) => void
},
tabs: {
create: (url?: string) => void,
list: () => void,
navigate: (tabId: string, url: string) => void,
reload: (tabId: string) => void,
back: (tabId: string) => void,
forward: (tabId: string) => void,
switch: (tabId: string) => void,
close: (tabId: string) => void,
on: (event: 'tab-updated' | 'tab-created' | 'tab-closed' | 'tab-switched', handler: (payload: any) => void) => void
},
readFile: (filePath: string) => Promise<{success: boolean, data?: string, error?: string}>,
logToMain: (logLevel: string, message: string) => void,
}

View File

@@ -1,5 +1,5 @@
import { contextBridge, ipcRenderer } from 'electron'
import { IPC_EVENTS, WindowApi } from '@common/constants';
import { IPC_EVENTS } from '@common/constants';
const api: WindowApi = {
versions: process.versions,

View File

@@ -10,16 +10,13 @@
</template>
<script setup lang="ts">
import { defineProps } from 'vue'
const props = defineProps({
title: {
type: String,
default: ''
},
desc: {
type: String,
default: ''
interface TitleSectionProps {
title?: string
desc?: string
}
})
withDefaults(
defineProps<TitleSectionProps>(),
{ title: '', desc: '' }
)
</script>

View File

@@ -1,13 +0,0 @@
<template>
<ul class="versions">
<li class="electron-version">Electron v{{ versions.electron }}</li>
<li class="chrome-version">Chromium v{{ versions.chrome }}</li>
<li class="node-version">Node v{{ versions.node }}</li>
</ul>
</template>
<script setup lang="ts">
import { reactive } from 'vue'
const versions = reactive({ ...window.electron.process.versions })
</script>

View File

@@ -19,6 +19,6 @@
</template>
<script setup lang="ts" name="Layout">
import TaskList from '@/components/TaskList/index.vue'
import Menus from '@/components/Menus/index.vue'
import TaskList from '@renderer/components/TaskList/index.vue'
import Menus from '@renderer/components/Menus/index.vue'
</script>

View File

@@ -1,16 +1,16 @@
import { createRouter, createWebHistory } from "vue-router";
import Layout from '@/layout/index.vue'
import Layout from '@renderer/layout/index.vue'
const routes = [
{
path: "/login",
name: "Login",
component: () => import("@/views/login/index.vue"),
component: () => import("@renderer/views/login/index.vue"),
},
{
path: "/browser",
name: "Browser",
component: () => import("@/browser/BrowserLayout.vue"),
component: () => import("@renderer/browser/BrowserLayout.vue"),
meta: { requiresAuth: true },
},
{
@@ -19,44 +19,44 @@ const routes = [
children: [
{
path: "home",
component: () => import("@/views/home/index.vue"),
component: () => import("@renderer/views/home/index.vue"),
name: "Home",
meta: { requiresAuth: true },
},
{
path: "stock",
name: "Stock",
component: () => import("@/views/stock/index.vue"),
component: () => import("@renderer/views/stock/index.vue"),
meta: { requiresAuth: true },
},
{
path: "rate",
name: "Rate",
component: () => import("@/views/rate/index.vue"),
component: () => import("@renderer/views/rate/index.vue"),
meta: { requiresAuth: true },
},
{
path: "order",
name: "Order",
component: () => import("@/views/order/index.vue"),
component: () => import("@renderer/views/order/index.vue"),
meta: { requiresAuth: true },
},
{
path: "more",
name: "More",
component: () => import("@/views/more/index.vue"),
component: () => import("@renderer/views/more/index.vue"),
meta: { requiresAuth: true },
},
{
path: "setting",
name: "Setting",
component: () => import("@/views/setting/index.vue"),
component: () => import("@renderer/views/setting/index.vue"),
meta: { requiresAuth: true },
},
{
path: "/dashboard",
name: "Dashboard",
component: () => import("@/views/dashboard/index.vue"),
component: () => import("@renderer/views/dashboard/index.vue"),
meta: { requiresAuth: true },
},
]
@@ -64,7 +64,7 @@ const routes = [
{
path: "/about",
name: "About",
component: () => import("@/views/about/index.vue"),
component: () => import("@renderer/views/about/index.vue"),
},
];

View File

View File

@@ -1,12 +0,0 @@
export interface PaginationProps {
currentPage?: number
total: number
pageSize: number
pageSizes?: number[]
}
export interface EmitsProps {
(e: 'update:currentPage', value: number): void
(e: 'update:pageSize', value: string): void
(e: 'currentChange', value: number): void
}

View File

@@ -1,3 +0,0 @@
import { PaginationProps, EmitsProps } from './PaginationProps'
export { PaginationProps, EmitsProps }

View File

@@ -77,7 +77,7 @@
<script setup lang="ts">
import { ref, reactive } from "vue";
import { useRouter } from "vue-router";
// import { login as apiLogin } from "@/renderer/api/login";
// import { login as apiLogin } from "@renderer/api/login";
import { RiUser3Fill, RiKey2Fill } from '@remixicon/vue'
const router = useRouter();

View File

@@ -16,8 +16,8 @@
<script setup lang="ts" name="RateContentSection">
import { ref } from 'vue'
import { commentList } from '@/constant/rate'
import Pagination from '@/components/Pagination/index.vue'
import { commentList } from '@renderer/constant/rate'
import Pagination from '@renderer/components/Pagination/index.vue'
import RateFilterSection from '../RateFilterSection/index.vue'
import RateListSection from '../RateListSection/index.vue'

View File

@@ -7,7 +7,7 @@
</template>
<script setup lang="ts" name="Rate">
import TitleSection from '@/components/TitleSection/index.vue'
import TitleSection from '@renderer/components/TitleSection/index.vue'
import RatePanelSection from './components/RatePanelSection/index.vue'
import RateContentSection from './components/RateContentSection/index.vue'
</script>

View File

@@ -24,6 +24,6 @@
<script setup lang="ts">
import { RiCheckboxCircleFill } from '@remixicon/vue'
import TitleSection from '@/components/TitleSection/index.vue'
import TitleSection from '@renderer/components/TitleSection/index.vue'
</script>

View File

@@ -31,6 +31,6 @@
<script setup lang="ts">
import { channel } from '@constant/channel'
import { RiForbidLine } from '@remixicon/vue'
import TitleSection from '@/components/TitleSection/index.vue'
import TitleSection from '@renderer/components/TitleSection/index.vue'
</script>

View File

@@ -15,7 +15,7 @@
<script setup lang="ts">
import { ref, defineEmits } from 'vue'
import { systemMenus } from '@/constant/system-config'
import { systemMenus } from '@renderer/constant/system-config'
const currentId = ref(1)

View File

@@ -12,5 +12,5 @@
</template>
<script setup lang="ts">
import TitleSection from '@/components/TitleSection/index.vue'
import TitleSection from '@renderer/components/TitleSection/index.vue'
</script>

46
tsconfig.app.json Normal file
View File

@@ -0,0 +1,46 @@
{
"compilerOptions": {
"composite": true,
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": [
"ES2020",
"DOM",
"DOM.Iterable"
],
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "Bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
"jsx": "preserve",
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": "./",
"paths": {
"@renderer/*": ["src/renderer/*"],
"@api/*": ["src/renderer/api/*"],
"@shared/*": ["src/renderer/shared/*"],
"@store/*": ["src/renderer/store/*"],
"@constant/*": ["src/renderer/constant/*"],
"@utils/*": ["src/renderer/utils/*"],
"@common/*": ["src/common/*"],
"@modules/*": ["src/main/modules/*"]
},
"types": ["element-plus/global", "vue"]
},
"include": [
"forge.env.d.ts",
"src/renderer/**/*.vue",
"**/*.d.ts",
"**/*.ts",
]
}

16
tsconfig.config.json Normal file
View File

@@ -0,0 +1,16 @@
{
"compilerOptions": {
"composite": true,
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.config.tsbuildinfo",
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true,
"strict": true,
"noEmit": true
},
"include": [
"**.config.ts",
"**/*.ts",
]
}

View File

@@ -1,45 +1,15 @@
{
"files": [],
"references": [
{"path": "./tsconfig.app.json"},
{"path": "./tsconfig.config.json"}
],
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"lib": ["dom", "ESNext"],
"experimentalDecorators": true,
"composite": true,
"declaration": true,
"forceConsistentCasingInFileNames": true,
"allowJs": false,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"noImplicitAny": true,
"sourceMap": true,
"strict": true,
"baseUrl": ".",
"baseUrl": "./",
"paths": {
"@/*": ["src/renderer/*"],
"@assets/*": ["src/assets/*"],
"@common/*": ["src/common/*"],
"@store/*": ["src/renderer/store/*"],
"@constant/*": ["src/renderer/constant/*"],
"@utils/*": ["src/renderer/utils/*"],
"@api/*": ["src/renderer/api/*"],
"@/types": ["src/renderer/types/index.ts"],
"@modules/*": ["src/main/modules/*"],
"@/shared/*": ["src/shared/*"],
},
"outDir": "dist",
"moduleResolution": "Bundler",
"resolveJsonModule": true,
"types": ["element-plus/global"]
},
"include": [
"src/**/*",
"./package.json",
"./forge.config.ts",
"forge.env.d.ts",
"**/*.ts",
"**/*.d.ts",
"vite.renderer.config.ts",
"packages/electron-chrome-context-menu",
"packages/chrome-ui"
]
}
}
}

View File

@@ -9,8 +9,10 @@ export default defineConfig( async () => {
plugins: [electronBytecode({ entry: ".vite/build/main.js", keepSource: false })],
resolve: {
alias: {
"@": resolve(__dirname, "./src/main"),
"@main": resolve(__dirname, "./src/main"),
'@common': resolve(__dirname, './src/common'),
'@renderer': resolve(__dirname, './src/renderer'),
'@locales': resolve(__dirname, 'locales'),
"@modules": resolve(__dirname, "./src/main/modules"),
},
},

View File

@@ -5,8 +5,10 @@ import { resolve } from "path";
export default defineConfig({
resolve: {
alias: {
"@": resolve(__dirname, "./src"),
'@common': resolve(__dirname, './src/common'),
'@main': resolve(__dirname, './src/main'),
'@renderer': resolve(__dirname, './src/renderer'),
'@locales': resolve(__dirname, 'locales'),
},
},
});

View File

@@ -20,14 +20,14 @@ export default defineConfig(async () => {
resolve: {
preserveSymlinks: true,
alias: {
"@": resolve(__dirname, "./src/renderer"),
"@renderer": resolve(__dirname, "./src/renderer"),
"@api": resolve(__dirname, "./src/renderer/api"),
"@assets": resolve(__dirname, "./src/assets"),
'@common': resolve(__dirname, './src/common'),
"@constant": resolve(__dirname, "./src/renderer/constant"),
"@store": resolve(__dirname, "./src/renderer/store"),
"@utils": resolve(__dirname, "./src/renderer/utils"),
"@/types": resolve(__dirname, "./src/renderer/types"),
"@shared": resolve(__dirname, "./src/renderer/shared"),
},
},
}