├── .github
├── release-drafter.yml
├── releasesText.md
└── workflows
│ ├── debug.yml
│ ├── jekyll-gh-pages.yml
│ └── 发布软件.yml
├── .gitignore
├── .gitmodules
├── CNAME
├── GoEasyDesigner
├── .gitignore
├── Dockerfile
├── TemplateProject
│ └── newWindow.zip
├── Terminal
│ ├── Terminal_darwin.go
│ ├── Terminal_darwin_test.go
│ ├── Terminal_window.go
│ └── Terminal_window_test.go
├── app.go
├── build
│ ├── README.md
│ ├── appicon.png
│ ├── darwin
│ │ ├── Info.dev.plist
│ │ └── Info.plist
│ ├── dmg.sh
│ └── windows
│ │ ├── icon.ico
│ │ ├── info.json
│ │ ├── installer
│ │ ├── project.nsi
│ │ └── wails_tools.nsh
│ │ └── wails.exe.manifest
├── docker-compose.yml
├── frontend
│ ├── README.md
│ ├── index.html
│ ├── jsconfig.json
│ ├── package.json
│ ├── pnpm-lock.yaml
│ ├── postcss.config.js
│ ├── public
│ │ ├── 1.html
│ │ ├── cdn.tailwindcss.com_3.4.5.js
│ │ ├── font-awesome.css
│ │ ├── releases_latest.json
│ │ ├── webfonts
│ │ │ ├── fa-brands-400.ttf
│ │ │ ├── fa-brands-400.woff2
│ │ │ ├── fa-regular-400.ttf
│ │ │ ├── fa-regular-400.woff2
│ │ │ ├── fa-solid-900.ttf
│ │ │ ├── fa-solid-900.woff2
│ │ │ ├── fa-v4compatibility.ttf
│ │ │ └── fa-v4compatibility.woff2
│ │ └── 自定义组件
│ │ │ ├── ColorfulText
│ │ │ ├── ColorfulText.js
│ │ │ ├── ColorfulText.vue
│ │ │ └── ColorfulTextAttr.vue
│ │ │ ├── TimeProgressBar
│ │ │ ├── TimeProgressBar.js
│ │ │ ├── TimeProgressBar.vue
│ │ │ └── TimeProgressBarAttr.vue
│ │ │ ├── components.json
│ │ │ ├── 流光边框
│ │ │ ├── 流光边框.js
│ │ │ ├── 流光边框.vue
│ │ │ └── 流光边框属性.vue
│ │ │ └── 登录框
│ │ │ ├── 登录框.js
│ │ │ ├── 登录框.vue
│ │ │ └── 登录框属性.vue
│ ├── src
│ │ ├── Helper.js
│ │ ├── action
│ │ │ └── app.js
│ │ ├── app10.vue
│ │ ├── app11.vue
│ │ ├── assets
│ │ │ ├── base.css
│ │ │ └── main.css
│ │ ├── components
│ │ │ ├── RenderDesignComponent.vue
│ │ │ ├── RenderDesignComponentPreview.vue
│ │ │ ├── RenderDesignComponentWin.vue
│ │ │ ├── Shape.vue
│ │ │ ├── boxs
│ │ │ │ ├── el
│ │ │ │ │ ├── Button
│ │ │ │ │ │ ├── Button.js
│ │ │ │ │ │ ├── Button.vue
│ │ │ │ │ │ └── ButtonAttr.vue
│ │ │ │ │ ├── CheckBox
│ │ │ │ │ │ ├── CheckBox.js
│ │ │ │ │ │ ├── CheckBox.vue
│ │ │ │ │ │ └── CheckBoxAttr.vue
│ │ │ │ │ ├── CommonLayout
│ │ │ │ │ │ ├── CommonLayout.js
│ │ │ │ │ │ ├── CommonLayout.vue
│ │ │ │ │ │ └── CommonLayoutAttr.vue
│ │ │ │ │ ├── Container
│ │ │ │ │ │ ├── Container.js
│ │ │ │ │ │ └── ContainerAttr.vue
│ │ │ │ │ ├── ControlButton
│ │ │ │ │ │ ├── ControlButton.js
│ │ │ │ │ │ ├── ControlButton.vue
│ │ │ │ │ │ └── ControlButtonAttr.vue
│ │ │ │ │ ├── CustomComponent
│ │ │ │ │ │ ├── CustomComponent.js
│ │ │ │ │ │ ├── CustomComponent.vue
│ │ │ │ │ │ └── CustomComponentAttr.vue
│ │ │ │ │ ├── FlexLayout
│ │ │ │ │ │ ├── FlexLayout.js
│ │ │ │ │ │ ├── FlexLayout.vue
│ │ │ │ │ │ └── FlexLayoutAttr.vue
│ │ │ │ │ ├── Label
│ │ │ │ │ │ ├── Label.js
│ │ │ │ │ │ ├── Label.vue
│ │ │ │ │ │ └── LabelAttr.vue
│ │ │ │ │ ├── Menu
│ │ │ │ │ │ ├── Menu.js
│ │ │ │ │ │ ├── Menu.vue
│ │ │ │ │ │ └── MenuAttr.vue
│ │ │ │ │ ├── ProgressBar
│ │ │ │ │ │ ├── ProgressBar.js
│ │ │ │ │ │ ├── ProgressBar.vue
│ │ │ │ │ │ └── ProgressBarAttr.vue
│ │ │ │ │ ├── RadioButton
│ │ │ │ │ │ ├── RadioButton.js
│ │ │ │ │ │ ├── RadioButton.vue
│ │ │ │ │ │ └── RadioButtonAttr.vue
│ │ │ │ │ ├── Switch
│ │ │ │ │ │ ├── Switch.js
│ │ │ │ │ │ ├── Switch.vue
│ │ │ │ │ │ └── SwitchAttr.vue
│ │ │ │ │ ├── Table
│ │ │ │ │ │ ├── Table.js
│ │ │ │ │ │ ├── Table.vue
│ │ │ │ │ │ └── TableAttr.vue
│ │ │ │ │ ├── Tabs
│ │ │ │ │ │ ├── Tabs.js
│ │ │ │ │ │ ├── Tabs.vue
│ │ │ │ │ │ └── TabsAttr.vue
│ │ │ │ │ ├── TabsTW
│ │ │ │ │ │ ├── TabsTW.js
│ │ │ │ │ │ ├── TabsTW.vue
│ │ │ │ │ │ ├── TabsTWAttr.vue
│ │ │ │ │ │ └── fontawesome_free_icon_names.js
│ │ │ │ │ ├── TextEdit
│ │ │ │ │ │ ├── TextEdit.js
│ │ │ │ │ │ ├── TextEdit.vue
│ │ │ │ │ │ └── TextEditAttr.vue
│ │ │ │ │ ├── Tooltip
│ │ │ │ │ │ ├── Tooltip.js
│ │ │ │ │ │ ├── Tooltip.vue
│ │ │ │ │ │ └── TooltipAttr.vue
│ │ │ │ │ └── Tree
│ │ │ │ │ │ ├── Tree.js
│ │ │ │ │ │ ├── Tree.vue
│ │ │ │ │ │ └── TreeAttr.vue
│ │ │ │ ├── td
│ │ │ │ │ ├── Button
│ │ │ │ │ │ ├── Button.js
│ │ │ │ │ │ ├── Button.vue
│ │ │ │ │ │ └── ButtonAttr.vue
│ │ │ │ │ ├── Link
│ │ │ │ │ │ ├── Link.js
│ │ │ │ │ │ ├── Link.vue
│ │ │ │ │ │ └── LinkAttr.vue
│ │ │ │ │ ├── Progress
│ │ │ │ │ │ ├── Progress.js
│ │ │ │ │ │ ├── Progress.vue
│ │ │ │ │ │ └── ProgressAttr.vue
│ │ │ │ │ ├── Select
│ │ │ │ │ │ ├── Select.js
│ │ │ │ │ │ ├── Select.vue
│ │ │ │ │ │ └── SelectAttr.vue
│ │ │ │ │ └── Switch
│ │ │ │ │ │ ├── Switch.js
│ │ │ │ │ │ ├── Switch.vue
│ │ │ │ │ │ └── SwitchAttr.vue
│ │ │ │ └── tw
│ │ │ │ │ └── Button
│ │ │ │ │ ├── Button.js
│ │ │ │ │ ├── Button.vue
│ │ │ │ │ └── ButtonAttr.vue
│ │ │ ├── common
│ │ │ │ └── IconSelector.vue
│ │ │ └── designer
│ │ │ │ ├── PreviewDialog.vue
│ │ │ │ ├── header
│ │ │ │ └── ToolBtn.vue
│ │ │ │ ├── left
│ │ │ │ ├── ComponentLeft.vue
│ │ │ │ ├── PropertyTable.vue
│ │ │ │ └── TreeSelectBox.vue
│ │ │ │ └── public
│ │ │ │ ├── DraggableDivider.vue
│ │ │ │ ├── WindowAttr.vue
│ │ │ │ ├── common-event-component.vue
│ │ │ │ ├── common-properties.vue
│ │ │ │ ├── 代码编辑器.vue
│ │ │ │ ├── 支持库.vue
│ │ │ │ ├── 新建项目对话框.vue
│ │ │ │ ├── 项目管理.vue
│ │ │ │ └── 项目配置对话框.vue
│ │ ├── helpDoc
│ │ │ └── systemFcDoc.json
│ │ ├── i18n
│ │ │ ├── index.js
│ │ │ └── locales
│ │ │ │ ├── en.json
│ │ │ │ └── zh-Hans.json
│ │ ├── main.js
│ │ ├── public.js
│ │ ├── stores
│ │ │ ├── HistoryManager.js
│ │ │ └── appStore.js
│ │ ├── update_github_latest_releases.sh
│ │ ├── 提示语法生成器.js
│ │ ├── 测试代码编辑器.vue
│ │ ├── 编辑器
│ │ │ ├── 窗口事件代码模板.js
│ │ │ ├── 编辑器提示数据.js
│ │ │ └── 编辑器语法文件.js
│ │ └── 编辑的语法提示.js
│ ├── tailwind.config.js
│ ├── vite.config.js
│ └── wailsjs
│ │ ├── go
│ │ └── main
│ │ │ ├── App.d.ts
│ │ │ └── App.js
│ │ └── runtime
│ │ ├── package.json
│ │ ├── runtime.d.ts
│ │ └── runtime.js
├── go.mod
├── go.sum
├── main.go
├── myfunc
│ ├── myfunc.go
│ └── myfunc_test.go
├── mymodel
│ ├── Version.go
│ ├── git项目操作.go
│ ├── git项目操作_test.go
│ ├── 文件监视模块.go
│ ├── 文件监视模块_test.go
│ ├── 自动更新模块.go
│ └── 自动更新模块_test.go
├── ssh_nginx
│ ├── Caddyfile
│ ├── default.conf
│ └── docker-compose.yml
└── wails.json
├── LICENSE
├── QtEsayDesigner IDE插件.jar
├── README.assets
├── image-20230828083413650.png
├── image-20230828084834120.png
└── swskm.jpg
├── README.md
├── README.zh-Hans.md
├── script
└── main.go
└── tool
└── 一键环境配置.e
/.github/release-drafter.yml:
--------------------------------------------------------------------------------
1 | name-template: 'v$RESOLVED_VERSION'
2 | tag-template: 'v$RESOLVED_VERSION'
3 | categories:
4 | - title: '🚀 新功能'
5 | labels:
6 | - '新功能'
7 | - title: '🐛 Bug 修复'
8 | labels:
9 | - 'bug'
10 | - title: '🧰 日常维护'
11 | label: '日常维护'
12 | change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
13 | change-title-escapes: '\<*_&'
14 | version-resolver:
15 | major:
16 | labels:
17 | - 'major'
18 | minor:
19 | labels:
20 | - 'minor'
21 | patch:
22 | labels:
23 | - 'patch'
24 | default: patch
25 | template: |
26 | # GoEasyDesigner 窗口设计师
27 | * 基于 go 语言 使用 wails框架, 支持 window macos linux 等系统.
28 |
29 | $CHANGES
30 | no-changes-template: |
31 | 快下载体验~
--------------------------------------------------------------------------------
/.github/releasesText.md:
--------------------------------------------------------------------------------
1 | # GoEasyDesigner 窗口设计师
2 |
3 | 奋斗了{{用了多少时间}},本次更新内容如下:
4 |
5 | {{最新发布信息}}
6 |
7 | {{变更内容}}
--------------------------------------------------------------------------------
/.github/workflows/jekyll-gh-pages.yml:
--------------------------------------------------------------------------------
1 | name: 部署 GitHub Pages
2 |
3 | on:
4 | # Runs on pushes targeting the default branch
5 | # push:
6 | # branches: ["main"]
7 |
8 | # Allows you to run this workflow manually from the Actions tab
9 | workflow_dispatch:
10 | # push:
11 | # paths-ignore:
12 | # - '**/*.md'
13 | # - '**/*.yml'
14 | # - .gitignore
15 | # - .editorconfig
16 |
17 | # workflow_run:
18 | # workflows: ["发布软件"]
19 | # types:
20 | # - completed
21 |
22 |
23 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
24 | permissions:
25 | contents: read
26 | pages: write
27 | id-token: write
28 |
29 | # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
30 | # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
31 | concurrency:
32 | group: "pages"
33 | cancel-in-progress: false
34 |
35 | jobs:
36 | # Build job
37 | build:
38 | runs-on: ubuntu-latest
39 | steps:
40 | - name: Checkout
41 | uses: actions/checkout@v3
42 | - name: Setup Pages
43 | uses: actions/configure-pages@v3
44 | - uses: actions/cache@v3
45 | with:
46 | path: |
47 | /home/runner/.npm
48 | key: ${{ runner.os }}-js-${{ hashFiles('**/package.json') }}
49 | restore-keys: |
50 | ${{ runner.os }}-js-
51 | - name: install
52 | run: |
53 | cd GoEasyDesigner/frontend/src
54 | ./update_github_latest_releases.sh
55 | cd ../
56 | npm i
57 | npm run build
58 |
59 | - name: Build with Jekyll
60 | uses: actions/jekyll-build-pages@v1
61 | with:
62 | source: ./GoEasyDesigner/frontend/dist
63 | destination: ./_site
64 | - name: Upload artifact
65 | uses: actions/upload-pages-artifact@v2
66 | - name: Deploy file
67 | uses: wlixcc/SFTP-Deploy-Action@v1.2.4
68 | with:
69 | server: ${{ secrets.FTP_SERVER }}
70 | port: ${{ secrets.FTP_PORT }}
71 | username: ${{ secrets.FTP_USERNAME }}
72 | password: ${{ secrets.FTP_PASSWORD }}
73 | local_path: './GoEasyDesigner/frontend/dist/*'
74 | remote_path: '/config/www'
75 | sftp_only: true
76 |
77 | # Deployment job
78 | deploy:
79 | environment:
80 | name: github-pages
81 | url: ${{ steps.deployment.outputs.page_url }}
82 | runs-on: ubuntu-latest
83 | needs: build
84 | steps:
85 | - name: Deploy to GitHub Pages
86 | id: deployment
87 | uses: actions/deploy-pages@v2
88 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | .DS_Store
12 | dist
13 | dist-ssr
14 | coverage
15 | *.local
16 |
17 | /cypress/videos/
18 | /cypress/screenshots/
19 |
20 | # Editor directories and files
21 | .vscode/*
22 | !.vscode/extensions.json
23 | .idea
24 | *.suo
25 | *.ntvs*
26 | *.njsproj
27 | *.sln
28 | *.sw?
29 | .vscode
30 | *.lockb
31 | GoEasyDesigner/frontend/package.json.md5
32 | package-lock.json
33 | package.json.md5
34 | wails-demo/frontend/package.json.md5
35 | wails-demo/frontend/package-lock.json
36 | GoEasyDesigner/ssh_nginx/.env
37 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "go-easy-demo"]
2 | path = go-easy-demo
3 | url = https://github.com/duolabmeng6/wails-template-vue-go-easy
4 |
--------------------------------------------------------------------------------
/CNAME:
--------------------------------------------------------------------------------
1 | ggg.yx24.me
2 |
--------------------------------------------------------------------------------
/GoEasyDesigner/.gitignore:
--------------------------------------------------------------------------------
1 | build/bin
2 | node_modules
3 | frontend/dist
4 |
--------------------------------------------------------------------------------
/GoEasyDesigner/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:18-alpine
2 | WORKDIR /app
3 | COPY ./frontend .
4 |
5 | RUN npm install --registry=http://registry.npmmirror.com
6 | RUN npm run build
7 |
8 | # docker build -t my-node-app .
9 | # docker run -v ./frontend:/app -p 3000:3000 -it --rm --name my-running-app my-node-app /bin/sh
10 |
11 | FROM nginx:alpine-slim
12 | COPY --from=0 /app/dist /usr/share/nginx/html/
13 | COPY nginx.conf /etc/nginx/conf.d/default.conf
14 | EXPOSE 3005
--------------------------------------------------------------------------------
/GoEasyDesigner/TemplateProject/newWindow.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/duolabmeng6/GoEasyDesigner/a41b30318e6495022f767c26110f383329fc204f/GoEasyDesigner/TemplateProject/newWindow.zip
--------------------------------------------------------------------------------
/GoEasyDesigner/Terminal/Terminal_darwin.go:
--------------------------------------------------------------------------------
1 | //go:build darwin
2 | // +build darwin
3 |
4 | package Terminal
5 |
6 | import (
7 | "bufio"
8 | "errors"
9 | "fmt"
10 | "os/exec"
11 | "sync"
12 | "syscall"
13 | )
14 |
15 | type Terminal struct {
16 | cmd *exec.Cmd
17 | stdout *bufio.Scanner
18 | isRunning bool
19 | isDone bool
20 | lock sync.Mutex
21 | }
22 |
23 | func NewTerminal() *Terminal {
24 | return &Terminal{}
25 | }
26 |
27 | func (t *Terminal) StartCommand(command string, fn func(string, error)) bool {
28 | t.lock.Lock()
29 | defer t.lock.Unlock()
30 |
31 | if t.isRunning {
32 | fn("", fmt.Errorf("已有命令在运行"))
33 | return false
34 | }
35 |
36 | cmd := exec.Command("bash", "-c", command)
37 | cmd.SysProcAttr = &syscall.SysProcAttr{
38 | Setpgid: true,
39 | }
40 |
41 | stdout, err := cmd.StdoutPipe()
42 | if err != nil {
43 | fn("", err)
44 | return false
45 | }
46 |
47 | if err := cmd.Start(); err != nil {
48 | fn("", err)
49 | return false
50 | }
51 | t.cmd = cmd
52 | t.stdout = bufio.NewScanner(stdout)
53 | t.isRunning = true
54 |
55 | go func() {
56 | for t.stdout.Scan() {
57 | output := t.stdout.Text()
58 | fn(output, nil)
59 | }
60 |
61 | if err := t.stdout.Err(); err != nil {
62 | fn("", err)
63 | }
64 |
65 | t.lock.Lock()
66 | t.isRunning = false
67 | t.isDone = true
68 | t.lock.Unlock()
69 | }()
70 |
71 | go func() {
72 | cmd.Wait()
73 | t.lock.Lock()
74 | t.isRunning = false
75 | t.lock.Unlock()
76 | println("命令已完成")
77 | fn("", errors.New("命令已完成"))
78 |
79 | }()
80 | return true
81 | }
82 |
83 | func (t *Terminal) StopCommand() {
84 | t.lock.Lock()
85 | defer t.lock.Unlock()
86 |
87 | if t.isRunning {
88 | err := syscall.Kill(-t.cmd.Process.Pid, syscall.SIGKILL)
89 | if err != nil {
90 | return
91 | }
92 | }
93 | }
94 |
95 | func (t *Terminal) StopCommand2() {
96 | t.lock.Lock()
97 | defer t.lock.Unlock()
98 | //发送 ctrl + c 的信号 让程序平稳的退出
99 |
100 | // 向进程发送Ctrl+C信号
101 | process := t.cmd.Process
102 | if process != nil {
103 | //err := process.Signal(syscall.SIGHUP)
104 | err := syscall.Kill(-t.cmd.Process.Pid, syscall.SIGTERM)
105 |
106 | if err != nil {
107 | // 处理错误
108 | }
109 | }
110 | }
111 | func (t *Terminal) IsCommandDone() bool {
112 | t.lock.Lock()
113 | defer t.lock.Unlock()
114 | return t.isDone
115 | }
116 |
--------------------------------------------------------------------------------
/GoEasyDesigner/Terminal/Terminal_darwin_test.go:
--------------------------------------------------------------------------------
1 | package Terminal
2 |
3 | import (
4 | "testing"
5 | "time"
6 | )
7 |
8 | func TestNewTerminalMac(t *testing.T) {
9 | terminal := NewTerminal()
10 | if terminal == nil {
11 | t.Error("NewTerminalWindow() failed")
12 | }
13 | //
14 | 命令 := `
15 | cd /Users/ll/Documents/GitHub/GoEasyDesigner/wails-demo/frontend
16 | npm run dev
17 | `
18 |
19 | terminal.StartCommand(命令, func(output string, err error) {
20 | if err != nil {
21 | print("err:", output)
22 | print("err2:", err.Error())
23 | //t.Error(err.Error())
24 | }
25 | println(output)
26 | })
27 |
28 | time.Sleep(3 * time.Second)
29 | terminal.StopCommand2()
30 | println("停止命令2")
31 | time.Sleep(10 * time.Second)
32 | terminal.StopCommand()
33 | println("停止命令1")
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/GoEasyDesigner/Terminal/Terminal_window.go:
--------------------------------------------------------------------------------
1 | //go:build windows
2 | // +build windows
3 |
4 | package Terminal
5 |
6 | import (
7 | "bufio"
8 | "errors"
9 | "fmt"
10 | "github.com/duolabmeng6/goefun/ecore"
11 | "os/exec"
12 | "sync"
13 | "syscall"
14 | )
15 |
16 | type Terminal struct {
17 | cmd *exec.Cmd
18 | stdout *bufio.Scanner
19 | isRunning bool
20 | isDone bool
21 | lock sync.Mutex
22 | }
23 |
24 | func NewTerminal() *Terminal {
25 | return &Terminal{}
26 | }
27 |
28 | func (t *Terminal) StartCommand(command string, fn func(string, error)) bool {
29 | t.lock.Lock()
30 | defer t.lock.Unlock()
31 |
32 | if t.isRunning {
33 | fn("", fmt.Errorf("已有命令在运行"))
34 | return false
35 | }
36 |
37 | cmd := exec.Command("cmd", "/C", command)
38 | // 隐藏黑色窗口
39 | // For Windows, use Start instead of Run to hide the console window
40 | cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
41 |
42 | stdout, err := cmd.StdoutPipe()
43 | if err != nil {
44 | fn("", err)
45 | return false
46 | }
47 |
48 | if err := cmd.Start(); err != nil {
49 | fn("", err)
50 | return false
51 | }
52 | t.cmd = cmd
53 | t.stdout = bufio.NewScanner(stdout)
54 | t.isRunning = true
55 |
56 | go func() {
57 | for t.stdout.Scan() {
58 | output := t.stdout.Text()
59 | output = ecore.E文本编码转换(output, "", "utf8")
60 | fn(output, nil)
61 | }
62 |
63 | if err := t.stdout.Err(); err != nil {
64 | fn("", err)
65 | }
66 |
67 | t.lock.Lock()
68 | t.isRunning = false
69 | t.isDone = true
70 | t.lock.Unlock()
71 | }()
72 |
73 | go func() {
74 | cmd.Wait()
75 | t.lock.Lock()
76 | t.isRunning = false
77 | t.lock.Unlock()
78 | println("命令已完成")
79 | fn("", errors.New("命令已完成"))
80 |
81 | }()
82 | return true
83 |
84 | }
85 |
86 | func (t *Terminal) StopCommand() {
87 | t.lock.Lock()
88 | defer t.lock.Unlock()
89 |
90 | if t.isRunning {
91 | if err := t.cmd.Process.Kill(); err != nil {
92 | fmt.Println("无法终止命令:", err)
93 | }
94 | }
95 | }
96 |
97 | func (t *Terminal) IsCommandDone() bool {
98 | t.lock.Lock()
99 | defer t.lock.Unlock()
100 | return t.isDone
101 | }
102 |
--------------------------------------------------------------------------------
/GoEasyDesigner/Terminal/Terminal_window_test.go:
--------------------------------------------------------------------------------
1 | package Terminal
2 |
3 | import (
4 | "testing"
5 | "time"
6 | )
7 |
8 | func TestNewTerminalWindow(t *testing.T) {
9 | terminal := NewTerminal()
10 | if terminal == nil {
11 | t.Error("NewTerminalWindow() failed")
12 | }
13 | //
14 | 命令 := `
15 | set PATH=%PATH%;C:\Users\l\go\bin
16 | set PATH=%PATH%;C:\Users\l\go\go1.21.0\bin
17 | set PATH=%PATH%;C:\Program Files\nodejs
18 | set PATH=%PATH%;C:\Program Files\nodejs\node_modules\npm\bin
19 | wails
20 | `
21 |
22 | terminal.StartCommand(命令, func(output string, err error) {
23 | if err != nil {
24 | t.Error(err.Error())
25 | }
26 | println(output)
27 | })
28 |
29 | time.Sleep(3 * time.Second)
30 | }
31 |
--------------------------------------------------------------------------------
/GoEasyDesigner/build/README.md:
--------------------------------------------------------------------------------
1 | # Build Directory
2 |
3 | The build directory is used to house all the build files and assets for your application.
4 |
5 | The structure is:
6 |
7 | * bin - Output directory
8 | * darwin - macOS specific files
9 | * windows - Windows specific files
10 |
11 | ## Mac
12 |
13 | The `darwin` directory holds files specific to Mac builds.
14 | These may be customised and used as part of the build. To return these files to the default state, simply delete them
15 | and
16 | build with `wails build`.
17 |
18 | The directory contains the following files:
19 |
20 | - `Info.plist` - the main plist file used for Mac builds. It is used when building using `wails build`.
21 | - `Info.dev.plist` - same as the main plist file but used when building using `wails dev`.
22 |
23 | ## Windows
24 |
25 | The `windows` directory contains the manifest and rc files used when building with `wails build`.
26 | These may be customised for your application. To return these files to the default state, simply delete them and
27 | build with `wails build`.
28 |
29 | - `icon.ico` - The icon used for the application. This is used when building using `wails build`. If you wish to
30 | use a different icon, simply replace this file with your own. If it is missing, a new `icon.ico` file
31 | will be created using the `appicon.png` file in the build directory.
32 | - `installer/*` - The files used to create the Windows installer. These are used when building using `wails build`.
33 | - `info.json` - Application details used for Windows builds. The data here will be used by the Windows installer,
34 | as well as the application itself (right click the exe -> properties -> details)
35 | - `wails.exe.manifest` - The main application manifest file.
--------------------------------------------------------------------------------
/GoEasyDesigner/build/appicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/duolabmeng6/GoEasyDesigner/a41b30318e6495022f767c26110f383329fc204f/GoEasyDesigner/build/appicon.png
--------------------------------------------------------------------------------
/GoEasyDesigner/build/darwin/Info.dev.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | CFBundlePackageType
5 | APPL
6 | CFBundleName
7 | {{.Info.ProductName}}
8 | CFBundleExecutable
9 | {{.Name}}
10 | CFBundleIdentifier
11 | com.wails.{{.Name}}
12 | CFBundleVersion
13 | {{.Info.ProductVersion}}
14 | CFBundleGetInfoString
15 | {{.Info.Comments}}
16 | CFBundleShortVersionString
17 | {{.Info.ProductVersion}}
18 | CFBundleIconFile
19 | iconfile
20 | LSMinimumSystemVersion
21 | 10.13.0
22 | NSHighResolutionCapable
23 | true
24 | NSHumanReadableCopyright
25 | {{.Info.Copyright}}
26 | NSAppTransportSecurity
27 |
28 | NSAllowsLocalNetworking
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/GoEasyDesigner/build/darwin/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | CFBundlePackageType
5 | APPL
6 | CFBundleName
7 | {{.Info.ProductName}}
8 | CFBundleExecutable
9 | {{.Name}}
10 | CFBundleIdentifier
11 | com.wails.{{.Name}}
12 | CFBundleVersion
13 | {{.Info.ProductVersion}}
14 | CFBundleGetInfoString
15 | {{.Info.Comments}}
16 | CFBundleShortVersionString
17 | {{.Info.ProductVersion}}
18 | CFBundleIconFile
19 | iconfile
20 | LSMinimumSystemVersion
21 | 10.13.0
22 | NSHighResolutionCapable
23 | true
24 | NSHumanReadableCopyright
25 | {{.Info.Copyright}}
26 |
27 |
--------------------------------------------------------------------------------
/GoEasyDesigner/build/dmg.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | APP_NAME="GoEasyDesigner"
4 | APP_VERSION="$version"
5 | DMG_NAME="${APP_NAME}-${APP_VERSION}.dmg"
6 | TEMP_DIR="./install"
7 |
8 | mkdir -p "${TEMP_DIR}"
9 |
10 | cp -r "./${APP_NAME}.app" "${TEMP_DIR}"
11 |
12 | # 创建 Applications 文件夹的快捷方式
13 | ln -s "/Applications" "${TEMP_DIR}/Applications"
14 |
15 | # 创建空的镜像文件
16 | hdiutil create -srcfolder "${TEMP_DIR}" -volname "${APP_NAME}" -format UDZO "${DMG_NAME}"
17 |
18 | echo "${DMG_NAME} 已经创建完成!"
--------------------------------------------------------------------------------
/GoEasyDesigner/build/windows/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/duolabmeng6/GoEasyDesigner/a41b30318e6495022f767c26110f383329fc204f/GoEasyDesigner/build/windows/icon.ico
--------------------------------------------------------------------------------
/GoEasyDesigner/build/windows/info.json:
--------------------------------------------------------------------------------
1 | {
2 | "fixed": {
3 | "file_version": "{{.Info.ProductVersion}}"
4 | },
5 | "info": {
6 | "0000": {
7 | "ProductVersion": "{{.Info.ProductVersion}}",
8 | "CompanyName": "{{.Info.CompanyName}}",
9 | "FileDescription": "{{.Info.ProductName}}",
10 | "LegalCopyright": "{{.Info.Copyright}}",
11 | "ProductName": "{{.Info.ProductName}}",
12 | "Comments": "{{.Info.Comments}}"
13 | }
14 | }
15 | }
--------------------------------------------------------------------------------
/GoEasyDesigner/build/windows/wails.exe.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | true/pm
12 | permonitorv2,permonitor
13 |
14 |
15 |
--------------------------------------------------------------------------------
/GoEasyDesigner/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3"
2 | services:
3 | goeasy:
4 | container_name: goeasy
5 | build: .
6 | ports:
7 | - "3005:3005"
--------------------------------------------------------------------------------
/GoEasyDesigner/frontend/README.md:
--------------------------------------------------------------------------------
1 | # Vue 3 + Vite
2 |
3 | This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `
12 |