This commit is contained in:
parent
b2770044e0
commit
32e9f798da
|
@ -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;
|
||||||
|
|
|
@ -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>
|
||||||
<template slot="title">
|
<a-dropdown
|
||||||
<span>点击设置开始时间</span>
|
v-if="false"
|
||||||
</template>
|
:trigger="['click']"
|
||||||
<div class="field-flex">
|
v-model="visibleTaskCopied"
|
||||||
<a class="muted name" style="margin: 0">
|
placement="bottomCenter"
|
||||||
<template v-if="!task.setBeginTime">设置开始时间
|
>
|
||||||
</template>
|
<a-tooltip :mouseEnterDelay="0.5" >
|
||||||
<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">
|
<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.setEndTime">设置截止时间</template>
|
<a-avatar icon="user" size="small"/>
|
||||||
<template v-else>{{task.end_time_format}}</template>
|
<a class="muted name">添加抄送人</a>
|
||||||
</a>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</a-tooltip>
|
</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">
|
<div slot="overlay">
|
||||||
<a-date-picker
|
<task-member-menu
|
||||||
v-model="task.end_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="showEndTime"
|
visibleTaskCopied = false"
|
||||||
@ok="doEndTime(true)"
|
@close="changeRecipient"
|
||||||
>
|
></task-member-menu>
|
||||||
<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>
|
||||||
|
</a-tooltip>
|
||||||
|
<div slot="overlay">
|
||||||
|
<task-member-menu
|
||||||
|
v-if="exc.show"
|
||||||
|
:taskCode="code"
|
||||||
|
:projectCode="projectCodeCurrent"
|
||||||
|
:isCommit="false"
|
||||||
|
@inviteProjectMember="
|
||||||
|
showInviteMember = true,
|
||||||
|
exc.show = false"
|
||||||
|
@close="changeExchangeShow"
|
||||||
|
></task-member-menu>
|
||||||
|
</div>
|
||||||
|
</a-dropdown>
|
||||||
</div>
|
</div>
|
||||||
<div class="m-t-sm" v-if="hasMoreDesc">
|
<a-dropdown
|
||||||
<a v-show="!showMoreDesc"
|
v-if="false"
|
||||||
@click="checkShowMoreDesc(true)">显示更多</a>
|
:trigger="['click']"
|
||||||
<a v-show="showMoreDesc"
|
v-model="exchangeMenu"
|
||||||
@click="checkShowMoreDesc(false)">收起备注</a>
|
placement="bottomCenter"
|
||||||
</div>
|
>
|
||||||
<div v-show="showTaskDescriptionEdit">
|
<a-tooltip :mouseEnterDelay="0.5" >
|
||||||
<editor ref="vueWangeditor"
|
<template slot="title">
|
||||||
id="editor"
|
<span>添加工作流转人员</span>
|
||||||
:uploadImgServer="editorConfig.uploadImgServer"
|
</template>
|
||||||
:uploadImgHeaders="editorConfig.uploadImgHeaders"
|
<div class="field-flex" style="flex-wrap: wrap;">
|
||||||
:menus="editorConfig.menus"
|
<template>
|
||||||
></editor>
|
<a-avatar icon="user" size="small"/>
|
||||||
<div class="action-btn pull-right">
|
<a class="muted name">添加人员</a>
|
||||||
<a type="text" class="cancel-text muted"
|
</template>
|
||||||
@click="showTaskDescriptionEdit = false,initContent(false)">
|
</div>
|
||||||
取消
|
</a-tooltip>
|
||||||
</a>
|
<div slot="overlay">
|
||||||
<a-button type="primary" htmlType='submit'
|
<task-member-menu
|
||||||
class="middle-btn"
|
v-if="exchangeMenu"
|
||||||
@click="doContent">保存
|
:taskCode="code"
|
||||||
</a-button>
|
:projectCode="projectCodeCurrent"
|
||||||
|
:isCommit="false"
|
||||||
|
@inviteProjectMember="
|
||||||
|
showInviteMember = true,
|
||||||
|
exchangeMenu = false"
|
||||||
|
@close="changeExchange"
|
||||||
|
></task-member-menu>
|
||||||
</div>
|
</div>
|
||||||
</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;//子任务
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue