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 + `) }}, })},