mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-12 19:35:50 +00:00
合并整理
This commit is contained in:
parent
5adbd6e8f1
commit
d1036c3be7
@ -895,8 +895,9 @@ class ProjectController extends AbstractController
|
|||||||
* - yes:已归档
|
* - yes:已归档
|
||||||
* - no:未归档(默认)
|
* - no:未归档(默认)
|
||||||
* @apiParam {String} [deleted] 是否读取已删除
|
* @apiParam {String} [deleted] 是否读取已删除
|
||||||
* - yes:是
|
* - all:所有
|
||||||
* - no:否(默认)
|
* - yes:已删除
|
||||||
|
* - no:未删除(默认)
|
||||||
* @apiParam {Object} sorts 排序方式
|
* @apiParam {Object} sorts 排序方式
|
||||||
* - sorts.complete_at 完成时间:asc|desc
|
* - sorts.complete_at 完成时间:asc|desc
|
||||||
* - sorts.archived_at 归档时间:asc|desc
|
* - sorts.archived_at 归档时间:asc|desc
|
||||||
@ -931,9 +932,10 @@ class ProjectController extends AbstractController
|
|||||||
//
|
//
|
||||||
$scopeAll = false;
|
$scopeAll = false;
|
||||||
if ($parent_id > 0) {
|
if ($parent_id > 0) {
|
||||||
ProjectTask::userTask($parent_id, str_replace(['all', 'yes', 'no'], [null, false, true], $archived), false, [], true);
|
$isArchived = str_replace(['all', 'yes', 'no'], [null, false, true], $archived);
|
||||||
|
$isDeleted = str_replace(['all', 'yes', 'no'], [null, false, true], $deleted);
|
||||||
|
ProjectTask::userTask($parent_id, $isArchived, $isDeleted);
|
||||||
$scopeAll = true;
|
$scopeAll = true;
|
||||||
$builder->withTrashed();
|
|
||||||
$builder->where('project_tasks.parent_id', $parent_id);
|
$builder->where('project_tasks.parent_id', $parent_id);
|
||||||
} elseif ($parent_id === -1) {
|
} elseif ($parent_id === -1) {
|
||||||
$builder->where('project_tasks.parent_id', 0);
|
$builder->where('project_tasks.parent_id', 0);
|
||||||
@ -965,17 +967,19 @@ class ProjectController extends AbstractController
|
|||||||
//
|
//
|
||||||
if ($complete === 'yes') {
|
if ($complete === 'yes') {
|
||||||
$builder->whereNotNull('project_tasks.complete_at');
|
$builder->whereNotNull('project_tasks.complete_at');
|
||||||
} elseif ($complete === 'no' && $deleted == 'no') {
|
} elseif ($complete === 'no') {
|
||||||
$builder->whereNull('project_tasks.complete_at');
|
$builder->whereNull('project_tasks.complete_at');
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if ($archived == 'yes') {
|
if ($archived == 'yes') {
|
||||||
$builder->whereNotNull('project_tasks.archived_at');
|
$builder->whereNotNull('project_tasks.archived_at');
|
||||||
} elseif ($archived == 'no' && $deleted == 'no') {
|
} elseif ($archived == 'no') {
|
||||||
$builder->whereNull('project_tasks.archived_at');
|
$builder->whereNull('project_tasks.archived_at');
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if ($deleted == 'yes') {
|
if ($deleted == 'all') {
|
||||||
|
$builder->withTrashed();
|
||||||
|
} elseif ($deleted == 'yes') {
|
||||||
$builder->onlyTrashed();
|
$builder->onlyTrashed();
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@ -1221,7 +1225,8 @@ class ProjectController extends AbstractController
|
|||||||
$task_id = intval(Request::input('task_id'));
|
$task_id = intval(Request::input('task_id'));
|
||||||
$archived = Request::input('archived', 'no');
|
$archived = Request::input('archived', 'no');
|
||||||
//
|
//
|
||||||
$task = ProjectTask::userTask($task_id, str_replace(['all', 'yes', 'no'], [null, false, true], $archived), false, ['taskUser', 'taskTag'], true);
|
$isArchived = str_replace(['all', 'yes', 'no'], [null, false, true], $archived);
|
||||||
|
$task = ProjectTask::userTask($task_id, $isArchived, true, false, ['taskUser', 'taskTag']);
|
||||||
//
|
//
|
||||||
$data = $task->toArray();
|
$data = $task->toArray();
|
||||||
$data['project_name'] = $task->project?->name;
|
$data['project_name'] = $task->project?->name;
|
||||||
@ -1249,7 +1254,7 @@ class ProjectController extends AbstractController
|
|||||||
//
|
//
|
||||||
$task_id = intval(Request::input('task_id'));
|
$task_id = intval(Request::input('task_id'));
|
||||||
//
|
//
|
||||||
$task = ProjectTask::userTask($task_id, null, false, [], true);
|
$task = ProjectTask::userTask($task_id, null);
|
||||||
//
|
//
|
||||||
if (empty($task->content)) {
|
if (empty($task->content)) {
|
||||||
return Base::retSuccess('success', json_decode('{}'));
|
return Base::retSuccess('success', json_decode('{}'));
|
||||||
@ -1277,7 +1282,7 @@ class ProjectController extends AbstractController
|
|||||||
//
|
//
|
||||||
$task_id = intval(Request::input('task_id'));
|
$task_id = intval(Request::input('task_id'));
|
||||||
//
|
//
|
||||||
$task = ProjectTask::userTask($task_id, null, false, [], true);
|
$task = ProjectTask::userTask($task_id, null);
|
||||||
//
|
//
|
||||||
return Base::retSuccess('success', $task->taskFile);
|
return Base::retSuccess('success', $task->taskFile);
|
||||||
}
|
}
|
||||||
@ -1307,7 +1312,7 @@ class ProjectController extends AbstractController
|
|||||||
return Base::retError('文件不存在或已被删除');
|
return Base::retError('文件不存在或已被删除');
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
$task = ProjectTask::userTask($file->task_id, true, true);
|
$task = ProjectTask::userTask($file->task_id, true, true, true);
|
||||||
//
|
//
|
||||||
$task->pushMsg('filedelete', $file);
|
$task->pushMsg('filedelete', $file);
|
||||||
$file->delete();
|
$file->delete();
|
||||||
@ -1486,7 +1491,7 @@ class ProjectController extends AbstractController
|
|||||||
$task_id = intval(Request::input('task_id'));
|
$task_id = intval(Request::input('task_id'));
|
||||||
$name = Request::input('name');
|
$name = Request::input('name');
|
||||||
//
|
//
|
||||||
$task = ProjectTask::userTask($task_id, true, true);
|
$task = ProjectTask::userTask($task_id, true, true, true);
|
||||||
if ($task->complete_at) {
|
if ($task->complete_at) {
|
||||||
return Base::retError('主任务已完成无法添加子任务');
|
return Base::retError('主任务已完成无法添加子任务');
|
||||||
}
|
}
|
||||||
@ -1538,7 +1543,7 @@ class ProjectController extends AbstractController
|
|||||||
parse_str(Request::getContent(), $data);
|
parse_str(Request::getContent(), $data);
|
||||||
$task_id = intval($data['task_id']);
|
$task_id = intval($data['task_id']);
|
||||||
//
|
//
|
||||||
$task = ProjectTask::userTask($task_id, true, 2);
|
$task = ProjectTask::userTask($task_id, true, true, 2);
|
||||||
// 更新任务
|
// 更新任务
|
||||||
$updateMarking = [];
|
$updateMarking = [];
|
||||||
$task->updateTask($data, $updateMarking);
|
$task->updateTask($data, $updateMarking);
|
||||||
@ -1621,7 +1626,7 @@ class ProjectController extends AbstractController
|
|||||||
$task_id = intval(Request::input('task_id'));
|
$task_id = intval(Request::input('task_id'));
|
||||||
$type = Request::input('type', 'add');
|
$type = Request::input('type', 'add');
|
||||||
//
|
//
|
||||||
$task = ProjectTask::userTask($task_id, $type == 'add', true);
|
$task = ProjectTask::userTask($task_id, $type == 'add', true, true);
|
||||||
//
|
//
|
||||||
if ($task->parent_id > 0) {
|
if ($task->parent_id > 0) {
|
||||||
return Base::retError('子任务不支持此功能');
|
return Base::retError('子任务不支持此功能');
|
||||||
@ -1663,7 +1668,7 @@ class ProjectController extends AbstractController
|
|||||||
$task_id = intval(Request::input('task_id'));
|
$task_id = intval(Request::input('task_id'));
|
||||||
$type = Request::input('type', 'delete');
|
$type = Request::input('type', 'delete');
|
||||||
//
|
//
|
||||||
$task = ProjectTask::userTask($task_id, null, true, [], $type === 'recovery');
|
$task = ProjectTask::userTask($task_id, null, $type !== 'recovery', true);
|
||||||
if ($type == 'recovery') {
|
if ($type == 'recovery') {
|
||||||
$task->recoveryTask();
|
$task->recoveryTask();
|
||||||
return Base::retSuccess('操作成功', ['id' => $task->id]);
|
return Base::retSuccess('操作成功', ['id' => $task->id]);
|
||||||
@ -1698,7 +1703,7 @@ class ProjectController extends AbstractController
|
|||||||
return Base::retError('记录不存在');
|
return Base::retError('记录不存在');
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
$task = ProjectTask::userTask($projectLog->task_id, true, true);
|
$task = ProjectTask::userTask($projectLog->task_id, true, true, true);
|
||||||
//
|
//
|
||||||
$record = $projectLog->record;
|
$record = $projectLog->record;
|
||||||
if ($record['flow'] && is_array($record['flow'])) {
|
if ($record['flow'] && is_array($record['flow'])) {
|
||||||
@ -1933,7 +1938,7 @@ class ProjectController extends AbstractController
|
|||||||
//
|
//
|
||||||
$builder = ProjectLog::select(["*"]);
|
$builder = ProjectLog::select(["*"]);
|
||||||
if ($task_id > 0) {
|
if ($task_id > 0) {
|
||||||
$task = ProjectTask::userTask($task_id, null,false,[],true);
|
$task = ProjectTask::userTask($task_id, null);
|
||||||
$builder->whereTaskId($task->id);
|
$builder->whereTaskId($task->id);
|
||||||
} else {
|
} else {
|
||||||
$project = Project::userProject($project_id);
|
$project = Project::userProject($project_id);
|
||||||
|
|||||||
@ -1218,31 +1218,29 @@ class ProjectTask extends AbstractModel
|
|||||||
* 获取任务(会员有任务权限 或 会员存在项目内)
|
* 获取任务(会员有任务权限 或 会员存在项目内)
|
||||||
* @param int $task_id
|
* @param int $task_id
|
||||||
* @param bool $archived true:仅限未归档, false:仅限已归档, null:不限制
|
* @param bool $archived true:仅限未归档, false:仅限已归档, null:不限制
|
||||||
|
* @param bool $trashed true:仅限未删除, false:仅限已删除, null:不限制
|
||||||
* @param int|bool $permission 0|false:不限制, 1|true:限制项目负责人、任务负责人、协助人员及任务创建者, 2:已有负责人才限制true (子任务时如果是主任务负责人也可以)
|
* @param int|bool $permission 0|false:不限制, 1|true:限制项目负责人、任务负责人、协助人员及任务创建者, 2:已有负责人才限制true (子任务时如果是主任务负责人也可以)
|
||||||
* @param array $with
|
* @param array $with
|
||||||
* @param bool $getTrashed
|
|
||||||
* @return self
|
* @return self
|
||||||
*/
|
*/
|
||||||
public static function userTask($task_id, $archived = true, $permission = 0, $with = [], $getTrashed = false)
|
public static function userTask($task_id, $archived = true, $trashed = true, $permission = false, $with = [])
|
||||||
{
|
{
|
||||||
$builder = self::with($with)->allData()->where("project_tasks.id", intval($task_id));
|
$builder = self::with($with)->allData()->where("project_tasks.id", intval($task_id));
|
||||||
if ($getTrashed) {
|
if ($trashed === false) {
|
||||||
|
$builder->onlyTrashed();
|
||||||
|
} elseif ($trashed === null) {
|
||||||
$builder->withTrashed();
|
$builder->withTrashed();
|
||||||
}
|
}
|
||||||
$task = $builder->first();
|
$task = $builder->first();
|
||||||
//
|
//
|
||||||
if (empty($task)) {
|
if (empty($task)) {
|
||||||
if(self::whereId(intval($task_id))->withTrashed()->exists()){
|
throw new ApiException('任务不存在', ['task_id' => $task_id], -4002);
|
||||||
throw new ApiException('任务已删除,不可编辑', [ 'task_id' => $task_id ], -4002);
|
|
||||||
}else{
|
|
||||||
throw new ApiException('任务不存在', [ 'task_id' => $task_id ], -4002);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if ($archived === true && $task->archived_at != null) {
|
if ($archived === true && $task->archived_at != null) {
|
||||||
throw new ApiException('任务已归档', [ 'task_id' => $task_id ]);
|
throw new ApiException('任务已归档', ['task_id' => $task_id]);
|
||||||
}
|
}
|
||||||
if ($archived === false && $task->archived_at == null) {
|
if ($archived === false && $task->archived_at == null) {
|
||||||
throw new ApiException('任务未归档', [ 'task_id' => $task_id ]);
|
throw new ApiException('任务未归档', ['task_id' => $task_id]);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -202,14 +202,11 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {mapState} from "vuex";
|
import {mapState} from "vuex";
|
||||||
import RightBottom from "../components/RightBottom";
|
|
||||||
export default {
|
export default {
|
||||||
components:{RightBottom},
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
needStartHome: false,
|
needStartHome: false,
|
||||||
homeFooter: '',
|
homeFooter: '',
|
||||||
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@ -229,25 +226,13 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
login() {
|
login() {
|
||||||
this.goForward(
|
this.goForward({path: `/login`}, false);
|
||||||
{
|
|
||||||
path: `/login`,
|
|
||||||
},
|
|
||||||
false
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
register() {
|
register() {
|
||||||
this.goForward(
|
this.goForward({path: `/login`, query: {type: "reg"}}, false);
|
||||||
{
|
|
||||||
path: `/login`,
|
|
||||||
query: {
|
|
||||||
type: "reg",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
false
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getNeedStartHome() {
|
getNeedStartHome() {
|
||||||
this.$store.dispatch("call", {
|
this.$store.dispatch("call", {
|
||||||
url: "system/get/starthome",
|
url: "system/get/starthome",
|
||||||
|
|||||||
@ -154,18 +154,14 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
$route:{
|
'$route' ({query}) {
|
||||||
handler(val) {
|
if (query.type=='reg'){
|
||||||
if (val.query.type=='reg'){
|
this.$nextTick(()=>{
|
||||||
this.$nextTick(()=>{
|
this.loginType = "reg"
|
||||||
this.loginType = "reg"
|
})
|
||||||
})
|
}
|
||||||
}
|
|
||||||
},
|
|
||||||
immediate:true
|
|
||||||
},
|
},
|
||||||
loginType(val) {
|
loginType(val) {
|
||||||
console.log(val)
|
|
||||||
if (val == 'reg') {
|
if (val == 'reg') {
|
||||||
this.getNeedInvite();
|
this.getNeedInvite();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -290,7 +290,7 @@
|
|||||||
:value="taskId > 0"
|
:value="taskId > 0"
|
||||||
:styles="{
|
:styles="{
|
||||||
width: '90%',
|
width: '90%',
|
||||||
maxWidth: taskData.dialog_id && !taskData.deleted_at ? '1200px' : '700px'
|
maxWidth: taskData.dialog_id ? '1200px' : '700px'
|
||||||
}"
|
}"
|
||||||
:mask-closable="false"
|
:mask-closable="false"
|
||||||
:footer-hide="true"
|
:footer-hide="true"
|
||||||
|
|||||||
@ -89,17 +89,11 @@ export default {
|
|||||||
this.$emit("on-read");
|
this.$emit("on-read");
|
||||||
if (this.$Electron) {
|
if (this.$Electron) {
|
||||||
let config = {
|
let config = {
|
||||||
title: row.title,
|
title: this.formatName(row.title),
|
||||||
titleFixed: true,
|
titleFixed: true,
|
||||||
parent: null,
|
parent: null,
|
||||||
width: Math.min(window.screen.availWidth, this.$el.clientWidth + 72),
|
width: Math.min(window.screen.availWidth, 1440),
|
||||||
height: Math.min(window.screen.availHeight, this.$el.clientHeight + 72),
|
height: Math.min(window.screen.availHeight, 900),
|
||||||
minWidth: 600,
|
|
||||||
minHeight: 450,
|
|
||||||
};
|
|
||||||
if (this.hasOpenDialog) {
|
|
||||||
config.minWidth = 800;
|
|
||||||
config.minHeight = 600;
|
|
||||||
}
|
}
|
||||||
this.$Electron.sendMessage('windowRouter', {
|
this.$Electron.sendMessage('windowRouter', {
|
||||||
name: 'report-' + row.id,
|
name: 'report-' + row.id,
|
||||||
@ -119,14 +113,8 @@ export default {
|
|||||||
title: title,
|
title: title,
|
||||||
titleFixed: true,
|
titleFixed: true,
|
||||||
parent: null,
|
parent: null,
|
||||||
width: Math.min(window.screen.availWidth, this.$el.clientWidth + 72),
|
width: Math.min(window.screen.availWidth, 1440),
|
||||||
height: Math.min(window.screen.availHeight, this.$el.clientHeight + 72),
|
height: Math.min(window.screen.availHeight, 900),
|
||||||
minWidth: 600,
|
|
||||||
minHeight: 450,
|
|
||||||
};
|
|
||||||
if (this.hasOpenDialog) {
|
|
||||||
config.minWidth = 800;
|
|
||||||
config.minHeight = 600;
|
|
||||||
}
|
}
|
||||||
this.$Electron.sendMessage('windowRouter', {
|
this.$Electron.sendMessage('windowRouter', {
|
||||||
name: 'report-' + id,
|
name: 'report-' + id,
|
||||||
|
|||||||
@ -97,23 +97,26 @@ export default {
|
|||||||
initLanguage() {
|
initLanguage() {
|
||||||
this.columns = [
|
this.columns = [
|
||||||
{
|
{
|
||||||
title: this.$L('ID'),
|
title: 'ID',
|
||||||
minWidth: 50,
|
|
||||||
maxWidth: 70,
|
|
||||||
key: 'id',
|
key: 'id',
|
||||||
|
width: 80,
|
||||||
|
render: (h, {row, column}) => {
|
||||||
|
return h('TableAction', {
|
||||||
|
props: {
|
||||||
|
column: column,
|
||||||
|
align: 'left'
|
||||||
|
}
|
||||||
|
}, [
|
||||||
|
h("div", row.id),
|
||||||
|
]);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: this.$L('任务名称'),
|
title: this.$L('任务名称'),
|
||||||
key: 'name',
|
key: 'name',
|
||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
render: (h, {row}) => {
|
render: (h, {row}) => {
|
||||||
return h('AutoTip', {
|
return h('AutoTip', row.name);
|
||||||
on: {
|
|
||||||
'on-click': () => {
|
|
||||||
this.$store.dispatch("openTask", row);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, row.name);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -149,18 +152,6 @@ export default {
|
|||||||
width: 100,
|
width: 100,
|
||||||
render: (h, params) => {
|
render: (h, params) => {
|
||||||
const vNodes = [
|
const vNodes = [
|
||||||
h('span', {
|
|
||||||
style: {
|
|
||||||
fontSize: '13px',
|
|
||||||
cursor: 'pointer',
|
|
||||||
color: '#8bcf70',
|
|
||||||
},
|
|
||||||
on: {
|
|
||||||
'click': () => {
|
|
||||||
this.$store.dispatch("openTask", params.row);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}, this.$L('查看')),
|
|
||||||
h('Poptip', {
|
h('Poptip', {
|
||||||
props: {
|
props: {
|
||||||
title: this.$L('你确定要还原删除吗?'),
|
title: this.$L('你确定要还原删除吗?'),
|
||||||
@ -172,7 +163,6 @@ export default {
|
|||||||
fontSize: '13px',
|
fontSize: '13px',
|
||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
color: '#8bcf70',
|
color: '#8bcf70',
|
||||||
marginLeft: "8px"
|
|
||||||
},
|
},
|
||||||
on: {
|
on: {
|
||||||
'on-ok': () => {
|
'on-ok': () => {
|
||||||
|
|||||||
@ -87,9 +87,6 @@
|
|||||||
<div v-if="taskDetail.archived_at" class="flow">
|
<div v-if="taskDetail.archived_at" class="flow">
|
||||||
<span class="archived" @click.stop="openMenu(taskDetail)">{{$L('已归档')}}</span>
|
<span class="archived" @click.stop="openMenu(taskDetail)">{{$L('已归档')}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="taskDetail.deleted_at" class="flow">
|
|
||||||
<span class="archived">{{$L('已删除')}}</span>
|
|
||||||
</div>
|
|
||||||
<div class="nav">
|
<div class="nav">
|
||||||
<p v-if="projectName"><span>{{projectName}}</span></p>
|
<p v-if="projectName"><span>{{projectName}}</span></p>
|
||||||
<p v-if="columnName"><span>{{columnName}}</span></p>
|
<p v-if="columnName"><span>{{columnName}}</span></p>
|
||||||
@ -152,7 +149,6 @@
|
|||||||
<div class="desc">
|
<div class="desc">
|
||||||
<TEditor
|
<TEditor
|
||||||
ref="desc"
|
ref="desc"
|
||||||
:readOnly="taskDetail.deleted_at ? true : false"
|
|
||||||
:value="taskContent"
|
:value="taskContent"
|
||||||
:plugins="taskPlugins"
|
:plugins="taskPlugins"
|
||||||
:options="taskOptions"
|
:options="taskOptions"
|
||||||
@ -387,16 +383,16 @@
|
|||||||
<div class="head">
|
<div class="head">
|
||||||
<Icon class="icon" type="ios-chatbubbles-outline" />
|
<Icon class="icon" type="ios-chatbubbles-outline" />
|
||||||
<div class="nav">
|
<div class="nav">
|
||||||
<p :class="{active:navActive=='dialog'}" v-if="!taskDetail.deleted_at" @click="navActive='dialog'">{{$L('聊天')}}</p>
|
<p :class="{active:navActive=='dialog'}" @click="navActive='dialog'">{{$L('聊天')}}</p>
|
||||||
<p :class="{active:navActive=='log' || taskDetail.deleted_at}" @click="navActive='log'">{{$L('动态')}}</p>
|
<p :class="{active:navActive=='log'}" @click="navActive='log'">{{$L('动态')}}</p>
|
||||||
<div v-if="navActive=='log' || taskDetail.deleted_at" class="refresh">
|
<div v-if="navActive=='log'" class="refresh">
|
||||||
<Loading v-if="logLoadIng"/>
|
<Loading v-if="logLoadIng"/>
|
||||||
<Icon v-else type="ios-refresh" @click="getLogLists"></Icon>
|
<Icon v-else type="ios-refresh" @click="getLogLists"></Icon>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<ProjectLog v-if="(navActive=='log' || taskDetail.deleted_at) && taskId > 0" ref="log" :task-id="taskDetail.id" :show-load="false" @on-load-change="logLoadChange"/>
|
<ProjectLog v-if="navActive=='log' && taskId > 0" ref="log" :task-id="taskDetail.id" :show-load="false" @on-load-change="logLoadChange"/>
|
||||||
<div v-else-if="!taskDetail.deleted_at" class="no-dialog"
|
<div v-else class="no-dialog"
|
||||||
@drop.prevent="taskPasteDrag($event, 'drag')"
|
@drop.prevent="taskPasteDrag($event, 'drag')"
|
||||||
@dragover.prevent="taskDragOver(true, $event)"
|
@dragover.prevent="taskDragOver(true, $event)"
|
||||||
@dragleave.prevent="taskDragOver(false, $event)">
|
@dragleave.prevent="taskDragOver(false, $event)">
|
||||||
@ -619,7 +615,7 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
hasOpenDialog() {
|
hasOpenDialog() {
|
||||||
return this.taskDetail.dialog_id > 0 && !this.windowMax768 && !this.taskDetail.deleted_at;
|
return this.taskDetail.dialog_id > 0 && !this.windowMax768;
|
||||||
},
|
},
|
||||||
|
|
||||||
dialogStyle() {
|
dialogStyle() {
|
||||||
|
|||||||
@ -52,7 +52,7 @@
|
|||||||
<Icon type="ios-filing" />{{$L(task.archived_at ? '还原归档' : '归档')}}
|
<Icon type="ios-filing" />{{$L(task.archived_at ? '还原归档' : '归档')}}
|
||||||
</div>
|
</div>
|
||||||
</EDropdownItem>
|
</EDropdownItem>
|
||||||
<EDropdownItem command="remove" v-if="!task.deleted_at">
|
<EDropdownItem command="remove">
|
||||||
<div class="item hover-del">
|
<div class="item hover-del">
|
||||||
<Icon type="md-trash" />{{$L('删除')}}
|
<Icon type="md-trash" />{{$L('删除')}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="setting-item submit">
|
<div class="setting-item submit">
|
||||||
<Form ref="formData" :model="formData" :rules="ruleData" label-width="auto" @submit.native.prevent>
|
<Form ref="formData" :model="formData" :rules="ruleData" label-width="auto" @submit.native.prevent>
|
||||||
<h3 style="margin-bottom: 15px;">{{ $L('邮箱服务器设置') }}</h3>
|
<h3>{{ $L('邮箱服务器设置') }}</h3>
|
||||||
<FormItem :label="$L('SMTP服务器')" prop="smtp_server">
|
<FormItem :label="$L('SMTP服务器')" prop="smtp_server">
|
||||||
<Input v-model="formData.smtp_server"/>
|
<Input v-model="formData.smtp_server"/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
@ -15,7 +15,7 @@
|
|||||||
<Input :maxlength="20" v-model="formData.password"/>
|
<Input :maxlength="20" v-model="formData.password"/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
||||||
<h3 style="margin-bottom: 15px;">{{ $L('邮件通知设置') }}</h3>
|
<h3>{{ $L('邮件通知设置') }}</h3>
|
||||||
<FormItem :label="$L('开启注册验证')" prop="reg_verify">
|
<FormItem :label="$L('开启注册验证')" prop="reg_verify">
|
||||||
<RadioGroup v-model="formData.reg_verify">
|
<RadioGroup v-model="formData.reg_verify">
|
||||||
<Radio label="open">{{ $L('开启') }}</Radio>
|
<Radio label="open">{{ $L('开启') }}</Radio>
|
||||||
@ -130,7 +130,3 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
@ -17,7 +17,6 @@ import ReportDetail from "../manage/components/ReportDetail";
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {ReportDetail},
|
components: {ReportDetail},
|
||||||
name: "reportDetail",
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
detailData: {},
|
detailData: {},
|
||||||
@ -47,7 +46,3 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
@ -17,10 +17,5 @@ import ReportEdit from "../manage/components/ReportEdit"
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {ReportEdit},
|
components: {ReportEdit},
|
||||||
name: "reportEdit"
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
@ -17,6 +17,34 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.valid-wrap {
|
||||||
|
height: 100vh;
|
||||||
|
width: 100vw;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
.valid-box {
|
||||||
|
width: 500px;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 5px 15px 20px 15px;
|
||||||
|
border-radius: 10px;
|
||||||
|
|
||||||
|
.valid-title {
|
||||||
|
border-bottom: 1px solid #e8eaec;
|
||||||
|
padding: 14px 16px;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.validation-text {
|
||||||
|
padding: 10px;
|
||||||
|
color: #333;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<script>
|
<script>
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
@ -56,30 +84,3 @@ export default {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss">
|
|
||||||
.valid-wrap {
|
|
||||||
height: 100vh;
|
|
||||||
width: 100vw;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
.valid-box {
|
|
||||||
width: 500px;
|
|
||||||
background-color: #fff;
|
|
||||||
padding: 5px 15px 20px 15px;
|
|
||||||
border-radius: 10px;
|
|
||||||
|
|
||||||
.valid-title {
|
|
||||||
border-bottom: 1px solid #e8eaec;
|
|
||||||
padding: 14px 16px;
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.validation-text{
|
|
||||||
padding: 10px;
|
|
||||||
color: #333;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
2
resources/assets/js/store/actions.js
vendored
2
resources/assets/js/store/actions.js
vendored
@ -1003,7 +1003,7 @@ export default {
|
|||||||
state.cacheTasks.filter(task => task.parent_id == id).some(childTask => {
|
state.cacheTasks.filter(task => task.parent_id == id).some(childTask => {
|
||||||
let cIndex = state.cacheTasks.findIndex(task => task.id == childTask.id);
|
let cIndex = state.cacheTasks.findIndex(task => task.id == childTask.id);
|
||||||
if (cIndex > -1) {
|
if (cIndex > -1) {
|
||||||
project_ids.push(state.cacheTasks[index].project_id)
|
project_ids.push(childTask.project_id)
|
||||||
state.cacheTasks.splice(cIndex, 1);
|
state.cacheTasks.splice(cIndex, 1);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
48
resources/assets/sass/dark.scss
vendored
48
resources/assets/sass/dark.scss
vendored
@ -307,38 +307,40 @@ body.dark-mode-reverse {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.page-warp {
|
.page-index {
|
||||||
background-color: #efefef;
|
.page-warp {
|
||||||
.page-header {
|
background-color: #efefef;
|
||||||
.header-nav {
|
.page-header {
|
||||||
.header-nav-box {
|
.header-nav {
|
||||||
.header-right-one {
|
.header-nav-box {
|
||||||
.header-right-one-dropdown {
|
.header-right-one {
|
||||||
|
.header-right-one-dropdown {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.header-right-two {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
}
|
}
|
||||||
}
|
.header-right-four {
|
||||||
.header-right-two {
|
.ivu-dropdown{
|
||||||
color: #000000;
|
.ivu-dropdown-rel{
|
||||||
}
|
.header-right-one-dropdown {
|
||||||
.header-right-four {
|
color: #000000;
|
||||||
.ivu-dropdown{
|
}
|
||||||
.ivu-dropdown-rel{
|
|
||||||
.header-right-one-dropdown {
|
|
||||||
color: #000000;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
.header-content {
|
||||||
.header-content {
|
.header-title, .header-tips {
|
||||||
.header-title, .header-tips {
|
color: #000000;
|
||||||
color: #000000;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
.page-header-bottom{
|
||||||
.page-header-bottom{
|
background-color: #efefef;
|
||||||
background-color: #efefef;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -228,27 +228,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-gantt-item {
|
|
||||||
padding-left: 5px;
|
|
||||||
display: flex;
|
|
||||||
cursor: pointer;
|
|
||||||
&.active {
|
|
||||||
color: $primary-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.force-right {
|
|
||||||
&.act {
|
|
||||||
color: #2A53FF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.gantt-name {
|
|
||||||
font-size: 13px;
|
|
||||||
padding-top: 6%;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
818
resources/assets/sass/pages/page-index.scss
vendored
818
resources/assets/sass/pages/page-index.scss
vendored
File diff suppressed because it is too large
Load Diff
@ -179,6 +179,10 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
|
h3 {
|
||||||
|
font-size: 16px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
.ivu-form {
|
.ivu-form {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding: 24px 40px;
|
padding: 24px 40px;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user