Skip to content

Commit 3e75593

Browse files
committed
支持使用@提及任务成员
1 parent 2962e24 commit 3e75593

File tree

4 files changed

+71
-10
lines changed

4 files changed

+71
-10
lines changed

src/api/task.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ export function star(code, star) {
4242
return $http.post('project/task/star', {star: star, taskCode: code});
4343
}
4444

45-
export function createComment(code, comment) {
46-
return $http.post('project/task/createComment', {taskCode: code, comment: comment});
45+
export function createComment(code, comment, mentions) {
46+
return $http.post('project/task/createComment', {taskCode: code, comment: comment, mentions: mentions});
4747
}
4848

4949
export function assignTask(data) {

src/components/layout/header/HeaderNotice.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@
4242
<a-list-item :key="item.id">
4343
<a-list-item-meta :description="item.create_time">
4444
<span slot="title">
45-
<p v-html="item.title"></p>
45+
<p v-html="item.title"></p>
46+
<p class="ant-list-item-meta-description" v-html="item.content"></p>
47+
4648
</span>
4749
<a-avatar style="background-color: white" slot="avatar"
4850
src="https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png"/>

src/components/project/taskDetail.vue

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -854,9 +854,20 @@
854854
</div>
855855
</vue-scroll>
856856
</div>
857-
<div class="footer">
858-
<a-textarea v-model="comment" :rows="1" placeholder="按 Ctrl+Enter 快速发表评论"
859-
style="margin-right: 24px;"/>
857+
<div class="footer" id="footer">
858+
<a-popover trigger="click" placement="top" :visible="showMentions" arrowPointAtCenter :getPopupContainer="getPopup">
859+
<template slot="content">
860+
<div class="mentions-content" style="width: 200px;">
861+
<div class="mentions-wrapper" v-for="member in taskMemberList" :key="member.id" @click="selectMentionMember(member)">
862+
<a-avatar :src="member.avatar" icon="user" :size="28"/>
863+
<span class="muted name m-l-xs">{{member.name}}</span>
864+
</div>
865+
</div>
866+
</template>
867+
<!-- <span slot="title">Title</span>-->
868+
<a-textarea ref="commentText" v-model="comment" :rows="1" placeholder="支持@提及任务成员,Ctrl+Enter发表评论"
869+
style="margin-right: 24px;"/>
870+
</a-popover>
860871
<a-button class="middle-btn" type="primary" @click="createComment">评论</a-button>
861872
</div>
862873
</div>
@@ -1126,7 +1137,10 @@
11261137
modalTitle: '设置预估工时',
11271138
modalStatus: false,
11281139
confirmLoading: false,
1129-
}
1140+
},
1141+
//显示评论提及
1142+
showMentions: false,
1143+
mentionsList: []
11301144
}
11311145
},
11321146
computed: {
@@ -1210,11 +1224,17 @@
12101224
})()
12111225
};
12121226
document.onkeydown = (event) => {
1227+
console.log(event);
12131228
var e = event || window.event || arguments.callee.caller.arguments[0];
12141229
if (13 == e.keyCode && e.ctrlKey) {
12151230
//处理的部分
12161231
this.createComment();
12171232
}
1233+
if ('Digit2' == e.code) {
1234+
this.showMentions = true;
1235+
}else{
1236+
this.showMentions = false;
1237+
}
12181238
};
12191239
setTimeout(() => {
12201240
this.uploader.assignBrowse(document.getElementById('upload-file'));
@@ -1578,11 +1598,21 @@
15781598
});
15791599
},
15801600
createComment() {
1581-
if (!this.comment.trim()) {
1601+
let comment = this.comment.trim();
1602+
if (!comment) {
15821603
return false;
15831604
}
1584-
createComment(this.code, this.comment).then(() => {
1605+
comment += ' ';
1606+
const regx = /(@[^@]+) /g;
1607+
comment.match(regx).forEach((v) => {
1608+
let str = v.substring(1, v.length - 1);
1609+
if (this.mentionsList.findIndex(item => item == str) === -1) {
1610+
this.mentionsList.push(str);
1611+
}
1612+
});
1613+
createComment(this.code, this.comment, JSON.stringify(this.mentionsList)).then(() => {
15851614
this.comment = '';
1615+
this.mentionsList = [];
15861616
this.getTaskLog();
15871617
});
15881618
},
@@ -1764,6 +1794,16 @@
17641794
this.visibleChildTaskMemberMenu = false;
17651795
this.childExecutor = member;
17661796
},
1797+
getPopup() {
1798+
return document.getElementById('footer');
1799+
},
1800+
selectMentionMember(member) {
1801+
this.showMentions = false;
1802+
this.comment += member.name + ' ';
1803+
this.$nextTick(() => {
1804+
this.$refs.commentText.focus();
1805+
});
1806+
},
17671807
changeModalHeight() {
17681808
const defaultWidth = this.width;
17691809
let width = $(window).width() - 100;
@@ -2240,4 +2280,23 @@
22402280
}
22412281
}
22422282
}
2283+
.footer{
2284+
.ant-popover-inner-content{
2285+
padding: 0;
2286+
.mentions-content {
2287+
width: 200px;
2288+
padding: 12px 0;
2289+
.mentions-wrapper {
2290+
width: 100%;
2291+
display: flex;
2292+
align-items: center;
2293+
padding: 6px 12px;
2294+
&:hover{
2295+
cursor: pointer;
2296+
background: rgba(51, 143, 229, 0.1);
2297+
}
2298+
}
2299+
}
2300+
}
2301+
}
22432302
</style>

src/views/notify/system.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
</a-form>
3030
</div>
3131
<div class="action">
32-
<a-button icon="check" :disabled="!selectedRowKeys.length" @click="listAction({key:'setReadied'})">
32+
<a-button icon="check" class="m-r-sm" :disabled="!selectedRowKeys.length" @click="listAction({key:'setReadied'})">
3333
<span>批量标记已读</span>
3434
</a-button>
3535
<a-button icon="delete" type="danger" :disabled="!selectedRowKeys.length" @click="listAction({key:'delete'})">

0 commit comments

Comments
 (0)