mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-12 11:19:56 +00:00
合并整理
This commit is contained in:
parent
5adbd6e8f1
commit
d1036c3be7
@ -895,8 +895,9 @@ class ProjectController extends AbstractController
|
||||
* - yes:已归档
|
||||
* - no:未归档(默认)
|
||||
* @apiParam {String} [deleted] 是否读取已删除
|
||||
* - yes:是
|
||||
* - no:否(默认)
|
||||
* - all:所有
|
||||
* - yes:已删除
|
||||
* - no:未删除(默认)
|
||||
* @apiParam {Object} sorts 排序方式
|
||||
* - sorts.complete_at 完成时间:asc|desc
|
||||
* - sorts.archived_at 归档时间:asc|desc
|
||||
@ -931,9 +932,10 @@ class ProjectController extends AbstractController
|
||||
//
|
||||
$scopeAll = false;
|
||||
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;
|
||||
$builder->withTrashed();
|
||||
$builder->where('project_tasks.parent_id', $parent_id);
|
||||
} elseif ($parent_id === -1) {
|
||||
$builder->where('project_tasks.parent_id', 0);
|
||||
@ -965,17 +967,19 @@ class ProjectController extends AbstractController
|
||||
//
|
||||
if ($complete === 'yes') {
|
||||
$builder->whereNotNull('project_tasks.complete_at');
|
||||
} elseif ($complete === 'no' && $deleted == 'no') {
|
||||
} elseif ($complete === 'no') {
|
||||
$builder->whereNull('project_tasks.complete_at');
|
||||
}
|
||||
//
|
||||
if ($archived == 'yes') {
|
||||
$builder->whereNotNull('project_tasks.archived_at');
|
||||
} elseif ($archived == 'no' && $deleted == 'no') {
|
||||
} elseif ($archived == 'no') {
|
||||
$builder->whereNull('project_tasks.archived_at');
|
||||
}
|
||||
//
|
||||
if ($deleted == 'yes') {
|
||||
if ($deleted == 'all') {
|
||||
$builder->withTrashed();
|
||||
} elseif ($deleted == 'yes') {
|
||||
$builder->onlyTrashed();
|
||||
}
|
||||
//
|
||||
@ -1221,7 +1225,8 @@ class ProjectController extends AbstractController
|
||||
$task_id = intval(Request::input('task_id'));
|
||||
$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['project_name'] = $task->project?->name;
|
||||
@ -1249,7 +1254,7 @@ class ProjectController extends AbstractController
|
||||
//
|
||||
$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)) {
|
||||
return Base::retSuccess('success', json_decode('{}'));
|
||||
@ -1277,7 +1282,7 @@ class ProjectController extends AbstractController
|
||||
//
|
||||
$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);
|
||||
}
|
||||
@ -1307,7 +1312,7 @@ class ProjectController extends AbstractController
|
||||
return Base::retError('文件不存在或已被删除');
|
||||
}
|
||||
//
|
||||
$task = ProjectTask::userTask($file->task_id, true, true);
|
||||
$task = ProjectTask::userTask($file->task_id, true, true, true);
|
||||
//
|
||||
$task->pushMsg('filedelete', $file);
|
||||
$file->delete();
|
||||
@ -1486,7 +1491,7 @@ class ProjectController extends AbstractController
|
||||
$task_id = intval(Request::input('task_id'));
|
||||
$name = Request::input('name');
|
||||
//
|
||||
$task = ProjectTask::userTask($task_id, true, true);
|
||||
$task = ProjectTask::userTask($task_id, true, true, true);
|
||||
if ($task->complete_at) {
|
||||
return Base::retError('主任务已完成无法添加子任务');
|
||||
}
|
||||
@ -1538,7 +1543,7 @@ class ProjectController extends AbstractController
|
||||
parse_str(Request::getContent(), $data);
|
||||
$task_id = intval($data['task_id']);
|
||||
//
|
||||
$task = ProjectTask::userTask($task_id, true, 2);
|
||||
$task = ProjectTask::userTask($task_id, true, true, 2);
|
||||
// 更新任务
|
||||
$updateMarking = [];
|
||||
$task->updateTask($data, $updateMarking);
|
||||
@ -1621,7 +1626,7 @@ class ProjectController extends AbstractController
|
||||
$task_id = intval(Request::input('task_id'));
|
||||
$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) {
|
||||
return Base::retError('子任务不支持此功能');
|
||||
@ -1663,7 +1668,7 @@ class ProjectController extends AbstractController
|
||||
$task_id = intval(Request::input('task_id'));
|
||||
$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') {
|
||||
$task->recoveryTask();
|
||||
return Base::retSuccess('操作成功', ['id' => $task->id]);
|
||||
@ -1698,7 +1703,7 @@ class ProjectController extends AbstractController
|
||||
return Base::retError('记录不存在');
|
||||
}
|
||||
//
|
||||
$task = ProjectTask::userTask($projectLog->task_id, true, true);
|
||||
$task = ProjectTask::userTask($projectLog->task_id, true, true, true);
|
||||
//
|
||||
$record = $projectLog->record;
|
||||
if ($record['flow'] && is_array($record['flow'])) {
|
||||
@ -1933,7 +1938,7 @@ class ProjectController extends AbstractController
|
||||
//
|
||||
$builder = ProjectLog::select(["*"]);
|
||||
if ($task_id > 0) {
|
||||
$task = ProjectTask::userTask($task_id, null,false,[],true);
|
||||
$task = ProjectTask::userTask($task_id, null);
|
||||
$builder->whereTaskId($task->id);
|
||||
} else {
|
||||
$project = Project::userProject($project_id);
|
||||
|
||||
@ -1218,31 +1218,29 @@ class ProjectTask extends AbstractModel
|
||||
* 获取任务(会员有任务权限 或 会员存在项目内)
|
||||
* @param int $task_id
|
||||
* @param bool $archived true:仅限未归档, false:仅限已归档, null:不限制
|
||||
* @param bool $trashed true:仅限未删除, false:仅限已删除, null:不限制
|
||||
* @param int|bool $permission 0|false:不限制, 1|true:限制项目负责人、任务负责人、协助人员及任务创建者, 2:已有负责人才限制true (子任务时如果是主任务负责人也可以)
|
||||
* @param array $with
|
||||
* @param bool $getTrashed
|
||||
* @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));
|
||||
if ($getTrashed) {
|
||||
if ($trashed === false) {
|
||||
$builder->onlyTrashed();
|
||||
} elseif ($trashed === null) {
|
||||
$builder->withTrashed();
|
||||
}
|
||||
$task = $builder->first();
|
||||
//
|
||||
if (empty($task)) {
|
||||
if(self::whereId(intval($task_id))->withTrashed()->exists()){
|
||||
throw new ApiException('任务已删除,不可编辑', [ 'task_id' => $task_id ], -4002);
|
||||
}else{
|
||||
throw new ApiException('任务不存在', [ 'task_id' => $task_id ], -4002);
|
||||
}
|
||||
throw new ApiException('任务不存在', ['task_id' => $task_id], -4002);
|
||||
}
|
||||
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) {
|
||||
throw new ApiException('任务未归档', [ 'task_id' => $task_id ]);
|
||||
throw new ApiException('任务未归档', ['task_id' => $task_id]);
|
||||
}
|
||||
//
|
||||
try {
|
||||
|
||||
@ -202,14 +202,11 @@
|
||||
|
||||
<script>
|
||||
import {mapState} from "vuex";
|
||||
import RightBottom from "../components/RightBottom";
|
||||
export default {
|
||||
components:{RightBottom},
|
||||
data() {
|
||||
return {
|
||||
needStartHome: false,
|
||||
homeFooter: '',
|
||||
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -229,25 +226,13 @@ export default {
|
||||
},
|
||||
|
||||
login() {
|
||||
this.goForward(
|
||||
{
|
||||
path: `/login`,
|
||||
},
|
||||
false
|
||||
);
|
||||
this.goForward({path: `/login`}, false);
|
||||
},
|
||||
|
||||
register() {
|
||||
this.goForward(
|
||||
{
|
||||
path: `/login`,
|
||||
query: {
|
||||
type: "reg",
|
||||
},
|
||||
},
|
||||
false
|
||||
);
|
||||
this.goForward({path: `/login`, query: {type: "reg"}}, false);
|
||||
},
|
||||
|
||||
getNeedStartHome() {
|
||||
this.$store.dispatch("call", {
|
||||
url: "system/get/starthome",
|
||||
|
||||
@ -154,18 +154,14 @@ export default {
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route:{
|
||||
handler(val) {
|
||||
if (val.query.type=='reg'){
|
||||
'$route' ({query}) {
|
||||
if (query.type=='reg'){
|
||||
this.$nextTick(()=>{
|
||||
this.loginType = "reg"
|
||||
})
|
||||
}
|
||||
},
|
||||
immediate:true
|
||||
},
|
||||
loginType(val) {
|
||||
console.log(val)
|
||||
if (val == 'reg') {
|
||||
this.getNeedInvite();
|
||||
}
|
||||
|
||||
@ -290,7 +290,7 @@
|
||||
:value="taskId > 0"
|
||||
:styles="{
|
||||
width: '90%',
|
||||
maxWidth: taskData.dialog_id && !taskData.deleted_at ? '1200px' : '700px'
|
||||
maxWidth: taskData.dialog_id ? '1200px' : '700px'
|
||||
}"
|
||||
:mask-closable="false"
|
||||
:footer-hide="true"
|
||||
|
||||
@ -89,17 +89,11 @@ export default {
|
||||
this.$emit("on-read");
|
||||
if (this.$Electron) {
|
||||
let config = {
|
||||
title: row.title,
|
||||
title: this.formatName(row.title),
|
||||
titleFixed: true,
|
||||
parent: null,
|
||||
width: Math.min(window.screen.availWidth, this.$el.clientWidth + 72),
|
||||
height: Math.min(window.screen.availHeight, this.$el.clientHeight + 72),
|
||||
minWidth: 600,
|
||||
minHeight: 450,
|
||||
};
|
||||
if (this.hasOpenDialog) {
|
||||
config.minWidth = 800;
|
||||
config.minHeight = 600;
|
||||
width: Math.min(window.screen.availWidth, 1440),
|
||||
height: Math.min(window.screen.availHeight, 900),
|
||||
}
|
||||
this.$Electron.sendMessage('windowRouter', {
|
||||
name: 'report-' + row.id,
|
||||
@ -119,14 +113,8 @@ export default {
|
||||
title: title,
|
||||
titleFixed: true,
|
||||
parent: null,
|
||||
width: Math.min(window.screen.availWidth, this.$el.clientWidth + 72),
|
||||
height: Math.min(window.screen.availHeight, this.$el.clientHeight + 72),
|
||||
minWidth: 600,
|
||||
minHeight: 450,
|
||||
};
|
||||
if (this.hasOpenDialog) {
|
||||
config.minWidth = 800;
|
||||
config.minHeight = 600;
|
||||
width: Math.min(window.screen.availWidth, 1440),
|
||||
height: Math.min(window.screen.availHeight, 900),
|
||||
}
|
||||
this.$Electron.sendMessage('windowRouter', {
|
||||
name: 'report-' + id,
|
||||
|
||||
@ -97,23 +97,26 @@ export default {
|
||||
initLanguage() {
|
||||
this.columns = [
|
||||
{
|
||||
title: this.$L('ID'),
|
||||
minWidth: 50,
|
||||
maxWidth: 70,
|
||||
title: 'ID',
|
||||
key: 'id',
|
||||
width: 80,
|
||||
render: (h, {row, column}) => {
|
||||
return h('TableAction', {
|
||||
props: {
|
||||
column: column,
|
||||
align: 'left'
|
||||
}
|
||||
}, [
|
||||
h("div", row.id),
|
||||
]);
|
||||
}
|
||||
},
|
||||
{
|
||||
title: this.$L('任务名称'),
|
||||
key: 'name',
|
||||
minWidth: 200,
|
||||
render: (h, {row}) => {
|
||||
return h('AutoTip', {
|
||||
on: {
|
||||
'on-click': () => {
|
||||
this.$store.dispatch("openTask", row);
|
||||
}
|
||||
}
|
||||
}, row.name);
|
||||
return h('AutoTip', row.name);
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -149,18 +152,6 @@ export default {
|
||||
width: 100,
|
||||
render: (h, params) => {
|
||||
const vNodes = [
|
||||
h('span', {
|
||||
style: {
|
||||
fontSize: '13px',
|
||||
cursor: 'pointer',
|
||||
color: '#8bcf70',
|
||||
},
|
||||
on: {
|
||||
'click': () => {
|
||||
this.$store.dispatch("openTask", params.row);
|
||||
}
|
||||
},
|
||||
}, this.$L('查看')),
|
||||
h('Poptip', {
|
||||
props: {
|
||||
title: this.$L('你确定要还原删除吗?'),
|
||||
@ -172,7 +163,6 @@ export default {
|
||||
fontSize: '13px',
|
||||
cursor: 'pointer',
|
||||
color: '#8bcf70',
|
||||
marginLeft: "8px"
|
||||
},
|
||||
on: {
|
||||
'on-ok': () => {
|
||||
|
||||
@ -87,9 +87,6 @@
|
||||
<div v-if="taskDetail.archived_at" class="flow">
|
||||
<span class="archived" @click.stop="openMenu(taskDetail)">{{$L('已归档')}}</span>
|
||||
</div>
|
||||
<div v-if="taskDetail.deleted_at" class="flow">
|
||||
<span class="archived">{{$L('已删除')}}</span>
|
||||
</div>
|
||||
<div class="nav">
|
||||
<p v-if="projectName"><span>{{projectName}}</span></p>
|
||||
<p v-if="columnName"><span>{{columnName}}</span></p>
|
||||
@ -152,7 +149,6 @@
|
||||
<div class="desc">
|
||||
<TEditor
|
||||
ref="desc"
|
||||
:readOnly="taskDetail.deleted_at ? true : false"
|
||||
:value="taskContent"
|
||||
:plugins="taskPlugins"
|
||||
:options="taskOptions"
|
||||
@ -387,16 +383,16 @@
|
||||
<div class="head">
|
||||
<Icon class="icon" type="ios-chatbubbles-outline" />
|
||||
<div class="nav">
|
||||
<p :class="{active:navActive=='dialog'}" v-if="!taskDetail.deleted_at" @click="navActive='dialog'">{{$L('聊天')}}</p>
|
||||
<p :class="{active:navActive=='log' || taskDetail.deleted_at}" @click="navActive='log'">{{$L('动态')}}</p>
|
||||
<div v-if="navActive=='log' || taskDetail.deleted_at" class="refresh">
|
||||
<p :class="{active:navActive=='dialog'}" @click="navActive='dialog'">{{$L('聊天')}}</p>
|
||||
<p :class="{active:navActive=='log'}" @click="navActive='log'">{{$L('动态')}}</p>
|
||||
<div v-if="navActive=='log'" class="refresh">
|
||||
<Loading v-if="logLoadIng"/>
|
||||
<Icon v-else type="ios-refresh" @click="getLogLists"></Icon>
|
||||
</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"/>
|
||||
<div v-else-if="!taskDetail.deleted_at" class="no-dialog"
|
||||
<ProjectLog v-if="navActive=='log' && taskId > 0" ref="log" :task-id="taskDetail.id" :show-load="false" @on-load-change="logLoadChange"/>
|
||||
<div v-else class="no-dialog"
|
||||
@drop.prevent="taskPasteDrag($event, 'drag')"
|
||||
@dragover.prevent="taskDragOver(true, $event)"
|
||||
@dragleave.prevent="taskDragOver(false, $event)">
|
||||
@ -619,7 +615,7 @@ export default {
|
||||
},
|
||||
|
||||
hasOpenDialog() {
|
||||
return this.taskDetail.dialog_id > 0 && !this.windowMax768 && !this.taskDetail.deleted_at;
|
||||
return this.taskDetail.dialog_id > 0 && !this.windowMax768;
|
||||
},
|
||||
|
||||
dialogStyle() {
|
||||
|
||||
@ -52,7 +52,7 @@
|
||||
<Icon type="ios-filing" />{{$L(task.archived_at ? '还原归档' : '归档')}}
|
||||
</div>
|
||||
</EDropdownItem>
|
||||
<EDropdownItem command="remove" v-if="!task.deleted_at">
|
||||
<EDropdownItem command="remove">
|
||||
<div class="item hover-del">
|
||||
<Icon type="md-trash" />{{$L('删除')}}
|
||||
</div>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="setting-item submit">
|
||||
<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">
|
||||
<Input v-model="formData.smtp_server"/>
|
||||
</FormItem>
|
||||
@ -15,7 +15,7 @@
|
||||
<Input :maxlength="20" v-model="formData.password"/>
|
||||
</FormItem>
|
||||
|
||||
<h3 style="margin-bottom: 15px;">{{ $L('邮件通知设置') }}</h3>
|
||||
<h3>{{ $L('邮件通知设置') }}</h3>
|
||||
<FormItem :label="$L('开启注册验证')" prop="reg_verify">
|
||||
<RadioGroup v-model="formData.reg_verify">
|
||||
<Radio label="open">{{ $L('开启') }}</Radio>
|
||||
@ -130,7 +130,3 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
|
||||
@ -17,7 +17,6 @@ import ReportDetail from "../manage/components/ReportDetail";
|
||||
|
||||
export default {
|
||||
components: {ReportDetail},
|
||||
name: "reportDetail",
|
||||
data() {
|
||||
return {
|
||||
detailData: {},
|
||||
@ -47,7 +46,3 @@ export default {
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
|
||||
@ -17,10 +17,5 @@ import ReportEdit from "../manage/components/ReportEdit"
|
||||
|
||||
export default {
|
||||
components: {ReportEdit},
|
||||
name: "reportEdit"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
|
||||
@ -17,6 +17,34 @@
|
||||
</div>
|
||||
</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>
|
||||
export default {
|
||||
data() {
|
||||
@ -56,30 +84,3 @@ export default {
|
||||
},
|
||||
}
|
||||
</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 => {
|
||||
let cIndex = state.cacheTasks.findIndex(task => task.id == childTask.id);
|
||||
if (cIndex > -1) {
|
||||
project_ids.push(state.cacheTasks[index].project_id)
|
||||
project_ids.push(childTask.project_id)
|
||||
state.cacheTasks.splice(cIndex, 1);
|
||||
}
|
||||
})
|
||||
|
||||
2
resources/assets/sass/dark.scss
vendored
2
resources/assets/sass/dark.scss
vendored
@ -307,6 +307,7 @@ body.dark-mode-reverse {
|
||||
}
|
||||
}
|
||||
|
||||
.page-index {
|
||||
.page-warp {
|
||||
background-color: #efefef;
|
||||
.page-header {
|
||||
@ -341,4 +342,5 @@ body.dark-mode-reverse {
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
272
resources/assets/sass/pages/page-index.scss
vendored
272
resources/assets/sass/pages/page-index.scss
vendored
@ -5,53 +5,58 @@
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
.page-warp {
|
||||
max-width: 1920px;
|
||||
margin: 0 auto;
|
||||
|
||||
.page-header {
|
||||
width: 100%;
|
||||
background: #8bcf70;
|
||||
position: relative;
|
||||
padding-bottom: 40px;
|
||||
|
||||
.header-nav {
|
||||
max-width: 1200px;
|
||||
height: 72px;
|
||||
margin: auto;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.header-nav-box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-left: 20px;
|
||||
color: #ffffff;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
|
||||
font-weight: 400;
|
||||
position: relative;
|
||||
|
||||
.logo {
|
||||
width: 143px;
|
||||
height: 36px;
|
||||
background: url("../images/index/logo.svg")
|
||||
no-repeat center center;
|
||||
background: url("../images/index/logo.svg") no-repeat center center;
|
||||
background-size: contain;
|
||||
}
|
||||
|
||||
.header-right-one {
|
||||
display: flex;
|
||||
|
||||
.header-right-one-language {
|
||||
margin-right: 8px;
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.header-right-one-dropdown {
|
||||
color: #ffffff;
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.header-right-two {
|
||||
font-size: 16px;
|
||||
margin: 0 30px 0 30px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.header-right-three {
|
||||
font-size: 16px;
|
||||
min-width: 100px;
|
||||
@ -63,12 +68,14 @@
|
||||
cursor: pointer;
|
||||
padding: 0 10px 0 10px;
|
||||
}
|
||||
|
||||
.header-right-four {
|
||||
font-size: 16px;
|
||||
margin-left: 30px;
|
||||
cursor: pointer;
|
||||
.ivu-dropdown{
|
||||
.ivu-dropdown-rel{
|
||||
|
||||
.ivu-dropdown {
|
||||
.ivu-dropdown-rel {
|
||||
.header-right-one-dropdown {
|
||||
color: #ffffff;
|
||||
font-size: 16px;
|
||||
@ -78,32 +85,36 @@
|
||||
|
||||
}
|
||||
}
|
||||
.header-nav-boxs{
|
||||
|
||||
.header-nav-boxs {
|
||||
justify-content: flex-end;
|
||||
padding-right: 20px;
|
||||
.header-nav-more{
|
||||
|
||||
.header-nav-more {
|
||||
color: #fff;
|
||||
font-size: 36px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.header-content {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
|
||||
.header-title {
|
||||
font-size: 48px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 67px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.header-title-one {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.header-tips {
|
||||
font-size: 24px;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #ffffff;
|
||||
line-height: 36px;
|
||||
@ -111,76 +122,85 @@
|
||||
padding: 0 30px;
|
||||
margin-top: 22px;
|
||||
}
|
||||
|
||||
.login-buttom {
|
||||
width: 150px;
|
||||
height: 48px;
|
||||
background: #ffa25a;
|
||||
border-radius: 8px;
|
||||
font-size: 18px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 48px;
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
margin-top: 34px;
|
||||
margin: 34px auto 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.page-header-bottom{
|
||||
|
||||
.page-header-bottom {
|
||||
position: relative;
|
||||
background: url("../images/index/bg_bottom.svg") no-repeat;
|
||||
background-color: #FFFFFF;
|
||||
background: #FFFFFF url("../images/index/bg_bottom.svg") no-repeat;
|
||||
background-size: 100%;
|
||||
margin-bottom: 190px;
|
||||
margin-top: -2px;
|
||||
.page-header-bottoms{
|
||||
|
||||
.page-header-bottoms {
|
||||
max-width: 1200px;
|
||||
margin: auto;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
img{
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: auto;
|
||||
width: 80%;
|
||||
}
|
||||
}
|
||||
}
|
||||
.page-main{
|
||||
|
||||
.page-main {
|
||||
max-width: 1200px;
|
||||
margin: auto;
|
||||
.page-main-row{
|
||||
|
||||
.page-main-row {
|
||||
margin-bottom: 150px;
|
||||
}
|
||||
.page-main-rows{
|
||||
|
||||
.page-main-rows {
|
||||
margin-bottom: 140px;
|
||||
}
|
||||
.page-main-img{
|
||||
img{
|
||||
|
||||
.page-main-img {
|
||||
img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.page-main-imgs{
|
||||
img{
|
||||
|
||||
.page-main-imgs {
|
||||
img {
|
||||
display: block;
|
||||
width: 90%;
|
||||
margin: auto;
|
||||
}
|
||||
}
|
||||
.page-main-text{
|
||||
|
||||
.page-main-text {
|
||||
padding-left: 60px;
|
||||
padding-top: 120px;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
font-size: 32px;
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
line-height: 45px;
|
||||
margin-bottom: 17px;
|
||||
}
|
||||
p{
|
||||
|
||||
p {
|
||||
font-size: 18px;
|
||||
font-weight: 400;
|
||||
color: #828282;
|
||||
@ -188,56 +208,58 @@
|
||||
padding-right: 70px;
|
||||
}
|
||||
}
|
||||
.page-main-texts{
|
||||
|
||||
.page-main-texts {
|
||||
padding-top: 40px;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 30px;
|
||||
img{
|
||||
margin-right:10px;
|
||||
|
||||
img {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
p{
|
||||
font-size:16px;
|
||||
|
||||
p {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-footer {
|
||||
.footer-service {
|
||||
width: 100%;
|
||||
height: 188px;
|
||||
background-color: #ffa25a;
|
||||
position: relative;
|
||||
|
||||
.footer-bg-box {
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
height: 188px;
|
||||
|
||||
// background: url("../images/index/footer-bg.png") no-repeat
|
||||
// center center;
|
||||
// background-size: 100% 100%;
|
||||
// background-size: contain;
|
||||
.box-title {
|
||||
height: 45px;
|
||||
font-size: 16px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 45px;
|
||||
text-align: center;
|
||||
margin: 33px 0 22px 0;
|
||||
}
|
||||
|
||||
.buttom-box {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
.login-btn {
|
||||
width: 150px;
|
||||
height: 48px;
|
||||
background: #ffffff;
|
||||
border-radius: 8px;
|
||||
font-size: 14px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffa25a;
|
||||
line-height: 48px;
|
||||
@ -245,13 +267,13 @@
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.contact-btn {
|
||||
width: 150px;
|
||||
height: 48px;
|
||||
border-radius: 8px;
|
||||
border: 1px solid #ffffff;
|
||||
font-size: 14px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 48px;
|
||||
@ -261,22 +283,23 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer-opyright {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
background: #ffffff;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #828282;
|
||||
line-height: 60px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1440px) {
|
||||
.page-index {
|
||||
}
|
||||
.page-warp {
|
||||
.page-header {
|
||||
.header-content {
|
||||
@ -285,85 +308,96 @@
|
||||
line-height: 60px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.header-title-one {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.header-tips {
|
||||
font-size: 22px;
|
||||
padding: 0 20px;
|
||||
font-weight: 400;
|
||||
line-height: 36px;
|
||||
}
|
||||
|
||||
.login-buttom {
|
||||
width: 150px;
|
||||
height: 48px;
|
||||
background: #ffa25a;
|
||||
border-radius: 8px;
|
||||
font-size: 18px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 48px;
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
margin-top: 34px;
|
||||
margin: 34px auto 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.page-header-bottom{
|
||||
|
||||
.page-header-bottom {
|
||||
position: relative;
|
||||
background: url("../images/index/bg_bottom.svg") no-repeat;
|
||||
background-color: #FFFFFF;
|
||||
background: #FFFFFF url("../images/index/bg_bottom.svg") no-repeat;
|
||||
background-size: 100%;
|
||||
margin-bottom: 100px;
|
||||
margin-top: -2px;
|
||||
.page-header-bottoms{
|
||||
|
||||
.page-header-bottoms {
|
||||
max-width: 1200px;
|
||||
margin: auto;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
img{
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: auto;
|
||||
width: 80%;
|
||||
}
|
||||
}
|
||||
}
|
||||
.page-main{
|
||||
|
||||
.page-main {
|
||||
max-width: 1200px;
|
||||
margin: auto;
|
||||
.page-main-row{
|
||||
|
||||
.page-main-row {
|
||||
margin-bottom: 150px;
|
||||
}
|
||||
.page-main-rows{
|
||||
|
||||
.page-main-rows {
|
||||
margin-bottom: 140px;
|
||||
}
|
||||
.page-main-img{
|
||||
img{
|
||||
|
||||
.page-main-img {
|
||||
img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.page-main-imgs{
|
||||
img{
|
||||
|
||||
.page-main-imgs {
|
||||
img {
|
||||
display: block;
|
||||
width: 90%;
|
||||
margin: auto;
|
||||
}
|
||||
}
|
||||
.page-main-text{
|
||||
|
||||
.page-main-text {
|
||||
padding-left: 20px;
|
||||
padding-top: 80px;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
font-size: 32px;
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
line-height: 45px;
|
||||
margin-bottom: 17px;
|
||||
}
|
||||
p{
|
||||
|
||||
p {
|
||||
font-size: 18px;
|
||||
font-weight: 400;
|
||||
color: #828282;
|
||||
@ -371,57 +405,59 @@
|
||||
padding-right: 20px;
|
||||
}
|
||||
}
|
||||
.page-main-texts{
|
||||
|
||||
.page-main-texts {
|
||||
padding-top: 40px;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 24px;
|
||||
img{
|
||||
|
||||
img {
|
||||
width: 24px;
|
||||
margin-right:10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
p{
|
||||
font-size:14px;
|
||||
|
||||
p {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-footer {
|
||||
.footer-service {
|
||||
width: 100%;
|
||||
height: 188px;
|
||||
background-color: #ffa25a;
|
||||
position: relative;
|
||||
|
||||
.footer-bg-box {
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
height: 188px;
|
||||
|
||||
// background: url("../images/index/footer-bg.png") no-repeat
|
||||
// center center;
|
||||
// background-size: 100% 100%;
|
||||
// background-size: contain;
|
||||
.box-title {
|
||||
height: 45px;
|
||||
font-size: 16px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 45px;
|
||||
text-align: center;
|
||||
margin: 33px 0 22px 0;
|
||||
}
|
||||
|
||||
.buttom-box {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
.login-btn {
|
||||
width: 150px;
|
||||
height: 48px;
|
||||
background: #ffffff;
|
||||
border-radius: 8px;
|
||||
font-size: 14px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffa25a;
|
||||
line-height: 48px;
|
||||
@ -429,13 +465,13 @@
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.contact-btn {
|
||||
width: 150px;
|
||||
height: 48px;
|
||||
border-radius: 8px;
|
||||
border: 1px solid #ffffff;
|
||||
font-size: 14px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 48px;
|
||||
@ -445,23 +481,24 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer-opyright {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
background: #ffffff;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #828282;
|
||||
line-height: 60px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 468px) {
|
||||
.page-index {
|
||||
}
|
||||
.page-warp {
|
||||
.page-header {
|
||||
.header-content {
|
||||
@ -470,85 +507,96 @@
|
||||
line-height: 34px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.header-title-one {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.header-tips {
|
||||
font-size: 16px;
|
||||
padding: 0 20px;
|
||||
font-weight: 400;
|
||||
line-height: 26px;
|
||||
}
|
||||
|
||||
.login-buttom {
|
||||
width: 150px;
|
||||
height: 48px;
|
||||
background: #ffa25a;
|
||||
border-radius: 8px;
|
||||
font-size: 18px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 48px;
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
margin-top: 34px;
|
||||
margin: 34px auto 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.page-header-bottom{
|
||||
|
||||
.page-header-bottom {
|
||||
position: relative;
|
||||
background: url("../images/index/bg_bottom.svg") no-repeat;
|
||||
background-color: #FFFFFF;
|
||||
background: #FFFFFF url("../images/index/bg_bottom.svg") no-repeat;
|
||||
background-size: 100%;
|
||||
margin-bottom: 100px;
|
||||
margin-top: -2px;
|
||||
.page-header-bottoms{
|
||||
|
||||
.page-header-bottoms {
|
||||
max-width: 1200px;
|
||||
margin: auto;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
img{
|
||||
|
||||
img {
|
||||
display: block;
|
||||
margin: auto;
|
||||
width: 80%;
|
||||
}
|
||||
}
|
||||
}
|
||||
.page-main{
|
||||
|
||||
.page-main {
|
||||
max-width: 1200px;
|
||||
margin: auto;
|
||||
.page-main-row{
|
||||
|
||||
.page-main-row {
|
||||
margin-bottom: 150px;
|
||||
}
|
||||
.page-main-rows{
|
||||
|
||||
.page-main-rows {
|
||||
margin-bottom: 140px;
|
||||
}
|
||||
.page-main-img{
|
||||
img{
|
||||
|
||||
.page-main-img {
|
||||
img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.page-main-imgs{
|
||||
img{
|
||||
|
||||
.page-main-imgs {
|
||||
img {
|
||||
display: block;
|
||||
width: 90%;
|
||||
margin: auto;
|
||||
}
|
||||
}
|
||||
.page-main-text{
|
||||
|
||||
.page-main-text {
|
||||
padding-left: 20px;
|
||||
padding-top: 80px;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
font-size: 32px;
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
line-height: 45px;
|
||||
margin-bottom: 17px;
|
||||
}
|
||||
p{
|
||||
|
||||
p {
|
||||
font-size: 18px;
|
||||
font-weight: 400;
|
||||
color: #828282;
|
||||
@ -556,57 +604,59 @@
|
||||
padding-right: 20px;
|
||||
}
|
||||
}
|
||||
.page-main-texts{
|
||||
|
||||
.page-main-texts {
|
||||
padding-top: 40px;
|
||||
h3{
|
||||
|
||||
h3 {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 24px;
|
||||
img{
|
||||
|
||||
img {
|
||||
width: 24px;
|
||||
margin-right:10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
p{
|
||||
font-size:14px;
|
||||
|
||||
p {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-footer {
|
||||
.footer-service {
|
||||
width: 100%;
|
||||
height: 188px;
|
||||
background-color: #ffa25a;
|
||||
position: relative;
|
||||
|
||||
.footer-bg-box {
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
height: 188px;
|
||||
|
||||
// background: url("../images/index/footer-bg.png") no-repeat
|
||||
// center center;
|
||||
// background-size: 100% 100%;
|
||||
// background-size: contain;
|
||||
.box-title {
|
||||
height: 45px;
|
||||
font-size: 16px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 45px;
|
||||
text-align: center;
|
||||
margin: 33px 0 22px 0;
|
||||
}
|
||||
|
||||
.buttom-box {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
.login-btn {
|
||||
width: 150px;
|
||||
height: 48px;
|
||||
background: #ffffff;
|
||||
border-radius: 8px;
|
||||
font-size: 14px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffa25a;
|
||||
line-height: 48px;
|
||||
@ -614,13 +664,13 @@
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.contact-btn {
|
||||
width: 150px;
|
||||
height: 48px;
|
||||
border-radius: 8px;
|
||||
border: 1px solid #ffffff;
|
||||
font-size: 14px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #ffffff;
|
||||
line-height: 48px;
|
||||
@ -630,21 +680,23 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer-opyright {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
background: #ffffff;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
font-family: PingFangSC-Regular, PingFang SC;
|
||||
font-weight: 400;
|
||||
color: #828282;
|
||||
line-height: 60px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.client-downloads{
|
||||
|
||||
.client-downloads {
|
||||
position: fixed;
|
||||
right: 20px;
|
||||
bottom: 20px;
|
||||
|
||||
@ -179,6 +179,10 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 0 !important;
|
||||
h3 {
|
||||
font-size: 16px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.ivu-form {
|
||||
flex: 1;
|
||||
padding: 24px 40px;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user