|
|
@@ -246,6 +246,10 @@
|
|
|
<div class="c_t15_c_i_top">
|
|
|
<span>{{ item.name.charAt(0) }}</span>
|
|
|
<div>{{ item.name }}</div>
|
|
|
+ <div class="cast_sreen_btn" @click.stop="castScreen(item)" v-if="props.isCreator && props.roleType == 1 && isFollowModeActive && canValue">
|
|
|
+ <IconCastScreen />
|
|
|
+ {{ lang.ssCastScreen }}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="c_t15_c_i_bottom">
|
|
|
<span v-html="item.content.answer"></span>
|
|
|
@@ -301,9 +305,13 @@
|
|
|
|
|
|
<div class="c_t15_workDetail" v-if="lookWorkData" @click.stop="clickContent(false)">
|
|
|
<div class="c_t15_wd_top">
|
|
|
- <img src="../../../assets/img/arrow_left.png" @click.stop="lookWork('')" />
|
|
|
- <span>S</span>
|
|
|
+ <img src="../../../assets/img/arrow_left.png" @click.stop="lookWork('')" v-if="!isCastScreen"/>
|
|
|
+ <span>{{ lookWorkData.name.charAt(0) }}</span>
|
|
|
<div>{{ lookWorkData.name }}</div>
|
|
|
+ <div class="cast_sreen_btn" @click.stop="exitCastScreen" v-if="(props.isCreator && props.roleType == 1 && isCastScreen) || (!isFollowModeActive && isCastScreen)">
|
|
|
+ <IconCastScreen />
|
|
|
+ {{ lang.ssExitCastScreen }}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="c_t15_wd_content">
|
|
|
<span v-html="lookWorkData.content.answer"></span>
|
|
|
@@ -366,7 +374,7 @@
|
|
|
<div class="c_t79_workDetail" v-if="lookWorkData" @click.stop="clickContent(false)">
|
|
|
<div class="c_t79_wd_top">
|
|
|
<img src="../../../assets/img/arrow_left.png" @click.stop="lookWork('')" />
|
|
|
- <span>S</span>
|
|
|
+ <span>{{ lookWorkData.name.charAt(0) }}</span>
|
|
|
<div>{{ lookWorkData.name }}</div>
|
|
|
</div>
|
|
|
<div class="c_t79_wd_content">
|
|
|
@@ -473,7 +481,7 @@
|
|
|
<div class="c_t72_workDetail" v-if="lookWorkData" @click.stop="clickContent(false)">
|
|
|
<div class="c_t72_wd_top">
|
|
|
<img src="../../../assets/img/arrow_left.png" @click.stop="lookWork('')" />
|
|
|
- <span>S</span>
|
|
|
+ <span>{{ lookWorkData.name.charAt(0) }}</span>
|
|
|
<div>{{ lookWorkData.name }}</div>
|
|
|
</div>
|
|
|
<div class="c_t72_wd_content">
|
|
|
@@ -565,7 +573,7 @@
|
|
|
<div class="c_t73_workDetail" v-if="lookWorkData" @click.stop="clickContent(false)">
|
|
|
<div class="c_t73_wd_top">
|
|
|
<img src="../../../assets/img/arrow_left.png" @click.stop="lookWork('')" />
|
|
|
- <span>S</span>
|
|
|
+ <span>{{ lookWorkData.name.charAt(0) }}</span>
|
|
|
<div>{{ lookWorkData.name }}</div>
|
|
|
</div>
|
|
|
<div class="c_t73_wd_content">
|
|
|
@@ -610,6 +618,8 @@ const props = defineProps<{
|
|
|
roleType: number;
|
|
|
resultArray: { [key: string]: any };
|
|
|
isCreator: boolean;
|
|
|
+ isFollowModeActive: boolean;
|
|
|
+ courseid: string;
|
|
|
}>()
|
|
|
|
|
|
const emit = defineEmits<{
|
|
|
@@ -617,6 +627,7 @@ const emit = defineEmits<{
|
|
|
(e: 'changeWorkIndex', v: number): void;
|
|
|
(e: 'setIsResultArray', v: boolean, key: string): void;
|
|
|
(e: 'successLike'): void;
|
|
|
+ (e: 'sendMessage', v: any): void;
|
|
|
}>()
|
|
|
|
|
|
const visible = computed({
|
|
|
@@ -674,6 +685,7 @@ const handleAnonymousChange = (value: boolean) => {
|
|
|
|
|
|
|
|
|
import _ from 'lodash'
|
|
|
+import type { workerData } from 'worker_threads'
|
|
|
|
|
|
const handleLikeClick = _.debounce((item: any) => {
|
|
|
likeWork({
|
|
|
@@ -856,8 +868,40 @@ const lookWorkIndex = ref<number>(0)
|
|
|
const lookWork = (id: string) => {
|
|
|
lookWorkIndex.value = 0
|
|
|
lookWorkDetail.value = id
|
|
|
+ if (isCastScreen.value && !id) {
|
|
|
+ emit('sendMessage', {
|
|
|
+ type: 'exit_cast_screen',
|
|
|
+ courseid: props.courseid,
|
|
|
+ })
|
|
|
+ isCastScreen.value = false
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+const isCastScreen = ref<boolean>(false)
|
|
|
+// 投屏
|
|
|
+const castScreen = (item: any) => {
|
|
|
+ lookWorkIndex.value = 0
|
|
|
+ lookWorkDetail.value = item.id
|
|
|
+ isCastScreen.value = true
|
|
|
+ emit('sendMessage', {
|
|
|
+ type: 'cast_screen',
|
|
|
+ courseid: props.courseid,
|
|
|
+ workerData: item
|
|
|
+ })
|
|
|
+ console.log(item)
|
|
|
+}
|
|
|
+
|
|
|
+// 退出投屏
|
|
|
+const exitCastScreen = () => {
|
|
|
+ if (props.roleType != 1) {
|
|
|
+ isCastScreen.value = false
|
|
|
+ }
|
|
|
+ lookWork('')
|
|
|
+}
|
|
|
+
|
|
|
+// 暴露给父级(Student/index.vue)用 ref 调用
|
|
|
+defineExpose({ castScreen, exitCastScreen })
|
|
|
+
|
|
|
// 切换查看作业图片
|
|
|
const changelookWorkIndex = (type: number) => {
|
|
|
if (type === 0 && lookWorkIndex.value > 0) {
|
|
|
@@ -2203,6 +2247,9 @@ const saveAnalysis = () => {
|
|
|
// 点击边框
|
|
|
const clickContent = (flag: boolean) => {
|
|
|
if (flag && lookWorkDetail.value && workDetail.value?.type !== '45' && workDetail.value?.type !== '78') {
|
|
|
+ if (props.roleType != 1 && isCastScreen.value) {
|
|
|
+ return
|
|
|
+ }
|
|
|
lookWork('')
|
|
|
}
|
|
|
}
|
|
|
@@ -2452,6 +2499,7 @@ onUnmounted(() => {
|
|
|
background: rgba(255, 255, 255, 0.6);
|
|
|
transition: 0.3s;
|
|
|
cursor: pointer;
|
|
|
+ overflow: hidden;
|
|
|
|
|
|
&:hover {
|
|
|
box-shadow: 4px 4px 14px 0px rgba(252, 207, 0, 0.5);
|
|
|
@@ -2462,10 +2510,11 @@ onUnmounted(() => {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 10px;
|
|
|
+ width: 100%;
|
|
|
+ overflow: hidden;
|
|
|
|
|
|
&>span {
|
|
|
- display: block;
|
|
|
- width: 25px;
|
|
|
+ min-width: 25px;
|
|
|
height: 25px;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
@@ -2480,6 +2529,9 @@ onUnmounted(() => {
|
|
|
&>div {
|
|
|
color: rgba(0, 0, 0, 0.7);
|
|
|
font-weight: 800;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ white-space: nowrap;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -3285,4 +3337,20 @@ onUnmounted(() => {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+.cast_sreen_btn{
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 5px;
|
|
|
+ font-weight: 300;
|
|
|
+ font-size: 14px;
|
|
|
+ color: rgba(0, 0, 0, 0.7);
|
|
|
+ cursor: pointer;
|
|
|
+ margin-left: auto;
|
|
|
+ border-radius: 5px;
|
|
|
+ border: solid 1px rgba(252, 207, 0, .7);
|
|
|
+ padding: .5rem 0.6rem;
|
|
|
+ min-width: 65px;
|
|
|
+ justify-content: center;
|
|
|
+}
|
|
|
</style>
|