diff --git a/.gitignore b/.gitignore index 0bbbab53..7b28e44f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ cache.js cache.css .DS_Store *.swp +*.swo diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index f434fe55..b8c74f5c 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -1,253 +1,155 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can.ui = can.page.Appends(can, can._target, [ - {view: ["project", "table"], style: {display: can.user.Searchs(can, "project")||"none"}}, + {view: ["project", "table"]}, {view: ["content", "table"]}, {view: ["profile", "table"]}, {view: ["display", "pre"]}, ]) - can.onimport[can.Option("scale")](can, msg) typeof cb == "function" && cb() - - can.onaction.view({}, can, "view", can.user.Searchs(can, "view")||"text") - can.page.Select(can, can.ui.content, "div.item.id"+can.user.Searchs(can, "id"), function(item) { - item.click() - }), can.page.Modify(can, can._action, {style: {display: "none"}}) + can.onimport[can.Option("scale")](can, msg) + can.page.Modify(can, can._action, {style: {display: "none"}}) }, - _stat: function(can, msg) { - var stat = { - l1: 0, l2: 0, l3: 0, l4: 0, l5: 0, - prepare: 0, process: 0, cancel: 0, finish: 0, - s1: 0, s2: 0, s3: 0, s4: 0, s5: 0, - count: 0, - }; msg.Table(function(value) { - stat["l"+(value.level||"3")]++ - stat["s"+(value.score||"3")]++ - stat[value.status]++ - stat.count++ + _show: function(can, msg, head, list, key, set, get) { + var begin_time = new Date(can.base.Time(can.Option("begin_time"))) + var hash = {}; msg.Table(function(value, index) { + var k = key(new Date(value.begin_time)); hash[k] = (hash[k]||[]).concat([value]) + can.Status("count", index+1) }) - can.Status("count", stat.process+"/"+stat.count) - can.page.Append(can, can.ui.project, [ {th: ["key", "value"]} ]) - can.core.List(["1", "2", "3", "4", "5"], function(item) { - stat["l"+item] > 0 && can.page.Append(can, can.ui.project, [ - {td: ["level-"+item, stat["l"+item]], onclick: function(event) { - can.onaction._filter(event, can, "level", "l"+item) - }} - ]) - }) - can.core.List(["prepare", "process", "cancel", "finish"], function(item) { - can.page.Append(can, can.ui.project, [{td: [item, stat[item]], onclick: function(event) { - can.onaction._filter(event, can, "status", item) - } }]) - }) - can.core.List(["1", "2", "3", "4", "5"], function(item) { - stat["s"+item] > 0 && can.page.Append(can, can.ui.project, [ - {td: ["score-"+item, stat["s"+item]], onclick: function(event) { - can.onaction._filter(event, can, "score", "s"+item) - }} - ]) - }) + var table = can.page.Append(can, can.ui.content, [{type: "table", list: + can.core.List(list, function(hour, row) { + if (row == 0) { return {type: "tr", list: can.core.List(head, function(week) { return {text: [week, "th"]} })} } + return {type: "tr", list: can.core.List(head, function(week, col) { + if (col == 0) { return {text: [hour, "td"]} } + return can.onimport._task(can, msg, set(begin_time, col, row), get(begin_time, col, row, hash)) + })} + }) + }]).table }, _task: function(can, msg, time, list, view) { return {text: ["", "td"], - ondragover: function(event) { event.preventDefault() - can.page.Select(can, can.ui.content, "td", function(item) { - can.page.ClassList.del(can, item, "over") - }), can.page.ClassList.add(can, event.target, "over") - }, - ondrop: function(event) { event.preventDefault() + ondrop: function(event) { can.drop(event, event.target, time) + event.preventDefault() }, - ondblclick: function(event) { - can.onaction.insertTask(event, can, can.base.Time(new Date(time))) + ondragover: function(event) { + can.page.Select(can, can.ui.content, "td", function(item) { can.page.ClassList.del(can, item, "over") }) + can.page.ClassList.add(can, event.target, "over") + event.preventDefault() + }, + ondblclick: function(event) { var now = can.base.Time() + can.onaction.insertTask(event, can, can.base.Time(new Date(time+now.slice(time.length)))) }, list: can.core.List(list, function(task) { return typeof task == "string"? {view: ["date", "div", task]}: - {view: [can.onexport.style(can, task), "div", can.onexport[can.Action("view")||view||"name"](can, task)], - draggable: true, title: can.onexport.title(can, task), - ondragstart: function(event) { var target = event.target; can.drop = function(event, td, time) { td.append(target) - can.onaction.modifyTask(event, can, task, "begin_time", time, task.begin_time) + {view: [can.onexport.style(can, task), "div", can.onexport[view||can.Action("view")||"text"](can, task)], + draggable: time != undefined, ondragstart: function(event) { var target = event.target; can.drop = function(event, td, time) { + can.onaction.modifyTask(event, can, task, "begin_time", time+task.begin_time.slice(time.length), task.begin_time) + can.run() } }, - onclick: function(event) { - can.onimport._profile(can, msg, task) - }, - ondblclick: function(event) { - can.onaction.pluginTask(event, can, task) - }, - oncontextmenu: function(event) { var target = event.target - can.user.carte(can, can.ondetail, can.ondetail.list, function(event, item) { - can.onaction.modifyTask(event, can, task, "status", item) - }) - }, - _init: function(target) { - can.task || target.click() - // can._option._task && can._option._task.id == task.id && target.click() - }, + onclick: function(event) { can.onimport._profile(can, msg, task) }, + _init: function(target) { can.task || target.click() }, + title: can.onexport.title(can, task), } }), } }, - _profile: function(can, msg, task) { can.ui.profile.innerHTML = "" - can.page.Append(can, can.ui.profile, [{th: ["key", "value"]}]) - task.extra && can.core.Item(can.base.Obj(task.extra), function(key, value) { - task["extra."+key] = value - }) && delete(task.extra) + _profile: function(can, msg, task) { + task.extra && can.core.Item(can.base.Obj(task.extra), function(key, value) { task["extra."+key] = value }) && delete(task.extra) can.task && can.Cache(can.task.id, can.ui.display, can.task.id) - can._option._task = can.task = task, can.Status(task) - - if (!can.Cache(task.id, can.ui.display)) { - can.onappend.plugin(can, {height: can.Conf("height"), width: can.Conf("width"), index: task["extra.ctx"]+"."+task["extra.cmd"], args: task["extra.arg"]}, function(sub) { - sub.run = function(event, cmds, cb, silent) { - can.run(event, ["action", "command", "run", task["extra.ctx"]+"."+task["extra.cmd"]].concat(cmds), function(msg) { - typeof cb == "function" && cb(msg) - }, true) - } - }, can.ui.display) - } + can.Status(can.task = task); can.Cache(task.id, can.ui.display) || task["extra.cmd"] && can.onappend.plugin(can, { + height: can.Conf("height"), width: can.Conf("width"), index: task["extra.ctx"]+"."+task["extra.cmd"], args: task["extra.arg"], + }, function(sub) { + sub.run = function(event, cmds, cb, silent) { + var msg = can.request(event); can.core.Item(can.task, function(key, value) { + msg.Option("task."+key, value) + }) + can.run(event, ["action", "command", "run", task["extra.ctx"]+"."+task["extra.cmd"]].concat(cmds), function(msg) { + typeof cb == "function" && cb(msg) + }, true) + } + }, can.ui.display) + can.page.Appends(can, can.ui.profile, [{th: ["key", "value"]}]) can.core.Item(task, function(key, value) { can.page.Append(can, can.ui.profile, [{td: [key, value], - onclick: function(event) { - if (event.target.type == "button") { var name = event.target.name - // 交互回调 - var feature = can.sup.Conf("feature") - var input = feature && feature[name]; if (input) { - var msg = can.request(event); can.core.Item(can.task, msg.Option) - return can.sup.onaction.input(event, can.sup, name, function(msg) { - // can.run({}) - }) - } + onclick: function(event) { if (event.target.type == "button") { var name = event.target.name + var cb = can.onaction[name]; if (typeof cb == "function") { return cb(event, can, name) } - var cb = can.onaction[name]; - if (typeof cb == "function") { - cb(event, can, name) - } else { - var msg = can.request(event); can.core.Item(can.task, msg.Option) - can.run(event, ["action", name], function(msg) { - can.run({}) - }, true) - } - } - }, + var msg = can.request(event); can.core.Item(can.task, msg.Option) + can.sup.onaction.input(event, can.sup, name, function(msg) { can.run({}) }) + } }, ondblclick: function(event) { can.onmotion.modify(can, event.target, function(ev, value, old) { can.onaction.modifyTask(event, can, task, key, value) }) }, - oncontextmenu: function(event) { var target = event.target - can.user.carte(can, can.ondetail, ["编辑"].concat(can.ondetail.list), function(event, item, meta) { - switch (item) { - case "编辑": - can.onmotion.modify(can, target, function(ev, value, old) { - can.onaction.modifyTask(event, can, task, key, value) - }) - break - default: - can.onaction.modifyTask(event, can, task, "status", item) - } - }) - }, }]) }) }, - day: function(can, msg) { var begin_time = new Date(can.base.Time(can.Option("begin_time"))) - function key(time) { return time.getHours() } - var hash = {}; msg.Table(function(value) { - var k = key(new Date(value.begin_time)); hash[k] = (hash[k]||[]).concat([value]) - }) - + day: function(can, msg) { var head = ["hour", "task"] - var list = [0]; for (var i = 7; i < 23; i++) { list.push(can.base.Number(i, 2)) } + var list = [0]; for (var i = 0; i < 24; i++) { list.push(can.base.Number(i, 2)) } + function key(time) { return can.base.Number(time.getHours(), 2) } - function set(hour) { return can.base.Time(can.base.TimeAdd(begin_time, hour/24)) } - var table = can.page.Append(can, can.ui.content, [{type: "table", list: - can.core.List(list, function(hour, row) { - if (row == 0) { return {type: "tr", list: can.core.List(head, function(head) { return {text: [head, "th"]} })} } - return {type: "tr", list: [{text: [can.base.Number(hour), "td"]}, can.onimport._task(can, msg, set(hour), hash[hour], "text")]} - }) - }]).table + function set(begin_time, col, row) { return can.base.Time(begin_time, "%y-%m-%d ")+list[row] } + function get(begin_time, col, row, hash) { return hash[list[row]] } + can.onimport._show(can, msg, head, list, key, set, get) }, - week: function(can, msg) { var begin_time = new Date(can.base.Time(can.Option("begin_time"))) + week: function(can, msg) { + var head = ["hour"].concat(["周日", "周一", "周二", "周三", "周四", "周五", "周六"]) + var list = [0]; for (var i = 0; i < 24; i++) { list.push(can.base.Number(i, 2)) } function key(time) { return time.getDay()+" "+can.base.Number(time.getHours(), 2) } - var hash = {}; msg.Table(function(value) { - var k = key(new Date(value.begin_time)); hash[k] = (hash[k]||[]).concat([value]) - }) - var head = ["hour"].concat(["周日", "周一", "周二", "周三", "周四", "周五", "周六"]); - var list = [0]; for (var i = 7; i < 24; i++) { list.push(can.base.Number(i, 2)) } - - function set(week, hour) { return can.base.Time(can.base.TimeAdd(begin_time, week-begin_time.getDay()+hour/24)) } - var table = can.page.Append(can, can.ui.content, [{type: "table", list: - can.core.List(list, function(hour, row) { - if (row == 0) { return {type: "tr", list: can.core.List(head, function(head) { return {text: [head, "th"]} })} } - return {type: "tr", list: can.core.List(head, function(head, index) { - if (index == 0) { return {text: [hour, "td"]} } - return can.onimport._task(can, msg, set(index-1, hour), hash[index-1+" "+hour]) - })} - }) - }]).table + function set(begin_time, col, row) { return can.base.Time(can.base.TimeAdd(begin_time, -begin_time.getDay()+col-1), "%y-%m-%d ")+list[row] } + function get(begin_time, col, row, hash) { return hash[col-1+" "+list[row]] } + can.onimport._show(can, msg, head, list, key, set, get) }, - month: function(can, msg) { var begin_time = new Date(can.base.Time(can.Option("begin_time"))) - function key(time) { return can.base.Time(time, "%y-%m-%d") } - var hash = {}; msg.Table(function(value) { - var k = key(new Date(value.begin_time)); hash[k] = (hash[k]||[]).concat([value]) - }) - - var head = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"] + month: function(can, msg) { + var head = ["order"].concat(["周日", "周一", "周二", "周三", "周四", "周五", "周六"]) var list = [0]; for (var i = 1; i < 6; i++) { list.push(i) } + function key(time) { return can.base.Time(time, "%y-%m-%d") } - var begin = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1)) - var last = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1)-begin.getDay()) - - var table = can.page.Append(can, can.ui.content, [{type: "table", list: - can.core.List(list, function(date, row) { - if (row == 0) { return {type: "tr", list: can.core.List(head, function(head) { return {text: [head, "th"]} })} } - return {type: "tr", list: can.core.List(head, function(head, col) { - var day = can.base.TimeAdd(last, (row-1)*7+col+1) - var list = [day.getDate()+""].concat(hash[key(day)]||[]) - return can.onimport._task(can, msg, key(day)+can.base.Time(null, " %H:%M:%S"), list) - })} - }) - }]).table + function set(begin_time, col, row) { + var begin = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1)) + var last = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1)-begin.getDay()) + var day = can.base.TimeAdd(last, (row-1)*7+col) + return key(day) + } + function get(begin_time, col, row, hash) { + var begin = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1)) + var last = can.base.TimeAdd(begin_time, -(begin_time.getDate()-1)-begin.getDay()) + var day = can.base.TimeAdd(last, (row-1)*7+col) + return [day.getDate()+""].concat(hash[key(day)]||[]) + } + can.onimport._show(can, msg, head, list, key, set, get) }, - year: function(can, msg) { var begin_time = new Date(can.base.Time(can.Option("begin_time"))) - function key(time) { return can.base.Time(time, "%y-%m ")+time.getDay() } - var hash = {}; msg.Table(function(value) { - var k = key(new Date(value.begin_time)); hash[k] = (hash[k]||[]).concat([value]) - }) - + year: function(can, msg) { var head = ["month"].concat(["周日", "周一", "周二", "周三", "周四", "周五", "周六"]); var list = [0]; for (var i = 1; i < 13; i++) { list.push(i) } + function key(time) { return can.base.Time(time, "%y-%m ")+time.getDay() } - function set(month, weekday) { return begin_time.getFullYear()+"-"+can.base.Number(month, 2)+" "+weekday } - var table = can.page.Append(can, can.ui.content, [{type: "table", list: - can.core.List(list, function(date, row) { - if (row == 0) { return {type: "tr", list: can.core.List(head, function(head) { return {text: [head, "th"]} })} } - return {type: "tr", list: can.core.List(head, function(head, col) { - if (col == 0) { return {text: [row+"", "td"]} } - return can.onimport._task(can, msg, set(row, col-1)+can.base.Time(begin_time, "-%d %H:%M:%S"), hash[set(row, col-1)], "text") - })} - }) - }]).table + function set(begin_time, col, row) { + return begin_time.getFullYear()+"-"+can.base.Number(list[row], 2) + } + function get(begin_time, col, row, hash) { + return hash[begin_time.getFullYear()+"-"+can.base.Number(row, 2)+" "+(col-1)] + } + can.onimport._show(can, msg, head, list, key, set, get) }, - long: function(can, msg) { var begin_time = new Date(can.base.Time(can.Option("begin_time"))) - function key(time) { return can.base.Time(time, "%y-%m") } - var hash = {}; msg.Table(function(value) { - var k = key(new Date(value.begin_time)); hash[k] = (hash[k]||[]).concat([value]) - }) + long: function(can, msg) { + var begin_time = new Date(can.base.Time(can.Option("begin_time"))) + var begin = begin_time.getFullYear() - 5 - var head = ["month"]; for (var i = -5; i < 5; i++) { head.push(begin_time.getFullYear()+i) } + var head = ["month"]; for (var i = 0; i < 10; i++) { head.push(begin+i) } var list = [0]; for (var i = 1; i < 13; i++) { list.push(i) } + function key(time) { return can.base.Time(time, "%y-%m") } - function set(month) { return begin_time.getFullYear()+"-"+can.base.Number(month, 2) } - var table = can.page.Append(can, can.ui.content, [{type: "table", list: - can.core.List(list, function(date, row) { - if (row == 0) { return {type: "tr", list: can.core.List(head, function(head) { return {text: [head, "th"]} })} } - return {type: "tr", list: can.core.List(head, function(head, col) { - if (col == 0) { return {text: [row+"", "td"]} } - var key = head+"-"+can.base.Number(row, 2) - return can.onimport._task(can, msg, key+can.base.Time(begin_time, "-%d %H:%M:%S"), hash[key]) - })} - }) - }]).table + function set(begin_time, col, row) { + return begin+col-1+"-"+can.base.Number(row, 2) + } + function get(begin_time, col, row, hash) { + return hash[begin+col-1+"-"+can.base.Number(row, 2)] + } + can.onimport._show(can, msg, head, list, key, set, get) }, }, ["/plugin/local/team/plan.css"]) Volcanos("onaction", {help: "组件交互", list: [ @@ -259,18 +161,11 @@ Volcanos("onaction", {help: "组件交互", list: [ insertTask: function(event, can, time) { can.user.input(event, can, can.Conf("feature")["insert"], function(event, button, data, list) { var args = ["action", "insert"]; can.core.Item(data, function(key, value) { - if (key == "begin_time") { - value = value || time - } - if (key == "close_time") { - value = value || time - } + if (key == "begin_time") { value = value || time } + if (key == "close_time") { value = value || time } key && value && args.push(key, value) }) - can.run(event, args, function(msg) { - can.user.toast(can, "添加成功") - can.run({}) - }, true) + can.run(event, args, function(msg) { can.run({}) }, true) return true }) }, @@ -279,14 +174,6 @@ Volcanos("onaction", {help: "组件交互", list: [ can.run(event, ["action", "modify", key, value, task[key]], function(msg) { task[key] = value, can.onimport._profile(can, can._msg, task) can.user.toast(can, "修改成功") - can.run({}) - }, true) - }, - pluginTask: function(event, can, task, key) { - var msg = can.request(event); msg.Option(task) - can.run(event, ["action", "plugin", task.zone, task.type], function(msg) { can.ui.display.innerHTML = "" - can.onappend.table(can, can.ui.display, "table", msg) - can.onappend.board(can, can.ui.display, "board", msg) }, true) }, @@ -312,98 +199,14 @@ Volcanos("onaction", {help: "组件交互", list: [ level: function(event, can, key, value) { can.onaction._filter(event, can, key, value) }, status: function(event, can, key, value) { can.onaction._filter(event, can, key, value) }, score: function(event, can, key, value) { can.onaction._filter(event, can, key, value) }, - view: function(event, can, key, value) { can.ui.content.innerHTML = "" - can.Action(key, value), can.onimport[can.Option("scale")](can, can._msg) - }, - - "统计": function(event, can, key) { - can.page.Modify(can, can.ui.project, {style: {display: can.ui.project.style.display=="none"? "table": "none"}}) - can.onimport._stat(can, msg) - }, - "详情": function(event, can, key) { - can.page.Modify(can, can.ui.profile, {style: {display: can.ui.profile.style.display=="none"? "table": "none"}}) - }, - "启动": function(event, can, key) { - can.onaction.modifyTask(event, can, can.task, "status", "process", can.task.status) - }, - "筛选": function(event, can, key) { - can.page.Modify(can, can._action, {style: {display: can._action.style.display=="none"? "block": "none"}}) - }, - "运行": function(event, can, key) { - can.onaction.pluginTask(event, can, can.task) - }, - "插件": function(event, can, key) { - can.task["extra.cmds"] || can.user.input(event, can, ["extra.cmds", "extra.args"], function(event, button, data, list) { - var msg = can.request(event) - can.core.Item(can.task, msg.Option) - can.run(event, ["action", "modify", "extra.cmds", list[0]], function(msg) { - var msg = can.request({}) - can.core.Item(can.task, msg.Option) - can.run(msg._event, ["action", "modify", "extra.args", list[1]], function(msg) { - can.run({}) - }, true) - }, true) - }) - can.task["extra.cmds"] && can.run(event, ["action", "command", can.task["extra.cmds"]], function(msg) { - msg.Table(function(item) { - var feature = can.base.Obj(item.meta) - feature.width = 400 - feature.height = 400 - var plugin = can.onappend._init(can, {name: item.name, help: item.help, inputs: can.base.Obj(item.list, [ - {type: "text", name: "path", value: "hi.svg"}, - {type: "button", name: "查看", value: "auto"}, - ]), index: can.task["extra.cmds"], args: can.base.Obj(can.task["extra.args"]), feature: feature}, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) { - sub.run = function(event, cmds, cb, silent) { - can.run(event, ["action", "command", can.task["extra.cmds"]].concat(cmds), function(msg) { - typeof cb == "function" && cb(msg) - }, true) - } - - can.page.Modify(can, sub._target, {style: {position: "fixed", - left: event.x-(event.x>400? 400: 100), - top: event.y-(event.y>400? 400: 0), - }}) - can.Timer(100, function() { - can.page.Append(can, sub._option, [{view: "item button", list: [{button: ["关闭", function(event) { - can.page.Remove(can, sub._target) - }] }] }]) - }) - }, document.body) - }) - }, true) - }, - "开始": function(event, can, key) { - can.onaction.modifyTask(event, can, can.task, "status", "process", can.task.status) - }, - "完成": function(event, can, key) { - can.onaction.modifyTask(event, can, can.task, "status", "finish", can.task.status) - }, + view: function(event, can, key, value) { can.Action(key, value), can.onimport[can.Option("scale")](can, can._msg) }, }) Volcanos("onexport", {help: "导出数据", list: ["count", "begin_time", "zone", "id", "type", "name"], - name: function(can, task) { - return task.name - }, - text: function(can, task) { - return task.name+": "+(task.text||"") - }, - level: function(can, task) { - return "l-"+(task.level||3)+": "+(task.name||"") - }, - score: function(can, task) { - return "s-"+(task.level||3)+": "+(task.name||"") - }, - title: function(can, task) { - return task.zone+": "+(task.type||"") - }, - style: function(can, task) { - return ["item", task.status, "id"+task.id, "l"+(task.level||""), "s"+(task.score||"")].join(" ") - }, - - key: function(can, msg) { - msg.Option("project", can.ui.project.style.display) - msg.Option("profile", can.ui.profile.style.display) - msg.Option("view", can.Action("view")) - msg.Option("id", can.Status("id")) - }, + name: function(can, task) { return task.name }, + text: function(can, task) { return task.name+": "+(task.text||"") }, + level: function(can, task) { return "l-"+(task.level||3)+": "+(task.name||"") }, + score: function(can, task) { return "s-"+(task.level||3)+": "+(task.name||"") }, + title: function(can, task) { return task.zone+": "+(task.type||"") }, + style: function(can, task) { return ["item", task.status, "id"+task.id, "l"+(task.level||""), "s"+(task.score||"")].join(" ") }, }) diff --git a/plugin/state.js b/plugin/state.js index 3a751256..fb687aa6 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -11,14 +11,9 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, }) var sub = can._outputs && can._outputs[can._outputs.length-1] || can - - sub.run(event, args, function(msg) { - typeof cb == "function" && cb(msg) - }) + sub.run(event, args, function(msg) { typeof cb == "function" && cb(msg) }) return true - }): can.run(event, ["action", name], function(msg) { - typeof cb == "function" && cb(msg) - }) + }): can.run(event, ["action", name], function(msg) { typeof cb == "function" && cb(msg) }) }, change: function(event, can, name, value, cb) { can.page.Select(can, can._option, "input.args", function(input) { if (input.name == name) { var data = input.dataset || {}