This commit is contained in:
weipengfei 2024-01-08 09:12:37 +08:00
parent b2770044e0
commit 32e9f798da
3 changed files with 352 additions and 460 deletions

View File

@ -148,36 +148,35 @@
<a-icon type="user"/> <a-icon type="user"/>
<span class="field-name">抄送人</span> <span class="field-name">抄送人</span>
</div> </div>
<div class="field-right"> <div class="field-right field-flex">
<div v-for="(co, index) in task.copied_list" :key="co.code" @click="spliceCopied(index)" class="field-flex" style="flex-wrap: wrap;">
<a-avatar :src="co.avatar" icon="user" size="small"/>
<a class="muted name">{{co.name}}</a>
</div>
<a-dropdown <a-dropdown
:trigger="['click']" :trigger="['click']"
v-model="visibleTaskMemberMenu" v-model="visibleTaskCopied"
placement="bottomCenter" placement="bottomCenter"
> >
<a-tooltip :mouseEnterDelay="0.5" > <a-tooltip :mouseEnterDelay="0.5" >
<template slot="title"> <template slot="title">
<span>点击设置抄送人</span> <span>点击设置抄送人</span>
</template> </template>
<div class="field-flex"> <div class="field-flex" >
<template v-if="task.executor"> <template>
<a-avatar :src="task.executor.avatar" icon="user"
size="small"/>
<a class="muted name">{{task.executor.name}}</a>
</template>
<template v-if="!task.executor">
<a-avatar icon="user" size="small"/> <a-avatar icon="user" size="small"/>
<a class="muted name">未设置</a> <a class="muted name">添加抄送人</a>
</template> </template>
</div> </div>
</a-tooltip> </a-tooltip>
<div slot="overlay"> <div slot="overlay">
<task-member-menu <task-member-menu
v-if="visibleTaskMemberMenu" v-if="visibleTaskCopied"
:projectCode="projectCode" :projectCode="projectCode"
:isCommit="false" :isCommit="false"
@inviteProjectMember=" @inviteProjectMember="
showInviteMember = true, showInviteMember = true,
visibleTaskMemberMenu = false" visibleTaskCopied = false"
@close="changeRecipient" @close="changeRecipient"
></task-member-menu> ></task-member-menu>
</div> </div>
@ -260,7 +259,7 @@
<div class="field-flex" style="flex-wrap: wrap;"> <div class="field-flex" style="flex-wrap: wrap;">
<template> <template>
<a-avatar icon="user" size="small"/> <a-avatar icon="user" size="small"/>
<a class="muted name">未设置</a> <a class="muted name">添加人员</a>
</template> </template>
</div> </div>
</a-tooltip> </a-tooltip>
@ -482,6 +481,7 @@
pri: 0, pri: 0,
priText: '普通', priText: '普通',
exchangeList: [], // exchangeList: [], //
copied_list: [], //
}, },
taskStatusList: COMMON.TASK_STATUS, taskStatusList: COMMON.TASK_STATUS,
taskLogList: [], taskLogList: [],
@ -494,7 +494,7 @@
visibleTaskMenu: false, visibleTaskMenu: false,
/*成员菜单*/ /*成员菜单*/
visibleTaskMemberMenu: false, visibleTaskCopied: false,
/*工作流转*/ /*工作流转*/
exchangeMenu: false, exchangeMenu: false,
/*工单标签*/ /*工单标签*/
@ -703,9 +703,15 @@
}, },
// //
changeRecipient(e){ changeRecipient(e){
this.task.executor = e; let obj = this.task.copied_list.find(item=>item.code==e.code);
if(!obj) this.task.copied_list.push(e);
else notice({title:'已经设置过, 请更换其他人员'}, 'error', 3000)
this.showInviteMember = false; this.showInviteMember = false;
this.visibleTaskMemberMenu = false; // this.visibleTaskCopied = false;
},
//
spliceCopied(index){
this.task.copied_list.splice(index, 1);
}, },
// //
changeExchange(e){ changeExchange(e){
@ -735,13 +741,44 @@
}) })
} }
}, },
//
addTask(){
this.createTask();
return console.log(this.task);
},
//
createTask(){
let task = JSON.parse(JSON.stringify(this.task));
task.exchangeList = task.exchangeList.map(item=>{
return item.code;
})
task.exchangeList = task.exchangeList.join(',');
task.copied_list = task.copied_list.map(item=>{
return item.code;
})
task.copied_list = task.copied_list.join(',');
task.assign_to = "";
// task.executor = task.executor.code;
task.stage_code = this.$route.query.stage_code;
task.project_code = this.$route.params.code;
task.end_time = new Date(task.end_time).getTime();
createTask(task).then(res=>{
console.log(res);
this.$emit('close', this.task);
this.$router.push(`/project/space/task/${this.$route.params.code}?re=1&from=${this.$route.query.from}`);
// this.$router.push(`/project/space/task/${this.$route.params.code}`);
}).catch(err=>{
notice({title: '创建失败'}, 'error', 5000);
})
},
detailClose() { detailClose() {
this.$emit('close', this.task); this.$emit('close', this.task);
this.$router.push(`/project/space/task/${this.$route.params.code}?re=1&from=${this.$route.query.from}`);
// this.$router.push(`/project/space/task/${this.task.project_code}`); // this.$router.push(`/project/space/task/${this.task.project_code}`);
}, },
clearMemberMenu() { clearMemberMenu() {
this.visibleTaskTagMenu = false; this.visibleTaskTagMenu = false;
this.visibleTaskMemberMenu = false; this.visibleTaskCopied = false;
this.showChildTask = false; this.showChildTask = false;
}, },
getTask() { getTask() {
@ -1013,10 +1050,6 @@
} }
return false; return false;
}, },
//
addTask(){
console.log(this.task);
},
changeModalHeight() { changeModalHeight() {
const defaultWidth = this.width; const defaultWidth = this.width;
let width = $(window).width() - 100; let width = $(window).width() - 100;

View File

@ -119,6 +119,136 @@
</div> </div>
<div class="task-basic-attrs-view muted"> <div class="task-basic-attrs-view muted">
<div class="field-list" :class="{'disabled': task.deleted}"> <div class="field-list" :class="{'disabled': task.deleted}">
<div class="component-mount pink-bg">
<div class="field">
<div class="field-left">
<a-icon type="file-text"/>
<span class="field-name">工作内容</span>
</div>
<div class="field-right width-block">
<div class="task-description" :class="{'disabled': task.deleted}"
v-show="!showTaskDescriptionEdit"
@click="showTaskDesc">
<div class="description-txt img-preview-content" v-show="task.description"
v-html="task.description"></div>
<span v-show="!task.description">添加工作内容</span>
</div>
<div class="m-t-sm" v-if="hasMoreDesc">
<a v-show="!showMoreDesc"
@click="checkShowMoreDesc(true)">显示更多</a>
<a v-show="showMoreDesc"
@click="checkShowMoreDesc(false)">收起工作内容</a>
</div>
<div v-show="showTaskDescriptionEdit">
<editor ref="vueWangeditor"
id="editor"
:uploadImgServer="editorConfig.uploadImgServer"
:uploadImgHeaders="editorConfig.uploadImgHeaders"
:menus="editorConfig.menus"
></editor>
<div class="action-btn pull-right">
<a type="text" class="cancel-text muted"
@click="showTaskDescriptionEdit = false,initContent(false)">
取消
</a>
<a-button type="primary" htmlType='submit'
class="middle-btn"
@click="doContent">保存
</a-button>
</div>
</div>
</div>
</div>
</div>
<div class="component-mount">
<div class="field">
<div class="field-left">
<a-icon type="calendar"/>
<span class="field-name">完成期限</span>
</div>
<div class="field-right field-date">
<template v-if="task.openBeginTime">
<a-dropdown :trigger="['click']" v-model="showBeginTime"
:disabled="!!task.deleted">
<a-tooltip :mouseEnterDelay="0.5" v-if="!task.deleted">
<template slot="title">
<span>点击设置开始完成期限</span>
</template>
<div class="field-flex">
<a class="muted name" style="margin: 0">
<template v-if="!task.setBeginTime">设置开始完成期限
</template>
<template v-else>{{task.begin_time_format}}
</template>
</a>
</div>
</a-tooltip>
<div class="field-flex" v-else>
<a class="muted name" style="margin: 0">
<template v-if="!task.setBeginTime">设置开始完成期限</template>
<template v-else>{{task.begin_time_format}}</template>
</a>
</div>
<div slot="overlay">
<a-date-picker
v-model="task.begin_time"
size="small"
format="MM月DD日 HH:mm"
showTime
allowClear
:showToday="false"
:open="showBeginTime"
@ok="doBeginTime(true)"
>
<template slot="renderExtraFooter">
<a style="position: absolute;" size="small"
@click="doBeginTime(false)">清除</a>
</template>
</a-date-picker>
</div>
</a-dropdown>
<span class="m-l-sm m-r-sm">-</span>
</template>
<a-dropdown :trigger="['click']" v-model="showEndTime"
:disabled="!!task.deleted">
<a-tooltip :mouseEnterDelay="0.5" v-if="!task.deleted">
<template slot="title">
<span>点击设置截止完成期限</span>
</template>
<div class="field-flex">
<a class="muted name" style="margin: 0">
<template v-if="!task.setEndTime">设置截止完成期限</template>
<template v-else>{{task.end_time_format}}</template>
</a>
</div>
</a-tooltip>
<div class="field-flex" v-else>
<a class="muted name" style="margin: 0">
<template v-if="!task.setEndTime">设置截止完成期限</template>
<template v-else>{{task.end_time_format}}</template>
</a>
</div>
<div slot="overlay">
<a-date-picker
v-model="task.end_time"
size="small"
format="MM月DD日 HH:mm"
showTime
allowClear
:showToday="false"
:open="showEndTime"
@ok="doEndTime(true)"
>
<template slot="renderExtraFooter">
<a style="position: absolute;" size="small"
@click="doEndTime(false)">清除</a>
</template>
</a-date-picker>
</div>
</a-dropdown>
</div>
</div>
</div>
<div class="component-mount"> <div class="component-mount">
<div class="field"> <div class="field">
<div class="field-left"> <div class="field-left">
@ -244,130 +374,114 @@
<div class="component-mount"> <div class="component-mount">
<div class="field"> <div class="field">
<div class="field-left"> <div class="field-left">
<a-icon type="calendar"/> <a-icon type="user"/>
<span class="field-name">时间</span> <span class="field-name">抄送人</span>
</div> </div>
<div class="field-right field-date"> <div class="field-right field-flex" style="flex-wrap: wrap;pointer-events: none;">
<template v-if="task.openBeginTime"> <div v-for="co in task.copied_info" :key="co.code" @click="spliceCopied(index)">
<a-dropdown :trigger="['click']" v-model="showBeginTime" <a-avatar :src="co.avatar" icon="user" size="small"/>
:disabled="!!task.deleted"> <a class="muted name">{{co.name}}</a>
<a-tooltip :mouseEnterDelay="0.5" v-if="!task.deleted"> </div>
<a-dropdown
v-if="false"
:trigger="['click']"
v-model="visibleTaskCopied"
placement="bottomCenter"
>
<a-tooltip :mouseEnterDelay="0.5" >
<template slot="title"> <template slot="title">
<span>点击设置开始时间</span> <span>点击设置抄送人</span>
</template> </template>
<div class="field-flex"> <div class="field-flex" >
<a class="muted name" style="margin: 0"> <template>
<template v-if="!task.setBeginTime">设置开始时间 <a-avatar icon="user" size="small"/>
<a class="muted name">添加抄送人</a>
</template> </template>
<template v-else>{{task.begin_time_format}}
</template>
</a>
</div> </div>
</a-tooltip> </a-tooltip>
<div class="field-flex" v-else>
<a class="muted name" style="margin: 0">
<template v-if="!task.setBeginTime">设置开始时间</template>
<template v-else>{{task.begin_time_format}}</template>
</a>
</div>
<div slot="overlay"> <div slot="overlay">
<a-date-picker <task-member-menu
v-model="task.begin_time" v-if="visibleTaskCopied"
size="small" :taskCode="code"
format="MM月DD日 HH:mm" :projectCode="projectCodeCurrent"
showTime :isCommit="false"
allowClear @inviteProjectMember="
:showToday="false" showInviteMember = true,
:open="showBeginTime" visibleTaskCopied = false"
@ok="doBeginTime(true)" @close="changeRecipient"
> ></task-member-menu>
<template slot="renderExtraFooter">
<a style="position: absolute;" size="small"
@click="doBeginTime(false)">清除</a>
</template>
</a-date-picker>
</div>
</a-dropdown>
<span class="m-l-sm m-r-sm">-</span>
</template>
<a-dropdown :trigger="['click']" v-model="showEndTime"
:disabled="!!task.deleted">
<a-tooltip :mouseEnterDelay="0.5" v-if="!task.deleted">
<template slot="title">
<span>点击设置截止时间</span>
</template>
<div class="field-flex">
<a class="muted name" style="margin: 0">
<template v-if="!task.setEndTime">设置截止时间</template>
<template v-else>{{task.end_time_format}}</template>
</a>
</div>
</a-tooltip>
<div class="field-flex" v-else>
<a class="muted name" style="margin: 0">
<template v-if="!task.setEndTime">设置截止时间</template>
<template v-else>{{task.end_time_format}}</template>
</a>
</div>
<div slot="overlay">
<a-date-picker
v-model="task.end_time"
size="small"
format="MM月DD日 HH:mm"
showTime
allowClear
:showToday="false"
:open="showEndTime"
@ok="doEndTime(true)"
>
<template slot="renderExtraFooter">
<a style="position: absolute;" size="small"
@click="doEndTime(false)">清除</a>
</template>
</a-date-picker>
</div> </div>
</a-dropdown> </a-dropdown>
</div> </div>
</div> </div>
</div> </div>
<div class="component-mount pink-bg"> <div class="component-mount">
<div class="field"> <div class="field">
<div class="field-left"> <div class="field-left">
<a-icon type="file-text"/> <a-icon type="gateway"/>
<span class="field-name">备注</span> <span class="field-name">工作流转</span>
</div> </div>
<div class="field-right width-block"> <div class="field-right field-flex" style="flex-wrap: wrap;">
<div class="task-description" :class="{'disabled': task.deleted}" <div v-for="(exc, index) in task.exchange_info" :key="exc.code" style="pointer-events: none;">
v-show="!showTaskDescriptionEdit" <a-dropdown
@click="showTaskDesc"> :trigger="['click']"
<div class="description-txt img-preview-content" v-show="task.description" v-model="exc.show"
v-html="task.description"></div> placement="bottomCenter"
<span v-show="!task.description">添加备注</span> >
<a-tooltip :mouseEnterDelay="0.5" >
<template slot="title">
<span>更换人员</span>
</template>
<div class="field-flex" style="flex-wrap: wrap;align-items: center;">
<a-avatar :src="exc.avatar" icon="user" size="small"/>
<a class="muted name">{{exc.name}}</a>
<a-icon type="double-right" v-if="index!=task.exchange_info.length-1" style="margin-right: 10px;"></a-icon>
</div> </div>
<div class="m-t-sm" v-if="hasMoreDesc"> </a-tooltip>
<a v-show="!showMoreDesc" <div slot="overlay">
@click="checkShowMoreDesc(true)">显示更多</a> <task-member-menu
<a v-show="showMoreDesc" v-if="exc.show"
@click="checkShowMoreDesc(false)">收起备注</a> :taskCode="code"
:projectCode="projectCodeCurrent"
:isCommit="false"
@inviteProjectMember="
showInviteMember = true,
exc.show = false"
@close="changeExchangeShow"
></task-member-menu>
</div> </div>
<div v-show="showTaskDescriptionEdit"> </a-dropdown>
<editor ref="vueWangeditor"
id="editor"
:uploadImgServer="editorConfig.uploadImgServer"
:uploadImgHeaders="editorConfig.uploadImgHeaders"
:menus="editorConfig.menus"
></editor>
<div class="action-btn pull-right">
<a type="text" class="cancel-text muted"
@click="showTaskDescriptionEdit = false,initContent(false)">
取消
</a>
<a-button type="primary" htmlType='submit'
class="middle-btn"
@click="doContent">保存
</a-button>
</div> </div>
<a-dropdown
v-if="false"
:trigger="['click']"
v-model="exchangeMenu"
placement="bottomCenter"
>
<a-tooltip :mouseEnterDelay="0.5" >
<template slot="title">
<span>添加工作流转人员</span>
</template>
<div class="field-flex" style="flex-wrap: wrap;">
<template>
<a-avatar icon="user" size="small"/>
<a class="muted name">添加人员</a>
</template>
</div> </div>
</a-tooltip>
<div slot="overlay">
<task-member-menu
v-if="exchangeMenu"
:taskCode="code"
:projectCode="projectCodeCurrent"
:isCommit="false"
@inviteProjectMember="
showInviteMember = true,
exchangeMenu = false"
@close="changeExchange"
></task-member-menu>
</div>
</a-dropdown>
</div> </div>
</div> </div>
</div> </div>
@ -410,330 +524,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="component-mount task-tag">
<div class="field">
<div class="field-left">
<a-icon type="tag"/>
<span class="field-name">标签</span>
</div>
<div class="field-right">
<div class="inline-block">
<a-tag :color="tag.tag.color" v-for="(tag,index) in task.tags"
:key="index">
{{tag.tag.name}}
<a-icon type="close" @click="removeTag(tag.tag,index)"/>
</a-tag>
</div>
<a-dropdown
:trigger="['click']"
v-model="visibleTaskTagMenu"
:disabled="!!task.deleted"
placement="bottomCenter"
>
<a-tooltip :mouseEnterDelay="0.5" v-if="!task.deleted">
<template slot="title">
<span>添加标签</span>
</template>
<div class="inline-block">
<a-icon class="member-item invite" type="plus-circle"
theme="twoTone"/>
</div>
</a-tooltip>
<div class="inline-block">
<a-icon class="member-item invite" type="plus-circle"
theme="twoTone"/>
</div>
<div slot="overlay">
<task-tag-menu
v-if="visibleTaskTagMenu"
:projectCode="projectCodeCurrent"
:taskCode="code"
@change="taskTagChange"
@update="taskTagUpdate"
@delete="taskTagDelete"
></task-tag-menu>
</div>
</a-dropdown>
</div>
</div>
</div>
<div class="component-mount">
<div class="field">
<div class="field-left">
<a-icon type="bars"/>
<span class="field-name">子任务 <span v-show="childTaskList.length"> · {{childTaskDoneNum}}/{{childTaskList.length}}</span></span>
</div>
<div class="field-right width-block">
</div>
</div>
</div>
<div class="component-mount">
<div class="field">
<div class="block-field width-block">
<div class="task-child">
<div class="task-list" v-show="childTaskList.length">
<div v-for="done in [0,1]" :key="done">
<div
v-for="(childTask, index) in childTaskList"
:key="childTask.code">
<div class="list-item task"
v-if="childTask.done == done"
>
<a-tooltip placement="top">
<template slot="title">
<span v-if="childTask.parentDone"
style="font-size: 12px;">父任务已完成无法重做子任务</span>
<span v-else-if="childTask.hasUnDone"
style="font-size: 12px;">子任务尚未全部完成无法完成父任务</span>
</template>
<div class="check-box-wrapper task-item"
@click.stop="()=>{if(task.deleted || childTask.parentDone || childTask.hasUnDone) return false;taskDone(childTask.code,!childTask.done,index,'child')}">
<a-icon class="check-box"
:class="{'disabled': task.deleted || childTask.parentDone || childTask.hasUnDone}"
:type="childTask.done ? 'check-square' : 'border'"
:style="{fontSize:'16px'}"/>
</div>
<!--<a class="task-item check-box"
:class="{'disabled': task.deleted || childTask.parentDone || childTask.hasUnDone}"
@click="()=>{if(task.deleted || childTask.parentDone || childTask.hasUnDone) return false;taskDone(childTask.code,!childTask.done,index,'child')}">
<a-icon type="check"
v-show="childTask.done"/>
</a>-->
</a-tooltip>
<a-dropdown :trigger="['click']"
v-model="childTask.visibleChildTaskMemberMenu"
:disabled="!!task.deleted"
placement="bottomCenter"
>
<a-tooltip :mouseEnterDelay="0.5">
<template slot="title">
<span v-if="childTask.executor">{{childTask.executor.name}}</span>
<span v-else>待认领</span>
</template>
<a-avatar
v-if="childTask.executor"
class="task-item"
:class="{'disabled': task.deleted}"
size="small"
icon="user"
:src="childTask.executor.avatar"
></a-avatar>
<a-avatar
v-else
class="task-item"
:class="{'disabled': task.deleted}"
size="small"
icon="user"
></a-avatar>
</a-tooltip>
<div slot="overlay">
<task-member-menu
v-if="childTask.visibleChildTaskMemberMenu"
:projectCode="projectCodeCurrent"
:taskCode="childTask.code"
:isCommit="true"
@close="childTask.visibleChildTaskMemberMenu = false;getChildTasks();"
@inviteProjectMember="
showInviteMember = true,
childTask.visibleChildTaskMemberMenu = false"
></task-member-menu>
</div>
</a-dropdown>
<!-- <a-tooltip :mouseEnterDelay="0.5">
<template slot="title">
<span v-if="childTask.executor">{{childTask.executor.name}}</span>
<span v-else>待认领</span>
</template>
<a-avatar
v-if="childTask.executor"
class="task-item"
:class="{'disabled': task.deleted}"
size="small"
icon="user"
:src="childTask.executor.avatar"
></a-avatar>
<a-avatar
v-else
class="task-item"
:class="{'disabled': task.deleted}"
size="small"
icon="user"
></a-avatar>
</a-tooltip>-->
<div class="task-item task-title"
@click.stop="init(childTask.code)">
<div class="title-text"
:class="{'done': childTask.done}"
>
{{childTask.name}}
</div>
</div>
<a class="muted" @click.stop="init(childTask.code)">
<a-icon class="task-item" type="right"/>
</a>
</div>
</div>
</div>
</div>
<div class="task-list" v-show="showChildTask">
<div class="add-task">
<div class="list-item task">
<span class="task-item check-box"></span>
<a-dropdown :trigger="['click']"
v-model="visibleChildTaskMemberMenu"
:disabled="!!task.deleted"
placement="bottomCenter"
>
<a-tooltip :mouseEnterDelay="0.5">
<template slot="title">
<span v-if="childExecutor">{{childExecutor.name}}</span>
<span v-else>待认领</span>
</template>
<div class="field-flex">
<template v-if="childExecutor">
<a-avatar class="task-item"
:src="childExecutor.avatar"
icon="user"
size="small"/>
</template>
<template v-if="!childExecutor">
<a-avatar class="task-item"
icon="user"
size="small"/>
</template>
</div>
</a-tooltip>
<div slot="overlay">
<task-member-menu
v-if="visibleChildTaskMemberMenu"
:projectCode="projectCodeCurrent"
:taskCode="childExecutor ? code : ''"
:isCommit="false"
@close="updateChildExecutor"
@inviteProjectMember="
showInviteChildTaskMember = true,
visibleChildTaskMemberMenu = false"
></task-member-menu>
</div>
</a-dropdown>
<div class="task-item task-input">
<a-input v-model="childTaskName"
@pressEnter="createTask"/>
</div>
</div>
<div class="action-btn text-right">
<a type="text" class="cancel-text muted"
@click="showChildTask = false">取消</a>
<a-button type="primary" htmlType='submit'
class="middle-btn"
@click="createTask">保存
</a-button>
</div>
</div>
</div>
<a-tooltip placement="top">
<template slot="title">
<span v-if="task.done" style="font-size: 12px;">父任务已完成无法添加新的子任务</span>
</template>
<a class="add-handler"
:class="{'disabled': task.done}"
v-show="!showChildTask"
@click="()=>{if (task.deleted || task.done) return false; showChildTask = true}">
<a-icon type="plus" style="margin-right: 6px;"/>
添加子任务
</a>
</a-tooltip>
</div>
</div>
</div>
</div>
<div class="component-mount">
<div class="field">
<div class="field-left" style="width: 100%">
<a-icon type="clock-circle"/>
<span class="field-name">工时
<span v-if="workTimeList.length"> · 实际工时 {{workTimeTotal}} 小时工时记录 {{workTimeList.length}} 预估工时 {{task.work_time}} 小时 <a
class="muted m-l-sm" @click="doPlainWorkTime">
<a-icon class="task-item" type="edit"/>
</a>
</span>
<span v-else>
<span v-if="task.work_time"> · 预估工时 {{task.work_time}} 小时</span>
<a-tooltip>
<template slot="title">
<span>设置预估工时</span>
</template>
<a class="muted m-l-sm" @click="doPlainWorkTime">
<a-icon class="task-item" type="edit"/>
</a>
</a-tooltip>
</span>
</span>
</div>
</div>
</div>
<div class="component-mount">
<div class="field">
<div class="block-field width-block">
<div class="task-child">
<div class="task-list" v-show="workTimeList.length">
<div
v-for="(workTime, index) in workTimeList"
:key="workTime.code">
<div class="list-item task m-l-xs">
<div class="task-item task-title hover-none">
<div class="title-text"
>
<a-tooltip :mouseEnterDelay="0.5">
<template slot="title">
<span v-if="workTime.member">{{workTime.member.name}}</span>
<span v-else>待认领</span>
</template>
<a-avatar
class="task-item"
size="small"
icon="user"
:src="workTime.member.avatar"
></a-avatar>
</a-tooltip>
{{workTime.member.name}}
{{moment(workTime.begin_time).format('MM月DD日 HH:mm')}}开始 工时为
{{workTime.num}} 小时
<div class="muted"
v-show="workTime.content"
style="padding-left: 40px;margin-top: 6px;">
{{workTime.content}}
</div>
</div>
</div>
<a class="muted" @click="doWorkTime(workTime)">
<a-icon class="task-item" type="edit"/>
</a>
<a class="muted"
@click="deleteWorkTime(workTime, index)">
<a-icon class="task-item" type="delete"/>
</a>
</div>
</div>
</div>
<a-tooltip placement="top">
<a class="add-handler" @click="doWorkTime(false)">
<a-icon type="plus" style="margin-right: 6px;"/>
添加工时
</a>
</a-tooltip>
</div>
</div>
</div>
</div>
<div class="component-mount"> <div class="component-mount">
<div class="field"> <div class="field">
<div class="field-left"> <div class="field-left">
@ -989,7 +779,7 @@
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :span="12"> <a-col :span="12">
<a-form-item <a-form-item
label="开始时间" label="开始完成期限"
> >
<a-date-picker <a-date-picker
showTime showTime
@ -1006,7 +796,7 @@
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<a-form-item <a-form-item
label="消耗时间" label="消耗完成期限"
> >
<a-input <a-input
type="text" type="text"
@ -1014,7 +804,7 @@
addonAfter="小时" addonAfter="小时"
v-decorator="[ v-decorator="[
'num', 'num',
{rules: [{ required: true, message: '请输入消耗时间' }], validateTrigger: 'change'} {rules: [{ required: true, message: '请输入消耗完成期限' }], validateTrigger: 'change'}
]" ]"
> >
</a-input> </a-input>
@ -1148,6 +938,8 @@
/*成员菜单*/ /*成员菜单*/
visibleTaskMemberMenu: false, visibleTaskMemberMenu: false,
/*抄送人菜单*/
visibleTaskCopied: false,
/*任务标签*/ /*任务标签*/
visibleTaskTagMenu: false, visibleTaskTagMenu: false,
visibleProjectMemberMenu: false, visibleProjectMemberMenu: false,
@ -1161,7 +953,7 @@
showBeginTime: false, showBeginTime: false,
showEndTime: false, showEndTime: false,
/*备注*/ /*工作内容*/
showTaskDescriptionEdit: false, showTaskDescriptionEdit: false,
showMoreDesc: false, showMoreDesc: false,
hasMoreDesc: false, hasMoreDesc: false,
@ -1332,6 +1124,67 @@
} }
}, },
methods: { methods: {
//
getDepartment(){
getDepartment().then((res)=>{
this.departmentList = res.data.list;
})
},
//
departmentDropClick(e){
let obj = this.departmentList.find(item=>item.code == e.key);
this.department = obj;
getliasonMan({
searchType: 4,
type: 1,
departmentCode: obj.code
}).then(res=>{
if(res.data.list[0]) this.liasionMan = res.data.list[0];
else notice({
title: '该部门没有联络员',
}, 'notice', 'error', 5)
})
},
//
changeRecipient(e){
let obj = this.task.copied_info.find(item=>item.code==e.code);
if(!obj) this.task.copied_info.push(e);
else notice({title:'已经设置过, 请更换其他人员'}, 'error', 3000)
this.showInviteMember = false;
// this.visibleTaskCopied = false;
},
//
spliceCopied(index){
this.task.copied_info.splice(index, 1);
},
//
changeExchange(e){
this.task.exchange_info.push({
f_key: new Date().getTime(),
show: false,
...e
})
},
//
changeExchangeShow(e){
let index = this.task.exchange_info.findIndex(item=>item.show==true);
if(index!=-1){
this.task.exchange_info[index].show = false;
let list = JSON.parse(JSON.stringify(this.task.exchange_info));
if(e){
list[index] = {
f_key: new Date().getTime(),
show: false,
...e
};
}else {
list.splice(index, 1)
}
this.$nextTick(()=>{
this.task.exchange_info = list;
})
}
},
init(code = null, loading = true) { init(code = null, loading = true) {
if (code) { if (code) {
this.code = code;// this.code = code;//

View File

@ -322,7 +322,7 @@
</div> </div>
<!--添加任务按钮--> <!--添加任务按钮-->
<div class="task-creator-handler-wrap" @click.stop="showTaskCard(index)" <div class="task-creator-handler-wrap" @click.stop="showTaskCard(index)"
v-if="!stage.showTaskCard"> v-if="!stage.showTaskCard&&false">
<a class="task-creator-handler link-add-handler"> <a class="task-creator-handler link-add-handler">
<a-icon type="plus-circle" style="padding-right: 6px;"></a-icon> <a-icon type="plus-circle" style="padding-right: 6px;"></a-icon>
添加任务 添加任务
@ -769,6 +769,12 @@
}); });
} }
} }
if(to.query.re==1){
let stage = this.taskStages[+to.query.from];
getTasks({stageCode: stage.code}).then((res) => {
console.log('----', res);
});
}
}, },
socketAction(val) { socketAction(val) {
if (val.action === 'organization:task') { if (val.action === 'organization:task') {
@ -1002,11 +1008,11 @@
}, },
// //
addTask(stageCode, stageIndex){ addTask(stageCode, stageIndex){
console.log('-----',stageCode); // console.log('-----',stageCode);
this.task.stage_code = stageCode; this.task.stage_code = stageCode;
this.task.project_code = this.code; this.task.project_code = this.code;
this.task.assign_to = this.defaultExecutor.code; this.task.assign_to = this.defaultExecutor.code;
this.$router.push(`${this.$route.path}/add/${this.code}?from=${stageIndex}`); this.$router.push(`${this.$route.path}/add/${this.code}?from=${stageIndex}&stage_code=${stageCode}`);
}, },
// //
createTask(stageCode, stageIndex) { createTask(stageCode, stageIndex) {