From 8dc102a7cb2d01d3cb1e64706f317418973fa057 Mon Sep 17 00:00:00 2001 From: gmh01 Date: Thu, 23 Jul 2026 20:40:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=87=8D=E6=9E=84=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=80=BB=E8=BE=91=EF=BC=8C=E9=80=89=E5=AE=9A?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9=E5=8D=B3=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 prompt() 及 InputDialog 组件依赖 - 选定文件夹直接创建 .web2app 项目结构 - 默认以文件夹名作为项目名称 - 在编辑器中可自由修改名称、版本、图标、入口等配置 - 增强导入资源入口的文案提示 --- .gitignore | 2 ++ electron/main.js | 4 ++-- electron/preload.js | 2 +- electron/project.js | 17 +++++++++++------ package.json | 2 +- src/stores/project.js | 4 ++-- src/views/Home.vue | 30 ++++-------------------------- src/views/ProjectEditor.vue | 15 +++++++++++---- 8 files changed, 34 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index 867d2a0..acb381a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ node_modules/ dist/ .web2app/ release/ +installer/ +__appImage-x64/ # Binaries & executables *.exe diff --git a/electron/main.js b/electron/main.js index aed9986..515c3ca 100644 --- a/electron/main.js +++ b/electron/main.js @@ -111,8 +111,8 @@ ipcMain.handle('dir:readTree', async (_event, dirPath) => { return readDirectoryTree(dirPath) }) -ipcMain.handle('project:create', async (_event, name, dir) => { - return createProject(name, dir) +ipcMain.handle('project:create', async (_event, projectPath) => { + return createProject(projectPath) }) ipcMain.handle('project:load', async (_event, projectPath) => { diff --git a/electron/preload.js b/electron/preload.js index 8d623f6..d34e8ac 100644 --- a/electron/preload.js +++ b/electron/preload.js @@ -13,7 +13,7 @@ contextBridge.exposeInMainWorld('api', { readTree: (dirPath) => ipcRenderer.invoke('dir:readTree', dirPath) }, project: { - create: (name, dir) => ipcRenderer.invoke('project:create', name, dir), + create: (projectPath) => ipcRenderer.invoke('project:create', projectPath), load: (projectPath) => ipcRenderer.invoke('project:load', projectPath), save: (projectPath, data) => ipcRenderer.invoke('project:save', projectPath, data), importFiles: (projectPath, files) => ipcRenderer.invoke('project:importFiles', projectPath, files), diff --git a/electron/project.js b/electron/project.js index 36de428..fdf2749 100644 --- a/electron/project.js +++ b/electron/project.js @@ -21,16 +21,21 @@ function getDistDir(projectPath) { return dir } -function createProject(name, dir) { - const projectPath = path.join(dir, name) - if (fs.existsSync(projectPath)) { - throw new Error(`目录 ${projectPath} 已存在`) +function createProject(projectPath) { + if (!fs.existsSync(projectPath)) { + fs.mkdirSync(projectPath, { recursive: true }) } + + const configPath = getConfigPath(projectPath) + if (fs.existsSync(configPath)) { + throw new Error(`该目录已是 Web2App 项目`) + } + fs.mkdirSync(path.join(projectPath, '.web2app', 'src'), { recursive: true }) fs.mkdirSync(path.join(projectPath, '.web2app', 'dist'), { recursive: true }) const config = { - name, + name: path.basename(projectPath), version: '1.0.0', description: '', author: '', @@ -47,7 +52,7 @@ function createProject(name, dir) { updatedAt: new Date().toISOString() } - fs.writeFileSync(getConfigPath(projectPath), JSON.stringify(config, null, 2)) + fs.writeFileSync(configPath, JSON.stringify(config, null, 2)) return { projectPath, config } } diff --git a/package.json b/package.json index 4e5ca97..7970cd4 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "appId": "com.web2app.app", "productName": "Web2App", "directories": { - "output": "release" + "output": "installer" }, "files": [ "electron/**/*", diff --git a/src/stores/project.js b/src/stores/project.js index 7e4b76d..5bb6d1b 100644 --- a/src/stores/project.js +++ b/src/stores/project.js @@ -28,8 +28,8 @@ export const useProjectStore = defineStore('project', { }, actions: { - async createProject(name, dir) { - const result = await window.api.project.create(name, dir) + async createProject(projectPath) { + const result = await window.api.project.create(projectPath) this.projectPath = result.projectPath this.config = result.config this.files = [] diff --git a/src/views/Home.vue b/src/views/Home.vue index e763d99..0f4b0e6 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -12,13 +12,13 @@
+ 新建项目 - 创建新的 Web2App 项目 + 选择文件夹,快速创建项目
打开项目 - 打开已有的 .web2app 项目 + 打开已有的 Web2App 项目
@@ -42,15 +42,6 @@
- - @@ -58,26 +49,17 @@ import { ref } from 'vue' import { useRouter } from 'vue-router' import { useProjectStore } from '../stores/project' -import InputDialog from '../components/InputDialog.vue' const router = useRouter() const store = useProjectStore() const recentProjects = ref(loadRecentProjects()) -const showInput = ref(false) -const pendingDir = ref('') async function createNewProject() { const dir = await window.api.dialog.selectDirectory() if (!dir) return - pendingDir.value = dir - showInput.value = true -} - -async function onNameConfirmed(name) { - showInput.value = false try { - await store.createProject(name, pendingDir.value) - addRecentProject(pendingDir.value, name) + await store.createProject(dir) + addRecentProject(dir, store.config.name) router.push('/editor') } catch (err) { await window.api.dialog.showMessage({ @@ -88,10 +70,6 @@ async function onNameConfirmed(name) { } } -function onNameCancelled() { - showInput.value = false -} - async function openExistingProject() { const dir = await window.api.dialog.selectDirectory() if (!dir) return diff --git a/src/views/ProjectEditor.vue b/src/views/ProjectEditor.vue index b786a43..cb127b8 100644 --- a/src/views/ProjectEditor.vue +++ b/src/views/ProjectEditor.vue @@ -21,8 +21,8 @@
@@ -32,8 +32,9 @@ @delete="handleDelete" />
-

暂无资源

-

点击上方按钮导入网站文件

+
📁
+

尚未设置资源路径

+

点击上方「路径」按钮,选择你的网站目录导入

@@ -186,6 +187,12 @@ onBeforeUnmount(() => { padding: 8px; } +.empty-icon { + font-size: 48px; + opacity: 0.3; + margin-bottom: 8px; +} + .hint { font-size: 12px; }