修改bug

This commit is contained in:
yangjun 2024-09-29 16:25:12 +08:00
parent 92ff34bfa0
commit 98f73c6977
16 changed files with 398 additions and 235 deletions

Binary file not shown.

View File

@ -0,0 +1,75 @@
高校思政课教学指导组听课评价表
任课教师: 听课专家: 听课日期:
班级规模: 50 人以下 □ 51 -- 100 人 □ 101 -- 150 人 □
151 -- 200 人 □ 201 人以上 □
到 课 率: 90%以上 □
80% -- 89% □
70% -- 79% □
60% -- 69% □
59%以下 □
授课对象: 文科□ 理科□ 工科□ 农科□ 医科□ 多科混合□
评估指标
评估内容
得分
教学态度
10%
仪表整洁、举止得体、精神饱满3%
遵守教学纪律严格课堂管理2%
备课充分精心设计教学有课件、教案等教学素材教学投入5%
教学内容
35%
坚持马克思主义立场观点方法,具有较为扎实的马克思主义理论功底, 教学目标明确10%
有效使用统编教材配套课件、参考讲义、辅导用书,教学内容科学完整, 基本理论阐释清楚基本事实讲述准确重点、难点比较突出10%
理论联系实际,熟悉党史、新中国史、改革开放史、社会主义发展史、 中华民族发展史,注重史论结合,教学素材多样,案例鲜活生动,及时 将新时代中国特色社会主义的生动实践转化为课堂教学资源10%
贴近学生实际,善于发掘身边人身边事蕴含的育人元素,有效回应学生 关心问题和思想困惑5%
教学方法
25%
熟悉教学法基本原理,注重教学逻辑与学术逻辑的辩证统一,教学设计 符合学生认知规律、关注学生差异性9%
熟练运用启发式、案例式等教学法,注重课堂互动,不照本宣科,善于 调动学生积极性启发学生思考8%
综合运用现代信息技术手段,增强课堂教学的生动性、吸引力,帮助学 生理解领会教学内容8%
教学效果
(30%)
注重思想性和理论性,具有亲和力和感染力,能够把道理讲深、讲透、 讲活学生学习积极性高愿意与教师交流反馈12%
注重价值引领,增进对党的创新理论的政治认同、思想认同、理论认同、 情感认同,坚定" 四个自信 "12%
完成教学计划课堂秩序良好6%
课堂诊断
总体评价
优秀 (>=90
良好89 -- 80
合格79 -- 60
不合格60
指导建议
课堂诊断及指导建议不少于30个字可另附页。
本人承诺以上填写认真属实,如有不实之处,愿承担相应责任。
承诺人: 听课日期: 年 月 日

View File

@ -371,12 +371,12 @@ export const columns: BasicColumn[] = [
dataIndex: 'col73' dataIndex: 'col73'
}, },
{ {
title: '14.课堂诊断', title: '14.总体评价',
align: "center", align: "center",
dataIndex: 'col74' dataIndex: 'col74'
}, },
{ {
title: '15.总体评价', title: '15.课堂诊断',
align: "center", align: "center",
dataIndex: 'col75' dataIndex: 'col75'
}, },

View File

@ -50,7 +50,9 @@
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'score'"> <template v-if="column.key === 'score'">
<span> <span>
<a-input-number v-model:value="record.score" :min="0" :max="100" @blur="handleJscjbfb"> <template #addonAfter> % </template></a-input-number> <a-input-number v-model:value="record.score" :min="0" :max="100" @blur="handleJscjbfb">
<template #addonAfter> % </template></a-input-number
>
</span> </span>
</template> </template>
<template v-else-if="column.key === 'lstitle'"> <template v-else-if="column.key === 'lstitle'">
@ -179,6 +181,7 @@
<a-card title="引用题库"> <a-card title="引用题库">
<p><a-button type="primary" @click="handleYylx('0')" :disabled="editDisabled">我的题库</a-button></p> <p><a-button type="primary" @click="handleYylx('0')" :disabled="editDisabled">我的题库</a-button></p>
<p><a-button type="primary" @click="handleYylx('1')" :disabled="editDisabled">公有题库</a-button></p> <p><a-button type="primary" @click="handleYylx('1')" :disabled="editDisabled">公有题库</a-button></p>
<p><a-button type="primary" @click="importOpen = true">导入试题</a-button></p>
</a-card> </a-card>
</a-col> </a-col>
<a-col :span="20" style="overflow-y: scroll; min-height: 100px"> <a-col :span="20" style="overflow-y: scroll; min-height: 100px">
@ -194,7 +197,7 @@
placeholder="请填写单选题题干" placeholder="请填写单选题题干"
v-model:value="item.wjTitle" v-model:value="item.wjTitle"
:bordered="false" :bordered="false"
:style="{ width: handinpwei(item.wjTitle) }" :style="{ width: '30rem' }"
:auto-size="{ minRows: 1, maxRows: 5 }" :auto-size="{ minRows: 1, maxRows: 5 }"
:disabled="editDisabled" :disabled="editDisabled"
/> />
@ -245,10 +248,11 @@
<a-input <a-input
placeholder="请填写选项" placeholder="请填写选项"
v-model:value="tmxx.itemTitle" v-model:value="tmxx.itemTitle"
:style="{ width: handinpwei(tmxx.itemTitle) }" :style="{ width: '30rem' }"
:bordered="false" :bordered="false"
:disabled="editDisabled" :disabled="editDisabled"
/> />
<!-- :style="{ width: handinpwei(tmxx.itemTitle) }" -->
<span style="color: #ecb646" v-if="item.itemSelected == tmxx.itemIndex">(正确答案)</span> <span style="color: #ecb646" v-if="item.itemSelected == tmxx.itemIndex">(正确答案)</span>
<a-tooltip placement="topLeft" title="在下方添加新的选项" <a-tooltip placement="topLeft" title="在下方添加新的选项"
><Icon ><Icon
@ -278,7 +282,7 @@
placeholder="请填写多选题题干" placeholder="请填写多选题题干"
v-model:value="item.wjTitle" v-model:value="item.wjTitle"
:bordered="false" :bordered="false"
:style="{ width: handinpwei(item.wjTitle) }" :style="{ width: '30rem' }"
:auto-size="{ minRows: 1, maxRows: 5 }" :auto-size="{ minRows: 1, maxRows: 5 }"
:disabled="editDisabled" :disabled="editDisabled"
/> />
@ -332,7 +336,7 @@
placeholder="请填写选项" placeholder="请填写选项"
v-model:value="tmxx.itemTitle" v-model:value="tmxx.itemTitle"
:bordered="false" :bordered="false"
:style="{ width: handinpwei(tmxx.itemTitle) }" :style="{ width: '30rem' }"
:disabled="editDisabled" :disabled="editDisabled"
/></a-checkbox> /></a-checkbox>
<span style="color: #ecb646" v-if="cheGrp(item.itemSelected, tmxx.itemIndex)">(正确答案)</span> <span style="color: #ecb646" v-if="cheGrp(item.itemSelected, tmxx.itemIndex)">(正确答案)</span>
@ -364,7 +368,7 @@
placeholder="请填写填空题题干" placeholder="请填写填空题题干"
v-model:value="item.wjTitle" v-model:value="item.wjTitle"
:bordered="false" :bordered="false"
:style="{ width: handinpwei(item.wjTitle) }" :style="{ width: '30rem' }"
:auto-size="{ minRows: 1, maxRows: 5 }" :auto-size="{ minRows: 1, maxRows: 5 }"
:disabled="editDisabled" :disabled="editDisabled"
/> />
@ -429,7 +433,7 @@
placeholder="请填写文件上传题题干" placeholder="请填写文件上传题题干"
v-model:value="item.wjTitle" v-model:value="item.wjTitle"
:bordered="false" :bordered="false"
:style="{ width: handinpwei(item.wjTitle) }" :style="{ width: '30rem' }"
:auto-size="{ minRows: 1, maxRows: 5 }" :auto-size="{ minRows: 1, maxRows: 5 }"
:disabled="editDisabled" :disabled="editDisabled"
/> />
@ -474,8 +478,6 @@
</a-card> </a-card>
</div> </div>
<div v-else></div> <div v-else></div>
</div> </div>
</template> </template>
@ -630,7 +632,7 @@
<a-divider type="vertical" /> <a-divider type="vertical" />
<a-button type="primary" @click="handleAddOne"><Icon icon="ant-design:file-add-outlined" />新增测验</a-button> <a-button type="primary" @click="handleAddOne"><Icon icon="ant-design:file-add-outlined" />新增测验</a-button>
<a-divider type="vertical" /> <a-divider type="vertical" />
<a-button type="primary" @click="handleTiku('6')" style="margin-left: 8px;margin-right: 18px;">题库</a-button> <a-button type="primary" @click="handleTiku('6')" style="margin-left: 8px; margin-right: 18px">题库</a-button>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
<a-row style="padding: 10px"> <a-row style="padding: 10px">
@ -639,9 +641,7 @@
<!-- class="cardClass" --> <!-- class="cardClass" -->
<a-card v-if="!item.endTime" bodyStyle=""> <a-card v-if="!item.endTime" bodyStyle="">
<template #title>{{ item.sort }}次测验暂未设置测验信息 <span class="card-label3"> 待设置</span> </template> <template #title>{{ item.sort }}次测验暂未设置测验信息 <span class="card-label3"> 待设置</span> </template>
<template #extra <template #extra> </template>
>
</template>
<!-- <p class="sznrClass">尚未布置测验题目及具体要求</p> --> <!-- <p class="sznrClass">尚未布置测验题目及具体要求</p> -->
<a-row> <a-row>
<a-col :span="18"> <a-col :span="18">
@ -897,6 +897,34 @@
</div> </div>
</a-modal> </a-modal>
<a-modal
title="Excel导入指导"
:width="800"
:visible="importOpen"
:maskClosable="false"
:okButtonProps="{ class: { 'jee-hidden': true } }"
@cancel="importOpen = false"
cancelText="关闭"
>
<div style="padding: 20px; background-color: rgb(225, 243, 237); border-radius: 5px; margin: 20px">
<p>Excel导入指导</p>
<p style="font-size: 18px; font-weight: 700p; color: red">*注意导入题目时请先保存手动添加的题目防止手动添加的题目丢失</p>
<p>1.下载题目导入模板文件</p>
<p>2.按要求格式填写题目信息</p>
<p>3.在模板内录入信息后上传文件导入题目</p>
<p>4.点击导入题目选择已完成录入的文件平台将会验证数据的正确性</p>
<p>5.若发现错误会给予提示重新修正后再次上传:若无错误即将数据导入到平台中</p>
<p
><a @click="downloadByUrl({ url: '/downPath/stdrmb.xls', target: '_self', fileName: '试题导入模板.xls' })"
><Icon icon="ant-design:download-outlined" :size="20" />导入模板下载</a
></p
>
</div>
<div style="text-align: center; margin-top: 20px; margin-bottom: 20px">
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="importDrtmXls">导入试题</j-upload-button>
</div>
</a-modal>
<KcTeachingUnitContentOneListModal ref="registerZcjcModal" @success="handleCheckZcjcSuccess"></KcTeachingUnitContentOneListModal> <KcTeachingUnitContentOneListModal ref="registerZcjcModal" @success="handleCheckZcjcSuccess"></KcTeachingUnitContentOneListModal>
<WjxWjxxTmlbDjjgsModal ref="WjxWjxxTmlbDjjgsModalPage"></WjxWjxxTmlbDjjgsModal> <WjxWjxxTmlbDjjgsModal ref="WjxWjxxTmlbDjjgsModalPage"></WjxWjxxTmlbDjjgsModal>
<XxhbbksListModal ref="XxhbbksListModalPage"></XxhbbksListModal> <XxhbbksListModal ref="XxhbbksListModalPage"></XxhbbksListModal>
@ -934,7 +962,6 @@ import { downloadByUrl } from '/@/utils/file/download';
const glob = useGlobSetting(); const glob = useGlobSetting();
const globSetting = useGlobSetting(); const globSetting = useGlobSetting();
/** /**
* 导出文件xlsx的mime-type * 导出文件xlsx的mime-type
*/ */
@ -985,6 +1012,7 @@ const ewmInfo = ref<any>({});
const kczyzb = ref<number>(0); const kczyzb = ref<number>(0);
const qmkszb = ref<number>(0); const qmkszb = ref<number>(0);
const ktcyzb = ref<number>(0); const ktcyzb = ref<number>(0);
const importOpen = ref<boolean>(false);
// //
const disabledDate = (current: Dayjs) => { const disabledDate = (current: Dayjs) => {
@ -1031,16 +1059,17 @@ function handleViewEwm(record) {
ewmInfo.value = record; ewmInfo.value = record;
} }
//61 //61
function handleTiku(wjLeixing) { function handleTiku(wjLeixing) {
var record = {wjLeixing} var record = { wjLeixing };
TikuListModalPage.value.disableSubmit = true; TikuListModalPage.value.disableSubmit = true;
TikuListModalPage.value.init(record); TikuListModalPage.value.init(record);
} }
async function exportTmlbXls(isXlsx = false) { async function exportTmlbXls(isXlsx = false) {
var name = "问卷导入模板";var url = "/wjxWjxxTmlb/wjxWjxxTmlb/exportDownXls"; var params ={title: '-1'} ; var name = '问卷导入模板';
var url = '/wjxWjxxTmlb/wjxWjxxTmlb/exportDownXls';
var params = { title: '-1' };
const data = await defHttp.get({ url: url, params: params, responseType: 'blob', timeout: 9000000 }, { isTransformResponse: false }); const data = await defHttp.get({ url: url, params: params, responseType: 'blob', timeout: 9000000 }, { isTransformResponse: false });
if (!data) { if (!data) {
createMessage.warning('文件下载失败'); createMessage.warning('文件下载失败');
@ -1070,14 +1099,54 @@ async function exportTmlbXls(isXlsx = false) {
} }
} }
async function importDrtmXls(data, url) {
url = '/wjxWjxxTmlb/wjxWjxxTmlb/importTmlbExcel?mainId=' + zyInfo.value.id;
console.log('🧤', url);
const isReturn = (fileInfo) => {
try {
if (fileInfo.code === 201) {
let {
message,
result: { msg, fileUrl, fileName },
} = fileInfo;
let href = glob.uploadUrl + fileUrl;
createWarningModal({
title: message,
centered: false,
content: `<div>
<span>${msg}</span><br/>
<span>具体详情请<a href = ${href} download = ${fileName}> 点击下载 </a> </span>
</div>`,
});
//update-begin---author:wangshuai ---date:20221121 for[VUEN-2827]------------
} else if (fileInfo.code === 500 || fileInfo.code === 510) {
createMessage.error(fileInfo.message || `${data.file.name} 导入失败`);
//update-end---author:wangshuai ---date:20221121 for[VUEN-2827]------------
} else {
createWarningModal({
centered: false,
content: `<div>
<span>${fileInfo.message}</span><br/>
</div>`,
});
}
} catch (error) {
console.log('导入的数据异常', error);
} finally {
}
};
await defHttp.uploadFile({ url }, { file: data.file }, { success: isReturn });
console.log('22222222222222222222222',zyInfo.value);
handleEdit(zyInfo.value, false);
importOpen.value = false
}
/** /**
* 导入xls * 导入xls
* @param data 导入的数据 * @param data 导入的数据
* @param url * @param url
*/ */
async function importXls(data, url) { async function importXls(data, url) {
url = "/wjxWjxxTmlb/wjxWjxxTmlb/importExcel"; url = '/wjxWjxxTmlb/wjxWjxxTmlb/importExcel';
const isReturn = (fileInfo) => { const isReturn = (fileInfo) => {
try { try {
if (fileInfo.code === 201) { if (fileInfo.code === 201) {
@ -1114,9 +1183,6 @@ async function exportTmlbXls(isXlsx = false) {
await defHttp.uploadFile({ url }, { file: data.file }, { success: isReturn }); await defHttp.uploadFile({ url }, { file: data.file }, { success: isReturn });
} }
// //
function handleTeaDtjg(item) { function handleTeaDtjg(item) {
console.log('🧳', item); console.log('🧳', item);
@ -1198,7 +1264,6 @@ function handleYylx(sylx) {
} }
} }
function handleJscjbfb() { function handleJscjbfb() {
var list = tableData.value; var list = tableData.value;
@ -1338,17 +1403,35 @@ function handleDelTigan(record, index) {
} }
} }
function letterCount(val) {
return val.replace(/[^a-zA-Z]/g, '').length;
}
function digitCount(val) {
return val.replace(/\D/g, '').length;
}
function chineseCharCount(val) {
const regex = /[\u4e00-\u9fa5]/g;
return val.match(regex)?.length || 0;
}
// //
function handinpwei(value) { function handinpwei(value) {
if (!value) { if (!value) {
return '20rem'; return '20rem';
} else { } else {
if (String(value).length * 1.1 < 20) { var a = letterCount(value); //
var b = digitCount(value); //
var c = chineseCharCount(value); //
var d = a + b + c;
if (d * 1.1 < 20) {
return '20rem'; return '20rem';
} else if (String(value).length * 1.1 > 60) { } else if (d * 1.1 > 60) {
return '60rem'; return '60rem';
} else { } else {
return String(value).length * 1.1 + 'rem'; return d * 1.1 + 'rem';
} }
} }
} }
@ -1541,22 +1624,21 @@ function handleDelZycs(index) {
} }
function handleSzzycs(val) { function handleSzzycs(val) {
defHttp.get({ url: '/zyInfo/zyInfo/zyzb', params: { rwbh, xqxn, zyLeixing: '1' } }).then((res) => { defHttp.get({ url: '/zyInfo/zyInfo/zyzb', params: { rwbh, xqxn, zyLeixing: '1' } }).then((res) => {
console.log('😥', res); console.log('😥', res);
var list = res; var list = res;
for (var i = 0; i < list.length; i++) { for (var i = 0; i < list.length; i++) {
if (list[i].zyLeixing == '0') { if (list[i].zyLeixing == '0') {
kczyzb.value = list[i].score kczyzb.value = list[i].score;
} else if (list[i].zyLeixing == '1') { } else if (list[i].zyLeixing == '1') {
qmkszb.value = list[i].score qmkszb.value = list[i].score;
} else if (list[i].zyLeixing == '2') { } else if (list[i].zyLeixing == '2') {
} else if (list[i].zyLeixing == '3') { } else if (list[i].zyLeixing == '3') {
ktcyzb.value = list[i].score ktcyzb.value = list[i].score;
} }
} }
}); });
handleShowType(1) handleShowType(1);
} }
// //
function handleBatchAdd() { function handleBatchAdd() {
@ -1744,7 +1826,6 @@ async function submitForm() {
} }
} }
} else if (wjType == 8) { } else if (wjType == 8) {
} else if (wjType == 6) { } else if (wjType == 6) {
if (isShow.value) { if (isShow.value) {
var wjAnswer = values[i].wjAnswer; var wjAnswer = values[i].wjAnswer;

View File

@ -420,7 +420,7 @@ watch(
function handleOk() { function handleOk() {
const data = tiganData.value; const data = tiganData.value;
console.log('🧝‍♀️', data); console.log('🧝‍♀️', data);
defHttp.post({ url: '/wjxWjxxTmlb/wjxWjxxTmlb/add', params: data }).then((res) => { defHttp.post({ url: '/wjxWjxxTmlb/wjxWjxxTmlb/addNew', params: {addList:data} }).then((res) => {
console.log('👞', res); console.log('👞', res);
addOpen.value = false; addOpen.value = false;
searchQuery(); searchQuery();
@ -590,7 +590,8 @@ function addTigan(type) {
* @param url * @param url
*/ */
async function importXls(data, url) { async function importXls(data, url) {
url = '/wjxWjxxTmlb/wjxWjxxTmlb/importExcel'; // url = '/wjxWjxxTmlb/wjxWjxxTmlb/importTmlbExcel?mainId=1234';
url = '/wjxWjxxTmlb/wjxWjxxTmlb/importTmlbExcel';
const isReturn = (fileInfo) => { const isReturn = (fileInfo) => {
try { try {
if (fileInfo.code === 201) { if (fileInfo.code === 201) {

View File

@ -302,7 +302,7 @@ function isNow(item) {
} }
function funpingjia(record) { function funpingjia(record) {
var item = { ketangbiaoid: record.id }; var item = { ketangbiaoid: record.id ,szkc:record.szkc};
let userid = getUserId(); let userid = getUserId();
listTkjlApi({ userid: userid, ketangbiaoid: item.ketangbiaoid }).then((res) => { listTkjlApi({ userid: userid, ketangbiaoid: item.ketangbiaoid }).then((res) => {
var list = res; var list = res;

View File

@ -343,7 +343,7 @@ function isNow(item) {
} }
function funpingjia(record) { function funpingjia(record) {
var item = { ketangbiaoid: record.id }; var item = { ketangbiaoid: record.id,szkc:record.szkc };
let userid = getUserId(); let userid = getUserId();
listTkjlApi({ userid: userid, ketangbiaoid: item.ketangbiaoid }).then((res) => { listTkjlApi({ userid: userid, ketangbiaoid: item.ketangbiaoid }).then((res) => {
var list = res; var list = res;

View File

@ -2,6 +2,17 @@
<a-card class="rowGutter" id="ktsbDom"> <a-card class="rowGutter" id="ktsbDom">
<template #title> <template #title>
<span class="titleName">听课笔记</span> <span class="titleName">听课笔记</span>
<span class="titleDownload"><a @click="downloadByUrl({url:'/downPath/tkjlb.docx',target: '_self',fileName:'东北师范大学听课记录表.docx'})">一般听课评价表</a></span>
<span class="titleDownload"><a @click="downloadByUrl({url:'/downPath/jxzlpjb.docx',target: '_self',fileName:'东北师范大学本科课堂教学质量评价表(同行专家用)'})">同行听课评价表</a></span>
<span class="titleDownload"><a @click="downloadByUrl({url:'/downPath/szkcpjb.docx',target: '_self',fileName:'东北师范大学政课评价表'})">思政课评价表</a></span>
<span class="titleDownload"><a @click="downloadByUrl({url:'/downPath/tkpjb.docx',target: '_self',fileName:'线上教学听课评价表-新.docx'})">线上课评价表</a></span>
<span class="titleDownload">
<a-tooltip placement="topLeft">
<template #title>
<span>登录后教师可以预约课程听课完成后可以对课程进行评价评价有助于快速完成本学期的听课任务</span>
</template>
<span class="helpClass">?</span>
</a-tooltip></span>
<span style="float:right;"> <span style="float:right;">
<a style="padding-right: 0.5rem;" @click="addTkbj()">新增笔记</a> <a style="padding-right: 0.5rem;" @click="addTkbj()">新增笔记</a>
<RouterLink to="/site/ktsbMore">查看更多</RouterLink> <RouterLink to="/site/ktsbMore">查看更多</RouterLink>
@ -19,6 +30,7 @@ import { ref, onMounted } from 'vue';
import { getSysConfig } from '/@/views/site/utils/index'; import { getSysConfig } from '/@/views/site/utils/index';
import ktsbPage from '/@/views/site/ktsb/ktsbList.vue' import ktsbPage from '/@/views/site/ktsb/ktsbList.vue'
import ktsbModalPage from '/@/views/site/ktsb/components/ktsbModal.vue' import ktsbModalPage from '/@/views/site/ktsb/components/ktsbModal.vue'
import { downloadByUrl } from '/@/utils/file/download';
const zzskTitle = ref('正在上课'); const zzskTitle = ref('正在上课');
const queryParam = ref<any>({}); const queryParam = ref<any>({});
@ -58,4 +70,18 @@ function addTkbj(){
font-size: 24px; font-size: 24px;
font-weight: bold; font-weight: bold;
} }
.titleDownload {
padding: 15px;
}
.helpClass{
font-size: 16px;
font-weight: 700;
/* background: #1c84c6; */
color: #1c84c6;
border-radius: 5px;
padding: 1px 8px;
border: 1px #1c84c6 solid;
cursor: pointer;
}
</style> </style>

View File

@ -150,7 +150,7 @@ function loadData(num?) {
} }
function funpingjia(record){ function funpingjia(record){
var item = {ketangbiaoid:record.id} var item = {ketangbiaoid:record.id ,szkc:record.szkc}
let userid = getUserId(); let userid = getUserId();
listTkjlApi({ userid: userid, ketangbiaoid:item.ketangbiaoid}).then(res => { listTkjlApi({ userid: userid, ketangbiaoid:item.ketangbiaoid}).then(res => {
var list = res var list = res

View File

@ -142,7 +142,7 @@ function loadData(num?) {
} }
function funpingjia(record){ function funpingjia(record){
var item = {ketangbiaoid:record.id} var item = {ketangbiaoid:record.id ,szkc:record.szkc}
let userid = getUserId(); let userid = getUserId();
listTkjlApi({ userid: userid, ketangbiaoid:item.ketangbiaoid}).then(res => { listTkjlApi({ userid: userid, ketangbiaoid:item.ketangbiaoid}).then(res => {
var list = res var list = res

View File

@ -133,7 +133,7 @@ function loadData(num?) {
} }
function funpingjia(record){ function funpingjia(record){
var item = {ketangbiaoid:record.id} var item = {ketangbiaoid:record.id ,szkc:record.szkc}
let userid = getUserId(); let userid = getUserId();
listTkjlApi({ userid: userid, ketangbiaoid:item.ketangbiaoid}).then(res => { listTkjlApi({ userid: userid, ketangbiaoid:item.ketangbiaoid}).then(res => {
var list = res var list = res

View File

@ -1,34 +1,39 @@
<template> <template>
<a-card class="wenZiJiaCu" style="font-size: 1.1rem;"> <a-card class="wenZiJiaCu" style="font-size: 1.1rem">
您可根据实际情况选择下面两个评价表中的一个或者两个给予评价 您可根据实际情况选择下面评价表中的一个给予评价
<div class="p15"> <div class="p15">
<a-row> <a-row>
<!-- <a-col :span="9"> <!-- <a-col :span="9">
<a-button type="primary" class="wenZiJiaCu" style="font-size: 18px;height: 45px;"><RouterLink target='_blank' :to="{path:'/site/qaAddPageXsktpjb',query:{ type: 2, ktId }}">线上课堂评价表</RouterLink></a-button> <a-button type="primary" class="wenZiJiaCu" style="font-size: 18px;height: 45px;"><RouterLink target='_blank' :to="{path:'/site/qaAddPageXsktpjb',query:{ type: 2, ktId }}">线上课堂评价表</RouterLink></a-button>
</a-col> --> </a-col> -->
<a-col :span="8" style="text-align: center;"> <a-col :span="12" style="text-align: center" v-if="szkc != '1'">
<a-button type="primary" class="wenZiJiaCu" style="font-size: 18px;height: 45px;"><RouterLink target='_blank' :to="{path:'/site/qaAddPageTkjlb',query:{ type: 3, ktId }}">听课记录表</RouterLink></a-button> <a-button type="primary" class="wenZiJiaCu" style="font-size: 18px; height: 45px"
><RouterLink target="_blank" :to="{ path: '/site/qaAddPageTkjlb', query: { type: 3, ktId } }">听课记录表</RouterLink></a-button
>
</a-col> </a-col>
<a-col :span="8" style="text-align: center;"> <a-col :span="12" style="text-align: center" v-if="szkc != '1'">
<a-button type="primary" class="wenZiJiaCu" style="font-size: 18px;height: 45px;"><RouterLink target='_blank' :to="{path:'/site/qaAddPageThpjb',query:{ type: 4, ktId }}">同行评价表</RouterLink></a-button> <a-button type="primary" class="wenZiJiaCu" style="font-size: 18px; height: 45px"
><RouterLink target="_blank" :to="{ path: '/site/qaAddPageThpjb', query: { type: 4, ktId } }">同行评价表</RouterLink></a-button
>
</a-col> </a-col>
<a-col :span="8" style="text-align: center;"> <a-col :span="24" v-if="szkc == '1'" style="text-align: center">
<a-button type="primary" class="wenZiJiaCu" style="font-size: 18px;height: 45px;"><RouterLink target='_blank' :to="{path:'/site/qaAddPageThpjb',query:{ type: 5, ktId }}">思政课听课表</RouterLink></a-button> <a-button type="primary" class="wenZiJiaCu" style="font-size: 18px; height: 45px"
><RouterLink target="_blank" :to="{ path: '/site/qaAddPageThpjb', query: { type: 5, ktId } }">思政课评价表</RouterLink></a-button
>
</a-col> </a-col>
</a-row> </a-row>
</div> </div>
<p> <div v-if="szkc != '1'">
说明 <p> 说明 </p>
</p>
<!-- <p> <!-- <p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.线上课堂评价表是根据线上课堂的特点研制的如果您听的是线上课堂请您填写该评价表如果您同时是该课程所属学科的专家/教师也欢迎您同时填写同行评价表 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.线上课堂评价表是根据线上课堂的特点研制的如果您听的是线上课堂请您填写该评价表如果您同时是该课程所属学科的专家/教师也欢迎您同时填写同行评价表
</p> --> </p> -->
<p> <p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.听课记录表是方便行政人员和非该课程所属学科的教师听课使用的评价表主要用来反映课堂教学的整体情况 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.听课记录表是方便行政人员和非该课程所属学科的教师听课使用的评价表主要用来反映课堂教学的整体情况
</p> </p>
<p> <p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.同行评价表是专门为该课程方面的专家/教师听课研制的评价表更能反映该课堂的教学质量 </p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.同行评价表是专门为该课程方面的专家/教师听课研制的评价表更能反映该课堂的教学质量 </div>
</p>
</a-card> </a-card>
</template> </template>
@ -36,13 +41,16 @@
import { ref, defineExpose } from 'vue'; import { ref, defineExpose } from 'vue';
let ktId = ref(''); let ktId = ref('');
let szkc = ref('');
/** /**
* 编辑 * 编辑
*/ */
function view(...data) { function view(...data) {
let record = data[0] ?? {}; let record = data[0] ?? {};
ktId.value = record.ketangbiaoid console.log('👛', record);
ktId.value = record.ketangbiaoid;
szkc.value = record.szkc;
} }
defineExpose({ defineExpose({

View File

@ -2,16 +2,16 @@
<a-card class="rowGutter" id="yykcDom"> <a-card class="rowGutter" id="yykcDom">
<template #title> <template #title>
<span class="titleName">我的预约</span> <span class="titleName">我的预约</span>
<span class="titleDownload"><a @click="downloadByUrl({url:'/downPath/tkpjb.docx',target: '_self',fileName:'线上教学听课评价表-新.docx'})">线上课堂评价表</a></span> <!-- <span class="titleDownload"><a @click="downloadByUrl({url:'/downPath/tkpjb.docx',target: '_self',fileName:'线上教学听课评价表-新.docx'})">线上课堂评价表</a></span>
<span class="titleDownload"><a @click="downloadByUrl({url:'/downPath/tkjlb.docx',target: '_self',fileName:'东北师范大学听课记录表.docx'})">听课记录表</a></span> <span class="titleDownload"><a @click="downloadByUrl({url:'/downPath/tkjlb.docx',target: '_self',fileName:'东北师范大学听课记录表.docx'})">听课记录表</a></span>
<span class="titleDownload"><a @click="downloadByUrl({url:'/downPath/jxzlpjb.docx',target: '_self',fileName:'东北师范大学本科课堂教学质量评价表(同行专家用)'})">同行评价表</a></span> <span class="titleDownload"><a @click="downloadByUrl({url:'/downPath/jxzlpjb.docx',target: '_self',fileName:'东北师范大学本科课堂教学质量评价表(同行专家用)'})">同行评价表</a></span> -->
<span class="titleDownload"> <!-- <span class="titleDownload">
<a-tooltip placement="topLeft"> <a-tooltip placement="topLeft">
<template #title> <template #title>
<span>登录后教师可以预约课程听课完成后可以对课程进行评价评价有助于快速完成本学期的听课任务</span> <span>登录后教师可以预约课程听课完成后可以对课程进行评价评价有助于快速完成本学期的听课任务</span>
</template> </template>
<span class="helpClass">?</span> <span class="helpClass">?</span>
</a-tooltip></span> </a-tooltip></span> -->
<!-- <br> --> <!-- <br> -->
<span class="titleDownload tipClass">当前时间之前的预约课程点击查看更多</span> <span class="titleDownload tipClass">当前时间之前的预约课程点击查看更多</span>
</template> </template>

View File

@ -37,7 +37,7 @@ export const columnsZyhp: BasicColumn[] = [
{ {
title: '作业预览', title: '作业预览',
align: "center", align: "center",
dataIndex: 'pdfPath', dataIndex: 'filePath',
slots: { customRender: 'fileSlot' }, slots: { customRender: 'fileSlot' },
}, },
]; ];
@ -57,7 +57,7 @@ export const columnsZyhpYhp: BasicColumn[] = [
{ {
title: '作业预览', title: '作业预览',
align: "center", align: "center",
dataIndex: 'pdfPath', dataIndex: 'filePath',
slots: { customRender: 'fileSlot' }, slots: { customRender: 'fileSlot' },
}, },
{ {

View File

@ -15,11 +15,11 @@
<j-input placeholder="请输入学生姓名" v-model:value="queryParam.studentName"></j-input> <j-input placeholder="请输入学生姓名" v-model:value="queryParam.studentName"></j-input>
</a-form-item> </a-form-item>
</a-col> --> </a-col> -->
<a-col :span="24" style="text-align: right;"> <a-col :span="24" style="text-align: right">
<span style="overflow: hidden" class="table-page-search-submitButtons"> <span style="overflow: hidden" class="table-page-search-submitButtons">
<!-- <a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button> --> <!-- <a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button> -->
<a-button type="primary" @click="handleZyxxDetail" style="margin-right: 8px;;">作业信息</a-button> <a-button type="primary" @click="handleZyxxDetail" style="margin-right: 8px">作业信息</a-button>
<a-button type="primary" @click="handlePfbz" style="margin-right: 8px;;" v-if="zyInfo.sturead == '1' && zyInfo.pfbz">评分标准</a-button> <a-button type="primary" @click="handlePfbz" style="margin-right: 8px" v-if="zyInfo.sturead == '1' && zyInfo.pfbz">评分标准</a-button>
</span> </span>
</a-col> </a-col>
</a-row> </a-row>
@ -35,9 +35,7 @@
<template #htmlSlot="{ text }"> <template #htmlSlot="{ text }">
<div v-html="text"></div> <div v-html="text"></div>
</template> </template>
<template #stuNameSlot="{ text }"> <template #stuNameSlot="{ text }"> 匿名 </template>
匿名
</template>
<template #sfpfSlot="{ text }"> <template #sfpfSlot="{ text }">
<div v-if="text == '0'"></div> <div v-if="text == '0'"></div>
<div v-if="text == '1'"></div> <div v-if="text == '1'"></div>
@ -46,9 +44,11 @@
<!--<template #pcaSlot="{text}"> <!--<template #pcaSlot="{text}">
{{ getAreaTextByCode(text) }} {{ getAreaTextByCode(text) }}
</template>--> </template>-->
<template #fileSlot="{ text }"> <template #fileSlot="{ text, record }">
<span v-if="!text" style="font-size: 12px; font-style: italic">无文件</span> <span v-if="!text" style="font-size: 12px; font-style: italic">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:menu-unfold-outlined" size="small" @click="openPdf(text)">预览</a-button> <a-button v-else :ghost="true" type="primary" preIcon="ant-design:menu-unfold-outlined" size="small" @click="openPdf(text, record)"
>预览</a-button
>
</template> </template>
</BasicTable> </BasicTable>
<!-- 表单区域 --> <!-- 表单区域 -->
@ -56,6 +56,12 @@
<ZyInfoDetailModal ref="registerZyxxModal" @success="handleSuccess"></ZyInfoDetailModal> <ZyInfoDetailModal ref="registerZyxxModal" @success="handleSuccess"></ZyInfoDetailModal>
<ZyInfoPfbzModal ref="registerPfbzModal" @success="handleSuccess"></ZyInfoPfbzModal> <ZyInfoPfbzModal ref="registerPfbzModal" @success="handleSuccess"></ZyInfoPfbzModal>
<ZyInfoStudentHpOneModal ref="registerOneModal" @success="handleSuccess"></ZyInfoStudentHpOneModal> <ZyInfoStudentHpOneModal ref="registerOneModal" @success="handleSuccess"></ZyInfoStudentHpOneModal>
<a-modal v-model:visible="imgvisible" title="图片预览" width="800px" :cancelText="`关闭`" :okButtonProps="{ class: { 'jee-hidden': true } }">
<div style="padding: 15px; text-align: center">
<img :src="ylimgurl" />
</div>
</a-modal>
</div> </div>
</template> </template>
@ -76,6 +82,7 @@ import { useRouter } from 'vue-router';
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils'; import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
import { useGlobSetting } from '/@/hooks/setting'; import { useGlobSetting } from '/@/hooks/setting';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
import { encryptByBase64 } from '/@/utils/cipher';
const globSetting = useGlobSetting(); const globSetting = useGlobSetting();
const baseApiUrl = globSetting.domainUrl; const baseApiUrl = globSetting.domainUrl;
@ -92,6 +99,8 @@ const registerZyxxModal = ref();
const registerOneModal = ref(); const registerOneModal = ref();
const registerPfbzModal = ref(); const registerPfbzModal = ref();
const zyInfo = ref<any>({}); const zyInfo = ref<any>({});
const imgvisible = ref<boolean>(false);
const ylimgurl = ref<any>('');
//table //table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({ const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: { tableProps: {
@ -129,15 +138,31 @@ const wrapperCol = reactive({
sm: { span: 16 }, sm: { span: 16 },
}); });
function openPdf(record) { function openPdf(text, record) {
console.log('🤢', record); console.log('👩‍👦‍👦', record);
if (record) { console.log('🤢', text);
var url2 = getFileAccessHttpUrl(record); const parts = text.split('.');
const filetype = parts[parts.length - 1];
if (filetype == 'jpg' || filetype == 'png' || filetype == 'jpeg' || filetype == 'xls' || filetype == 'xlsx' || filetype == 'text') {
imgvisible.value = true;
var url2 = getFileAccessHttpUrl(text);
console.log('👀', url2);
ylimgurl.value = url2;
} else if (filetype == 'doc' || filetype == 'docx' || filetype == 'pdf') {
var url2 = getFileAccessHttpUrl(record.pdfPath);
let url = baseApiUrl + '/generic/web/viewer.html?file=' + encodeURIComponent(url2); let url = baseApiUrl + '/generic/web/viewer.html?file=' + encodeURIComponent(url2);
window.open(url, '_blank'); window.open(url, '_blank');
} else { } else {
createMessage.warning('暂无文件'); downloadFile(text);
} }
// if (record) {
// var url2 = getFileAccessHttpUrl(record);
// let url = baseApiUrl + '/generic/web/viewer.html?file=' + encodeURIComponent(url2);
// window.open(url, '_blank');
// } else {
// createMessage.warning('');
// }
} }
/** /**
* 新增事件 * 新增事件
@ -232,7 +257,6 @@ function getTableAction(record) {
// }, // },
]; ];
} }
} }
/** /**
@ -255,7 +279,6 @@ function getDropDownAction(record) {
} }
function getZyinfo() { function getZyinfo() {
defHttp.get({ url: '/zyInfo/zyInfo/queryById', params: { id: mainId } }).then((res) => { defHttp.get({ url: '/zyInfo/zyInfo/queryById', params: { id: mainId } }).then((res) => {
zyInfo.value = res; zyInfo.value = res;
}); });
@ -265,7 +288,6 @@ onMounted(() => {
getZyinfo(); getZyinfo();
}); });
/** /**
* 查询 * 查询
*/ */
@ -283,11 +305,9 @@ function searchReset() {
reload(); reload();
} }
defineExpose({ defineExpose({
reload reload,
}); });
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>

View File

@ -51,15 +51,23 @@
<!--<template #pcaSlot="{text}"> <!--<template #pcaSlot="{text}">
{{ getAreaTextByCode(text) }} {{ getAreaTextByCode(text) }}
</template>--> </template>-->
<template #fileSlot="{ text }"> <template #fileSlot="{ text, record }">
<span v-if="!text" style="font-size: 12px; font-style: italic">无文件</span> <span v-if="!text" style="font-size: 12px; font-style: italic">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:menu-unfold-outlined" size="small" @click="openPdf(text)">预览</a-button> <a-button v-else :ghost="true" type="primary" preIcon="ant-design:menu-unfold-outlined" size="small" @click="openPdf(text, record)"
>预览</a-button
>
</template> </template>
</BasicTable> </BasicTable>
<!-- 表单区域 --> <!-- 表单区域 -->
<ZyInfoStudentHpModal ref="registerModal" @success="handleSuccess"></ZyInfoStudentHpModal> <ZyInfoStudentHpModal ref="registerModal" @success="handleSuccess"></ZyInfoStudentHpModal>
<ZyInfoDetailModal ref="registerZyxxModal" @success="handleSuccess"></ZyInfoDetailModal> <ZyInfoDetailModal ref="registerZyxxModal" @success="handleSuccess"></ZyInfoDetailModal>
<ZyInfoStudentHpOneModal ref="registerOneModal" @success="handleSuccess"></ZyInfoStudentHpOneModal> <ZyInfoStudentHpOneModal ref="registerOneModal" @success="handleSuccess"></ZyInfoStudentHpOneModal>
<a-modal v-model:visible="imgvisible" title="图片预览" width="800px" :cancelText="`关闭`" :okButtonProps="{ class: { 'jee-hidden': true } }">
<div style="padding: 15px;text-align: center;">
<img :src="ylimgurl" />
</div>
</a-modal>
</div> </div>
</template> </template>
@ -92,6 +100,8 @@ const queryParam = ref<any>({ rwbh, mainId });
const registerModal = ref(); const registerModal = ref();
const registerZyxxModal = ref(); const registerZyxxModal = ref();
const registerOneModal = ref(); const registerOneModal = ref();
const imgvisible = ref<boolean>(false);
const ylimgurl = ref<any>('');
//table //table
const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({ const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({
tableProps: { tableProps: {
@ -129,15 +139,32 @@ const wrapperCol = reactive({
sm: { span: 16 }, sm: { span: 16 },
}); });
function openPdf(record) { function openPdf(text, record) {
console.log('🤢', record); console.log('👩‍👦‍👦', record);
if (record) { console.log('🤢', text);
var url2 = getFileAccessHttpUrl(record); const parts = text.split('.');
const filetype = parts[parts.length - 1];
if (filetype == 'jpg' || filetype == 'png' || filetype == 'jpeg' || filetype == 'xls' || filetype == 'xlsx' || filetype == 'text') {
imgvisible.value = true;
var url2 = getFileAccessHttpUrl(text);
console.log('👀', url2);
ylimgurl.value = url2;
} else if (filetype == 'doc' || filetype == 'docx' || filetype == 'pdf') {
var url2 = getFileAccessHttpUrl(record.pdfPath);
let url = baseApiUrl + '/generic/web/viewer.html?file=' + encodeURIComponent(url2); let url = baseApiUrl + '/generic/web/viewer.html?file=' + encodeURIComponent(url2);
window.open(url, '_blank'); window.open(url, '_blank');
} else { } else {
createMessage.warning('暂无文件'); downloadFile(text);
} }
// console.log('🤢', record);
// if (record) {
// var url2 = getFileAccessHttpUrl(record);
// let url = baseApiUrl + '/generic/web/viewer.html?file=' + encodeURIComponent(url2);
// window.open(url, '_blank');
// } else {
// createMessage.warning('');
// }
} }
/** /**
* 新增事件 * 新增事件