zhangzengfei
2023-08-14 8f750b461a4f442825e516016bf78d05ed66afcb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package gui
 
import (
    "strings"
 
    "kingdee-dbapi/config"
    "kingdee-dbapi/kingdee"
    "kingdee-dbapi/logger"
    "kingdee-dbapi/nsqclient"
    "kingdee-dbapi/report"
    "kingdee-dbapi/static"
    "kingdee-dbapi/webserver"
 
    "fyne.io/fyne/v2"
    "fyne.io/fyne/v2/app"
    "fyne.io/fyne/v2/container"
    "fyne.io/fyne/v2/dialog"
    "fyne.io/fyne/v2/layout"
    "fyne.io/fyne/v2/theme"
    "fyne.io/fyne/v2/widget"
)
 
type Display struct {
    Window     fyne.Window
    FullScreen bool
}
 
func NewDisplay() *Display {
    a := app.New()
 
    // 设置图标
    a.SetIcon(static.IconPng)
 
    // 创建窗口
    w := a.NewWindow("金蝶数据接口服务 v14.02")
 
    // 设置为主窗口
    w.SetMaster()
 
    serverPort := widget.NewEntry()
    sqlAddr := widget.NewEntry()
    sqlDBName := widget.NewEntry()
    sqlUsername := widget.NewEntry()
    sqlPassword := widget.NewEntry()
    sqlPassword.Password = true
    serverPort.Text = config.Options.WebPort
    sqlAddr.Text = config.Options.SqlAddr
    sqlUsername.Text = config.Options.SqlUsername
    sqlPassword.Text = config.Options.SqlPassword
    sqlDBName.Text = config.Options.SqlDBName
 
    form := &widget.Form{
        Items: []*widget.FormItem{
            // we can specify items in the constructor
            {Text: "服务端口", Widget: serverPort},
            {Text: "数据库地址", Widget: sqlAddr},
            {Text: "数据库名称", Widget: sqlDBName},
            {Text: "数据用户名", Widget: sqlUsername},
            {Text: "数据库密码", Widget: sqlPassword},
        },
        //SubmitText: "确定",
        //
        //OnSubmit: func() {
        //    // optional, handle form submission
        //    fmt.Println("Form submitted:", serverPort.Text)
        //    //myWindow.Close()
        //},
    }
    var submitBtn *widget.Button
    submitBtn = widget.NewButtonWithIcon("启动", theme.MailSendIcon(), func() {
        config.Options.WebPort = strings.Trim(serverPort.Text, " ")
        config.Options.SqlAddr = strings.Trim(sqlAddr.Text, " ")
        config.Options.SqlUsername = strings.Trim(sqlUsername.Text, " ")
        config.Options.SqlPassword = strings.Trim(sqlPassword.Text, " ")
        config.Options.SqlDBName = strings.Trim(sqlDBName.Text, " ")
 
        config.SaveConfig()
 
        // 连接数据库
        err := kingdee.Init(config.Options.SqlUsername, config.Options.SqlPassword, config.Options.SqlAddr, config.Options.SqlDBName)
        if err != nil {
            logger.Error("db init error:%s", err.Error())
            dialog.ShowError(err, w)
        }
 
        form.Disable()
        submitBtn.Text = "已启动"
        submitBtn.Disable()
 
        report.Start()
 
        // 开启订阅SQL查询
        go nsqclient.InitNsqConsumer(config.Options.SqlQueryTopic, "sensor01", kingdee.SqlQueryHandle)
        go nsqclient.InitNsqConsumer(config.Options.CSTQueryTopic, "sensor01", kingdee.CSTQueryHandle)
 
        go webserver.Serve(serverPort.Text)
    })
 
    content := container.New(layout.NewGridWrapLayout(fyne.NewSize(300, 200)), form)
 
    content1 := container.NewVBox(content, submitBtn)
    w.SetContent(content1)
    return &Display{
        w,
        false,
    }
}
 
func (d *Display) ShowMainWindow() {
    d.Window.Resize(fyne.NewSize(330, 250))
 
    d.Window.Canvas().SetOnTypedKey(func(event *fyne.KeyEvent) {
        if event.Name == "F12" {
            d.Window.SetFullScreen(!d.FullScreen)
            d.FullScreen = !d.FullScreen
        }
    })
 
    d.Window.ShowAndRun()
}