no message
This commit is contained in:
parent
b0a5a73153
commit
b6cbb66ae3
@ -458,7 +458,9 @@ class ProjectController extends AbstractController
|
|||||||
* 添加、修改 任务列表
|
* 添加、修改 任务列表
|
||||||
*
|
*
|
||||||
* @apiParam {Number} project_id 项目ID
|
* @apiParam {Number} project_id 项目ID
|
||||||
|
* @apiParam {Number} [column_id] 列表ID(留空为添加列表)
|
||||||
* @apiParam {String} name 列表名称
|
* @apiParam {String} name 列表名称
|
||||||
|
* @apiParam {String} color 颜色
|
||||||
*/
|
*/
|
||||||
public function column__add()
|
public function column__add()
|
||||||
{
|
{
|
||||||
@ -472,6 +474,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'));
|
||||||
$name = trim(Request::input('name'));
|
$name = trim(Request::input('name'));
|
||||||
|
$color = trim(Request::input('color'));
|
||||||
if (empty($name)) {
|
if (empty($name)) {
|
||||||
return Base::retError('列表名称不能为空');
|
return Base::retError('列表名称不能为空');
|
||||||
}
|
}
|
||||||
@ -486,19 +489,60 @@ class ProjectController extends AbstractController
|
|||||||
}
|
}
|
||||||
//
|
//
|
||||||
if ($column_id > 0) {
|
if ($column_id > 0) {
|
||||||
$column = ProjectColumn::find($column_id);
|
$column = ProjectColumn::whereId($column_id)->whereProjectId($project_id)->first();
|
||||||
|
if (empty($column)) {
|
||||||
|
return Base::retError('列表不存在');
|
||||||
|
}
|
||||||
|
$column->name = $name;
|
||||||
|
$column->color = $color;
|
||||||
|
$column->save();
|
||||||
|
return Base::retSuccess('修改成功', $column);
|
||||||
} else {
|
} else {
|
||||||
$column = ProjectColumn::createInstance([
|
$column = ProjectColumn::createInstance([
|
||||||
'project_id' => $project->id,
|
'project_id' => $project->id,
|
||||||
|
'name' => $name,
|
||||||
|
'color' => $color,
|
||||||
]);
|
]);
|
||||||
}
|
|
||||||
if ($column) {
|
|
||||||
$column->name = $name;
|
|
||||||
$column->save();
|
$column->save();
|
||||||
return Base::retSuccess('添加成功', $column);
|
return Base::retSuccess('添加成功', $column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除任务列表
|
||||||
|
*
|
||||||
|
* @apiParam {Number} project_id 项目ID
|
||||||
|
* @apiParam {Number} column_id 列表ID(留空为添加列表)
|
||||||
|
*/
|
||||||
|
public function column__delete()
|
||||||
|
{
|
||||||
|
$user = User::authE();
|
||||||
|
if (Base::isError($user)) {
|
||||||
|
return $user;
|
||||||
} else {
|
} else {
|
||||||
|
$user = User::IDE($user['data']);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
$project_id = intval(Request::input('project_id'));
|
||||||
|
$column_id = intval(Request::input('column_id'));
|
||||||
|
// 项目
|
||||||
|
$project = Project::select($this->projectSelect)
|
||||||
|
->join('project_users', 'projects.id', '=', 'project_users.project_id')
|
||||||
|
->where('projects.id', $project_id)
|
||||||
|
->where('project_users.userid', $user->userid)
|
||||||
|
->first();
|
||||||
|
if (empty($project)) {
|
||||||
|
return Base::retError('项目不存在或不在成员列表内');
|
||||||
|
}
|
||||||
|
//
|
||||||
|
$column = ProjectColumn::whereId($column_id)->whereProjectId($project_id)->first();
|
||||||
|
if (empty($column)) {
|
||||||
return Base::retError('列表不存在');
|
return Base::retError('列表不存在');
|
||||||
}
|
}
|
||||||
|
if ($column->deleteColumn()) {
|
||||||
|
return Base::retSuccess('删除成功');
|
||||||
|
}
|
||||||
|
return Base::retError('删除失败');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -111,6 +111,7 @@ class Project extends AbstractModel
|
|||||||
{
|
{
|
||||||
$result = AbstractModel::transaction(function () {
|
$result = AbstractModel::transaction(function () {
|
||||||
ProjectTask::whereProjectId($this->id)->delete();
|
ProjectTask::whereProjectId($this->id)->delete();
|
||||||
|
ProjectColumn::whereProjectId($this->id)->delete();
|
||||||
WebSocketDialog::whereId($this->dialog_id)->delete();
|
WebSocketDialog::whereId($this->dialog_id)->delete();
|
||||||
if ($this->delete()) {
|
if ($this->delete()) {
|
||||||
return Base::retSuccess('success');
|
return Base::retSuccess('success');
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Module\Base;
|
||||||
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class ProjectColumn
|
* Class ProjectColumn
|
||||||
*
|
*
|
||||||
@ -27,6 +30,8 @@ namespace App\Models;
|
|||||||
*/
|
*/
|
||||||
class ProjectColumn extends AbstractModel
|
class ProjectColumn extends AbstractModel
|
||||||
{
|
{
|
||||||
|
use SoftDeletes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||||
*/
|
*/
|
||||||
@ -34,4 +39,21 @@ class ProjectColumn extends AbstractModel
|
|||||||
{
|
{
|
||||||
return $this->hasMany(projectTask::class, 'column_id', 'id')->orderByDesc('id');
|
return $this->hasMany(projectTask::class, 'column_id', 'id')->orderByDesc('id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除列表
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function deleteColumn()
|
||||||
|
{
|
||||||
|
$result = AbstractModel::transaction(function () {
|
||||||
|
ProjectTask::whereColumnId($this->id)->delete();
|
||||||
|
if ($this->delete()) {
|
||||||
|
return Base::retSuccess('success');
|
||||||
|
} else {
|
||||||
|
return Base::retError('error');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return Base::isSuccess($result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,13 +55,28 @@
|
|||||||
<div v-if="projectListPanel" class="project-column">
|
<div v-if="projectListPanel" class="project-column">
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="column in projectDetail.project_column">
|
<li v-for="column in projectDetail.project_column">
|
||||||
<div class="column-head">
|
<div
|
||||||
|
:class="['column-head', column.color ? 'custom-color' : '']"
|
||||||
|
:style="column.color ? {backgroundColor: column.color}:null">
|
||||||
<div class="column-head-title">
|
<div class="column-head-title">
|
||||||
<span><AutoTip>{{column.name}}</AutoTip></span>
|
<span><AutoTip>{{column.name}}</AutoTip></span>
|
||||||
<em>({{column.project_task.length}})</em>
|
<em>({{column.project_task.length}})</em>
|
||||||
</div>
|
</div>
|
||||||
<div class="column-head-icon">
|
<div class="column-head-icon">
|
||||||
<Icon type="ios-more" />
|
<Poptip>
|
||||||
|
<Icon type="ios-more" />
|
||||||
|
<div class="more-content" slot="content">
|
||||||
|
<ul>
|
||||||
|
<li @click="modifyColumn(column)"><Icon type="md-create" />{{$L('修改')}}</li>
|
||||||
|
<li @click="removeColumn(column)"><Icon type="md-trash" />{{$L('删除')}}</li>
|
||||||
|
<li class="divided"></li>
|
||||||
|
<li class="title">{{$L('颜色')}}</li>
|
||||||
|
<li v-for="(c, k) in colorList" :key="k" @click="saveColumn(column, column.name, c.color)">
|
||||||
|
<i class="iconfont" :style="{color:c.color}" v-html="c.color == column.color ? '' : ''"></i>{{$L(c.name)}}
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</Poptip>
|
||||||
<Icon type="md-add" @click="addBefore(column)" />
|
<Icon type="md-add" @click="addBefore(column)" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -393,6 +408,19 @@ export default {
|
|||||||
transferShow: false,
|
transferShow: false,
|
||||||
transferData: {},
|
transferData: {},
|
||||||
transferLoad: 0,
|
transferLoad: 0,
|
||||||
|
|
||||||
|
colorList: [
|
||||||
|
{name: '默认', color: ''},
|
||||||
|
{name: '灰色', color: '#6C6F71'},
|
||||||
|
{name: '棕色', color: '#695C56'},
|
||||||
|
{name: '橘色', color: '#9E7549'},
|
||||||
|
{name: '黄色', color: '#A0904F'},
|
||||||
|
{name: '绿色', color: '#4D7771'},
|
||||||
|
{name: '蓝色', color: '#4C7088'},
|
||||||
|
{name: '紫色', color: '#6B5C8D'},
|
||||||
|
{name: '粉色', color: '#8E5373'},
|
||||||
|
{name: '红色', color: '#9D6058'},
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -558,6 +586,77 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
modifyColumn(column) {
|
||||||
|
$A.modalInput({
|
||||||
|
value: column.name,
|
||||||
|
title: "修改列表",
|
||||||
|
placeholder: "输入列表名称",
|
||||||
|
onOk: (value) => {
|
||||||
|
if (value) {
|
||||||
|
this.saveColumn(column, value, column.color);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
removeColumn(column) {
|
||||||
|
$A.modalConfirm({
|
||||||
|
title: '删除列表',
|
||||||
|
content: '你确定要删除列表【' + column.name + '】及列表内的任务吗?',
|
||||||
|
loading: true,
|
||||||
|
onOk: () => {
|
||||||
|
$A.apiAjax({
|
||||||
|
url: 'project/column/delete',
|
||||||
|
data: {
|
||||||
|
project_id: this.projectDetail.id,
|
||||||
|
column_id: column.id,
|
||||||
|
},
|
||||||
|
error: () => {
|
||||||
|
this.$Modal.remove();
|
||||||
|
$A.modalAlert('网络繁忙,请稍后再试!');
|
||||||
|
},
|
||||||
|
success: ({ret, data, msg}) => {
|
||||||
|
this.$Modal.remove();
|
||||||
|
if (ret === 1) {
|
||||||
|
$A.messageSuccess(msg);
|
||||||
|
this.$store.commit('getProjectDetail', this.projectDetail.id);
|
||||||
|
}else{
|
||||||
|
$A.modalError(msg, 301);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
saveColumn(column, name, color) {
|
||||||
|
let bakName = column.name;
|
||||||
|
let bakColor = column.color;
|
||||||
|
this.$set(column, 'name', name);
|
||||||
|
this.$set(column, 'color', color);
|
||||||
|
//
|
||||||
|
$A.apiAjax({
|
||||||
|
url: 'project/column/add',
|
||||||
|
data: {
|
||||||
|
project_id: this.projectDetail.id,
|
||||||
|
column_id: column.id,
|
||||||
|
name: name,
|
||||||
|
color: color,
|
||||||
|
},
|
||||||
|
error: () => {
|
||||||
|
this.$set(column, 'name', bakName);
|
||||||
|
this.$set(column, 'color', bakColor);
|
||||||
|
},
|
||||||
|
success: ({ret, data, msg}) => {
|
||||||
|
if (ret !== 1) {
|
||||||
|
this.$set(column, 'name', bakName);
|
||||||
|
this.$set(column, 'color', bakColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
onAddTask() {
|
onAddTask() {
|
||||||
this.taskLoad++;
|
this.taskLoad++;
|
||||||
$A.apiAjax({
|
$A.apiAjax({
|
||||||
|
62
resources/assets/sass/project-list.scss
vendored
62
resources/assets/sass/project-list.scss
vendored
@ -4,7 +4,7 @@
|
|||||||
.project-head {
|
.project-head {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
margin: 32px 32px 16px;
|
margin: 32px 32px 18px;
|
||||||
.project-titbox {
|
.project-titbox {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
@ -215,6 +215,66 @@
|
|||||||
color: #888888;
|
color: #888888;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.ivu-poptip-popper {
|
||||||
|
color: #515a6e;
|
||||||
|
min-width: 150px;
|
||||||
|
.ivu-poptip-body {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.more-content {
|
||||||
|
ul {
|
||||||
|
margin: 10px 0;
|
||||||
|
> li {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
cursor: pointer;
|
||||||
|
list-style: none;
|
||||||
|
line-height: 30px;
|
||||||
|
padding: 0 20px;
|
||||||
|
> i {
|
||||||
|
font-size: 18px;
|
||||||
|
margin-right: 8px;
|
||||||
|
padding: 0;
|
||||||
|
color: #bbbbbb;
|
||||||
|
&.ivu-icon {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.title,
|
||||||
|
&.divided {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #888888;
|
||||||
|
cursor: default;
|
||||||
|
&:hover {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.divided {
|
||||||
|
margin-top: 5px;
|
||||||
|
height: 6px;
|
||||||
|
border-top: 1px solid #F4F4F5;
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.custom-color {
|
||||||
|
color: #ffffff;
|
||||||
|
.column-head-title {
|
||||||
|
> em {
|
||||||
|
color: rgba(255, 255, 255, 0.6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.ivu-icon {
|
||||||
|
color: rgba(255, 255, 255, 0.5);
|
||||||
|
&:hover {
|
||||||
|
color: rgba(255, 255, 255, 0.9);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
> ul {
|
> ul {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user