forked from x/ContextOS
add qrcode
This commit is contained in:
parent
7c8a44edd7
commit
9c887c773e
@ -6,9 +6,10 @@
|
|||||||
config load tmp/cert.json work flow trust
|
config load tmp/cert.json work flow trust
|
||||||
~wiki
|
~wiki
|
||||||
config load tmp/wiki.json wiki_visit
|
config load tmp/wiki.json wiki_visit
|
||||||
|
|
||||||
source etc/common.shy
|
source etc/common.shy
|
||||||
~ssh
|
~ssh
|
||||||
remote auto
|
remote auto
|
||||||
|
~cli
|
||||||
|
plugin sort.go sort
|
||||||
source local.shy
|
source local.shy
|
||||||
|
|
||||||
|
@ -46,28 +46,35 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
"timer": &ctx.Config{Name: "timer", Value: map[string]interface{}{"interval": "10s", "timer": ""}, Help: "断线重连"},
|
"timer": &ctx.Config{Name: "timer", Value: map[string]interface{}{"interval": "10s", "timer": ""}, Help: "断线重连"},
|
||||||
"componet": &ctx.Config{Name: "componet", Value: map[string]interface{}{
|
"componet": &ctx.Config{Name: "componet", Value: map[string]interface{}{
|
||||||
"index": []interface{}{
|
"index": []interface{}{
|
||||||
map[string]interface{}{"componet_name": "salary", "componet_help": "salary", "componet_tmpl": "componet",
|
map[string]interface{}{"componet_name": "salary", "componet_help": "计算工资",
|
||||||
"componet_type": "public",
|
"componet_tmpl": "componet", "componet_view": "Salary", "componet_init": "",
|
||||||
"componet_view": "Salary", "componet_init": "",
|
"componet_type": "public", "componet_ctx": "web.chat", "componet_cmd": "salary",
|
||||||
"componet_ctx": "web.chat", "componet_cmd": "salary", "componet_args": []interface{}{"@text", "@total"}, "inputs": []interface{}{
|
"componet_args": []interface{}{}, "inputs": []interface{}{
|
||||||
map[string]interface{}{"label": "total", "type": "text", "name": "text"},
|
map[string]interface{}{"label": "total", "type": "text", "name": "text"},
|
||||||
map[string]interface{}{"label": "base", "type": "text", "name": "total"},
|
map[string]interface{}{"label": "base", "type": "text", "name": "total"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
map[string]interface{}{"componet_name": "pwd", "componet_help": "pwd", "componet_tmpl": "componet",
|
map[string]interface{}{"componet_name": "qrcode", "componet_help": "生成二维码",
|
||||||
"componet_type": "protected",
|
"componet_tmpl": "componet", "componet_view": "QRCode", "componet_init": "initQRCode.js",
|
||||||
"componet_view": "FlashList", "componet_init": "initFlashList.js",
|
"componet_type": "public", "componet_ctx": "web.chat", "componet_cmd": "login",
|
||||||
"componet_ctx": "nfs", "componet_cmd": "pwd", "componet_args": []interface{}{"@text"}, "inputs": []interface{}{
|
"componet_args": []interface{}{"qrcode"}, "inputs": []interface{}{
|
||||||
|
map[string]interface{}{"label": "content", "type": "text", "name": "content"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
map[string]interface{}{"componet_name": "pwd", "componet_help": "pwd",
|
||||||
|
"componet_tmpl": "componet", "componet_view": "FlashList", "componet_init": "initFlashList.js",
|
||||||
|
"componet_type": "protected", "componet_ctx": "nfs", "componet_cmd": "pwd",
|
||||||
|
"componet_args": []interface{}{}, "inputs": []interface{}{
|
||||||
map[string]interface{}{"type": "button", "value": "当前", "click": "show"},
|
map[string]interface{}{"type": "button", "value": "当前", "click": "show"},
|
||||||
map[string]interface{}{"type": "button", "value": "所有", "click": "show"},
|
map[string]interface{}{"type": "button", "value": "所有", "click": "show"},
|
||||||
map[string]interface{}{"type": "text", "name": "text"},
|
map[string]interface{}{"type": "text", "name": "text"},
|
||||||
},
|
},
|
||||||
"display_result": "", "display_append": "",
|
"display_result": "", "display_append": "",
|
||||||
},
|
},
|
||||||
map[string]interface{}{"componet_name": "dir", "componet_help": "dir", "componet_tmpl": "componet",
|
map[string]interface{}{"componet_name": "dir", "componet_help": "dir",
|
||||||
"componet_type": "private",
|
"componet_tmpl": "componet", "componet_view": "FlashList", "componet_init": "initFlashList.js",
|
||||||
"componet_view": "FlashList", "componet_init": "initFlashList.js",
|
"componet_type": "private", "componet_ctx": "nfs", "componet_cmd": "dir",
|
||||||
"componet_ctx": "nfs", "componet_cmd": "dir", "componet_args": []interface{}{"@text"}, "inputs": []interface{}{
|
"componet_args": []interface{}{}, "inputs": []interface{}{
|
||||||
map[string]interface{}{"type": "text", "name": "text"},
|
map[string]interface{}{"type": "text", "name": "text"},
|
||||||
},
|
},
|
||||||
"display_result": "", "display_append": "",
|
"display_result": "", "display_append": "",
|
||||||
@ -134,6 +141,11 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch arg[0] {
|
switch arg[0] {
|
||||||
|
case "init": // 创建用户
|
||||||
|
if m.Confs("runtime", "user.cert") && m.Confs("runtime", "user.key") {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
fallthrough
|
||||||
case "create": // 创建用户
|
case "create": // 创建用户
|
||||||
m.Cmd("aaa.auth", "username", m.Conf("runtime", "user.name"), "delete", "node")
|
m.Cmd("aaa.auth", "username", m.Conf("runtime", "user.name"), "delete", "node")
|
||||||
if len(arg) == 1 {
|
if len(arg) == 1 {
|
||||||
@ -231,8 +243,14 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
m.Echo("private componet of %s", m.Conf("runtime", "work.name"))
|
m.Echo("private componet of %s", m.Conf("runtime", "work.name"))
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := m.Find(kit.Format(tool["componet_ctx"]))
|
msg := m.Find(kit.Format(tool["componet_ctx"]))
|
||||||
msg.Cmd(tool["componet_cmd"], arg[4:]).CopyTo(m)
|
|
||||||
|
args := []string{}
|
||||||
|
for _, v := range kit.Trans(tool["componet_args"]) {
|
||||||
|
args = append(args, msg.Parse(v))
|
||||||
|
}
|
||||||
|
msg.Cmd(tool["componet_cmd"], args, arg[4:]).CopyTo(m)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
m.Confm("componet", arg[0:], func(value map[string]interface{}) {
|
m.Confm("componet", arg[0:], func(value map[string]interface{}) {
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"contexts/ctx"
|
"contexts/ctx"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/skip2/go-qrcode"
|
||||||
// "github.com/PuerkitoBio/goquery"
|
// "github.com/PuerkitoBio/goquery"
|
||||||
"github.com/go-cas/cas"
|
"github.com/go-cas/cas"
|
||||||
"html/template"
|
"html/template"
|
||||||
@ -136,6 +137,10 @@ func (web *WEB) Login(msg *ctx.Message, w http.ResponseWriter, r *http.Request)
|
|||||||
if msg.Options("sessid") {
|
if msg.Options("sessid") {
|
||||||
msg.Log("info", "sessid: %s", msg.Option("sessid"))
|
msg.Log("info", "sessid: %s", msg.Option("sessid"))
|
||||||
msg.Log("info", "username: %s", msg.Option("username", msg.Cmd("aaa.sess", "user").Append("meta")))
|
msg.Log("info", "username: %s", msg.Option("username", msg.Cmd("aaa.sess", "user").Append("meta")))
|
||||||
|
msg.Log("info", "nickname: %s", msg.Option("nickname", msg.Cmdx("aaa.auth", "username", msg.Option("username"), "data", "nickname")))
|
||||||
|
if !msg.Options("nickname") {
|
||||||
|
msg.Option("nickname", msg.Option("username"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !msg.Options("username") && msg.Options("relay") {
|
if !msg.Options("username") && msg.Options("relay") {
|
||||||
@ -167,8 +172,10 @@ func (web *WEB) HandleCmd(m *ctx.Message, key string, cmd *ctx.Command) {
|
|||||||
// 请求环境
|
// 请求环境
|
||||||
msg.Option("dir_root", msg.Cap("directory"))
|
msg.Option("dir_root", msg.Cap("directory"))
|
||||||
for _, v := range r.Cookies() {
|
for _, v := range r.Cookies() {
|
||||||
|
if v.Value != "" {
|
||||||
msg.Option(v.Name, v.Value)
|
msg.Option(v.Name, v.Value)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 请求参数
|
// 请求参数
|
||||||
r.ParseMultipartForm(int64(msg.Confi("serve", "form_size")))
|
r.ParseMultipartForm(int64(msg.Confi("serve", "form_size")))
|
||||||
@ -223,10 +230,19 @@ func (web *WEB) HandleCmd(m *ctx.Message, key string, cmd *ctx.Command) {
|
|||||||
switch {
|
switch {
|
||||||
case msg.Has("redirect"):
|
case msg.Has("redirect"):
|
||||||
http.Redirect(w, r, msg.Append("redirect"), http.StatusTemporaryRedirect)
|
http.Redirect(w, r, msg.Append("redirect"), http.StatusTemporaryRedirect)
|
||||||
|
|
||||||
case msg.Has("directory"):
|
case msg.Has("directory"):
|
||||||
http.ServeFile(w, r, msg.Append("directory"))
|
http.ServeFile(w, r, msg.Append("directory"))
|
||||||
|
|
||||||
case msg.Has("componet"):
|
case msg.Has("componet"):
|
||||||
msg.Spawn().Add("option", "componet_group", msg.Meta["componet"]).Cmd("/render")
|
msg.Spawn().Add("option", "componet_group", msg.Meta["componet"]).Cmd("/render")
|
||||||
|
|
||||||
|
case msg.Has("qrcode"):
|
||||||
|
w.Header().Set("Content-Type", "image/png")
|
||||||
|
qr, e := qrcode.New(msg.Append("qrcode"), qrcode.Medium)
|
||||||
|
m.Assert(e)
|
||||||
|
m.Assert(qr.Write(256, w))
|
||||||
|
|
||||||
case msg.Has("append"):
|
case msg.Has("append"):
|
||||||
meta := map[string]interface{}{}
|
meta := map[string]interface{}{}
|
||||||
if len(msg.Meta["result"]) > 0 {
|
if len(msg.Meta["result"]) > 0 {
|
||||||
@ -915,7 +931,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
|||||||
accept_json := strings.HasPrefix(m.Option("accept"), "application/json")
|
accept_json := strings.HasPrefix(m.Option("accept"), "application/json")
|
||||||
w := m.Optionv("response").(http.ResponseWriter)
|
w := m.Optionv("response").(http.ResponseWriter)
|
||||||
if accept_json {
|
if accept_json {
|
||||||
w.Header().Add("Content-Type", "application/json")
|
// w.Header().Add("Content-Type", "application/json")
|
||||||
} else {
|
} else {
|
||||||
w.Header().Add("Content-Type", "text/html")
|
w.Header().Add("Content-Type", "text/html")
|
||||||
}
|
}
|
||||||
@ -1022,7 +1038,9 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 添加响应
|
// 添加响应
|
||||||
if msg.Appends("directory") {
|
if msg.Appends("qrcode") {
|
||||||
|
m.Append("qrcode", msg.Append("qrcode"))
|
||||||
|
} else if msg.Appends("directory") {
|
||||||
m.Append("download_file", fmt.Sprintf("/download/%s", msg.Append("directory")))
|
m.Append("download_file", fmt.Sprintf("/download/%s", msg.Append("directory")))
|
||||||
return
|
return
|
||||||
} else if accept_json {
|
} else if accept_json {
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -117,6 +118,7 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
|
|
||||||
"chat": &ctx.Config{Name: "chat", Value: map[string]interface{}{
|
"chat": &ctx.Config{Name: "chat", Value: map[string]interface{}{
|
||||||
"appid": "", "appmm": "", "token": "", "site": "https://shylinux.com",
|
"appid": "", "appmm": "", "token": "", "site": "https://shylinux.com",
|
||||||
|
"auth": "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=STATE#wechat_redirect",
|
||||||
"access": map[string]interface{}{"token": "", "expire": 0, "url": "/cgi-bin/token?grant_type=client_credential"},
|
"access": map[string]interface{}{"token": "", "expire": 0, "url": "/cgi-bin/token?grant_type=client_credential"},
|
||||||
"ticket": map[string]interface{}{"value": "", "expire": 0, "url": "/cgi-bin/ticket/getticket?type=jsapi"},
|
"ticket": map[string]interface{}{"value": "", "expire": 0, "url": "/cgi-bin/ticket/getticket?type=jsapi"},
|
||||||
}, Help: "聊天记录"},
|
}, Help: "聊天记录"},
|
||||||
@ -128,21 +130,46 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
}, Help: "聊天记录"},
|
}, Help: "聊天记录"},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ctx.Command{
|
Commands: map[string]*ctx.Command{
|
||||||
|
"/qrcode": &ctx.Command{Name: "qrcode text", Help: "登录", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||||
|
m.Append("qrcode", m.Option("text"))
|
||||||
|
return
|
||||||
|
}},
|
||||||
"login": &ctx.Command{Name: "login [username password]", Help: "登录", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
"login": &ctx.Command{Name: "login [username password]", Help: "登录", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||||
if len(arg) > 1 {
|
if len(arg) > 0 { // 非登录态
|
||||||
|
switch arg[0] {
|
||||||
|
case "weixin":
|
||||||
|
m.Cmdy(".js_token")
|
||||||
|
case "qrcode":
|
||||||
|
m.Append("qrcode", arg[1])
|
||||||
|
case "rename":
|
||||||
|
default:
|
||||||
if m.Cmds("ssh.work", "share", arg[0]) {
|
if m.Cmds("ssh.work", "share", arg[0]) {
|
||||||
if m.Cmds("aaa.auth", "username", arg[0], "password", arg[1]) {
|
if m.Cmds("aaa.auth", "username", arg[0], "password", arg[1]) {
|
||||||
m.Option("username", arg[0])
|
m.Option("username", arg[0])
|
||||||
m.Copy(m.Cmd("aaa.user", "session", "select"), "result")
|
m.Copy(m.Cmd("aaa.user", "session", "select"), "result")
|
||||||
m.Option("sessid", m.Result(0))
|
m.Option("sessid", m.Result(0))
|
||||||
if !m.Cmds("aaa.auth", "username", arg[0], "data", "chat.default") && m.Option("username") != m.Conf("runtime", "work.name") {
|
if !m.Cmds("aaa.auth", "username", arg[0], "data", "chat.default") && m.Option("username") != m.Conf("runtime", "work.name") {
|
||||||
m.Cmds("aaa.auth", "username", arg[0], "data", "chat.default", m.Spawn().Cmd(".ocean", "spawn", "", m.Option("username")+"@"+m.Conf("runtime", "work.name")))
|
m.Cmds("aaa.auth", "username", arg[0], "data", "chat.default", m.Spawn().Cmdx(".ocean", "spawn", "", m.Option("username")+"@"+m.Conf("runtime", "work.name")))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if m.Options("sessid") {
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 登录检查
|
||||||
|
if !m.Options("sessid") && !m.Options("username") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(arg) > 0 {
|
||||||
|
switch arg[0] {
|
||||||
|
case "rename":
|
||||||
|
m.Cmd("aaa.auth", "username", m.Option("username"), "data", "nickname", arg[1])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m.Append("remote_ip", m.Option("remote_ip"))
|
||||||
|
m.Append("nickname", m.Option("nickname"))
|
||||||
m.Echo(m.Option("username"))
|
m.Echo(m.Option("username"))
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}},
|
}},
|
||||||
"ocean": &ctx.Command{Name: "ocean", Help: "海洋", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
"ocean": &ctx.Command{Name: "ocean", Help: "海洋", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||||
@ -172,6 +199,7 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
"conf": map[string]interface{}{
|
"conf": map[string]interface{}{
|
||||||
"create_user": m.Option("username"),
|
"create_user": m.Option("username"),
|
||||||
"create_time": m.Time(),
|
"create_time": m.Time(),
|
||||||
|
"update_time": m.Time(),
|
||||||
"name": kit.Select("what", arg, 2),
|
"name": kit.Select("what", arg, 2),
|
||||||
"route": kit.Select(m.Conf("runtime", "node.route"), m.Option("node.route"), arg[1] != ""),
|
"route": kit.Select(m.Conf("runtime", "node.route"), m.Option("node.route"), arg[1] != ""),
|
||||||
},
|
},
|
||||||
@ -194,6 +222,14 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
if !m.Options("sessid") || !m.Options("username") {
|
if !m.Options("sessid") || !m.Options("username") {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if m.Options("river") {
|
||||||
|
if m.Confs("flow", m.Option("river")) && !m.Confs("flow", []string{m.Option("river"), "user", m.Option("username")}) {
|
||||||
|
u := m.Cmdx("ssh._route", m.Conf("runtime", "work.route"), "_check", "work", m.Option("username"))
|
||||||
|
m.Conf("flow", []string{m.Option("river"), "user", m.Option("username"), "user"}, u)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
m.Confm("flow", func(key string, value map[string]interface{}) {
|
m.Confm("flow", func(key string, value map[string]interface{}) {
|
||||||
if kit.Chain(value, []string{"user", m.Option("username")}) == nil {
|
if kit.Chain(value, []string{"user", m.Option("username")}) == nil {
|
||||||
@ -204,6 +240,7 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
m.Add("append", "name", kit.Chains(value, "conf.name"))
|
m.Add("append", "name", kit.Chains(value, "conf.name"))
|
||||||
m.Add("append", "create_user", kit.Chains(value, "conf.create_user"))
|
m.Add("append", "create_user", kit.Chains(value, "conf.create_user"))
|
||||||
m.Add("append", "create_time", kit.Chains(value, "conf.create_time"))
|
m.Add("append", "create_time", kit.Chains(value, "conf.create_time"))
|
||||||
|
m.Add("append", "update_time", kit.Chains(value, "conf.update_time"))
|
||||||
|
|
||||||
if list, ok := kit.Chain(value, "text.list").([]interface{}); ok {
|
if list, ok := kit.Chain(value, "text.list").([]interface{}); ok {
|
||||||
m.Add("append", "count", len(list))
|
m.Add("append", "count", len(list))
|
||||||
@ -211,7 +248,7 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
m.Add("append", "count", 0)
|
m.Add("append", "count", 0)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
m.Table()
|
m.Sort("name").Sort("update_time", "time_r").Table()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,6 +261,7 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
m.Add("append", "text", value["text"])
|
m.Add("append", "text", value["text"])
|
||||||
m.Add("append", "create_time", value["create_time"])
|
m.Add("append", "create_time", value["create_time"])
|
||||||
m.Add("append", "create_user", value["create_user"])
|
m.Add("append", "create_user", value["create_user"])
|
||||||
|
m.Add("append", "create_nick", value["create_nick"])
|
||||||
})
|
})
|
||||||
m.Table()
|
m.Table()
|
||||||
return
|
return
|
||||||
@ -238,11 +276,14 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
|
|
||||||
m.Conf("flow", []string{arg[1], "text.list.-2"}, map[string]interface{}{
|
m.Conf("flow", []string{arg[1], "text.list.-2"}, map[string]interface{}{
|
||||||
"create_user": m.Option("username"),
|
"create_user": m.Option("username"),
|
||||||
|
"create_nick": m.Option("nickname"),
|
||||||
"create_time": m.Time(),
|
"create_time": m.Time(),
|
||||||
"type": arg[2],
|
"type": arg[2],
|
||||||
"text": arg[3],
|
"text": arg[3],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
m.Conf("flow", []string{arg[1], "conf.update_time"}, m.Time())
|
||||||
|
|
||||||
count := m.Confi("flow", []string{arg[1], "text.count"}) + 1
|
count := m.Confi("flow", []string{arg[1], "text.count"}) + 1
|
||||||
m.Confi("flow", []string{arg[1], "text.count"}, count)
|
m.Confi("flow", []string{arg[1], "text.count"}, count)
|
||||||
m.Append("create_user", m.Option("username"))
|
m.Append("create_user", m.Option("username"))
|
||||||
@ -266,7 +307,7 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
m.Add("append", "key", key)
|
m.Add("append", "key", key)
|
||||||
m.Add("append", "count", kit.Len(value["list"]))
|
m.Add("append", "count", kit.Len(value["list"]))
|
||||||
})
|
})
|
||||||
m.Table()
|
m.Sort("key").Table()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(arg) == 2 {
|
if len(arg) == 2 {
|
||||||
@ -380,18 +421,22 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
m.Option("selfname", data.ToUserName)
|
m.Option("selfname", data.ToUserName)
|
||||||
|
|
||||||
// 创建会话
|
// 创建会话
|
||||||
if m.Option("sessid", m.Cmd("aaa.user", m.Option("username", data.FromUserName), "chat").Append("key")) == "" {
|
m.Option("sessid", m.Cmdx("aaa.user", "session", "select"))
|
||||||
m.Cmd("aaa.sess", m.Option("sessid", m.Cmdx("aaa.sess", "chat", "ip", "what")), m.Option("username"), "ppid", "what")
|
m.Option("bench", m.Cmdx("aaa.sess", "bench", "select"))
|
||||||
}
|
|
||||||
|
|
||||||
// 创建空间
|
|
||||||
if m.Option("bench", m.Cmd("aaa.sess", m.Option("sessid"), "bench").Append("key")) == "" {
|
|
||||||
m.Option("bench", m.Cmdx("aaa.work", m.Option("sessid"), "chat"))
|
|
||||||
}
|
|
||||||
m.Option("current_ctx", kit.Select("chat", m.Magic("bench", "current_ctx")))
|
m.Option("current_ctx", kit.Select("chat", m.Magic("bench", "current_ctx")))
|
||||||
|
|
||||||
switch data.MsgType {
|
switch data.MsgType {
|
||||||
case "text":
|
case "text":
|
||||||
|
m.Echo(web.Merge(m, map[string]interface{}{"path": "chat"}, m.Conf("chat", "site"), "sessid", m.Option("sessid")))
|
||||||
|
if !m.Cmds("aaa.auth", "username", m.Option("usernmae"), "data", "chat.default") && m.Option("username") != m.Conf("runtime", "work.name") {
|
||||||
|
if m.Cmds("ssh.work", "share", m.Option("username")) {
|
||||||
|
m.Cmd("aaa.auth", "username", m.Option("username"), "data", "nickname", "someone")
|
||||||
|
m.Cmds("aaa.auth", "username", m.Option("username"), "data", "chat.default", m.Spawn().Cmdx(".ocean", "spawn", "", m.Option("username")+"@"+m.Conf("runtime", "work.name")))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Marshal(m, "text")
|
||||||
|
return
|
||||||
// 执行命令
|
// 执行命令
|
||||||
cmd := strings.Split(data.Content, " ")
|
cmd := strings.Split(data.Content, " ")
|
||||||
if !m.Cmds("aaa.work", m.Option("bench"), "right", data.FromUserName, "chat", cmd[0]) {
|
if !m.Cmds("aaa.work", m.Option("bench"), "right", data.FromUserName, "chat", cmd[0]) {
|
||||||
@ -440,6 +485,9 @@ var Index = &ctx.Context{Name: "chat", Help: "会议中心",
|
|||||||
|
|
||||||
m.Append("signature", hex.EncodeToString(h[:]))
|
m.Append("signature", hex.EncodeToString(h[:]))
|
||||||
m.Append("appid", m.Conf("chat", "appid"))
|
m.Append("appid", m.Conf("chat", "appid"))
|
||||||
|
m.Append("remote_ip", m.Option("remote_ip"))
|
||||||
|
m.Append("auth2.0", fmt.Sprintf(m.Conf("chat", "auth"), m.Conf("chat", "appid"),
|
||||||
|
url.QueryEscape(fmt.Sprintf("%s%s", m.Conf("chat", "site"), m.Option("index_url"))), kit.Select("snsapi_base", m.Option("scope"))))
|
||||||
return
|
return
|
||||||
}},
|
}},
|
||||||
"share": &ctx.Command{Name: "share", Help: "", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
"share": &ctx.Command{Name: "share", Help: "", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||||
|
@ -1,3 +1,14 @@
|
|||||||
|
fieldset.Login {
|
||||||
|
font-size:28px;
|
||||||
|
}
|
||||||
|
fieldset.Login input {
|
||||||
|
font-size:18px;
|
||||||
|
height:28px;
|
||||||
|
}
|
||||||
|
fieldset.Login button {
|
||||||
|
font-size:18px;
|
||||||
|
height:28px;
|
||||||
|
}
|
||||||
fieldset.Ocean div.create pre:hover {
|
fieldset.Ocean div.create pre:hover {
|
||||||
background-color:red;
|
background-color:red;
|
||||||
}
|
}
|
||||||
|
@ -80,23 +80,77 @@ var page = Page({
|
|||||||
{label: "username"}, {input: ["username"]}, {type: "br"},
|
{label: "username"}, {input: ["username"]}, {type: "br"},
|
||||||
{label: "password"}, {password: ["password"]}, {type: "br"},
|
{label: "password"}, {password: ["password"]}, {type: "br"},
|
||||||
{button: ["login", function(event) {
|
{button: ["login", function(event) {
|
||||||
|
if (!ui.username.value) {
|
||||||
|
ui.username.focus()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!ui.password.value) {
|
||||||
|
ui.password.focus()
|
||||||
|
return
|
||||||
|
}
|
||||||
form.Run([ui.username.value, ui.password.value], function(msg) {
|
form.Run([ui.username.value, ui.password.value], function(msg) {
|
||||||
if (msg.result && msg.result[0]) {
|
if (msg.result && msg.result[0]) {
|
||||||
pane.ShowDialog(1, 1)
|
pane.ShowDialog(1, 1)
|
||||||
ctx.Cookie("sessid", msg.result[0])
|
ctx.Cookie("sessid", msg.result[0])
|
||||||
page.header.State("user", ui.username.value)
|
location.reload()
|
||||||
page.river.Show()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
page.alert("用户或密码错误")
|
page.alert("用户或密码错误")
|
||||||
})
|
})
|
||||||
}]}
|
}]},
|
||||||
|
{button: ["scan", function(event) {
|
||||||
|
scan(event, function(text) {
|
||||||
|
alert(text)
|
||||||
|
})
|
||||||
|
}]},
|
||||||
|
{type: "br"},
|
||||||
|
{type: "img", data: {"src": "/chat/qrcode?text=hi"}}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
if (true||kit.isWeiXin) {
|
||||||
|
pane.Run(["weixin"], function(msg) {
|
||||||
|
// if (!ctx.Search("state")) {
|
||||||
|
// location.href = msg["auth2.0"][0]
|
||||||
|
// }
|
||||||
|
// return
|
||||||
|
kit.AppendChild(document.body, [{include: ["https://res.wx.qq.com/open/js/jweixin-1.4.0.js", function(event) {
|
||||||
|
kit.AppendChild(document.body, [{include: ["/static/librarys/weixin.js", function(event) {
|
||||||
|
wx.error(function(res){
|
||||||
|
})
|
||||||
|
wx.ready(function(){
|
||||||
|
wx.getNetworkType({success: function (res) {
|
||||||
|
}})
|
||||||
|
return
|
||||||
|
wx.getLocation({
|
||||||
|
success: function (res) {
|
||||||
|
page.footer.State("site", parseInt(res.latitude*10000)+","+parseInt(res.longitude*10000))
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
wx.config({
|
||||||
|
appId: msg.appid[0],
|
||||||
|
timestamp: msg.timestamp[0],
|
||||||
|
nonceStr: msg.nonce[0],
|
||||||
|
signature: msg.signature[0],
|
||||||
|
jsApiList: [
|
||||||
|
"scanQRCode",
|
||||||
|
"chooseImage",
|
||||||
|
"closeWindow",
|
||||||
|
"openAddress",
|
||||||
|
"getNetworkType",
|
||||||
|
"getLocation",
|
||||||
|
]
|
||||||
|
})
|
||||||
|
}]}])
|
||||||
|
}]}])
|
||||||
|
})
|
||||||
|
}
|
||||||
form.Run([], function(msg) {
|
form.Run([], function(msg) {
|
||||||
if (msg.result && msg.result[0]) {
|
if (msg.result && msg.result[0]) {
|
||||||
page.header.State("user", msg.result[0])
|
page.header.State("user", msg.nickname[0])
|
||||||
page.river.Show()
|
page.river.Show()
|
||||||
|
page.footer.State("ip", msg.remote_ip[0])
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
pane.ShowDialog(1, 1)
|
pane.ShowDialog(1, 1)
|
||||||
@ -193,7 +247,7 @@ var page = Page({
|
|||||||
},
|
},
|
||||||
initRiver: function(page, pane, form, output) {
|
initRiver: function(page, pane, form, output) {
|
||||||
pane.Show = function() {
|
pane.Show = function() {
|
||||||
output.Update([], "text", ["name", "count"], "key", true)
|
output.Update([], "text", ["name", "count"], "key", ctx.Search("river")||true, function(line, index, event) {})
|
||||||
}
|
}
|
||||||
pane.Action = {
|
pane.Action = {
|
||||||
"创建": function(event) {
|
"创建": function(event) {
|
||||||
@ -213,9 +267,10 @@ var page = Page({
|
|||||||
|
|
||||||
pane.Show = function() {
|
pane.Show = function() {
|
||||||
var cmds = ["brow", river, 0]
|
var cmds = ["brow", river, 0]
|
||||||
output.innerHTML = "", pane.Times(100, cmds, function(line, index, msg) {
|
output.innerHTML = "", pane.Times(1000, cmds, function(line, index, msg) {
|
||||||
output.Append("", line, ["text"], "index", fun)
|
output.Append("", line, ["text"], "index", fun)
|
||||||
cmds[2] = parseInt(line.index)+1
|
cmds[2] = parseInt(line.index)+1
|
||||||
|
page.footer.State("text", cmds[2])
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,7 +348,7 @@ var page = Page({
|
|||||||
|
|
||||||
output.Update([river, storm], "plugin", ["node", "name"], "index", false, function(line, index, event, args, cbs) {
|
output.Update([river, storm], "plugin", ["node", "name"], "index", false, function(line, index, event, args, cbs) {
|
||||||
event.shiftKey? page.target.Send("field", JSON.stringify({
|
event.shiftKey? page.target.Send("field", JSON.stringify({
|
||||||
name: line.name, view: line.view, init: line.init,
|
name: line.name, help: line.help, view: line.view, init: line.init,
|
||||||
node: line.node, group: line.group, index: line.index,
|
node: line.node, group: line.group, index: line.index,
|
||||||
inputs: line.inputs, args: args,
|
inputs: line.inputs, args: args,
|
||||||
})): form.Run([river, storm, index].concat(args), function(msg) {
|
})): form.Run([river, storm, index].concat(args), function(msg) {
|
||||||
@ -343,7 +398,7 @@ var page = Page({
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
pane.Show = function() {
|
pane.Show = function() {
|
||||||
output.Update([river], "text", ["key", "count"], "key", true)
|
output.Update([river], "text", ["key", "count"], "key", ctx.Search("storm")||true)
|
||||||
}
|
}
|
||||||
pane.Next = function() {
|
pane.Next = function() {
|
||||||
var next = output.querySelector("div.item.select").nextSibling
|
var next = output.querySelector("div.item.select").nextSibling
|
||||||
@ -490,13 +545,17 @@ var page = Page({
|
|||||||
output.Select(index), pane.which.set(line[which])
|
output.Select(index), pane.which.set(line[which])
|
||||||
typeof cb == "function" && cb(line, index, event, cmds, cbs)
|
typeof cb == "function" && cb(line, index, event, cmds, cbs)
|
||||||
})
|
})
|
||||||
list.push(ui.last), pane.scrollBy(0, pane.scrollHeight)
|
list.push(ui.last), pane.scrollBy(0, pane.scrollHeight+100)
|
||||||
return ui
|
return ui
|
||||||
}
|
}
|
||||||
output.Update = function(cmds, type, key, which, first, cb) {
|
output.Update = function(cmds, type, key, which, first, cb) {
|
||||||
output.Clear(), form.Runs(cmds, function(line, index, msg) {
|
output.Clear(), form.Runs(cmds, function(line, index, msg) {
|
||||||
var ui = output.Append(type, line, key, which, cb)
|
var ui = output.Append(type, line, key, which, cb)
|
||||||
|
if (typeof first == "string") {
|
||||||
|
(line.key == first || line.name == first) && ui.first.click()
|
||||||
|
} else {
|
||||||
first && index == 0 && ui.first.click()
|
first && index == 0 && ui.first.click()
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -519,9 +578,27 @@ var page = Page({
|
|||||||
})
|
})
|
||||||
|
|
||||||
page.onlayout(null, page.conf.layout)
|
page.onlayout(null, page.conf.layout)
|
||||||
page.footer.Order({"action": "", "text": ""}, ["action", "text"])
|
kit.isMobile && page.action.Action["最宽"]()
|
||||||
page.header.Order({"user": ""}, ["user"], function(event, item, value) {
|
|
||||||
page.confirm("logout?") && page.login.Exit()
|
page.footer.Order({"text": "", "ip": ""}, ["ip", "text"])
|
||||||
|
kit.isMobile && page.footer.Order({"text": "", "site": "", "ip": ""}, ["ip", "text", "site"])
|
||||||
|
page.header.Order({"user": "", "logout": "logout"}, ["logout", "user"], function(event, item, value) {
|
||||||
|
switch (item) {
|
||||||
|
case "title":
|
||||||
|
ctx.Search({"river": page.river.which.get(), "storm": page.storm.which.get()})
|
||||||
|
break
|
||||||
|
case "user":
|
||||||
|
var name = page.prompt("new name")
|
||||||
|
name && page.login.Run(["rename", name], function(msg) {
|
||||||
|
page.header.State("user", name)
|
||||||
})
|
})
|
||||||
|
break
|
||||||
|
case "logout":
|
||||||
|
page.confirm("logout?") && page.login.Exit()
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -55,7 +55,9 @@ function Page(page) {
|
|||||||
var text = line
|
var text = line
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case "icon":
|
case "icon":
|
||||||
result = [{view: ["item", "div"], list: [{type: "img", data: {src: line[key[0]]}}, {}]}]
|
result = [{view: ["item", "div"], list: [{img: [line[key[0]], function(event) {
|
||||||
|
event.target.scrollIntoView()
|
||||||
|
}]}]}]
|
||||||
break
|
break
|
||||||
|
|
||||||
case "text":
|
case "text":
|
||||||
@ -81,29 +83,32 @@ function Page(page) {
|
|||||||
|
|
||||||
case "plugin":
|
case "plugin":
|
||||||
var id = "plugin"+page.ID()
|
var id = "plugin"+page.ID()
|
||||||
result = [{view: [text.view, "fieldset"], data: {id: id}, list: [
|
result = [{name: "field", view: [text.view, "fieldset"], data: {id: id}, list: [
|
||||||
{text: [text.name, "legend"]},
|
{text: [text.name+"("+text.help+")", "legend"]},
|
||||||
{name: "option", view: ["option", "form"], data: {Run: cb}, list: [{type: "input", style: {"display": "none"}}]},
|
{name: "option", view: ["option", "form"], data: {Run: cb}, list: [{type: "input", style: {"display": "none"}}]},
|
||||||
{name: "output", view: ["output", "div"]},
|
{name: "output", view: ["output", "div"]},
|
||||||
{script: "Plugin("+id+","+text.inputs+","+"["+(text.args||"")+"]"+","+(text.init||"")+")"},
|
{script: "Plugin("+id+","+text.inputs+","+"[\""+(text.args||[]).join("\",\"")+"\"]"+","+(text.init||"")+")"},
|
||||||
]}]
|
]}]
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if (parent.DisplayUser) {
|
if (parent.DisplayUser) {
|
||||||
ui = kit.AppendChild(parent, [{view: ["item"], list:[
|
ui = kit.AppendChild(parent, [{view: ["item"], list:[
|
||||||
{view: ["user", "div", line.create_user]},
|
{view: ["user", "div", line.create_nick]},
|
||||||
{view: ["text"], list:result}
|
{view: ["text"], list:result}
|
||||||
]}])
|
]}])
|
||||||
} else {
|
} else {
|
||||||
ui = kit.AppendChild(parent, [{view: ["item"], list:result}])
|
ui = kit.AppendChild(parent, [{view: ["item"], list:result}])
|
||||||
}
|
}
|
||||||
|
|
||||||
ui.last.Meta = line
|
ui.field && (ui.field.Meta = text)
|
||||||
return ui
|
return ui
|
||||||
},
|
},
|
||||||
alert: function(text) {
|
alert: function(text) {
|
||||||
alert(text)
|
alert(text)
|
||||||
},
|
},
|
||||||
|
prompt: function(text) {
|
||||||
|
return prompt(text)
|
||||||
|
},
|
||||||
confirm: function(text) {
|
confirm: function(text) {
|
||||||
return confirm(text)
|
return confirm(text)
|
||||||
},
|
},
|
||||||
@ -225,7 +230,9 @@ function Page(page) {
|
|||||||
}
|
}
|
||||||
pane.Show = function() {
|
pane.Show = function() {
|
||||||
output.innerHTML = "", kit.AppendChild(output, [
|
output.innerHTML = "", kit.AppendChild(output, [
|
||||||
{"view": ["title", "div", "shycontext"]},
|
{"view": ["title", "div", "shycontext"], click: function(event) {
|
||||||
|
cb(event, "title", "shycontext")
|
||||||
|
}},
|
||||||
{"view": ["state"], list: list.map(function(item) {return {text: [state[item], "div"], click: function(event) {
|
{"view": ["state"], list: list.map(function(item) {return {text: [state[item], "div"], click: function(event) {
|
||||||
cb(event, item, state[item])
|
cb(event, item, state[item])
|
||||||
}}})},
|
}}})},
|
||||||
@ -342,7 +349,7 @@ function Page(page) {
|
|||||||
})
|
})
|
||||||
timer = setTimeout(loop, time)
|
timer = setTimeout(loop, time)
|
||||||
}
|
}
|
||||||
timer = setTimeout(loop, time)
|
time && (timer = setTimeout(loop, time))
|
||||||
}
|
}
|
||||||
form.onsubmit = function(event) {
|
form.onsubmit = function(event) {
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
@ -377,7 +384,7 @@ function Plugin(field, inputs, args, plugin) {
|
|||||||
var option = field.querySelector("form.option")
|
var option = field.querySelector("form.option")
|
||||||
var output = field.querySelector("div.output")
|
var output = field.querySelector("div.output")
|
||||||
|
|
||||||
function run(event) {
|
option.Runs = function(event) {
|
||||||
var args = []
|
var args = []
|
||||||
option.querySelectorAll("input").forEach(function(item, index){
|
option.querySelectorAll("input").forEach(function(item, index){
|
||||||
item.type == "text" && args.push(item.value)
|
item.type == "text" && args.push(item.value)
|
||||||
@ -390,14 +397,14 @@ function Plugin(field, inputs, args, plugin) {
|
|||||||
})(msg)
|
})(msg)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
field.onclick = function(event) {
|
field.onclick = function(event) {
|
||||||
page.plugin = field
|
page.plugin = field
|
||||||
page.footer.State("action", field.id)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var ui = kit.AppendChild(option, inputs.map(function(item, index, inputs) {
|
var ui = kit.AppendChild(option, inputs.map(function(item, index, inputs) {
|
||||||
item.type == "button"? item.onclick = function(event) {
|
item.type == "button"? item.onclick = function(event) {
|
||||||
plugin[item.click]? plugin[item.click](event, item, option, field): run(event)
|
plugin[item.click]? plugin[item.click](event, item, option, field): option.Runs(event)
|
||||||
|
|
||||||
}: (item.onkeyup = function(event) {
|
}: (item.onkeyup = function(event) {
|
||||||
page.oninput(event, function(event) {
|
page.oninput(event, function(event) {
|
||||||
@ -430,7 +437,7 @@ function Plugin(field, inputs, args, plugin) {
|
|||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
event.key == "Enter" && (index == inputs.length-1? run(event): event.target.parentNode.nextSibling.childNodes[1].focus())
|
event.key == "Enter" && (index == inputs.length-1? option.Runs(event): event.target.parentNode.nextSibling.childNodes[1].focus())
|
||||||
}, field.Select = function() {
|
}, field.Select = function() {
|
||||||
ui.last.childNodes[1].focus()
|
ui.last.childNodes[1].focus()
|
||||||
})
|
})
|
||||||
@ -442,6 +449,6 @@ function Plugin(field, inputs, args, plugin) {
|
|||||||
show: function() {},
|
show: function() {},
|
||||||
init: function() {},
|
init: function() {},
|
||||||
}
|
}
|
||||||
plugin.init(page, page.action, field, option, output)
|
plugin.init(page, page.action, field, option, output, ui)
|
||||||
page[field.id] = plugin
|
page[field.id] = plugin
|
||||||
}
|
}
|
||||||
|
9
usr/librarys/plugin/initQRCode.js
Normal file
9
usr/librarys/plugin/initQRCode.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
init: function(page, pane, plug, form, output, ui) {
|
||||||
|
form.Runs = function(event) {
|
||||||
|
var url = "/chat/?componet_group=index&componet_name=login&cmds=qrcode&cmds="+ui.content.value
|
||||||
|
output.innerHTML = "", kit.AppendChild(output, [{img: [url]}])
|
||||||
|
event.ctrlKey? page.target.Send("icon", url): form.Run(event, [ui.content.value])
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
@ -1,5 +1,8 @@
|
|||||||
kit = toolkit = {
|
kit = toolkit = {
|
||||||
isMobile: navigator.userAgent.indexOf("Mobile") > -1,
|
isMobile: navigator.userAgent.indexOf("Mobile") > -1,
|
||||||
|
isWeiXin: navigator.userAgent.indexOf("MicroMessenger") > -1,
|
||||||
|
isMacOSX: navigator.userAgent.indexOf("Mac OS X") > -1,
|
||||||
|
isIPhone: navigator.userAgent.indexOf("iPhone") > -1,
|
||||||
isSpace: function(c) {
|
isSpace: function(c) {
|
||||||
return c == " " || c == "Enter"
|
return c == " " || c == "Enter"
|
||||||
},
|
},
|
||||||
@ -156,19 +159,16 @@ kit = toolkit = {
|
|||||||
return elm
|
return elm
|
||||||
}
|
}
|
||||||
|
|
||||||
// name
|
// 基本属性: name value inner style
|
||||||
// value
|
|
||||||
// inner
|
|
||||||
// style
|
|
||||||
// dataset
|
|
||||||
// click
|
|
||||||
//
|
//
|
||||||
// button input label
|
// dataset click
|
||||||
// 树状结构: tree, fork, leaf
|
// button input label img
|
||||||
// 普通视图: view, text, code
|
//
|
||||||
|
// 树状结构: tree fork leaf
|
||||||
|
// 普通视图: view text code
|
||||||
// 加载文件: include require styles
|
// 加载文件: include require styles
|
||||||
//
|
//
|
||||||
// 基本结构: type, data, list
|
// 基本结构: type data list
|
||||||
|
|
||||||
var kit = this
|
var kit = this
|
||||||
|
|
||||||
@ -229,6 +229,11 @@ kit = toolkit = {
|
|||||||
child.type = "label"
|
child.type = "label"
|
||||||
child.data["innerText"] = child.label
|
child.data["innerText"] = child.label
|
||||||
|
|
||||||
|
} else if (child.img) {
|
||||||
|
child.type = "img"
|
||||||
|
child.data["src"] = child.img[0]
|
||||||
|
child.img.length > 1 && (child.data["onload"] = child.img[1])
|
||||||
|
|
||||||
} else if (child.tree) {
|
} else if (child.tree) {
|
||||||
child.type = "ul"
|
child.type = "ul"
|
||||||
child.list = child.tree
|
child.list = child.tree
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
function scan(event) {
|
function scan(event, cb) {
|
||||||
alert("begin scan")
|
|
||||||
wx.scanQRCode({
|
wx.scanQRCode({
|
||||||
needResult: 0,
|
needResult: 1,
|
||||||
scanType: ["qrCode", "barCode"],
|
scanType: ["qrCode", "barCode"],
|
||||||
desc: "what",
|
desc: "what",
|
||||||
success: function(res) {
|
success: function(res) {
|
||||||
alert(res.resultStr)
|
cb(res.resultStr)
|
||||||
},
|
},
|
||||||
fail: function(res) {
|
fail: function(res) {
|
||||||
alert(res.errMsg)
|
alert(res.errMsg)
|
Loading…
x
Reference in New Issue
Block a user