mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/student-h5.git
synced 2025-12-10 11:26:48 +08:00
feat:增加外链评估直播
This commit is contained in:
11
src/api/CONST.js
Normal file
11
src/api/CONST.js
Normal file
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* @Author: lixg lixg@dongwu-inc.com
|
||||
* @Date: 2023-01-16 13:59:11
|
||||
* @LastEditors: lixg lixg@dongwu-inc.com
|
||||
* @LastEditTime: 2023-01-16 13:59:17
|
||||
* @FilePath: /stu_h5/src/api/CONST.js
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
export const PROJECT = 1;
|
||||
export const ROUTER = 2;
|
||||
export const COURSE = 3;
|
||||
@@ -2,7 +2,7 @@
|
||||
* @Author: lixg lixg@dongwu-inc.com
|
||||
* @Date: 2023-01-13 11:42:48
|
||||
* @LastEditors: lixg lixg@dongwu-inc.com
|
||||
* @LastEditTime: 2023-01-13 18:09:17
|
||||
* @LastEditTime: 2023-01-17 17:06:24
|
||||
* @FilePath: /stu_h5/src/api/api.js
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
@@ -16,15 +16,25 @@ export const ROUTER_UNCOMPLETE_LIST = '/stu/router/unCompleteTaskList'
|
||||
export const TAS_ACTIVITY_DETAIL = '/stu/task/activity/detail'
|
||||
export const TASK_ACTIVITY_SIGN = '/stu/task/activity/sign post'
|
||||
export const TASK_BROADCAST_COMMIT = '/stu/task/broadcast/commit'
|
||||
export const TASK_BROADCAST_DETAIL = '/stu/task/broadcast/detail'
|
||||
export const TASK_BROADCAST_SIGN = '/stu/task/broadcast/sign'
|
||||
export const TASK_BROADCAST_DETAIL = '/liveBroadcast'
|
||||
export const TASK_BROADCAST_SIGN = '/stu/task/broadcast/sign post'
|
||||
export const TASK_VOTE_COMMIT = '/stu/task/vote/commit'
|
||||
export const TASK_VOTE_DETAIL = '/stu/task/vote/detail'
|
||||
export const TASK_WORK_COMMIT = '/stu/task/work/commit'
|
||||
export const TASK_WORK_DETAIL = '/stu/task/work/detail'
|
||||
export const STU_OFFCOURSE_DETAIL = '/stu/offcourse/detail'
|
||||
export const TASK_WORK_COMMIT = '/workSubmit/submitStudentWorkDetail post'
|
||||
export const TASK_WORK_DETAIL = '/workSubmit/getWorkDetailByTaskId'
|
||||
export const STU_OFFCOURSE_DETAIL = '/stu/offcourse/detail post'
|
||||
export const WORK_QUERYWORKDETAILBYID = '/work/queryWorkDetailById'
|
||||
export const EXAMINATION_QUERYEXAMINATIONDETAILBYID = '/examination/queryExaminationDetailById'
|
||||
export const DISCUSS_COLLECTION = '/discussSubmit/clickDiscussCollectionCountOr POST'
|
||||
export const DISCUSS_LIKE = '/discussSubmit/clickDiscussLikeCountOr POST'
|
||||
export const ACTIVITY = '/activity'
|
||||
export const EXAMINATION_QUERY = examinationId => `/examination/queryExaminationDetailById?examinationId=${examinationId} post`
|
||||
export const TASK_OFFCOURSE_NOTASK_SIGN = '/stu/task/offcourse/notask/sign post'
|
||||
export const TASK_OFFCOURSE_SIGN = '/stu/task/offcourse/sign post'
|
||||
export const LINK_DETAILS = linkId => `/link/getOne?linkId=${linkId} post`
|
||||
export const STUDY_RECORD = '/stu/task/thirdTask/submit post'
|
||||
export const TASK_WORK_SUBMIT_LIST = '/workSubmit/queryWorkSubmitDetailById'
|
||||
export const WORK_HISTROY = '/workSubmit/queryWorkDetailListByStuId'
|
||||
export const ASSESSMENT_QUERY = assessmentId => `/stu/task/queryAssessmentDetailById`
|
||||
export const ASSESSMENT_SUBMIT = '/stu/task/evaluate/commit post'
|
||||
|
||||
|
||||
@@ -1,11 +1,42 @@
|
||||
import router from "@/router";
|
||||
import {ref, watch} from "vue";
|
||||
import { reactive, ref, toRefs, watch } from "vue";
|
||||
import axios from 'axios';
|
||||
import { getCookie } from "@/api/utils";
|
||||
|
||||
import JSONBigInt from 'json-bigint';
|
||||
const JSONBigIntStr = JSONBigInt({ storeAsString: true });
|
||||
export function usePage(_url, param) {
|
||||
|
||||
const state = reactive({
|
||||
data: {},
|
||||
loading: false,
|
||||
total: 0,
|
||||
size: 10,
|
||||
current: 1,
|
||||
params: { pageNo: 1, pageSize: 10, ...param }
|
||||
})
|
||||
|
||||
watch(param, () => {
|
||||
state.params = { ...state.params, ...param }
|
||||
fetchData()
|
||||
})
|
||||
|
||||
function fetchData() {
|
||||
state.loading = true
|
||||
request(_url, state.params).then(r => {
|
||||
state.params.pageNo === 1 ? (state.data = (r.data.records || r.data.rows)) : (state.data = [...state.data, ...(r.data.records || r.data.rows)])
|
||||
state.size = r.data.size
|
||||
state.total = r.data.total
|
||||
state.current = r.data.current
|
||||
state.loading = false
|
||||
})
|
||||
}
|
||||
|
||||
fetchData()
|
||||
return {
|
||||
...toRefs(state),
|
||||
fetchData,
|
||||
};
|
||||
}
|
||||
export function useRequest(_url, params = {}) {
|
||||
|
||||
const data = ref({})
|
||||
@@ -34,7 +65,7 @@ export function useRequest(_url, params = {}) {
|
||||
export async function request(_url, params) {
|
||||
const s = _url.split(' ')
|
||||
let url = s[0]
|
||||
const method = s[1] || 'get'
|
||||
const method = s[1]?.toLowerCase() || 'get'
|
||||
if (method === 'get') {
|
||||
let paramsArray = [];
|
||||
//拼接参数
|
||||
@@ -52,7 +83,7 @@ export async function request(_url, params) {
|
||||
url,
|
||||
method,
|
||||
headers: {
|
||||
'X-Token': localStorage.getItem('token'),
|
||||
'token': getCookie('token'),
|
||||
...method !== 'get' ? { 'Content-Type': 'application/json' } : {}
|
||||
},
|
||||
baseURL: import.meta.env.VITE_BASE_API,
|
||||
@@ -60,17 +91,26 @@ export async function request(_url, params) {
|
||||
}).then(resp => resp.data).then(response => {
|
||||
if (response.code !== 200 && response.code !== 0) {
|
||||
if (response.code === 1000) {
|
||||
(import.meta.env.MODE === 'development' || import.meta.env.MODE === 'test') ? router.push({path: '/login'}) : window.open(import.meta.env.VITE_BASE_LOGIN_URL + window.location.url, '_top')
|
||||
(import.meta.env.MODE === 'development' || import.meta.env.MODE === 'test') ? router.push({ path: '/login' }) : window.open(import.meta.env.VITE_BASE_LOGIN_URL, '_top')
|
||||
}
|
||||
// if (import.meta.env.DEV && response.code === 1000) {
|
||||
// router.push({path: '/login'})
|
||||
// } else {
|
||||
// window.open()
|
||||
// response.showMsg && notification.open({
|
||||
// message: response.showMsg,
|
||||
// duration: 2,
|
||||
// });
|
||||
// }
|
||||
throw new Error('接口异常')
|
||||
}
|
||||
return response
|
||||
}).catch(e => {
|
||||
console.log(2222)
|
||||
console.log(e)
|
||||
console.log('eeeee', e)
|
||||
// router.push({path: '/login'})
|
||||
})
|
||||
}
|
||||
|
||||
export async function boeRequest(_url, params) {
|
||||
const s = _url.split(' ')
|
||||
let url = s[0]
|
||||
|
||||
BIN
src/assets/image/file/book.png
Normal file
BIN
src/assets/image/file/book.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 260 B |
BIN
src/assets/image/file/rar.png
Normal file
BIN
src/assets/image/file/rar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 590 B |
BIN
src/assets/image/publish.png
Normal file
BIN
src/assets/image/publish.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 790 B |
BIN
src/assets/image/return.png
Normal file
BIN
src/assets/image/return.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 377 B |
57
src/components/FileTypeImg.vue
Normal file
57
src/components/FileTypeImg.vue
Normal file
@@ -0,0 +1,57 @@
|
||||
<!--
|
||||
* @Author: lixg lixg@dongwu-inc.com
|
||||
* @Date: 2023-01-15 14:57:30
|
||||
* @LastEditors: lixg lixg@dongwu-inc.com
|
||||
* @LastEditTime: 2023-01-15 15:16:42
|
||||
* @FilePath: /stu_h5/src/components/FileTypeImg.vue
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
-->
|
||||
<template>
|
||||
<img
|
||||
class="file"
|
||||
:style="style"
|
||||
:src="
|
||||
{
|
||||
pdf,
|
||||
doc: word,
|
||||
ppt,
|
||||
zip,
|
||||
excel,
|
||||
xlsx: excel,
|
||||
xls: excel,
|
||||
rar,
|
||||
book,
|
||||
md,
|
||||
docx: word,
|
||||
png,
|
||||
}[filePath.split('.').slice(-1)] || book
|
||||
"
|
||||
/>
|
||||
</template>
|
||||
<script setup>
|
||||
import rar from "@/assets/image/file/rar.png";
|
||||
import excel from "@/assets/image/file/excel.png";
|
||||
import md from "@/assets/image/file/md.png";
|
||||
import pdf from "@/assets/image/file/pdf.png";
|
||||
import ppt from "@/assets/image/file/ppt.png";
|
||||
import word from "@/assets/image/file/word.png";
|
||||
import zip from "@/assets/image/file/zip.png";
|
||||
import book from "@/assets/image/file/book.png";
|
||||
import { defineProps, ref } from "vue";
|
||||
|
||||
const { modelValue = "", style } = defineProps({
|
||||
modelValue: String,
|
||||
style: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
});
|
||||
const filePath = ref(modelValue);
|
||||
console.log("filePath", filePath);
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.file {
|
||||
width: 22px;
|
||||
height: 26px;
|
||||
}
|
||||
</style>
|
||||
83
src/components/ReturnHead.vue
Normal file
83
src/components/ReturnHead.vue
Normal file
@@ -0,0 +1,83 @@
|
||||
<!--
|
||||
* @Author: lixg lixg@dongwu-inc.com
|
||||
* @Date: 2023-01-16 17:26:39
|
||||
* @LastEditors: lixg lixg@dongwu-inc.com
|
||||
* @LastEditTime: 2023-01-16 18:21:05
|
||||
* @FilePath: /stu_h5/src/components/ReturnHead.vue
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
-->
|
||||
<template>
|
||||
<div class="returnHead">
|
||||
<div style="width: 46px">
|
||||
<img
|
||||
style="width: 9px; height: 15px"
|
||||
src="../assets/image/return.png"
|
||||
@click="returnclick"
|
||||
/>
|
||||
</div>
|
||||
<div class="text">{{ text }}</div>
|
||||
<div class="publish" v-if="showpublish" @click="publishClick">
|
||||
<img
|
||||
style="width: 13px; height: 12px"
|
||||
src="../assets/image/publish.png"
|
||||
/>
|
||||
<div style="margin-left: 5px; color: #2478ff">发布</div>
|
||||
</div>
|
||||
<div class="publish" v-else></div>
|
||||
</div>
|
||||
</template>
|
||||
<script >
|
||||
import { useRouter } from "vue-router";
|
||||
export default {
|
||||
name: "ReturnHead",
|
||||
props: {
|
||||
text: String,
|
||||
showpublish: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
publishWork: {
|
||||
type: Function,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
setup(props, ctx) {
|
||||
const router = useRouter();
|
||||
const returnclick = () => {
|
||||
router.back();
|
||||
};
|
||||
const publishClick = () => {
|
||||
props.publishWork && props.publishWork();
|
||||
};
|
||||
return {
|
||||
returnclick,
|
||||
publishClick,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.returnHead {
|
||||
width: 95%;
|
||||
height: 44px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
font-size: 14px;
|
||||
background-color: #ffffff;
|
||||
padding-left: 2.5%;
|
||||
padding-right: 2.5%;
|
||||
.text {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: #323233;
|
||||
line-height: 12px;
|
||||
margin-left: 11px;
|
||||
}
|
||||
.publish {
|
||||
width: 46px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<div class="activities">
|
||||
<ReturnHead text="活动详情"></ReturnHead>
|
||||
<div class="main">
|
||||
<div class="notice" :style="{ display: closeBtn ? 'flex' : 'none' }">
|
||||
<span class="text">{{ data?.activityNotice }}</span>
|
||||
@@ -25,7 +26,8 @@
|
||||
src="../../assets/image/faceteach/time.png"
|
||||
/>
|
||||
<div style="font-size: 12px; color: rgba(110, 123, 132, 1)">
|
||||
{{ data?.activityStartTime + "至" + data?.activityEndTime }}
|
||||
{{ data?.activityStartTime ? data?.activityStartTime : "-" }} 至
|
||||
{{ data?.activityEndTime ? data?.activityEndTime : "-" }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="time" style="margin-top: 9px">
|
||||
@@ -144,13 +146,13 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
console.log(333333333333333);
|
||||
import { TASK_ACTIVITY_SIGN, ACTIVITY } from "@/api/api";
|
||||
import { request, useRequest } from "@/api/request";
|
||||
import { useRouter } from "vue-router";
|
||||
import { useRoute } from "vue-router/dist/vue-router";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { reactive, onUnmounted, toRefs } from "vue";
|
||||
import ReturnHead from "@/components/ReturnHead.vue";
|
||||
const router = useRouter();
|
||||
const returnclick = () => {
|
||||
router.back();
|
||||
|
||||
@@ -48,14 +48,18 @@
|
||||
<div class="samei">{{ item.pinglun }}</div>
|
||||
<div class="imgcont">
|
||||
<img
|
||||
v-if="item.isGood"
|
||||
@click="getId(item)"
|
||||
style="margin-left: 56px"
|
||||
class="imgs"
|
||||
:src="
|
||||
item.isGood
|
||||
? require('../../assets/image/discuss/dianzan2.png')
|
||||
: require('../../assets/image/discuss/dianzan.png')
|
||||
"
|
||||
src="../../assets/image/discuss/dianzan2.png"
|
||||
/>
|
||||
<img
|
||||
v-else
|
||||
@click="getId(item)"
|
||||
style="margin-left: 56px"
|
||||
class="imgs"
|
||||
src="../../assets/image/discuss/dianzan.png"
|
||||
/>
|
||||
</div>
|
||||
<div :class="item.isGood ? 'sameii' : 'samei'">
|
||||
|
||||
362
src/views/evaluation/Evaluation.vue
Normal file
362
src/views/evaluation/Evaluation.vue
Normal file
@@ -0,0 +1,362 @@
|
||||
<template>
|
||||
<div class="evaluation">
|
||||
<ReturnHead text="测评详情"></ReturnHead>
|
||||
<!-- <TitleHead text="【投票】管理者进阶腾飞班 - 授课方式"></TitleHead> -->
|
||||
<!-- <div class="top" :style="{ display: closeBtn ? 'flex' : 'none' }">
|
||||
<div class="topin">
|
||||
<div class="topsa">
|
||||
{{ data?.liveNotice }}
|
||||
</div>
|
||||
<img
|
||||
class="topimg"
|
||||
@click="isShowClose"
|
||||
src="../../assets/image/liveboradcast/cha.png"
|
||||
/>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="notice" style="margin-top: 0">
|
||||
<div class="noticebox">
|
||||
<!-- <div class="avator">
|
||||
<img class="avaimg" :src="teacherInfo.avatar" />
|
||||
<div class="avaname">{{ data.userInfoBo?.userName }}</div>
|
||||
</div> -->
|
||||
<div class="mani">
|
||||
<div class="joininfo">【测评】{{ data?.linkName }}</div>
|
||||
<div class="contenttitle">
|
||||
<img class="timeimg" src="../../assets/image/ballotpage/time.png" />
|
||||
<div class="timee">
|
||||
{{ data?.liveStartTime + " 至 " + data?.liveEndTime }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="timebox">
|
||||
<div class="samez" style="margin-left: 18px">
|
||||
{{ hour }}
|
||||
</div>
|
||||
<div class="samey">时</div>
|
||||
<div class="samez">
|
||||
{{ minute }}
|
||||
</div>
|
||||
<div class="samey">分</div>
|
||||
<div class="samez">
|
||||
{{ seconds }}
|
||||
</div>
|
||||
<div class="samey">秒</div>
|
||||
</div>
|
||||
<div class="midline"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="notice">
|
||||
<div class="noticebox">
|
||||
<div class="mani">
|
||||
<div class="joininfo">测评说明</div>
|
||||
<div class="line"></div>
|
||||
<div class="contentone">
|
||||
<div class="actinner">
|
||||
{{ data.linkDescription }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<div class="submitbtn" @click="goOuterChain">去查看</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import ReturnHead from "@/components/ReturnHead.vue";
|
||||
import { computed, reactive, toRefs, onUnmounted, ref } from "vue";
|
||||
import img from "@/assets/image/uploadimg.png";
|
||||
import { request, useRequest } from "@/api/request";
|
||||
import { LINK_DETAILS, STUDY_RECORD } from "@/api/api";
|
||||
import { useRoute } from "vue-router/dist/vue-router";
|
||||
import { useRouter } from "vue-router";
|
||||
import { useUserInfo } from "@/api/utils";
|
||||
import { ElMessage } from "element-plus";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
const {
|
||||
query: {
|
||||
courseId: linkId,
|
||||
id: taskId,
|
||||
type,
|
||||
status,
|
||||
chapterOrStageId,
|
||||
infoId,
|
||||
studentId,
|
||||
},
|
||||
} = useRoute();
|
||||
const router = useRouter();
|
||||
console.log("外链信息", linkId);
|
||||
const { data } = useRequest(LINK_DETAILS(linkId));
|
||||
console.log("外链信息", data);
|
||||
const goOuterChain = () => {
|
||||
status != 1 &&
|
||||
request(STUDY_RECORD, {
|
||||
studentId: studentId,
|
||||
targetId: infoId,
|
||||
logo: type,
|
||||
stageOrChapterId: chapterOrStageId,
|
||||
taskId: taskId,
|
||||
});
|
||||
|
||||
window.open(data.value.linkAddress, "_top");
|
||||
};
|
||||
</script>
|
||||
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
<style lang="scss">
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
content: " ";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
.evaluation {
|
||||
width: 100%;
|
||||
.top {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
height: 25px;
|
||||
background-color: #fffbee;
|
||||
.topin {
|
||||
// text-align: center;
|
||||
width: 90%;
|
||||
height: 25px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.topsa {
|
||||
color: #ff9e00;
|
||||
line-height: 25px;
|
||||
font-size: 12px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
.topimg {
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
margin-top: 7px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.notice {
|
||||
width: 100%;
|
||||
// display: flex;
|
||||
// justify-content: center;
|
||||
// // margin-top: -17.5px;
|
||||
padding-bottom: 24px;
|
||||
margin-top: 20px;
|
||||
background: #fff;
|
||||
.noticebox {
|
||||
width: 100%;
|
||||
background: #fff;
|
||||
// border-radius: 4px;
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
.avator {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
right: 29px;
|
||||
top: 30px;
|
||||
// background-color:red;
|
||||
// z-index: 999;
|
||||
.avaimg {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.avaname {
|
||||
line-height: 30px;
|
||||
margin-left: 8px;
|
||||
color: #0d233a;
|
||||
}
|
||||
}
|
||||
.line {
|
||||
width: 100%;
|
||||
height: 0;
|
||||
border-top: 1px solid #f1f2f3;
|
||||
margin-top: 17px;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
}
|
||||
.mani {
|
||||
width: 90%;
|
||||
margin-top: 20px;
|
||||
// position:relative;
|
||||
.joininfo {
|
||||
color: #0d233a;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.contenttitle {
|
||||
width: 100%;
|
||||
// height:10px;
|
||||
margin-top: 15px;
|
||||
// background-color: #bfa;
|
||||
display: flex;
|
||||
.timeimg {
|
||||
width: 12.8px;
|
||||
height: 13px;
|
||||
}
|
||||
.timee {
|
||||
color: #6e7b84;
|
||||
font-size: 14px;
|
||||
line-height: 13px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
}
|
||||
.midline {
|
||||
height: 0;
|
||||
border-top: 1px solid #f1f2f3;
|
||||
width: 100%;
|
||||
margin-top: 15px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.timebox {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 49px;
|
||||
background-color: #f2f5f7;
|
||||
margin-top: 17.5px;
|
||||
margin-bottom: 27.5px;
|
||||
border-radius: 10px;
|
||||
.samez {
|
||||
color: #0060ff;
|
||||
font-size: 18px;
|
||||
line-height: 49px;
|
||||
margin-left: 13px;
|
||||
}
|
||||
.samey {
|
||||
color: #6e7b84;
|
||||
font-size: 14px;
|
||||
line-height: 49px;
|
||||
|
||||
margin-left: 13px;
|
||||
}
|
||||
}
|
||||
.detailin {
|
||||
width: 100%;
|
||||
// height: 100px;
|
||||
// background-color: red;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
.in {
|
||||
margin-left: 20px;
|
||||
width: 86%;
|
||||
color: #6e7b84;
|
||||
line-height: 30px;
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
.contentone {
|
||||
margin-top: 43px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
margin-bottom: 20px;
|
||||
// height: 200px;
|
||||
.actinner {
|
||||
// background-color: red;
|
||||
color: #6e7b84;
|
||||
font-size: 13px;
|
||||
line-height: 30px;
|
||||
}
|
||||
.de {
|
||||
width: 100%;
|
||||
height: 34px;
|
||||
border-radius: 10px;
|
||||
background-color: #f2f5f7;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.deal {
|
||||
color: #333330;
|
||||
font-weight: bold;
|
||||
line-height: 34px;
|
||||
margin-left: 21px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.rightpng {
|
||||
width: 6px;
|
||||
height: 11px;
|
||||
margin-right: 6px;
|
||||
margin-top: 12px;
|
||||
}
|
||||
}
|
||||
.ballotjoincontainer {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
.ballotjoin {
|
||||
width: 85%;
|
||||
// height:100px;
|
||||
// background-color: #bfa;
|
||||
.ballotitem {
|
||||
.upitem {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.left {
|
||||
display: flex;
|
||||
.leftimg {
|
||||
width: 4.5px;
|
||||
height: 14.5px;
|
||||
margin-top: 1px;
|
||||
}
|
||||
.leftcontent {
|
||||
margin-left: 9px;
|
||||
color: #6e7b84;
|
||||
font-size: 13px;
|
||||
line-height: 30px;
|
||||
margin-top: -5px;
|
||||
}
|
||||
}
|
||||
.btn {
|
||||
background-color: #2478ff;
|
||||
color: #fff;
|
||||
width: 64px;
|
||||
height: 21px;
|
||||
border-radius: 10px;
|
||||
border: 0;
|
||||
font-size: 12px;
|
||||
line-height: 19px;
|
||||
margin-top: -1px;
|
||||
}
|
||||
}
|
||||
.thinline {
|
||||
width: 100%;
|
||||
border-top: 1px solid #f1f2f3;
|
||||
margin-top: 17px;
|
||||
margin-bottom: 17px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.btnbox {
|
||||
width: 301.5px;
|
||||
height: 33px;
|
||||
background-color: #2478ff;
|
||||
border-radius: 6px;
|
||||
box-shadow: 0px 1px 8px 0px rgba(56, 125, 247, 0.7);
|
||||
font-size: 14px;
|
||||
margin: 30px auto 0 auto;
|
||||
text-align: center;
|
||||
line-height: 33px;
|
||||
.submitbtn {
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
background-color: #2478ff;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -3,7 +3,6 @@
|
||||
<!-- <TitleHead text="【考试】管理者进阶腾飞班 - 毕业典礼"></TitleHead> -->
|
||||
<div class="notice">
|
||||
<div class="noticebox">
|
||||
|
||||
<div class="main">
|
||||
<div class="e_title">管理者进阶腾飞班 - 第一次考试</div>
|
||||
<div class="et_detail">
|
||||
@@ -35,23 +34,17 @@
|
||||
<th>状态</th>
|
||||
</tr>
|
||||
<tr class="trbox2">
|
||||
<td>
|
||||
2022-7-20 00:00
|
||||
</td>
|
||||
<td>2022-7-20 00:00</td>
|
||||
<td>10分</td>
|
||||
<td>已完成</td>
|
||||
</tr>
|
||||
<tr class="trbox3">
|
||||
<td>
|
||||
2022-7-20 00:00
|
||||
</td>
|
||||
<td>2022-7-20 00:00</td>
|
||||
<td>10分</td>
|
||||
<td>已完成</td>
|
||||
</tr>
|
||||
<tr class="trbox4">
|
||||
<td>
|
||||
2022-7-20 00:00
|
||||
</td>
|
||||
<td>2022-7-20 00:00</td>
|
||||
<td>10分</td>
|
||||
<td>已完成</td>
|
||||
</tr>
|
||||
@@ -59,7 +52,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -78,7 +70,7 @@ export default {
|
||||
<style lang="scss" scoped>
|
||||
.examination {
|
||||
width: 100%;
|
||||
background-color: #F2F5F7;
|
||||
background-color: #f2f5f7;
|
||||
}
|
||||
|
||||
.notice {
|
||||
@@ -108,17 +100,17 @@ export default {
|
||||
.et_icon {
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
background-image: url('../../assets/image/readyexamination/time.png');
|
||||
background-image: url("../../assets/image/readyexamination/time.png");
|
||||
background-size: 100% 100%;
|
||||
margin-right: 6px;
|
||||
}
|
||||
.et_time {
|
||||
color: #6E7B84;
|
||||
color: #6e7b84;
|
||||
}
|
||||
}
|
||||
.et_box {
|
||||
margin-top: 16.5px;
|
||||
background-color: #F2F5F7;
|
||||
background-color: #f2f5f7;
|
||||
border-radius: 10px;
|
||||
padding: 18px 0 17px 22px;
|
||||
.et_length {
|
||||
@@ -126,10 +118,10 @@ export default {
|
||||
align-items: center;
|
||||
.et_name {
|
||||
margin-right: 5px;
|
||||
color: #6E7B84;
|
||||
color: #6e7b84;
|
||||
}
|
||||
.et_minute {
|
||||
color: #2478FF;
|
||||
color: #2478ff;
|
||||
margin-right: 56px;
|
||||
}
|
||||
.et_lineicon {
|
||||
@@ -139,25 +131,25 @@ export default {
|
||||
margin-right: 8px;
|
||||
}
|
||||
.et_score {
|
||||
color: #FF9E00;
|
||||
color: #ff9e00;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
.btnbox {
|
||||
width: 301.5px;
|
||||
width: 100%;
|
||||
height: 33px;
|
||||
background-color: #2478ff;
|
||||
border-radius: 6px;
|
||||
box-shadow: 0px 1px 8px 0px rgba(56, 125, 247, 0.7);
|
||||
font-size: 13.5px;
|
||||
margin: 18.5px auto 43.5px 20px;
|
||||
// margin: 18.5px auto 43.5px 20px;
|
||||
margin-top: 18.5px;
|
||||
margin-bottom: 43.5px;
|
||||
text-align: center;
|
||||
line-height: 33px;
|
||||
.textbtn {
|
||||
width: 301.5px;
|
||||
width: 90%;
|
||||
border: none;
|
||||
background-color: #2478ff;
|
||||
border-radius: 6px;
|
||||
@@ -187,7 +179,7 @@ export default {
|
||||
.trbox2,
|
||||
.trbox3,
|
||||
.trbox4 {
|
||||
border-bottom: 0.5px solid #F1F2F3;
|
||||
border-bottom: 0.5px solid #f1f2f3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<div class="faceteach">
|
||||
<TitleHead text="【其他活动】核心项目面授课"></TitleHead>
|
||||
<ReturnHead text="课程详情"></ReturnHead>
|
||||
<TitleHead :text="'【面授课】' + data.planDto?.name"></TitleHead>
|
||||
<div class="main">
|
||||
<div class="title">
|
||||
<div class="titlemain">
|
||||
@@ -11,7 +12,11 @@
|
||||
src="../../assets/image/faceteach/time.png"
|
||||
/>
|
||||
<div style="font-size: 12px; color: rgba(110, 123, 132, 1)">
|
||||
2022-07-20 20:00-21:00
|
||||
{{
|
||||
dayjs(data.planDto?.beginTime).format("YYYY-MM-DD HH:mm") +
|
||||
" 至 " +
|
||||
dayjs(data.planDto?.endTime).format("YYYY-MM-DD HH:mm")
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="time" style="margin-top: 9px">
|
||||
@@ -20,32 +25,129 @@
|
||||
src="../../assets/image/faceteach/position.png"
|
||||
/>
|
||||
<div style="font-size: 12px; color: rgba(110, 123, 132, 1)">
|
||||
大族广场
|
||||
{{ data.planDto?.address }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="titlebtn">评估</div>
|
||||
<!-- <div class="titlebtn">评估</div> -->
|
||||
|
||||
<div v-if="projectStatus && projectEndTime">
|
||||
<div
|
||||
v-if="
|
||||
projectStatus !== '3' &&
|
||||
new Date(projectEndTime).getTime() > new Date().getTime()
|
||||
"
|
||||
style="display: flex"
|
||||
>
|
||||
<botton
|
||||
class="titlebtn"
|
||||
style="margin-right: 20px"
|
||||
:style="{
|
||||
background: isAllowSign
|
||||
? data.signFlag
|
||||
? '#999'
|
||||
: 'rgb(57, 146, 249)'
|
||||
: '#999',
|
||||
}"
|
||||
@click="signClick"
|
||||
>{{ data.signFlag ? "已签到" : "签到" }}
|
||||
</botton>
|
||||
<!-- <botton style="background: #999" class="btn" @click="toSurvery" v-if="data.planDto?.evalFlag == 0">
|
||||
评估
|
||||
</botton> -->
|
||||
<botton
|
||||
v-if="data.planDto?.evalFlag !== 0"
|
||||
:style="{
|
||||
background: `${
|
||||
new Date(data.planDto?.beginTime).getTime() >
|
||||
new Date().getTime()
|
||||
? '#999'
|
||||
: data.isSurvery
|
||||
? '#999'
|
||||
: 'rgb(57, 146, 249)'
|
||||
}`,
|
||||
}"
|
||||
class="titlebtn"
|
||||
@click="toSurvery"
|
||||
>{{ data.isSurvery ? "已评估" : "评估" }}
|
||||
</botton>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<div style="display: flex">
|
||||
<botton
|
||||
class="titlebtn"
|
||||
style="margin-right: 20px"
|
||||
:style="{
|
||||
background: isAllowSign
|
||||
? data.signFlag
|
||||
? '#999'
|
||||
: 'rgb(57, 146, 249)'
|
||||
: '#999',
|
||||
}"
|
||||
@click="signClick"
|
||||
>{{ data.signFlag ? "已签到" : "签到" }}
|
||||
</botton>
|
||||
<!-- <botton style="background: #999" class="btn" @click="toSurvery" v-if="data.planDto?.evalFlag == 0">
|
||||
评估
|
||||
</botton> -->
|
||||
<botton
|
||||
v-if="data.planDto?.evalFlag !== 0"
|
||||
:style="{
|
||||
background: `${
|
||||
new Date(data.planDto?.beginTime).getTime() >
|
||||
new Date().getTime()
|
||||
? '#999'
|
||||
: data.isSurvery
|
||||
? '#999'
|
||||
: 'rgb(57, 146, 249)'
|
||||
}`,
|
||||
}"
|
||||
class="titlebtn"
|
||||
@click="toSurvery"
|
||||
>{{ data.isSurvery ? "已评估" : "评估" }}
|
||||
</botton>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <button
|
||||
v-if="data.planDto?.evalFlag !== 0"
|
||||
:style="{
|
||||
background: `${
|
||||
new Date(data.planDto?.beginTime).getTime() >
|
||||
new Date().getTime()
|
||||
? '#999'
|
||||
: data.isSurvery
|
||||
? '#999'
|
||||
: 'rgb(57, 146, 249)'
|
||||
}`,
|
||||
}"
|
||||
class="titlebtn"
|
||||
@click="toSurvery"
|
||||
>
|
||||
{{ data.isSurvery ? "已评估" : "评估" }}
|
||||
</button> -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="teacher">
|
||||
<div style="width: 90%">
|
||||
<div class="teachertitle">
|
||||
<div class="teachertitle" style="width: 100px">
|
||||
<img
|
||||
style="width: 17px; height: 17px"
|
||||
src="../../assets/image/faceteach/livelecturer.png"
|
||||
/>
|
||||
<div class="talk">直播讲师</div>
|
||||
<div class="box"></div>
|
||||
<div class="talk">面授课讲师</div>
|
||||
<div class="box" style="width: 80px; right: 0px"></div>
|
||||
</div>
|
||||
<div class="teachermain">
|
||||
<img class="teacherAvatar" src="../../assets/image/img.jpg" />
|
||||
<img class="teacherAvatar" :src="teacherInfo.avatar" />
|
||||
<div style="flex: 1; margin-left: 11px; margin-right: 13px">
|
||||
<div class="teacherName">王星天(显示事业)</div>
|
||||
<div class="teacherName">{{ data.planDto?.teacher }}</div>
|
||||
<div class="teacherIntro">
|
||||
教师是学生的镜子,学生是 老师的影子。
|
||||
{{ data.planDto?.bandDesc }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="teacherFollow">+ 关注</div>
|
||||
<!-- <div class="teacherFollow">+ 关注</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -60,12 +162,7 @@
|
||||
<div class="box"></div>
|
||||
</div>
|
||||
<div class="detailMain">
|
||||
通过对各级人员的软件平台培训,使其能够了解如何
|
||||
运用乾元坤和智能信息管理系统来提升企业管理水平
|
||||
最大限度发挥软件产品在企业中的作用。<br />
|
||||
1.使企业不同部门人员掌握便捷、有效的系统平台操 作方法;<br />
|
||||
2.通过系统平台的培训提高员工对企业的管理理念认 识与提升。<br />
|
||||
3.通过系统平台培训加强沟通,统一部署,协同工作 提高效率。
|
||||
{{ data.planDto?.description }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -74,32 +171,95 @@
|
||||
<el-tabs v-model="activeName" @tab-click="handleClick">
|
||||
<el-tab-pane label="课程附件" name="first">
|
||||
<div
|
||||
v-for="(el, index) in enclosure"
|
||||
:key="el.id"
|
||||
v-if="data.planDto?.attach === ''"
|
||||
style="
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
line-height: 24px;
|
||||
cursor: pointer;
|
||||
margin-left: 40px;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
"
|
||||
>
|
||||
此课程无附件
|
||||
</div>
|
||||
<div v-else>
|
||||
<div
|
||||
v-for="(el, index) in formateArr(data.planDto?.attach)"
|
||||
:key="index"
|
||||
class="enclosure"
|
||||
:style="{
|
||||
'border-bottom':
|
||||
index === enclosure.length - 1
|
||||
? null
|
||||
: '1px solid rgba(56, 125, 247, 0.2)',
|
||||
borderBottom: '1px solid rgba(56, 125, 247, 0.2)',
|
||||
}"
|
||||
>
|
||||
<div class="enclosureL">
|
||||
<img style="width: 19.5px; height: 22px" :src="el.img" />
|
||||
<div style="margin-left: 15px">{{ el.name }}</div>
|
||||
<FileTypeImg
|
||||
:v-model="
|
||||
el.name
|
||||
? el.name
|
||||
: el.slice(el.lastIndexOf('/') + 1, el.indexOf('-')) +
|
||||
el.slice(el.lastIndexOf('.'))
|
||||
"
|
||||
:style="{
|
||||
width: '19.5px',
|
||||
height: '22px',
|
||||
marginLeft: '10px',
|
||||
}"
|
||||
></FileTypeImg>
|
||||
<div style="margin-left: 15px">
|
||||
{{
|
||||
el.name
|
||||
? el.name
|
||||
: el.slice(el.lastIndexOf("/") + 1, el.indexOf("-")) +
|
||||
el.slice(el.lastIndexOf("."))
|
||||
}}
|
||||
</div>
|
||||
<div class="download">
|
||||
<!-- <img style="width: 19.5px; height: 22px" :src="el.img" />
|
||||
<div style="margin-left: 15px">{{ el.name }}</div> -->
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
projectStatus !== '3' &&
|
||||
new Date(projectEndTime).getTime() > new Date().getTime()
|
||||
"
|
||||
>
|
||||
<div
|
||||
v-if="
|
||||
new Date(data.planDto.beginTime).getTime() >
|
||||
new Date().getTime()
|
||||
"
|
||||
class="download"
|
||||
>
|
||||
<img
|
||||
style="width: 13px; height: 12px"
|
||||
src="../../assets/image/faceteach/download.png"
|
||||
/>
|
||||
<div style="margin-left: 2.5px">下载</div>
|
||||
<div style="margin-left: 2.5px" @click="downloads(el)">
|
||||
下载
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="download">
|
||||
<img
|
||||
style="width: 13px; height: 12px"
|
||||
src="../../assets/image/faceteach/download.png"
|
||||
/>
|
||||
<div
|
||||
style="margin-left: 2.5px; color: #999"
|
||||
@click="download(el.name ? el.response.data : el)"
|
||||
>
|
||||
下载
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="课程作业" name="second">
|
||||
<div class="work">
|
||||
<div class="question">社交产品如何做好模块化处理?</div>
|
||||
<div v-if="data.workDto">
|
||||
<div>
|
||||
<div class="question">{{ data.workDto?.workName }}</div>
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<div
|
||||
style="
|
||||
@@ -109,23 +269,64 @@
|
||||
flex-wrap: wrap;
|
||||
"
|
||||
>
|
||||
<div class="tag1" style="margin: 0px 10px 10px 0px">
|
||||
<div
|
||||
class="tag1"
|
||||
v-if="data.workDto?.workFlag"
|
||||
style="margin: 0px 10px 10px 0px"
|
||||
>
|
||||
必修
|
||||
</div>
|
||||
<div class="tag3" style="margin: 0px 10px 10px 0px">
|
||||
作业
|
||||
</div>
|
||||
</div>
|
||||
<div class="submit">提交</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-if="
|
||||
projectStatus !== '3' &&
|
||||
new Date(projectEndTime).getTime() > new Date().getTime()
|
||||
"
|
||||
:style="{
|
||||
background:
|
||||
new Date(data.planDto?.beginTime).getTime() >
|
||||
new Date().getTime()
|
||||
? '#999'
|
||||
: '',
|
||||
}"
|
||||
class="submit"
|
||||
@click="toWork"
|
||||
>
|
||||
交作业
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
style="
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
line-height: 24px;
|
||||
cursor: pointer;
|
||||
margin-left: 40px;
|
||||
margin-top: 20px;
|
||||
"
|
||||
>
|
||||
此课程无作业
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="课程考试" name="third">
|
||||
<div class="work">
|
||||
<el-tab-pane
|
||||
label="课程考试"
|
||||
name="third"
|
||||
:disabed="dayjs().isBefore(dayjs(data.planDto?.beginTime))"
|
||||
>
|
||||
<div class="work" v-if="data.examinationDto?.examinationTestName">
|
||||
<div class="question">
|
||||
模块化产品展示相关案例与展示:如何自由组合你的 思考?
|
||||
{{ data.examinationDto?.examinationName }}
|
||||
</div>
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<div>
|
||||
<div
|
||||
style="
|
||||
margin-top: 16px;
|
||||
@@ -134,15 +335,50 @@
|
||||
flex-wrap: wrap;
|
||||
"
|
||||
>
|
||||
<div class="tag1" style="margin: 0px 10px 10px 0px">
|
||||
<div
|
||||
class="tag1"
|
||||
style="margin: 0px 10px 10px 0px"
|
||||
v-if="data.examinationDto?.examinationFlag"
|
||||
>
|
||||
必修
|
||||
</div>
|
||||
<div class="tag3" style="margin: 0px 10px 10px 0px">
|
||||
作业
|
||||
考试
|
||||
</div>
|
||||
</div>
|
||||
<div class="submit">提交</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="
|
||||
projectStatus !== '3' &&
|
||||
new Date(projectEndTime).getTime() > new Date().getTime()
|
||||
"
|
||||
:style="{
|
||||
background:
|
||||
new Date(data.planDto?.beginTime).getTime() >
|
||||
new Date().getTime()
|
||||
? '#999'
|
||||
: '',
|
||||
}"
|
||||
class="submit"
|
||||
@click="toExamItem(data.examinationDto)"
|
||||
>
|
||||
去考试
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
style="
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
line-height: 24px;
|
||||
cursor: pointer;
|
||||
margin-left: 40px;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
"
|
||||
>
|
||||
此课程无考试
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
@@ -152,79 +388,217 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { reactive, toRefs } from "vue";
|
||||
<script setup>
|
||||
import TitleHead from "@/components/TitleHead.vue";
|
||||
export default {
|
||||
name: "FaceTeach",
|
||||
components: {
|
||||
TitleHead,
|
||||
},
|
||||
setup() {
|
||||
import ReturnHead from "@/components/ReturnHead.vue";
|
||||
import { computed, reactive, toRefs, watch, onUnmounted } from "vue";
|
||||
import FileTypeImg from "@/components/FileTypeImg.vue";
|
||||
import { request, useRequest } from "@/api/request";
|
||||
import {
|
||||
STU_OFFCOURSE_DETAIL,
|
||||
TASK_OFFCOURSE_NOTASK_SIGN,
|
||||
TASK_OFFCOURSE_SIGN,
|
||||
TASK_BROADCAST_SIGN,
|
||||
} from "@/api/api";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import { useUserInfo } from "@/api/utils";
|
||||
import { ElMessage, messageConfig } from "element-plus";
|
||||
import dayjs from "dayjs";
|
||||
const router = useRouter();
|
||||
const returnclick = () => {
|
||||
router.back();
|
||||
};
|
||||
const {
|
||||
query: { courseId, type, id: taskId, projectStatus, projectEndTime },
|
||||
} = useRoute();
|
||||
|
||||
const { data } = useRequest(STU_OFFCOURSE_DETAIL, { courseId });
|
||||
console.log("datadatadatadatadatadatadata", data);
|
||||
console.log("项目状态字段传递", projectStatus, projectEndTime);
|
||||
const teacherInfo = useUserInfo(computed(() => data.value?.planDto?.teacherId));
|
||||
|
||||
const state = reactive({
|
||||
activeName: "first",
|
||||
enclosure: [
|
||||
{
|
||||
id: 1,
|
||||
name: "项目参考文档.doc",
|
||||
img: require("../../assets/image/file/word.png"),
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "人工智能启蒙讲解讲义.pptx",
|
||||
img: require("../../assets/image/file/ppt.png"),
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "人工智能启蒙讲解讲义.xlsx",
|
||||
img: require("../../assets/image/file/excel.png"),
|
||||
},
|
||||
],
|
||||
teacher: [
|
||||
{
|
||||
id: 1,
|
||||
name: "王星天(显示事业)",
|
||||
introduce: "教师是学生的镜子,学生是老师的影子。",
|
||||
peopleimg: require("../../assets/image/img.jpg"),
|
||||
medal: [
|
||||
require("../../assets/image/medal/medal1.png"),
|
||||
require("../../assets/image/medal/medal2.png"),
|
||||
require("../../assets/image/medal/medal3.png"),
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "王星天(显示事业)",
|
||||
introduce: "教师是学生的镜子,学生是老师的影子。",
|
||||
peopleimg: require("../../assets/image/img.jpg"),
|
||||
medal: [
|
||||
require("../../assets/image/medal/medal1.png"),
|
||||
require("../../assets/image/medal/medal2.png"),
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "王星天(显示事业)",
|
||||
introduce:
|
||||
"教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。教师是学生的镜子,学生是老师的影子。",
|
||||
peopleimg: require("../../assets/image/img.jpg"),
|
||||
medal: [
|
||||
require("../../assets/image/medal/medal1.png"),
|
||||
require("../../assets/image/medal/medal2.png"),
|
||||
require("../../assets/image/medal/medal3.png"),
|
||||
],
|
||||
},
|
||||
],
|
||||
enclosure: "",
|
||||
isAllowSign: false,
|
||||
});
|
||||
const { activeName, enclosure, isAllowSign } = toRefs(state);
|
||||
|
||||
const handleClick = (tab, event) => {
|
||||
console.log(tab, event);
|
||||
console.log("附件", tab, event);
|
||||
};
|
||||
return {
|
||||
...toRefs(state),
|
||||
handleClick,
|
||||
const download = (url) => {
|
||||
window.open(url);
|
||||
};
|
||||
const downloads = (url) => {
|
||||
ElMessage.warning("未到开始时间,请耐心等待!");
|
||||
};
|
||||
|
||||
function formateArr(strs) {
|
||||
let newArr = [];
|
||||
try {
|
||||
newArr = JSON.parse(strs);
|
||||
} catch {
|
||||
newArr = strs.split(",");
|
||||
}
|
||||
console.log("112233", newArr);
|
||||
return newArr;
|
||||
}
|
||||
|
||||
let timer = null;
|
||||
//判断能否签到
|
||||
function isSignClick() {
|
||||
timer = setInterval(() => {
|
||||
let beginTime = new Date(data.value.planDto?.beginTime).getTime();
|
||||
let endTime = !data.value.planDto?.afterStart
|
||||
? new Date(data.value.planDto?.endTime).getTime()
|
||||
: new Date(data.value.planDto?.beginTime).getTime();
|
||||
let nowTime = new Date().getTime();
|
||||
if (data.value.planDto?.beforeStart && data.value.planDto?.afterStart) {
|
||||
//有开始前有开始后
|
||||
beginTime = beginTime - data.value.planDto?.beforeStart * 60 * 1000;
|
||||
endTime = endTime + data.value.planDto?.afterStart * 60 * 1000;
|
||||
console.log("1111");
|
||||
} else if (
|
||||
data.value.planDto?.beforeStart &&
|
||||
!data.value.planDto?.afterStart
|
||||
) {
|
||||
//只有开始前无开始后
|
||||
beginTime = beginTime - data.value.planDto?.beforeStart * 60 * 1000;
|
||||
console.log("11112222");
|
||||
} else if (
|
||||
!data.value.planDto?.beforeStart &&
|
||||
data.value.planDto?.afterStart
|
||||
) {
|
||||
//无开始前有开始后
|
||||
endTime = endTime + data.value.planDto?.afterStart * 60 * 1000;
|
||||
console.log("1111333");
|
||||
}
|
||||
if (nowTime < endTime && nowTime > beginTime) {
|
||||
state.isAllowSign = true;
|
||||
} else {
|
||||
state.isAllowSign = false;
|
||||
}
|
||||
// console.log(
|
||||
// "isAllowSign",
|
||||
// state.isAllowSign,
|
||||
// nowTime,
|
||||
// endTime,
|
||||
// beginTime,
|
||||
// nowTime < endTime,
|
||||
// nowTime > beginTime
|
||||
// );
|
||||
}, 1000);
|
||||
}
|
||||
isSignClick();
|
||||
|
||||
//签到
|
||||
const signClick = () => {
|
||||
if (data.value.signFlag) {
|
||||
return;
|
||||
}
|
||||
// console.log(
|
||||
// "data.signFlag",
|
||||
// data.value.signFlag,
|
||||
// state.isAllowSign,
|
||||
// !state.isAllowSign
|
||||
// );
|
||||
//if (data.value.planDto.beginTime) {
|
||||
// let date1 = new Date(data.value.planDto.beginTime).getTime()
|
||||
// let date2 = new Date().getTime()
|
||||
// if (date1 > date2) {
|
||||
// ElMessage.info("未到开始时间,请耐心等待!");
|
||||
// return;
|
||||
// }
|
||||
//}
|
||||
if (!state.isAllowSign) {
|
||||
// console.log("data.signFlag", data.value.signFlag, isAllowSign);
|
||||
ElMessage.warning("未在允许签到时间范围内");
|
||||
return;
|
||||
}
|
||||
|
||||
data.value.signFlag = 1;
|
||||
ElMessage.warning("签到成功");
|
||||
|
||||
if (taskId) {
|
||||
request(TASK_OFFCOURSE_SIGN, { courseId: courseId, taskId, type });
|
||||
} else {
|
||||
request(TASK_OFFCOURSE_NOTASK_SIGN, { courseId: courseId });
|
||||
}
|
||||
};
|
||||
|
||||
function toSurvery() {
|
||||
if (data.value.isSurvery) {
|
||||
// return;
|
||||
}
|
||||
if (
|
||||
data.value.planDto.beginTime &&
|
||||
dayjs().isBefore(data.value.planDto.beginTime)
|
||||
) {
|
||||
ElMessage.warning("课程未开始,请耐心等待!");
|
||||
return;
|
||||
}
|
||||
if (data.value.planDto.evalFlag == 0) {
|
||||
ElMessage.warning("此课程无评估");
|
||||
return;
|
||||
}
|
||||
router.push({
|
||||
path: "/investigatpage",
|
||||
query: {
|
||||
id: taskId,
|
||||
courseId: data.value.planDto.evaluateId,
|
||||
pName: "面授课",
|
||||
infoId: data.value.planDto.offcoursePlanId,
|
||||
chapterOrStageId: 0,
|
||||
sName: data.value.planDto.name,
|
||||
type,
|
||||
},
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function toWork() {
|
||||
if (data.value.planDto.beginTime) {
|
||||
let date1 = new Date(data.value.planDto.beginTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 > date2) {
|
||||
ElMessage.warning("未到开始时间,请耐心等待!");
|
||||
}
|
||||
}
|
||||
router.push({
|
||||
path: "/homeworkpage",
|
||||
query: {
|
||||
courseId: data.value.workDto.workId,
|
||||
id: taskId,
|
||||
infoId: data.value.offcourseDto.offcourseId,
|
||||
chapterOrStageId: 0,
|
||||
type,
|
||||
pName: "面授课",
|
||||
sName: data.value.planDto.name,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function toExamItem(obj) {
|
||||
if (data.value.planDto.beginTime) {
|
||||
let date1 = new Date(data.value.planDto.beginTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 > date2) {
|
||||
ElMessage.warning("未到开始时间,请耐心等待!");
|
||||
}
|
||||
}
|
||||
console.log("obj", obj.examinationTestId);
|
||||
window.open(
|
||||
import.meta.env.VITE_BOE_EXAM_DETAIL_URL + obj.examinationTestId,
|
||||
"_top"
|
||||
); //测评
|
||||
// router.push({ path: import.meta.env.VITE_BOE_EXAM_DETAIL_URL+ obj.examinationTestId });
|
||||
}
|
||||
|
||||
onUnmounted(() => {
|
||||
if (timer) {
|
||||
clearInterval(timer);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
|
||||
@@ -1,75 +1,69 @@
|
||||
<template>
|
||||
<div class="homeworkpage">
|
||||
<!-- <TitleHead text="【投票】管理者进阶腾飞班 - 授课方式"></TitleHead> -->
|
||||
<ReturnHead text="作业详情"></ReturnHead>
|
||||
|
||||
<div class="notice">
|
||||
|
||||
<div class="noticebox">
|
||||
|
||||
<div class="mani">
|
||||
<div class="joininfo">
|
||||
管理者进阶腾飞班 - 第一次作业 - 沙盘实验
|
||||
</div>
|
||||
<div class="joininfo">{{ data?.workName }}</div>
|
||||
<div class="contenttitle">
|
||||
<img class="timeimg" src="../../assets/image/ballotpage/time.png" >
|
||||
<div class="timee">2022-07-20 20:00-21:00</div>
|
||||
<img class="timeimg" src="../../assets/image/ballotpage/time.png" />
|
||||
<div class="timee">
|
||||
{{ data?.submitStartTime }}至{{ data?.submitEndTime }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="timebox">
|
||||
<div class="samez" style="margin-left:18px">00</div>
|
||||
<div class="samez" style="margin-left: 18px">
|
||||
{{ hour }}
|
||||
</div>
|
||||
<div class="samey">时</div>
|
||||
<div class="samez">00</div>
|
||||
<div class="samez">
|
||||
{{ minute }}
|
||||
</div>
|
||||
<div class="samey">分</div>
|
||||
<div class="samez">00</div>
|
||||
<div class="samez">
|
||||
{{ seconds }}
|
||||
</div>
|
||||
<div class="samey">秒</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="notice">
|
||||
|
||||
<div class="noticebox">
|
||||
|
||||
<div class="mani">
|
||||
<div class="joininfo">
|
||||
作业详情
|
||||
</div>
|
||||
<div class="joininfo">作业详情</div>
|
||||
<div class="line"></div>
|
||||
<div class="contentone">
|
||||
<div class="ballotdetail">
|
||||
1、阅读文章,做名校题库,翻译文言文,整体文化常识和文言知识;<br/>2、《中国古代诗词文化鉴赏》大唐之音、两宋清雅、明清情致
|
||||
{{ data?.workRequirement }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="notice">
|
||||
|
||||
<div class="noticebox">
|
||||
|
||||
<div class="mani">
|
||||
<div class="joininfo">
|
||||
历史纪录
|
||||
</div>
|
||||
<div class="joininfo">历史纪录</div>
|
||||
<div class="line"></div>
|
||||
<div class="contentone" style="margin-bottom:10px;">
|
||||
<div class="contentone" style="margin-bottom: 10px">
|
||||
<div class="hiscon">
|
||||
<div
|
||||
class="historyitem clearfix"
|
||||
v-for="(item,index) in historywork"
|
||||
:key="item.id"
|
||||
v-for="(item, index) in submitList"
|
||||
:key="index"
|
||||
:style="index % 2 !== 0 ? null : 'background-color:#F2F5F7'"
|
||||
>
|
||||
<div class="itemtime">{{item.time}}</div>
|
||||
<div class="itemtitle">{{item.title}}</div>
|
||||
<div class="itemtime">{{ item.createTime }}</div>
|
||||
<div class="itemtitle" :title="item.workUploadContent">
|
||||
{{ item.workUploadContent }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="btnc">
|
||||
</div>
|
||||
<div class="btnc" @click="dohomework">
|
||||
<button class="btncc">交作业</button>
|
||||
</div>
|
||||
</div>
|
||||
@@ -78,46 +72,135 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { reactive, toRefs } from "vue";
|
||||
// import TitleHead from "@/components/TitleHead.vue";
|
||||
export default {
|
||||
name: "HomeworkPage",
|
||||
components: {
|
||||
// TitleHead,
|
||||
<script setup>
|
||||
import { computed, onUnmounted, reactive, ref, toRefs } from "vue";
|
||||
import { request, useRequest } from "@/api/request";
|
||||
import {
|
||||
TASK_WORK_COMMIT,
|
||||
TASK_WORK_DETAIL,
|
||||
TASK_WORK_SUBMIT_LIST,
|
||||
WORK_HISTROY,
|
||||
} from "@/api/api";
|
||||
import dayjs from "dayjs";
|
||||
import { useRouter } from "vue-router";
|
||||
// import UploadImg from "@/components/img/UploadImg.vue";
|
||||
import FileTypeImg from "@/components/FileTypeImg.vue";
|
||||
import { useRoute } from "vue-router/dist/vue-router";
|
||||
import { ElMessage } from "element-plus";
|
||||
import ReturnHead from "@/components/ReturnHead.vue";
|
||||
const fileList = ref([]);
|
||||
// const fielPath = ref(import.meta.env.VITE_FILE_PATH);
|
||||
const uploadRef = ref();
|
||||
|
||||
const centerDialogVisible = ref(false);
|
||||
const sbValue = ref({
|
||||
content: "",
|
||||
attach: "",
|
||||
});
|
||||
const router = useRouter();
|
||||
const returnclick = () => {
|
||||
router.back();
|
||||
};
|
||||
const {
|
||||
query: {
|
||||
courseId: workId,
|
||||
type,
|
||||
id: taskId,
|
||||
pName,
|
||||
sName,
|
||||
projectStatus,
|
||||
projectEndTime,
|
||||
infoId,
|
||||
},
|
||||
setup() {
|
||||
const state = reactive({
|
||||
historywork:[
|
||||
{
|
||||
id:1,
|
||||
time:'2022-7-20 00:00',
|
||||
title:'大唐之音鉴赏 - 2022/7/20.zip'
|
||||
},
|
||||
{
|
||||
id:2,
|
||||
time:'2022-7-18 00:00',
|
||||
title:'《木兰辞》翻译:叹息声一声接着一声,木兰姑娘当门在织布。…'
|
||||
},
|
||||
{
|
||||
id:3,
|
||||
time:'2022-7-14 00:00',
|
||||
title:'大唐之音鉴赏 - 2022/7/20.zip'
|
||||
},
|
||||
{
|
||||
id:4,
|
||||
time:'2022-7-18 00:00',
|
||||
title:'《木兰辞》翻译:叹息声一声接着一声,木兰姑娘当门在织布。…'
|
||||
},
|
||||
]
|
||||
} = useRoute();
|
||||
console.log("type", type);
|
||||
const { data } =
|
||||
taskId && taskId !== "undefined"
|
||||
? useRequest(TASK_WORK_DETAIL, { workId, taskId })
|
||||
: useRequest(TASK_WORK_DETAIL, { workId });
|
||||
|
||||
console.log("data==----->", data);
|
||||
//作业倒计时
|
||||
let hour = ref(0);
|
||||
let minute = ref(0);
|
||||
let seconds = ref(0);
|
||||
let timer = setInterval(() => {
|
||||
let endTime = parseInt(new Date(data.value.submitEndTime).getTime() / 1000);
|
||||
let nowTime = parseInt(new Date().getTime() / 1000);
|
||||
if (endTime > nowTime) {
|
||||
hour.value = parseInt(
|
||||
dayjs(data.value.submitEndTime).diff(dayjs(), "minute") / 60
|
||||
);
|
||||
minute.value = parseInt(
|
||||
dayjs(data.value.submitEndTime).diff(dayjs(), "minute") % 60
|
||||
);
|
||||
seconds.value = parseInt(
|
||||
dayjs(data.value.submitEndTime).diff(dayjs(), "seconds") -
|
||||
(hour.value * 60 + minute.value) * 60
|
||||
);
|
||||
} else {
|
||||
clearInterval(timer);
|
||||
}
|
||||
}, 1000);
|
||||
onUnmounted(() => {
|
||||
clearInterval(timer);
|
||||
});
|
||||
|
||||
return {
|
||||
...toRefs(state),
|
||||
|
||||
}
|
||||
},
|
||||
const { data: submitList } = useRequest(TASK_WORK_SUBMIT_LIST, {
|
||||
workerId: workId,
|
||||
});
|
||||
console.log("submitList==----->", submitList);
|
||||
//交作业
|
||||
const dohomework = () => {
|
||||
console.log("workId", workId, type, taskId);
|
||||
router.push({
|
||||
path: "/uploadwork",
|
||||
query: { type: type, workId: workId, taskId: taskId },
|
||||
});
|
||||
};
|
||||
// const open = () => {
|
||||
// centerDialogVisible.value = true;
|
||||
// };
|
||||
// const showFileList = computed(() => {
|
||||
// return fileList.value.length;
|
||||
// });
|
||||
|
||||
// const handleClick = () => {
|
||||
// console.log(fileList.value, uploadRef.value);
|
||||
// if (!sbValue.value.content) {
|
||||
// if (fileList.value.length === 0) {
|
||||
// return ElMessage.warning("请输入作业内容");
|
||||
// }
|
||||
// }
|
||||
// request(TASK_WORK_COMMIT, {
|
||||
// projectOrRouterLogo: type,
|
||||
// workUploadContent: sbValue.value.content,
|
||||
// workUploadAddress: fileList.value.map((e) => e.url).join(",") || "",
|
||||
// workId,
|
||||
// type,
|
||||
// taskId: taskId || infoId,
|
||||
// }).then((res) => {
|
||||
// console.log(res);
|
||||
// submitList.value.unshift(res.data);
|
||||
// open();
|
||||
// sbValue.value.content = "";
|
||||
// fileList.value = [];
|
||||
// remove(0);
|
||||
// clearFiles();
|
||||
// });
|
||||
// };
|
||||
|
||||
// function clearFiles() {
|
||||
// uploadRef.value.clearFiles();
|
||||
// }
|
||||
|
||||
// function remove(i) {
|
||||
// uploadRef.value.remove(i);
|
||||
// }
|
||||
|
||||
// function reUpload(i) {
|
||||
// uploadRef.value.reUpload(i);
|
||||
// }
|
||||
</script>
|
||||
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
@@ -136,7 +219,7 @@ export default {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
// margin-top: -17.5px;
|
||||
margin-top: 20px;
|
||||
margin-top: 10px;
|
||||
.noticebox {
|
||||
width: 100%;
|
||||
background: #fff;
|
||||
@@ -147,7 +230,7 @@ export default {
|
||||
.line {
|
||||
width: 100%;
|
||||
height: 0;
|
||||
border-top: 1px solid #F1F2F3;
|
||||
border-top: 1px solid #f1f2f3;
|
||||
margin-top: 17px;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
@@ -157,7 +240,7 @@ export default {
|
||||
margin-top: 20px;
|
||||
// position:relative;
|
||||
.joininfo {
|
||||
color:#0D233A;
|
||||
color: #0d233a;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
@@ -173,7 +256,7 @@ export default {
|
||||
height: 13px;
|
||||
}
|
||||
.timee {
|
||||
color:#6E7B84;
|
||||
color: #6e7b84;
|
||||
font-size: 14px;
|
||||
line-height: 13px;
|
||||
margin-left: 6px;
|
||||
@@ -183,18 +266,18 @@ export default {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 49px;
|
||||
background-color:#F2F5F7;
|
||||
background-color: #f2f5f7;
|
||||
margin-top: 17.5px;
|
||||
margin-bottom: 27.5px;
|
||||
border-radius: 10px;
|
||||
.samez {
|
||||
color:#0060FF;
|
||||
color: #0060ff;
|
||||
font-size: 18px;
|
||||
line-height: 49px;
|
||||
margin-left: 13px;
|
||||
}
|
||||
.samey {
|
||||
color:#6E7B84;
|
||||
color: #6e7b84;
|
||||
font-size: 14px;
|
||||
line-height: 49px;
|
||||
|
||||
@@ -210,7 +293,7 @@ export default {
|
||||
// height: 200px;
|
||||
|
||||
.ballotdetail {
|
||||
color:#6E7B84;
|
||||
color: #6e7b84;
|
||||
line-height: 30px;
|
||||
font-size: 13px;
|
||||
}
|
||||
@@ -221,7 +304,7 @@ export default {
|
||||
width: 100%;
|
||||
border-radius: 4px;
|
||||
.itemtime {
|
||||
color:#6E7B84;
|
||||
color: #6e7b84;
|
||||
margin-left: 21px;
|
||||
font-size: 12px;
|
||||
margin-top: 11px;
|
||||
@@ -231,10 +314,13 @@ export default {
|
||||
font-size: 13px;
|
||||
color: #333330;
|
||||
margin: 10.5px 0 10.5px 21px;
|
||||
width: 90%;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.btnc {
|
||||
width: 100%;
|
||||
@@ -245,7 +331,7 @@ export default {
|
||||
height: 33px;
|
||||
width: 88%;
|
||||
border: 0;
|
||||
background-color: #2478FF;
|
||||
background-color: #2478ff;
|
||||
border-radius: 6px;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
<template>
|
||||
<ReturnHead
|
||||
text="写作业"
|
||||
:showpublish="true"
|
||||
:publishWork="publishWork"
|
||||
></ReturnHead>
|
||||
<div
|
||||
class="uploadworkpage"
|
||||
:style="{
|
||||
@@ -31,18 +36,58 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { reactive, toRefs } from "vue";
|
||||
import { reactive, toRefs, ref } from "vue";
|
||||
import ReturnHead from "@/components/ReturnHead.vue";
|
||||
import { request, useRequest } from "@/api/request";
|
||||
import { TASK_WORK_COMMIT } from "@/api/api";
|
||||
import { useRoute } from "vue-router/dist/vue-router";
|
||||
import { ElMessage } from "element-plus";
|
||||
export default {
|
||||
name: "UploadWork",
|
||||
components: {},
|
||||
components: {
|
||||
ReturnHead,
|
||||
},
|
||||
setup() {
|
||||
const state = reactive({
|
||||
text: "",
|
||||
textarea: "",
|
||||
screenHeight: document.body.clientHeight, // 屏幕高度
|
||||
});
|
||||
const {
|
||||
query: { workId, type, taskId, infoId },
|
||||
} = useRoute();
|
||||
const textarea = ref("");
|
||||
const fileList = ref([]);
|
||||
//发布作业
|
||||
const publishWork = () => {
|
||||
console.log("点击了发布", workId, type, taskId);
|
||||
if (!textarea.value) {
|
||||
if (fileList.value.length === 0) {
|
||||
return ElMessage.warning("请输入作业内容");
|
||||
}
|
||||
}
|
||||
let obj = {
|
||||
projectOrRouterLogo: type,
|
||||
workUploadContent: textarea.value,
|
||||
workUploadAddress: fileList.value.map((e) => e.url).join(",") || "",
|
||||
workId,
|
||||
type,
|
||||
taskId: taskId || infoId,
|
||||
};
|
||||
console.log("obj", obj);
|
||||
request(TASK_WORK_COMMIT, obj).then((res) => {
|
||||
console.log("上传作业", res);
|
||||
// submitList.value.unshift(res.data);
|
||||
// open();
|
||||
textarea.value = "";
|
||||
fileList.value = [];
|
||||
// remove(0);
|
||||
// clearFiles();
|
||||
});
|
||||
};
|
||||
return {
|
||||
...toRefs(state),
|
||||
publishWork,
|
||||
textarea,
|
||||
};
|
||||
},
|
||||
};
|
||||
@@ -60,7 +105,7 @@ clearfix:after {
|
||||
background-color: #fff;
|
||||
// margin-top: 73.5px;
|
||||
.inputcontainer {
|
||||
margin-top: 20px;
|
||||
margin-top: 10px;
|
||||
background-color: #fff;
|
||||
width: 100%;
|
||||
// height: 100px;
|
||||
|
||||
@@ -1,23 +1,18 @@
|
||||
<template>
|
||||
<div class="Investigat">
|
||||
<!-- <TitleHead text="【调研】管理者进阶腾飞班 - 培训阶段性调研"></TitleHead> -->
|
||||
|
||||
<ReturnHead text="评估详情"></ReturnHead>
|
||||
<div class="notice">
|
||||
<div class="noticebox">
|
||||
<div class="mani">
|
||||
<!-- <div class="dir">
|
||||
<div class="samegt pre"></div>
|
||||
<div class="sameg">上一个</div>
|
||||
<div class="sameg" style="margin-left: 15.5px">下一个</div>
|
||||
<div class="samegt next"></div>
|
||||
</div> -->
|
||||
<div
|
||||
class="question"
|
||||
v-for="(value, index) in question"
|
||||
v-for="(value, index) in questionList"
|
||||
:key="index"
|
||||
:style="{ 'margin-top': '20px' }"
|
||||
>
|
||||
<div class="text">{{ value.text }}</div>
|
||||
<div v-if="value.questionType == '4'">
|
||||
<div class="text">{{ value.assessmentScTitle }}</div>
|
||||
<div class="answerLcontainer">
|
||||
<div class="answerL">
|
||||
<div>完全没用</div>
|
||||
@@ -29,7 +24,10 @@
|
||||
<div class="itemwrap">
|
||||
<div
|
||||
class="answerCitem"
|
||||
v-for="(item, key) in select"
|
||||
v-for="(item, key) in orderArr(
|
||||
value.assessmentMinScore,
|
||||
value.assessmentMaxScore
|
||||
)"
|
||||
:key="key"
|
||||
:style="{
|
||||
background:
|
||||
@@ -41,32 +39,44 @@
|
||||
? '#fff'
|
||||
: 'rgba(86, 163, 249, 1)',
|
||||
}"
|
||||
@click="score(value, item)"
|
||||
@click="
|
||||
() => {
|
||||
if (data.isSubmit) {
|
||||
return;
|
||||
}
|
||||
value.selectAnswer = item;
|
||||
}
|
||||
"
|
||||
>
|
||||
<div>{{ item }}</div>
|
||||
<div>{{ item + 1 }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="value.questionType == '1'">
|
||||
<div class="question" style="margin-top: 20px">
|
||||
<div class="text">4、类似相应的课程,您认为适合哪些人观看?</div>
|
||||
<div class="text">{{ value?.singleStemName }}</div>
|
||||
<div
|
||||
v-for="(value, index) in viewpeople"
|
||||
:key="index"
|
||||
v-for="(values, indexs) in value.assessmentSingleChoiceVoList"
|
||||
:key="indexs"
|
||||
style="display: flex; align-items: center"
|
||||
:style="{ 'margin-top': '22px' }"
|
||||
@click="selectPeople(value)"
|
||||
>
|
||||
<div class="conn">
|
||||
<div class="peoplecontainer">
|
||||
<img
|
||||
style="width: 14px; height: 13px"
|
||||
:src="
|
||||
value.select
|
||||
? require('../../assets/image/investigat/checkbox.png')
|
||||
: require('../../assets/image/investigat/checkbox2.png')
|
||||
@click="
|
||||
() => {
|
||||
if (data.isSubmit) {
|
||||
return;
|
||||
}
|
||||
value.assessmentSingleChoiceVoList.forEach((e) => {
|
||||
e.select = false;
|
||||
});
|
||||
values.select = true;
|
||||
}
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="width: 14px; height: 14px"
|
||||
:src="values.select ? checkbox : checkbox2"
|
||||
/>
|
||||
<div
|
||||
class="people"
|
||||
@@ -76,31 +86,103 @@
|
||||
margin-top: -2.5px;
|
||||
"
|
||||
>
|
||||
{{ value.text }}
|
||||
{{ values.singleOptionName }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="value.questionType == '2'">
|
||||
<div class="question" style="margin-top: 20px">
|
||||
<div class="text">{{ value?.multipleStemName }}</div>
|
||||
<div
|
||||
v-for="(values, indexs) in value.multipleChoiceVoList"
|
||||
:key="indexs"
|
||||
style="display: flex; align-items: center"
|
||||
:style="{ 'margin-top': '22px' }"
|
||||
@click="
|
||||
() => {
|
||||
if (data.isSubmit) {
|
||||
return;
|
||||
}
|
||||
values.select = !values.select;
|
||||
}
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="width: 14px; height: 14px"
|
||||
:src="values.select ? checkbox : checkbox2"
|
||||
/>
|
||||
<div
|
||||
class="people"
|
||||
style="
|
||||
font-size: 13px;
|
||||
margin-left: 7px;
|
||||
margin-top: -2.5px;
|
||||
"
|
||||
>
|
||||
{{ values.multipleOptionName }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="value.questionType == '3'">
|
||||
<div class="question" style="margin-top: 21px">
|
||||
<div class="text">5、您的其他意见</div>
|
||||
<div class="text">{{ value.assessmentQaTitle }}</div>
|
||||
<div style="margin-top: 21px; position: relative">
|
||||
<div class="inputcon">
|
||||
<el-input
|
||||
style="width: 87%"
|
||||
v-model="textarea1"
|
||||
v-model="value.content"
|
||||
:autosize="{ minRows: 5, maxRows: 5 }"
|
||||
resize="none"
|
||||
maxlength="200"
|
||||
type="textarea"
|
||||
@input="textareaInput"
|
||||
:readonly="!!data.isSubmit"
|
||||
/>
|
||||
</div>
|
||||
<div class="words">{{ textarealength }}/200</div>
|
||||
<div class="words">{{ value.content?.length || 0 }}/200</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
style="display: flex; justify-content: center; width: 100%"
|
||||
v-if="
|
||||
data.essayQuestionVoList?.length ||
|
||||
data.multipleStemVoList?.length ||
|
||||
data.scoringQuestionVoList?.length ||
|
||||
data.singleStemVoList?.length
|
||||
"
|
||||
>
|
||||
<div
|
||||
v-if="projectStatus && projectEndTime"
|
||||
style="width: 100%; display: flex; justify-content: center"
|
||||
>
|
||||
<div
|
||||
v-if="
|
||||
projectStatus !== '3' &&
|
||||
new Date(projectEndTime).getTime() > new Date().getTime()
|
||||
"
|
||||
class="submit"
|
||||
@click="submit"
|
||||
:style="{ background: data.isSubmit ? '#999' : '#2478ff' }"
|
||||
>
|
||||
提交
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
style="width: 100%; display: flex; justify-content: center"
|
||||
>
|
||||
<div
|
||||
class="submit"
|
||||
@click="submit"
|
||||
:style="{ background: data.isSubmit ? '#999' : '#2478ff' }"
|
||||
>
|
||||
提交
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex; justify-content: center">
|
||||
<div class="submit">提交</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -108,90 +190,178 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { reactive, toRefs } from "vue";
|
||||
// import TitleHead from "@/components/TitleHead.vue";
|
||||
export default {
|
||||
name: "InvestigatPage",
|
||||
components: {
|
||||
// TitleHead,
|
||||
<script setup>
|
||||
import { ref, reactive, toRefs } from "vue";
|
||||
import checkbox from "@/assets/image/checkbox.png";
|
||||
import checkbox2 from "@/assets/image/checkbox2.png";
|
||||
import { useRoute, useRouter } from "vue-router/dist/vue-router";
|
||||
import { request, usePage, useRequest } from "@/api/request";
|
||||
import { ASSESSMENT_QUERY, ASSESSMENT_SUBMIT } from "@/api/api";
|
||||
import { ElMessage } from "element-plus";
|
||||
import ReturnHead from "@/components/ReturnHead.vue";
|
||||
import dayjs from "dayjs";
|
||||
const {
|
||||
query: {
|
||||
courseId,
|
||||
id: taskId,
|
||||
infoId,
|
||||
type,
|
||||
pName,
|
||||
sName,
|
||||
chapterOrStageId,
|
||||
projectStatus,
|
||||
projectEndTime,
|
||||
},
|
||||
setup() {
|
||||
const state = reactive({
|
||||
question: [
|
||||
{
|
||||
id: 1,
|
||||
text: "1、您觉得课程对您是否有用?",
|
||||
selectAnswer: 0,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
text: "2、您是否会推荐课程给其他同事?",
|
||||
selectAnswer: 0,
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
text: "3、后续该讲师有其他课程是否会参与?",
|
||||
selectAnswer: 0,
|
||||
},
|
||||
],
|
||||
select: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
|
||||
viewpeople: [
|
||||
{
|
||||
id: 1,
|
||||
text: "基础员工",
|
||||
select: false,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
text: "中层管理",
|
||||
select: false,
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
text: "专业人员",
|
||||
select: false,
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
text: "高级管理",
|
||||
select: false,
|
||||
},
|
||||
],
|
||||
textarea1: "",
|
||||
textarealength: 0,
|
||||
} = useRoute();
|
||||
const router = useRouter();
|
||||
const returnclick = () => {
|
||||
clearInterval(timers);
|
||||
router.back();
|
||||
};
|
||||
|
||||
const { data } = useRequest(ASSESSMENT_QUERY(courseId), {
|
||||
id: courseId,
|
||||
type,
|
||||
chapterOrStageId,
|
||||
targetId: infoId ? infoId : 0,
|
||||
});
|
||||
const score = (value, item) => {
|
||||
let arr = state.question;
|
||||
arr.map((i) => {
|
||||
if (i.id === value.id) {
|
||||
i.selectAnswer = item;
|
||||
console.log("我是查询评估的参数", {
|
||||
id: courseId,
|
||||
type,
|
||||
chapterOrStageId,
|
||||
targetId: infoId ? infoId : 0,
|
||||
});
|
||||
console.log("我是需要排序得题目", data);
|
||||
|
||||
// 答题时间
|
||||
const answerTime = dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss");
|
||||
|
||||
console.log("录入首次进入页面时间", answerTime);
|
||||
|
||||
// 数组去空对象
|
||||
function formateArr(datas) {
|
||||
let allArr = [];
|
||||
for (let i = 0; i < datas.length; i++) {
|
||||
for (let j = 0; j < datas[i].length; j++) {
|
||||
allArr.push(datas[i][j]);
|
||||
}
|
||||
}
|
||||
let newarr = allArr.sort((a, b) => {
|
||||
return a.orderNumber - b.orderNumber;
|
||||
});
|
||||
console.log("我是排序后的题目", newarr);
|
||||
return newarr;
|
||||
}
|
||||
|
||||
const questionList = ref([]);
|
||||
|
||||
const timers = setInterval(() => {
|
||||
console.log(data);
|
||||
console.log(data.value.assessmentId);
|
||||
if (data.value.assessmentId) {
|
||||
clearInterval(timers);
|
||||
console.log([
|
||||
data.value.essayQuestionVoList,
|
||||
data.value.multipleStemVoList,
|
||||
data.value.scoringQuestionVoList,
|
||||
data.value.singleStemVoList,
|
||||
]);
|
||||
questionList.value = formateArr([
|
||||
data.value.essayQuestionVoList,
|
||||
data.value.multipleStemVoList,
|
||||
data.value.scoringQuestionVoList,
|
||||
data.value.singleStemVoList,
|
||||
]);
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
setTimeout(() => {
|
||||
clearInterval(timers);
|
||||
}, 30000);
|
||||
|
||||
// 生成数组
|
||||
function orderArr(a, b) {
|
||||
let arrs = [];
|
||||
for (let i = 0; i < 10; i++) {
|
||||
if (i + 1 >= a && i + 1 <= b) {
|
||||
arrs.push(i);
|
||||
}
|
||||
}
|
||||
return arrs;
|
||||
}
|
||||
|
||||
const centerDialogVisible = ref(false);
|
||||
const open = () => {
|
||||
centerDialogVisible.value = true;
|
||||
};
|
||||
function submit() {
|
||||
console.log("录入首次进入页面时间", answerTime);
|
||||
if (1 > 0) {
|
||||
console.log(data);
|
||||
console.log("我是提交的数据", {
|
||||
targetId: infoId ? infoId : 0, // 项目、路径图或开课的Id
|
||||
chapterOrStageId: chapterOrStageId ? chapterOrStageId : 0, // 关卡或者阶段Id 关卡Id不允许为空
|
||||
assessmentId: courseId,
|
||||
taskId: taskId ? taskId : 0,
|
||||
type,
|
||||
result: JSON.stringify(data.value),
|
||||
});
|
||||
}
|
||||
if (data.value.isSubmit) {
|
||||
return;
|
||||
}
|
||||
console.log("data.value", data.value);
|
||||
let list1 = data.value.assessmentEssayQuestionDtoList;
|
||||
if (list1 && list1.length > 0) {
|
||||
list1.forEach((item) => {
|
||||
if (item && !item.content) {
|
||||
return ElMessage.warning("您有未填写的评估题干");
|
||||
}
|
||||
});
|
||||
state.question = arr;
|
||||
};
|
||||
const selectPeople = (value) => {
|
||||
let arr = state.viewpeople;
|
||||
arr.map((i) => {
|
||||
if (i.id === value.id) {
|
||||
i.select = !i.select;
|
||||
}
|
||||
let list2 = data.value.assessmentScoringQuestionDtoList;
|
||||
if (list2 && list2.length > 0) {
|
||||
list2.forEach((item) => {
|
||||
if (item && !item.selectAnswer) {
|
||||
return ElMessage.warning("您有未填写的评估题干");
|
||||
}
|
||||
});
|
||||
state.viewpeople = arr;
|
||||
};
|
||||
const textareaInput = (e) => {
|
||||
// console.log("eee", e);
|
||||
state.textarea1 = e;
|
||||
state.textarealength = e.length;
|
||||
};
|
||||
return {
|
||||
...toRefs(state),
|
||||
score,
|
||||
selectPeople,
|
||||
textareaInput,
|
||||
};
|
||||
},
|
||||
};
|
||||
}
|
||||
let list3 = data.value.assessmentSingleChoiceDtoList;
|
||||
if (list3 && list3.length > 0) {
|
||||
let flag = 0;
|
||||
list3.forEach((item) => {
|
||||
flag = flag + item.select ? 1 : 0;
|
||||
});
|
||||
if (flag == 0) {
|
||||
return ElMessage.warning("您有未填写的评估题干");
|
||||
}
|
||||
}
|
||||
let list4 = data.value.assessmentMultipleChoiceDtoList;
|
||||
if (list4 && list4.length > 0) {
|
||||
let flag = 0;
|
||||
list4.forEach((item) => {
|
||||
flag = flag + item.select ? 1 : 0;
|
||||
});
|
||||
if (flag == 0) {
|
||||
return ElMessage.warning("您有未填写的评估题干");
|
||||
}
|
||||
}
|
||||
|
||||
data.value.isSubmit = !data.value.isSubmit;
|
||||
ElMessage.success("提交成功");
|
||||
request(ASSESSMENT_SUBMIT, {
|
||||
targetId: infoId ? infoId : 0, // 项目、路径图或开课的Id
|
||||
chapterOrStageId: chapterOrStageId ? chapterOrStageId : 0, // 关卡或者阶段Id 关卡Id不允许为空
|
||||
assessmentId: courseId,
|
||||
taskId: taskId ? taskId : 0,
|
||||
type,
|
||||
result: JSON.stringify(data.value),
|
||||
beginTime: answerTime,
|
||||
}).then(() => {
|
||||
open();
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
@@ -210,7 +380,7 @@ export default {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
// margin-top: -17.5px;
|
||||
margin-top: 20px;
|
||||
margin-top: 10px;
|
||||
.noticebox {
|
||||
// width: 90%;
|
||||
width: 100%;
|
||||
|
||||
@@ -1,32 +1,155 @@
|
||||
<template>
|
||||
<div class="liveboradcast">
|
||||
<ReturnHead text="课程直播"></ReturnHead>
|
||||
<!-- <TitleHead text="【投票】管理者进阶腾飞班 - 授课方式"></TitleHead> -->
|
||||
<div class="top">
|
||||
<div class="top" :style="{ display: closeBtn ? 'flex' : 'none' }">
|
||||
<div class="topin">
|
||||
<div class="topsa">
|
||||
请各位选课的同学提前阅读本课程的“教学大纲与计划…
|
||||
{{ data?.liveNotice }}
|
||||
</div>
|
||||
<img class="topimg" src="../../assets/image/liveboradcast/cha.png" />
|
||||
<img
|
||||
class="topimg"
|
||||
@click="isShowClose"
|
||||
src="../../assets/image/liveboradcast/cha.png"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="notice" style="margin-top: 0">
|
||||
<div class="noticebox">
|
||||
<div class="avator">
|
||||
<img class="avaimg" src="../../assets/image/liveboradcast/px.jpg" />
|
||||
<div class="avaname">刘敏</div>
|
||||
<img class="avaimg" :src="teacherInfo.avatar" />
|
||||
<div class="avaname">{{ data.userInfoBo?.userName }}</div>
|
||||
</div>
|
||||
<div class="mani">
|
||||
<div class="joininfo">管理者进阶腾飞班 - 专属线下活动</div>
|
||||
<div class="joininfo">{{ data?.liveName }}</div>
|
||||
<div class="contenttitle">
|
||||
<img class="timeimg" src="../../assets/image/ballotpage/time.png" />
|
||||
<div class="timee">2022-07-20 20:00-21:00</div>
|
||||
<div class="timee">
|
||||
{{ data?.liveStartTime + " 至 " + data?.liveEndTime }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="midline"></div>
|
||||
<div class="timebox">
|
||||
|
||||
<div class="timebox" v-if="projectStatus && projectEndTime">
|
||||
<div
|
||||
v-if="
|
||||
projectStatus !== '3' &&
|
||||
new Date(projectEndTime).getTime() > new Date().getTime()
|
||||
"
|
||||
class="allbtn"
|
||||
>
|
||||
<botton
|
||||
class="samebtn btno"
|
||||
:style="{
|
||||
background: `${
|
||||
new Date(data.liveStartTime).getTime() >
|
||||
new Date().getTime()
|
||||
? '#999'
|
||||
: 'rgb(59, 191, 252)'
|
||||
}`,
|
||||
}"
|
||||
@click="showClick"
|
||||
>观看
|
||||
</botton>
|
||||
|
||||
<botton
|
||||
class="samebtn btnt"
|
||||
:style="{
|
||||
background: `${
|
||||
!isAllowSign
|
||||
? '#999'
|
||||
: data.signFlag
|
||||
? '#999'
|
||||
: 'rgb(57, 146, 249)'
|
||||
}`,
|
||||
}"
|
||||
@click="signClick"
|
||||
>{{ data.signFlag ? "已签到" : "签到" }}
|
||||
</botton>
|
||||
|
||||
<botton
|
||||
:style="{
|
||||
background: `${
|
||||
new Date(data.liveStartTime).getTime() >
|
||||
new Date().getTime()
|
||||
? '#999'
|
||||
: data.isSurvery
|
||||
? '#999'
|
||||
: 'rgb(57, 146, 249)'
|
||||
}`,
|
||||
}"
|
||||
class="samebtn btnr"
|
||||
@click="commitClick"
|
||||
v-if="data.isEvaluate && data.isEvaluate == 1"
|
||||
>{{ data.isSurvery ? "已评估" : "评估" }}
|
||||
</botton>
|
||||
</div>
|
||||
<div v-else class="threeBtn">
|
||||
<botton
|
||||
:style="{
|
||||
background: `${
|
||||
new Date(data.liveStartTime).getTime() >
|
||||
new Date().getTime()
|
||||
? '#999'
|
||||
: data.isSurvery
|
||||
? '#999'
|
||||
: 'rgb(57, 146, 249)'
|
||||
}`,
|
||||
}"
|
||||
class="samebtn btnr"
|
||||
@click="commitClick"
|
||||
v-if="data.isEvaluate && data.isEvaluate == 1 && data.isSurvery"
|
||||
>{{ data.isSurvery ? "已评估" : "评估" }}
|
||||
</botton>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timebox" v-else>
|
||||
<div class="allbtn">
|
||||
<button class="samebtn btno">观看</button>
|
||||
<button class="samebtn btnt">签到</button>
|
||||
<button class="samebtn btnr">评估</button>
|
||||
<botton
|
||||
class="samebtn btno"
|
||||
:style="{
|
||||
background: `${
|
||||
new Date(data.liveStartTime).getTime() >
|
||||
new Date().getTime()
|
||||
? '#999'
|
||||
: 'rgb(59, 191, 252)'
|
||||
}`,
|
||||
}"
|
||||
@click="showClick"
|
||||
>观看
|
||||
</botton>
|
||||
|
||||
<botton
|
||||
class="samebtn btnt"
|
||||
:style="{
|
||||
background: `${
|
||||
!isAllowSign
|
||||
? '#999'
|
||||
: data.signFlag
|
||||
? '#999'
|
||||
: 'rgb(57, 146, 249)'
|
||||
}`,
|
||||
}"
|
||||
@click="signClick"
|
||||
>{{ data.signFlag ? "已签到" : "签到" }}
|
||||
</botton>
|
||||
|
||||
<botton
|
||||
:style="{
|
||||
background: `${
|
||||
new Date(data.liveStartTime).getTime() >
|
||||
new Date().getTime()
|
||||
? '#999'
|
||||
: data.isSurvery
|
||||
? '#999'
|
||||
: 'rgb(57, 146, 249)'
|
||||
}`,
|
||||
}"
|
||||
class="samebtn btnr"
|
||||
@click="commitClick"
|
||||
v-if="data.isEvaluate && data.isEvaluate == 1"
|
||||
>{{ data.isSurvery ? "已评估" : "评估" }}
|
||||
</botton>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -36,19 +159,17 @@
|
||||
<div class="notice">
|
||||
<div class="noticebox">
|
||||
<div class="mani">
|
||||
<div class="joininfo">活动详情</div>
|
||||
<div class="joininfo">直播说明</div>
|
||||
<div class="line"></div>
|
||||
<div class="contentone">
|
||||
<div class="actinner">
|
||||
活动详情<br />通过对各级人员的软件平台培训,使其能够了解如何运用乾元坤和智能信息管理系统来提升企业管理水平,最大限度发挥软件产品在企业中的作用;<br />●
|
||||
培训目标<br />1.使企业不同部门人员掌握便捷、有效的系统平台操作方法;<br />2.通过系统平台的培训提高员工对企业的管理理念认识与提升。<br />3.通过系统平台培训加强沟通,统一部署,协同工作,提高效率。<br />●
|
||||
培训对象<br />集团领导、各相关部门领导、总经理、车间主管、车间操作员
|
||||
{{ data.liveExplain }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="notice">
|
||||
<!-- <div class="notice">
|
||||
<div class="noticebox">
|
||||
<div class="mani">
|
||||
<div class="joininfo">课后作业</div>
|
||||
@@ -69,20 +190,162 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
// import { reactive, toRefs } from "vue";
|
||||
// import TitleHead from "@/components/TitleHead.vue";
|
||||
export default {
|
||||
name: "LiveBoradcast",
|
||||
components: {
|
||||
// TitleHead,
|
||||
<script setup>
|
||||
import ReturnHead from "@/components/ReturnHead.vue";
|
||||
import { computed, reactive, toRefs, onUnmounted, ref } from "vue";
|
||||
import img from "@/assets/image/uploadimg.png";
|
||||
import { request, useRequest } from "@/api/request";
|
||||
import { TASK_BROADCAST_DETAIL, TASK_BROADCAST_SIGN } from "@/api/api";
|
||||
import { useRoute } from "vue-router/dist/vue-router";
|
||||
import { useRouter } from "vue-router";
|
||||
import { useUserInfo } from "@/api/utils";
|
||||
import { ElMessage } from "element-plus";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
const {
|
||||
query: {
|
||||
courseId: liveId,
|
||||
id: taskId,
|
||||
type,
|
||||
pName,
|
||||
sName,
|
||||
projectStatus,
|
||||
projectEndTime,
|
||||
},
|
||||
setup() {},
|
||||
} = useRoute();
|
||||
const router = useRouter();
|
||||
const returnclick = () => {
|
||||
router.back();
|
||||
};
|
||||
|
||||
const { data } = useRequest(TASK_BROADCAST_DETAIL, { liveId });
|
||||
console.log("直播信息", data);
|
||||
const teacherInfo = useUserInfo(computed(() => data.value.userInfoBo?.userId));
|
||||
|
||||
const state = reactive({
|
||||
activeName: "first",
|
||||
teacher: [],
|
||||
isAllowSign: false,
|
||||
});
|
||||
const { activeName, teacher, isAllowSign } = toRefs(state);
|
||||
const signClick = () => {
|
||||
if (!state.isAllowSign) {
|
||||
// console.log("data.signFlag", data.value.signFlag, isAllowSign);
|
||||
ElMessage.warning("未在允许签到时间范围内");
|
||||
return;
|
||||
}
|
||||
if (data.value.signFlag) {
|
||||
return;
|
||||
}
|
||||
data.value.signFlag = 1;
|
||||
ElMessage.warning("签到成功");
|
||||
request(TASK_BROADCAST_SIGN, { courseId: liveId, taskId, type });
|
||||
};
|
||||
let timer = null;
|
||||
//判断能否签到
|
||||
function isSignClick() {
|
||||
timer = setInterval(() => {
|
||||
let beginTime = new Date(data.value.liveStartTime).getTime();
|
||||
let endTime = !data.value.afterSignIn
|
||||
? new Date(data.value.liveEndTime).getTime()
|
||||
: new Date(data.value.liveStartTime).getTime();
|
||||
let nowTime = new Date().getTime();
|
||||
if (data.value.beforeSignIn && data.value.afterSignIn) {
|
||||
//有开始前有开始后
|
||||
beginTime = beginTime - data.value.beforeSignIn * 60 * 1000;
|
||||
endTime = endTime + data.value.afterSignIn * 60 * 1000;
|
||||
console.log("1111");
|
||||
} else if (data.value.beforeSignIn && !data.value.afterSignIn) {
|
||||
//只有开始前无开始后
|
||||
beginTime = beginTime - data.value.beforeSignIn * 60 * 1000;
|
||||
console.log("11112222");
|
||||
} else if (!data.value.beforeSignIn && data.value.afterSignIn) {
|
||||
//无开始前有开始后
|
||||
endTime = endTime + data.value.afterSignIn * 60 * 1000;
|
||||
console.log("1111333");
|
||||
}
|
||||
if (nowTime < endTime && nowTime > beginTime) {
|
||||
state.isAllowSign = true;
|
||||
} else {
|
||||
state.isAllowSign = false;
|
||||
}
|
||||
// console.log(
|
||||
// "isAllowSign",
|
||||
// state.isAllowSign,
|
||||
// nowTime,
|
||||
// endTime,
|
||||
// beginTime,
|
||||
// nowTime < endTime,
|
||||
// nowTime > beginTime
|
||||
// );
|
||||
}, 1000);
|
||||
}
|
||||
isSignClick();
|
||||
const commitClick = () => {
|
||||
if (data.value.liveStartTime) {
|
||||
let date1 = new Date(data.value.liveStartTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 > date2) {
|
||||
ElMessage.warning("未到时间,请耐心等待!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (data.value.isSurvery) {
|
||||
// return;
|
||||
}
|
||||
if (data.value.isEvaluate == 0) {
|
||||
ElMessage.warning("此直播无评估");
|
||||
return;
|
||||
}
|
||||
|
||||
console.log({
|
||||
courseId: data.value.assessmentId,
|
||||
taskIds: taskId,
|
||||
chapterOrStageId: 0,
|
||||
pName: "直播",
|
||||
sName: data.value.liveName,
|
||||
type: 4,
|
||||
});
|
||||
|
||||
router.push({
|
||||
path: "/surveydetail",
|
||||
query: {
|
||||
courseId: data.value.assessmentId,
|
||||
infoId: data.value.liveId,
|
||||
chapterOrStageId: 0,
|
||||
pName: "直播",
|
||||
sName: data.value.liveName,
|
||||
type: 4,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
function showClick() {
|
||||
if (data.value.liveStartTime) {
|
||||
let date1 = new Date(data.value.liveStartTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 > date2) {
|
||||
ElMessage.warning("未到开始时间,请耐心等待!");
|
||||
return;
|
||||
}
|
||||
}
|
||||
window.open(data.value.liveLink, "_top");
|
||||
}
|
||||
|
||||
//是否显示头部公告
|
||||
const closeBtn = ref(true);
|
||||
const isShowClose = () => {
|
||||
closeBtn.value = false;
|
||||
};
|
||||
onUnmounted(() => {
|
||||
if (timer) {
|
||||
clearInterval(timer);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
@@ -111,6 +374,9 @@ export default {
|
||||
color: #ff9e00;
|
||||
line-height: 25px;
|
||||
font-size: 12px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
.topimg {
|
||||
height: 10px;
|
||||
@@ -211,6 +477,9 @@ export default {
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
border-radius: 6px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.btno {
|
||||
background-color: #00c1fc;
|
||||
|
||||
360
src/views/outerchain/OuterChain.vue
Normal file
360
src/views/outerchain/OuterChain.vue
Normal file
@@ -0,0 +1,360 @@
|
||||
<template>
|
||||
<div class="outerchain">
|
||||
<ReturnHead text="外链详情"></ReturnHead>
|
||||
<!-- <TitleHead text="【投票】管理者进阶腾飞班 - 授课方式"></TitleHead> -->
|
||||
<!-- <div class="top" :style="{ display: closeBtn ? 'flex' : 'none' }">
|
||||
<div class="topin">
|
||||
<div class="topsa">
|
||||
{{ data?.liveNotice }}
|
||||
</div>
|
||||
<img
|
||||
class="topimg"
|
||||
@click="isShowClose"
|
||||
src="../../assets/image/liveboradcast/cha.png"
|
||||
/>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="notice" style="margin-top: 0">
|
||||
<div class="noticebox">
|
||||
<!-- <div class="avator">
|
||||
<img class="avaimg" :src="teacherInfo.avatar" />
|
||||
<div class="avaname">{{ data.userInfoBo?.userName }}</div>
|
||||
</div> -->
|
||||
<div class="mani">
|
||||
<div class="joininfo">【外链】{{ data?.linkName }}</div>
|
||||
<!-- <div class="contenttitle">
|
||||
<img class="timeimg" src="../../assets/image/ballotpage/time.png" />
|
||||
<div class="timee">
|
||||
{{ data?.liveStartTime + " 至 " + data?.liveEndTime }}
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="midline"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="notice">
|
||||
<div class="noticebox">
|
||||
<div class="mani">
|
||||
<div class="joininfo">外链说明</div>
|
||||
<div class="line"></div>
|
||||
<div class="contentone">
|
||||
<div class="actinner">
|
||||
{{ data.linkDescription }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btnbox">
|
||||
<div class="submitbtn" @click="goOuterChain">去查看</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import ReturnHead from "@/components/ReturnHead.vue";
|
||||
import { computed, reactive, toRefs, onUnmounted, ref } from "vue";
|
||||
import img from "@/assets/image/uploadimg.png";
|
||||
import { request, useRequest } from "@/api/request";
|
||||
import { LINK_DETAILS, STUDY_RECORD } from "@/api/api";
|
||||
import { useRoute } from "vue-router/dist/vue-router";
|
||||
import { useRouter } from "vue-router";
|
||||
import { useUserInfo } from "@/api/utils";
|
||||
import { ElMessage } from "element-plus";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
const {
|
||||
query: {
|
||||
courseId: linkId,
|
||||
id: taskId,
|
||||
type,
|
||||
status,
|
||||
chapterOrStageId,
|
||||
infoId,
|
||||
studentId,
|
||||
},
|
||||
} = useRoute();
|
||||
const router = useRouter();
|
||||
console.log("外链信息", linkId);
|
||||
const { data } = useRequest(LINK_DETAILS(linkId));
|
||||
console.log("外链信息", data);
|
||||
const goOuterChain = () => {
|
||||
status != 1 &&
|
||||
request(STUDY_RECORD, {
|
||||
studentId: studentId,
|
||||
targetId: infoId,
|
||||
logo: type,
|
||||
stageOrChapterId: chapterOrStageId,
|
||||
taskId: taskId,
|
||||
});
|
||||
|
||||
window.open(data.value.linkAddress, "_top");
|
||||
};
|
||||
</script>
|
||||
|
||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||
<style lang="scss">
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
content: " ";
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
.outerchain {
|
||||
width: 100%;
|
||||
.top {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
height: 25px;
|
||||
background-color: #fffbee;
|
||||
.topin {
|
||||
// text-align: center;
|
||||
width: 90%;
|
||||
height: 25px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.topsa {
|
||||
color: #ff9e00;
|
||||
line-height: 25px;
|
||||
font-size: 12px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
}
|
||||
.topimg {
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
margin-top: 7px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.notice {
|
||||
width: 100%;
|
||||
// display: flex;
|
||||
// justify-content: center;
|
||||
// // margin-top: -17.5px;
|
||||
padding-bottom: 24px;
|
||||
margin-top: 20px;
|
||||
background: #fff;
|
||||
.noticebox {
|
||||
width: 100%;
|
||||
background: #fff;
|
||||
// border-radius: 4px;
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
.avator {
|
||||
display: flex;
|
||||
position: absolute;
|
||||
right: 29px;
|
||||
top: 30px;
|
||||
// background-color:red;
|
||||
// z-index: 999;
|
||||
.avaimg {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.avaname {
|
||||
line-height: 30px;
|
||||
margin-left: 8px;
|
||||
color: #0d233a;
|
||||
}
|
||||
}
|
||||
.line {
|
||||
width: 100%;
|
||||
height: 0;
|
||||
border-top: 1px solid #f1f2f3;
|
||||
margin-top: 17px;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
}
|
||||
.mani {
|
||||
width: 90%;
|
||||
margin-top: 20px;
|
||||
// position:relative;
|
||||
.joininfo {
|
||||
color: #0d233a;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.contenttitle {
|
||||
width: 100%;
|
||||
// height:10px;
|
||||
margin-top: 15px;
|
||||
// background-color: #bfa;
|
||||
display: flex;
|
||||
.timeimg {
|
||||
width: 12.8px;
|
||||
height: 13px;
|
||||
}
|
||||
.timee {
|
||||
color: #6e7b84;
|
||||
font-size: 14px;
|
||||
line-height: 13px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
}
|
||||
.midline {
|
||||
height: 0;
|
||||
border-top: 1px solid #f1f2f3;
|
||||
width: 100%;
|
||||
margin-top: 15px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.timebox {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
// height: 100px;
|
||||
// background-color: #bfa;
|
||||
margin-bottom: 15px;
|
||||
.allbtn {
|
||||
width: 92%;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
// background-color: lightcoral;
|
||||
.samebtn {
|
||||
width: 93px;
|
||||
height: 33px;
|
||||
border: 0;
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
border-radius: 6px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.btno {
|
||||
background-color: #00c1fc;
|
||||
}
|
||||
.btnt {
|
||||
background-color: #0096fa;
|
||||
}
|
||||
.btnr {
|
||||
background-color: #2478ff;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detailin {
|
||||
width: 100%;
|
||||
// height: 100px;
|
||||
// background-color: red;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
.in {
|
||||
margin-left: 20px;
|
||||
width: 86%;
|
||||
color: #6e7b84;
|
||||
line-height: 30px;
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
.contentone {
|
||||
margin-top: 43px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
margin-bottom: 20px;
|
||||
// height: 200px;
|
||||
.actinner {
|
||||
// background-color: red;
|
||||
color: #6e7b84;
|
||||
font-size: 13px;
|
||||
line-height: 30px;
|
||||
}
|
||||
.de {
|
||||
width: 100%;
|
||||
height: 34px;
|
||||
border-radius: 10px;
|
||||
background-color: #f2f5f7;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.deal {
|
||||
color: #333330;
|
||||
font-weight: bold;
|
||||
line-height: 34px;
|
||||
margin-left: 21px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.rightpng {
|
||||
width: 6px;
|
||||
height: 11px;
|
||||
margin-right: 6px;
|
||||
margin-top: 12px;
|
||||
}
|
||||
}
|
||||
.ballotjoincontainer {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
.ballotjoin {
|
||||
width: 85%;
|
||||
// height:100px;
|
||||
// background-color: #bfa;
|
||||
.ballotitem {
|
||||
.upitem {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.left {
|
||||
display: flex;
|
||||
.leftimg {
|
||||
width: 4.5px;
|
||||
height: 14.5px;
|
||||
margin-top: 1px;
|
||||
}
|
||||
.leftcontent {
|
||||
margin-left: 9px;
|
||||
color: #6e7b84;
|
||||
font-size: 13px;
|
||||
line-height: 30px;
|
||||
margin-top: -5px;
|
||||
}
|
||||
}
|
||||
.btn {
|
||||
background-color: #2478ff;
|
||||
color: #fff;
|
||||
width: 64px;
|
||||
height: 21px;
|
||||
border-radius: 10px;
|
||||
border: 0;
|
||||
font-size: 12px;
|
||||
line-height: 19px;
|
||||
margin-top: -1px;
|
||||
}
|
||||
}
|
||||
.thinline {
|
||||
width: 100%;
|
||||
border-top: 1px solid #f1f2f3;
|
||||
margin-top: 17px;
|
||||
margin-bottom: 17px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.btnbox {
|
||||
width: 301.5px;
|
||||
height: 33px;
|
||||
background-color: #2478ff;
|
||||
border-radius: 6px;
|
||||
box-shadow: 0px 1px 8px 0px rgba(56, 125, 247, 0.7);
|
||||
font-size: 14px;
|
||||
margin: 30px auto 0 auto;
|
||||
text-align: center;
|
||||
line-height: 33px;
|
||||
.submitbtn {
|
||||
border: none;
|
||||
border-radius: 6px;
|
||||
background-color: #2478ff;
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
60
src/views/pathmap/LearnPath.vue
Normal file
60
src/views/pathmap/LearnPath.vue
Normal file
@@ -0,0 +1,60 @@
|
||||
<!--
|
||||
* @Author: lixg lixg@dongwu-inc.com
|
||||
* @Date: 2023-01-16 10:08:44
|
||||
* @LastEditors: lixg lixg@dongwu-inc.com
|
||||
* @LastEditTime: 2023-01-16 13:55:43
|
||||
* @FilePath: /stu_h5/src/views/pathmap/LearnPath.vue
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
-->
|
||||
<template>
|
||||
<div class="learnpath">
|
||||
<div class="main">
|
||||
<div v-for="(el, index) in data" :key="index">
|
||||
<div @click="goDetails(el)">{{ el.name }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed, ref } from "vue";
|
||||
// import nostarted from "../../assets/image/nostarted.png";
|
||||
// import completed from "../../assets/image/completed.png";
|
||||
// import ongoing from "../../assets/image/ongoing.png";
|
||||
import { usePage } from "@/api/request";
|
||||
import { ROUTER_LIST } from "@/api/api";
|
||||
import { useRouter } from "vue-router";
|
||||
import store from "@/store";
|
||||
// import PathDetailImage from "@/components/PathDetailImage.vue";
|
||||
|
||||
const detail = ref();
|
||||
const showmapdetail = ref(false);
|
||||
const currentStageId = ref();
|
||||
const userInfo = computed(() => store.state.userInfo);
|
||||
console.log("userInfo", userInfo);
|
||||
const { data } = usePage(ROUTER_LIST, { pageSize: 60 });
|
||||
console.log("学习路径列表", data, data.value);
|
||||
const router = useRouter();
|
||||
const goDetails = (item) => {
|
||||
// console.log("item", item);
|
||||
router.push({
|
||||
path: "/pathmappage",
|
||||
query: { routerId: item.routerId, routerName: item.routerName },
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.learnpath {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
.main {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
//justify-content: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -9,15 +9,19 @@
|
||||
<span class="close"></span>
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="title">中级产品经理</div>
|
||||
<div class="title">{{ data?.name }}</div>
|
||||
<div class="text2">
|
||||
课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介课程简介简介课程简介
|
||||
{{ data?.remark }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="down">
|
||||
<div class="project_title">项目内容</div>
|
||||
<div class="project_first">
|
||||
<div class="project_title">学习路径内容</div>
|
||||
|
||||
<!-- <div
|
||||
class="project_first"
|
||||
|
||||
>
|
||||
<div class="course1_first">
|
||||
<div class="text8">序:管理者如何持续找到发力点</div>
|
||||
<div class="course1_right">
|
||||
@@ -48,10 +52,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="project_second">
|
||||
<div class="course1_first">
|
||||
<div class="text8">第一讲:业务起航的支点 - 你的风格</div>
|
||||
<div class="text8">{{ data?.currentStageName }}</div>
|
||||
<div class="course1_right">
|
||||
<div class="circular"></div>
|
||||
<div class="text9">进行中</div>
|
||||
@@ -59,22 +63,53 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="secondcontent">
|
||||
<div class="question">
|
||||
<div
|
||||
class="question"
|
||||
v-for="(el, index) in data?.taskBoList"
|
||||
:key="index"
|
||||
>
|
||||
<div>
|
||||
<div class="issue">
|
||||
趣味课前小测 - MBTI测试:你适合做哪个方向?
|
||||
{{ el.name }}
|
||||
</div>
|
||||
<div class="tag1">选修</div>
|
||||
<div class="tag2">测评</div>
|
||||
<div class="coursetag">
|
||||
<div
|
||||
class="tag1"
|
||||
style="margin-right: 11px; margin-top: 16px"
|
||||
v-if="el.flag"
|
||||
>
|
||||
必修
|
||||
</div>
|
||||
<div class="question">
|
||||
<div class="issue">社交产品如何做好模块化处理?</div>
|
||||
<div class="tag3">必修</div>
|
||||
<div class="tag2">作业</div>
|
||||
<div
|
||||
class="tag2"
|
||||
style="margin-right: 11px; margin-top: 16px"
|
||||
v-if="!el.flag"
|
||||
>
|
||||
选修
|
||||
</div>
|
||||
<div
|
||||
class="tag3"
|
||||
style="margin-right: 11px; margin-top: 16px"
|
||||
>
|
||||
{{ types.typeName[el.type] || "" }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="goclass"
|
||||
:style="{
|
||||
background: `${types.path[el.type] ? '#2478ff' : '#999'}`,
|
||||
}"
|
||||
@click="toFinish(el)"
|
||||
>
|
||||
{{
|
||||
el.status === 1
|
||||
? "已完成"
|
||||
: types.path[el.type]
|
||||
? types.toName[el.type]
|
||||
: "未开放"
|
||||
}}
|
||||
</div>
|
||||
<div class="question">
|
||||
<div class="issue">社交产品如何做好模块化处理?</div>
|
||||
<div class="tag3">必修</div>
|
||||
<div class="tag2">讨论</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -83,7 +118,215 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script></script>
|
||||
<script setup>
|
||||
import { computed, reactive, ref, watch } from "vue";
|
||||
// import circle from "../../assets/image/pathdetails/circle.png";
|
||||
// import circle2 from "../../assets/image/pathdetails/circle2.png";
|
||||
import { boeRequest, useRequest, request } from "@/api/request";
|
||||
import { ROUTER_PROCESS, LINK_DETAILS, STUDY_RECORD } from "@/api/api";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import { ElMessage } from "element-plus";
|
||||
import store from "@/store";
|
||||
import { ROUTER } from "@/api/CONST";
|
||||
|
||||
const {
|
||||
query: { routerId, routerName },
|
||||
} = useRoute();
|
||||
const router = useRouter();
|
||||
const returnclick = () => {
|
||||
router.back();
|
||||
};
|
||||
const { data } = useRequest(ROUTER_PROCESS, { routerId });
|
||||
const userInfo = computed(() => store.state.userInfo);
|
||||
console.log("lalalallala", data);
|
||||
const activeName = ref("first");
|
||||
|
||||
const handleClick = (tab, event) => {
|
||||
console.log(tab, event);
|
||||
};
|
||||
const path = { 1: "path" };
|
||||
|
||||
const dialogVisible = ref(false);
|
||||
const dialogVisibleTip = ref("");
|
||||
|
||||
const types = ref({
|
||||
typeName: {
|
||||
1: "在线",
|
||||
2: "面授",
|
||||
3: "案例",
|
||||
4: "作业",
|
||||
5: "考试",
|
||||
6: "直播",
|
||||
7: "外链",
|
||||
8: "讨论",
|
||||
9: "活动",
|
||||
10: "测评",
|
||||
11: "评估",
|
||||
12: "投票",
|
||||
13: "项目",
|
||||
},
|
||||
toName: {
|
||||
1: "去上课",
|
||||
2: "去上课",
|
||||
3: "去阅读",
|
||||
4: "去完成",
|
||||
5: "去完成",
|
||||
6: "去观看",
|
||||
7: "去查看",
|
||||
8: "去讨论",
|
||||
9: "去签到",
|
||||
10: "去完成",
|
||||
11: "去完成",
|
||||
12: "去投票",
|
||||
13: "去完成",
|
||||
},
|
||||
path: {
|
||||
1: import.meta.env.VITE_BOE_ONLINE_CLASS_URL, //在线
|
||||
2: "/faceteach",
|
||||
3: import.meta.env.VITE_BOE_CASS_DETAIL_URL, //案例
|
||||
4: "/homeworkpage",
|
||||
5: import.meta.env.VITE_BOE_EXAM_DETAIL_URL, //考试
|
||||
6: "/liveboradcast",
|
||||
7: "/outerchain", //外联
|
||||
// 7: ({ targetId }) => window.open(targetId, "_top"), //外联
|
||||
8: "/discusspage",
|
||||
9: "/activitiespage",
|
||||
10: ({ evaType, targetId }) =>
|
||||
window.open(
|
||||
evaType == 0
|
||||
? import.meta.env.VITE_BOE_TEST_DETAIL_URL + targetId
|
||||
: import.meta.env.VITE_BOE_TEST_OUT_DETAIL_URL +
|
||||
targetId +
|
||||
`&quizTaskKid=${routerId}&channelCode=learningpath`,
|
||||
"_top"
|
||||
), //测评
|
||||
11: "/investigatpage",
|
||||
12: "/ballotpage",
|
||||
13: "/projectdetails",
|
||||
},
|
||||
});
|
||||
|
||||
function toFinish(d) {
|
||||
console.log(d);
|
||||
console.log(data.value.currentStageId, routerId);
|
||||
if (!types.value.path[d.type]) {
|
||||
ElMessage.error("暂时未开放");
|
||||
return;
|
||||
}
|
||||
if (d.type == 2) {
|
||||
let date1 = new Date(d.endTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 < date2) {
|
||||
dialogVisibleTip.value = "当前面授课已结束";
|
||||
dialogVisible.value = true;
|
||||
|
||||
//return
|
||||
}
|
||||
}
|
||||
if (d.type == 4) {
|
||||
let date1 = new Date(d.endTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 < date2) {
|
||||
dialogVisibleTip.value = "当前作业已结束";
|
||||
dialogVisible.value = true;
|
||||
|
||||
//return
|
||||
}
|
||||
}
|
||||
// 直播结束时间
|
||||
if (d.type == 6) {
|
||||
let date1 = new Date(d.endTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 < date2) {
|
||||
dialogVisibleTip.value = "当前直播已结束";
|
||||
dialogVisible.value = true;
|
||||
//return
|
||||
}
|
||||
}
|
||||
// 考试 停用
|
||||
if (d.type == 5) {
|
||||
if (d.taskStatus == 1 || d.taskStatus == 2) {
|
||||
// ElMessage.error("该任务无法学习,请联系管理员进行替换。")
|
||||
dialogVisibleTip.value = "该任务无法学习,请联系管理员进行替换!";
|
||||
dialogVisible.value = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
// 评估 停用
|
||||
if (d.type == 11) {
|
||||
if (d.taskStatus == 1 || d.taskStatus == 2) {
|
||||
// ElMessage.error("该任务无法学习,请联系管理员进行替换。")
|
||||
dialogVisibleTip.value = "该任务无法学习,请联系管理员进行替换!";
|
||||
dialogVisible.value = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
// 其他活动 结束时间
|
||||
if (d.type == 9) {
|
||||
let date1 = new Date(d.endTime).getTime();
|
||||
let date2 = new Date().getTime();
|
||||
if (date1 < date2) {
|
||||
dialogVisibleTip.value = "当前活动已结束";
|
||||
dialogVisible.value = true;
|
||||
//return
|
||||
}
|
||||
}
|
||||
// 在线课 停用 -- 暂时没有在线课停用标记
|
||||
if (d.type == 1) {
|
||||
if (d.taskStatus == 1 || d.taskStatus == 2) {
|
||||
// ElMessage.error("该任务无法学习,请联系管理员进行替换。")
|
||||
dialogVisibleTip.value = "该任务无法学习,请联系管理员进行替换!";
|
||||
dialogVisible.value = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
// 面授课 停用
|
||||
if (d.type == 2) {
|
||||
if (d.taskStatus == 1 || d.taskStatus == 2) {
|
||||
// ElMessage.error("该任务无法学习,请联系管理员进行替换。")
|
||||
dialogVisibleTip.value = "该任务无法学习,请联系管理员进行替换!";
|
||||
dialogVisible.value = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (d.type === 3) {
|
||||
d.status !== 1 &&
|
||||
request(STUDY_RECORD, {
|
||||
studentId: userInfo.value.id,
|
||||
targetId: data.value.routerId,
|
||||
logo: ROUTER,
|
||||
stageOrChapterId: data.value.currentStageId,
|
||||
taskId: d.routerTaskId,
|
||||
});
|
||||
}
|
||||
console.log("点击跳转");
|
||||
if (typeof types.value.path[d.type] === "string") {
|
||||
types.value.path[d.type] &&
|
||||
types.value.path[d.type].startsWith("http") &&
|
||||
window.open(types.value.path[d.type] + d.targetId, "_top");
|
||||
types.value.path[d.type] &&
|
||||
types.value.path[d.type].startsWith("/") &&
|
||||
router.push({
|
||||
path: types.value.path[d.type],
|
||||
query: {
|
||||
id: d.routerTaskId,
|
||||
type: ROUTER,
|
||||
infoId: routerId,
|
||||
courseId: d.courseId,
|
||||
pName: data.value.name,
|
||||
sName: data.value.currentStageName,
|
||||
chapterOrStageId: data.value.currentStageId,
|
||||
studentId: userInfo.value.id,
|
||||
status: d.status,
|
||||
},
|
||||
});
|
||||
} else if (typeof types.value.path[d.type] === "function") {
|
||||
console.log("ddddddd", d);
|
||||
types.value.path[d.type](d);
|
||||
// console.log("types.value.path[d.type](d)", d);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.pathmap {
|
||||
@@ -436,6 +679,12 @@
|
||||
position: relative;
|
||||
height: 72px;
|
||||
border-bottom: 0.5px solid rgba(241, 242, 243, 1);
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.issue {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
@@ -443,45 +692,64 @@
|
||||
line-height: 30.29px;
|
||||
color: rgba(110, 123, 132, 1);
|
||||
}
|
||||
.tag1 {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 14.5px;
|
||||
.coursetag {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 13px;
|
||||
color: rgba(203, 128, 231, 1);
|
||||
border: 0.5px solid rgba(203, 128, 231, 1);
|
||||
line-height: 19.2px;
|
||||
//padding: 0 10px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.tag2 {
|
||||
position: absolute;
|
||||
left: 92px;
|
||||
bottom: 14.5px;
|
||||
.goclass {
|
||||
width: 63px;
|
||||
height: 23px;
|
||||
background: #2478ff;
|
||||
box-shadow: 0px 1px 8px 0px rgba(56, 125, 247, 0.7);
|
||||
border-radius: 4px;
|
||||
font-size: 14px;
|
||||
font-weight: 800;
|
||||
color: #ffffff;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 13px;
|
||||
color: rgba(136, 157, 238, 1);
|
||||
border: 0.5px solid rgba(136, 157, 238, 1);
|
||||
line-height: 19.2px;
|
||||
//padding: 0 10px;
|
||||
}
|
||||
.tag3 {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 14.5px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 13px;
|
||||
color: rgba(104, 206, 234, 1);
|
||||
border: 0.5px solid rgba(104, 206, 234, 1);
|
||||
line-height: 19.2px;
|
||||
//padding: 0 10px;
|
||||
margin-right: 37px;
|
||||
cursor: pointer;
|
||||
}
|
||||
// .tag1 {
|
||||
// position: absolute;
|
||||
// left: 0;
|
||||
// bottom: 14.5px;
|
||||
// display: flex;
|
||||
// justify-content: center;
|
||||
// align-items: center;
|
||||
// font-size: 13px;
|
||||
// color: rgba(203, 128, 231, 1);
|
||||
// border: 0.5px solid rgba(203, 128, 231, 1);
|
||||
// line-height: 19.2px;
|
||||
// //padding: 0 10px;
|
||||
// }
|
||||
// .tag2 {
|
||||
// position: absolute;
|
||||
// left: 92px;
|
||||
// bottom: 14.5px;
|
||||
// display: flex;
|
||||
// justify-content: center;
|
||||
// align-items: center;
|
||||
// font-size: 13px;
|
||||
// color: rgba(136, 157, 238, 1);
|
||||
// border: 0.5px solid rgba(136, 157, 238, 1);
|
||||
// line-height: 19.2px;
|
||||
// //padding: 0 10px;
|
||||
// }
|
||||
// .tag3 {
|
||||
// position: absolute;
|
||||
// left: 0;
|
||||
// bottom: 14.5px;
|
||||
// display: flex;
|
||||
// justify-content: center;
|
||||
// align-items: center;
|
||||
// font-size: 13px;
|
||||
// color: rgba(104, 206, 234, 1);
|
||||
// border: 0.5px solid rgba(104, 206, 234, 1);
|
||||
// line-height: 19.2px;
|
||||
// //padding: 0 10px;
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user