翻譯|使用教程|編輯:顏馨|2023-05-16 10:45:42.770|閱讀 159 次
概述:本章講述如何用Node.js實(shí)現(xiàn)Gantt(下),歡迎查閱~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
DHTMLX Gantt是用于跨瀏覽器和跨平臺應(yīng)用程序的功能齊全的Gantt圖表??蓾M足項(xiàng)目管理應(yīng)用程序的大部分開發(fā)需求,具備完善的甘特圖圖表庫,功能強(qiáng)大,價(jià)格便宜,提供豐富而靈活的JavaScript API接口,與各種服務(wù)器端技術(shù)(PHP,ASP.NET,Java等)簡單集成,滿足多種定制開發(fā)需求。
DHTMLX JavaScript UI 庫所開發(fā)的 JavaScript 組件易于使用且功能豐富,非常適合任何領(lǐng)域和任何復(fù)雜性的解決方案,能夠節(jié)省創(chuàng)建和維護(hù)業(yè)務(wù)應(yīng)用程序的時(shí)間,提高生產(chǎn)力。
甘特圖控件交流群:764148812
客戶端甘特圖允許使用拖放對任務(wù)進(jìn)行重新排序。因此,如果您使用此功能,則必須將此訂單存儲在數(shù)據(jù)庫中。 您可以在此處查看常見說明。
現(xiàn)在讓我們將此功能添加到我們的應(yīng)用程序中。
在客戶端上啟用任務(wù)重新排序
首先,我們需要允許用戶在 UI 中更改任務(wù)順序。打開“索引”視圖并更新甘特圖的配置:
gantt.config.order_branch = true; gantt.config.order_branch_free = true; gantt.init("gantt_here");
現(xiàn)在,讓我們在后端反映這些更改。我們將訂單存儲在名為“sortorder”的列中, 更新后的gantt_tasks表聲明可能如下所示:
CREATE TABLE `gantt_tasks` ( `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `text` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `start_date` datetime NOT NULL, `duration` int(11) NOT NULL, `progress` float NOT NULL DEFAULT 0, `parent` int(11) NOT NULL, `sortorder` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
或者將列添加到已有的表中:
ALTER TABLE `gantt_tasks` ADD COLUMN `sortorder` int(11) NOT NULL;
之后,我們需要更新服務(wù)器.js文件:
1 、GET /data 必須返回按列排序的任務(wù):sortorder
app.get("/data", (req, res) => { Promise.all([ db.query("SELECT * FROM gantt_tasks ORDER BY sortorder ASC"), db.query("SELECT * FROM gantt_links") ]).then(results => { let tasks = results[0], links = results[1]; for (let i = 0; i < tasks.length; i++) { tasks[i].start_date = tasks[i].start_date.format("YYYY-MM-DD hh:mm:ss"); tasks[i].open = true; } res.send({ data: tasks, collections: { links: links } }); }).catch(error => { sendResponse(res, "error", null, error); }); });
2 、新添加的任務(wù)必須接收初始值:sortorder
app.post("/data/task", (req, res) => { // adds new task to database let task = getTask(req.body); db.query("SELECT MAX(sortorder) AS maxOrder FROM gantt_tasks") .then(result => { // assign max sort order to new task let orderIndex = (result[0].maxOrder || 0) + 1; return db.query("INSERT INTO gantt_tasks(text, start_date, duration," + "progress, parent, sortorder) VALUES (?,?,?,?,?,?)", [task.text, task.start_date, task.duration, task.progress, task.parent, orderIndex]); }) .then(result => { sendResponse(res, "inserted", result.insertId); }) .catch(error => { sendResponse(res, "error", null, error); }); });
3 、最后,當(dāng)用戶對任務(wù)重新排序時(shí),必須更新任務(wù)訂單:
// update task app.put("/data/task/:id", (req, res) => { let sid = req.params.id, target = req.body.target, task = getTask(req.body); Promise.all([ db.query("UPDATE gantt_tasks SET text = ?, start_date = ?," + "duration = ?, progress = ?, parent = ? WHERE id = ?", [task.text, task.start_date, task.duration, task.progress, task.parent, sid]), updateOrder(sid, target) ]) .then(result => { sendResponse(res, "updated"); }) .catch(error => { sendResponse(res, "error", null, error); }); }); function updateOrder(taskId, target) { let nextTask = false; let targetOrder; target = target || ""; if (target.startsWith("next:")) { target = target.substr("next:".length); nextTask = true; } return db.query("SELECT * FROM gantt_tasks WHERE id = ?", [target]) .then(result => { if (!result[0]) return Promise.resolve(); targetOrder = result[0].sortorder; if (nextTask) targetOrder++; return db.query("UPDATE gantt_tasks SET sortorder"+ " = sortorder + 1 WHERE sortorder >= ?", [targetOrder]) .then(result => { return db.query("UPDATE gantt_tasks SET sortorder = ? WHERE id = ?", [targetOrder, taskId]); }); }); }
您可以在 GitHub 上查看現(xiàn)成的演示。
甘特圖不提供任何方法來防止應(yīng)用程序受到各種威脅,例如SQL注入或XSS和CSRF攻擊。重要的是,確保應(yīng)用程序安全的責(zé)任在于實(shí)現(xiàn)后端的開發(fā)人員。閱讀相應(yīng)文章中的詳細(xì)信息。
如果您已完成上述步驟以實(shí)現(xiàn)甘特圖與 Node.js 的集成,但甘特圖未在頁面上呈現(xiàn)任務(wù)和鏈接,請查看排查后端集成問題一文。它描述了 找出問題根源的方法。
現(xiàn)在你有一個(gè)功能齊全的甘特圖。您可以在 GitHub 上查看完整代碼,克隆或下載它并將其用于您的項(xiàng)目。
DHTMLX Gantt享有超十年聲譽(yù),支持跨瀏覽器和跨平臺,性價(jià)比高,可滿足項(xiàng)目管理控件應(yīng)用的所有需求,是較為完善的甘特圖圖表庫
甘特圖控件交流群:764148812
歡迎進(jìn)群交流討論,獲取更多幫助請聯(lián)系
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn