|
@@ -3,110 +3,201 @@
|
|
|
<div class="tasks-left">
|
|
|
<!-- 菜单 -->
|
|
|
<div class="menu">
|
|
|
- <span v-for="{ tab, name } in menuList" :key="tab" :class="['menu-item', tab === 'TaskList' ? 'active' : '']">
|
|
|
- {{ name }}
|
|
|
- </span>
|
|
|
+ <template v-for="{ tab, name, isShow } in menuList">
|
|
|
+ <span
|
|
|
+ v-if="isShow"
|
|
|
+ :key="tab"
|
|
|
+ :class="['menu-item', tab === 'TaskList' ? 'active' : '']"
|
|
|
+ @click="changeTab(tab)"
|
|
|
+ >
|
|
|
+ {{ name }}
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
</div>
|
|
|
<!-- 日历 -->
|
|
|
- <div class="calendar" />
|
|
|
+ <monthly-calendar ref="calendar" @changeTimeUnit="changeTimeUnit" @changeDate="changeDate" />
|
|
|
<!-- 通知 -->
|
|
|
<div class="notice">
|
|
|
<div class="notice-title">
|
|
|
- <svg-icon icon-class="task-notification" />
|
|
|
+ <svg-icon icon-class="task-notification" class-name="svg-normal" />
|
|
|
<span>通知</span>
|
|
|
- <span class="notice-title-link">全部 <i class="el-icon-arrow-right" /></span>
|
|
|
+ <span class="notice-title-link" @click="goPersonal">全部 <i class="el-icon-arrow-right" /></span>
|
|
|
+ </div>
|
|
|
+ <!-- 通知列表 -->
|
|
|
+ <div class="notice-container">
|
|
|
+ <ul>
|
|
|
+ <li v-for="{ id, is_read, content, send_time, source_entity_id } in message_list" :key="id">
|
|
|
+ <span class="is-read" v-text="is_read === 'false' ? 'new' : ''" />
|
|
|
+ <span
|
|
|
+ class="notice-content"
|
|
|
+ :style="{ color: is_read === 'true' ? '#8c8c8c' : '#000' }"
|
|
|
+ @click="readMyMessage(id, source_entity_id)"
|
|
|
+ >
|
|
|
+ {{ content }}
|
|
|
+ </span>
|
|
|
+ <span class="send-time">{{ send_time }}</span>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
</div>
|
|
|
- <div class="notice-container" />
|
|
|
</div>
|
|
|
</div>
|
|
|
+
|
|
|
<div class="tasks-right">
|
|
|
<div class="task-title">
|
|
|
- <svg-icon icon-class="task-list" /><span class="task-title-name">任务列表</span>
|
|
|
+ <svg-icon icon-class="task-list" class-name="svg-normal" /><span class="task-title-name">任务列表</span>
|
|
|
<div class="curricula-type">
|
|
|
<span
|
|
|
v-for="{ constant, name } in taskTimeList"
|
|
|
:key="constant"
|
|
|
- :class="['curricula-type-item', curTaskTime === constant ? 'active' : '']"
|
|
|
+ :class="['curricula-type-item', timeType === constant ? 'active' : '']"
|
|
|
+ @click="changeTaskTime(constant)"
|
|
|
>
|
|
|
{{ name }}
|
|
|
</span>
|
|
|
</div>
|
|
|
- <el-select />
|
|
|
+ <span class="select-prefix">
|
|
|
+ <svg-icon icon-class="schedule" class-name="svg-normal" />
|
|
|
+ </span>
|
|
|
+ <el-select v-model="course_id" @change="changeCourse">
|
|
|
+ <el-option v-for="{ id, name } in course_list" :key="id" :label="name" :value="id" />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="task-container">
|
|
|
+ <ul v-for="({ task_list }, i) in task_group_list" :key="i" class="task-list">
|
|
|
+ <li
|
|
|
+ v-for="({ id, cs_item_name, time_type, course_name, teaching_type }, j) in task_list"
|
|
|
+ :key="id"
|
|
|
+ class="task-item"
|
|
|
+ :style="{
|
|
|
+ 'background-color': colorMatching[i % 6].background,
|
|
|
+ color: colorMatching[i % 6].main,
|
|
|
+ border: `1px solid ${colorMatching[i % 6].border}`
|
|
|
+ }"
|
|
|
+ @click="taskLink_outside(id)"
|
|
|
+ >
|
|
|
+ <div class="task-item-top">
|
|
|
+ <svg-icon icon-class="arrival" :style="{ color: colorMatching[i % 6].main }" />
|
|
|
+ <span class="cs-item-name">{{ cs_item_name }}</span>
|
|
|
+ <span
|
|
|
+ class="task-button"
|
|
|
+ :style="{ 'background-color': buttonColorList[j % 2] }"
|
|
|
+ @click.stop="taskLink(teaching_type, id)"
|
|
|
+ >
|
|
|
+ {{ getTimeTypeName(time_type) }}任务
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <div class="task-item-bottom">
|
|
|
+ <span>{{ course_name }}</span>
|
|
|
+ </div>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
</div>
|
|
|
- <div />
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { GetMyDayTaskList, PageQueryMyMessageList, GetMyTaskList } from '@/api/table';
|
|
|
+import { PageQueryMyMessageList, GetMyTaskList } from '@/api/table';
|
|
|
import { CreateEnterLiveRoomSession } from '@/api/live';
|
|
|
-import { parseTime, formatDate } from '@/utils';
|
|
|
import { ReadMyMessage } from '@/api/user';
|
|
|
-import { colorMatching, getMenuList } from './data';
|
|
|
+import { colorMatching, getMenuList, buttonColorList } from './data';
|
|
|
import { taskTimeList } from '@/common/data';
|
|
|
+import { GetMyCourseList_TaskBelong } from '@/api/list';
|
|
|
+import MonthlyCalendar from './components/MonthlyCalendar';
|
|
|
|
|
|
export default {
|
|
|
name: 'TaskList',
|
|
|
+ components: {
|
|
|
+ MonthlyCalendar
|
|
|
+ },
|
|
|
data() {
|
|
|
return {
|
|
|
colorMatching,
|
|
|
+ buttonColorList,
|
|
|
taskTimeList,
|
|
|
- date: new Date(),
|
|
|
+ course_id: '',
|
|
|
selected: '',
|
|
|
- curTaskTime: -1,
|
|
|
+ timeType: -1,
|
|
|
menuList: getMenuList(),
|
|
|
task_group_list: [],
|
|
|
- message_list: []
|
|
|
+ message_list: [],
|
|
|
+ course_list: []
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
|
- dateTime() {
|
|
|
- return parseTime(this.date, '{m}-{d}');
|
|
|
- }
|
|
|
- },
|
|
|
- watch: {
|
|
|
- date() {
|
|
|
- this.getTaskList();
|
|
|
+ time_unit() {
|
|
|
+ return this.$refs.calendar.time_unit;
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
PageQueryMyMessageList({
|
|
|
read_status: -1,
|
|
|
message_type: -1,
|
|
|
- page_capacity: 5,
|
|
|
+ page_capacity: 4,
|
|
|
cur_page: 1
|
|
|
}).then(({ message_list }) => {
|
|
|
this.message_list = message_list;
|
|
|
});
|
|
|
- GetMyTaskList({
|
|
|
- time_type: this.time_type
|
|
|
- });
|
|
|
},
|
|
|
mounted() {
|
|
|
- this.getTaskList();
|
|
|
+ this.init();
|
|
|
},
|
|
|
methods: {
|
|
|
- timeType(type) {
|
|
|
- switch (type) {
|
|
|
- case 0:
|
|
|
- return '课前';
|
|
|
- case 1:
|
|
|
- return '课中';
|
|
|
- case 2:
|
|
|
- return '课后';
|
|
|
- default:
|
|
|
- return '';
|
|
|
- }
|
|
|
+ getTimeTypeName(type) {
|
|
|
+ if (type === 0) return '课前';
|
|
|
+ if (type === 1) return '课中';
|
|
|
+ if (type === 2) return '课后';
|
|
|
+ return '';
|
|
|
},
|
|
|
|
|
|
- teachingType(type) {
|
|
|
- switch (type) {
|
|
|
- case 10:
|
|
|
- return '进入直播间';
|
|
|
- default:
|
|
|
- return '查看';
|
|
|
- }
|
|
|
+ getMyCourseList_TaskBelong() {
|
|
|
+ let { curYear, curMonth, focusDate } = this.$refs.calendar;
|
|
|
+ GetMyCourseList_TaskBelong({
|
|
|
+ time_unit: this.time_unit,
|
|
|
+ date_stamp: `${curYear}-${curMonth}-${focusDate}`,
|
|
|
+ month_stamp: `${curYear}-${curMonth}`
|
|
|
+ }).then(({ course_list }) => {
|
|
|
+ this.course_list = course_list;
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ getMyTaskList() {
|
|
|
+ let { curYear, curMonth, focusDate } = this.$refs.calendar;
|
|
|
+ GetMyTaskList({
|
|
|
+ time_unit: this.time_unit,
|
|
|
+ date_stamp: `${curYear}-${curMonth}-${focusDate}`,
|
|
|
+ month_stamp: `${curYear}-${curMonth}`,
|
|
|
+ time_type: this.timeType,
|
|
|
+ course_id: this.course_id
|
|
|
+ }).then(({ task_group_list }) => {
|
|
|
+ this.task_group_list = task_group_list;
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ // 改变任务时间类型
|
|
|
+ changeTaskTime(constant) {
|
|
|
+ this.timeType = constant;
|
|
|
+ this.getMyTaskList();
|
|
|
+ },
|
|
|
+
|
|
|
+ changeTimeUnit() {
|
|
|
+ this.init();
|
|
|
+ },
|
|
|
+
|
|
|
+ changeDate() {
|
|
|
+ this.init();
|
|
|
+ },
|
|
|
+
|
|
|
+ init() {
|
|
|
+ this.course_id = '';
|
|
|
+ this.getMyTaskList();
|
|
|
+ this.getMyCourseList_TaskBelong();
|
|
|
+ },
|
|
|
+
|
|
|
+ changeCourse(val) {
|
|
|
+ if (val.length <= 0) return;
|
|
|
+ this.getMyTaskList();
|
|
|
},
|
|
|
|
|
|
taskLink(type, task_id) {
|
|
@@ -131,11 +222,6 @@ export default {
|
|
|
);
|
|
|
},
|
|
|
|
|
|
- dateSkip(num) {
|
|
|
- let day = 24 * 60 * 60 * 1000 * num;
|
|
|
- this.date = new Date(this.date.getTime() + day);
|
|
|
- },
|
|
|
-
|
|
|
readMyMessage(id, source_entity_id) {
|
|
|
ReadMyMessage({ id }).then(() => {
|
|
|
this.taskLink_outside(source_entity_id);
|
|
@@ -146,10 +232,8 @@ export default {
|
|
|
window.location.href = `/GCLS-Personal/#/EnterSys`;
|
|
|
},
|
|
|
|
|
|
- getTaskList() {
|
|
|
- GetMyDayTaskList({ date_stamp: formatDate(this.date) }).then(response => {
|
|
|
- this.task_group_list = response.task_group_list;
|
|
|
- });
|
|
|
+ changeTab(tab) {
|
|
|
+ this.$emit('changeTab', tab);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
@@ -188,7 +272,8 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- .calendar {
|
|
|
+ // 日历
|
|
|
+ .monthly-calendar {
|
|
|
height: 498px;
|
|
|
padding: 32px;
|
|
|
margin: 16px 0;
|
|
@@ -207,11 +292,6 @@ export default {
|
|
|
align-items: center;
|
|
|
justify-content: space-between;
|
|
|
|
|
|
- .svg-icon {
|
|
|
- width: 24px;
|
|
|
- height: 24px;
|
|
|
- }
|
|
|
-
|
|
|
> span:first-of-type {
|
|
|
flex: 1;
|
|
|
padding-left: 16px;
|
|
@@ -221,11 +301,42 @@ export default {
|
|
|
color: #bababa;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ &-container {
|
|
|
+ height: 100%;
|
|
|
+ overflow: auto;
|
|
|
+
|
|
|
+ ul {
|
|
|
+ margin-top: 16px;
|
|
|
+
|
|
|
+ li {
|
|
|
+ display: flex;
|
|
|
+ padding: 8px 0;
|
|
|
+ border-bottom: 1px solid $border-color;
|
|
|
+
|
|
|
+ .is-read {
|
|
|
+ width: 80px;
|
|
|
+ color: $basic-color;
|
|
|
+ }
|
|
|
+
|
|
|
+ .notice-content {
|
|
|
+ width: 230px;
|
|
|
+ margin-right: 16px;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+
|
|
|
+ .send-time {
|
|
|
+ color: #8c8c8c;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
&-right {
|
|
|
width: 802px;
|
|
|
+ height: calc(100vh - 119px);
|
|
|
padding: 16px 24px;
|
|
|
background-color: #fff;
|
|
|
border-radius: 8px;
|
|
@@ -247,7 +358,7 @@ export default {
|
|
|
height: 40px;
|
|
|
margin: 0 16px;
|
|
|
color: #8c8c8c;
|
|
|
- background-color: #f5f5f5;
|
|
|
+ background-color: $bac-color;
|
|
|
border: 1px solid $border-color;
|
|
|
border-radius: 8px;
|
|
|
|
|
@@ -266,10 +377,51 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- .el-select {}
|
|
|
+ .select-prefix {
|
|
|
+ padding: 6px;
|
|
|
+ margin-right: -1px;
|
|
|
+ border: 1px solid $border-color;
|
|
|
+ border-radius: 8px 0 0 8px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-select {
|
|
|
+ width: calc(100% - 360px);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
.task-container {
|
|
|
+ height: calc(100% - 50px);
|
|
|
+ overflow: auto;
|
|
|
+
|
|
|
+ .task-list {
|
|
|
+ .task-item {
|
|
|
+ padding: 16px 24px;
|
|
|
+ margin-top: 16px;
|
|
|
+ cursor: pointer;
|
|
|
+ border-radius: 8px;
|
|
|
+
|
|
|
+ &-top {
|
|
|
+ display: flex;
|
|
|
+ margin-bottom: 8px;
|
|
|
+
|
|
|
+ .cs-item-name {
|
|
|
+ flex: 1;
|
|
|
+ margin-left: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .task-button {
|
|
|
+ padding: 4px 8px;
|
|
|
+ color: #fff;
|
|
|
+ border-radius: 8px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &-bottom {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #808080;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|