feat: 添加项目权限功能 - 30%

This commit is contained in:
weifashi 2023-11-20 17:16:10 +08:00
parent 5682943c24
commit ecdbf8765f
6 changed files with 244 additions and 0 deletions

View File

@ -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');
}
}

View File

@ -1400,3 +1400,4 @@ APP推送
请输入时长
必须大于0
忍心拒绝
请等待打包完成

View File

@ -52,6 +52,7 @@
<Icon class="menu-icon" type="ios-more" />
<EDropdownMenu v-if="projectData.owner_userid === userId" slot="dropdown">
<EDropdownItem command="setting">{{$L('项目设置')}}</EDropdownItem>
<EDropdownItem command="permissions">{{$L('权限设置')}}</EDropdownItem>
<EDropdownItem command="workflow">{{$L('工作流设置')}}</EDropdownItem>
<EDropdownItem command="user" divided>{{$L('成员管理')}}</EDropdownItem>
<EDropdownItem command="invite">{{$L('邀请链接')}}</EDropdownItem>
@ -342,6 +343,15 @@
</div>
</Modal>
<!--项目权限-->
<DrawerOverlay
v-model="permissionShow"
placement="right"
:beforeClose="workflowBeforeClose"
:size="650">
<ProjectPermission ref="permission" v-if="permissionShow" :project-id="projectId"/>
</DrawerOverlay>
<!--成员管理-->
<Modal
v-model="userShow"
@ -472,6 +482,7 @@ import TaskArchived from "./TaskArchived";
import ProjectLog from "./ProjectLog";
import DrawerOverlay from "../../../components/DrawerOverlay";
import ProjectWorkflow from "./ProjectWorkflow";
import ProjectPermission from "./ProjectPermission";
import TaskMenu from "./TaskMenu";
import TaskDeleted from "./TaskDeleted";
import ProjectGantt from "./ProjectGantt";
@ -485,6 +496,7 @@ export default {
MarkdownPreviewNostyle,
TaskMenu,
ProjectWorkflow,
ProjectPermission,
DrawerOverlay,
ProjectLog, TaskArchived, TaskRow, Draggable, TaskAddSimple, TaskPriority, TaskDeleted, ProjectGantt},
data() {
@ -512,6 +524,10 @@ export default {
settingData: {},
settingLoad: 0,
permissionShow: false,
permissionShowData: {},
permissionShowLoad: 0,
userShow: false,
userData: {},
userLoad: 0,
@ -1249,6 +1265,16 @@ export default {
});
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":
if (this.projectData.owner_userid !== this.userId) {
return;

View File

@ -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>

View File

@ -13,6 +13,7 @@
@import "project-management";
@import "project-panel";
@import "project-workflow";
@import "project-permission";
@import "task-add";
@import "task-add-simple";
@import "task-archived";

View 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;
}
}
}