修改bug

This commit is contained in:
yangjun 2023-05-24 08:43:44 +08:00
parent 068563d0f9
commit 626ca9b741
6 changed files with 479 additions and 18 deletions

View File

@ -77,6 +77,34 @@ const site: AppRouteModule = {
title: '东北师范大学本科课堂教学质量评价表', title: '东北师范大学本科课堂教学质量评价表',
}, },
}, },
{
path: 'qaShoudongAddXsktpjb',
name: 'qaShoudongAddXsktpjb',
component: () => import('/@/views/site/tingKeZuJi/page/qaShoudongAdd.vue'),
meta: {
// affix: true,
title: '线上教学课堂看课、听课评价表',
},
},
{
path: 'qaShoudongAddTkjlb',
name: 'qaShoudongAddTkjlb',
component: () => import('/@/views/site/tingKeZuJi/page/qaShoudongAdd.vue'),
meta: {
// affix: true,
title: '东北师范大学听课记录表',
},
},
{
path: 'qaShoudongAddThpjb',
name: 'qaShoudongAddThpjb',
component: () => import('/@/views/site/tingKeZuJi/page/qaShoudongAdd.vue'),
meta: {
// affix: true,
title: '东北师范大学本科课堂教学质量评价表',
},
},
{ {
path: 'liveView', path: 'liveView',
name: 'LiveBroadcastRoom', name: 'LiveBroadcastRoom',

View File

@ -14,6 +14,18 @@
<JDictSelectTag placeholder="课程性质" v-model:value="queryParam.kcxz" dictCode="kcxz" @change="loadData"/> <JDictSelectTag placeholder="课程性质" v-model:value="queryParam.kcxz" dictCode="kcxz" @change="loadData"/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="6">
<a-form-item label="" style="padding: 10px;">
<a-select
ref="select"
v-model:value="queryParam.djz"
style="width: 120px"
@change="loadData"
>
<a-select-option :value="item.bxqkssj" v-for="(item,index) in djzData">{{item.flag1}}</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row> </a-row>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
@ -33,20 +45,41 @@ import { defHttp } from '/@/utils/http/axios';
const barMultiData = reactive<any>([]); const barMultiData = reactive<any>([]);
const queryParam = ref<any>({}); const queryParam = ref<any>({});
const djzData = reactive<any>([]);
const list = (queryParam) => defHttp.get({ url: '/kcTingke/kcTingke/getIndexTpkztjList', params:queryParam }); const list = (queryParam) => defHttp.get({ url: '/kcTingke/kcTingke/getIndexTpkztjList', params:queryParam });
const listDjz = (queryParam) => defHttp.get({ url: '/kcSysConfig/kcSysConfig/getDjz', params:queryParam });
// //
onMounted(() => { onMounted(() => {
const format = 'yyyy-MM-dd'; // const format = 'yyyy-MM-dd';
const startTime = new Date(); // const startTime = new Date();
startTime.setTime(startTime.getTime()-60000*60*24*7) // startTime.setTime(startTime.getTime()-60000*60*24*7)
queryParam.value.startTime = dateFormat(startTime, format) // queryParam.value.startTime = dateFormat(startTime, format)
queryParam.value.endTime = dateFormat(new Date(), format) // queryParam.value.endTime = dateFormat(new Date(), format)
// loadData()
listDjz({}).then(res=>{
console.log(`🚀 ~ file: tkztj.vue:59 ~ list ~ res:`, res)
var list = res
var kssj = "";
for(var i=0;i<list.length;i++){
var dqsj = list[i].bxqkssj+","+list[i].bxqjssj
djzData.push({bxqkssj:dqsj,flag1:list[i].flag1})
if(list[i].flag2 == '1'){
kssj = dqsj
}
}
console.log(`🚀 ~ file: tkztj.vue:81 ~ listDjz ~ kssj:`, kssj)
queryParam.value.djz = kssj
loadData() loadData()
})
}); });
function loadData(){ function loadData(){
barMultiData.length = 0 barMultiData.length = 0
var dqsj = queryParam.value.djz
var sjjh = dqsj.split(",");
queryParam.value.startTime = sjjh[0]
queryParam.value.endTime = sjjh[1]
list(queryParam.value).then(res=>{ list(queryParam.value).then(res=>{
console.log(`🚀 ~ file: tkztj.vue:59 ~ list ~ res:`, res) console.log(`🚀 ~ file: tkztj.vue:59 ~ list ~ res:`, res)
var list = res var list = res

View File

@ -42,6 +42,10 @@
<a-button type="danger" @click="batchHandleDelete" preIcon="ant-design:delete-outlined">删除</a-button> <a-button type="danger" @click="batchHandleDelete" preIcon="ant-design:delete-outlined">删除</a-button>
<a-button type="primary" @click="handleEditPtxx" preIcon="ant-design:plus-outlined"> 修改平台信息</a-button> <a-button type="primary" @click="handleEditPtxx" preIcon="ant-design:plus-outlined"> 修改平台信息</a-button>
<a-button type="primary" @click="handleEditTeacher" preIcon="ant-design:plus-outlined"> 修改教师</a-button> <a-button type="primary" @click="handleEditTeacher" preIcon="ant-design:plus-outlined"> 修改教师</a-button>
<a-button type="primary" @click="handlePjb(2)" preIcon="ant-design:plus-outlined"> 线上课堂评价表</a-button>
<a-button type="primary" @click="handlePjb(3)" preIcon="ant-design:plus-outlined"> 听课记录表</a-button>
<a-button type="primary" @click="handlePjb(4)" preIcon="ant-design:plus-outlined"> 同行评价表</a-button>
<!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button> <!-- <a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button> --> <j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button> -->
<!-- <a-dropdown v-if="selectedRowKeys.length > 0"> <!-- <a-dropdown v-if="selectedRowKeys.length > 0">
@ -208,6 +212,31 @@
registerModal.value.edit(record); registerModal.value.edit(record);
} }
function handlePjb(type){
let record = selectedRows.value[0];
if(!record){
createMessage.error('请您至少选择一条记录进行操作。');
return;
}
console.log(`🚀 ~ file: KcKetangbiaoList.vue:217 ~ handlePjb ~ selectedRows:`, selectedRows)
let ktId = record.id;
console.log(`🚀 ~ file: KcKetangbiaoList.vue:217 ~ handlePjb ~ ktId:`, ktId)
var url = "";
if(type=="2"){
url = "/site/qaShoudongAddXsktpjb?type="+type+"&ktId="+ktId;
}else if(type=="3"){
url = "/site/qaShoudongAddTkjlb?type="+type+"&ktId="+ktId;
}else if(type=="4"){
url = "/site/qaShoudongAddThpjb?type="+type+"&ktId="+ktId;
}
if(ktId){
console.log(`🚀 ~ file: KcKetangbiaoList.vue:228 ~ handlePjb ~ ktId:`, ktId)
window.open(url,"_blank")
}else{
createMessage.error('操作失败,请联系管理员。');
}
}
/** /**
* 编辑事件 * 编辑事件

View File

@ -4,26 +4,38 @@
<a-col :span="24" style="text-align: center;"><strong style="font-size: 16px;">评课周统计</strong></a-col> <a-col :span="24" style="text-align: center;"><strong style="font-size: 16px;">评课周统计</strong></a-col>
<a-col :span="24"> <a-col :span="24">
<a-row> <a-row>
<a-col :span="6"> <a-col :span="5">
<a-form-item label="" style="padding: 10px;"> <a-form-item label="" style="padding: 10px;">
<JDictSelectTag placeholder="评课身份" v-model:value="queryParam.tksf" dictCode="kc_tksf" @change="loadData" /> <JDictSelectTag placeholder="评课身份" v-model:value="queryParam.tksf" dictCode="kc_tksf" @change="loadData" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="5">
<a-form-item label="" style="padding: 10px;"> <a-form-item label="" style="padding: 10px;">
<JDictSelectTag placeholder="评课人所在单位" v-model:value="queryParam.szdw" :dictCode="`tkrszdw_view,college,college`" @change="loadData"/> <JDictSelectTag placeholder="评课人所在单位" v-model:value="queryParam.szdw" :dictCode="`tkrszdw_view,college,college`" @change="loadData"/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="5">
<a-form-item label="" style="padding: 10px;"> <a-form-item label="" style="padding: 10px;">
<JDictSelectTag placeholder="课程性质" v-model:value="queryParam.kcxz" dictCode="kcxz" @change="loadData"/> <JDictSelectTag placeholder="课程性质" v-model:value="queryParam.kcxz" dictCode="kcxz" @change="loadData"/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="5">
<a-form-item label="" style="padding: 10px;"> <a-form-item label="" style="padding: 10px;">
<JDictSelectTag placeholder="开课单位" v-model:value="queryParam.kkdw" :dictCode="`kc_kkdw_view,kkdw,kkdw`" @change="loadData"/> <JDictSelectTag placeholder="开课单位" v-model:value="queryParam.kkdw" :dictCode="`kc_kkdw_view,kkdw,kkdw`" @change="loadData"/>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span="4">
<a-form-item label="" style="padding: 10px;">
<a-select
ref="select"
v-model:value="queryParam.djz"
style="width: 120px"
@change="loadData"
>
<a-select-option :value="item.bxqkssj" v-for="(item,index) in djzData">{{item.flag1}}</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row> </a-row>
</a-col> </a-col>
<a-col :span="24"> <a-col :span="24">
@ -43,20 +55,42 @@ import { defHttp } from '/@/utils/http/axios';
const barMultiData = reactive<any>([]); const barMultiData = reactive<any>([]);
const queryParam = ref<any>({}); const queryParam = ref<any>({});
const djzData = reactive<any>([]);
const list = (queryParam) => defHttp.get({ url: '/qa/kcEvaluation/getPkztjTjt', params:queryParam }); const list = (queryParam) => defHttp.get({ url: '/qa/kcEvaluation/getPkztjTjt', params:queryParam });
const listDjz = (queryParam) => defHttp.get({ url: '/kcSysConfig/kcSysConfig/getDjz', params:queryParam });
// //
onMounted(() => { onMounted(() => {
const format = 'yyyy-MM-dd'; // const format = 'yyyy-MM-dd';
const startTime = new Date(); // const startTime = new Date();
startTime.setTime(startTime.getTime()-60000*60*24*7) // startTime.setTime(startTime.getTime()-60000*60*24*7)
queryParam.value.startTime = dateFormat(startTime, format) // queryParam.value.startTime = dateFormat(startTime, format)
queryParam.value.endTime = dateFormat(new Date(), format) // queryParam.value.endTime = dateFormat(new Date(), format)
// loadData()
listDjz({}).then(res=>{
console.log(`🚀 ~ file: tkztj.vue:59 ~ list ~ res:`, res)
var list = res
var kssj = "";
for(var i=0;i<list.length;i++){
var dqsj = list[i].bxqkssj+","+list[i].bxqjssj
djzData.push({bxqkssj:dqsj,flag1:list[i].flag1})
if(list[i].flag2 == '1'){
kssj = dqsj
}
}
console.log(`🚀 ~ file: tkztj.vue:81 ~ listDjz ~ kssj:`, kssj)
queryParam.value.djz = kssj
loadData() loadData()
})
}); });
function loadData(){ function loadData(){
barMultiData.length = 0 barMultiData.length = 0
var dqsj = queryParam.value.djz
var sjjh = dqsj.split(",");
queryParam.value.startTime = sjjh[0]
queryParam.value.endTime = sjjh[1]
list(queryParam.value).then(res=>{ list(queryParam.value).then(res=>{
console.log(`🚀 ~ file: tkztj.vue:59 ~ list ~ res:`, res) console.log(`🚀 ~ file: tkztj.vue:59 ~ list ~ res:`, res)
var list = res var list = res

View File

@ -90,13 +90,9 @@ const listDjz = (queryParam) => defHttp.get({ url: '/kcSysConfig/kcSysConfig/get
barMultiData.length = 0 barMultiData.length = 0
var dqsj = queryParam.value.djz var dqsj = queryParam.value.djz
console.log(`🚀 ~ file: tkztj.vue:93 ~ loadData ~ dqsj:`, dqsj)
var sjjh = dqsj.split(","); var sjjh = dqsj.split(",");
console.log(`🚀 ~ file: tkztj.vue:95 ~ loadData ~ sjjh:`, sjjh)
queryParam.value.startTime = sjjh[0] queryParam.value.startTime = sjjh[0]
queryParam.value.endTime = sjjh[1] queryParam.value.endTime = sjjh[1]
console.log(`🚀 ~ file: tkztj.vue:97 ~ loadData ~ queryParam.value:`, queryParam.value)
list(queryParam.value).then(res=>{ list(queryParam.value).then(res=>{
console.log(`🚀 ~ file: tkztj.vue:59 ~ list ~ res:`, res) console.log(`🚀 ~ file: tkztj.vue:59 ~ list ~ res:`, res)

View File

@ -0,0 +1,341 @@
<template>
<div id="siteMain">
<div id="maxSite">
<a-layout v-show="isAdd">
<!-- 页头 -->
<headerPage/>
<!-- 主体部分 -->
<a-layout-content>
<a-card>
<template #title>
<div style="text-align: center; font-size: 24px;font-weight: bold;">
<!-- 听课足迹{{ $route.query.ktId }}-{{ $route.query.type }} -->
<span v-if="$route.query.type == '4'">东北师范大学本科课堂教学质量评价表同行专家用</span>
<span v-else-if="$route.query.type == '3'">东北师范大学听课记录表</span>
<span v-else-if="$route.query.type == '2'">线上教学课堂看课听课评价表</span>
</div>
<div style="text-align: center; font-size: 16px;font-weight: bold;font-weight: 400;line-height: 1;color: #777;">
<!-- 学院名课程名授课教师 -->
{{ form.kcmc }}-{{ form.kkdw }}-{{ form.skjs }}
<div style="padding: 0.5rem;">
{{ form.skrq }}-{{ form.hh }}-{{ form.skdd }}
</div>
<!-- kcmc,kkdw,skjs -->
</div>
</template>
<div style="text-align: left;font-size: 1rem;font-weight: 700;margin: 1rem;">
<span v-if="$route.query.type == '4'">该评价表是专门为该课程方面的专家/教师听课研制的评价表更能反映该课堂的教学质量</span>
<span v-else-if="$route.query.type == '3'">该评价表是方便行政人员和非该课程所属学科的教师听课使用的评价表主要用来反映课堂教学的整体情况</span>
<span v-else-if="$route.query.type == '2'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该评价表是根据线上课堂的特点研制的如果您听的是线上课堂请您填写该评价表如果您同时是该课程所属学科的专家/教师也欢迎您同时填写同行评价表</span>
</div>
<div style="font-weight: 600;padding: 20px;">
<a-row>
<a-col :span="8">教师姓名<a-input v-model:value="userInfo.upuser" placeholder="请填写教师姓名/学生姓名" style="width:200px"></a-input></a-col>
<a-col :span="8">教师工号<a-input v-model:value="userInfo.upuserid" placeholder="请填写教师工号/学号" style="width:200px"></a-input></a-col>
<a-col :span="8">填写时间<a-date-picker show-time placeholder="请选择填写时间" valueFormat="YYYY-MM-DD HH:mm:ss" @change="onChange" v-model:value="userInfo.upTimestamp"/></a-col>
</a-row>
</div>
<div style="padding: 0 15rem;font-weight: 700;">
<a-row :gutter="[16,16]">
<a-col :span="24" v-for="(item,index) in list" :key="index">
<template v-if="item.isrequire != 0"><span style="color:red;">*</span></template>
{{ index + 1 }}.{{ item.content }}
<a-row>
<template v-if="item.quetype == 3">
<a-col :span="24">
<a-textarea v-model:value="selectedMap[item.id]"></a-textarea>
</a-col>
</template>
<template v-else-if="item.quetype == 1">
<a-radio-group v-model:value="selectedMap[item.id]">
<a-col :span="24" v-for="(ans,ansIndex) in item.list" :key="ansIndex">
<a-radio :value="ans.id">
{{ ansIndex + 1 }}{{ ans.content }}
</a-radio>
</a-col>
</a-radio-group>
</template>
<template v-else-if="item.quetype == 2">
<a-checkbox-group v-model:value="selectedMap[item.id]">
<a-col :span="24" v-for="(ans,ansIndex) in item.list" :key="ansIndex">
<a-checkbox :value="ans.id">
{{ ansIndex + 1 }}{{ ans.content }}
</a-checkbox>
</a-col>
</a-checkbox-group>
</template>
<!-- <a-col :span="24" v-for="(ans,ansIndex) in item.list" :key="ansIndex">
<template v-if="item.quetype == 1">
单选
</template>
<template v-if="item.quetype == 2">
多选
</template>
{{ ansIndex + 1 }}{{ ans.content }}
</a-col> -->
</a-row>
</a-col>
</a-row>
</div>
<div style="text-align: center;padding-top: 1rem;">
<a-button type="primary" style="margin-right: 1rem;" :loading="confirmLoading">取消</a-button>
<a-button type="primary" @click="save" :loading="confirmLoading">提交</a-button>
</div>
<!-- <div>
{{ selectedMap }}
</div> -->
<!--<div style="border:#777;">
{{ list }}
</div> -->
</a-card>
</a-layout-content>
<!-- 页尾 -->
<footerPage/>
</a-layout>
<div v-show="!isAdd">
<div style="text-align: center;height: calc(100vh);">
<div style="padding: 5rem;font-size: 1.1rem;" class="wenZiJiaCu">
<p>
提交成功
</p>
<p>
您的评价对于我们很重要感谢您的参与
</p>
<p>
您可以<span @click="closeFun">关闭本页</span>或点击下方按钮打开主页
</p>
<p>
<a-button type="primary" :loading="confirmLoading"><RouterLink to="/site/index">返回首页</RouterLink></a-button>
</p>
</div>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, watch, onMounted } from 'vue';
import headerPage from '/@/views/site/common/header.vue';
import footerPage from '/@/views/site/common/footer.vue';
import { defHttp } from '/@/utils/http/axios';
import { useRoute } from 'vue-router'
import { useMessage } from '/@/hooks/web/useMessage';
import { getUserId } from '/@/views/site/utils';
import { Dayjs } from 'dayjs';
enum Api {
queryById = '/ktgl/kcKetangbiao/queryById',
que = '/qa/kcEvaluationque/list',
ans = '/qa/kcEvaluationans/list',
save = '/qa/kcEvaluation/addQaAll',
}
const form = ref<any>({});
const list = ref<any>([]);
const selectedMap = ref<any>({});
const userInfo = ref<any>({});
const confirmLoading = ref<boolean>(false);
const isAdd = ref<boolean>(true);
const { createMessage } = useMessage();
const route = useRoute();
onMounted(() => {
console.log( route.query );
let params = { pageSize: -1, status: 0, column: 'ordernum', order: 'asc' }
let queryQue = defHttp.get({ url: Api.que, params: { ...params, evaluationver: route.query.type } });
let queryAns = defHttp.get({ url: Api.ans, params });
Promise.all([queryQue,queryAns]).then(([resQue, resAns]) => {
let queList = resQue?.records;
let ansList = resAns?.records;
let queMap = {}
queList.forEach(x => {
// x.list = [];
queMap[x.id] = x;
selectedMap.value[x.id] = '';
});
ansList.forEach(x => {
let data = queMap[x.queid];
if(data){
let list = data.list;
if(!list){
list = [];
queMap[x.queid].list = list;
}
list.push(x);
}
});
list.value = queList;
});
defHttp.get({ url: Api.queryById, params: { id: route.query.ktId } }).then(res => {
form.value = res;
});
});
function closeFun(){
window.close();
}
function genAns(x,data,isArray): Array<Object> {
let textanscontent,ansid,queid,upuserid,ketangbiaoid;
if(isArray){
let rList = Array<Object>();
data.forEach(x2 => {
rList.push(...genAns(x,x2,false))
})
return rList;
}else{
queid = x.id;
ansid = data;
if(x.quetype == 3){
textanscontent = data;
ansid = 0;
}
upuserid = getUserId();
ketangbiaoid = route.query.ktId;
return [{ textanscontent,ansid,queid,upuserid,ketangbiaoid }];
}
}
const onChange = (value: Dayjs, dateString: string) => {
console.log('Selected Time: ', value);
console.log('Formatted Selected Time: ', dateString);
};
function save() {
confirmLoading.value = true;
console.log('selectedMap ->',selectedMap);
let $selectedMap = Object.assign({},selectedMap.value);
console.log(`🚀 ~ file: qaShoudongAdd.vue:274 ~ save ~ userInfo:`, userInfo.value.upuserid)
let formData = {
evaluationver: route.query.type,
upuserid: userInfo.value.upuserid,
upuser: userInfo.value.upuser,
upTimestamp:userInfo.value.upTimestamp,
minkcid: route.query.ktId,
ansList: Array<Object>()
};
console.log(`🚀 ~ file: qaShoudongAdd.vue:213 ~ save ~ formData:`, formData)
//
let errorMsg = '';
list.value.forEach(x => {
if(x.isrequire != 0){
let data = $selectedMap[x.id];
if(data){
if(Array.isArray(data)){
if(!data.length){
errorMsg = '有必填选项未填写,请检查后重新提交。';
}else{
formData.ansList.push(...genAns(x,data,true))
}
}else{
formData.ansList.push(...genAns(x,data,false))
}
}else{
// errorMsg = ''+x.id+'-'+x.content + data;
errorMsg = '有必填选项未填写,请检查后重新提交。';
}
}else{
//
let data = $selectedMap[x.id];
if(data){
if(Array.isArray(data)){
if(data.length){
formData.ansList.push(...genAns(x,data,true))
}
}else{
formData.ansList.push(...genAns(x,data,false))
}
}
}
});
if(errorMsg){
confirmLoading.value = false
createMessage.warning(errorMsg);
return;
}
//
defHttp.post({ url: Api.save, params: formData }, { isTransformResponse: false })
.then((res) => {
if (res.success) {
createMessage.success(res.message);
// emit('ok');
isAdd.value = false;
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
// setTimeout(() => {
// confirmLoading.value = false
// },5000)
}
</script>
<style lang="less" scoped>
#siteMain {
// font-size: ;
// height: 100%;
background: #f3f3f4;
#maxSite {
//
max-width: 1170px;
//
margin: 0 auto;
.rowGutter{
margin-top: 1rem;
margin-bottom: 1rem;
}
.ant-layout-header {
color: #fff;
background: #1ab394;
}
.ant-layout-footer {
line-height: 1.5;
background: #FFF;
}
.ant-layout-sider {
color: #fff;
line-height: 120px;
background: #3ba0e9;
}
.ant-layout-content {
min-height: 120px;
color: #000;
line-height: 120px;
background: #f3f3f4;
}
.dictBox :deep(.ant-select) {
width: 100%;
}
}
}
/**暗黑模式特殊配色*/
[data-theme='dark'] #siteMain #maxSite {
.ant-layout-header, .ant-layout-footer {
background: #6aa0c7;
}
.ant-layout-content {
background: #107bcb;
}
.ant-layout-sider {
background: #3499ec;
}
}
.wenZiJiaCu {
font-weight: 700;
}
a {
color: #337ab7;
}
</style>