dainsys/timy

此包已被废弃,不再维护。作者建议使用dainsys/timy2包。

将用户时间跟踪功能添加到Laravel 7、Livewire和Bootstrap 4

3.4.2 2021-06-10 04:17 UTC

README

将用户时间跟踪功能添加到Laravel 7、Livewire和Bootstrap 4。

安装

  1. 使用composer安装:composer require dainsys/timy2

    可选:该包应由Laravel自动发现。然而,您可以在config.app文件中的providers数组中注册它

        'providers' => [
            Dainsys\Timy\TimyServiceProvider::class,
        ]

    您可能想要发布配置文件:php artisan vendor:publish --tag=timy-config以更改默认配置。请注意创建默认处置选项。

  2. 接下来,您可能想要运行以下命令来运行迁移:php artisan migrate

    您也可以使用以下命令发布迁移:php artisan vendor:publish --tag=tiy-migrations并在迁移之前更新它们。

  3. use Dainsys\Timy\Timeable特质添加到您的User模型中。
    use Dainsys\Timy\Timeable;
    class User extends Authenticatable
    {
        use Timeable;
    }

    此包依赖于laravel/ui来处理认证。请遵循其安装指南认证。我们建议运行以下命令:php artisan ui --auth vue

  4. 根据laravel/livewire的要求,确保您更新了您的布局视图
        @livewireStyles
    </head>
    <body>
        ...
        @livewireScripts
        @stack('scripts')
    </body>
    </html>
  5. 确保在config.app文件中取消注释App\Providers\BroadcastServiceProvider::class
  6. 接下来,将以下路由粘贴到您的routes\channels.php文件中
    Broadcast::channel('Timy.User.{id}', function ($user, $id) {
        return (int) $user->id == (int) $id;
    });
    
    Broadcast::channel('Timy.Admin', function ($user) {
        return \Illuminate\Support\Facades\Gate::allows(config('timy.roles.admin'));
    });
  7. 在检查已登录用户后,将timy菜单包含在您的主导航栏中:@include('timy::_timy-menu')

    或者,您可以链接到以下端点:用户:URL=/timy/user,名称=user_dashboard,网关(blade @can指令)=timy-user管理员用户:URL=/timy/admin,名称=admin_dashboard,网关(blade @can指令)=timy-admin超级管理员用户:URL=/timy/super_admin,名称=supepr_admin_dashboard,网关(blade @can指令)=timy-super-admin

  8. 接下来,在.env文件中定义超级用户,通过在变量TIMY_SUPER_USER_EMAIL=中提供其电子邮件来定义它。此用户将具有丰富的应用控制。
  9. 接下来,从Pusher获取您的凭证,并在.env文件中定义以下变量。请确保将您的BROADCAST_DRIVER变量设置为pusher
    BROADCAST_DRIVER=pusher
    PUSHER_APP_ID=
    PUSHER_APP_KEY=
    PUSHER_APP_SECRET=
    PUSHER_APP_CLUSTER=
    
    MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
    MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
  10. 更新您的package.json文件,添加以下依赖项
            "laravel-echo": "^1.8.0",
            "pusher-js": "^6.0.3",
  11. 在您的resources/js/bootstrap.js中取消注释Laravel Echo部分
    import Echo from 'laravel-echo';
    
    window.Pusher = require('pusher-js');
    
    window.Echo = new Echo({
        broadcaster: 'pusher',
        key: process.env.MIX_PUSHER_APP_KEY,
        cluster: process.env.MIX_PUSHER_APP_CLUSTER,
        forceTLS: true
    });
  12. 然后安装前端依赖并编译:npm install && npm run dev
  13. 可选:此包包含一个每5分钟运行一次的artisan命令,以检查用户的ip是否仍然活跃。默认情况下它是禁用的:要激活它,请执行以下操作
    1. 确保您的服务器正在运行Laravel文档中建议的cron job 调度,启动调度会话:* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
    2. config\timy.php文件中将with_scheduled_commands变量设置为true:'with_scheduled_commands' => env('TIMY_WITH_SCHEDULED_COMMANDS', true)

功能

  • 为了使包正常工作,需要认证用户。我们利用了laravel/ui包。
  • 用户和管理员应具有有效的角色分配。
  • 当会话启动时,所有之前打开的定时器都会关闭,并打开一个新的定时器。
  • 只有超级管理员可以管理角色。
  • 管理员控制器受保护,只为分配了 timy-admin 角色的用户工作。
  • 在页面加载时
    • 如果用户正在运行一个特定处置的定时器,关闭该定时器后,将使用相同的处置启动一个新的定时器。
    • 即使没有正在运行的定时器,页面重新加载时也会使用之前的处置启动一个新的定时器。
    • 如果之前的逻辑都失败,默认情况下将使用配置中设置的处置来启动一个新的定时器。
  • 如果用户更改了处置下拉菜单(Vue 组件),将创建一个新的定时器,并关闭所有之前的定时器。
  • 当用户更改他们的处置时,管理员仪表板将动态更新。
  • 当管理员更新特定用户的处置时,用户界面将更新,并且用户会收到通知。

API 端点

  • GET 端点 /timy/api/timers_filtered 或路由 route('timy.timers_filtered') 返回一个 Json 格式的资源,包含所有定时器,通过查询字符串进行筛选。以下 GET 变量允许您筛选列表
    • disposition=value 将只返回包含给定值的 disposition 名称的定时器。
    • user=value 将只返回包含给定值的 user 名称的定时器。
    • from_date=date 将只返回 start_date 更新或等于给定日期的定时器。
    • to_date=date 将只返回 start_date 更旧或等于给定日期的定时器。
    • payable=true 将只返回 disposition 被标记为 payable 的定时器。
    • invoiceable=true 将只返回 disposition 被标记为 invoiceable 的定时器。
    • running=true 将只返回 finished_at 字段为 null 的定时器,这表示当前正在运行的定时器。
  • 访问 GET 路由 /timy/api/get_open_timer_hours 或路由 route('timy.getOpenTimersHours') 以获取当前用户打开的定时器的当前小时数。非常适合显示实时更新,计算小时数,而无需关闭当前定时器。