首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

修改dhtmlxGantt以处理多个项目- Laravel5

在 Laravel 5 项目中集成和修改 dhtmlxGantt 以处理多个项目,可以按照以下步骤进行:

1. 安装 dhtmlxGantt

首先,你需要在你的 Laravel 项目中安装 dhtmlxGantt。你可以通过 npm 或者直接下载 dhtmlxGantt 的 JavaScript 和 CSS 文件并将其添加到你的项目中。

使用 npm 安装

代码语言:javascript
复制
npm install dhtmlx-gantt

或者直接下载并添加到项目中

下载 dhtmlxGantt 的 JavaScript 和 CSS 文件,并将其放置在 public 目录下,例如 public/jspublic/css

2. 创建数据库迁移和模型

你需要创建数据库迁移和模型来存储项目和任务数据。

创建项目迁移和模型

代码语言:javascript
复制
php artisan make:model Project -m

在生成的迁移文件中定义项目表结构:

代码语言:javascript
复制
// database/migrations/xxxx_xx_xx_create_projects_table.php
public function up()
{
    Schema::create('projects', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->timestamps();
    });
}

创建任务迁移和模型

代码语言:javascript
复制
php artisan make:model Task -m

在生成的迁移文件中定义任务表结构:

代码语言:javascript
复制
// database/migrations/xxxx_xx_xx_create_tasks_table.php
public function up()
{
    Schema::create('tasks', function (Blueprint $table) {
        $table->id();
        $table->unsignedBigInteger('project_id');
        $table->string('text');
        $table->dateTime('start_date');
        $table->integer('duration');
        $table->integer('progress');
        $table->timestamps();

        $table->foreign('project_id')->references('id')->on('projects')->onDelete('cascade');
    });
}

运行迁移:

代码语言:javascript
复制
php artisan migrate

3. 创建控制器和路由

创建控制器

代码语言:javascript
复制
php artisan make:controller GanttController

在控制器中添加方法来处理项目和任务的 CRUD 操作:

代码语言:javascript
复制
// app/Http/Controllers/GanttController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Project;
use App\Models\Task;

class GanttController extends Controller
{
    public function index()
    {
        $projects = Project::all();
        return view('gantt.index', compact('projects'));
    }

    public function loadTasks($projectId)
    {
        $tasks = Task::where('project_id', $projectId)->get();
        return response()->json($tasks);
    }

    public function storeTask(Request $request)
    {
        $task = Task::create($request->all());
        return response()->json($task);
    }

    public function updateTask(Request $request, $id)
    {
        $task = Task::findOrFail($id);
        $task->update($request->all());
        return response()->json($task);
    }

    public function deleteTask($id)
    {
        $task = Task::findOrFail($id);
        $task->delete();
        return response()->json(['status' => 'success']);
    }
}

添加路由

routes/web.php 中添加路由:

代码语言:javascript
复制
Route::get('/gantt', 'GanttController@index');
Route::get('/gantt/tasks/{projectId}', 'GanttController@loadTasks');
Route::post('/gantt/tasks', 'GanttController@storeTask');
Route::put('/gantt/tasks/{id}', 'GanttController@updateTask');
Route::delete('/gantt/tasks/{id}', 'GanttController@deleteTask');

4. 创建视图

创建一个视图文件来显示 dhtmlxGantt 图表。

创建视图文件

resources/views 目录下创建 gantt/index.blade.php 文件:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <title>Gantt Chart</title>
    <link rel="stylesheet" href="{{ asset('css/dhtmlxgantt.css') }}">
    <script src="{{ asset('js/dhtmlxgantt.js') }}"></script>
</head>
<body>
    <div>
        <select id="projectSelector">
            @foreach($projects as $project)
                <option value="{{ $project->id }}">{{ $project->name }}</option>
            @endforeach
        </select>
    </div>
    <div id="gantt_here" style="width:100%; height:600px;"></div>

    <script>
        document.addEventListener('DOMContentLoaded', function() {
            gantt.init("gantt_here");

            function loadTasks(projectId) {
                gantt.clearAll();
                gantt.load(`/gantt/tasks/${projectId}`);
            }

            document.getElementById('projectSelector').addEventListener('change', function() {
                loadTasks(this.value);
            });

            gantt.attachEvent("onAfterTaskAdd", function(id, item) {
                fetch('/gantt/tasks', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                        'X-CSRF-TOKEN': '{{ csrf_token() }}'
                    },
                    body: JSON.stringify(item)
                }).then(response => response.json())
                  .then(data => gantt.changeTaskId(id, data.id));
            });

            gantt.attachEvent("onAfterTaskUpdate", function(id, item) {
                fetch(`/gantt/tasks/${id}`, {
                    method: 'PUT',
                    headers: {
                        'Content-Type': 'application/json',
                        'X-CSRF-TOKEN': '{{ csrf_token() }}'
                    },
                    body: JSON.stringify(item)
                });
            });

            gantt.attachEvent("onAfterTaskDelete", function(id) {
                fetch(`/gantt/tasks/${id}`, {
                    method: 'DELETE',
                    headers: {
                        'X-CSRF-TOKEN': '{{ csrf_token() }}'
                    }
                });
            });

            // Load tasks for the first project by default
            loadTasks(document.getElementById('projectSelector').value);
        });
    </script>
</body>
</html>

5. 测试

启动 Laravel 开发服务器:

代码语言:javascript
复制
php artisan serve

在浏览器中访问 http://localhost:8000/gantt,你应该能够看到一个下拉列表和一个 Gantt 图表。选择不同的项目会加载相应的任务。

通过以上步骤,你可以在 Laravel 5 项目中集成 dhtmlxGantt 并处理多个项目。你可以根据需要进一步自定义和扩展这个基础实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 浅谈如何在项目中处理页面中的多个网络请求

    分析: 在网络请求的开发中,经常会遇到两种情况,一种是多个请求结束后统一操作,在一个界面需要同时请求多种数据,比如列表数据、广告数据等,全部请求到后再一起刷新界面。...在 GCD 中,提供了以下这么几个函数,可用于请求同步等处理,模拟同步请求: // 创建一个信号量(semaphore) dispatch_semaphore_t semaphore = dispatch_semaphore_create...有时候必须等待任务完成的结果,然后才能继续后面的处理。...dispatch_group_enter 后再调用 n 次 dispatch_group_level 时,dispatch_group_notify 和 dispatch_group_wait 会收到同步信号;这个特点使得它非常适合处理异步任务的同步当异步任务开始前调用...并且在某个操作依赖于其他几个任务的完成时,采用 dispatch_group or dispatch_semaphore 来实现同步等处理。

    3.5K31

    从以前的项目格式迁移到 VS2017 新项目格式 必须删除必须修改添加文件项目引用引用包删除多余文件输入注释多个框架使用条件判断迁移 WPF 项目

    VS2017 的项目格式更好读、更简单而且减少了 git 冲突。 本文来告诉大家如何从 VS2015 和以前的项目格式修改为 VS2017 项目格式。...,然后把文件放进去,安装 Nuget 不然需要修改比较多。...因为现在存在一些项目是使用多个开发框架,这时就需要修改TargetFramework为TargetFrameworks也就是写为复数的TargetFrameworks,把里面的一个框架修改为多个,请看下面...NETSTANDARD1_6 NETSTANDARD2_0 .NET Core NETCOREAPP1_0 NETCOREAPP1_1 NETCOREAPP2_0 NETCOREAPP2_1 参见:让一个 csproj 项目指定多个开发框架...PropertyGroup> net47;uap10.0 把项目文件修改为上面的代码就可以支持

    3.8K20

    Mac上下载安装Vagrant、配置打包属于自己的开发环境(使用Homestead后续也会更新出来)

    保证PHP项目本地和服务器环境一致,避免出现一系列的问题。 目前解决这种问题最佳的方法有Docker(生产环境line)、Vagrant(用于开发环境dev)。...Apache/2.4.18 (Ubuntu) Content-Type: text/html; charset=UTF-8 更改端口,将端口设置为8888,修改...是否按照成功~~ 8888 端口转发到 80 http://127.0.0.1:8888/ 8889 端口转发到 8888 http://127.0.0.1:8889/ Vagrant高级配置(修改...Vagrantfile文件,找到以下内容,这里以redis为例子演示) config.vm.provision "shell", inline: <<-SHELL # apt-get...vagrant halt 如果执行vagrant up 出现卡死(请修改Vagrantfile文件,打开vb.gui = true 查看调试)

    1.6K20

    在腾讯轻量云上部署短链接系统

    MoeLink就是这样一个部署在腾讯轻量云上的多功能短链项目。 准备工作 腾讯轻量云 短链系统(底部会给) 部署环境 为了能够简易部署这套系统,这边建议使用宝塔面板(BT-Panel)。...然后传到 /www/wwwroot/moelink.org 下 2、解压压缩包,记得删除压缩包(留着占空间) [网站目录] 3、配置环境 点击“网站”,选择创建的网站,将运行目录改成 /public [修改运行目录...] 然后切换到“伪静态”,选择“laravel5”并保存 [rewrite] 安装&配置 访问网站,然后按照对应的数据库信息及管理员配置即可,后续在后台进行订阅和功能的调试即可。...添加短链 由于MoeLink的主站并不是短链,需要用到其他短链 [photo_2022-01-01_03-49-04.jpg] 因此我们只需要在高级设置中添加多个域名即可。

    2.5K00

    GitHubGitLab 为不同的项目修改提交名字 user.name 和邮箱 user.email(附:批量处理脚本)

    背景居家办公的背景下,家里的电脑需要同时支撑自己和公司的项目,根据 GitHub/GitLab 网站的提交记录上看,其是根据邮箱来辨识用户的,所以有必要分别针对不同的项目设置不同的 Git 名字 user.name...解决方案以 Git 项目 https://github.com/mazeyqian/mazey 为例:cd /Users/X/Web/mazeygit config user.name "Your Name"git...config user.email "your@email.com"验证一下修改结果:cat .git/config输出:......批量修改一键批量修改单个文件夹下所有 Git 项目,免去动手烦恼,批量执行文件下载地址:https://github.com/mazeyqian/go-gin-gee/releases/tag/v1.0.0...参数说明path项目文件夹,将批量修改此文件夹下面的所有 Git 项目usernameuser.nameuseremailuser.emailExample 1: MacOS change-git-user.sh

    37000

    3分钟短文:Laravel Carbon自定义日期时间格式

    引言 laravel引用了强大的Carbon日期时间处理库用于日期时间的操作, 并且在数据库的格式化中使用该库。本文就说一说程序中如何方便地使用 Carbon自定义格式。...学习时间 只要成功安装了laravel的项目,已经内置了标准的carbon库文件,比如说在写入数据库字段 created_at 时是这样的格式: $item['created_at'] => "2020...-08-28 19:18:44" 如果不做格式化,可以手动处理该日期时间,调用carbon的解析函数构造Carbon对象: $createdAt = Carbon::parse($item['created_at...或者在laravel5中使用 $dates 属性,功效与上面的方式相同: protected $dates = ['created_at', 'updated_at'] 读取的时候,该字段都会返回一个null

    3.6K20

    在腾讯轻量云上部署短链接系统

    MoeLink就是这样一个部署在腾讯轻量云上的多功能短链项目。 准备工作 腾讯轻量云 短链系统(底部会给) 部署环境 为了能够简易部署这套系统,这边建议使用宝塔面板(BT-Panel)。.../wwwroot/moelink.org 下 2、解压压缩包,记得删除压缩包(留着占空间) 3、配置环境 点击“网站”,选择创建的网站,将运行目录改成 /public 然后切换到“伪静态”,选择“laravel5...添加短链 由于MoeLink的主站并不是短链,需要用到其他短链 因此我们只需要在高级设置中添加多个域名即可。另外您是否担心每个域能直接使用,这个只能的短链系统已经把这个功能做好了。...项目地址: https://moelink.org 本文来自投稿,不代表本站立场,如若转载,请注明出处:https://www.idc.moe/archives/deploy-short-url-on-server.html

    7.4K10

    PHP-Laravel入门使用(路由)

    二、Laravel入门使用(路由) 什么是路由:将用户的请求按照事先规划的方案提交给指定的控制器或者功能函数来进行处理....【通俗的讲,路由就是访问地址形式】 在博客中,当我们在URL地址中,传递p(平台)、c(控制器)、a(方法)三个参数时,系统会自动跳转到指定模型中指定控制器的指定方法,这些处理过程都是由框架自动完成的...2、routes\web.php配置文件中配置路由(重点) (1)默认根路由 问题:为什么当我们在浏览器中访问虚拟域名http://域名时,如何显示Laravel5?...如果路由错误或者没有定义则会看到以下错误页面(以Laravel5.4.30为准) ? 如果是5.5以后的版本,则提示如下: ? (3)请求方式有哪些? ?...后期在视图中会频繁使用到这样的代码“xxxx” 场景:在后期需要频繁的定义跳转地址,但是如果这些地址写死了的话,万一发生变化,得全部修改

    2K20

    使用Ubuntu与宝塔搭建IT资产管理系统 - Chemex

    主要是数据库配置,另外在未来开通SSL后,需要再配置第二步修改为true ### 第一步:数据库配置 DB_CONNECTION=mysql #数据库类型,不需要修改(兼容mariadb) DB_HOST...true ADMIN_HTTPS=false 网站配置 修改网站伪静态,伪静态选择laravel5 运行目录为Public文件夹目录。...请到Chemex所在文件夹内终端运行 composer self-update 随时随地保持更新可以在项目根目录中执行 sudo git fetch --all && sudo git reset --...(可以直接使用网页版宝塔终端而不用SSH实现) 修改背景 将背景图替换,背景图位于.....#查询Git git remote -v #修改Git地址 cd /www/wwwroot/itam/.git/config 修改文件内地址即可 因为git文件夹里面包含版本,所以我先将v3.2.0的

    3.3K00

    宝塔+轻量,轻松搭建IPv4-IPv6双栈PT站

    然而,随着轻量服务器上线IPv6功能,让我萌生了重启项目、搭建v4v6双栈PT站的想法。 注意事项 在搭建的过程中,工单和群友都提供了不少帮助,这里说几点注意事项。...安装环境 安装Nginx 1.22、PHP 8.2、MySQL 5.7和Redis(2.6.12及以上) 直接点击右侧安装后根据要求的版本选择即可 部署PT站源码 新建网站 修改命令行PHP版本为8.2...点击进入网站目录 打开终端,输入命令拉取源码 apt install git -y git clone https://github.com/xiaomlove/nexusphp 安装PT系统 配置项目...opcache和gmp 重载配置 配置数据库 创建一个数据库,记录下用户名和密码 配置网站 回到原来的网站,点击网站名进入配置页面 配置网站目录 注意先后,先配置网站目录再配置运行目录 配置伪静态 使用laravel5

    44921

    Laravel-Excel导出功能文档

    实例作为回调函数的参数 Excel::create('Filename', function($excel) { // Call writer methods here }); 设置属性 可以在闭包中修改一些属性...mpdf/mpdf": "~6.1" "tecnick.com/tcpdf": "~6.0.0" 同时需要设置config文件export.pdf.driver NewExcelFile依赖注入 为了紧跟laravel5...); 保存到服务器并导出文件 ->store('xls')->export('xls'); 保存并返回storage信息 如果你想返回storage信息,可是设置store的第三个参数或者到配置文件中修改...第二个sheet $excel->sheet('Second sheet', function($sheet) { }); })->export('xls'); 设置属性 可以在闭包中修改一些属性...'width' => 50, 'height' => 500 ) )); 大小自适应 默认情况下导出的文件是大小自适应的,如果你想改变这一默认行为,可以修改

    13.3K500

    再见 XShell 和 ITerm 2,是时候拥抱全平台高颜值终端工具 Hyper 了!

    其安装命令是: $ hyper i hyper-search 3. hyper-pane 该插件用来增强窗口导航,对于支持多个页签的软件来说这是个利器。...目前还有一个社区驱动的 awesome-hyper 项目,里面有着更多开源的 Hyper 终端插件、主题等等。如果你对不同的主题和插件有兴趣,可以去这个项目里进行探索哟!...并在 ZSH_THEME 项中直接修改主题名称为要启用的主题名称即可。 ZSH_THEME="agnoster" 注意:如果你安装的主题无法显示预期效果,那是因为响应的主题的系统字体没有安装。...codeclimate dirhistory fasd git-hubflow history-substring-search laravel5...shell: 'C:\\Windows\\System32\\bash.exe', shellArgs: [], 修改完成后,再次重新打开 Hyper,你会发现默认已经进入了 Bash 终端界面了。

    12K30

    JavaWeb与JavaEE命名规则(规范)

    .但是有些命名规范已经有些不在适合,参考该博文的基础上,进行了修改....命名规范:以大写字母开头,如果有多个单词,每个单词头字母大写 例如:StudentInfo 接口命名: 命名规范:以大写字母"I"开头,如果有多个单词,每个单词头字母大写 例如:IStudentInfo...接口实现类命名: 命名规范:将实现的接口名称的首字母"I"去掉,以"Impl作为结尾",如果有多个单词,每个单词头字母大写。...,如果有多个单词,每个单词头字母大写 DAO类命名: 以大写字母开头,如果有多个单词,每个单词头字母大写 Action类命名: 命名规范:Action的命名以POJO名称来制定,POJO名称Action... --多个单词 ---- J2EE项目工程文件夹组织规范: 目的:规范学员web应用程序的资源组织形式,形成良好的文件组织习惯。

    2.5K30
    领券