mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-12 03:01:12 +00:00
feat: 添加项目权限功能 - 30%
This commit is contained in:
parent
5682943c24
commit
ecdbf8765f
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateProjectPermissionsTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
if (Schema::hasTable('project_permissions'))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Schema::create('project_permissions', function (Blueprint $table) {
|
||||||
|
$table->bigIncrements('id');
|
||||||
|
$table->bigInteger('project_id')->nullable()->default(0)->comment('项目ID');
|
||||||
|
$table->text('permissions')->nullable()->comment('权限');
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('project_permissions');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1400,3 +1400,4 @@ APP推送
|
|||||||
请输入时长
|
请输入时长
|
||||||
必须大于0
|
必须大于0
|
||||||
忍心拒绝
|
忍心拒绝
|
||||||
|
请等待打包完成
|
||||||
|
|||||||
@ -52,6 +52,7 @@
|
|||||||
<Icon class="menu-icon" type="ios-more" />
|
<Icon class="menu-icon" type="ios-more" />
|
||||||
<EDropdownMenu v-if="projectData.owner_userid === userId" slot="dropdown">
|
<EDropdownMenu v-if="projectData.owner_userid === userId" slot="dropdown">
|
||||||
<EDropdownItem command="setting">{{$L('项目设置')}}</EDropdownItem>
|
<EDropdownItem command="setting">{{$L('项目设置')}}</EDropdownItem>
|
||||||
|
<EDropdownItem command="permissions">{{$L('权限设置')}}</EDropdownItem>
|
||||||
<EDropdownItem command="workflow">{{$L('工作流设置')}}</EDropdownItem>
|
<EDropdownItem command="workflow">{{$L('工作流设置')}}</EDropdownItem>
|
||||||
<EDropdownItem command="user" divided>{{$L('成员管理')}}</EDropdownItem>
|
<EDropdownItem command="user" divided>{{$L('成员管理')}}</EDropdownItem>
|
||||||
<EDropdownItem command="invite">{{$L('邀请链接')}}</EDropdownItem>
|
<EDropdownItem command="invite">{{$L('邀请链接')}}</EDropdownItem>
|
||||||
@ -342,6 +343,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
|
<!--项目权限-->
|
||||||
|
<DrawerOverlay
|
||||||
|
v-model="permissionShow"
|
||||||
|
placement="right"
|
||||||
|
:beforeClose="workflowBeforeClose"
|
||||||
|
:size="650">
|
||||||
|
<ProjectPermission ref="permission" v-if="permissionShow" :project-id="projectId"/>
|
||||||
|
</DrawerOverlay>
|
||||||
|
|
||||||
<!--成员管理-->
|
<!--成员管理-->
|
||||||
<Modal
|
<Modal
|
||||||
v-model="userShow"
|
v-model="userShow"
|
||||||
@ -472,6 +482,7 @@ import TaskArchived from "./TaskArchived";
|
|||||||
import ProjectLog from "./ProjectLog";
|
import ProjectLog from "./ProjectLog";
|
||||||
import DrawerOverlay from "../../../components/DrawerOverlay";
|
import DrawerOverlay from "../../../components/DrawerOverlay";
|
||||||
import ProjectWorkflow from "./ProjectWorkflow";
|
import ProjectWorkflow from "./ProjectWorkflow";
|
||||||
|
import ProjectPermission from "./ProjectPermission";
|
||||||
import TaskMenu from "./TaskMenu";
|
import TaskMenu from "./TaskMenu";
|
||||||
import TaskDeleted from "./TaskDeleted";
|
import TaskDeleted from "./TaskDeleted";
|
||||||
import ProjectGantt from "./ProjectGantt";
|
import ProjectGantt from "./ProjectGantt";
|
||||||
@ -485,6 +496,7 @@ export default {
|
|||||||
MarkdownPreviewNostyle,
|
MarkdownPreviewNostyle,
|
||||||
TaskMenu,
|
TaskMenu,
|
||||||
ProjectWorkflow,
|
ProjectWorkflow,
|
||||||
|
ProjectPermission,
|
||||||
DrawerOverlay,
|
DrawerOverlay,
|
||||||
ProjectLog, TaskArchived, TaskRow, Draggable, TaskAddSimple, TaskPriority, TaskDeleted, ProjectGantt},
|
ProjectLog, TaskArchived, TaskRow, Draggable, TaskAddSimple, TaskPriority, TaskDeleted, ProjectGantt},
|
||||||
data() {
|
data() {
|
||||||
@ -512,6 +524,10 @@ export default {
|
|||||||
settingData: {},
|
settingData: {},
|
||||||
settingLoad: 0,
|
settingLoad: 0,
|
||||||
|
|
||||||
|
permissionShow: false,
|
||||||
|
permissionShowData: {},
|
||||||
|
permissionShowLoad: 0,
|
||||||
|
|
||||||
userShow: false,
|
userShow: false,
|
||||||
userData: {},
|
userData: {},
|
||||||
userLoad: 0,
|
userLoad: 0,
|
||||||
@ -1249,6 +1265,16 @@ export default {
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "permissions":
|
||||||
|
// this.$set(this.settingData, 'name', this.projectData.name);
|
||||||
|
// this.$set(this.settingData, 'desc', this.projectData.desc);
|
||||||
|
this.permissionShow = true;
|
||||||
|
// this.$nextTick(() => {
|
||||||
|
// this.$refs.projectName.focus()
|
||||||
|
// setTimeout(this.$refs.projectDesc.resizeTextarea, 0)
|
||||||
|
// });
|
||||||
|
break;
|
||||||
|
|
||||||
case "user":
|
case "user":
|
||||||
if (this.projectData.owner_userid !== this.userId) {
|
if (this.projectData.owner_userid !== this.userId) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -0,0 +1,128 @@
|
|||||||
|
<template>
|
||||||
|
<div class="project-permission">
|
||||||
|
<div class="permission-title">
|
||||||
|
{{$L('权限设置')}}
|
||||||
|
<div class="title-icon">
|
||||||
|
<Loading v-if="loadIng > 0"/>
|
||||||
|
<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>
|
||||||
|
</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>
|
||||||
|
</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>
|
||||||
|
</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>
|
||||||
|
</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>
|
||||||
|
</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>
|
||||||
|
<div class="form-placeholder">{{ $L('项目面板默认显示已完成的任务') }}</div>
|
||||||
|
</FormItem>
|
||||||
|
</Form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "ProjectPermission",
|
||||||
|
props: {
|
||||||
|
projectId: {
|
||||||
|
type: Number,
|
||||||
|
default: 0
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
formData: {
|
||||||
|
task_add: [1,3],
|
||||||
|
task_edit: [1],
|
||||||
|
task_mark_complete: [1],
|
||||||
|
task_archiving: [1],
|
||||||
|
task_delete: [1],
|
||||||
|
panel_display: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
watch: {
|
||||||
|
projectId: {
|
||||||
|
handler(val) {
|
||||||
|
if (val) {
|
||||||
|
this.getData()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
immediate: true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
getData() {
|
||||||
|
this.loadIng++;
|
||||||
|
this.$store.dispatch("call", {
|
||||||
|
url: 'project/flow/list',
|
||||||
|
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);
|
||||||
|
}).catch(({msg}) => {
|
||||||
|
$A.modalError(msg);
|
||||||
|
}).finally(_ => {
|
||||||
|
this.loadIng--;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@ -13,6 +13,7 @@
|
|||||||
@import "project-management";
|
@import "project-management";
|
||||||
@import "project-panel";
|
@import "project-panel";
|
||||||
@import "project-workflow";
|
@import "project-workflow";
|
||||||
|
@import "project-permission";
|
||||||
@import "task-add";
|
@import "task-add";
|
||||||
@import "task-add-simple";
|
@import "task-add-simple";
|
||||||
@import "task-archived";
|
@import "task-archived";
|
||||||
|
|||||||
52
resources/assets/sass/pages/components/project-permission.scss
vendored
Normal file
52
resources/assets/sass/pages/components/project-permission.scss
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
.project-permission {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
.permission-title {
|
||||||
|
color: $primary-title-color;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 1;
|
||||||
|
// style="font-weight: bold;line-height: 40px;"
|
||||||
|
padding: 20px 20px 24px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.title-icon {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
width: 14px;
|
||||||
|
height: 14px;
|
||||||
|
margin-left: 4px;
|
||||||
|
margin-top: 2px;
|
||||||
|
> i {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.permission-content {
|
||||||
|
flex: 1;
|
||||||
|
padding: 0 25px;
|
||||||
|
overflow: auto;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.project-permission-title{
|
||||||
|
font-weight: 500;
|
||||||
|
padding:20px 0 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ivu-form-item {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-placeholder {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user