From 742eb7040f4c8c4a81f1b7ee3840aa473ade34b4 Mon Sep 17 00:00:00 2001 From: zhangguoyun Date: Mon, 27 Oct 2025 13:47:06 +0800 Subject: [PATCH] init --- .github/FUNDING.yml | 4 - .github/ISSUE_TEMPLATE/bug_report.yml | 38 ---- .github/ISSUE_TEMPLATE/config.yml | 1 - .github/ISSUE_TEMPLATE/feature_request.yml | 18 -- .github/ISSUE_TEMPLATE/fix_typo.yml | 18 -- .github/pull_request_template.md | 24 --- .github/resources/vutron-sample.webp | Bin 22122 -> 0 bytes .github/workflows/app-test.yml | 66 ------- .github/workflows/documents.yml | 64 ------ QWEN.md | 220 +++++++++++++++++++++ 10 files changed, 220 insertions(+), 233 deletions(-) delete mode 100644 .github/FUNDING.yml delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml delete mode 100644 .github/ISSUE_TEMPLATE/fix_typo.yml delete mode 100644 .github/pull_request_template.md delete mode 100644 .github/resources/vutron-sample.webp delete mode 100644 .github/workflows/app-test.yml delete mode 100644 .github/workflows/documents.yml create mode 100644 QWEN.md diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 4b42b1f..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,4 +0,0 @@ -# These are supported funding model platforms - -github: jooy2 -custom: ["https://cdget.com/donate"] diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index 9a7c5a1..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: 'Bug report' -description: Report a bug in this project. -labels: ['bug'] -body: - - type: markdown - attributes: - value: | - Before creating an issue, please read the following: - - - Read the `README.md` file on the project page or the documentation file and compare your code to the intent of the project. - - Search to see if the same issue already exists, and keep the title concise and accurate so that it's easy for others to understand and search for. - - Please create a separate issue for each type of issue. - - For modular projects, make sure you're using the latest version of the module. - - Please be as detailed as possible and write in English so that we can handle your issue quickly. - - type: textarea - attributes: - label: Describe the bug - description: | - For the issue you are experiencing, please describe in detail what you are seeing, the error message, and the impact of the issue. If you are able to reproduce the issue, please list the steps in order. You can attach an image or video if necessary. - validations: - required: true - - type: textarea - attributes: - label: Expected behavior - description: Describe how it should be handled when it's normal behavior or what needs to be fixed. - validations: - - type: input - attributes: - label: Your environment - System OS - description: Please describe the full range of OSes you are experiencing the issue with, preferably including the version. - placeholder: Windows 11, macOS 15.x, Linux Ubuntu 24.04, Android 15, iOS 16... - validations: - - type: input - attributes: - label: Your environment - Web Browser - description: If relevant, please describe the web browser you are currently using. - placeholder: Google Chrome, Microsoft Edge, Mozilla Firefox... - validations: diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 0086358..0000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1 +0,0 @@ -blank_issues_enabled: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 0904d93..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: 'Feature request' -description: Report a feature request in this project. -labels: ['enhancement'] -body: - - type: markdown - attributes: - value: | - Before creating an issue, please read the following: - - - Search to see if the same issue already exists, and keep the title concise and accurate so that it's easy for others to understand and search for. - - Please create a separate issue for each type of issue. - - Please be as detailed as possible and write in English so that we can handle your issue quickly. - - type: textarea - attributes: - label: Describe the feature - description: Feel free to describe any features or improvements you would like to see. You can attach text or images of examples, behavior, etc. from other projects to elaborate. - validations: - required: true diff --git a/.github/ISSUE_TEMPLATE/fix_typo.yml b/.github/ISSUE_TEMPLATE/fix_typo.yml deleted file mode 100644 index ed594e3..0000000 --- a/.github/ISSUE_TEMPLATE/fix_typo.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: 'Fix typo request' -description: Request to fix a typo or bad translation in this project -labels: ['typo'] -body: - - type: markdown - attributes: - value: | - Before creating an issue, please read the following: - - - Search to see if the same issue already exists, and keep the title concise and accurate so that it's easy for others to understand and search for. - - Please create a separate issue for each type of issue. - - Please be as detailed as possible and write in English so that we can handle your issue quickly. - - type: textarea - attributes: - label: Describe the issue - description: Please describe where the typo occurs and a list of text that needs to be corrected. - validations: - required: true diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index 5023be6..0000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,24 +0,0 @@ - - -## Pull request checklist - -You should familiarize yourself with the files `README.md`, `CONTRIBUTING.md`, and `CODE_OF_CONDUCT.md` in the root of your project. - -- If an issue has been created for this, add `(fixes #{ISSUE_NUMBER})` to the end of the commit description. In `{ISSUE_NUMBER}`, please include the relevant issue number. -- If you need to update or add to the article, please update the relevant content. If a multilingual article exists, you should update all relevant content in your own language, except for translations. -- Add or update test code if it exists and is needed. Also, verify that the tests pass. -- If this PR is not yet complete, keep the PR in draft status. If it's no longer valid, close the PR with an explanation. - - - -### What did you change? - -### Why did you make the change? - -### How does this work? diff --git a/.github/resources/vutron-sample.webp b/.github/resources/vutron-sample.webp deleted file mode 100644 index d679d61ba30683b43830db1bc955f422d8cc0754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22122 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 A{cRpNb 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 20.0.0 +- pnpm package manager (recommended) + +### Development +```bash +# Install dependencies +pnpm install + +# Start development server with hot-reload +pnpm dev + +# Development with debug info +pnpm dev:debug + +# Force reinstall dependencies and start development +pnpm dev:debug:force +``` + +### Building +```bash +# Build for all platforms +pnpm build:all + +# Build for specific platforms +pnpm build:mac # macOS +pnpm build:win # Windows +pnpm build:linux # Linux + +# Build without packaging (useful for quick testing) +pnpm build:dir + +# Run type checking, formatting, and build +pnpm build +``` + +### Testing +```bash +# Run Playwright tests +pnpm test + +# Run tests on Linux with virtual display +pnpm test:linux +``` + +### Linting and Formatting +```bash +# Check for linting issues +pnpm lint + +# Fix linting issues automatically +pnpm lint:fix + +# Format code with Prettier +pnpm format + +# Format and fix code automatically +pnpm format:fix +``` + +## Key Features + +1. **Hot Module Replacement**: Develop with instant feedback via Vite's fast hot-reload +2. **Type Safety**: Full TypeScript support across the application +3. **Internationalization**: Built-in multi-language support (11 languages available) +4. **Theme Management**: Easy switching between dark and light themes +5. **State Management**: Pinia for reactive state management +6. **Cross-platform Builds**: Build for Windows, macOS, and Linux from a single codebase +7. **Testing**: Integrated Playwright testing setup +8. **Logging**: electron-log for both main and renderer processes +9. **Security**: Secure IPC communication between processes + +## Project Structure + +``` +├── buildAssets/ # Build configurations and icons +├── dist/ # Build output directory +├── docs/ # Documentation +├── node_modules/ # Dependencies +├── src/ # Source code +│ ├── main/ # Electron main process code +│ ├── preload/ # Preload script for context isolation +│ └── renderer/ # Vue application code +│ ├── components/ # Vue components +│ ├── locales/ # Translation files +│ ├── plugins/ # Vue plugins (i18n, Pinia, Vuetify) +│ ├── router/ # Vue Router configuration +│ ├── screens/ # Application views/pages +│ ├── store/ # Pinia stores +│ ├── utils/ # Utility functions +│ ├── App.vue # Root component +│ ├── index.html # HTML entry point +│ └── main.ts # Vue application entry point +├── tests/ # Test files +├── .vscode/ # VS Code settings +├── .editorconfig # Editor configuration +├── .gitignore # Git ignore rules +├── .prettierignore # Prettier ignore rules +├── .prettierrc # Prettier configuration +├── eslint.config.ts # ESLint configuration +├── package.json # Project dependencies and scripts +├── playwright.config.ts # Playwright test configuration +├── pnpm-lock.yaml # Dependency lock file +├── pnpm-workspace.yaml # pnpm workspace configuration +├── README.md # Project documentation +├── tsconfig.json # TypeScript configuration +├── tsconfig.node.json # TypeScript configuration for Node.js files +└── vite.config.mts # Vite configuration +``` + +## Development Conventions + +1. **Code Style**: + - Uses ESLint with TypeScript and Vue plugin + - Formatted with Prettier + - Follows Vue 3 Composition API with TypeScript + +2. **Component Structure**: + - Components use Vue 3's `