From b6453d36d57368adc235a3ca2eac471d57044037 Mon Sep 17 00:00:00 2001 From: harveyshao Date: Wed, 28 Jul 2021 17:45:39 +0800 Subject: [PATCH] opt chat --- panel/river.js | 107 +++++++++++++++++++++++++------------------------ proto.js | 42 +++++++++++++++++++ 2 files changed, 96 insertions(+), 53 deletions(-) diff --git a/panel/river.js b/panel/river.js index 21620ccf..4cb3166f 100644 --- a/panel/river.js +++ b/panel/river.js @@ -1,5 +1,5 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - if (msg.Option("sess.river") == "_share") { return can.onmotion.hidden(can) } + if (msg.Option(ice.MSG_RIVER) == "_share") { return can.onmotion.hidden(can) } can.onmotion.clear(can), can.river_list = {}, can.storm_list = {} can.onimport._main(can, msg), can.onimport._menu(can, msg) @@ -17,21 +17,21 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, if (can.user.isMobile) { can._main_river = "product", can._main_storm = "office" } if (can.user.isWeiXin) { can._main_river = "service", can._main_storm = "wx" } - can._main_river = can.user.Search(can, can._RIVER) || msg.Option("sess.river") || Volcanos.meta.args.river || can._main_river - can._main_storm = can.user.Search(can, can._STORM) || msg.Option("sess.storm") || Volcanos.meta.args.storm || can._main_storm - can._main_title = can.user.Search(can, can._TITLE) || msg.Option("sess.title") || Volcanos.meta.args.title || can.user.Search(can, "pod") || can._main_title + can._main_title = can.user.Search(can, chat.TITLE) || msg.Option(ice.MSG_TITLE) || Volcanos.meta.args.title || can.user.Search(can, cli.POD) || can._main_title + can._main_river = can.user.Search(can, chat.RIVER) || msg.Option(ice.MSG_RIVER) || Volcanos.meta.args.river || can._main_river + can._main_storm = can.user.Search(can, chat.STORM) || msg.Option(ice.MSG_STORM) || Volcanos.meta.args.storm || can._main_storm }, _menu: function(can, msg) { - can.search({}, ["Header.onimport.menu", can._RIVER, + can.search({}, ["Header.onimport.menu", chat.RIVER, ["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备", "创建空间"], !can.user.isMobile && ["访问", "内部系统", "访问应用", "访问工具", "访问用户", "访问设备", "工作任务"], ["共享", "共享群组", "共享应用", "共享工具", "共享主机"], ], function(event, item) { - can.core.CallFunc([can.ondetail, item], [event, can, item, can.Conf(can._RIVER), can.Conf(can._STORM)]) + can.core.CallFunc([can.ondetail, item], [event, can, item, can.Conf(chat.RIVER), can.Conf(chat.STORM)]) }) }, _river: function(can, meta, cb) { - return {text: [meta.name, "div", "item"], onclick: function(event) { + return {text: [meta.name, html.DIV, html.ITEM], onclick: function(event) { can.onaction.storm(event, can, meta.hash) }, onmouseenter: function(event) { @@ -43,7 +43,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }} }, _storm: function(can, meta, river) { - return {text: [meta.name, "div", "item"], onclick: function(event) { + return {text: [meta.name, html.DIV, html.ITEM], onclick: function(event) { can.onaction.action(event, can, river, meta.hash) can.user.title(can._main_title || meta.name) @@ -59,7 +59,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, can, msg, panel, cmds, cb) { cmds.length == 0 && can.core.Item(can.onengine.river, function(key, value) { msg.Push({hash: key, name: value.name}) // 群组列表 - }); if (cmds.length != 1 && cmds[1] != "tool") { return false } + }); if (cmds.length != 1 && cmds[1] != chat.TOOL) { return false } var river = can.onengine.river[cmds[0]]; if (!river) { return false } can.core.Item(river.storm, function(key, value) { @@ -70,14 +70,13 @@ Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, c Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, list, cb, target) { can.base.isFunc(cb) && cb() }, - _const: ["title", "river", "storm", "action"], _trans: {create: "创建", refresh: "刷新"}, onlogin: function(can, msg) { can.onappend._action(can, can.Conf("action")||can.onaction.list) can.run({}, [], function(msg) { can.onimport._init(can, msg, [], null, can._output) }) }, onsearch: function(can, msg, word) { - if (word[0] == "*" || word[0] == can._STORM) { can.onexport.storm(can, msg, word) } + if (word[0] == "*" || word[0] == chat.STORM) { can.onexport.storm(can, msg, word) } }, onaction_touch: function(can, msg) { can.onmotion.float.del(can, "carte") @@ -98,7 +97,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, can.onmotion.select(can, can._output, "div.item", can.river_list[river]) var list = can.sublist[river]; if (list) { return can.onmotion.Toggle(can, list) } - can.run({}, [river, "tool"], function(msg) { + can.run({}, [river, chat.TOOL], function(msg) { var select = 0; list = can.page.Append(can, can._output, [{view: "list", list: msg.Table(function(item, index) { river == can._main_river && item.hash == can._main_storm && (select = index) return can.onimport._storm(can, item, river) @@ -114,24 +113,24 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, can.onmotion.select(can, can._output, "div.list div.item", can.storm_list[can.core.Keys(river, storm)]) can.onengine.signal(can, "onstorm_select", can.request(event, { - river: can.Conf(can._RIVER, river), storm: can.Conf(can._STORM, storm), + river: can.Conf(chat.RIVER, river), storm: can.Conf(chat.STORM, storm), })) }, create: function(event, can) { can.user.trans(can, {"public": "公开群", "protected": "内部群", "private": "私有群"}) can.user.input(event, can, [ - {name: "type", values: ["public", "protected", "private"], _trans: "类型"}, - {name: "name", value: "hi", _trans: "群名"}, {type: "textarea", name: "text", value: "hello", _trans: "简介"}, + {name: "type", values: [chat.PUBLIC, chat.PROTECTED, chat.PRIVATE], _trans: "类型"}, + {name: "name", value: "hi", _trans: "群名"}, {type: html.TEXTAREA, name: "text", value: "hello", _trans: "简介"}, ], function(event, button, meta, list, args) { - can.run(event, [can._ACTION, "create"].concat(args), function(msg) { + can.run(event, [ctx.ACTION, mdb.CREATE].concat(args), function(msg) { can.user.Search(can, {river: msg.Result()}) }) }) }, refresh: function(event, can) { can.user.Search(can, { - river: can.Conf(can._RIVER), storm: can.Conf(can._STORM), + river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), topic: can.search(event, ["Header.onexport.topic"]), layout: can.search(event, ["Action.onexport.layout"]), }) @@ -144,19 +143,19 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 can.user.input(event, can, [ {name: "name", value: river, _trans: "标题"}, ], function(event, button, meta, list) { - can.user.share(can, can.request(event), [river, can._ACTION, "share", "type", can._RIVER, "name", meta.name]) + can.user.share(can, can.request(event), [river, ctx.ACTION, chat.SHARE, kit.MDB_TYPE, chat.RIVER, kit.MDB_NAME, meta.name]) }) }, "添加用户": function(event, can, button, river) { - can.user.select(event, can, "user", "usernick,username", function(item, next) { - can.run({}, [river, "user", can._ACTION, "insert", "username", item[0]], function(msg) { + can.user.select(event, can, chat.USER, "usernick,username", function(item, next) { + can.run({}, [river, chat.USER, ctx.ACTION, mdb.INSERT, aaa.USERNAME, item[0]], function(msg) { next() }) }) }, "添加设备": function(event, can, button, river) { - can.user.select(event, can, "space", "type,name,text", function(item, next) { - can.run({}, [river, "node", can._ACTION, "insert", "type", item[0], "name", item[1]], function(msg) { + can.user.select(event, can, web.SPACE, "type,name,text", function(item, next) { + can.run({}, [river, chat.NODE, ctx.ACTION, mdb.INSERT, kit.MDB_TYPE, item[0], kit.MDB_NAME, item[1]], function(msg) { next() }) }) @@ -164,24 +163,25 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 "添加应用": function(event, can, button, river) { can.user.trans(can, {"public": "公开应用", "protected": "群组应用", "private": "个人应用"}) can.user.input(event, can, [ - {name: "type", values: ["public", "protected", "private"], _trans: "类型"}, - {name: "name", value: "hi", _trans: "名称"}, {type: "textarea", name: "text", value: "hello", _trans: "简介"}, + {name: "type", values: [chat.PUBLIC, chat.PROTECTED, chat.PRIVATE], _trans: "类型"}, + {name: "name", value: "hi", _trans: "名称"}, {type: html.TEXTAREA, name: "text", value: "hello", _trans: "简介"}, ], function(event, button, meta, list, args) { - can.run({}, [river, "tool", can._ACTION, "create"].concat(args), function(msg) { + can.run({}, [river, chat.TOOL, ctx.ACTION, mdb.CREATE].concat(args), function(msg) { can.user.Search(can, {river: river, storm: msg.Result()}) }) }) }, "重命名群组": function(event, can, button, river) { - can.user.input(event, can, ["name"], function(event, button, meta, list) { + can.user.input(event, can, [kit.MDB_NAME], function(event, button, meta, list) { var msg = can.request(event, {hash: river}) - can.run(event, [can._ACTION, "modify", "name", meta.name], function(msg) { + can.run(event, [ctx.ACTION, mdb.MODIFY, kit.MDB_NAME, meta.name], function(msg) { can.user.Search(can, {river: river}) }) }) }, "删除群组": function(event, can, button, river) { - can.run(event, ["remove", "hash", river], function(msg) { + var msg = can.request(event, {hash: river}) + can.run(event, [mdb.REMOVE], function(msg) { can.user.Search(can, {}) }) }, @@ -191,14 +191,15 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 {name: "name", value: storm, _trans: "标题"}, ], function(event, button, meta, list) { var msg = can.request(event) - can.user.share(can, msg, [river, can._ACTION, "share", "type", can._STORM, "name", meta.name, - can._STORM, storm, can._RIVER, river, + can.user.share(can, msg, [river, ctx.ACTION, chat.SHARE, + kit.MDB_TYPE, chat.STORM, kit.MDB_NAME, meta.name, + chat.STORM, storm, chat.RIVER, river, ]) }) }, "添加工具": function(event, can, button, river, storm) { - can.user.select(event, can, "command", "context,command", function(item, next) { - can.run({}, [river, "tool", can._ACTION, "insert", "hash", storm].concat(["pod", "", "ctx", item[0], "cmd", item[1]]), function(msg) { + can.user.select(event, can, ctx.COMMAND, "context,command", function(item, next) { + can.run({}, [river, chat.TOOL, ctx.ACTION, mdb.INSERT, kit.MDB_HASH, storm].concat([cli.POD, "", cli.CTX, item[0], cli.CMD, item[1]]), function(msg) { next() }) }, function() { @@ -208,7 +209,7 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 "保存参数": function(event, can, button, river, storm) { can.search(event, ["Action.onexport.args"], function(item, next, index, array) { var msg = can.request({}, {hash: storm, id: item.dataset.id}) - can.run(msg._event, [river, "tool", can._ACTION, "modify", "arg", item.dataset.args], function(msg) { + can.run(msg._event, [river, chat.TOOL, ctx.ACTION, mdb.MODIFY, cli.ARG, item.dataset.args], function(msg) { can.user.toast(can, (index+1)+"/"+array.length, "保存参数", 10000, (index+1)/array.length) next() }) @@ -216,15 +217,15 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 }, "重命名应用": function(event, can, button, river, storm) { var msg = can.request(event, {hash: storm}) - can.user.input(event, can, ["name"], function(ev, button, meta, list, args) { - can.run(event, [river, "tool", can._ACTION, "modify"].concat(args), function(msg) { + can.user.input(event, can, [kit.MDB_NAME], function(ev, button, meta, list, args) { + can.run(event, [river, chat.TOOL, ctx.ACTION, mdb.MODIFY].concat(args), function(msg) { can.user.Search(can, {river: river, storm: storm}) }) }) }, "删除应用": function(event, can, button, river, storm) { var msg = can.request(event, {hash: storm}) - can.run(event, [river, "tool", can._ACTION, "remove"], function(msg) { + can.run(event, [river, chat.TOOL, ctx.ACTION, mdb.REMOVE], function(msg) { can.user.Search(can, {river: river}) }) }, @@ -234,52 +235,52 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 }, "访问应用": function(event, can, button, river, storm) { var msg = can.request(event, {sort: ","}) - can.user.select(event, can, can._STORM, "type,name,text") + can.user.select(event, can, chat.STORM, "type,name,text") }, "访问工具": function(event, can, button, river, storm) { var msg = can.request(event, {sort: ","}) - can.user.select(event, can, "plugin", "type,name,text") + can.user.select(event, can, mdb.PLUGIN, "type,name,text") }, "访问用户": function(event, can, button, river, storm) { - can.user.select(event, can, "user", "time,type,name,text") + can.user.select(event, can, chat.USER, "time,type,name,text") }, "访问设备": function(event, can, button, river, storm) { - can.user.select(event, can, "space", "time,type,name,text") + can.user.select(event, can, web.SPACE, "time,type,name,text") }, "工作任务": function(event, can, button, river, storm) { var msg = can.request(event, {index: "web.team.task"}) - can.user.select(event, can, "task", "time,zone,id,type,name,text") + can.user.select(event, can, team.TASK, "time,zone,id,type,name,text") }, "共享主机": function(event, can, button, river, storm) { - can.run(event, [can._ACTION, "invite"], function(msg) { + can.run(event, [ctx.ACTION, aaa.INVITE], function(msg) { can.user.toast(can, { title: "共享主机", duration: -1, width: -100, - content: msg.Result(), action: ["close"], + content: msg.Result(), action: [cli.CLOSE], }) }) }, "共享工具": function(event, can, button, river, storm) { - can.user.select(event, can, "plugin", "name,context,command,argument", function(item, next) { - can.user.share(can, can.request(event), [river, can._ACTION, "share", "type", "field", - can._RIVER, item[1], can._STORM, item[2], - "name", item[0], "text", item[3], + can.user.select(event, can, mdb.PLUGIN, "name,context,command,argument", function(item, next) { + can.user.share(can, can.request(event), [river, ctx.ACTION, chat.SHARE, kit.MDB_TYPE, chat.FIELD, + chat.RIVER, item[1], chat.STORM, item[2], + kit.MDB_NAME, item[0], kit.MDB_TEXT, item[3], ]) }) }, "创建空间": function(event, can, button, river, storm) { can.user.input(event, {__proto__: can, run: function(event, cmds, cb, silent) { - var msg = can.request(event, {action: "start"}) + var msg = can.request(event, {action: cli.START}) can.run(event, cmds, cb, silent) }}, [ {name: "name", value: "@key"}, {name: "repos", value: "@key"}, {name: "template", value: "@key"}, ], function(event, button, data, list, args) { - can.run(event, [can._ACTION, "start"].concat(args), function(msg) { - can.user.open(can.user.MergeURL(can, {pod: can.core.Keys(can.user.Search(can, "pod"), msg.Option("name"))})) - can.user.toast(can, can.user.MergeURL(can, {pod: msg.Option("name")})) + can.run(event, [ctx.ACTION, cli.START].concat(args), function(msg) { + can.user.open(can.user.MergeURL(can, {pod: can.core.Keys(can.user.Search(can, cli.POD), msg.Option(kit.MDB_NAME))})) + can.user.toast(can, can.user.MergeURL(can, {pod: msg.Option(kit.MDB_NAME)})) }) }) }, @@ -287,12 +288,12 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 Volcanos("onexport", {help: "导出数据", list: [], width: function(can) { return can._target.offsetWidth }, storm: function(can, msg, word) { - var fields = (msg.Option("fields")||"ctx,cmd,type,name,text").split(",") + var fields = (msg.Option(ice.MSG_FIELDS)||"ctx,cmd,type,name,text").split(",") can.core.Item(can.onengine.river, function(river, value) { can.core.Item(value.storm, function(storm, item) { if (word[1] != "" && word[1] != storm && word[1] != item.name) { return } - var data = {ctx: "web.chat", cmd: can._STORM, + var data = {ctx: "web.chat", cmd: chat.STORM, type: river, name: storm, text: shy("跳转", function(event) { can.onaction.action(event, can, river, storm) }), diff --git a/proto.js b/proto.js index abac8c04..d6d5ea86 100644 --- a/proto.js +++ b/proto.js @@ -4,10 +4,17 @@ const kit = { MDB_NAME: "name", MDB_TEXT: "text", MDB_LINK: "link", + + MDB_HASH: "hash", + MDB_LIST: "list", } const ice = { MSG_USERNAME: "user.name", MSG_USERNICK: "user.nick", + MSG_TITLE: "sess.title", + MSG_RIVER: "sess.river", + MSG_STORM: "sess.storm", + MSG_FIELDS: "fields", } const ctx = { @@ -18,6 +25,15 @@ const ctx = { } const cli = { RUN: "run", + POD: "pod", + CTX: "ctx", + CMD: "cmd", + ARG: "arg", + + OPEN: "open", + CLOSE: "close", + START: "start", + STOP: "stop", } const web = { SPACE: "space", @@ -30,9 +46,17 @@ const aaa = { LOGIN: "login", LOGOUT: "logout", + INVITE: "invite", } const mdb = { + CREATE: "create", + INSERT: "insert", MODIFY: "modify", + REMOVE: "remove", + PLUGIN: "plugin", + + HASH: "hash", + LIST: "list", } const nfs = { DIR: "dir", @@ -58,12 +82,22 @@ const wiki = { SHELL: "shell", } const chat = { + TITLE: "title", RIVER: "river", STORM: "storm", + FIELD: "field", AGENT: "agent", SHARE: "share", GRANT: "grant", + + PUBLIC: "public", + PROTECTED: "protected", + PRIVATE: "private", + + USER: "user", + TOOL: "tool", + NODE: "node", } const team = { TASK: "task", @@ -74,6 +108,14 @@ const mall = { SALARY: "salary", } +const html = { + DIV: "div", + IMG: "img", + TEXTAREA: "textarea", + + ITEM: "item", + LIST: "list", +} function shy(help, meta, list, cb) { var index = 0, args = arguments; function next(check) { if (index < args.length && (!check || check == typeof args[index])) {