diff --git a/base/web/serve.go b/base/web/serve.go
index 6e3b9c9f..6f10a6da 100644
--- a/base/web/serve.go
+++ b/base/web/serve.go
@@ -337,7 +337,7 @@ func ChatCmdPath(m *ice.Message, arg ...string) string {
return m.MergePodCmd("", kit.Select(m.ShortKey(), path.Join(arg...)))
}
func RequireFile(m *ice.Message, file string) string {
- if strings.HasPrefix(file, nfs.PS) || strings.HasPrefix(file, ice.HTTP) {
+ if strings.HasPrefix(file, nfs.PS) || strings.HasPrefix(file, ice.HTTP) || strings.Contains(file, "://") {
return file
} else if file != "" {
return nfs.P + file
diff --git a/core/code/vimer.go b/core/code/vimer.go
index 2eddfac7..d2274d11 100644
--- a/core/code/vimer.go
+++ b/core/code/vimer.go
@@ -141,6 +141,10 @@ func init() {
m.Cmdy(COMPLETE, kit.Ext(m.Option(mdb.FILE)), m.Option(nfs.FILE), m.Option(nfs.PATH))
}},
COMPILE: {Hand: func(m *ice.Message, arg ...string) {
+ if m.Option(nfs.PATH) == ice.USR_PROGRAM {
+ m.Cmd(cli.SYSTEM, cli.MAKE, kit.Dict(cli.CMD_DIR, m.Option(nfs.PATH)))
+ return
+ }
if msg := m.Cmd(COMPILE, ice.SRC_MAIN_GO, ice.BIN_ICE_BIN); cli.IsSuccess(msg) {
m.GoSleep30ms(func() { m.Cmd(UPGRADE, cli.RESTART) })
} else {
diff --git a/misc/wx/access.go b/misc/wx/access.go
index b977cbd7..6f9ad248 100644
--- a/misc/wx/access.go
+++ b/misc/wx/access.go
@@ -110,7 +110,7 @@ func init() {
m.Cmd(mdb.PRUNES, m.Prefix(IDE), "", mdb.HASH, m.OptionSimple(mdb.NAME))
}},
}, gdb.EventsAction(web.SPACE_GRANT, web.SPACE_LOGIN_CLOSE), mdb.ImportantHashAction(
- mdb.SHORT, ACCESS, mdb.FIELD, "time,type,access,icons,usernick,appid", tcp.SERVER, CGI_BIN,
+ mdb.SHORT, ACCESS, mdb.FIELD, "time,type,access,icons,usernick,appid,secret,token", tcp.SERVER, CGI_BIN,
)), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m, arg...).PushAction(web.SSO, mdb.REMOVE).StatusTimeCount(mdb.ConfigSimple(m, ACCESS, APPID), web.SERVE, m.MergeLink("/chat/wx/login/"))
m.RewriteAppend(func(value, key string, index int) string {
diff --git a/misc/wx/ide.go b/misc/wx/ide.go
index fbbd38c5..347820c0 100644
--- a/misc/wx/ide.go
+++ b/misc/wx/ide.go
@@ -107,11 +107,25 @@ const IDE = "ide"
func init() {
Index.MergeCommands(ice.Commands{
- IDE: {Name: "ide hash auto", Help: "集成开发环境", Icon: "wxdev.png", Meta: Meta(), Actions: ice.MergeActions(ice.Actions{
+ IDE: {Name: "ide hash auto", Help: "集成开发环境", Meta: Meta(), Actions: ice.MergeActions(ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch mdb.HashInputs(m, arg); arg[0] {
case PAGES:
m.Push(arg[0], kit.Value(kit.UnMarshal(m.Cmdx(nfs.CAT, path.Join(mdb.Config(m, PROJECT), APP_JSON))), PAGES))
+ case APPID:
+ m.Cmd(ACCESS).Table(func(value ice.Maps) {
+ if value[mdb.TYPE] == ice.APP {
+ m.Push("", value, []string{APPID, aaa.USERNICK})
+ }
+ })
+ case web.SERVE:
+ m.OptionFields(web.CLIENT_ORIGIN, web.CLIENT_TYPE)
+ m.Cmd(web.SPIDE).Table(func(value ice.Maps) {
+ if value[web.CLIENT_TYPE] == nfs.REPOS {
+ m.Push(arg[0], value[web.CLIENT_ORIGIN])
+ }
+ })
+ m.SortStr(arg[0])
case tcp.WIFI:
m.Cmdy(tcp.WIFI).Cut(tcp.SSID)
case web.WEIXIN:
@@ -125,12 +139,12 @@ func init() {
})
}
}},
- aaa.LOGIN: {Help: "登录", Hand: func(m *ice.Message, arg ...string) {
+ aaa.LOGIN: {Hand: func(m *ice.Message, arg ...string) {
p := nfs.TempName(m)
m.GoSleep3s(func() { web.PushNoticeGrow(m, ice.Render(m, ice.RENDER_IMAGES, web.SHARE_LOCAL+p)) })
IdeCli(m, "", _ide_args_cli(m), _ide_args_qrcode(m, p)).ProcessRefresh()
}},
- code.AUTOGEN: {Name: "autogen projectname*='终端工具链' appid*='wxf4e5104d83476ed6' serve*='https://2021.shylinux.com'", Help: "生成", Icon: "bi bi-tools", Hand: func(m *ice.Message, arg ...string) {
+ code.AUTOGEN: {Name: "autogen projectname*='终端工具链' appid* serve*", Help: "生成", Icon: "bi bi-folder-check", Hand: func(m *ice.Message, arg ...string) {
_ide_autogen_utils(m)
_ide_autogen_pages(m)
p := ice.USR_PROGRAM
@@ -138,51 +152,43 @@ func init() {
m.Cmd(nfs.DEFS, p+PROJECT_CONFIG_JSON, kit.Formats(kit.Dict(m.OptionSimple(APPID, "projectname"))))
IdeCli(m.Sleep3s(), cli.OPEN, "--project", kit.Path(mdb.Config(m, PROJECT, p))).ProcessInner()
}},
- web.ADMIN: {Help: "后台", Hand: func(m *ice.Message, arg ...string) {
- m.ProcessOpen("https://mp.weixin.qq.com/")
- }},
- DOC: {Help: "文档", Hand: func(m *ice.Message, arg ...string) {
- m.ProcessOpen("https://developers.weixin.qq.com/miniprogram/dev/api/")
- }},
- cli.MAKE: {Help: "构建", Hand: func(m *ice.Message, arg ...string) {
+ cli.MAKE: {Help: "构建", Icon: "bi bi-tools", Hand: func(m *ice.Message, arg ...string) {
kit.If(m.Option(mdb.HASH), func(p string) { mdb.Config(m, CURRENT, p) })
m.Options(m.Cmd("", kit.Select(mdb.Config(m, CURRENT), arg, 0)).AppendSimple())
kit.If(m.Option(cli.PWD), func(p string) {
- kit.If(p == kit.Path(ice.USR_VOLCANOS+PUBLISH_CLIENT_MP), func() { _ide_autogen_utils(m); _ide_autogen_pages(m) })
+ // kit.If(p == kit.Path(ice.USR_VOLCANOS+PUBLISH_CLIENT_MP), func() { _ide_autogen_utils(m); _ide_autogen_pages(m) })
})
m.Cmd("", AUTO_PREVIEW)
}},
- AUTO_PREVIEW: {Help: "预览", Icon: "bi bi-wechat", Hand: func(m *ice.Message, arg ...string) {
+ web.ADMIN: {Hand: func(m *ice.Message, arg ...string) {
+ m.ProcessOpen("https://mp.weixin.qq.com/")
+ }},
+ DOC: {Hand: func(m *ice.Message, arg ...string) {
+ m.ProcessOpen("https://developers.weixin.qq.com/miniprogram/dev/api/")
+ }},
+ AUTO_PREVIEW: {Icon: "bi bi-wechat", Hand: func(m *ice.Message, arg ...string) {
kit.If(m.Option(mdb.HASH), func(p string) { mdb.Config(m, CURRENT, p) })
IdeCli(m, "", _ide_args_cli(m)).ProcessInner()
}},
- PREVIEW: {Help: "体验", Icon: "bi bi-qr-code-scan", Hand: func(m *ice.Message, arg ...string) {
+ PREVIEW: {Icon: "bi bi-qr-code-scan", Hand: func(m *ice.Message, arg ...string) {
kit.If(m.Option(mdb.HASH), func(p string) { mdb.Config(m, CURRENT, p) })
p := nfs.TempName(m)
IdeCli(m, "", _ide_args_cli(m), _ide_args_qrcode(m, p)).EchoImages(web.SHARE_LOCAL + p).ProcessInner()
}},
- PUSH: {Name: "push weixin", Help: "推送", Icon: "bi bi-arrow-up-right-square", Hand: func(m *ice.Message, arg ...string) {
+ PUSH: {Name: "push weixin", Icon: "bi bi-arrow-up-right-square", Hand: func(m *ice.Message, arg ...string) {
defer m.ProcessHold()
defer web.ToastProcess(m)()
m.Cmd(web.SPACE, m.Option(web.WEIXIN), lex.PARSE, m.Cmdx("", m.Option(mdb.HASH)))
}},
- }, web.StatsAction("", "小程序场景数"), mdb.ExportHashAction(
- mdb.FIELD, "time,hash,name,text,pages,space,index,args,wifi",
- cli.DARWIN, "/Applications/wechatwebdevtools.app/Contents/MacOS/cli",
- )), Hand: func(m *ice.Message, arg ...string) {
- if len(arg) == 0 && tcp.IsLocalHost(m, m.Option(ice.MSG_USERIP)) && kit.Value(kit.UnMarshal(IdeCli(m.Spawn(), ISLOGIN).Append(cli.CMD_OUT)), aaa.LOGIN) != true {
- m.EchoInfoButton("请登录: ", aaa.LOGIN)
+ }, mdb.ExportHashAction(mdb.FIELD, "time,hash,name,text,pages,space,index,args,wifi", cli.DARWIN, "/Applications/wechatwebdevtools.app/Contents/MacOS/cli")), Hand: func(m *ice.Message, arg ...string) {
+ if tcp.IsLocalHost(m, m.Option(ice.MSG_USERIP)) && kit.Value(kit.UnMarshal(IdeCli(m.Spawn(), ISLOGIN).Append(cli.CMD_OUT)), aaa.LOGIN) != true {
+ m.EchoInfoButton("请微信授权", aaa.LOGIN)
return
} else if !nfs.Exists(m, ice.USR_PROGRAM) {
- m.EchoInfoButton("请生成项目: ", code.AUTOGEN)
+ m.EchoInfoButton("请生成项目", code.AUTOGEN)
return
- } else if mdb.HashSelect(m, arg...); tcp.IsLocalHost(m, m.Option(ice.MSG_USERIP)) {
- m.PushAction(AUTO_PREVIEW, PREVIEW, PUSH, mdb.REMOVE).Action(aaa.LOGIN, code.AUTOGEN, mdb.CREATE, web.ADMIN, DOC)
- } else {
- m.PushAction(AUTO_PREVIEW, PREVIEW, PUSH, mdb.REMOVE).Action(aaa.LOGIN, code.AUTOGEN, mdb.CREATE, web.ADMIN, DOC)
- // m.PushAction(PUSH, mdb.REMOVE).Action(mdb.CREATE, web.ADMIN, DOC)
}
- if len(arg) > 0 {
+ if mdb.HashSelect(m, arg...).PushAction(AUTO_PREVIEW, PREVIEW, PUSH, mdb.REMOVE).Action(mdb.CREATE, cli.MAKE, code.AUTOGEN, aaa.LOGIN, web.ADMIN, DOC); len(arg) > 0 {
m.Options(m.AppendSimple(web.SPACE, ctx.INDEX, ctx.ARGS, tcp.WIFI))
p := kit.MergeURL2(kit.Select(web.UserHost(m), m.Option(web.SERVE)), path.Join(nfs.PS+m.Append(PAGES)), _ide_args(m))
m.PushQRCode(cli.QRCODE, p).Push(web.LINK, p).Echo(p)
diff --git a/misc/wx/ide.shy b/misc/wx/ide.shy
index 83e1bb22..89d3c58f 100644
--- a/misc/wx/ide.shy
+++ b/misc/wx/ide.shy
@@ -8,4 +8,4 @@ qrcode `https://mp.weixin.qq.com/a/~HkylKD4DZShrgSm5GuXWLQ~~`
field web.chat.wx.access
field web.chat.wx.ide
-field web.chat.wx.scan
\ No newline at end of file
+field web.chat.wx.scan args `gh_61ea404535e4`
\ No newline at end of file
diff --git a/misc/wx/login.go b/misc/wx/login.go
index 455f2106..94923fa1 100644
--- a/misc/wx/login.go
+++ b/misc/wx/login.go
@@ -83,17 +83,23 @@ func init() {
web.PP(LOGIN): {Actions: ice.MergeActions(ice.Actions{
aaa.SESS: {Name: "sess code", Help: "会话", Hand: func(m *ice.Message, arg ...string) {
m.Option(ice.MSG_USERZONE, WX)
- msg := m.Cmd(ACCESS, kit.Select(m.Option(APPID), kit.Split(kit.ParseURL(m.Option(ice.MSG_REFERER)).Path, nfs.PS), 0))
- msg = m.Cmd(web.SPIDE, WX, http.MethodGet, AUTH_CODE, "js_code", m.Option(cli.CODE), msg.AppendSimple(APPID, SECRET))
+ appid := kit.Select(m.Option(APPID), kit.Split(kit.ParseURL(m.Option(ice.MSG_REFERER)).Path, nfs.PS), 0)
+ m.Cmd(ACCESS).Table(func(value ice.Maps) {
+ kit.If(value[APPID] == appid, func() { delete(value, aaa.USERNICK); m.Options(value) })
+ })
+ msg := m.Cmd(web.SPIDE, WX, http.MethodGet, AUTH_CODE, "js_code", m.Option(cli.CODE), m.OptionSimple(APPID, SECRET))
+ m.Warn(msg.Append(OPENID) == "", msg.Append("errmsg"))
m.Echo(aaa.SessCreate(msg, msg.Append(OPENID)))
+ m.Sleep("3s")
}},
aaa.USER: {Help: "用户", Hand: func(m *ice.Message, arg ...string) {
if m.Cmd(aaa.USER, m.Option(aaa.USERNAME, m.Option(ice.MSG_USERNAME))).Length() == 0 {
m.Cmd(aaa.USER, mdb.CREATE, aaa.USERROLE, aaa.VOID, m.OptionSimple(aaa.USERNAME))
}
- m.Cmd(aaa.USER, mdb.MODIFY, m.OptionSimple(aaa.USERNAME), aaa.USERNICK, m.Option("nickName"), aaa.USERZONE, WX,
- aaa.AVATAR, m.Option("avatarUrl"), aaa.GENDER, kit.Select("女", "男", m.Option(aaa.GENDER) == "1"),
- m.OptionSimple(aaa.CITY, aaa.COUNTRY, aaa.LANGUAGE, aaa.PROVINCE),
+ m.Cmd(aaa.USER, mdb.MODIFY, m.OptionSimple(aaa.USERNAME),
+ aaa.USERNICK, m.Option(aaa.USERNICK), aaa.AVATAR, m.Option(aaa.AVATAR),
+ aaa.GENDER, kit.Select(kit.Select("", "女", m.Option(aaa.GENDER) == "2"), "男", m.Option(aaa.GENDER) == "1"),
+ m.OptionSimple(aaa.LANGUAGE, aaa.CITY, aaa.COUNTRY, aaa.PROVINCE), aaa.USERZONE, WX,
)
}},
SCENE: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy(IDE, m.Option(SCENE)) }},
diff --git a/misc/wx/scan.go b/misc/wx/scan.go
index c34deae3..7937a783 100644
--- a/misc/wx/scan.go
+++ b/misc/wx/scan.go
@@ -49,7 +49,7 @@ func init() {
if info.Append(tcp.WIFI) != "" {
wifi := m.Cmd(tcp.WIFI, info.Append(tcp.WIFI))
ls := kit.Split(tcp.PublishLocalhost(m, u.Hostname()), nfs.PT)
- meta = path.Join("w", kit.Format("%x%x", kit.Int(ls[2]), kit.Int(ls[3])), scene, wifi.Append(tcp.SSID), wifi.Append(aaa.PASSWORD))
+ meta = path.Join("w", kit.Format("%x", kit.Int(ls[3])), scene, wifi.Append(tcp.SSID), wifi.Append(aaa.PASSWORD))
} else {
meta = path.Join("h", tcp.PublishLocalhost(m, u.Host), scene)
}
diff --git a/misc/wx/studio.go b/misc/wx/studio.go
index 739d7469..b94a2970 100644
--- a/misc/wx/studio.go
+++ b/misc/wx/studio.go
@@ -11,7 +11,7 @@ const STUDIO = "studio"
func init() {
Index.MergeCommands(ice.Commands{
- STUDIO: {Hand: func(m *ice.Message, arg ...string) {
+ STUDIO: {Icon: "wxdev.png", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(ctx.COMMAND, kit.Split(kit.Select("web.chat.wx.access,web.chat.wx.ide,web.chat.wx.scan", mdb.Config(m, ctx.CMDS))))
ctx.DisplayStory(m, "")
}},
diff --git a/misc/wx/wxml.go b/misc/wx/wxml.go
index c07b99b9..71692f60 100644
--- a/misc/wx/wxml.go
+++ b/misc/wx/wxml.go
@@ -23,15 +23,18 @@ func init() {
"import", code.KEYWORD,
"class", code.FUNCTION,
- "size", code.FUNCTION,
+ "type", code.FUNCTION,
+ "open-type", code.FUNCTION,
"name", code.FUNCTION,
- "range", code.FUNCTION,
+ "size", code.FUNCTION,
"value", code.FUNCTION,
"placeholder", code.FUNCTION,
+ "range", code.FUNCTION,
"is", code.FUNCTION,
"data", code.FUNCTION,
"wx:if", code.FUNCTION,
"wx:elif", code.FUNCTION,
+ "wx:else", code.FUNCTION,
"wx:for", code.FUNCTION,
"wx:for-item", code.FUNCTION,
"wx:for-index", code.FUNCTION,
@@ -39,12 +42,17 @@ func init() {
"bindtap", code.FUNCTION,
"bindinput", code.FUNCTION,
"bindchange", code.FUNCTION,
+ "onblur", code.FUNCTION,
+ "data-name", code.FUNCTION,
+ "data-item", code.FUNCTION,
),
)), ice.Actions{
code.TEMPLATE: {Hand: func(m *ice.Message, arg ...string) {
m.Echo(`
-
+
+ output
+
`)
}},
})},