no message

This commit is contained in:
kuaifan 2021-06-07 16:11:18 +08:00
parent b0a5a73153
commit b6cbb66ae3
5 changed files with 233 additions and 7 deletions

View File

@ -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('删除失败');
}
/**

View File

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

View File

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

View File

@ -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 ? '&#xe61d;' : '&#xe61c;'"></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({

View File

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