Merge remote-tracking branch 'yx/250605-added-yzt' into test20250220

This commit is contained in:
joshen
2025-06-13 17:26:49 +08:00
6 changed files with 1634 additions and 652 deletions

View File

@@ -48,4 +48,39 @@ export const professionalPageList = (obj) => http.post('/reportsnake/report/getP
//所有模块总数
export const reportAllTotal = (obj) => http.post('/reportsnake/report/getReportAllTotal', obj);
// 专业力列表
export const boeuGrowthPlatePageList = (obj) => http.post('/boeu/grow/pageList', obj)
export const boeuGrowthPlatePageList = (obj) => http.post('/boeu/grow/pageList', obj)
// 学员列表
export const studentReportPageList = (obj) => http.post('/reportsnake/report/studentReportList', obj)
//项目任务表
export const projectTaskReportList = (obj) => http.post('/reportsnake/report/projectTaskReportList', obj)
//项目学员表
export const projectStudentReportList = (obj) => http.post('/reportsnake/report/projectStudentReportList', obj)
//学习路径关卡表
export const routerChapterReportList = (obj) => http.post('/reportsnake/report/routerChapterReportList', obj)
//学习路径任务报告列表
export const routerTaskReportList = (obj) => http.post('/reportsnake/report/routerTaskReportList', obj)
//学习路径学员报告列表
export const routerStudentReportList = (obj) => http.post('/reportsnake/report/routerStudentReportList', obj)
//面授讲师报告列表
export const offCourseTeacherReportList = (obj) => http.post('/reportsnake/report/offCourseTeacherReportList', obj)
//面授学员报告列表
export const offCourseStudentReportList = (obj) => http.post('/reportsnake/report/offCourseStudentReportList', obj)
//在线课课件报告列表
export const onlineCourseContentReportList = (obj) => http.post('/reportsnake/report/onlineCourseContentReportList', obj)
//在线课学员报告列表
export const onlineCourseStudentReportList = (obj) => http.post('/reportsnake/report/onlineCourseStudentReportList', obj)
//考试学员报告列表
export const examTestStudentReportList = (obj) => http.post('/reportsnake/report/examTestStudentReportList', obj)
//案例作者报告列表
export const caseAuthorReportList = (obj) => http.post('/reportsnake/report/caseAuthorReportList', obj)
//专业力任务报告列表
export const professionalTaskReportList = (obj) => http.post('/reportsnake/report/professionalTaskReportList', obj)
//专业力学员报告列表
export const professionalStudentReportList = (obj) => http.post('/reportsnake/report/professionalStudentReportList', obj)

View File

@@ -0,0 +1,117 @@
<template>
<a-tooltip title="列设置">
<a-dropdown :placement="props.placement" v-model:visible="visible" :trigger="['click']">
<a-button type="primary">列设置</a-button>
<template #overlay>
<div style="z-index: 9999;background: #fff;padding: 10px;">
<div style="display: flex;justify-content: space-between;align-items: center;">
<div>
<a-checkbox
v-model:checked="state.checkAll"
:indeterminate="state.indeterminate"
@change="onCheckAllChange"
/>
</div>
<div>
<a-button type="link" @click="colReset">重置</a-button>
</div>
</div>
<a-divider style="margin-top: 5px;margin-bottom: 10px;"/>
<div>
<a-checkbox-group v-model:value="state.checkedList" style="width: 100%">
<draggable
:list="props.columns"
ghost-class="ghost"
chosen-class="chosenClass"
animation="300"
@start="onStart"
@end="onEnd"
>
<template #item="{ element }">
<div class="item">
<a-checkbox :value="element.key"> {{ element.title }}</a-checkbox>
</div>
</template>
</draggable>
</a-checkbox-group>
</div>
</div>
</template>
</a-dropdown>
</a-tooltip>
</template>
<script setup>
import { ref, reactive, watch, onMounted } from 'vue';
import draggable from 'vuedraggable';
const visible = ref(false);
const props = defineProps({
columns: {
type: Array,
default: [],
},
placement: {
type: String,
default: 'bottom'
}
})
const state = reactive({
indeterminate: false,
checkAll: false,
checkedList: [],
});
onMounted(() => {
let keys = props.columns.map(function(item){
if(item.visible){
return item.key
}
});
state.checkedList = keys;
if(keys.length>0){
state.indeterminate = true;
}
if(keys.length===props.columns.length){
state.indeterminate = false;
state.checkAll = true;
}
})
watch(() => state.checkedList, val => {
state.indeterminate = !!val.length && val.length < props.columns.length;
state.checkAll = val.length === props.columns.length;
props.columns.map(function(item){
if(state.checkedList.includes(item.key)){
item.visible = true;
}else{
item.visible = false;
}
})
});
const colReset = () => {
props.columns.sort((a, b) => a.colSortNo - b.colSortNo);
props.columns.map(function(item){
item.visible = true;
})
let keys = props.columns.map(function(item){
return item.key
})
state.checkedList = keys;
state.indeterminate = false;
state.checkAll = true;
}
//拖拽开始的事件
const onStart = () => {
console.log("开始拖拽");
};
//拖拽结束的事件
const onEnd = () => {
console.log("结束拖拽");
}
const onCheckAllChange = (e) => {
Object.assign(state, {
checkedList: e.target.checked ? props.columns.map(function(item) {return item.key}) : [],
indeterminate: false,
});
};
</script>

View File

@@ -47,15 +47,14 @@
</a-input>
</div>
<div class="select">
<a-select
ref="select"
<a-input
style="width: 100%; height: 40px; border-radius: 8px"
placeholder="请输入岗位名称"
v-model:value="studentJobName"
allowClear
v-model:value="valueCourseType"
style="width: 100%"
:options="optionsCourseType"
placeholder="有无授课次数"
@change="handleCourseTypeChange"
></a-select>
showSearch
>
</a-input>
</div>
<div class="select">
<!-- <a-input
@@ -89,33 +88,75 @@
</div>
</div>
<!-- 以下为导出按钮 -->
<div class="btnzs">
<div class="btnz btnz3" @click="exportAllbtnz" style="margin-right: 20px">
<div>
<img src="../../assets/images/coursewareManage/export1.png" alt="" />
<div style="display: flex;justify-content: space-between;">
<div class="btnzs">
<div class="btnz btnz3" @click="exportAllbtnz" style="margin-right: 20px">
<div>
<img src="../../assets/images/coursewareManage/export1.png" alt="" />
</div>
<div class="btnzText">导出全部</div>
</div>
<div class="btnz btnz3" @click="exportbtnz" style="margin-right: 20px">
<div>
<img src="../../assets/images/coursewareManage/export1.png" alt="" />
</div>
<div class="btnzText">导出</div>
</div>
<div class="btnzText">导出全部</div>
</div>
<div class="btnz btnz3" @click="exportbtnz">
<div>
<img src="../../assets/images/coursewareManage/export1.png" alt="" />
</div>
<div class="btnzText">导出</div>
<div class="btnz btnz3" style="margin-right: 38px;">
<!-- <TableColSet v-model:columns="columns" v-model:placement="left"/> -->
</div>
</div>
<!-- 以下为table表格 -->
<div class="tableBox">
<a-table
:columns="columns"
:columns="columns.filter(n => n.visible==true)"
:data-source="tableData"
:loading="tableLoading"
:scroll="{ x: 700 }"
:pagination="false"
@change="handleTableChange"
:row-selection="{
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
}"
>
<template v-slot:header>
<draggable
v-model="columns"
item-key="key"
:list="columns"
:group="{ name: 'columns', pull: 'clone', put: false }"
>
<template #item="{ element }">
<a-table-column :title="element.title" :dataIndex="element.dataIndex" :key="element.key"></a-table-column>
</template>
</draggable>
</template>
<template #bodyCell="{ record, column }">
<template v-if="column.key === 'projectCompletedNum'">
<div style="color: #02a7f0; cursor: pointer;" @click="openModal(record.studentId,1)">{{ record.projectCompletedNum }}</div>
</template>
<template v-if="column.key === 'routerCompletedNum'">
<div style="color: #02a7f0; cursor: pointer;" @click="openModal(record.studentId,2)">{{ record.routerCompletedNum }}</div>
</template>
<template v-if="column.key === 'offCourseCompletedNum'">
<div style="color: #02a7f0; cursor: pointer;" @click="openModal(record.studentId,3)">{{ record.offCourseCompletedNum }}</div>
</template>
<template v-if="column.key === 'onlineCompletedNum'">
<div style="color: #02a7f0; cursor: pointer;" @click="openModal(record.studentId,4)">{{ record.onlineCompletedNum }}</div>
</template>
<template v-if="column.key === 'examCompletedNum'">
<div style="color: #02a7f0; cursor: pointer;" @click="openModal(record.studentId,5)">{{ record.examCompletedNum }}</div>
</template>
<template v-if="column.key === 'caseViewsNum'">
<div style="color: #02a7f0; cursor: pointer;" @click="openModal(record.studentId,6)">{{ record.caseViewsNum }}</div>
</template>
<template v-if="column.key === 'professionalCompeletedNum'">
<div style="color: #02a7f0; cursor: pointer;" @click="openModal(record.studentId,7)">{{ record.professionalCompeletedNum }}</div>
</template>
</template>
</a-table>
<div class="tableBox">
<div class="pa">
@@ -133,6 +174,13 @@
</div>
</div>
</div>
<EmployeelearningModal
v-if='isModalVisible'
v-model:isModalVisible="isModalVisible"
v-model:modalType="modalType"
v-model:studentId="currentStudentId"
/>
</div>
</template>
<script lang="jsx">
@@ -143,8 +191,16 @@ import Cookies from "vue-cookies";
import axios from "axios";
import downLoad from "../../utils/downLoad";
import { useStore } from "vuex";
import draggable from 'vuedraggable';
import EmployeelearningModal from './EmployeelearningModal.vue';
import TableColSet from '../../components/common/TableColSet.vue';
export default {
name: "EmployeelearninG",
components: {
EmployeelearningModal: EmployeelearningModal,
draggable:draggable,
TableColSet:TableColSet
},
setup() {
const store = useStore();
const state = reactive({
@@ -162,7 +218,7 @@ export default {
allowClear:true,
resetOrgId:[],
valueBand: null,
valueCourseType: null,
studentJobName: null,
optionsBand:[
{value: 'Band1',label: 'Band1',},
{value: 'Band2',label: 'Band2',},
@@ -195,6 +251,10 @@ export default {
label: '否',
},
],
isModalVisible:false,
currentStudentId:null,
modalType:null,
tableSorts:[]
});
const focusBand = () => {
@@ -207,7 +267,7 @@ export default {
};
const handleCourseTypeChange = (value) => {
console.log(`selected handleCourseTypeChange ${value}`);
state.valueCourseType = value;
state.studentJobName = value;
};
// table选中
const onSelectChange = (selectedRowKeys, record) => {
@@ -273,132 +333,238 @@ export default {
};
// 表格数据
let tableData = ref([]);
// cloumns 表头
// cloumns 表头 colSortNo:列默认排序号
const columns = ref([
{
title: "工号",
dataIndex: "userNo",
key: "userNo",
dataIndex: "studentUserNo",
key: "studentUserNo",
width: 120,
ellipsis: true,
align: "center",
colSortNo: 1,
visible: true,
},
{
title: "姓名",
dataIndex: "userName",
dataIndex: "studentName",
ellipsis: true,
key: "userName",
key: "studentName",
width: 120,
align: "center",
sorter: true,
colSortNo: 2,
visible: true,
},
{
title: "属组织",
dataIndex: "orgName",
title: "属组织",
dataIndex: "studentOrgName",
ellipsis: true,
key: "orgName",
key: "studentOrgName",
width: 120,
align: "center",
sorter: true,
colSortNo: 3,
visible: true,
},
{
title: "岗位",
dataIndex: "positionName",
title: "所诉岗位",
dataIndex: "studentJobName",
ellipsis: true,
key: "positionName",
key: "studentJobName",
width: 120,
align: "center",
sorter: true,
colSortNo: 4,
visible: true,
},
{
title: "Band",
dataIndex: "bandCode",
title: "所在Band",
dataIndex: "bandInfo",
ellipsis: true,
key: "bandCode",
key: "bandInfo",
width: 120,
align: "center",
sorter: true,
colSortNo: 5,
visible: true,
},
{
title: "授课次数",
dataIndex: "teachingTimes",
title: "项目完成数",
dataIndex: "projectCompletedNum",
ellipsis: true,
key: "teachingTotal",
key: "projectCompletedNum",
width: 120,
align: "center",
colSortNo: 6,
visible: true,
},
{
title: "授课时长",
dataIndex: "teachingDuration",
title: "项目完成率",
dataIndex: "projectCompletedRate",
ellipsis: true,
key: "teachingDuration",
key: "projectCompletedRate",
width: 120,
align: "center",
sorter: true,
colSortNo: 7,
visible: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";},
},
{
title: "案例创建",
dataIndex: "cases",
title: "学习路径完成关卡数",
dataIndex: "routerCompletedNum",
ellipsis: true,
key: "cases",
key: "routerCompletedNum",
width: 180,
align: "center",
colSortNo: 8,
visible: true,
},
{
title: "学习路径完成率",
dataIndex: "routerCompletedRate",
ellipsis: true,
key: "routerCompletedRate",
width: 160,
align: "center",
colSortNo: 9,
visible: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{
title: "面授完成数",
dataIndex: "offCourseCompletedNum",
ellipsis: true,
key: "offCourseCompletedNum",
width: 120,
align: "center",
colSortNo: 10,
visible: true,
},
{
title: "课程学习",
dataIndex: "courseStudy",
title: "面授完成率",
dataIndex: "offCourseCompletedRate",
ellipsis: true,
key: "courseStudy",
key: "offCourseCompletedRate",
width: 120,
align: "center",
colSortNo: 11,
visible: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{
title: "项目学习",
dataIndex: "projectStudy",
title: "在线课完成数",
dataIndex: "onlineCompletedNum",
ellipsis: true,
key: "projectStudy",
key: "onlineCompletedNum",
width: 130,
align: "center",
colSortNo: 12,
visible: true,
},
{
title: "在线课学习总时长",
dataIndex: "onlineCompletedDuration",
ellipsis: true,
key: "onlineCompletedDuration",
width: 160,
align: "center",
colSortNo: 13,
visible: true,
},
{
title: "考试完成数",
dataIndex: "examCompletedNum",
ellipsis: true,
key: "examCompletedNum",
width: 120,
align: "center",
colSortNo: 14,
visible: true,
},
{
title: "路径图学习",
dataIndex: "routerStudy",
title: "考试及格数",
dataIndex: "examPassNum",
ellipsis: true,
key: "routerStudy",
key: "examPassNum",
width: 120,
align: "center",
colSortNo: 15,
visible: true,
},
{
title: "专业力学习",
dataIndex: "growthStudy",
title: "考试及格率",
dataIndex: "examPassRate",
ellipsis: true,
key: "growthStudy",
key: "examPassRate",
width: 120,
align: "center",
colSortNo: 16,
visible: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{
title: "学习时长",
dataIndex: "learningDuration",
title: "案例贡献数",
dataIndex: "caseNum",
ellipsis: true,
key: "learningDuration",
key: "caseNum",
width: 120,
align: "center",
colSortNo: 17,
visible: true,
},
{
title: "操作",
dataIndex: "operation",
key: "operation",
width: 150,
title: "案例浏览数",
dataIndex: "caseViewsNum",
ellipsis: true,
key: "caseViewsNum",
width: 120,
align: "center",
fixed: "right",
customRender: (record) => {
return (
<a
key="export"
onClick={() => {
oneExport(record);
}}
>
导出详细信息
</a>
);
},
colSortNo: 18,
visible: true,
},
{
title: "专业力必修完成数",
dataIndex: "professionalCompeletedNum",
ellipsis: true,
key: "professionalCompeletedNum",
width: 180,
align: "center",
colSortNo: 19,
visible: true,
},
{
title: "专业力必修完成率",
dataIndex: "professionalCompletedRate",
ellipsis: true,
key: "professionalCompletedRate",
width: 180,
align: "center",
colSortNo: 20,
visible: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
// {
// title: "操作",
// dataIndex: "operation",
// key: "operation",
// width: 150,
// align: "center",
// fixed: "right",
// customRender: (record) => {
// return (
// <a
// key="export"
// onClick={() => {
// oneExport(record);
// }}
// >
// 导出详细信息
// </a>
// );
// },
// },
]);
// 行内单条下载
const oneExport = (record) => {
@@ -422,14 +588,15 @@ export default {
// 获取数据
const getTableData = async () => {
state.tableLoading = true;
const res = await api.boeuStudyDataPageList({
const res = await api.studentReportPageList({
page: state.pageNo,
size: state.pageSize,
userNo: state.userNo,
name: state.name,
departmentId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
orgId: state.orgId,
bandCode: state.valueBand,
hasTeach: state.valueCourseType,
jobName: state.studentJobName,
tableSorts: state.tableSorts
});
if (res) {
state.tableDataTotal = res.data.result.total;
@@ -450,11 +617,17 @@ export default {
state.band = "";
state.userNo = "";
state.valueBand = null;
state.valueCourseType = null;
state.studentJobName = null;
state.orgId = state.resetOrgId;
getTableData();
};
const openModal = (studentId, modalType) =>{
state.currentStudentId = studentId;
state.modalType = modalType;
state.isModalVisible = true;
}
// 导出全部按钮
const exportAllbtnz = async () => {
axios({
@@ -463,9 +636,9 @@ export default {
data: {
userNo: state.userNo,
name: state.name,
departmentId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
orgId: state.orgId,
bandCode: state.valueBand,
hasTeach: state.valueCourseType,
jobName: state.studentJobName,
},
responseType: "blob",
headers: {
@@ -475,9 +648,49 @@ export default {
downLoad(res.data, "学习员工数据.xlsx");
});
};
// 表格 change 事件(分页、排序等)
const handleTableChange = (pag, filters, sorter) => {
const {field, order} = sorter;
if (order) {
state.tableSorts = [{
sortField: field,
sortOrder: order === 'ascend' ? 'asc' : order === 'descend' ? 'desc' : null,
}];
} else {
state.tableSorts = [];
}
getTableData();
};
onMounted(() => {
getOrgList();
state.tableLoading = true;
//getOrgList();
//state.tableLoading = true;
tableData.value = [{
id: '1',
studentId:'111111111',
studentUserNo: '123344',
studentName: '姓名',
studentOrgName: '机构',
studentJobName: '岗位',
bandInfo:'band',
projectCompletedNum:12,
projectCompletedRate:50,
routerCompletedNum:20,
routerCompletedRate:12,
offCourseCompletedNum:12,
offCourseCompletedRate:12,
onlineCompletedNum:12,
onlineCompletedDuration:12,
examCompletedNum:8,
examPassNum:22,
examPassRate:90,
caseNum:2,
caseViewsNum:22,
professionalCompeletedNum:22,
professionalCompletedRate:22,
}]
});
return {
focusBand,
@@ -492,6 +705,8 @@ export default {
tableData,
columns,
changePagination,
openModal,
handleTableChange
};
},
};

View File

@@ -0,0 +1,337 @@
<template>
<a-modal
class="custom-modal"
:title="modelTitle"
:visible="props.isModalVisible"
@cancel="onCancel"
@ok="onCancel"
width="1250px"
>
<a-table
rowKey="id"
:columns="modelColumns"
:data-source="data.dataSource"
:scroll="{ x: 400 }"
:pagination="false"
class="custom-table"
:loading="data.tableLoading"
:rowKey="id"
>
<!-- :loading="tableLoading"-->
<template v-slot:header>
<draggable
v-model="modelColumns"
item-key="key"
:list="modelColumns"
:group="{ name: 'columns', pull: 'clone', put: false }"
>
<template #item="{ element }">
<a-table-column class="draggable-column" :title="element.title" :dataIndex="element.dataIndex" :key="element.key"></a-table-column>
</template>
</draggable>
</template>
</a-table>
<div class="tableBox">
<div class="pa">
<a-pagination
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="data.pageSize"
v-model:current="data.pageNo"
:total="data.total"
class="pagination"
@change="modelChangePagination"
rowKey="id"
:show-total="total => `${total}`"
/>
</div>
</div>
</a-modal>
</template>
<script setup>
import { reactive,ref,onMounted } from "vue";
import draggable from 'vuedraggable';
import * as api from "../../api/indexOvervoew";
const props = defineProps({
isModalVisible: {
type: Boolean,
default: false,
},
modalType:{
type:Number,
default: 1,
},
studentId:{
type:String,
default:''
}
})
const modelColumns = ref([])
const modelTitle = ref('')
const data = reactive({
pageSize: 10,
pageNo: 1,
total: 0,
dataSource: [],
tableLoading: false
})
onMounted(() => {
getModelColumns();
})
const getModelColumns = ()=>{
if(props.modalType==1){
modelTitle.value = '项目'
modelColumns.value = [
{title: "项目名称", dataIndex: "projectName", key: "projectName", ellipsis: true, align: "center",},
{title: "归属组织", dataIndex: "sourceBelongFullName", key: "sourceBelongFullName", ellipsis: true, align: "center",},
{title: "总任务数", dataIndex: "taskCount", key: "taskCount", ellipsis: true, align: "center",},
{title: "完成任务数", dataIndex: "taskCompletedNum", key: "taskCompletedNum", ellipsis: true, align: "center",},
{title: "总任务数完成率", dataIndex: "taskCompletedRate", key: "taskCompletedRate", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "必修项目数", dataIndex: "bxCount", key: "bxCount", ellipsis: true, align: "center",},
{title: "必修项目完成率", dataIndex: "bxCompletedRate", key: "bxCompletedRate", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
]
data.dataSource = [{
id:'2222',
projectName:'项目名称',
sourceBelongFullName:'归属组织',
taskCount: 12,
taskCompletedNum: 10,
taskCompletedRate: 70,
bxCount: 8,
bxCompletedRate: 80,
}]
}else if(props.modalType==2){
modelTitle.value = '学习路径'
modelColumns.value = [
{title: "路径名称", dataIndex: "routerName", key: "routerName", ellipsis: true, align: "center",},
{title: "归属组织", dataIndex: "orgFullName", key: "orgFullName", ellipsis: true, align: "center",},
{title: "关卡数", dataIndex: "chapterNum", key: "chapterNum", ellipsis: true, align: "center",},
{title: "任务数", dataIndex: "taskCount", key: "taskCount", ellipsis: true, align: "center",},
{title: "任务完成数", dataIndex: "taskCompletedNum", key: "taskCompletedNum", ellipsis: true, align: "center",},
{title: "任务完成率", dataIndex: "taskCompletedRate", key: "taskCompletedRate", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "必修任务数", dataIndex: "taskRequiredNum", key: "taskRequiredNum", ellipsis: true, align: "center",},
{title: "必修任务完成率", dataIndex: "taskRequiredCompletedRate", key: "taskRequiredCompletedRate", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
]
data.dataSource = [{
id:'2222',
routerName:'路径名称',
orgFullName:'归属组织',
chapterNum: 30,
taskCount: 12,
taskCompletedNum: 10,
taskCompletedRate: 70,
taskRequiredNum: 8,
taskRequiredCompletedRate: 80,
}]
}else if(props.modalType==3){
modelTitle.value = '面授'
modelColumns.value = [
{title: "面授名称", dataIndex: "offcourseName", key: "offcourseName", ellipsis: true, align: "center",},
{title: "归属组织", dataIndex: "sourceBelongFullName", key: "sourceBelongFullName", ellipsis: true, align: "center",},
{title: "参与时间", dataIndex: "signUpTime", key: "signUpTime", ellipsis: true, align: "center",},
{title: "完成状态", dataIndex: "completedStatus", key: "completedStatus", ellipsis: true, align: "center",
customRender: (text) => {return text.value && text.value == 1?'已结业':"未结业";}
},
]
data.dataSource = [{
id:'2222',
offcourseName:'面授名称',
sourceBelongFullName:'归属组织',
signUpTime: '2025-03-10 10:00:00',
completedStatus: 1,
}]
}else if(props.modalType==4){
modelTitle.value = '在线课程'
modelColumns.value = [
{title: "在线课名称", dataIndex: "courseName", key: "courseName", ellipsis: true, align: "center",},
{title: "归属组织", dataIndex: "sourceBelongFullName", key: "sourceBelongFullName", ellipsis: true, align: "center",},
{title: "学习时间", dataIndex: "studyTime", key: "studyTime", ellipsis: true, align: "center",},
{title: "学习时长", dataIndex: "studyDuration", key: "studyDuration", ellipsis: true, align: "center",},
{title: "累计学习课件数", dataIndex: "coursewareCount", key: "coursewareCount", ellipsis: true, align: "center",},
{title: "完成状态", dataIndex: "completedStatus", key: "completedStatus", ellipsis: true, align: "center",
customRender: (text) => {return text.value && text.value == 1?'已完成':"未完成";}
},
]
data.dataSource = [{
id:'2222',
courseName:'课程名称',
sourceBelongFullName:'归属组织',
studyTime: '2025-03-10 10:00:00',
studyDuration: 30,
coursewareCount: 12,
completedStatus: 0,
}]
}else if(props.modalType==5){
modelTitle.value = '考试'
modelColumns.value = [
{title: "考试名称", dataIndex: "testName", key: "testName", ellipsis: true, align: "center",},
{title: "考试时间", dataIndex: "examTime", key: "examTime", ellipsis: true, align: "center",},
{title: "题量", dataIndex: "questionCount", key: "questionCount", ellipsis: true, align: "center",},
{title: "满分", dataIndex: "totalScore", key: "totalScore", ellipsis: true, align: "center",},
{title: "及格分", dataIndex: "passLine", key: "passLine", ellipsis: true, align: "center",},
{title: "参考时间", dataIndex: "takeExamTime", key: "takeExamTime", ellipsis: true, align: "center",},
{title: "成绩", dataIndex: "score", key: "score", ellipsis: true, align: "center",},
{title: "部门排名", dataIndex: "deptSortNum", key: "deptSortNum", ellipsis: true, align: "center",},
]
data.dataSource = [{
id:'2222',
testName:'考试名称',
examTime: '2025-03-10 10:00:00',
questionCount: 100,
totalScore: 100,
passLine: 60,
takeExamTime: '2025-03-10 10:00:00',
score: 80,
deptSortNum: 20
}]
}else if(props.modalType==6){
modelTitle.value = '案例'
modelColumns.value = [
{title: "案例标题", dataIndex: "caseName", key: "caseName", ellipsis: true, align: "center",},
{title: "案例作者", dataIndex: "authorName", key: "authorName", ellipsis: true, align: "center",},
{title: "创建时间", dataIndex: "caseCreateTime", key: "caseCreateTime", ellipsis: true, align: "center",},
{title: "浏览时间", dataIndex: "viewTime", key: "viewTime", ellipsis: true, align: "center",},
{title: "是否点赞", dataIndex: "isPraises", key: "isPraises", ellipsis: true, align: "center",
customRender: (text) => {return text.value && text.value == 1?'是':"";}
},
{title: "是否评论", dataIndex: "isComments", key: "isComments", ellipsis: true, align: "center",
customRender: (text) => {return text.value && text.value == 1?'是':"";}
},
{title: "是否收藏", dataIndex: "isFavorites", key: "isFavorites", ellipsis: true, align: "center",
customRender: (text) => {return text.value && text.value == 1?'是':"";}
},
]
data.dataSource = [{
id:'2222',
caseName:'案例名称',
authorName:'作者',
caseCreateTime: '2025-03-10 10:00:00',
viewTime: '2025-03-16 10:00:00',
isPraises: 1,
isComments: 0,
isFavorites: 1,
}]
}else if(props.modalType==7){
modelTitle.value = '专业力'
modelColumns.value = [
{title: "岗位名称", dataIndex: "stdPositionName", key: "stdPositionName", ellipsis: true, align: "center",},
{title: "资格等级", dataIndex: "qualsLevelName", key: "qualsLevelName", ellipsis: true, align: "center",},
{title: "band", dataIndex: "bandInfo", key: "bandInfo", ellipsis: true, align: "center",},
{title: "任务总数", dataIndex: "totalTaskNum", key: "totalTaskNum", ellipsis: true, align: "center",},
{title: "必修总数", dataIndex: "requiredTaskNum", key: "requiredTaskNum", ellipsis: true, align: "center",},
{title: "完成总任务数", dataIndex: "completedTaskNum", key: "completedTaskNum", ellipsis: true, align: "center",},
{title: "总任务完成率", dataIndex: "learnCompletedRate", key: "learnCompletedRate", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "完成必修任务数", dataIndex: "requiredTaskCompletedNum", key: "requiredTaskCompletedNum", ellipsis: true, align: "center",},
{title: "必修任务完成率", dataIndex: "requiredTaskCompletedRate", key: "requiredTaskCompletedRate", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "总完成状态", dataIndex: "completedStatus", key: "completedStatus", ellipsis: true, align: "center",
customRender: (text) => {return text.value && text.value == 1?'已完成':"未完成";}
},
]
data.dataSource = [{
id:'2222',
stdPositionName:'岗位名称',
qualsLevelName:'资格等级',
bandInfo:'band',
totalTaskNum: 20,
requiredTaskNum: 16,
completedTaskNum: 12,
learnCompletedRate: 70,
requiredTaskCompletedNum: 10,
requiredTaskCompletedRate: 70,
completedStatus: 0,
}]
}
}
const getTableData = async () => {
data.tableLoading = true;
const res = await api.boeuStudyDataPageList({
page: data.pageNo,
size: data.pageSize,
studentId: studentId
});
data.dataSource = res.data.result.rows || [];
state.tableLoading = false;
};
const emit = defineEmits({})
const onCancel = ()=>{
emit("update:isModalVisible", false);
}
// 监听弹出层分页变化方法
const modelChangePagination = (page) =>{
data.pageNo = page;
getTableData();
}
</script>
<style lang="scss">
.tableBox {
margin: 20px 20px 20px;
.ant-table-thead > tr > th {
background-color: #eff4fc;
}
}
.tableBox {
.pa {
width: 100%;
display: flex;
justify-content: center;
}
}
.custom-modal {
border-radius: 8px;
overflow: hidden;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.custom-modal :deep(.ant-modal-header) {
background: #1890ff;
color: white;
border-radius: 8px 8px 0 0;
}
.custom-modal :deep(.ant-modal-title) {
color: white;
font-weight: 500;
}
.custom-modal :deep(.ant-modal-close-x) {
color: white;
}
.custom-modal :deep(.ant-modal-footer) {
border-top: 1px solid #f0f0f0;
padding: 16px 24px;
}
.custom-table {
border-radius: 6px;
overflow: hidden;
}
.custom-table :deep(.ant-table-thead > tr > th) {
background-color: #fafafa;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
transition: all 0.3s;
}
.custom-table :deep(.ant-table-tbody > tr:hover > td) {
background: #e6f7ff !important;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,520 @@
<template>
<a-modal
class="custom-modal"
:title="modelTitle"
:visible="props.isModalVisible"
@cancel="onCancel"
@ok="onCancel"
width="1250px"
>
<a-table
rowKey="id"
:columns="modelColumns"
:data-source="data.dataSource"
:scroll="{ x: 400 }"
:pagination="false"
class="custom-table"
:loading="data.tableLoading"
:rowKey="id"
>
<!-- :loading="tableLoading"-->
<template v-slot:header>
<draggable
v-model="modelColumns"
item-key="key"
:list="modelColumns"
:group="{ name: 'columns', pull: 'clone', put: false }"
>
<template #item="{ element }">
<a-table-column class="draggable-column" :title="element.title" :dataIndex="element.dataIndex" :key="element.key"></a-table-column>
</template>
</draggable>
</template>
</a-table>
<div class="tableBox">
<div class="pa">
<a-pagination
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="data.pageSize"
v-model:current="data.pageNo"
:total="data.total"
class="pagination"
@change="modelChangePagination"
rowKey="id"
:show-total="total => `${total}`"
/>
</div>
</div>
</a-modal>
</template>
<script setup>
import { reactive,ref,onMounted } from "vue";
import draggable from 'vuedraggable';
import * as api from "../../api/indexOvervoew";
const props = defineProps({
isModalVisible: {
type: Boolean,
default: false,
},
reportType: {
type: String,
default: '',
},
secondReportType: {
type: String,
default: '',
},
currentId: {
type: String,
default: '-1'
},
})
const modelColumns = ref([])
const modelTitle = ref('')
const data = reactive({
pageSize: 10,
pageNo: 1,
total: 0,
dataSource: [],
tableLoading: false
})
onMounted(() => {
getModelColumns();
})
const getModelColumns = ()=>{
//项目
if(props.reportType=='project'){
if(props.secondReportType=='student'){
modelTitle.value = '人员'
modelColumns.value = [
{title: "工号", dataIndex: "studentUserNo",key: "studentUserNo",width: 120,ellipsis: true,},
{title: "姓名",dataIndex: "studentName",key: "studentName",width: 120,ellipsis: true,},
{title: "率属组织",dataIndex: "studentOrgName",key: "studentOrgName",width: 120,ellipsis: true,},
{title: "所在岗位",dataIndex: "studentJobName",key: "studentJobName",width: 120,ellipsis: true,},
{title: "所在band",dataIndex: "bandInfo",key: "bandInfo",width: 120,ellipsis: true,},
{title: "完成进度",dataIndex: "completionProgress",key: "completionProgress",width: 120,ellipsis: true,},
{title: "总任务完成率",dataIndex: "taskCompletedRate",key: "taskCompletedRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "必修完成率",dataIndex: "requiredTaskCompletedRate",key: "requiredTaskCompletedRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "课程完成率",dataIndex: "courseCompletedRate",key: "courseCompletedRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "考试通过率",dataIndex: "examPassRate",key: "examPassRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "作业完成率",dataIndex: "homeworkCompletedRate",key: "homeworkCompletedRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "最近学习时间",dataIndex: "latestStudyTime",key: "latestStudyTime",width: 120,ellipsis: true,},
]
}else if(props.secondReportType=='task'){
modelTitle.value = '任务'
modelColumns.value = [
{title: "阶段名称",dataIndex: "stageName",key: "stageName",width: 120,ellipsis: true,},
{title: "任务名称",dataIndex: "taskName",key: "taskName",width: 120,ellipsis: true,},
{title: "是否必须",dataIndex: "isRequestTask",key: "isRequestTask",width: 120,ellipsis: true,},
{title: "开始时间",dataIndex: "startTime",key: "startTime",width: 120,ellipsis: true,sorter: true,},
{title: "学习人数",dataIndex: "totalParticipantNum",key: "totalParticipantNum",width: 120,ellipsis: true, sorter: true,},
{title: "完成人数",dataIndex: "completedParticipantNum",key: "completedParticipantNum",width: 120,ellipsis: true,sorter: true,},
{title: "进行中人数",dataIndex: "inProgressParticipantNum",key: "inProgressParticipantNum",width: 120,ellipsis: true,sorter: true,},
{title: "未开始人数",dataIndex: "notStartedParticipantNum",key: "notStartedParticipantNum",width: 120,ellipsis: true,sorter: true,},
{title: "任务完成率",dataIndex: "taskCompletedRate",key: "taskCompletedRate",width: 120,ellipsis: true,sorter: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
}
]
}
}else if(props.reportType=='router'){
if(props.secondReportType=='chapter'){
modelTitle.value = '关卡'
modelColumns.value = [
{title: "关卡名称", dataIndex: "chapterName",key: "chapterName",width: 120,ellipsis: true,},
{title: "关卡任务总数",dataIndex: "chapterTaskNum",key: "chapterTaskNum",width: 120,ellipsis: true,},
{title: "必修任务数",dataIndex: "requireTaskNum",key: "requireTaskNum",width: 120,ellipsis: true,},
{title: "选修任务数",dataIndex: "electiveTaskNum",key: "electiveTaskNum",width: 120,ellipsis: true,},
{title: "课程完成率",dataIndex: "courseCompletedRate",key: "courseCompletedRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "考试通过率",dataIndex: "examPassRate",key: "examPassRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "作业完成率",dataIndex: "homeworkCompletedRate",key: "homeworkCompletedRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
]
}else if(props.secondReportType=='task'){
modelTitle.value = '任务'
modelColumns.value = [
{title: "任务名称",dataIndex: "routerTaskName",key: "routerTaskName",width: 120,ellipsis: true,},
{title: "所在关卡",dataIndex: "routerChapterName",key: "routerChapterName",width: 120,ellipsis: true,},
{title: "是否必修",dataIndex: "isRequire",key: "isRequire",width: 120,ellipsis: true,sorter: true,
customRender: (text) => {return text.value && text.value == 1?'是':"";}
},
{title: "开始时间",dataIndex: "startTime",key: "startTime",width: 120,ellipsis: true, sorter: true,},
{title: "学习人数",dataIndex: "totalParticipantNum",key: "totalParticipantNum",width: 120,ellipsis: true,sorter: true,},
{title: "完成人数",dataIndex: "completedParticipantNum",key: "completedParticipantNum",width: 120,ellipsis: true,sorter: true,},
{title: "进行中人数",dataIndex: "inProgressParticipantNum",key: "inProgressParticipantNum",width: 120,ellipsis: true,sorter: true,},
{title: "未开始人数",dataIndex: "notStartedParticipantNum",key: "notStartedParticipantNum",width: 120,ellipsis: true,sorter: true,}
]
}else if(props.secondReportType=='student'){
modelTitle.value = '人员'
modelColumns.value = [
{title: "工号", dataIndex: "studentUserNo",key: "studentUserNo",width: 120,ellipsis: true,},
{title: "姓名",dataIndex: "studentName",key: "studentName",width: 120,ellipsis: true,},
{title: "率属组织",dataIndex: "studentOrgName",key: "studentOrgName",width: 120,ellipsis: true,},
{title: "所在岗位",dataIndex: "studentJobName",key: "studentJobName",width: 120,ellipsis: true,},
{title: "所在band",dataIndex: "bandInfo",key: "bandInfo",width: 120,ellipsis: true,},
{title: "报名方式",dataIndex: "signUpType",key: "signUpType",width: 120,ellipsis: true,
customRender: (text) => {
if(!text.value){
return '-';
}else if(text.value==0 || text.value==4 || text.value==6){
return '导入';
}else if(text.value==1 || text.value==2 || text.value==3){
return '手动加入';
}else if(text.value==5){
return '自主报名';
}else if(text.value==8){
return '扫码报名';
}else{
return '-';
}
}
},
{title: "当前关卡",dataIndex: "currentChapter",key: "currentChapter",width: 120,ellipsis: true,},
{title: "总任务完成率",dataIndex: "taskCompletedRate",key: "taskCompletedRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "必修任务完成率",dataIndex: "requiredTaskCompletedRate",key: "requiredTaskCompletedRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "课程完成率",dataIndex: "courseCompletedRate",key: "courseCompletedRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "考试通过率",dataIndex: "examPassRate",key: "examPassRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "作业完成率",dataIndex: "homeworkCompletedRate",key: "homeworkCompletedRate",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "最近学习时间",dataIndex: "latestStudyTime",key: "latestStudyTime",width: 120,ellipsis: true,},
]
}
}else if(props.reportType=='offcourse'){
if(props.secondReportType=='teacher'){
modelTitle.value = '讲师'
modelColumns.value = [
{title: "开课次数", dataIndex: "totalCourseNum", key: "totalCourseNum", ellipsis: true, align: "center",},
{title: "开课总时长", dataIndex: "totalDuration", key: "totalDuration", ellipsis: true, align: "center",},
{title: "授课总人数", dataIndex: "studentNum", key: "studentNum", ellipsis: true, align: "center",},
{title: "场均人数", dataIndex: "avgStudentNum", key: "avgStudentNum", ellipsis: true, align: "center",},
{title: "平均评分", dataIndex: "avgScore", key: "avgScore", ellipsis: true, align: "center",},
]
}else if(props.secondReportType=='student'){
modelTitle.value = '人员'
modelColumns.value = [
{title: "工号", dataIndex: "studentUserNo",key: "studentUserNo",width: 120,ellipsis: true,},
{title: "姓名",dataIndex: "studentName",key: "studentName",width: 120,ellipsis: true,},
{title: "率属组织",dataIndex: "studentOrgName",key: "studentOrgName",width: 120,ellipsis: true,},
{title: "所在岗位",dataIndex: "studentJobName",key: "studentJobName",width: 120,ellipsis: true,},
{title: "所在band",dataIndex: "bandInfo",key: "bandInfo",width: 120,ellipsis: true,},
{title: "报名时间",dataIndex: "signUpTime",key: "signUpTime",width: 120,ellipsis: true,},
{title: "签到时间",dataIndex: "signInTime",key: "signInTime",width: 120,ellipsis: true,},
{title: "签到状态",dataIndex: "signStatus",key: "signStatus",width: 120,ellipsis: true,
customRender: (text) => {
if(!text.value){
return '-';
}else if(text.value==0){
return '未签到';
}else if(text.value==1){
return '已签到';
}else if(text.value==2){
return '请假';
}else{
return '-';
}
}
},
{title: "作业状态",dataIndex: "workStatus",key: "workStatus",width: 120,ellipsis: true,sorter: true,
customRender: (text) => {return text.value && text.value == 1?'已提交':"未提交";}
},
{title: "考试成绩",dataIndex: "examScore",key: "examScore",width: 120,ellipsis: true,},
{title: "结业状态",dataIndex: "completedStatus",key: "completedStatus",width: 120,ellipsis: true,
customRender: (text) => {return text.value && text.value == 1?'已结业':"未结业";}
},
{title: "讲师评分",dataIndex: "teacherScore",key: "teacherScore",width: 120,ellipsis: true,},
]
}
}else if(props.reportType=='online'){
if(props.secondReportType=='content'){
modelTitle.value = '课件'
modelColumns.value = [
{title: "课件名称", dataIndex: "contentName", key: "contentName", ellipsis: true, align: "center",},
{title: "归属组织", dataIndex: "sourceBelongFullName", key: "sourceBelongFullName", ellipsis: true, align: "center",},
{title: "课件时长", dataIndex: "duration", key: "duration", ellipsis: true, align: "center",},
{title: "学习人数", dataIndex: "studyNum", key: "studyNum", ellipsis: true, align: "center",},
{title: "完成人数", dataIndex: "completedNum", key: "completedNum", ellipsis: true, align: "center",},
{title: "整体完成率", dataIndex: "completedRate", key: "completedRate", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "学习总时长", dataIndex: "studyDuration", key: "studyDuration", ellipsis: true, align: "center",},
{title: "人均学习时长", dataIndex: "studyDurationAvg", key: "studyDurationAvg", ellipsis: true, align: "center",},
{title: "创建时间", dataIndex: "createTime", key: "createTime", ellipsis: true, align: "center",},
{title: "上传人", dataIndex: "uploadUserName", key: "uploadUserName", ellipsis: true, align: "center",},
]
}else if(props.secondReportType=='student'){
modelTitle.value = '人员'
modelColumns.value = [
{title: "工号", dataIndex: "studentUserNo",key: "studentUserNo",width: 120,ellipsis: true,},
{title: "姓名",dataIndex: "studentName",key: "studentName",width: 120,ellipsis: true,},
{title: "率属组织",dataIndex: "studentOrgName",key: "studentOrgName",width: 120,ellipsis: true,},
{title: "所在岗位",dataIndex: "studentJobName",key: "studentJobName",width: 120,ellipsis: true,},
{title: "所在band",dataIndex: "bandInfo",key: "bandInfo",width: 120,ellipsis: true,},
{title: "学习时长",dataIndex: "studyDuration",key: "studyDuration",width: 120,ellipsis: true,},
{title: "学习进度",dataIndex: "studyProgress",key: "studyProgress",width: 120,ellipsis: true,
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "学习状态",dataIndex: "studyStatus",key: "studyStatus",width: 120,ellipsis: true,
customRender: (text) => {
if(!text.value){
return '-';
}else if(text.value==1){
return '未开始学习';
}else if(text.value==2){
return '学习中';
}else if(text.value==8){
return '学习终止';
}else if(text.value==9){
return '学习完成';
}else{
return '-';
}
}
},
{title: "完成时间",dataIndex: "completedTime",key: "completedTime",width: 120,ellipsis: true,},
{title: "最近学习时间",dataIndex: "latestStudyTime",key: "latestStudyTime",width: 120,ellipsis: true,},
{title: "学习成绩",dataIndex: "studyScore",key: "studyScore",width: 120,ellipsis: true,},
]
}
}else if(props.reportType=='exam'){
if(props.secondReportType=='student'){
modelTitle.value = '人员'
modelColumns.value = [
{title: "工号", dataIndex: "studentUserNo",key: "studentUserNo",width: 120,ellipsis: true,},
{title: "姓名",dataIndex: "studentName",key: "studentName",width: 120,ellipsis: true,},
{title: "率属组织",dataIndex: "studentOrgName",key: "studentOrgName",width: 120,ellipsis: true,},
{title: "所在岗位",dataIndex: "studentJobName",key: "studentJobName",width: 120,ellipsis: true,},
{title: "所在band",dataIndex: "bandInfo",key: "bandInfo",width: 120,ellipsis: true,},
{title: "考试状态",dataIndex: "status",key: "status",width: 120,ellipsis: true,
customRender: (text) => {
if(!text.value){
return '-';
}else if(text.value==1){
return '未开始学习';
}else if(text.value==2){
return '学习中';
}else if(text.value==8){
return '学习终止';
}else if(text.value==9){
return '学习完成';
}else{
return '-';
}
}
},
{title: "开考时间",dataIndex: "startTime",key: "startTime",width: 120,ellipsis: true,},
{title: "交卷时间",dataIndex: "endTime",key: "endTime",width: 120,ellipsis: true,},
{title: "答题时长",dataIndex: "duration",key: "duration",width: 120,ellipsis: true,},
{title: "成绩",dataIndex: "score",key: "score",width: 120,ellipsis: true,},
]
}
}else if(props.reportType=='case'){
if(props.secondReportType=='author'){
modelTitle.value = '作者'
modelColumns.value = [
{title: "案例名称", dataIndex: "caseName", key: "caseName", ellipsis: true, align: "center",},
{title: "归属组织", dataIndex: "orgName", key: "orgName", ellipsis: true, align: "center",},
{title: "专业分类", dataIndex: "caseSpecialtySequence", key: "caseSpecialtySequence", ellipsis: true, align: "center",},
{title: "密级", dataIndex: "confidentialityLevel", key: "confidentialityLevel", ellipsis: true, align: "center",},
{title: "浏览量", dataIndex: "viewNum", key: "viewNum", ellipsis: true, align: "center",},
{title: "收藏数", dataIndex: "favoriteNum", key: "favoriteNum", ellipsis: true, align: "center",},
{title: "点赞数", dataIndex: "likeNum", key: "likeNum", ellipsis: true, align: "center",},
{title: "评论数", dataIndex: "commentNum", key: "commentNum", ellipsis: true, align: "center",},
{title: "推荐数", dataIndex: "recommendNum", key: "recommendNum", ellipsis: true, align: "center",},
]
}
}else if(props.reportType=='professional'){
if(props.secondReportType=='task'){
modelTitle.value = '任务'
modelColumns.value = [
{title: "任务名称", dataIndex: "taskName", key: "taskName", ellipsis: true, align: "center",},
{title: "任务类型", dataIndex: "taskType", key: "taskType", ellipsis: true, align: "center",},
{title: "必修/选修", dataIndex: "bxxx", key: "bxxx", ellipsis: true, align: "center",},
{title: "学习人数", dataIndex: "studyNum", key: "studyNum", ellipsis: true, align: "center",},
{title: "学习完成率", dataIndex: "studyCompletedRate", key: "studyCompletedRate", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "考试完成率", dataIndex: "examCompletedRate", key: "examCompletedRate", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
]
}else if(props.secondReportType=='student'){
modelTitle.value = '人员'
modelColumns.value = [
{title: "工号", dataIndex: "studentUserNo",key: "studentUserNo",width: 120,ellipsis: true,},
{title: "姓名",dataIndex: "studentName",key: "studentName",width: 120,ellipsis: true,},
{title: "率属组织",dataIndex: "studentOrgName",key: "studentOrgName",width: 120,ellipsis: true,},
{title: "所在岗位",dataIndex: "studentJobName",key: "studentJobName",width: 120,ellipsis: true,},
{title: "所在band",dataIndex: "bandInfo",key: "bandInfo",width: 120,ellipsis: true,},
{title: "整体进度", dataIndex: "totalTaskProgress", key: "totalTaskProgress", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "必修进度", dataIndex: "requireTaskProgress", key: "requireTaskProgress", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "选修进度", dataIndex: "electiveTaskProgress", key: "electiveTaskProgress", ellipsis: true, align: "center",
customRender: (text) => {return !text.value && text.value != 0?'-':text.value + "%";}
},
{title: "完成状态", dataIndex: "completedStatus", key: "completedStatus", ellipsis: true, align: "center",
customRender: (text) => {return text.value && text.value == 1?'已完成':"未完成";}
},
{title: "开始时间", dataIndex: "startTime", key: "startTime", ellipsis: true, align: "center",},
{title: "完成时间", dataIndex: "completedTime", key: "completedTime", ellipsis: true, align: "center",},
]
}
}
getTableData();
}
const getTableData = async () => {
data.tableLoading = true;
if(props.reportType=='project' && props.secondReportType=='student'){
const res = await api.projectStudentReportList({page: data.pageNo,size: data.pageSize,projectId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='project' && props.secondReportType=='task'){
const res = await api.projectTaskReportList({page: data.pageNo,size: data.pageSize,projectId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='router' && props.secondReportType=='chapter'){
const res = await api.routerChapterReportList({page: data.pageNo,size: data.pageSize,routerId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='router' && props.secondReportType=='student'){
const res = await api.routerStudentReportList({page: data.pageNo,size: data.pageSize,routerId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='router' && props.secondReportType=='task'){
const res = await api.routerTaskReportList({page: data.pageNo,size: data.pageSize,routerId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='offcourse' && props.secondReportType=='teacher'){
const res = await api.offCourseTeacherReportList({page: data.pageNo,size: data.pageSize,offCourseId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='offcourse' && props.secondReportType=='student'){
const res = await api.offCourseStudentReportList({page: data.pageNo,size: data.pageSize,offCourseId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='online' && props.secondReportType=='content'){
const res = await api.onlineCourseContentReportList({page: data.pageNo,size: data.pageSize,courseId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='online' && props.secondReportType=='student'){
const res = await api.onlineCourseStudentReportList({page: data.pageNo,size: data.pageSize,courseId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='exam' && props.secondReportType=='student'){
const res = await api.examTestStudentReportList({page: data.pageNo,size: data.pageSize,testId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='case' && props.secondReportType=='author'){
const res = await api.caseAuthorReportList({page: data.pageNo,size: data.pageSize,caseId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='professional' && props.secondReportType=='task'){
const res = await api.professionalTaskReportList({page: data.pageNo,size: data.pageSize,growthId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}else if(props.reportType=='professional' && props.secondReportType=='student'){
const res = await api.professionalStudentReportList({page: data.pageNo,size: data.pageSize,growthId: props.currentId});
data.dataSource = res.data.records || [];
data.total = res.data.total;
}
data.tableLoading = false;
};
const emit = defineEmits({})
const onCancel = ()=>{
emit("update:isModalVisible", false);
}
// 监听弹出层分页变化方法
const modelChangePagination = (page) =>{
data.pageNo = page;
console.log(data.pageNo)
getTableData();
}
</script>
<style lang="scss">
.tableBox {
margin: 20px 20px 20px;
.ant-table-thead > tr > th {
background-color: #eff4fc;
}
}
.tableBox {
.pa {
width: 100%;
display: flex;
justify-content: center;
}
}
.custom-modal {
border-radius: 8px;
overflow: hidden;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.custom-modal :deep(.ant-modal-header) {
background: #1890ff;
color: white;
border-radius: 8px 8px 0 0;
}
.custom-modal :deep(.ant-modal-title) {
color: white;
font-weight: 500;
}
.custom-modal :deep(.ant-modal-close-x) {
color: white;
}
.custom-modal :deep(.ant-modal-footer) {
border-top: 1px solid #f0f0f0;
padding: 16px 24px;
}
.custom-table {
border-radius: 6px;
overflow: hidden;
}
.custom-table :deep(.ant-table-thead > tr > th) {
background-color: #fafafa;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
transition: all 0.3s;
}
.custom-table :deep(.ant-table-tbody > tr:hover > td) {
background: #e6f7ff !important;
}
</style>