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\WebSocketDialog;
use App\Exceptions\ApiException;
use App\Models\ProjectPermission;
use App\Module\BillMultipleExport;
use Illuminate\Support\Facades\DB;
use App\Models\ProjectTaskFlowChange;
@ -876,10 +877,10 @@ class ProjectController extends AbstractController
public function column__one()
{
User::auth();
//
//
$column_id = intval(Request::input('column_id'));
$deleted = Request::input('deleted', 'no');
//
//
$builder = ProjectColumn::whereId($column_id);
if ($deleted == 'all') {
$builder->withTrashed();
@ -890,10 +891,10 @@ class ProjectController extends AbstractController
if (empty($column)) {
return Base::retError('列表不存在');
}
//
//
return Base::retSuccess('success', $column);
}
/**
* @api {get} api/project/task/lists 19. 任务列表
@ -1004,6 +1005,10 @@ class ProjectController extends AbstractController
$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') {
$builder->withTrashed();
} elseif ($deleted == 'yes') {
@ -1507,7 +1512,7 @@ class ProjectController extends AbstractController
$archived = Request::input('archived', 'no');
//
$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'); // 项目负责人
if ($task->visibility != 1 && $user->userid != $project_userid) {
@ -1603,7 +1608,7 @@ class ProjectController extends AbstractController
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);
$file->delete();
@ -1732,6 +1737,7 @@ class ProjectController extends AbstractController
$column_id = $data['column_id'];
// 项目
$project = Project::userProject($project_id);
ProjectTask::userTaskPermission(ProjectPermission::TASK_ADD, $project);
// 列表
$column = null;
$newColumn = null;
@ -1808,7 +1814,7 @@ class ProjectController extends AbstractController
$task_id = intval(Request::input('task_id'));
$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) {
return Base::retError('主任务已完成无法添加子任务');
}
@ -1867,7 +1873,7 @@ class ProjectController extends AbstractController
$param = Request::input();
$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();
$owners = $taskUser->where('owner', 1)->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'));
$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) {
return Base::retError('子任务不支持此功能');
@ -2045,7 +2051,7 @@ class ProjectController extends AbstractController
$task_id = intval(Request::input('task_id'));
$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') {
$task->restoreTask();
return Base::retSuccess('操作成功', ['id' => $task->id]);
@ -2080,7 +2086,7 @@ class ProjectController extends AbstractController
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;
if ($record['flow'] && is_array($record['flow'])) {
@ -2219,21 +2225,21 @@ class ProjectController extends AbstractController
$task_id = intval(Request::input('task_id'));
$project_id = intval(Request::input('project_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){
return Base::retSuccess('移动成功', ['id' => $task_id]);
}
//
//
$project = Project::userProject($project_id);
$column = ProjectColumn::whereProjectId($project->id)->whereId($column_id)->first();
if (empty($column)) {
return Base::retError('列表不存在');
}
//
//
$task->moveTask($project_id,$column_id);
//
//
return Base::retSuccess('移动成功', ['id' => $task_id]);
}
@ -2411,4 +2417,64 @@ class ProjectController extends AbstractController
'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 string|null $archived_at 归档时间
* @property int|null $archived_userid 归档会员
* @property int|null $is_fixed 是否固定
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_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 whereDialogId($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 wherePersonal($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_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;
}

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 string|null $complete_at 完成时间
* @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 string|null $p_name 优先级名称
* @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 whereFlowItemName($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 whereLoopAt($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 whereUpdatedAt($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 withoutTrashed()
* @mixin \Eloquent
@ -1667,8 +1669,8 @@ class ProjectTask extends AbstractModel
/**
* 移动任务
* @param int $project_id
* @param int $column_id
* @param int $project_id
* @param int $column_id
* @return bool
*/
public function moveTask(int $projectId, int $columnId)
@ -1694,11 +1696,11 @@ class ProjectTask extends AbstractModel
$taskUser->project_id = $projectId;
$taskUser->save();
}
//
//
$this->project_id = $projectId;
$this->column_id = $columnId;
$this->save();
//
//
$this->addLog("移动{任务}");
});
$this->pushMsg('update');
@ -1728,14 +1730,11 @@ class ProjectTask extends AbstractModel
* @param int $task_id
* @param bool $archived true:仅限未归档, false:仅限已归档, null:不限制
* @param bool $trashed true:仅限未删除, false:仅限已删除, null:不限制
* @param int|bool $permission
* - 0|false 限制:项目成员、任务成员、任务群聊成员(任务成员 = 任务创建人+任务协助人+任务负责人)
* - 1|true 限制:项目负责人、任务成员
* - 2 已有负责人才限制true (子任务时如果是主任务负责人也可以)
* @param string $action 动作名称
* @param array $with
* @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));
if ($trashed === false) {
@ -1758,7 +1757,7 @@ class ProjectTask extends AbstractModel
try {
$project = Project::userProject($task->project_id);
} 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);
if (empty($project)) {
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);
}
}
//
if ($permission >= 2) {
$permission = $task->hasOwner() ? 1 : 0;
}
if ($permission && !$project->owner && !$task->permission(3)) {
throw new ApiException('仅限项目负责人、任务负责人、协助人员或任务创建者操作');
if ($action) {
self::userTaskPermission($action, $project, $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;
}
/**
* 递归处理数组
*
* @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加密
* @param $text

View File

@ -304,7 +304,7 @@
<TaskRow v-if="projectData.cacheParameter.showUndone" :list="unList" open-key="undone" @on-priority="addTaskOpen"/>
</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">
<Col span="12" class="row-title">
<i class="taskfont" @click="toggleParameter('showCompleted')">&#xe689;</i>
@ -347,9 +347,8 @@
<DrawerOverlay
v-model="permissionShow"
placement="right"
:beforeClose="workflowBeforeClose"
: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>
<!--成员管理-->

View File

@ -4,61 +4,69 @@
{{$L('权限设置')}}
<div class="title-icon">
<Loading v-if="loadIng > 0"/>
<Icon v-else type="ios-refresh" @click="getData"/>
<Icon v-else type="ios-refresh" @click="getData()"/>
</div>
</div>
<div class="permission-content">
<Form :model="formData" label-width="100" label-position="right">
<!-- 任务权限 -->
<div class="project-permission-title" >{{$L('任务权限')}}:</div>
<FormItem :label="$L('添加任务')">
<CheckboxGroup v-model="formData.task_add">
<Checkbox :label="$L('项目负责人')" :value="1" disabled></Checkbox>
<Checkbox :label="$L('项目成员')" :value="3"></Checkbox>
<Checkbox :label="1" disabled>{{ $L('项目负责人') }}</Checkbox>
<Checkbox :label="3">{{ $L('项目成员') }}</Checkbox>
</CheckboxGroup>
</FormItem>
<FormItem :label="$L('修改任务')">
<CheckboxGroup v-model="formData.task_edit">
<Checkbox :label="$L('项目负责人')" :value="1" disabled></Checkbox>
<Checkbox :label="$L('任务负责人')" :value="2"></Checkbox>
<Checkbox :label="$L('项目成员')" :value="3"></Checkbox>
<CheckboxGroup v-model="formData.task_update">
<Checkbox :label="1" disabled>{{ $L('项目负责人') }}</Checkbox>
<Checkbox :label="2">{{ $L('任务负责人') }}</Checkbox>
<Checkbox :label="3">{{ $L('项目成员') }}</Checkbox>
</CheckboxGroup>
</FormItem>
<FormItem :label="$L('标记完成')">
<CheckboxGroup v-model="formData.task_mark_complete">
<Checkbox :label="$L('项目负责人')" :value="1" disabled></Checkbox>
<Checkbox :label="$L('任务负责人')" :value="2"></Checkbox>
<Checkbox :label="$L('项目成员')" :value="3"></Checkbox>
<CheckboxGroup v-model="formData.task_update_complete">
<Checkbox :label="1" disabled>{{ $L('项目负责人') }}</Checkbox>
<Checkbox :label="2">{{ $L('任务负责人') }}</Checkbox>
<Checkbox :label="3">{{ $L('项目成员') }}</Checkbox>
</CheckboxGroup>
</FormItem>
<FormItem :label="$L('归档任务')">
<CheckboxGroup v-model="formData.task_archiving">
<Checkbox :label="$L('项目负责人')" :value="1" disabled></Checkbox>
<Checkbox :label="$L('任务负责人')" :value="2"></Checkbox>
<Checkbox :label="$L('项目成员')" :value="3"></Checkbox>
<CheckboxGroup v-model="formData.task_archived">
<Checkbox :label="1" disabled>{{ $L('项目负责人') }}</Checkbox>
<Checkbox :label="2">{{ $L('任务负责人') }}</Checkbox>
<Checkbox :label="3">{{ $L('项目成员') }}</Checkbox>
</CheckboxGroup>
</FormItem>
<FormItem :label="$L('删除任务')">
<CheckboxGroup v-model="formData.task_delete">
<Checkbox :label="$L('项目负责人')" :value="1" disabled></Checkbox>
<Checkbox :label="$L('任务负责人')" :value="2"></Checkbox>
<Checkbox :label="$L('项目成员')" :value="3"></Checkbox>
<CheckboxGroup v-model="formData.task_remove">
<Checkbox :label="1" disabled>{{ $L('项目负责人') }}</Checkbox>
<Checkbox :label="2">{{ $L('任务负责人') }}</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>
</FormItem>
<!-- 面板显示 -->
<div class="project-permission-title" >{{$L('面板显示')}}:</div>
<FormItem :label="$L('显示已完成')">
<RadioGroup v-model="formData.panel_display">
<Radio :label="$L('默认显示')" :value="1" ></Radio>
<Radio :label="$L('默认不显示')" :value="0"></Radio>
<RadioGroup v-model="formData.panel_show_task_complete">
<Radio :label="1">{{ $L('默认显示') }}</Radio>
<Radio :label="0">{{ $L('默认不显示') }}</Radio>
</RadioGroup>
<div class="form-placeholder">{{ $L('项目面板默认显示已完成的任务') }}</div>
</FormItem>
</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>
</template>
@ -76,11 +84,12 @@ export default {
return {
formData: {
task_add: [1,3],
task_edit: [1],
task_mark_complete: [1],
task_archiving: [1],
task_delete: [1],
panel_display: 0
task_update: [1,2],
task_update_complete: [1,2],
task_archived: [1,2],
task_remove: [1,2],
task_move: [1,2],
panel_show_task_complete: 1
}
}
},
@ -105,17 +114,12 @@ export default {
getData() {
this.loadIng++;
this.$store.dispatch("call", {
url: 'project/flow/list',
url: 'project/permission',
data: {
project_id: this.projectId,
},
}).then(({data}) => {
// this.list = data.map(item => {
// 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);
this.formData = data.permissions;
}).catch(({msg}) => {
$A.modalError(msg);
}).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>