feat:添加任务 - 提示功能 - 100%

This commit is contained in:
weifashi 2023-07-19 00:35:06 +08:00
parent f8e70bd7f7
commit 874bf4b051
16 changed files with 207 additions and 143 deletions

View File

@ -1249,4 +1249,6 @@ Markdown 格式发送
继续
退出
会议组件加载失败!
以下人员以存在任务
以下人员已存在任务
确定

View File

@ -16883,5 +16883,16 @@
"de": "Geladen mit fallender fracht des meetings!",
"fr": "Échec du chargement du composant conférence!",
"id": "Perakitan perakitan gagal!"
},
{
"key": "以下人员已存在任务",
"zh": "",
"zh-CHT": "以下人員已存在任務",
"en": "The following personnel already have tasks",
"ko": "다음 구성원에 대한 작업이 이미 있습니다",
"ja": "次の者には任務があります",
"de": "Die folgenden personen haben den auftrag erledigt",
"fr": "Les personnes suivantes ont déjà une mission",
"id": "Yang berikut ini ada tugas"
}
]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
if(typeof window.LANGUAGE_DATA==="undefined")window.LANGUAGE_DATA={};window.LANGUAGE_DATA["zh"]=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]
if(typeof window.LANGUAGE_DATA==="undefined")window.LANGUAGE_DATA={};window.LANGUAGE_DATA["zh"]=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]

View File

@ -200,27 +200,7 @@
</div>
</div>
<Modal v-model="showTips" :title="$L('以下人员已存在任务')" >
<List :split="false" size="small">
<ListItem v-for="(items, userid) in tipsTask" :key="userid" >
<div style="flex: 1;width: 100%;">
<UserAvatar :userid="userid" :size="28" :show-icon="true" :show-name="true" tooltipDisabled/>
<div style="margin-left: 35px;margin-top: 10px;width: calc(100% - 35px);" v-for="(item, key) in items" :key="key" >
<div style="min-width: 135px; flex: 1; white-space: nowrap; text-overflow: ellipsis;overflow: hidden;">
<span style="color: #A7ABB5;">{{item.project_name}}</span>
<span>{{item.name}}</span>
</div>
<div style="min-width: 135px;text-align: left;">{{getCutTime(item)}}</div>
</div>
</div>
</ListItem>
</List>
<div slot="footer">
<Button type="default" @click="showTips=false">{{$L('取消')}}</Button>
<Button type="primary" :loading="loadIng > 0" @click="onAdd(again,true)">{{$L('确认添加')}}</Button>
</div>
</Modal>
<TaskExistTips ref="taskExistTipsRef" @onAdd="onAdd(again,true)"/>
</div>
</template>
@ -228,10 +208,11 @@
import TEditor from "../../../components/TEditor";
import {mapState} from "vuex";
import UserSelect from "../../../components/UserSelect.vue";
import TaskExistTips from "./TaskExistTips.vue";
export default {
name: "TaskAdd",
components: {UserSelect, TEditor},
components: {UserSelect, TEditor, TaskExistTips},
props: {
value: {
type: Boolean,
@ -299,9 +280,7 @@ export default {
beforeClose: [],
again: false,
showTips: false,
tipsTask: [],
again: false
}
},
@ -541,65 +520,28 @@ export default {
this.addData = Object.assign({}, this.addData, data);
},
getCutTime(item) {
let start_at = $A.Date(item.start_at, true);
let end_at = $A.Date(item.end_at, true);
let string = "";
console.log(start_at)
if ($A.formatDate('Y/m/d', start_at) == $A.formatDate('Y/m/d', end_at)) {
string = $A.formatDate('Y/m/d H:i', start_at) + " ~ " + $A.formatDate('H:i', end_at)
} else if ($A.formatDate('Y', start_at) == $A.formatDate('Y', end_at)) {
string = $A.formatDate('Y/m/d', start_at) + " ~ " + $A.formatDate('m/d', end_at)
string = string.replace(/( 00:00| 23:59)/g, "")
} else {
string = $A.formatDate('Y/m/d H:i', start_at) + " ~ " + $A.formatDate('Y/m/d H:i', end_at)
string = string.replace(/( 00:00| 23:59)/g, "")
}
return string
},
async onAddBefore(){
let isExistTask = false;
await this.$store.dispatch("call", {
url: 'project/task/easylists',
data: {
userid: this.addData.owner,
timerange: this.addData.times
},
method: 'get',
}).then(({data}) => {
if(data.data.length > 0) {
this.showTips = true;
let taskObj = {}
this.addData.owner.map(userid=>{
data.data.map(h=>{
if( (h.task_user || []).map(k=>k.owner ? k.userid : 0).indexOf(userid) !== -1 ){
if( !taskObj[userid] ){
taskObj[userid] = [];
}
taskObj[userid].push(h);
}
});
});
this.tipsTask = taskObj
isExistTask = true;
}
});
return isExistTask
},
async onAdd(again,affirm=false) {
if (!this.addData.name) {
$A.messageError("任务描述不能为空");
return;
}
this.loadIng++;
//
this.showTips = false;
this.again = false;
if(!affirm && this.addData.owner.length>0 && await this.onAddBefore()){
this.again = again;
return;
if(!affirm && this.addData.owner.length>0){
this.$refs['taskExistTipsRef'].isExistTask({
userids: this.addData.owner,
timerange: this.addData.times
}).then(res=>{
if(!res){
this.onAdd(again,true)
}else{
this.loadIng--;
this.again = again
}
});
return;
}
this.$store.dispatch("taskAdd", this.addData).then(({msg}) => {

View File

@ -454,26 +454,7 @@
<div v-if="!taskDetail.id" class="task-load"><Loading/></div>
</div>
<!-- 提示 -->
<Modal v-model="showTips" title="提示" >
<p>以下人员时间段中已存在任务</p>
<List :split="false" size="small">
<ListItem v-for="(item, key) in tipsTaskList" :key="key">
<UserAvatar v-for="(user, index) in item.task_user"
v-if="(taskDetail.owner_userid || []).indexOf(user.userid) !== -1"
:userid="user.userid"
:size="28"
:show-icon="true"
:show-name="false"
:key="index"
/>
<p style="margin-left: 10px;"> 项目{{item.project_name}} 任务{{item.name}}</p>
</ListItem>
</List>
<div slot="footer">
<Button type="default" @click="showTips=false">{{$L('取消')}}</Button>
<Button type="primary" :loading="loadIng > 0" @click="onAdd()">{{$L('确认添加')}}</Button>
</div>
</Modal>
<TaskExistTips ref="taskExistTipsRef" @onAdd="updateData('times', updateParams)"/>
</div>
</template>
@ -488,12 +469,21 @@ import {Store} from "le5le-store";
import TaskMenu from "./TaskMenu";
import ChatInput from "./ChatInput";
import UserSelect from "../../../components/UserSelect.vue";
import TaskExistTips from "./TaskExistTips.vue";
export default {
name: "TaskDetail",
components: {
UserSelect,
ChatInput, TaskMenu, ProjectLog, DialogWrapper, TaskUpload, TaskPriority, TEditor},
TaskExistTips,
ChatInput,
TaskMenu,
ProjectLog,
DialogWrapper,
TaskUpload,
TaskPriority,
TEditor
},
props: {
taskId: {
type: Number,
@ -598,9 +588,7 @@ export default {
{key: 'custom', label: '自定义'},
],
showTips: false,
tipsTaskList: [],
loadIng: 0,
updateParams: {},
}
},
@ -729,8 +717,6 @@ export default {
let start_at = $A.Date(taskDetail.start_at, true);
let end_at = $A.Date(taskDetail.end_at, true);
let string = "";
console.log(start_at)
console.log(end_at)
if ($A.formatDate('Y/m/d', start_at) == $A.formatDate('Y/m/d', end_at)) {
string = $A.formatDate('Y/m/d H:i', start_at) + " ~ " + $A.formatDate('H:i', end_at)
} else if ($A.formatDate('Y', start_at) == $A.formatDate('Y', end_at)) {
@ -964,26 +950,6 @@ export default {
}
},
async onUpdateDataBefore(params){
let isExistTask = false;
this.$store.dispatch("call", {
url: 'project/task/easylists',
data: {
taskid: this.taskDetail.id,
userid: this.taskDetail.owner_userid,
timerange: [params.start_at,params.end_at]
},
method: 'get',
}).then(({data}) => {
if(data.data.length > 0) {
this.showTips = true;
this.tipsTaskList = data.data
isExistTask = true;
}
});
return isExistTask
},
updateData(action, params) {
let successCallback = null;
switch (action) {
@ -1006,16 +972,16 @@ export default {
if (!desc) {
return `请输入修改备注`
}
console.log( this.onUpdateDataBefore(params) )
if(this.taskDetail.owner_userid.length>0 && this.onUpdateDataBefore(params)){
this.again = again;
console.log(11111)
return false;
}
console.log(22222)
// this.updateData("times", Object.assign(params, {desc}))
this.updateParams = Object.assign(params, {desc})
this.$refs['taskExistTipsRef'].isExistTask({
taskid: this.taskDetail.id,
userids: this.taskDetail.owner_userid,
timerange: [params.start_at,params.end_at]
}).then(res=>{
if(!res){
this.updateData("times", this.updateParams)
}
});
return false
},
});

View File

@ -0,0 +1,102 @@
<template>
<Modal v-model="show" :title="$L('以下人员已存在任务')" class="task-exist-tips" width="640">
<List :split="false" size="small">
<ListItem v-for="(items, userid) in tipsTask" :key="userid">
<div class="list-content">
<UserAvatar :userid="userid" :size="28" :show-icon="true" :show-name="true" tooltipDisabled />
<div class="list-task" v-for="(item, key) in items" :key="key">
<div class="list-task-info">
<span>[{{ item.project_name }}] </span>
<span>{{ item.name }}</span>
</div>
<div class="list-task-date">{{ getCutTime(item) }}</div>
</div>
</div>
</ListItem>
</List>
<div slot="footer">
<Button type="default" @click="show = false">{{ $L('取消') }}</Button>
<Button type="primary" @click="onAdd()">{{ $L('确定') }}</Button>
</div>
</Modal>
</template>
<script>
import TEditor from "../../../components/TEditor";
import UserSelect from "../../../components/UserSelect.vue";
export default {
name: "TaskAdd",
components: { UserSelect, TEditor },
props: {
value: {
type: Boolean,
default: false
},
},
data() {
return {
isExist: false,
show: false,
tipsTask: [],
loadIng: false,
}
},
methods: {
onAdd() {
this.$emit('onAdd', {})
this.show = false;
},
getCutTime(item) {
let start_at = $A.Date(item.start_at, true);
let end_at = $A.Date(item.end_at, true);
let string = "";
if ($A.formatDate('Y/m/d', start_at) == $A.formatDate('Y/m/d', end_at)) {
string = $A.formatDate('Y/m/d H:i', start_at) + " ~ " + $A.formatDate('H:i', end_at)
} else if ($A.formatDate('Y', start_at) == $A.formatDate('Y', end_at)) {
string = $A.formatDate('Y/m/d', start_at) + " ~ " + $A.formatDate('m/d', end_at)
string = string.replace(/( 00:00| 23:59)/g, "")
} else {
string = $A.formatDate('Y/m/d H:i', start_at) + " ~ " + $A.formatDate('Y/m/d H:i', end_at)
string = string.replace(/( 00:00| 23:59)/g, "")
}
return string
},
isExistTask({ userids, timerange, taskid }) {
this.isExist = false;
return new Promise(async resolve => {
this.$store.dispatch("call", {
url: 'project/task/easylists',
data: {
userid: userids,
timerange: timerange
},
method: 'get',
}).then(({ data }) => {
if (data.data.length > 0) {
this.show = true;
let taskObj = {}
userids.map(userid => {
data.data.map(h => {
if ((h.task_user || []).map(k => k.owner ? k.userid : 0).indexOf(userid) !== -1) {
if (!taskObj[userid]) {
taskObj[userid] = [];
}
taskObj[userid].push(h);
}
});
});
this.tipsTask = taskObj
this.isExist = true;
}
resolve(this.isExist)
});
});
}
}
}
</script>

View File

@ -23,3 +23,4 @@
@import "task-priority";
@import "team-management";
@import "update-log";
@import "task-exist-tips";

View File

@ -0,0 +1,40 @@
.task-exist-tips {
.ivu-modal-body {
padding: 0px 26px 16px 26px !important;
max-height: 500px;
overflow: auto;
}
.list-content {
flex: 1;
width: 100%;
}
.list-task {
@media (min-width: 450px) {
display: flex;
}
margin-left: 34px;
margin-top: 10px;
width: calc(100% - 34px);
}
.list-task-info {
min-width: 135px;
flex: 1;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
span:first-child {
color: #A7ABB5;
}
}
.list-task-date {
min-width: 135px;
text-align: left;
}
}