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} [column_id] 列表ID(留空为添加列表)
|
||||
* @apiParam {String} name 列表名称
|
||||
* @apiParam {String} color 颜色
|
||||
*/
|
||||
public function column__add()
|
||||
{
|
||||
@ -472,6 +474,7 @@ class ProjectController extends AbstractController
|
||||
$project_id = intval(Request::input('project_id'));
|
||||
$column_id = intval(Request::input('column_id'));
|
||||
$name = trim(Request::input('name'));
|
||||
$color = trim(Request::input('color'));
|
||||
if (empty($name)) {
|
||||
return Base::retError('列表名称不能为空');
|
||||
}
|
||||
@ -486,19 +489,60 @@ class ProjectController extends AbstractController
|
||||
}
|
||||
//
|
||||
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 {
|
||||
$column = ProjectColumn::createInstance([
|
||||
'project_id' => $project->id,
|
||||
'name' => $name,
|
||||
'color' => $color,
|
||||
]);
|
||||
}
|
||||
if ($column) {
|
||||
$column->name = $name;
|
||||
$column->save();
|
||||
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 {
|
||||
$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('列表不存在');
|
||||
}
|
||||
if ($column->deleteColumn()) {
|
||||
return Base::retSuccess('删除成功');
|
||||
}
|
||||
return Base::retError('删除失败');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -111,6 +111,7 @@ class Project extends AbstractModel
|
||||
{
|
||||
$result = AbstractModel::transaction(function () {
|
||||
ProjectTask::whereProjectId($this->id)->delete();
|
||||
ProjectColumn::whereProjectId($this->id)->delete();
|
||||
WebSocketDialog::whereId($this->dialog_id)->delete();
|
||||
if ($this->delete()) {
|
||||
return Base::retSuccess('success');
|
||||
|
@ -2,6 +2,9 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Module\Base;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
/**
|
||||
* Class ProjectColumn
|
||||
*
|
||||
@ -27,6 +30,8 @@ namespace App\Models;
|
||||
*/
|
||||
class ProjectColumn extends AbstractModel
|
||||
{
|
||||
use SoftDeletes;
|
||||
|
||||
/**
|
||||
* @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 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">
|
||||
<ul>
|
||||
<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">
|
||||
<span><AutoTip>{{column.name}}</AutoTip></span>
|
||||
<em>({{column.project_task.length}})</em>
|
||||
</div>
|
||||
<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)" />
|
||||
</div>
|
||||
</div>
|
||||
@ -393,6 +408,19 @@ export default {
|
||||
transferShow: false,
|
||||
transferData: {},
|
||||
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() {
|
||||
this.taskLoad++;
|
||||
$A.apiAjax({
|
||||
|
62
resources/assets/sass/project-list.scss
vendored
62
resources/assets/sass/project-list.scss
vendored
@ -4,7 +4,7 @@
|
||||
.project-head {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin: 32px 32px 16px;
|
||||
margin: 32px 32px 18px;
|
||||
.project-titbox {
|
||||
flex: 1;
|
||||
margin-bottom: 16px;
|
||||
@ -215,6 +215,66 @@
|
||||
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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user