dbsd_kczx/src/views/kc/statistics/evaluationList/index.vue

341 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div style="width:100%;height: 100%;">
<div class="jeecg-basic-table-form-container">
<a-form @keyup.enter.native="searchQuery" :model="queryParam" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-row :gutter="24">
<a-col :lg="8">
<a-form-item label="学期">
<j-dict-select-tag ref="xqDictTag" placeholder="请选择学期" v-model:value="queryParam.xqxn" dictCode="kc_xqxn_history,title,title,true order by start_time desc"/>
</a-form-item>
</a-col>
<!--<template v-if="toggleSearchStatus">-->
<!-- <a-col :lg="8">
<a-form-item label="开课单位">
<j-dict-select-tag placeholder="请选择开课单位" v-model:value="queryParam.dwmc" dictCode="xxhbuser,DWMC,DWH,true group by DWH"/>
</a-form-item>
</a-col> -->
<a-col :lg="8">
<a-form-item label="开课单位">
<a-input placeholder="请输入开课单位" v-model:value="queryParam.kkdw"/>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="授课教师姓名">
<a-input placeholder="请输入授课教师姓名" v-model:value="queryParam.skjs"/>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="授课教师工号">
<a-input placeholder="请输入授课教师工号" v-model:value="queryParam.skjgh"/>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="评课教师姓名">
<a-input placeholder="请输入评课教师姓名" v-model:value="queryParam.upUserName"/>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="评课教师工号">
<a-input placeholder="请输入评课教师工号" v-model:value="queryParam.upuseridLike"/>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="评课身份">
<j-dict-select-tag placeholder="请选择评课身份" v-model:value="queryParam.tksf" style="width: 100%;" dictCode="kc_tksfrzb,ZWMC,ZWMC,true group by ZWMC" />
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="评课身份">
<!-- <a-input placeholder="请输入评课身份" v-model:value="queryParam.tksfLike"/> -->
<j-dict-select-tag placeholder="请选择评课身份" v-model:value="queryParam.tksfLike" style="width: 100%;" dictCode="pjlbtjsf" />
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="评课教师单位">
<a-input placeholder="请输入评课教师单位" v-model:value="queryParam.tkdwmc"/>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="数据来源">
<j-dict-select-tag
placeholder="请选择数据来源" v-model:value="queryParam.source"
:options="[{ value: 0, label: '课程中心'}, { value: 1, label: '老系统'},{ value: 2, label: '服务大厅'},{ value: 3, label: '纸质评价'}]"
/>
</a-form-item>
</a-col>
<a-col :lg="8">
<a-form-item label="评价量表">
<!-- // sourceDictMap.put(1,"老系统"); -->
<j-dict-select-tag
placeholder="请选择评价量表" v-model:value="queryParam.evaluationver"
:options="[{ value: 2, label: '线上课堂评价表'},{ value: 3, label: '听课记录表'},{ value: 4, label: '同行评价表'}]"
/>
</a-form-item>
</a-col>
<!--</template>-->
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
<a-col :lg="6">
<a-button type="primary" preIcon="ant-design:search-outlined" @click="searchQuery">查询</a-button>
<a-button type="primary" preIcon="ant-design:reload-outlined" @click="searchReset" style="margin-left: 8px">重置</a-button>
<a-button v-if="roleList.filter(x => x.roleCode == 'admin' ).length" type="primary" preIcon="ant-design:export-outlined" @click="onExportXls()" style="margin-left: 8px">导出</a-button>
<a-button v-else type="primary" preIcon="ant-design:export-outlined" @click="onExportXls2()" style="margin-left: 8px">导出</a-button>
<!--<a @click="toggleSearchStatus = !toggleSearchStatus" style="margin-left: 8px">
{{ toggleSearchStatus ? '收起' : '展开' }}
<Icon :icon="toggleSearchStatus ? 'ant-design:up-outlined' : 'ant-design:down-outlined'"/>
</a>-->
</a-col>
</span>
</a-col>
</a-row>
</a-form>
</div>
<a-table sticky :loading="loading" :data-source="dataSource" :pagination="ipagination" @change="tableChange" bordered size="middle" class="ant-table-striped" :scroll="{ x: 1500 }">
<a-table-column width="120px" title="学期" data-index="xqxn"/>
<a-table-column width="200px" title="课程名称" data-index="kcmc">
<template #default="{ text, record }">
<span>
<a @click="openEve(record)">{{text}}</a>
</span>
</template>
</a-table-column>
<a-table-column width="200px" title="开课单位" data-index="kkdw"/>
<a-table-column width="100px" title="授课教师" data-index="skjs"/>
<a-table-column width="110px" title="授课教师工号" data-index="skjgh"/>
<a-table-column width="110px" title="授课日期" data-index="skrq"/>
<a-table-column width="80px" title="授课时间" data-index="sksj"/>
<a-table-column width="80px" title="授课节次" data-index="jieci"/>
<a-table-column width="150px" title="授课地点" data-index="skdd"/>
<a-table-column width="200px" title="评课教师单位" data-index="tkdwmc"/>
<a-table-column width="110px" title="评课教师工号" data-index="tkjgh"/>
<a-table-column width="110px" title="评课教师姓名" data-index="tkjsxm"/>
<a-table-column width="150px" title="评课身份" data-index="tksf"/>
<!-- 管理员才能看结果 -->
<a-table-column width="200px" v-if="roleList.filter(x => x.roleCode == 'admin' ).length" title="评课评价结果5分制" data-index="tkpjjg"/>
<!-- <a-table-column title="评价量表" data-index="sourceName"/> -->
<!-- 一般听课表、线上听课表、同行评价表
evaluationver -->
<a-table-column width="100px" title="评价量表" align="center" data-index="pjlblx"/>
<!-- <template #default="{ text }">
<span v-if="text == '2'">线上课堂评价表</span>
<span v-else-if="text == '3'">听课记录表</span>
<span v-else-if="text == '4'">同行评价表</span>
</template> -->
<!-- </a-table-column> -->
<a-table-column width="100px" title="数据来源" data-index="sourceName"/>
</a-table>
</div>
<a-modal :visible="isShowAllLive" width="80%" style="top: 20px" title="直播" :ok-button-props="{ style: { display: 'none' } }" cancelText="关闭" @cancel="() => (isShowAllLive = false,showAllLiveRef.close())">
<!-- <showAllLive ref="showAllLiveRef" :currentItem="currentItem"/> -->
</a-modal>
<viewModalPage ref="viewModal"/>
</template>
<script lang="ts" setup name="viewsKcStatisticsEvaluationListIndex">
import { defHttp } from '/@/utils/http/axios';
import { ref, onMounted, Ref, watch, reactive, computed } from 'vue';
import { nextTick } from 'vue';
import { useMessage } from '/@/hooks/web/useMessage';
import { execAvyApi, getAvyCtrlLiveOpenOrCloseUrl } from "/@/views/site/utils/index";
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { useMethods } from '/@/hooks/system/useMethods';
import { JInput } from '/@/components/Form';
import { getUserInfo } from '/@/views/site/utils/index';
import viewModalPage from '/@/views/site/tingKeZuJi/components/viewModal.vue';
const showAllLiveRef = ref();
const viewModal = ref();
const leftList:Ref<any> = ref([]);
const currentItem:Ref<any> = ref({});
const showAllLiveKey:Ref<string> = ref('showAllLiveKey');
const isShowAllLive:Ref<boolean> = ref(false);
const loading:Ref<boolean> = ref(false);
const dataSource = ref<any>([]);
const queryParam:Ref<any> = ref({});
const { createMessage } = useMessage();
onMounted(() => {
loadData(1);
});
const roleList = computed(() => getUserInfo()?.roleList??[]);
enum Api {
list = '/statistics/getEvaluationList',
}
/**
* 列表接口
* @param params
*/
const list = (params) => defHttp.get({ url: Api.list, params });
const labelCol = reactive({
xs: { span: 24 },
sm: { span: 7 },
});
const wrapperCol = reactive({
xs: { span: 24 },
sm: { span: 16 },
});
const ipagination = ref(
{
current: 1,
pageSize: 10,
pageSizeOptions: ['10', '20', '30'],
showTotal: (total, range) => {
return range[0] + '-' + range[1] + ' 共' + total + '条';
},
showQuickJumper: true,
showSizeChanger: true,
total: 0,
}
);
const xqDictTag = ref();
watch(() => xqDictTag.value?.dictOptions,(d) => {
if(d){
queryParam.value.xqxn = d[0]?.value
nextTick(() => {
loadData(1);
})
}
},{
deep:true,
immediate:true,
});
function loadData(pageNo?){
loading.value = true;
let params = { pageNo: 0, pageSize: 10 };
params.pageNo = ipagination.value.current;
params.pageSize = ipagination.value.pageSize;
if(pageNo === 1){
params.pageNo = 1;
}
list({ ...params, ...queryParam.value }).then(res => {
dataSource.value = (res?.records) ?? [];
ipagination.value.total = res.total;
}).finally(() => {
loading.value = false;
});
}
function tableChange(pagination) {
ipagination.value.current = pagination.current;
ipagination.value.pageSize = pagination.pageSize;
loadData();
}
/**
* 查询
*/
function searchQuery() {
loadData(1);
}
/**
* 重置
*/
function searchReset() {
queryParam.value = {};
//刷新数据
loadData(1);
}
function openEve(record){
let { tkjgh, evaluationver, minkcid, kcmc, skjs, WEEK, hh } = record
let param = { userid: tkjgh, ketangbiaoid: minkcid, evaluationver, kcmc, skjs, WEEK, hh }
viewModal.value.view(param)
}
//导入导出方法
const { handleExportXls } = useMethods();
// 导出 excel
function onExportXls() {
let url = '/statistics/exportEvaluationXls';
if (url) {
let title = '评价量表统计';
return handleExportXls(title as string, url, queryParam.value);
} else {
createMessage.warn('没有传递 export.url 参数');
return Promise.reject();
}
}
// 导出 excel
function onExportXls2() {
let url = '/statistics/exportEvaluationXls2';
if (url) {
let title = '评价量表统计';
return handleExportXls(title as string, url, queryParam.value);
} else {
createMessage.warn('没有传递 export.url 参数');
return Promise.reject();
}
}
</script>
<style lang="less" scoped>
.videoMax{
width: 25%;
}
.videoCardMain {
:deep(.ant-card-body) {
padding: 0;
}
}
/* 隐藏video 进度条 */
video::-webkit-media-controls-timeline {
display: none;
}
.green {
color: green;
}
.red {
color: red;
}
.jeecg-basic-table-form-container {
.ant-form {
padding: 12px 10px 6px 10px;
margin-bottom: 8px;
background-color: #fff;
border-radius: 2px;
}
.table-page-search-submitButtons {
display: block;
margin-bottom: 24px;
white-space: nowrap;
}
.query-group-cust{
width: calc(50% - 15px);
min-width: 100px !important;
}
.query-group-split-cust{
width: 30px;
display: inline-block;
text-align: center
}
}
.jeecg-basic-table-form-containera{
line-height: 24px;
background: #fff;
padding: 20px 0 0 10px;
margin-bottom: -20px;
}
.jeecg-basic-table .ant-table-wrapper .ant-table-title {
min-height: 0px !important;
padding: 0 0 8px 0 !important;
}
</style>