dicibi / orgs
用于管理企业结构的数据库和基本模型。
dev-main
2024-05-11 19:51 UTC
Requires
- php: ^8.0
- illuminate/console: ^8.0|^9.0|^10.0|^11.0
- illuminate/contracts: ^8.0|^9.0|^10.0|^11.0
- illuminate/filesystem: ^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
- kalnoy/nestedset: ^6.0
Requires (Dev)
- jetbrains/phpstorm-attributes: ^1.0
- orchestra/testbench: >=8.0
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2024-09-12 05:33:39 UTC
README
组织结构。
此包遵循企业结构标准。它不包含默认的结构或名称,您自行定义。此包仅提供组织、管理和与工作结构相关的业务流程的功能。
主要组件
orgs 包包含 3 个主要组织组件。
- 结构
- 职位名称
- 办公室
每个组件都有嵌套集实现。
使用方法
通过 composer
安装。
composer require dicibi/orgs
通过 app('orgs')
使用。
app('orgs')->structures(); // Dicibi\Orgs\Resolvers\StructureResolver app('orgs')->offices(); // Dicibi\Orgs\Resolvers\OfficeResolver app('orgs')->jobTitles(); // Dicibi\Orgs\Resolvers\JobTitleResolver
或者通过服务绑定使用 orgs
。
use Dicibi\Orgs\Organizer; function (Organizer $organizer) { $organizer->structures(); // Dicibi\Orgs\Resolvers\StructureResolver $organizer->offices(); // Dicibi\Orgs\Resolvers\OfficeResolver $organizer->jobTitles(); // Dicibi\Orgs\Resolvers\JobTitleResolver }
定义就业将附加的位置。通常将其附加到 users
。
class User extends Model { use HasEmployment; // add ability to this model have Job Position (historical) }
用例 - 一个简单的开放职位
分配用户到职位。
// by inherit this trait use Dicibi\Orgs\Concerns\HasEmployment; // it's as simple as to call `assignPosition(position)` to assign a Position auth()->user()->assignPosition($position); // to get historically employed/assigned positions, call employments(). // @return QueryBuilder<Dicibi\Orgs\Models\Pivot\Position> auth()->user()->employments(); // to get current/active position (latest). // @return Dicibi\Orgs\Models\Pivot\Position auth()->user()->activePosition();
如何通过办公室和职位名称打开新的职位(Job Position)。
// create an Office $newOffice = $organizer->offices()->create('Jakarta Central Office'); // create a Job title $newTitle = $organizer->titles()->create('Vice President'); // create a position by office $newPosition = $newOffice->openPositionFor($newTitle, quota: 1); // or create a position by title (quota is optional) $newPosition = $newTitle->openPositionIn($newOffice, quota: 1); // for addition, you might get available/unavailable positions information via Office (TBA) $newOffice->availablePositions(); $newOffice->unavailablePositions(); $newOffice->positions(); // all positions // for addition, you might get information about Offices that open for specific Job Title $customerServiceTitle->availableOffices(); $customerServiceTitle->offices(); // all offices
用例 - 管理办公室之间的层次结构
管理中央办公室和分支机构之间的层次结构。
// manage via offices resolver /** @var \Dicibi\Orgs\Resolvers\OfficeResolver $resolver */ $resolver->attach(child: $surabayaBranch, parent: $jakartaCentralOffice); $resolver->attach(child: $bandungBranch, parent: $jakartaCentralOffice); $resolver->attach(child: $lampungBranch, parent: $jakartaCentralOffice); $resolver->tree($jakartaCentralOffice); // get tree // or manage directly via NodeTrait (kalnoy/nestedset) /** @var \Dicibi\Orgs\Models\Office|NodeTrait $jakartaCentralOffice */ $jakartaCentralOffice->appendNode($surabayaBranch); $jakartaCentralOffice->appendNode($bandungBranch); $jakartaCentralOffice->appendNode($lampungBranch); $jakartaCentralOffice->tree();
用例 - 管理职位名称之间的层次结构
管理职位名称之间的层次结构。
// manage via titles resolver /** @var \Dicibi\Orgs\Resolvers\JobTitleResolver $resolver */ $resolver->attach(child: $presidentDirector, parent: $presidentCommissioner); $resolver->attach(child: $financeDirector, parent: $presidentDirector); $resolver->attach(child: $operationsDirector, parent: $presidentDirector); $resolver->tree($presidentCommissioner); // or manage directly via NodeTrait (kalnoy/nestedset) /** @var \Dicibi\Orgs\Models\Pivot\Position|NodeTrait $presidentCommissioner */ $presidentCommissioner->appendNode($presidentDirector); $presidentDirector->appendNode($financeDirector); $presidentDirector->appendNode($operationsDirector); $presidentCommissioner->tree();
用例 - 使用结构模板建立层次结构
我们可以在每个办公室中管理组织结构,而不是管理'结构模板',该模板可以分配给办公室。当我们有1个中央办公室和30个分支机构时,我们不想每次都定义每个办公室的31个结构。
通过使用'结构'模板,我们可以处理这种情况。假设在31个办公室中,有称为:中央办公室、分支机构、地点的办公室结构。
/** @var \Dicibi\Orgs\Resolvers\StructureResolver $structure */ $structure->create('ID Central'); $structure->create('Branch'); $structure->create('Site'); /** @var \Dicibi\Orgs\Resolvers\JobTitleResolver $title */ $title->create('Head', structure: 'ID Central'); $title->create('Vice-Head', structure: 'ID Central', attachTo: 'Head'); $title->create('Division Head', structure: 'ID Central', attachTo: 'Head'); $title->create('Group Head', structure: 'ID Central', attachTo: 'Division Head'); /** @var \Dicibi\Orgs\Resolvers\OfficeResolver $office */ $office->create('Jakarta Central Office', structure: 'ID Central'); $office->create('Aceh Branch Office', structure: 'Branch'); $office->create('Jakarta Branch Office', structure: 'Branch'); $office->create('Surabaya Site', structure: 'Site');
在每种结构中,我们可以定义独特的职位名称结构。在中央结构中,我们可能定义总监、部门主管、组长等。但在分支机构,将没有总监、部门或小组,而是包含分支机构主管、副分支机构主管、部门主管、经理等。
仍然可以设置跨结构层次结构,例如,如果我们有分支机构结构和中央结构,则可能 分支机构主管 是 运营部门主管 的下级。