no message

This commit is contained in:
kuaifan 2021-06-10 23:58:05 +08:00
parent 4eee5cced6
commit d7ce383c36
8 changed files with 120 additions and 98 deletions

View File

@ -43,7 +43,7 @@
</div> </div>
</div> </div>
</div> </div>
<Modal :title="$L('浏览图片空间的图片')" v-model="browseVisible" class="img-upload-modal" class-name="simple-modal" width="710"> <Modal :title="$L('浏览图片空间的图片')" v-model="browseVisible" class="img-upload-modal" width="710">
<div class="browse-load" v-if="isLoading">{{$L('加载中...')}}</div> <div class="browse-load" v-if="isLoading">{{$L('加载中...')}}</div>
<div class="browse-list" :class="httpType==='input'?'browse-list-disabled':''" ref="browselistbox"> <div class="browse-list" :class="httpType==='input'?'browse-list-disabled':''" ref="browselistbox">
<div class="browse-item" v-for="item in browseList" @click="browseItem(item)"> <div class="browse-item" v-for="item in browseList" @click="browseItem(item)">
@ -66,7 +66,7 @@
<Button v-if="httpType===''" type="primary" @click="handleCallback(true)">{{$L('完成')}}</Button> <Button v-if="httpType===''" type="primary" @click="handleCallback(true)">{{$L('完成')}}</Button>
</div> </div>
</Modal> </Modal>
<Modal :title="$L('查看图片')" v-model="visible" class="img-upload-modal" class-name="simple-modal" draggable> <Modal :title="$L('查看图片')" v-model="visible" class="img-upload-modal" draggable>
<div style="max-height:480px;overflow:auto;"> <div style="max-height:480px;overflow:auto;">
<a :href="imgVisible" target="_blank"><img :src="imgVisible" v-if="visible" style="max-width:100%;max-height:900px;display:block;margin:0 auto"></a> <a :href="imgVisible" target="_blank"><img :src="imgVisible" v-if="visible" style="max-width:100%;max-height:900px;display:block;margin:0 auto"></a>
</div> </div>

View File

@ -34,7 +34,7 @@
<Icon type="ios-loading" class="upload-control-spin-icon-load"></Icon> <Icon type="ios-loading" class="upload-control-spin-icon-load"></Icon>
<div>{{$L('正在上传文件...')}}</div> <div>{{$L('正在上传文件...')}}</div>
</Spin> </Spin>
<Modal v-model="transfer" class="teditor-transfer" @on-visible-change="transferChange" class-name="simple-modal" footer-hide fullscreen transfer> <Modal v-model="transfer" class="teditor-transfer" @on-visible-change="transferChange" footer-hide fullscreen transfer>
<div slot="close"> <div slot="close">
<Button type="primary" size="small">{{$L('完成')}}</Button> <Button type="primary" size="small">{{$L('完成')}}</Button>
</div> </div>

View File

@ -73,8 +73,7 @@
<Modal <Modal
v-model="addShow" v-model="addShow"
:title="$L('新建项目')" :title="$L('新建项目')"
:mask-closable="false" :mask-closable="false">
class-name="simple-modal">
<Form ref="addProject" :model="addData" :rules="addRule" label-width="auto" @submit.native.prevent> <Form ref="addProject" :model="addData" :rules="addRule" label-width="auto" @submit.native.prevent>
<FormItem prop="name" :label="$L('项目名称')"> <FormItem prop="name" :label="$L('项目名称')">
<Input type="text" v-model="addData.name"></Input> <Input type="text" v-model="addData.name"></Input>
@ -101,6 +100,14 @@
<Button type="primary" :loading="loadIng > 0" @click="onAddProject">{{$L('添加')}}</Button> <Button type="primary" :loading="loadIng > 0" @click="onAddProject">{{$L('添加')}}</Button>
</div> </div>
</Modal> </Modal>
<!--任务详情-->
<Modal
v-model="projectTask._show"
:title="$L('任务详情')"
:mask-closable="false">
</Modal>
</div> </div>
</template> </template>
@ -156,7 +163,7 @@ export default {
}, },
computed: { computed: {
...mapState(['userId', 'userInfo', 'dialogMsgUnread', 'projectList']), ...mapState(['userId', 'userInfo', 'dialogMsgUnread', 'projectList', 'projectTask']),
}, },
watch: { watch: {

View File

@ -122,72 +122,75 @@
<div <div
v-for="item in panelTask(column.project_task)" v-for="item in panelTask(column.project_task)"
:class="['task-item task-draggable', item.complete_at ? 'complete' : '']" :class="['task-item task-draggable', item.complete_at ? 'complete' : '']"
:style="item.color ? {backgroundColor: item.color} : {}"> :style="item.color ? {backgroundColor: item.color} : {}"
<div :class="['task-head', item.desc ? 'has-desc' : '']"> @click="$store.commit('openTask', item)">
<div class="task-title"><pre>{{item.name}}</pre></div> <div :class="['task-head', item.desc ? 'has-desc' : '']">
<div v-if="item.loading === true" class="loading"><Loading /></div> <div class="task-title"><pre>{{item.name}}</pre></div>
<EDropdown <div class="task-menu" @click.stop="">
v-else <div v-if="item.loading === true" class="loading"><Loading /></div>
trigger="click" <EDropdown
size="small" v-else
@command="dropTask(item, $event)"> trigger="click"
<Icon type="ios-more" /> size="small"
<EDropdownMenu slot="dropdown" class="project-list-more-dropdown-menu"> @command="dropTask(item, $event)">
<EDropdownItem v-if="item.complete_at" command="uncomplete"> <Icon type="ios-more" />
<div class="item red"> <EDropdownMenu slot="dropdown" class="project-list-more-dropdown-menu">
<Icon type="md-checkmark-circle-outline" />{{$L('标记未完成')}} <EDropdownItem v-if="item.complete_at" command="uncomplete">
</div> <div class="item red">
</EDropdownItem> <Icon type="md-checkmark-circle-outline" />{{$L('标记未完成')}}
<EDropdownItem v-else command="complete"> </div>
<div class="item"> </EDropdownItem>
<Icon type="md-radio-button-off" />{{$L('完成')}} <EDropdownItem v-else command="complete">
</div> <div class="item">
</EDropdownItem> <Icon type="md-radio-button-off" />{{$L('完成')}}
<EDropdownItem command="archived"> </div>
<div class="item"> </EDropdownItem>
<Icon type="ios-filing" />{{$L('归档')}} <EDropdownItem command="archived">
</div> <div class="item">
</EDropdownItem> <Icon type="ios-filing" />{{$L('归档')}}
<EDropdownItem command="delete"> </div>
<div class="item"> </EDropdownItem>
<Icon type="md-trash" />{{$L('删除')}} <EDropdownItem command="delete">
</div> <div class="item">
</EDropdownItem> <Icon type="md-trash" />{{$L('删除')}}
<EDropdownItem divided disabled>{{$L('背景色')}}</EDropdownItem> </div>
<EDropdownItem v-for="(c, k) in taskColorList" :key="k" :command="c"> </EDropdownItem>
<div class="item"> <EDropdownItem divided disabled>{{$L('背景色')}}</EDropdownItem>
<i class="iconfont" :style="{color:c.color||'#f9f9f9'}" v-html="c.color == item.color ? '&#xe61d;' : '&#xe61c;'"></i>{{$L(c.name)}} <EDropdownItem v-for="(c, k) in taskColorList" :key="k" :command="c">
</div> <div class="item">
</EDropdownItem> <i class="iconfont" :style="{color:c.color||'#f9f9f9'}" v-html="c.color == item.color ? '&#xe61d;' : '&#xe61c;'"></i>{{$L(c.name)}}
</EDropdownMenu> </div>
</EDropdown> </EDropdownItem>
</EDropdownMenu>
</EDropdown>
</div>
</div>
<div v-if="item.desc" class="task-desc" v-html="item.desc"></div>
<div v-if="item.task_tag.length > 0" class="task-tags">
<Tag v-for="(tag, keyt) in item.task_tag" :key="keyt" :color="tag.color">{{tag.name}}</Tag>
</div>
<div class="task-users">
<ul>
<li v-for="(user, keyu) in item.task_user" :key="keyu">
<UserAvatar :userid="user.userid" size="32" :borderWitdh="2" :borderColor="item.color"/>
</li>
</ul>
<div v-if="item.file_num > 0" class="task-icon">{{item.file_num}}<Icon type="ios-link-outline" /></div>
<div v-if="item.msg_num > 0" class="task-icon">{{item.msg_num}}<Icon type="ios-chatbubbles-outline" /></div>
</div>
<div class="task-progress">
<div v-if="item.sub_num > 0" class="task-sub-num">{{item.sub_complete}}/{{item.sub_num}}</div>
<Progress :percent="item.percent" :stroke-width="6" />
<ETooltip
v-if="item.end_at"
:class="['task-time', item.today ? 'today' : '', item.overdue ? 'overdue' : '']"
:open-delay="600"
:content="item.end_at">
<div v-if="!item.complete_at"><Icon type="ios-time-outline"/>{{ expiresFormat(item.end_at) }}</div>
</ETooltip>
</div>
<em v-if="item.p_name" class="priority-color" :style="{backgroundColor:item.p_color}"></em>
</div> </div>
<div v-if="item.desc" class="task-desc" v-html="item.desc"></div>
<div v-if="item.task_tag.length > 0" class="task-tags">
<Tag v-for="(tag, keyt) in item.task_tag" :key="keyt" :color="tag.color">{{tag.name}}</Tag>
</div>
<div class="task-users">
<ul>
<li v-for="(user, keyu) in item.task_user" :key="keyu">
<UserAvatar :userid="user.userid" size="32" :borderWitdh="2" :borderColor="item.color"/>
</li>
</ul>
<div v-if="item.file_num > 0" class="task-icon">{{item.file_num}}<Icon type="ios-link-outline" /></div>
<div v-if="item.msg_num > 0" class="task-icon">{{item.msg_num}}<Icon type="ios-chatbubbles-outline" /></div>
</div>
<div class="task-progress">
<div v-if="item.sub_num > 0" class="task-sub-num">{{item.sub_complete}}/{{item.sub_num}}</div>
<Progress :percent="item.percent" :stroke-width="6" />
<ETooltip
v-if="item.end_at"
:class="['task-time', item.today ? 'today' : '', item.overdue ? 'overdue' : '']"
:open-delay="600"
:content="item.end_at">
<div v-if="!item.complete_at"><Icon type="ios-time-outline"/>{{ expiresFormat(item.end_at) }}</div>
</ETooltip>
</div>
<em v-if="item.p_name" class="priority-color" :style="{backgroundColor:item.p_color}"></em>
</div>
<div class="task-item"> <div class="task-item">
<TaskAddSimple <TaskAddSimple
:column-id="column.id" :column-id="column.id"
@ -291,8 +294,7 @@
width: '90%', width: '90%',
maxWidth: '640px' maxWidth: '640px'
}" }"
:mask-closable="false" :mask-closable="false">
class-name="simple-modal">
<TaskAdd v-model="addData"/> <TaskAdd v-model="addData"/>
<div slot="footer"> <div slot="footer">
<Button type="default" @click="addShow=false">{{$L('取消')}}</Button> <Button type="default" @click="addShow=false">{{$L('取消')}}</Button>
@ -304,8 +306,7 @@
<Modal <Modal
v-model="settingShow" v-model="settingShow"
:title="$L('项目设置')" :title="$L('项目设置')"
:mask-closable="false" :mask-closable="false">
class-name="simple-modal">
<Form ref="addProject" :model="settingData" label-width="auto" @submit.native.prevent> <Form ref="addProject" :model="settingData" label-width="auto" @submit.native.prevent>
<FormItem prop="name" :label="$L('项目名称')"> <FormItem prop="name" :label="$L('项目名称')">
<Input type="text" v-model="settingData.name" :maxlength="32" :placeholder="$L('必填')"></Input> <Input type="text" v-model="settingData.name" :maxlength="32" :placeholder="$L('必填')"></Input>
@ -324,8 +325,7 @@
<Modal <Modal
v-model="userShow" v-model="userShow"
:title="$L('成员管理')" :title="$L('成员管理')"
:mask-closable="false" :mask-closable="false">
class-name="simple-modal">
<Form ref="addProject" :model="userData" label-width="auto" @submit.native.prevent> <Form ref="addProject" :model="userData" label-width="auto" @submit.native.prevent>
<FormItem prop="userids" :label="$L('项目成员')"> <FormItem prop="userids" :label="$L('项目成员')">
<UserInput v-if="userShow" v-model="userData.userids" :uncancelable="userData.uncancelable" :multiple-max="100" :placeholder="$L('选择项目成员')"/> <UserInput v-if="userShow" v-model="userData.userids" :uncancelable="userData.uncancelable" :multiple-max="100" :placeholder="$L('选择项目成员')"/>
@ -341,8 +341,7 @@
<Modal <Modal
v-model="transferShow" v-model="transferShow"
:title="$L('移交项目')" :title="$L('移交项目')"
:mask-closable="false" :mask-closable="false">
class-name="simple-modal">
<Form ref="addProject" :model="transferData" label-width="auto" @submit.native.prevent> <Form ref="addProject" :model="transferData" label-width="auto" @submit.native.prevent>
<FormItem prop="owner_userid" :label="$L('项目负责人')"> <FormItem prop="owner_userid" :label="$L('项目负责人')">
<UserInput v-if="transferShow" v-model="transferData.owner_userid" :multiple-max="1" :placeholder="$L('选择项目负责人')"/> <UserInput v-if="transferShow" v-model="transferData.owner_userid" :multiple-max="1" :placeholder="$L('选择项目负责人')"/>

View File

@ -50,7 +50,7 @@
</template> </template>
</EDropdownMenu> </EDropdownMenu>
</EDropdown> </EDropdown>
<div class="item-title">{{item.name}}</div> <div class="item-title" @click="$store.commit('openTask', item)">{{item.name}}</div>
<div v-if="item.sub_num > 0" class="item-sub-num" @click="getSublist(item)"> <div v-if="item.sub_num > 0" class="item-sub-num" @click="getSublist(item)">
<Icon type="md-git-merge" /> <Icon type="md-git-merge" />
{{item.sub_complete}}/{{item.sub_num}} {{item.sub_complete}}/{{item.sub_num}}

View File

@ -199,6 +199,15 @@ export default {
} }
}, },
/**
* 打开任务详情页
* @param state
* @param task
*/
openTask(state, task) {
state.projectTask = Object.assign({_show:true}, task);
},
/** /**
* 获取用户基本信息 * 获取用户基本信息
* @param state * @param state

View File

@ -184,6 +184,7 @@ state.wsReadWaitList = [];
state.projectLoad = 0; state.projectLoad = 0;
state.projectList = state.cacheProjectList; state.projectList = state.cacheProjectList;
state.projectDetail = {id: 0, project_column: [], project_user: []}; state.projectDetail = {id: 0, project_column: [], project_user: []};
state.projectTask = {_show: false, id: 0, task_user: [], task_tag: []};
// 会话消息 // 会话消息
state.dialogId = 0; state.dialogId = 0;

View File

@ -285,7 +285,7 @@
flex-direction: column; flex-direction: column;
} }
.task-item { .task-item {
list-style: none; cursor: pointer;
margin: 0 10px 16px; margin: 0 10px 16px;
background-color: #ffffff; background-color: #ffffff;
border-radius: 12px; border-radius: 12px;
@ -312,26 +312,30 @@
word-wrap: break-word; word-wrap: break-word;
} }
} }
.loading, .task-menu {
.ivu-icon { margin-left: 8px;
width: 22px; width: 22px;
height: 22px; height: 22px;
display: flex; .loading,
align-items: center; .ivu-icon {
justify-content: center; width: 22px;
margin-left: 8px; height: 22px;
.common-loading { display: flex;
width: 16px; align-items: center;
height: 16px; justify-content: center;
margin: 0; .common-loading {
width: 16px;
height: 16px;
margin: 0;
}
} }
} .ivu-icon {
.ivu-icon { font-size: 22px;
font-size: 22px; color: #777777;
color: #666666; cursor: pointer;
cursor: pointer; &:hover {
&:hover { color: #555555;
color: #555555; }
} }
} }
&.has-desc { &.has-desc {
@ -551,6 +555,7 @@
} }
} }
.ivu-icon { .ivu-icon {
cursor: pointer;
font-size: 16px; font-size: 16px;
color: #cccccc; color: #cccccc;
margin-right: 8px; margin-right: 8px;
@ -573,6 +578,7 @@
.item-title { .item-title {
flex: 1; flex: 1;
padding: 0 22px 0 0; padding: 0 22px 0 0;
cursor: pointer;
} }
.item-sub-num { .item-sub-num {
flex-shrink: 0; flex-shrink: 0;