feat: 新增项目任务创建权限功能 - 90%

This commit is contained in:
ganzizi 2023-11-24 18:25:28 +08:00
parent ecdbf8765f
commit b0742021b6
7 changed files with 339 additions and 75 deletions

View File

@ -30,6 +30,7 @@ use App\Models\ProjectTaskFile;
use App\Models\ProjectTaskUser; use App\Models\ProjectTaskUser;
use App\Models\WebSocketDialog; use App\Models\WebSocketDialog;
use App\Exceptions\ApiException; use App\Exceptions\ApiException;
use App\Models\ProjectPermission;
use App\Module\BillMultipleExport; use App\Module\BillMultipleExport;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use App\Models\ProjectTaskFlowChange; use App\Models\ProjectTaskFlowChange;
@ -1004,6 +1005,10 @@ class ProjectController extends AbstractController
$builder->whereNull('project_tasks.archived_at'); $builder->whereNull('project_tasks.archived_at');
} }
// //
if (ProjectPermission::getPermission($project_id, ProjectPermission::PANEL_SHOW_TASK_COMPLETE) == 0) {
$builder->whereNull('project_tasks.complete_at');
}
//
if ($deleted == 'all') { if ($deleted == 'all') {
$builder->withTrashed(); $builder->withTrashed();
} elseif ($deleted == 'yes') { } elseif ($deleted == 'yes') {
@ -1507,7 +1512,7 @@ class ProjectController extends AbstractController
$archived = Request::input('archived', 'no'); $archived = Request::input('archived', 'no');
// //
$isArchived = str_replace(['all', 'yes', 'no'], [null, false, true], $archived); $isArchived = str_replace(['all', 'yes', 'no'], [null, false, true], $archived);
$task = ProjectTask::userTask($task_id, $isArchived, true, false, ['taskUser', 'taskTag']); $task = ProjectTask::userTask($task_id, $isArchived, true, '', ['taskUser', 'taskTag']);
// 项目可见性 // 项目可见性
$project_userid = ProjectUser::whereProjectId($task->project_id)->whereOwner(1)->value('userid'); // 项目负责人 $project_userid = ProjectUser::whereProjectId($task->project_id)->whereOwner(1)->value('userid'); // 项目负责人
if ($task->visibility != 1 && $user->userid != $project_userid) { if ($task->visibility != 1 && $user->userid != $project_userid) {
@ -1603,7 +1608,7 @@ class ProjectController extends AbstractController
return Base::retError('文件不存在或已被删除'); return Base::retError('文件不存在或已被删除');
} }
// //
$task = ProjectTask::userTask($file->task_id, true, true, true); $task = ProjectTask::userTask($file->task_id, true, true, ProjectPermission::TASK_REMOVE);
// //
$task->pushMsg('filedelete', $file); $task->pushMsg('filedelete', $file);
$file->delete(); $file->delete();
@ -1732,6 +1737,7 @@ class ProjectController extends AbstractController
$column_id = $data['column_id']; $column_id = $data['column_id'];
// 项目 // 项目
$project = Project::userProject($project_id); $project = Project::userProject($project_id);
ProjectTask::userTaskPermission(ProjectPermission::TASK_ADD, $project);
// 列表 // 列表
$column = null; $column = null;
$newColumn = null; $newColumn = null;
@ -1808,7 +1814,7 @@ class ProjectController extends AbstractController
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
$name = Request::input('name'); $name = Request::input('name');
// //
$task = ProjectTask::userTask($task_id, true, true, true); $task = ProjectTask::userTask($task_id, true, true, ProjectPermission::TASK_ADD);
if ($task->complete_at) { if ($task->complete_at) {
return Base::retError('主任务已完成无法添加子任务'); return Base::retError('主任务已完成无法添加子任务');
} }
@ -1867,7 +1873,7 @@ class ProjectController extends AbstractController
$param = Request::input(); $param = Request::input();
$task_id = intval($param['task_id']); $task_id = intval($param['task_id']);
// //
$task = ProjectTask::userTask($task_id, true, true, 2); $task = ProjectTask::userTask($task_id, true, true, ProjectPermission::TASK_UPDATE);
$taskUser = ProjectTaskUser::select(['userid', 'owner'])->whereTaskId($task_id)->get(); $taskUser = ProjectTaskUser::select(['userid', 'owner'])->whereTaskId($task_id)->get();
$owners = $taskUser->where('owner', 1)->pluck('userid')->toArray(); // 负责人 $owners = $taskUser->where('owner', 1)->pluck('userid')->toArray(); // 负责人
$assists = $taskUser->where('owner', 0)->pluck('userid')->toArray(); // 协助人 $assists = $taskUser->where('owner', 0)->pluck('userid')->toArray(); // 协助人
@ -2003,7 +2009,7 @@ class ProjectController extends AbstractController
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
$type = Request::input('type', 'add'); $type = Request::input('type', 'add');
// //
$task = ProjectTask::userTask($task_id, $type == 'add', true, true); $task = ProjectTask::userTask($task_id, $type == 'add', true, ProjectPermission::TASK_ARCHIVED);
// //
if ($task->parent_id > 0) { if ($task->parent_id > 0) {
return Base::retError('子任务不支持此功能'); return Base::retError('子任务不支持此功能');
@ -2045,7 +2051,7 @@ class ProjectController extends AbstractController
$task_id = intval(Request::input('task_id')); $task_id = intval(Request::input('task_id'));
$type = Request::input('type', 'delete'); $type = Request::input('type', 'delete');
// //
$task = ProjectTask::userTask($task_id, null, $type !== 'recovery', true); $task = ProjectTask::userTask($task_id, null, $type !== 'recovery', ProjectPermission::TASK_REMOVE);
if ($type == 'recovery') { if ($type == 'recovery') {
$task->restoreTask(); $task->restoreTask();
return Base::retSuccess('操作成功', ['id' => $task->id]); return Base::retSuccess('操作成功', ['id' => $task->id]);
@ -2080,7 +2086,7 @@ class ProjectController extends AbstractController
return Base::retError('记录不存在'); return Base::retError('记录不存在');
} }
// //
$task = ProjectTask::userTask($projectLog->task_id, true, true, true); $task = ProjectTask::userTask($projectLog->task_id, true, true, ProjectPermission::TASK_UPDATE);
// //
$record = $projectLog->record; $record = $projectLog->record;
if ($record['flow'] && is_array($record['flow'])) { if ($record['flow'] && is_array($record['flow'])) {
@ -2220,7 +2226,7 @@ class ProjectController extends AbstractController
$project_id = intval(Request::input('project_id')); $project_id = intval(Request::input('project_id'));
$column_id = intval(Request::input('column_id')); $column_id = intval(Request::input('column_id'));
// //
$task = ProjectTask::userTask($task_id, true, true, 2); $task = ProjectTask::userTask($task_id, true, true, ProjectPermission::TASK_MOVE);
// //
if( $task->project_id == $project_id && $task->column_id == $column_id){ if( $task->project_id == $project_id && $task->column_id == $column_id){
return Base::retSuccess('移动成功', ['id' => $task_id]); return Base::retSuccess('移动成功', ['id' => $task_id]);
@ -2411,4 +2417,64 @@ class ProjectController extends AbstractController
'top_at' => $projectUser->top_at?->toDateTimeString(), 'top_at' => $projectUser->top_at?->toDateTimeString(),
]); ]);
} }
/**
* @api {get} api/project/permission 43. 获取项目权限设置
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup project
* @apiName permission
*
* @apiParam {Number} project_id 项目ID
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function permission()
{
$user = User::auth();
$projectId = intval(Request::input('project_id'), 0);
$projectUser = ProjectUser::whereUserid($user->userid)->whereProjectId($projectId)->first();
if (!$projectUser) {
return Base::retError("项目不存在");
}
$projectPermission = ProjectPermission::initPermissions($projectId);
return Base::retSuccess("success", $projectPermission);
}
/**
* @api {get} api/project/permission/update 44. 项目权限设置
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup project
* @apiName permission__update
*
* @apiParam {Number} project_id 项目ID
* @apiParam {Array} task_add 添加任务权限
* @apiParam {Array} task_update 修改任务权限
* @apiParam {Array} task_remove 删除任务权限
* @apiParam {Array} task_update_complete 标记完成权限
* @apiParam {Array} task_archived 归档任务权限
* @apiParam {Array} task_move 移动任务权限
* @apiParam {Number} panel_show_task_complete 是否显示已完成任务 1显示 0不显示
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function permission__update()
{
$user = User::auth();
$projectId = intval(Request::input('project_id'), 0);
$projectUser = ProjectUser::whereUserid($user->userid)->whereProjectId($projectId)->first();
if (!$projectUser) {
return Base::retError("项目不存在");
}
$permissions = Request::only([ProjectPermission::TASK_ADD, ProjectPermission::TASK_UPDATE, ProjectPermission::TASK_REMOVE, ProjectPermission::TASK_UPDATE_COMPLETE, ProjectPermission::TASK_ARCHIVED, ProjectPermission::TASK_MOVE, ProjectPermission::PANEL_SHOW_TASK_COMPLETE]);
$projectPermission = ProjectPermission::updatePermissions($projectId, Base::newArrayRecursive('intval', $permissions));
return Base::retSuccess("success", $projectPermission);
}
} }

View File

@ -24,6 +24,7 @@ use Request;
* @property int|null $dialog_id 聊天会话ID * @property int|null $dialog_id 聊天会话ID
* @property string|null $archived_at 归档时间 * @property string|null $archived_at 归档时间
* @property int|null $archived_userid 归档会员 * @property int|null $archived_userid 归档会员
* @property int|null $is_fixed 是否固定
* @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at * @property \Illuminate\Support\Carbon|null $updated_at
* @property \Illuminate\Support\Carbon|null $deleted_at * @property \Illuminate\Support\Carbon|null $deleted_at
@ -47,6 +48,7 @@ use Request;
* @method static \Illuminate\Database\Eloquent\Builder|Project whereDesc($value) * @method static \Illuminate\Database\Eloquent\Builder|Project whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|Project whereDialogId($value) * @method static \Illuminate\Database\Eloquent\Builder|Project whereDialogId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Project whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Project whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Project whereIsFixed($value)
* @method static \Illuminate\Database\Eloquent\Builder|Project whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Project whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|Project wherePersonal($value) * @method static \Illuminate\Database\Eloquent\Builder|Project wherePersonal($value)
* @method static \Illuminate\Database\Eloquent\Builder|Project whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Project whereUpdatedAt($value)
@ -170,6 +172,8 @@ class Project extends AbstractModel
$array['task_my_complete'] = $builder->whereNotNull('project_tasks.complete_at')->count(); $array['task_my_complete'] = $builder->whereNotNull('project_tasks.complete_at')->count();
$array['task_my_percent'] = $array['task_my_num'] ? intval($array['task_my_complete'] / $array['task_my_num'] * 100) : 0; $array['task_my_percent'] = $array['task_my_num'] ? intval($array['task_my_complete'] / $array['task_my_num'] * 100) : 0;
// //
$array['panel_show_task_complete'] = ProjectPermission::getPermission($this->id, ProjectPermission::PANEL_SHOW_TASK_COMPLETE);
//
return $array; return $array;
} }

View File

@ -0,0 +1,116 @@
<?php
namespace App\Models;
use App\Exceptions\ApiException;
use App\Module\Base;
/**
* App\Models\ProjectPermission
*
* @property int $id
* @property int|null $project_id 项目ID
* @property string|null $permissions 权限
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \App\Models\Project|null $project
* @method static \Illuminate\Database\Eloquent\Builder|ProjectPermission newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectPermission newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectPermission query()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectPermission whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectPermission whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectPermission wherePermissions($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectPermission whereProjectId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectPermission whereUpdatedAt($value)
* @mixin \Eloquent
*/
class ProjectPermission extends AbstractModel
{
const TASK_ADD = 'task_add'; // 任务添加
const TASK_UPDATE = 'task_update'; // 任务更新
const TASK_REMOVE = 'task_remove'; // 任务删除
const TASK_UPDATE_COMPLETE = 'task_update_complete'; // 任务完成
const TASK_ARCHIVED = 'task_archived'; // 任务归档
const TASK_MOVE = 'task_move'; // 任务移动
const PANEL_SHOW_TASK_COMPLETE = 'panel_show_task_complete'; // 显示已完成任务
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['project_id', 'permissions'];
/**
* 权限
* @param $value
* @return string
*/
public function getPermissionsAttribute($value)
{
return Base::json2array($value);
}
/**
* 获取权限值
*
* @param int $projectId
* @param string $key
* @return object|array
*/
public static function getPermission($projectId, $key = '')
{
$projectPermission = self::initPermissions($projectId);
$currentPermissions = $projectPermission->permissions;
if ($key){
if (!isset($currentPermissions[$key])) {
throw new ApiException('项目权限设置不存在');
}
return $currentPermissions[$key];
}
return $projectPermission;
}
/**
* 初始化项目权限
*
* @param int $projectId
* @return ProjectPermission
*/
public static function initPermissions($projectId)
{
$permissions = [
self::TASK_ADD => [1,3],
self::TASK_UPDATE => [1,2],
self::TASK_REMOVE => [1,2],
self::TASK_UPDATE_COMPLETE => [1,2],
self::TASK_ARCHIVED => [1,2],
self::TASK_MOVE => [1,2],
self::PANEL_SHOW_TASK_COMPLETE => 1,
];
return self::firstOrCreate(
['project_id' => $projectId],
['permissions' => Base::array2json($permissions)]
);
}
/**
* 更新项目权限
*
* @param int $projectId
* @param array $permissions
* @return ProjectPermission
*/
public static function updatePermissions($projectId, $newPermissions)
{
$projectPermission = self::initPermissions($projectId);
$currentPermissions = $projectPermission->permissions;
$mergedPermissions = empty($newPermissions) ? $currentPermissions : array_merge($currentPermissions, $newPermissions);
$projectPermission->permissions = Base::array2json($mergedPermissions);
$projectPermission->save();
return $projectPermission;
}
}

View File

@ -32,7 +32,8 @@ use Request;
* @property int|null $archived_follow 跟随项目归档(项目取消归档时任务也取消归档) * @property int|null $archived_follow 跟随项目归档(项目取消归档时任务也取消归档)
* @property string|null $complete_at 完成时间 * @property string|null $complete_at 完成时间
* @property int|null $userid 创建人 * @property int|null $userid 创建人
* @property int|null $is_all_visible 是否所有人可见 * @property int|null $visibility 任务可见性1-项目人员 2-任务人员 3-指定成员
* @property int|null $is_default 是否默认任务
* @property int|null $p_level 优先级 * @property int|null $p_level 优先级
* @property string|null $p_name 优先级名称 * @property string|null $p_name 优先级名称
* @property string|null $p_color 优先级颜色 * @property string|null $p_color 优先级颜色
@ -81,7 +82,7 @@ use Request;
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereFlowItemId($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereFlowItemId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereFlowItemName($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereFlowItemName($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereIsAllVisible($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereIsDefault($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereLoop($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereLoop($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereLoopAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereLoopAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereName($value)
@ -94,6 +95,7 @@ use Request;
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereStartAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereStartAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereUserid($value) * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereUserid($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereVisibility($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask withTrashed() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask withTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask withoutTrashed() * @method static \Illuminate\Database\Eloquent\Builder|ProjectTask withoutTrashed()
* @mixin \Eloquent * @mixin \Eloquent
@ -1728,14 +1730,11 @@ class ProjectTask extends AbstractModel
* @param int $task_id * @param int $task_id
* @param bool $archived true:仅限未归档, false:仅限已归档, null:不限制 * @param bool $archived true:仅限未归档, false:仅限已归档, null:不限制
* @param bool $trashed true:仅限未删除, false:仅限已删除, null:不限制 * @param bool $trashed true:仅限未删除, false:仅限已删除, null:不限制
* @param int|bool $permission * @param string $action 动作名称
* - 0|false 限制:项目成员、任务成员、任务群聊成员(任务成员 = 任务创建人+任务协助人+任务负责人)
* - 1|true 限制:项目负责人、任务成员
* - 2 已有负责人才限制true (子任务时如果是主任务负责人也可以)
* @param array $with * @param array $with
* @return self * @return self
*/ */
public static function userTask($task_id, $archived = true, $trashed = true, $permission = false, $with = []) public static function userTask($task_id, $archived = true, $trashed = true, $action = '', $with = [])
{ {
$builder = self::with($with)->allData()->where("project_tasks.id", intval($task_id)); $builder = self::with($with)->allData()->where("project_tasks.id", intval($task_id));
if ($trashed === false) { if ($trashed === false) {
@ -1758,7 +1757,7 @@ class ProjectTask extends AbstractModel
try { try {
$project = Project::userProject($task->project_id); $project = Project::userProject($task->project_id);
} catch (\Throwable $e) { } catch (\Throwable $e) {
if ($task->owner !== null || (!$permission && $task->permission(4))) { if ($task->owner !== null || (empty($action) && $task->permission(4))) {
$project = Project::find($task->project_id); $project = Project::find($task->project_id);
if (empty($project)) { if (empty($project)) {
throw new ApiException('项目不存在或已被删除', [ 'task_id' => $task_id ], -4002); throw new ApiException('项目不存在或已被删除', [ 'task_id' => $task_id ], -4002);
@ -1767,14 +1766,52 @@ class ProjectTask extends AbstractModel
throw new ApiException($e->getMessage(), [ 'task_id' => $task_id ], -4002); throw new ApiException($e->getMessage(), [ 'task_id' => $task_id ], -4002);
} }
} }
// if ($action) {
if ($permission >= 2) { self::userTaskPermission($action, $project, $task);
$permission = $task->hasOwner() ? 1 : 0;
}
if ($permission && !$project->owner && !$task->permission(3)) {
throw new ApiException('仅限项目负责人、任务负责人、协助人员或任务创建者操作');
} }
// //
return $task; return $task;
} }
/**
* 检查用户是否有执行特定动作的权限
* @param string $action 动作名称
* @param Project $project 项目实例
* @param Task $task 任务实例
* @return bool
*/
public static function userTaskPermission($action, $project, $task = null)
{
$permissions = ProjectPermission::getPermission($project->id, $action);
foreach ($permissions as $permission) {
switch ($permission) {
case 1:
// 项目负责人
if (!$project->owner) {
throw new ApiException('仅限项目负责人操作', [ 'project_id' => $project->id ]);
}
break;
case 2:
// 任务负责人
if (!$task->isOwner()) {
throw new ApiException('仅限任务负责人操作', [ 'project_id' => $project->id ]);
}
break;
case 3:
// 项目成员
$instance = new self();
if (!($instance->useridInTheProject(User::userid()) === 1)) {
throw new ApiException('仅限项目成员操作', [ 'project_id' => $project->id ]);
}
break;
case 4:
// 任务成员(任务成员 = 任务创建人+任务协助人+任务负责人)
if ($task->isCreater()) {
throw new ApiException('仅限任务成员操作', [ 'project_id' => $project->id ]);
}
break;
}
}
return true;
}
} }

View File

@ -687,6 +687,22 @@ class Base
return $string; return $string;
} }
/**
* 递归处理数组
*
* @param string $callback 如:'intval''trim''addslashes''stripslashes''htmlspecialchars'
* @param array $array
* @return array
*/
public static function newArrayRecursive($callback, $array)
{
$func = function ($item) use (&$func, &$callback) {
return is_array($item) ? array_map($func, $item) : call_user_func($callback, $item);
};
return array_map($func, $array);
}
/** /**
* 重MD5加密 * 重MD5加密
* @param $text * @param $text

View File

@ -304,7 +304,7 @@
<TaskRow v-if="projectData.cacheParameter.showUndone" :list="unList" open-key="undone" @on-priority="addTaskOpen"/> <TaskRow v-if="projectData.cacheParameter.showUndone" :list="unList" open-key="undone" @on-priority="addTaskOpen"/>
</div> </div>
<!--已完成任务--> <!--已完成任务-->
<div v-if="projectData.task_num > 0" :class="['project-table-body', !projectData.cacheParameter.showCompleted ? 'project-table-hide' : '']"> <div v-if="projectData.task_num > 0 && projectData.panel_show_task_complete == 1" :class="['project-table-body', !projectData.cacheParameter.showCompleted ? 'project-table-hide' : '']">
<Row class="task-row"> <Row class="task-row">
<Col span="12" class="row-title"> <Col span="12" class="row-title">
<i class="taskfont" @click="toggleParameter('showCompleted')">&#xe689;</i> <i class="taskfont" @click="toggleParameter('showCompleted')">&#xe689;</i>
@ -347,9 +347,8 @@
<DrawerOverlay <DrawerOverlay
v-model="permissionShow" v-model="permissionShow"
placement="right" placement="right"
:beforeClose="workflowBeforeClose"
:size="650"> :size="650">
<ProjectPermission ref="permission" v-if="permissionShow" :project-id="projectId"/> <ProjectPermission ref="permission" v-if="permissionShow" @close="()=>{ this.permissionShow = false }" :project-id="projectId"/>
</DrawerOverlay> </DrawerOverlay>
<!--成员管理--> <!--成员管理-->

View File

@ -4,61 +4,69 @@
{{$L('权限设置')}} {{$L('权限设置')}}
<div class="title-icon"> <div class="title-icon">
<Loading v-if="loadIng > 0"/> <Loading v-if="loadIng > 0"/>
<Icon v-else type="ios-refresh" @click="getData"/> <Icon v-else type="ios-refresh" @click="getData()"/>
</div> </div>
</div> </div>
<div class="permission-content"> <div class="permission-content">
<Form :model="formData" label-width="100" label-position="right"> <Form :model="formData" label-width="100" label-position="right">
<!-- 任务权限 --> <!-- 任务权限 -->
<div class="project-permission-title" >{{$L('任务权限')}}:</div> <div class="project-permission-title" >{{$L('任务权限')}}:</div>
<FormItem :label="$L('添加任务')"> <FormItem :label="$L('添加任务')">
<CheckboxGroup v-model="formData.task_add"> <CheckboxGroup v-model="formData.task_add">
<Checkbox :label="$L('项目负责人')" :value="1" disabled></Checkbox> <Checkbox :label="1" disabled>{{ $L('项目负责人') }}</Checkbox>
<Checkbox :label="$L('项目成员')" :value="3"></Checkbox> <Checkbox :label="3">{{ $L('项目成员') }}</Checkbox>
</CheckboxGroup> </CheckboxGroup>
</FormItem> </FormItem>
<FormItem :label="$L('修改任务')"> <FormItem :label="$L('修改任务')">
<CheckboxGroup v-model="formData.task_edit"> <CheckboxGroup v-model="formData.task_update">
<Checkbox :label="$L('项目负责人')" :value="1" disabled></Checkbox> <Checkbox :label="1" disabled>{{ $L('项目负责人') }}</Checkbox>
<Checkbox :label="$L('任务负责人')" :value="2"></Checkbox> <Checkbox :label="2">{{ $L('任务负责人') }}</Checkbox>
<Checkbox :label="$L('项目成员')" :value="3"></Checkbox> <Checkbox :label="3">{{ $L('项目成员') }}</Checkbox>
</CheckboxGroup> </CheckboxGroup>
</FormItem> </FormItem>
<FormItem :label="$L('标记完成')"> <FormItem :label="$L('标记完成')">
<CheckboxGroup v-model="formData.task_mark_complete"> <CheckboxGroup v-model="formData.task_update_complete">
<Checkbox :label="$L('项目负责人')" :value="1" disabled></Checkbox> <Checkbox :label="1" disabled>{{ $L('项目负责人') }}</Checkbox>
<Checkbox :label="$L('任务负责人')" :value="2"></Checkbox> <Checkbox :label="2">{{ $L('任务负责人') }}</Checkbox>
<Checkbox :label="$L('项目成员')" :value="3"></Checkbox> <Checkbox :label="3">{{ $L('项目成员') }}</Checkbox>
</CheckboxGroup> </CheckboxGroup>
</FormItem> </FormItem>
<FormItem :label="$L('归档任务')"> <FormItem :label="$L('归档任务')">
<CheckboxGroup v-model="formData.task_archiving"> <CheckboxGroup v-model="formData.task_archived">
<Checkbox :label="$L('项目负责人')" :value="1" disabled></Checkbox> <Checkbox :label="1" disabled>{{ $L('项目负责人') }}</Checkbox>
<Checkbox :label="$L('任务负责人')" :value="2"></Checkbox> <Checkbox :label="2">{{ $L('任务负责人') }}</Checkbox>
<Checkbox :label="$L('项目成员')" :value="3"></Checkbox> <Checkbox :label="3">{{ $L('项目成员') }}</Checkbox>
</CheckboxGroup> </CheckboxGroup>
</FormItem> </FormItem>
<FormItem :label="$L('删除任务')"> <FormItem :label="$L('删除任务')">
<CheckboxGroup v-model="formData.task_delete"> <CheckboxGroup v-model="formData.task_remove">
<Checkbox :label="$L('项目负责人')" :value="1" disabled></Checkbox> <Checkbox :label="1" disabled>{{ $L('项目负责人') }}</Checkbox>
<Checkbox :label="$L('任务负责人')" :value="2"></Checkbox> <Checkbox :label="2">{{ $L('任务负责人') }}</Checkbox>
<Checkbox :label="$L('项目成员')" :value="3"></Checkbox> <Checkbox :label="3"> {{ $L('项目成员') }}</Checkbox>
</CheckboxGroup>
</FormItem>
<FormItem :label="$L('任务移动')">
<CheckboxGroup v-model="formData.task_move">
<Checkbox :label="1" disabled>{{ $L('项目负责人') }}</Checkbox>
<Checkbox :label="2">{{ $L('任务负责人') }}</Checkbox>
<Checkbox :label="3"> {{ $L('项目成员') }}</Checkbox>
</CheckboxGroup> </CheckboxGroup>
</FormItem> </FormItem>
<!-- 面板显示 --> <!-- 面板显示 -->
<div class="project-permission-title" >{{$L('面板显示')}}:</div> <div class="project-permission-title" >{{$L('面板显示')}}:</div>
<FormItem :label="$L('显示已完成')"> <FormItem :label="$L('显示已完成')">
<RadioGroup v-model="formData.panel_display"> <RadioGroup v-model="formData.panel_show_task_complete">
<Radio :label="$L('默认显示')" :value="1" ></Radio> <Radio :label="1">{{ $L('默认显示') }}</Radio>
<Radio :label="$L('默认不显示')" :value="0"></Radio> <Radio :label="0">{{ $L('默认不显示') }}</Radio>
</RadioGroup> </RadioGroup>
<div class="form-placeholder">{{ $L('项目面板默认显示已完成的任务') }}</div> <div class="form-placeholder">{{ $L('项目面板默认显示已完成的任务') }}</div>
</FormItem> </FormItem>
</Form> </Form>
<div slot="footer" class="ivu-modal-footer adaption">
<Button type="default" @click="onClose()">{{$L('取消')}}</Button>
<Button type="primary" @click="updateData()">{{$L('修改')}}</Button>
</div>
</div> </div>
</div> </div>
</template> </template>
@ -76,11 +84,12 @@ export default {
return { return {
formData: { formData: {
task_add: [1,3], task_add: [1,3],
task_edit: [1], task_update: [1,2],
task_mark_complete: [1], task_update_complete: [1,2],
task_archiving: [1], task_archived: [1,2],
task_delete: [1], task_remove: [1,2],
panel_display: 0 task_move: [1,2],
panel_show_task_complete: 1
} }
} }
}, },
@ -105,17 +114,12 @@ export default {
getData() { getData() {
this.loadIng++; this.loadIng++;
this.$store.dispatch("call", { this.$store.dispatch("call", {
url: 'project/flow/list', url: 'project/permission',
data: { data: {
project_id: this.projectId, project_id: this.projectId,
}, },
}).then(({data}) => { }).then(({data}) => {
// this.list = data.map(item => { this.formData = data.permissions;
// item.project_flow_bak = JSON.stringify(item.project_flow_item)
// return item;
// });
// this.openIndex = this.list.length === 1 ? ("index_" + this.list[0].id) : ""
// this.$nextTick(this.syncScroller);
}).catch(({msg}) => { }).catch(({msg}) => {
$A.modalError(msg); $A.modalError(msg);
}).finally(_ => { }).finally(_ => {
@ -123,6 +127,28 @@ export default {
}); });
}, },
updateData() {
this.loadIng++;
this.$store.dispatch("call", {
url: 'project/permission/update',
method: 'post',
data: {
project_id: this.projectId,
...this.formData
},
}).then(({data}) => {
this.formData = data.permissions;
this.$Message.success(this.$L('修改成功'));
}).catch(({msg}) => {
$A.modalError(msg);
}).finally(_ => {
this.loadIng--;
});
},
onClose() {
this.$emit('close')
},
} }
} }
</script> </script>