chore: initial commit

- Wails v2 + Go 1.21+ + Vue 3 dark UI
- 3 buttons: Check env (auto-install dsh) / Start dsh web / Stop
- 升级 / 检查版本 一键按钮
- 启动后窗口自动最小化到 Dock
- 顶部 logo 鼠标 hover 显示大图预览
- scripts/: build-mac.sh, build-windows.bat, install-app.sh
- ui-design/: 视觉设计稿 (HTML + tokens)
This commit is contained in:
2026-09-14 15:06:14 +08:00
commit 218ee31adb
39 changed files with 5809 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
import {main} from '../models';
export function CheckEnv():Promise<main.CheckResult>;
export function CheckUpdate():Promise<main.UpdateInfo>;
export function GetStatus():Promise<main.StatusResult>;
export function HideWindow():Promise<void>;
export function InstallDsh():Promise<main.InstallResult>;
export function ShowWindow():Promise<void>;
export function Start():Promise<main.StartResult>;
export function Stop():Promise<main.StartResult>;
export function UpdateDsh():Promise<main.InstallResult>;
+39
View File
@@ -0,0 +1,39 @@
// @ts-check
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
export function CheckEnv() {
return window['go']['main']['App']['CheckEnv']();
}
export function CheckUpdate() {
return window['go']['main']['App']['CheckUpdate']();
}
export function GetStatus() {
return window['go']['main']['App']['GetStatus']();
}
export function HideWindow() {
return window['go']['main']['App']['HideWindow']();
}
export function InstallDsh() {
return window['go']['main']['App']['InstallDsh']();
}
export function ShowWindow() {
return window['go']['main']['App']['ShowWindow']();
}
export function Start() {
return window['go']['main']['App']['Start']();
}
export function Stop() {
return window['go']['main']['App']['Stop']();
}
export function UpdateDsh() {
return window['go']['main']['App']['UpdateDsh']();
}
+109
View File
@@ -0,0 +1,109 @@
export namespace main {
export class CheckResult {
nodePath: string;
nodeVersion: string;
nodeOK: boolean;
dshPath: string;
dshVersion: string;
credFile: string;
credExists: boolean;
homeDshDir: string;
portBusy: boolean;
portBusyBy: string;
issues: string[];
static createFrom(source: any = {}) {
return new CheckResult(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.nodePath = source["nodePath"];
this.nodeVersion = source["nodeVersion"];
this.nodeOK = source["nodeOK"];
this.dshPath = source["dshPath"];
this.dshVersion = source["dshVersion"];
this.credFile = source["credFile"];
this.credExists = source["credExists"];
this.homeDshDir = source["homeDshDir"];
this.portBusy = source["portBusy"];
this.portBusyBy = source["portBusyBy"];
this.issues = source["issues"];
}
}
export class InstallResult {
ok: boolean;
error: string;
output: string;
static createFrom(source: any = {}) {
return new InstallResult(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.ok = source["ok"];
this.error = source["error"];
this.output = source["output"];
}
}
export class StartResult {
ok: boolean;
url: string;
error: string;
output: string;
hidden: boolean;
static createFrom(source: any = {}) {
return new StartResult(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.ok = source["ok"];
this.url = source["url"];
this.error = source["error"];
this.output = source["output"];
this.hidden = source["hidden"];
}
}
export class StatusResult {
running: boolean;
url: string;
startedAt: string;
pid: number;
static createFrom(source: any = {}) {
return new StatusResult(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.running = source["running"];
this.url = source["url"];
this.startedAt = source["startedAt"];
this.pid = source["pid"];
}
}
export class UpdateInfo {
installed: string;
latest: string;
hasUpdate: boolean;
raw: string;
static createFrom(source: any = {}) {
return new UpdateInfo(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.installed = source["installed"];
this.latest = source["latest"];
this.hasUpdate = source["hasUpdate"];
this.raw = source["raw"];
}
}
}