fix:iframe页面token过期跳转登录

This commit is contained in:
zxj
2025-11-21 10:56:43 +08:00
parent 24ca49ce78
commit cf7e1f5d69
22 changed files with 1368 additions and 1241 deletions

View File

@@ -22,7 +22,7 @@
style="width: 100%; height: 100%" style="width: 100%; height: 100%"
:src="iframeUrl + '/course/manages'" :src="iframeUrl + '/course/manages'"
name="myframe" name="myframe"
sandbox="allow-forms allow-scripts allow-downloads allow-same-origin allow-popups" sandbox="allow-forms allow-scripts allow-downloads allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</a-modal> </a-modal>
</div> </div>

View File

@@ -1,281 +1,289 @@
<!-- 查看系统考试答卷--iframe嵌套 --> <!-- 查看系统考试答卷--iframe嵌套 -->
<template> <template>
<a-drawer <a-drawer
:visible="CAvisible" :visible="CAvisible"
class="drawerStyle CheckAnsware" class="drawerStyle CheckAnsware"
placement="right" placement="right"
width="40%" width="40%"
@after-visible-change="afterVisibleChange" @after-visible-change="afterVisibleChange"
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="headersub"> <div class="headersub">
<div class="headerTitle">查看答卷</div> <div class="headerTitle">查看答卷</div>
<img <img
style="width:29px;height:29px;cursor:pointer" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" src="../../assets/images/basicinfo/close.png"
@click="closeDrawer" @click="closeDrawer"
/> />
</div> </div>
<!-- <div class="headersup"><span>评估名称<span style="color:#999ba3">管理者进阶作业</span></span><span style="margin-left:25px">考试总分<span style="color:#999ba3">100</span></span><span style="margin-left:25px">及格分<span style="color:#999ba3">60</span></span></div> --> <!-- <div class="headersup"><span>评估名称<span style="color:#999ba3">管理者进阶作业</span></span><span style="margin-left:25px">考试总分<span style="color:#999ba3">100</span></span><span style="margin-left:25px">及格分<span style="color:#999ba3">60</span></span></div> -->
<div class="main" style="height:860px;display: flex;"> <div class="main" style="height: 860px; display: flex">
<iframe <iframe
id="iframe" id="iframe"
style="width: 100%; height: 100%;" style="width: 100%; height: 100%"
:src="iframeUrl+'/exam/viewanswer?id='+(answerId?answerId:datasource.answerId)" :src="
frameborder="0" iframeUrl +
name="myframe" '/exam/viewanswer?id=' +
security="restricted" (answerId ? answerId : datasource.answerId)
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" "
> frameborder="0"
</iframe> name="myframe"
</div> security="restricted"
<!-- <div class="btnn"> sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
>
</iframe>
</div>
<!-- <div class="btnn">
<button class="btn1">取消</button> <button class="btn1">取消</button>
<button class="btn2">确定</button> <button class="btn2">确定</button>
</div> --> </div> -->
</div> </div>
</a-drawer> </a-drawer>
</template> </template>
<script> <script>
import { toRefs,reactive } from '@vue/reactivity'; import { toRefs, reactive } from "@vue/reactivity";
import { message } from 'ant-design-vue'; import { message } from "ant-design-vue";
import { iframeUrl } from "../../api/method"; import { iframeUrl } from "../../api/method";
import {queryUserAnswerDetail} from '@/api/indexExam'; import { queryUserAnswerDetail } from "@/api/indexExam";
export default { export default {
name:"CheckAnsware", name: "CheckAnsware",
props:{ props: {
CAvisible:{ CAvisible: {
type:Boolean, type: Boolean,
default:false, default: false,
},
datasource:{
type: Object,
default: function () {
return {};
},
},
answerId:{
type: String,
default: "",
}
}, },
setup(props,ctx){ datasource: {
const state = reactive({ type: Object,
score:null, //传过来赋给score default: function () {
queData:[ return {};
{ },
quetype:"判断", },
quename:"当前项目对您是否有帮助?", answerId: {
value:1, type: String,
answer:[ default: "",
{ },
value:1, },
answercontent:"错误", setup(props, ctx) {
analysis:"暂无解析", const state = reactive({
}, score: null, //传过来赋给score
] queData: [
}, {
{ quetype: "判断",
quetype:"多选", quename: "当前项目对您是否有帮助?",
quename:"哪些项目跨年快乐memememememeemme?", value: 1,
value:2, answer: [
answer:[ {
{ value: 1,
value:1, answercontent: "错误",
answercontent:"A、有帮助" analysis: "暂无解析",
}, },
{ ],
value:2, },
answercontent:"B、mei帮助" {
}, quetype: "多选",
{ quename: "哪些项目跨年快乐memememememeemme?",
value:3, value: 2,
answercontent:"C、mei5155帮助" answer: [
}, {
{ value: 1,
value:4, answercontent: "A、有帮助",
answercontent:"D、12345mei帮助" },
} {
], value: 2,
answercontent:"错误", answercontent: "B、mei帮助",
analysis:"暂无解析", },
}, {
{ value: 3,
quetype:"多选", answercontent: "C、mei5155帮助",
quename:"哪些项目跨年快乐memememememeemme?", },
value:3, {
answer:[ value: 4,
{ answercontent: "D、12345mei帮助",
value:1, },
answercontent:"A、有帮助" ],
}, answercontent: "错误",
{ analysis: "暂无解析",
value:2, },
answercontent:"B、mei帮助" {
}, quetype: "多选",
{ quename: "哪些项目跨年快乐memememememeemme?",
value:3, value: 3,
answercontent:"C、mei5155帮助" answer: [
}, {
{ value: 1,
value:4, answercontent: "A、有帮助",
answercontent:"D、12345mei帮助" },
} {
] value: 2,
}, answercontent: "B、mei帮助",
{ },
quetype:"判断", {
quename:"当前项目对您是否有帮助?", value: 3,
value:4, answercontent: "C、mei5155帮助",
answer:[ },
{ {
value:1, value: 4,
answercontent:"错误", answercontent: "D、12345mei帮助",
analysis:"暂无解析", },
}, ],
] },
}, {
], quetype: "判断",
iframeUrl: iframeUrl, quename: "当前项目对您是否有帮助?",
}) value: 4,
answer: [
{
value: 1,
answercontent: "错误",
analysis: "暂无解析",
},
],
},
],
iframeUrl: iframeUrl,
});
const closeDrawer = ()=> { const closeDrawer = () => {
ctx.emit("update:CAvisible",false) ctx.emit("update:CAvisible", false);
} };
const afterVisibleChange = (bool) => { const afterVisibleChange = (bool) => {
console.log(bool); console.log(bool);
if(bool == true) { if (bool == true) {
console.log(props.datasource) console.log(props.datasource);
console.log(props.answerId?props.answerId:props.datasource.answerId) console.log(
} props.answerId ? props.answerId : props.datasource.answerId
} );
const getQue = () => { }
queryUserAnswerDetail(1).then(res => { };
console.log(res) const getQue = () => {
}).catch(err =>{ queryUserAnswerDetail(1)
message.error('用户答卷信息获取失败'+err) .then((res) => {
}) console.log(res);
} })
return{ .catch((err) => {
...toRefs(state), message.error("用户答卷信息获取失败" + err);
closeDrawer, });
afterVisibleChange, };
getQue return {
} ...toRefs(state),
} closeDrawer,
afterVisibleChange,
getQue,
};
},
}; };
</script> </script>
<style lang="scss"> <style lang="scss">
.CheckAnsware { .CheckAnsware {
z-index: 99999; z-index: 99999;
.drawerMain { .drawerMain {
min-width: 400px; min-width: 400px;
margin: 0px 32px 0px 32px; margin: 0px 32px 0px 32px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.headersub { .headersub {
height: 73px; height: 73px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.headerTitle { .headerTitle {
font-size: 18px; font-size: 18px;
font-weight: 600; font-weight: 600;
color: #333333; color: #333333;
line-height: 25px; line-height: 25px;
} }
}
.headersup{
border-bottom: 1px solid #e8e8e8;
padding-bottom: 20px;
}
.main {
width: 100%;
overflow-y: auto;
margin-bottom: 70px;
.basetext{
color: #333333;
line-height: 25px;
margin-top: 27px ;
margin-bottom: 27px ;
}
.basequestion{
.ques{
.quename{
margin: 10px auto ;
font-weight: bold;
}
.queanswer{
padding-left: 25px;
.queabox{
margin-bottom: 10px;
.single{
padding: 5px;
.queaboxs{
display: flex;
flex-direction: column;
}
.analysisbox{
border: 1px solid #e8e8e8;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
border-radius: 8px;
margin-left: -10px;
padding: 5px 10px;
}
}
.multiple{
padding: 5px;
.queaboxs{
display: flex;
flex-direction: column;
}
.analysisbox{
border: 1px solid #e8e8e8;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
border-radius: 8px;
margin-left: -10px;
padding: 5px 10px;
}
}
}
}
}
}
}
.btnn {
height: 72px;
width: 100%;
position: absolute;
bottom: 0;
left: 0;
background-color: #fff;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
} }
.headersup {
border-bottom: 1px solid #e8e8e8;
padding-bottom: 20px;
}
.main {
width: 100%;
overflow-y: auto;
margin-bottom: 70px;
.basetext {
color: #333333;
line-height: 25px;
margin-top: 27px;
margin-bottom: 27px;
}
.basequestion {
.ques {
.quename {
margin: 10px auto;
font-weight: bold;
}
.queanswer {
padding-left: 25px;
.queabox {
margin-bottom: 10px;
.single {
padding: 5px;
.queaboxs {
display: flex;
flex-direction: column;
}
.analysisbox {
border: 1px solid #e8e8e8;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
border-radius: 8px;
margin-left: -10px;
padding: 5px 10px;
}
}
.multiple {
padding: 5px;
.queaboxs {
display: flex;
flex-direction: column;
}
.analysisbox {
border: 1px solid #e8e8e8;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
border-radius: 8px;
margin-left: -10px;
padding: 5px 10px;
}
}
}
}
}
}
}
.btnn {
height: 72px;
width: 100%;
position: absolute;
bottom: 0;
left: 0;
background-color: #fff;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
}
} }
</style> </style>

View File

@@ -17,13 +17,13 @@
:src="`${iframeUrl}/course/manages?f=choose&refId=${props.id}&refType=${props.type}&courseIds=${couresIdArray}&projectId=${props.projectId}`" :src="`${iframeUrl}/course/manages?f=choose&refId=${props.id}&refType=${props.type}&courseIds=${couresIdArray}&projectId=${props.projectId}`"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</a-modal> </a-modal>
</template> </template>
<script setup> <script setup>
import {defineProps, ref} from "vue"; import { defineProps, ref } from "vue";
import {iframeUrl} from "@/api/method"; import { iframeUrl } from "@/api/method";
const visible = ref(false); const visible = ref(false);
const couresIdArray = ref(); const couresIdArray = ref();
@@ -31,17 +31,17 @@ const props = defineProps({
type: Number, type: Number,
id: Number, id: Number,
courseIds: Array, courseIds: Array,
projectId: String projectId: String,
}); });
// 把任务列表里类型为在线课的课程ID放到数组里 // 把任务列表里类型为在线课的课程ID放到数组里
if(props.courseIds && props.courseIds.length){ if (props.courseIds && props.courseIds.length) {
var arr = [] var arr = [];
for(var i = 0;i<props.courseIds.length;i++){ for (var i = 0; i < props.courseIds.length; i++) {
if(props.courseIds[i].type === 1){ if (props.courseIds[i].type === 1) {
arr.push(props.courseIds[i].courseId) arr.push(props.courseIds[i].courseId);
} }
} }
couresIdArray.value = arr couresIdArray.value = arr;
} }
function openModal() { function openModal() {
visible.value = true; visible.value = true;
@@ -52,11 +52,8 @@ function closeModal() {
} }
defineExpose({ closeModal }); defineExpose({ closeModal });
</script> </script>
<style lang="scss"> <style lang="scss">
.ant-table-striped :deep(.table-striped) td { .ant-table-striped :deep(.table-striped) td {
background-color: #fafafa !important; background-color: #fafafa !important;
} }
@@ -238,8 +235,8 @@ defineExpose({ closeModal });
} }
.ant-table-tbody .ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td { > td {
background: #f6f9fd; background: #f6f9fd;
} }
@@ -319,8 +316,8 @@ defineExpose({ closeModal });
justify-content: center; justify-content: center;
background: linear-gradient( background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%, rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100% rgba(78, 166, 255, 0) 100%
); );
.inhe { .inhe {

View File

@@ -3,18 +3,18 @@
<slot></slot> <slot></slot>
</div> </div>
<a-drawer <a-drawer
:visible="visible" :visible="visible"
class="drawerStyle TimeManage" class="drawerStyle TimeManage"
placement="right" placement="right"
width="1000" width="1000"
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div class="headerTitle">选择试卷</div> <div class="headerTitle">选择试卷</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" src="../../assets/images/basicinfo/close.png"
@click="closeDrawer" @click="closeDrawer"
/> />
</div> </div>
<div class="main"> <div class="main">
@@ -23,18 +23,14 @@
<div class="namecon" style="margin-right: 30px"> <div class="namecon" style="margin-right: 30px">
<div class="name">试卷名称</div> <div class="name">试卷名称</div>
<a-input <a-input
v-model:value="params.keyWord" v-model:value="params.keyWord"
style="width: 270px; height: 40px; border-radius: 8px" style="width: 270px; height: 40px; border-radius: 8px"
placeholder="请输入试卷名称" placeholder="请输入试卷名称"
/> />
</div> </div>
</div> </div>
<div class="btns"> <div class="btns">
<div <div class="btn btn1" style="margin-right: 20px" @click="search">
class="btn btn1"
style="margin-right: 20px"
@click="search"
>
<div class="img1"></div> <div class="img1"></div>
<div class="wz">搜索</div> <div class="wz">搜索</div>
</div> </div>
@@ -51,15 +47,17 @@
</div> </div>
<div class="tab" style="margin-top: 20px; margin-bottom: 100px"> <div class="tab" style="margin-top: 20px; margin-bottom: 100px">
<a-table <a-table
:customRow="customRow" :customRow="customRow"
class="ant-table-striped" class="ant-table-striped"
:row-class-name="(_, index) => (index % 2 === 1 ? 'table-striped' : null)" :row-class-name="
row-key="id" (_, index) => (index % 2 === 1 ? 'table-striped' : null)
:columns="columns" "
:data-source="data" row-key="id"
:loading="loading" :columns="columns"
:pagination="pagination" :data-source="data"
:row-selection="rowSelection" :loading="loading"
:pagination="pagination"
:row-selection="rowSelection"
/> />
</div> </div>
</div> </div>
@@ -72,36 +70,36 @@
<!-- 新建考试 --> <!-- 新建考试 -->
<a-modal <a-modal
v-model:visible="createVisible" v-model:visible="createVisible"
:footer="null" :footer="null"
:closable="false" :closable="false"
wrapClassName="modalStyle addExamModal" wrapClassName="modalStyle addExamModal"
:zIndex="9999" :zIndex="9999"
> >
<iframe <iframe
id="iframe" id="iframe"
style="width: 100%; height: 100%" style="width: 100%; height: 100%"
:src="iframeUrl + '/exam/papers?addnew=true'" :src="iframeUrl + '/exam/papers?addnew=true'"
name="myframe" name="myframe"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</a-modal> </a-modal>
</template> </template>
<script setup> <script setup>
import {computed, defineEmits, defineProps, ref} from "vue"; import { computed, defineEmits, defineProps, ref } from "vue";
import {iframeUrl} from "@/api/method"; import { iframeUrl } from "@/api/method";
import {useBoeApiPage} from "@/api/request"; import { useBoeApiPage } from "@/api/request";
import {EXAM_PAPER_PAGE} from "@/api/ThirdApi"; import { EXAM_PAPER_PAGE } from "@/api/ThirdApi";
import {message} from "ant-design-vue"; import { message } from "ant-design-vue";
defineProps({ defineProps({
id: String, id: String,
name: String name: String,
}) });
const visible = ref(false) const visible = ref(false);
const createVisible = ref(false) const createVisible = ref(false);
const emit = defineEmits({}) const emit = defineEmits({});
const columns = ref([ const columns = ref([
{ {
@@ -131,31 +129,35 @@ const columns = ref([
className: "h", className: "h",
ellipsis: true, ellipsis: true,
}, },
]) ]);
const initParams = { const initParams = {
keyWord: '', keyWord: "",
pageIndex: 1, pageIndex: 1,
pageSize: 10, pageSize: 10,
orderAsc: true orderAsc: true,
} };
const params = ref(initParams) const params = ref(initParams);
const rowSelectKeys = ref([]); const rowSelectKeys = ref([]);
const selectsData = ref([]); const selectsData = ref([]);
const {data, loading, total, fetch} = useBoeApiPage(EXAM_PAPER_PAGE, params.value, { const { data, loading, total, fetch } = useBoeApiPage(
init: false, EXAM_PAPER_PAGE,
result: res => res.result.list, params.value,
totalPage: res => res.result.totalPages, {
total: res => res.result.count init: false,
}) result: (res) => res.result.list,
totalPage: (res) => res.result.totalPages,
total: (res) => res.result.count,
}
);
const customRow = (record) => ({ const customRow = (record) => ({
onClick: () => { onClick: () => {
rowSelectKeys.value = [record.id] rowSelectKeys.value = [record.id];
selectsData.value = [record] selectsData.value = [record];
} },
}) });
const pagination = computed(() => ({ const pagination = computed(() => ({
total: total.value, total: total.value,
@@ -167,20 +169,20 @@ const pagination = computed(() => ({
const changePagination = (e) => { const changePagination = (e) => {
params.value.pageIndex = e; params.value.pageIndex = e;
fetch() fetch();
}; };
const rowSelection = computed(() => ({ const rowSelection = computed(() => ({
type: 'radio', type: "radio",
columnWidth: 20, columnWidth: 20,
selectedRowKeys: rowSelectKeys.value, selectedRowKeys: rowSelectKeys.value,
onChange: onSelectChange, onChange: onSelectChange,
preserveSelectedRowKeys: true, preserveSelectedRowKeys: true,
getCheckboxProps: getCheckboxProps getCheckboxProps: getCheckboxProps,
})); }));
const getCheckboxProps = () => ({ const getCheckboxProps = () => ({
// 某几项默认禁止选中(R: 当state等于1时) // 某几项默认禁止选中(R: 当state等于1时)
disabled: false disabled: false,
}) });
function onSelectChange(e, l) { function onSelectChange(e, l) {
rowSelectKeys.value = e; rowSelectKeys.value = e;
@@ -188,42 +190,42 @@ function onSelectChange(e, l) {
} }
function search() { function search() {
params.value.pageIndex = 1 params.value.pageIndex = 1;
fetch() fetch();
} }
function reset() { function reset() {
rowSelectKeys.value = []; rowSelectKeys.value = [];
selectsData.value = []; selectsData.value = [];
params.value.pageIndex = 1 params.value.pageIndex = 1;
params.value.keyWord = '' params.value.keyWord = "";
fetch() fetch();
} }
const closeDrawer = () => { const closeDrawer = () => {
visible.value = false visible.value = false;
reset() reset();
}; };
function confirm() { function confirm() {
if (!selectsData.value.length || !rowSelectKeys.value.length) { if (!selectsData.value.length || !rowSelectKeys.value.length) {
message.warning("请选择试卷"); message.warning("请选择试卷");
return return;
} }
emit('update:id', selectsData.value[0].id) emit("update:id", selectsData.value[0].id);
emit('update:name', selectsData.value[0].testName) emit("update:name", selectsData.value[0].testName);
closeDrawer() closeDrawer();
} }
function openDrawer() { function openDrawer() {
visible.value = true visible.value = true;
} }
function createPage() { function createPage() {
createVisible.value = true createVisible.value = true;
} }
defineExpose({openDrawer}) defineExpose({ openDrawer });
</script> </script>
<style lang="scss"> <style lang="scss">
@@ -264,7 +266,6 @@ defineExpose({openDrawer})
flex-wrap: wrap; flex-wrap: wrap;
margin-top: 20px; margin-top: 20px;
.sealeft { .sealeft {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@@ -353,8 +354,8 @@ defineExpose({openDrawer})
} }
.ant-table-tbody .ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td { > td {
background: #f6f9fd; background: #f6f9fd;
} }

View File

@@ -331,13 +331,13 @@
style="width: 100%; height: 100%; border: none" style="width: 100%; height: 100%; border: none"
:src="iframeUrl + '/exam/papers?addnew=true'" :src="iframeUrl + '/exam/papers?addnew=true'"
name="myframe" name="myframe"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</div> </div>
</template> </template>
<script setup> <script setup>
import { defineEmits, defineProps, ref, watch, computed,onMounted } from "vue"; import { defineEmits, defineProps, ref, watch, computed, onMounted } from "vue";
import GrowthSelectTest from "./GrowthSelectTest.vue"; import GrowthSelectTest from "./GrowthSelectTest.vue";
import { Form, message } from "ant-design-vue"; import { Form, message } from "ant-design-vue";
import { useResetRef } from "@/utils/useCommon"; import { useResetRef } from "@/utils/useCommon";
@@ -490,7 +490,7 @@ async function confirm() {
message.warning("请输入数据来源"); message.warning("请输入数据来源");
return; return;
} }
console.log(formData.value) console.log(formData.value);
await validate().catch(({ errorFields }) => { await validate().catch(({ errorFields }) => {
message.warning(errorFields[0].errors.join()); message.warning(errorFields[0].errors.join());
throw Error("数据校验不通过"); throw Error("数据校验不通过");

View File

@@ -377,7 +377,7 @@
style="width: 100%; height: 100%; border: none" style="width: 100%; height: 100%; border: none"
:src="iframeUrl + '/exam/papers?addnew=true'" :src="iframeUrl + '/exam/papers?addnew=true'"
name="myframe" name="myframe"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</div> </div>

View File

@@ -29,7 +29,7 @@
}&refType=${14}&courseIds=&projectId=${props.growId}`" }&refType=${14}&courseIds=&projectId=${props.growId}`"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</a-spin> </a-spin>

View File

@@ -17,7 +17,7 @@
frameborder="0" frameborder="0"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>

View File

@@ -17,7 +17,7 @@
frameborder="0" frameborder="0"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-scripts allow-same-origin allow-popups allow-downloads" sandbox="allow-forms allow-scripts allow-same-origin allow-popups allow-downloads allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>

View File

@@ -17,7 +17,7 @@
frameborder="0" frameborder="0"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>

View File

@@ -11,28 +11,27 @@
<template> <template>
<div class="courseManage"> <div class="courseManage">
<iframe <iframe
id="iframe" id="iframe"
style="width: 100%; height: 100%" style="width: 100%; height: 100%"
:src="iframeUrl + '/course/manages?page=manage'" :src="iframeUrl + '/course/manages?page=manage'"
frameborder="0" frameborder="0"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
<OnlineClassModelStudent ref="stuRef" :type="13"></OnlineClassModelStudent> <OnlineClassModelStudent ref="stuRef" :type="13"></OnlineClassModelStudent>
</div> </div>
</template> </template>
<script setup> <script setup>
import {onMounted, ref} from "vue"; import { onMounted, ref } from "vue";
import {iframeUrl} from "@/api/method"; import { iframeUrl } from "@/api/method";
import OnlineClassModelStudent from "@/components/student/OnlineClassModelStudent"; import OnlineClassModelStudent from "@/components/student/OnlineClassModelStudent";
const stuRef = ref() const stuRef = ref();
onMounted(() => { onMounted(() => {
window.openSelectStu = stuRef.value.openDrawer window.openSelectStu = stuRef.value.openDrawer;
}) });
</script> </script>
<style lang="scss"> <style lang="scss">
.courseManage { .courseManage {

View File

@@ -17,7 +17,7 @@
frameborder="0" frameborder="0"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>

View File

@@ -17,7 +17,7 @@
frameborder="0" frameborder="0"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>

View File

@@ -17,7 +17,7 @@
frameborder="0" frameborder="0"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>

File diff suppressed because it is too large Load Diff

View File

@@ -7,13 +7,12 @@
frameborder="0" frameborder="0"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>
<script setup> <script setup>
import {iframeUrl} from "@/api/method"; import { iframeUrl } from "@/api/method";
</script> </script>
<style lang="scss"> <style lang="scss">
.courseManage { .courseManage {

View File

@@ -7,13 +7,12 @@
frameborder="0" frameborder="0"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>
<script setup> <script setup>
import {iframeUrl} from "@/api/method"; import { iframeUrl } from "@/api/method";
</script> </script>
<style lang="scss"> <style lang="scss">
.courseManage { .courseManage {

View File

@@ -17,7 +17,7 @@
frameborder="0" frameborder="0"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>

View File

@@ -1,19 +1,17 @@
<template> <template>
<div class="courseManage"> <div class="courseManage">
<iframe <iframe
id="iframe" id="iframe"
style="width: 100%; height: 100%" style="width: 100%; height: 100%"
:src="`${BOE_URL}/pc/iframe/ugroup/manages`" :src="`${BOE_URL}/pc/iframe/ugroup/manages`"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>
<script setup> <script setup>
const BOE_URL = window.location.protocol + process.env.VUE_APP_BOE_API_URL;
const BOE_URL = window.location.protocol + process.env.VUE_APP_BOE_API_URL
</script> </script>
<style lang="scss"> <style lang="scss">
.courseManage { .courseManage {

View File

@@ -1,19 +1,17 @@
<template> <template>
<div class="courseManage"> <div class="courseManage">
<iframe <iframe
id="iframe" id="iframe"
style="width: 100%; height: 100%" style="width: 100%; height: 100%"
:src="`${BOE_URL}/platform/sys/dwdictionary`" :src="`${BOE_URL}/platform/sys/dwdictionary`"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>
<script setup> <script setup>
const BOE_URL = window.location.protocol + process.env.VUE_APP_BOE_API_URL;
const BOE_URL = window.location.protocol + process.env.VUE_APP_BOE_API_URL
</script> </script>
<style lang="scss"> <style lang="scss">
.courseManage { .courseManage {

View File

@@ -1,19 +1,17 @@
<template> <template>
<div class="courseManage"> <div class="courseManage">
<iframe <iframe
id="iframe" id="iframe"
style="width: 100%; height: 100%" style="width: 100%; height: 100%"
:src="`${BOE_URL}/resource/index.html`" :src="`${BOE_URL}/resource/index.html`"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>
<script setup> <script setup>
const BOE_URL = window.location.protocol + process.env.VUE_APP_BOE_API_URL;
const BOE_URL = window.location.protocol + process.env.VUE_APP_BOE_API_URL
</script> </script>
<style lang="scss"> <style lang="scss">
.courseManage { .courseManage {

View File

@@ -1,19 +1,17 @@
<template> <template>
<div class="courseManage"> <div class="courseManage">
<iframe <iframe
id="iframe" id="iframe"
style="width: 100%; height: 100%" style="width: 100%; height: 100%"
:src="`${BOE_URL}/train/manager/index.html`" :src="`${BOE_URL}/train/manager/index.html`"
name="myframe" name="myframe"
security="restricted" security="restricted"
sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups" sandbox="allow-forms allow-downloads allow-scripts allow-same-origin allow-popups allow-top-navigation"
></iframe> ></iframe>
</div> </div>
</template> </template>
<script setup> <script setup>
const BOE_URL = window.location.protocol + process.env.VUE_APP_BOE_API_URL;
const BOE_URL = window.location.protocol + process.env.VUE_APP_BOE_API_URL
</script> </script>
<style lang="scss"> <style lang="scss">
.courseManage { .courseManage {