报表合并到生产

This commit is contained in:
BOE\10867418
2023-09-07 14:45:53 +08:00
14 changed files with 1485 additions and 550 deletions

View File

@@ -8,7 +8,7 @@ export const boeuExamPageList = (obj) => http.post('/boeu/exam/pageList', obj)
//概览页面案例列表请求接口 //概览页面案例列表请求接口
export const boeuCasePageList = (obj) => http.post('/boeu/case/pageList', obj) export const boeuCasePageList = (obj) => http.post('/boeu/case/pageList', obj)
// 请求组织接口 // 请求组织接口
export const userGetUserOrg = (obj) => http.post('/org/getUserOrg', obj) export const userGetUserOrg = (obj) => https.get(`/organization/all/tree`,obj)
// 请求所属组织接口 // 请求所属组织接口
export const userInfo = (obj) => https.post('/user/info', obj) export const userInfo = (obj) => https.post('/user/info', obj)
// 课程列表接口 // 课程列表接口
@@ -21,6 +21,8 @@ export const boeuRoterPageList = (obj) => http.post('/boeu/router/pageList', obj
export const boeuProjectPageList = (obj) => http.post('/boeu/project/pageList', obj) export const boeuProjectPageList = (obj) => http.post('/boeu/project/pageList', obj)
// 学习数据列表 // 学习数据列表
export const boeuStudyDataPageList = (obj) => http.post('/boeu/studyData/pageList', obj) export const boeuStudyDataPageList = (obj) => http.post('/boeu/studyData/pageList', obj)
// 考试列表分页
export const boeuExamPageListV2 = (obj) => http.post('/boeu/exam/pageList/v2', obj )
// 概览页面 tab头数据 // 概览页面 tab头数据
export const boeuAllTotal = (obj) => http.get('/boeu/all/total', obj) export const boeuAllTotal = (obj) => http.get('/boeu/all/total', obj)
// 路径图列表 // 路径图列表

View File

@@ -1,7 +1,7 @@
import http from "./configz"; import http from "./configz";
import https from './confign' import https from './confign'
// 请求组织接口 // 请求组织接口
export const userGetUserOrg = (obj) => https.post('/user/getUserOrg', obj) export const userGetUserOrg = (obj) => https.get('/organization/all/tree', obj)
// 请求所属组织接口 // 请求所属组织接口
export const userInfo = (obj) => https.post('/user/info', obj) export const userInfo = (obj) => https.post('/user/info', obj)
// 项目列表 // 项目列表

View File

@@ -423,7 +423,7 @@
<router-link to="/download">下载中心</router-link> <router-link to="/download">下载中心</router-link>
</a-menu-item> </a-menu-item>
<!-- 20230804影藏 20230815放开--> <!-- 20230804影藏 20230815放开-->
<a-sub-menu key="sub17"> <a-sub-menu key="sub17" v-if="checkMenu('operational,learningpathmap,reportproject,curriculum,caseess,reportarticle,questionsandanswers,reportexamination,overvoew,employeelearning')">
<template #icon> <template #icon>
<div class="imgBox"> <div class="imgBox">
<img <img
@@ -433,7 +433,7 @@
</div> </div>
</template> </template>
<template #title>报表中心</template> <template #title>报表中心</template>
<a-menu-item key="sub17-1"> <a-menu-item key="sub17-1" v-if="checkMenu('operational')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-1' ? true : false, circleActive: selectedKeys[0] === 'sub17-1' ? true : false,
@@ -442,12 +442,12 @@
></span> ></span>
<router-link to="/operational">运营数据概览</router-link> <router-link to="/operational">运营数据概览</router-link>
</a-menu-item> </a-menu-item>
<a-sub-menu key="sub17-2" class="treeMenu"> <a-sub-menu key="sub17-2" class="treeMenu" v-if="checkMenu('learningpathmap,reportproject,curriculum,caseess,reportarticle,questionsandanswers,reportexamination')">
<template #icon> <template #icon>
<div class="img"></div> <div class="img"></div>
</template> </template>
<template #title>版块详细数据</template> <template #title>版块详细数据</template>
<a-menu-item key="sub17-2-1"> <a-menu-item key="sub17-2-1" v-if="checkMenu('learningpathmap')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-2-1' ? true : false, circleActive: selectedKeys[0] === 'sub17-2-1' ? true : false,
@@ -456,7 +456,7 @@
></span> ></span>
<router-link to="/learningpathmap">学习路径图</router-link> <router-link to="/learningpathmap">学习路径图</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub17-2-2"> <a-menu-item key="sub17-2-2" v-if="checkMenu('reportproject')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-2-2' ? true : false, circleActive: selectedKeys[0] === 'sub17-2-2' ? true : false,
@@ -465,7 +465,7 @@
></span> ></span>
<router-link to="/reportproject">项目</router-link> <router-link to="/reportproject">项目</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub17-2-3"> <a-menu-item key="sub17-2-3" v-if="checkMenu('curriculum')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-2-3' ? true : false, circleActive: selectedKeys[0] === 'sub17-2-3' ? true : false,
@@ -474,7 +474,7 @@
></span> ></span>
<router-link to="/curriculum">课程</router-link> <router-link to="/curriculum">课程</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub17-2-4"> <a-menu-item key="sub17-2-4" v-if="checkMenu('caseess')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-2-4' ? true : false, circleActive: selectedKeys[0] === 'sub17-2-4' ? true : false,
@@ -483,7 +483,7 @@
></span> ></span>
<router-link to="/caseess">案例</router-link> <router-link to="/caseess">案例</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub17-2-5"> <a-menu-item key="sub17-2-5" v-if="checkMenu('reportarticle')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-2-5' ? true : false, circleActive: selectedKeys[0] === 'sub17-2-5' ? true : false,
@@ -492,7 +492,7 @@
></span> ></span>
<router-link to="/reportarticle">文章</router-link> <router-link to="/reportarticle">文章</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub17-2-6"> <a-menu-item key="sub17-2-6" v-if="checkMenu('questionsandanswers')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-2-6' ? true : false, circleActive: selectedKeys[0] === 'sub17-2-6' ? true : false,
@@ -501,7 +501,7 @@
></span> ></span>
<router-link to="/questionsandanswers">问答</router-link> <router-link to="/questionsandanswers">问答</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub17-2-7"> <a-menu-item key="sub17-2-7" v-if="checkMenu('reportexamination')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-2-7' ? true : false, circleActive: selectedKeys[0] === 'sub17-2-7' ? true : false,
@@ -511,12 +511,12 @@
<router-link to="/reportexamination">考试</router-link> <router-link to="/reportexamination">考试</router-link>
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<a-sub-menu key="sub17-3" class="treeMenu"> <a-sub-menu key="sub17-3" class="treeMenu" v-if="checkMenu('overvoew,employeelearning')">
<template #icon> <template #icon>
<div class="img"></div> <div class="img"></div>
</template> </template>
<template #title>组织学习数据</template> <template #title>组织学习数据</template>
<a-menu-item key="sub17-3-1"> <a-menu-item key="sub17-3-1" v-if="checkMenu('overvoew')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-3-1' ? true : false, circleActive: selectedKeys[0] === 'sub17-3-1' ? true : false,
@@ -525,7 +525,7 @@
></span> ></span>
<router-link to="/overvoew">概览</router-link> <router-link to="/overvoew">概览</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub17-3-2"> <a-menu-item key="sub17-3-2" v-if="checkMenu('employeelearning')">
<span <span
:class="{ :class="{
circleActive: selectedKeys[0] === 'sub17-3-2' ? true : false, circleActive: selectedKeys[0] === 'sub17-3-2' ? true : false,
@@ -639,7 +639,9 @@
<router-link to="/download">问答</router-link> <router-link to="/download">问答</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub18" v-if="checkMenu('OldSystemManage')"> <a-menu-item key="sub18" v-if="checkMenu('OldSystemManage')">
<router-link target="_blank" to="/oldsystemmanage">旧版</router-link>
<router-link target="_blank" to="/oldsystemmanage">旧版</router-link>
</a-menu-item> </a-menu-item>
<a-menu-item key="sub19" v-if="checkMenu('ReadingClubManage')"> <a-menu-item key="sub19" v-if="checkMenu('ReadingClubManage')">
<router-link to="/readingclubmanage">业务</router-link> <router-link to="/readingclubmanage">业务</router-link>

View File

@@ -3,6 +3,22 @@
<div class="caseess"> <div class="caseess">
<!-- 以下为顶部搜索框 --> <!-- 以下为顶部搜索框 -->
<div class="filter"> <div class="filter">
<div class="select">
<a-cascader
change-on-select
:options="option"
v-model:value="orgId"
style="width: 100%"
placeholder="请选择归属组织"
:allowClear = false
:fieldNames="{
label: 'orgName',
value: 'organizationId',
children: 'childList',
}"
>
</a-cascader>
</div>
<div class="select"> <div class="select">
<a-input <a-input
style="width: 100%; height: 40px; border-radius: 8px" style="width: 100%; height: 40px; border-radius: 8px"
@@ -23,6 +39,15 @@
> >
</a-input> </a-input>
</div> </div>
<div class="select">
<a-range-picker
v-model:value="publishTime"
type="date"
valueFormat="YYYY-MM-DD"
:placeholder="['发布开始时间','结束时间']"
style="width: 100%; margin-right: 0px"
/>
</div>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<div class="btnzx btnzx1" @click="searchData"> <div class="btnzx btnzx1" @click="searchData">
<div class="search"></div> <div class="search"></div>
@@ -100,9 +125,11 @@ import * as api from "../../api/indexOvervoew";
import downLoad from "../../utils/downLoad"; import downLoad from "../../utils/downLoad";
import Cookies from "vue-cookies"; import Cookies from "vue-cookies";
import axios from "axios"; import axios from "axios";
import {useStore} from 'vuex'
export default { export default {
name: "CaseesS", name: "CaseesS",
setup() { setup() {
const store = useStore();
const state = reactive({ const state = reactive({
tableLoading: false, // table加载图标 tableLoading: false, // table加载图标
tableDataTotal: 0, // 数据总条数 tableDataTotal: 0, // 数据总条数
@@ -112,7 +139,12 @@ export default {
title: "", title: "",
author: "", author: "",
authorName: "", authorName: "",
publishTime: "", // 发布时间
selectedRowKeys: [], selectedRowKeys: [],
orgId: null, // 状态值
option: [], // 组织列表
allowClear: true,
resetOrgId: [],
}); });
// 表格数据 // 表格数据
let tableData = ref([]); let tableData = ref([]);
@@ -123,15 +155,54 @@ export default {
return item.id; return item.id;
}); });
}; };
//请求组织接口
const getOrgList = async () => {
//todo 获取用户角色列表判断里面是否有system-admin
// let roleList = store.state.userInfo.roleList;
var manageFlag = false;
for(let i=0;i<store.state.userInfo.roleList.length;i++){
if(store.state.userInfo.roleList[i].roleCode=="system-admin"){
manageFlag = true;
break;
}
}
const res = await api.userGetUserOrg();
if (res) {
if(manageFlag){
state.option = [{
orgName:"全部",
organizationId: null,
childList:res.data?.result.orgTreeList
}];
state.orgId = [null,...res.data?.result.treeNodeList];
state.resetOrgId = [null,...res.data?.result.treeNodeList];
}else{
if(res.data?.result.orgTreeList!=null){
state.option = res.data?.result.orgTreeList;
state.orgId = res.data?.result.treeNodeList;
state.resetOrgId = res.data?.result.treeNodeList;
}else{
state.option = [{
orgName:"无权限",
organizationId: "1",
childList:[],
}];
state.orgId = ["1"];
state.resetOrgId = ["1"];
}
}
getTableData();
}
};
// cloumns 表头 // cloumns 表头
const columns = ref([ const columns = ref([
{ // {
title: "编号", // title: "编号",
dataIndex: "num", // dataIndex: "num",
ellipsis: true, // ellipsis: true,
key: "num", // key: "num",
align: "center", // align: "center",
}, // },
{ {
title: "案例名称", title: "案例名称",
dataIndex: "title", dataIndex: "title",
@@ -146,6 +217,13 @@ export default {
key: "orgDomain", key: "orgDomain",
align: "center", align: "center",
}, },
// {
// title: "案例分类",
// dataIndex: "majorType1",
// ellipsis: true,
// key: "majorType1",
// align: "center",
// },
{ {
title: "专业分类", title: "专业分类",
dataIndex: "majorType", dataIndex: "majorType",
@@ -160,6 +238,13 @@ export default {
key: "views", key: "views",
align: "center", align: "center",
}, },
{
title: "点赞量",
dataIndex: "praises",
ellipsis: true,
key: "praises",
align: "center",
},
{ {
title: "评论数", title: "评论数",
dataIndex: "comments", dataIndex: "comments",
@@ -167,13 +252,13 @@ export default {
key: "comments", key: "comments",
align: "center", align: "center",
}, },
{ // {
title: "分享量", // title: "分享量",
dataIndex: "shares", // dataIndex: "shares",
ellipsis: true, // ellipsis: true,
key: "shares", // key: "shares",
align: "center", // align: "center",
}, // },
{ {
title: "收藏数", title: "收藏数",
dataIndex: "favorites", dataIndex: "favorites",
@@ -189,12 +274,19 @@ export default {
align: "center", align: "center",
}, },
{ {
title: "状态", title: "创建人/作者",
dataIndex: "caseScope", dataIndex: "authorName",
ellipsis: true, ellipsis: true,
key: "caseScope", key: "authorName",
align: "center", align: "center",
}, },
// {
// title: "状态",
// dataIndex: "caseScope",
// ellipsis: true,
// key: "caseScope",
// align: "center",
// },
]); ]);
// table 分页事件 // table 分页事件
const changePagination = (page) => { const changePagination = (page) => {
@@ -207,15 +299,19 @@ export default {
const res = await api.boeuCasePlatePageList({ const res = await api.boeuCasePlatePageList({
page: state.pageNo, page: state.pageNo,
size: state.pageSize, size: state.pageSize,
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
title: state.title, title: state.title,
author: state.author, author: state.author,
authorName: state.authorName, authorName: state.authorName,
// publishTime: state.publishTime,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+ " 00:00:00",
endTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[1]+ " 23:59:59",
boeRouterInfoName: state.boeRouterInfoName, boeRouterInfoName: state.boeRouterInfoName,
}); });
if (res) { if (res) {
console.log(res.data, "res.data"); console.log(res.data, "res.data");
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
const list = res.data.rows?.map((item) => { const list = res.data.result.rows?.map((item) => {
return { return {
key: item.id, key: item.id,
...item, ...item,
@@ -232,6 +328,7 @@ export default {
state.title = ""; state.title = "";
state.authorName = ""; state.authorName = "";
state.author = ""; state.author = "";
state.publishTime = [];
getTableData(); getTableData();
}; };
const searchData = async () => { const searchData = async () => {
@@ -262,6 +359,9 @@ export default {
size: state.pageSize, size: state.pageSize,
title: state.title, title: state.title,
author: state.author, author: state.author,
// publishTime: state.publishTime,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+ " 00:00:00",
endTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[1]+ " 23:59:59",
}; };
axios({ axios({
method: "post", method: "post",
@@ -280,7 +380,8 @@ export default {
} }
}; };
onMounted(() => { onMounted(() => {
getTableData(); getOrgList();
// getTableData();
state.tableLoading = true; state.tableLoading = true;
}); });
return { return {
@@ -313,7 +414,7 @@ export default {
.select { .select {
margin-right: 20px; margin-right: 20px;
margin-bottom: 20px; margin-bottom: 20px;
width: calc((100% - 76px - 200px) / 2); width: calc((100% - 76px - 240px) / 4);
} }
.btnz { .btnz {

View File

@@ -3,6 +3,22 @@
<div class="curriculum"> <div class="curriculum">
<!-- 以下为顶部搜索框 --> <!-- 以下为顶部搜索框 -->
<div class="filter"> <div class="filter">
<div class="select">
<a-cascader
change-on-select
:options="option"
v-model:value="orgId"
style="width: 100%"
placeholder="请选择归属组织"
:allowClear="allowClear"
:fieldNames="{
label: 'orgName',
value: 'organizationId',
children: 'childList',
}"
>
</a-cascader>
</div>
<div class="select"> <div class="select">
<a-input <a-input
style="width: 100%; height: 40px; border-radius: 8px" style="width: 100%; height: 40px; border-radius: 8px"
@@ -14,19 +30,14 @@
</a-input> </a-input>
</div> </div>
<div class="select"> <div class="select">
<a-cascader <a-input
:options="option" style="width: 100%; height: 40px; border-radius: 8px"
placeholder="请选择组织" placeholder="请输入创建者"
v-model:value="orgId" allowClear
:allowClear="allowClear" showSearch
style="width: 100%" v-model:value="createName"
:fieldNames="{
label: 'name',
value: 'id',
children: 'treeChildList',
}"
> >
</a-cascader> </a-input>
</div> </div>
<div class="select"> <div class="select">
<a-cascader <a-cascader
@@ -45,14 +56,13 @@
></a-cascader> ></a-cascader>
</div> </div>
<div class="select"> <div class="select">
<a-input <a-range-picker
style="width: 100%; height: 40px; border-radius: 8px" v-model:value="publishTime"
placeholder="请输入创建者" type="date"
allowClear valueFormat="YYYY-MM-DD"
showSearch :placeholder="['发布开始时间','结束时间']"
v-model:value="createName" style="width: 100%; margin-right: 0px"
> />
</a-input>
</div> </div>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<div class="btnzx btnzx1" @click="searchData"> <div class="btnzx btnzx1" @click="searchData">
@@ -141,9 +151,11 @@ import axios from "axios";
import Cookies from "vue-cookies"; import Cookies from "vue-cookies";
import downLoad from "../../utils/downLoad"; import downLoad from "../../utils/downLoad";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import {useStore} from 'vuex'
export default { export default {
name: "CurriculuM", name: "CurriculuM",
setup() { setup() {
const store = useStore();
const state = reactive({ const state = reactive({
tableLoading: false, // table加载图标 tableLoading: false, // table加载图标
tableDataTotal: 0, // 数据总条数 tableDataTotal: 0, // 数据总条数
@@ -154,7 +166,8 @@ export default {
name: "", name: "",
type: null, type: null,
createName: "", createName: "",
allowClear: true, publishTime: "", // 发布时间
allowClear: false,
option: [], option: [],
selectedRowKeys: [], selectedRowKeys: [],
typeOption:[] typeOption:[]
@@ -168,15 +181,43 @@ export default {
const getOption = async () => {}; const getOption = async () => {};
//请求组织接口 //请求组织接口
const getOrgList = async () => { const getOrgList = async () => {
const result = await api.userGetUserOrg({}); var manageFlag = false;
for(let i=0;i<store.state.userInfo.roleList.length;i++){
if (result) { if(store.state.userInfo.roleList[i].roleCode=="system-admin"){
state.option = result.data?.result?.list; manageFlag = true;
state.orgId = result.data?.result?.treeNodeList; break;
state.resetOrgId = result.data?.result?.treeNodeList; }
result.data?.result?.userType === 1 }
? (state.allowClear = true) let params = {
: (state.allowClear = false); roleList: store.state.userInfo.roleList,
userId: store.state.userInfo.userId
}
const res = await api.userGetUserOrg(params);
if (res) {
if(manageFlag){
state.option = [{
orgName:"全部",
organizationId: null,
childList:res.data?.result.orgTreeList
}];
state.orgId = [null,...res.data?.result.treeNodeList];
state.resetOrgId = [null,...res.data?.result.treeNodeList];
}else{
if(res.data?.result.orgTreeList!=null){
state.option = res.data?.result.orgTreeList;
state.orgId = res.data?.result.treeNodeList;
state.resetOrgId = res.data?.result.treeNodeList;
}else{
state.option = [{
orgName:"无权限",
organizationId: "1",
childList:[],
}];
state.orgId = ["1"];
state.resetOrgId = ["1"];
}
}
state.allowClear = false
getTableData(); getTableData();
} }
}; };
@@ -191,11 +232,14 @@ export default {
pageSize: state.pageSize, pageSize: state.pageSize,
type: state.type ? state.type[state.type.length - 1]:null, type: state.type ? state.type[state.type.length - 1]:null,
createName: state.createName, createName: state.createName,
// publishTime: state.publishTime,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+ " 00:00:00",
endTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[1]+ " 23:59:59",
}; };
const res = await api.boeuCourseListPageV2(params); const res = await api.boeuCourseListPageV2(params);
if (res) { if (res) {
tableData.value = res.data.rows; tableData.value = res.data.result.rows;
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
state.tableLoading = false; state.tableLoading = false;
} }
}; };
@@ -206,14 +250,14 @@ export default {
}; };
// cloumns 表头 // cloumns 表头
const columns = ref([ const columns = ref([
{ // {
title: "编号", // title: "编号",
dataIndex: "num", // dataIndex: "num",
ellipsis: true, // ellipsis: true,
key: "num", // key: "num",
align: "center", // align: "center",
width: 80, // width: 80,
}, // },
{ {
title: "课程名称", title: "课程名称",
dataIndex: "name", dataIndex: "name",
@@ -223,12 +267,12 @@ export default {
width: 120, width: 120,
}, },
{ {
title: "类型", title: "课程类型",
dataIndex: "courseType", dataIndex: "courseType",
ellipsis: true, ellipsis: true,
key: "courseType", key: "courseType",
align: "center", align: "center",
width: 80, width: 120,
}, },
{ {
title: "归属组织", title: "归属组织",
@@ -238,14 +282,6 @@ export default {
align: "center", align: "center",
width: 120, width: 120,
}, },
{
title: "归属路径图",
dataIndex: "routerName",
ellipsis: true,
key: "routerName",
align: "center",
width: 120,
},
{ {
title: "归属项目", title: "归属项目",
dataIndex: "projectName", dataIndex: "projectName",
@@ -254,6 +290,14 @@ export default {
align: "center", align: "center",
width: 120, width: 120,
}, },
{
title: "归属路径图",
dataIndex: "routerName",
ellipsis: true,
key: "routerName",
align: "center",
width: 120,
},
{ {
title: "一级分类", title: "一级分类",
dataIndex: "oneType", dataIndex: "oneType",
@@ -295,7 +339,7 @@ export default {
width: 120, width: 120,
}, },
{ {
title: "学习人数", title: "学习人数",
dataIndex: "learnerNumber", dataIndex: "learnerNumber",
ellipsis: true, ellipsis: true,
key: "learnerNumber", key: "learnerNumber",
@@ -396,6 +440,7 @@ export default {
state.pageSize = 10; state.pageSize = 10;
state.type = null; state.type = null;
state.createName = ""; state.createName = "";
state.publishTime = [];
getTableData(); getTableData();
}; };
const exportList = () => { const exportList = () => {
@@ -426,6 +471,9 @@ export default {
pageSize: state.pageSize, pageSize: state.pageSize,
type: state.type ? state.type[state.type.length - 1]:null, type: state.type ? state.type[state.type.length - 1]:null,
createName: state.createName, createName: state.createName,
// publishTime: state.publishTime,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+ " 00:00:00",
endTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[1]+ " 23:59:59",
}; };
axios({ axios({
method: "post", method: "post",
@@ -473,6 +521,9 @@ export default {
pageSize: state.pageSize, pageSize: state.pageSize,
type: state.type ? state.type[state.type.length - 1]:null, type: state.type ? state.type[state.type.length - 1]:null,
createName: state.createName, createName: state.createName,
// publishTime: state.publishTime,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+ " 00:00:00",
endTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[1]+ " 23:59:59",
}; };
axios({ axios({
method: "post", method: "post",
@@ -538,6 +589,9 @@ export default {
pageSize: state.pageSize, pageSize: state.pageSize,
type: state.type ? state.type[state.type.length - 1]:null, type: state.type ? state.type[state.type.length - 1]:null,
createName: state.createName, createName: state.createName,
// publishTime: state.publishTime,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+ " 00:00:00",
endTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[1]+ " 23:59:59",
}; };
axios({ axios({
method: "post", method: "post",
@@ -614,7 +668,7 @@ export default {
.select { .select {
margin-right: 20px; margin-right: 20px;
margin-bottom: 20px; margin-bottom: 20px;
width: calc((100% - 76px - 240px) / 4); width: calc((100% - 76px - 220px) / 3);
} }
.btnz { .btnz {

View File

@@ -12,17 +12,18 @@
allowClear allowClear
></a-select> --> ></a-select> -->
<a-cascader <a-cascader
change-on-select
:options="option" :options="option"
placeholder="请选择组织"
v-model:value="orgId" v-model:value="orgId"
:allowClear="allowClear"
style="width: 100%" style="width: 100%"
placeholder="请选择归属组织"
:allowClear = false
:fieldNames="{ :fieldNames="{
label: 'name', label: 'orgName',
value: 'id', value: 'organizationId',
children: 'treeChildList', children: 'childList',
}" }"
> >
</a-cascader> </a-cascader>
</div> </div>
<div class="select"> <div class="select">
@@ -46,14 +47,35 @@
</a-input> </a-input>
</div> </div>
<div class="select"> <div class="select">
<a-input <a-select
ref="select"
allowClear
v-model:value="valueCourseType"
style="width: 100%"
:options="optionsCourseType"
placeholder="有无授课次数"
@change="handleCourseTypeChange"
></a-select>
</div>
<div class="select">
<!-- <a-input
style="width: 100%; height: 40px; border-radius: 8px" style="width: 100%; height: 40px; border-radius: 8px"
placeholder="请输入Band" placeholder="请输入Band"
v-model:value="band" v-model:value="band"
allowClear allowClear
showSearch showSearch
> >
</a-input> </a-input> -->
<a-select
ref="select"
allowClear
v-model:value="valueBand"
style="width: 100%"
:options="optionsBand"
placeholder="请选择Band"
@focus="focusBand"
@change="handleBandChange"
></a-select>
</div> </div>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<div class="btnzx btnzx1" @click="getTableData"> <div class="btnzx btnzx1" @click="getTableData">
@@ -120,9 +142,11 @@ import { message } from "ant-design-vue";
import Cookies from "vue-cookies"; import Cookies from "vue-cookies";
import axios from "axios"; import axios from "axios";
import downLoad from "../../utils/downLoad"; import downLoad from "../../utils/downLoad";
import { useStore } from "vuex";
export default { export default {
name: "EmployeelearninG", name: "EmployeelearninG",
setup() { setup() {
const store = useStore();
const state = reactive({ const state = reactive({
tableLoading: false, // table加载图标 tableLoading: false, // table加载图标
tableDataTotal: 0, // 数据总条数 tableDataTotal: 0, // 数据总条数
@@ -136,25 +160,96 @@ export default {
selectedRowKeys: [], // 选中的列 selectedRowKeys: [], // 选中的列
ids: [], ids: [],
allowClear:true, allowClear:true,
resetOrgId:[] resetOrgId:[],
valueBand: null,
valueCourseType: null,
optionsBand:[
{value: 'Band1',label: 'Band1',},
{value: 'Band2',label: 'Band2',},
{value: 'Band3',label: 'Band3',},
{value: 'Band4',label: 'Band4',},
{value: 'Band5',label: 'Band5',},
{value: 'Band6',label: 'Band6',},
{value: 'Band7',label: 'Band7',},
{value: 'Band8',label: 'Band8',},
{value: 'Band9',label: 'Band9',},
{value: 'Band10',label: 'Band10',},
{value: 'Band11',label: 'Band11',},
{value: 'Band12',label: 'Band12',},
{value: 'Band13',label: 'Band13',},
{value: 'Band14',label: 'Band14',},
{value: 'Band15',label: 'Band15',},
{value: 'Band16',label: 'Band16',},
{value: 'Band17',label: 'Band17',},
{value: 'Band18',label: 'Band18',},
{value: 'Band19',label: 'Band19',},
{value: 'Band20',label: 'Band20',},
],
optionsCourseType: [
{
value: true,
label: '是',
},
{
value: false,
label: '否',
},
],
}); });
const focusBand = () => {
console.log('focus band');
};
const handleBandChange = (value) => {
console.log(`selected handleBandChange ${value}`);
state.valueBand = value;
};
const handleCourseTypeChange = (value) => {
console.log(`selected handleCourseTypeChange ${value}`);
state.valueCourseType = value;
};
// table选中 // table选中
const onSelectChange = (selectedRowKeys, record) => { const onSelectChange = (selectedRowKeys, record) => {
state.selectedRowKeys = selectedRowKeys; state.selectedRowKeys = selectedRowKeys;
state.ids = record?.map((item) => { state.ids = record?.map((item) => {
return item.basicBoeUserId; return item.id;
}); });
}; };
//请求组织接口 //请求组织接口
const getOrgList = async () => { const getOrgList = async () => {
var manageFlag = false;
for(let i=0;i<store.state.userInfo.roleList.length;i++){
if(store.state.userInfo.roleList[i].roleCode=="system-admin"){
manageFlag = true;
break;
}
}
const res = await api.userGetUserOrg({}); const res = await api.userGetUserOrg({});
if (res) { if (res) {
state.option = res.data?.result?.list; if(manageFlag){
state.orgId = res.data?.result?.treeNodeList; state.option = [{
state.resetOrgId = res.data?.result?.treeNodeList; orgName:"全部",
res.data?.result?.userType === 1 organizationId: null,
? (state.allowClear = true) childList:res.data?.result.orgTreeList
: (state.allowClear = false); }];
state.orgId = [null,...res.data?.result.treeNodeList];
state.resetOrgId = [null,...res.data?.result.treeNodeList];
}else{
if(res.data?.result.orgTreeList!=null){
state.option = res.data?.result.orgTreeList;
state.orgId = res.data?.result.treeNodeList;
state.resetOrgId = res.data?.result.treeNodeList;
}else{
state.option = [{
orgName:"无权限",
organizationId: "1",
childList:[],
}];
state.orgId = ["1"];
state.resetOrgId = ["1"];
}
}
getTableData(); getTableData();
} }
}; };
@@ -190,25 +285,25 @@ export default {
}, },
{ {
title: "姓名", title: "姓名",
dataIndex: "name", dataIndex: "userName",
ellipsis: true, ellipsis: true,
key: "name", key: "userName",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "组织信息", title: "所属组织",
dataIndex: "departmentName", dataIndex: "orgName",
ellipsis: true, ellipsis: true,
key: "departmentName", key: "orgName",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "岗位", title: "岗位",
dataIndex: "jobName", dataIndex: "positionName",
ellipsis: true, ellipsis: true,
key: "jobName", key: "positionName",
width: 120, width: 120,
align: "center", align: "center",
}, },
@@ -222,57 +317,57 @@ export default {
}, },
{ {
title: "授课次数", title: "授课次数",
dataIndex: "teachingTotal", dataIndex: "teachingTimes",
ellipsis: true, ellipsis: true,
key: "teachingTotal", key: "teachingTotal",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "授课时长(分钟)", title: "授课时长",
dataIndex: "teachingTime", dataIndex: "teachingDuration",
ellipsis: true, ellipsis: true,
key: "teachingTime", key: "teachingDuration",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "案例", title: "案例创建",
dataIndex: "caseTotal", dataIndex: "cases",
ellipsis: true, ellipsis: true,
key: "caseTotal", key: "cases",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "学习项目", title: "课程学习",
dataIndex: "studyProject", dataIndex: "courseStudy",
ellipsis: true, ellipsis: true,
key: "studyProject", key: "courseStudy",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "学习路径", title: "项目学习",
dataIndex: "studyRouter", dataIndex: "projectStudy",
ellipsis: true, ellipsis: true,
key: "studyRouter", key: "projectStudy",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "学习课程", title: "路径图学习",
dataIndex: "studyClass", dataIndex: "routerStudy",
ellipsis: true, ellipsis: true,
key: "studyClass", key: "routerStudy",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "累计学习时长(分钟)", title: "学习时长",
dataIndex: "studyTimeSum", dataIndex: "learningDuration",
ellipsis: true, ellipsis: true,
key: "studyTimeSum", key: "learningDuration",
width: 120, width: 120,
align: "center", align: "center",
}, },
@@ -301,8 +396,8 @@ export default {
const oneExport = (record) => { const oneExport = (record) => {
axios({ axios({
method: "get", method: "get",
url: "/report/boeu/studyData/export", url: "/report/boeu/studyData/exportDetailed",
params: { ids: `${record.record.basicBoeUserId}` }, params: { ids: `${record.record.userId}` },
responseType: "blob", responseType: "blob",
headers: { headers: {
token: Cookies.get("token"), token: Cookies.get("token"),
@@ -325,11 +420,12 @@ export default {
userNo: state.userNo, userNo: state.userNo,
name: state.name, name: state.name,
departmentId: state.orgId ? state.orgId[state.orgId.length - 1] : null, departmentId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
bandCode: state.band, bandCode: state.valueBand,
hasTeach: state.valueCourseType,
}); });
if (res) { if (res) {
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
const list = res.data.rows?.map((item) => { const list = res.data.result.rows?.map((item) => {
return { return {
key: item.id, key: item.id,
...item, ...item,
@@ -345,6 +441,8 @@ export default {
state.name = ""; state.name = "";
state.band = ""; state.band = "";
state.userNo = ""; state.userNo = "";
state.valueBand = null;
state.valueCourseType = null;
state.orgId = state.resetOrgId; state.orgId = state.resetOrgId;
getTableData(); getTableData();
}; };
@@ -358,7 +456,8 @@ export default {
userNo: state.userNo, userNo: state.userNo,
name: state.name, name: state.name,
departmentId: state.orgId ? state.orgId[state.orgId.length - 1] : null, departmentId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
bandCode: state.band, bandCode: state.valueBand,
hasTeach: state.valueCourseType,
}, },
responseType: "blob", responseType: "blob",
headers: { headers: {
@@ -373,6 +472,9 @@ export default {
state.tableLoading = true; state.tableLoading = true;
}); });
return { return {
focusBand,
handleBandChange,
handleCourseTypeChange,
exportAllbtnz, exportAllbtnz,
onSelectChange, onSelectChange,
exportbtnz, exportbtnz,
@@ -401,7 +503,7 @@ export default {
.select { .select {
margin-right: 20px; margin-right: 20px;
margin-bottom: 20px; margin-bottom: 20px;
width: calc((100% - 76px - 240px) / 4); width: calc((100% - 76px - 220px) / 3);
} }
.btnz { .btnz {

View File

@@ -28,7 +28,7 @@
:options="option" :options="option"
placeholder="请选择组织" placeholder="请选择组织"
v-model:value="orgId" v-model:value="orgId"
:allowClear="allowClear" :allowClear= false
style="width: 100%" style="width: 100%"
:fieldNames="{ :fieldNames="{
label: 'name', label: 'name',

View File

@@ -5,11 +5,12 @@
<div class="filter"> <div class="filter">
<div class="select"> <div class="select">
<a-cascader <a-cascader
change-on-select
:options="option" :options="option"
v-model:value="orgId" v-model:value="orgId"
style="width: 100%" style="width: 100%"
placeholder="请选择归属组织" placeholder="请选择归属组织"
:allowClear="allowClear" :allowClear = false
:fieldNames="{ :fieldNames="{
label: 'orgName', label: 'orgName',
value: 'organizationId', value: 'organizationId',
@@ -31,13 +32,22 @@
<div class="select"> <div class="select">
<a-input <a-input
style="width: 100%; height: 40px; border-radius: 8px" style="width: 100%; height: 40px; border-radius: 8px"
placeholder="请输入创建" placeholder="请输入创建"
allowClear allowClear
v-model:value="createName" v-model:value="createName"
showSearch showSearch
> >
</a-input> </a-input>
</div> </div>
<div class="select">
<a-range-picker
v-model:value="publishTime"
type="date"
valueFormat="YYYY-MM-DD"
:placeholder="['发布开始时间','结束时间']"
style="width: 100%; margin-right: 0px"
/>
</div>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<div class="btnzx btnzx1" @click="searchData"> <div class="btnzx btnzx1" @click="searchData">
<div class="search"></div> <div class="search"></div>
@@ -149,6 +159,7 @@ export default {
createName: "", // 创建者名称 createName: "", // 创建者名称
startTime: "", // 开始时间 startTime: "", // 开始时间
endTime: "", // 结束时间 endTime: "", // 结束时间
publishTime: "", // 创建时间
option: [], // 组织列表 option: [], // 组织列表
boeRouterInfoName: "", // 路径名称 boeRouterInfoName: "", // 路径名称
selectedRowKeys: [], // 选中的列 selectedRowKeys: [], // 选中的列
@@ -173,32 +184,60 @@ export default {
} }
//请求组织接口 //请求组织接口
const getOrgList = async () => { const getOrgList = async () => {
let params = { //todo 获取用户角色列表判断里面是否有system-admin
roleList: store.state.userInfo.roleList, // let roleList = store.state.userInfo.roleList;
userId: store.state.userInfo.userId var manageFlag = false;
for(let i=0;i<store.state.userInfo.roleList.length;i++){
if(store.state.userInfo.roleList[i].roleCode=="system-admin"){
manageFlag = true;
break;
}
} }
const res = await api.userGetUserOrg(params); const res = await api.userGetUserOrg();
if (res) { if (res) {
state.option = res.data?.result; // state.option = res.data?.result;
state.orgId = state.option[0]?.organizationId; // state.orgId = [state.option[0]?.organizationId];
state.resetOrgId = state.option[0]?.organizationId; // state.resetOrgId = [state.option[0]?.organizationId];
state.allowClear = false if(manageFlag){
state.option = [{
orgName:"全部",
organizationId: null,
childList:res.data?.result.orgTreeList
}];
state.orgId = [null,...res.data?.result.treeNodeList];
state.resetOrgId = [null,...res.data?.result.treeNodeList];
}else{
if(res.data?.result.orgTreeList!=null){
state.option = res.data?.result.orgTreeList;
state.orgId = res.data?.result.treeNodeList;
state.resetOrgId = res.data?.result.treeNodeList;
}else{
state.option = [{
orgName:"无权限",
organizationId: "1",
childList:[],
}];
state.orgId = ["1"];
state.resetOrgId = ["1"];
}
}
state.allowClear = true;
getTableData(); getTableData();
} }
}; };
// cloumns 表头 // cloumns 表头
const columns = ref([ const columns = ref([
// {
// title: "编号",
// dataIndex: "num",
// key: "num",
// ellipsis: true,
// align: "center",
// width: 120,
// },
{ {
title: "编号", title: "路径图名称",
dataIndex: "num",
key: "num",
ellipsis: true,
align: "center",
width: 120,
},
{
title: "路径名称",
dataIndex: "boeRouterInfoName", dataIndex: "boeRouterInfoName",
ellipsis: true, ellipsis: true,
key: "boeRouterInfoName", key: "boeRouterInfoName",
@@ -237,6 +276,22 @@ export default {
align: "center", align: "center",
width: 120, width: 120,
}, },
{
title: "参与人数",
dataIndex: "participantsTotal",
ellipsis: true,
key: "participantsTotal",
align: "center",
width: 120,
},
{
title: "参与率",
dataIndex: "participantsRate",
ellipsis: true,
key: "participantsRate",
align: "center",
width: 120,
},
{ {
title: "完成人数", title: "完成人数",
dataIndex: "completionNumber", dataIndex: "completionNumber",
@@ -245,6 +300,14 @@ export default {
align: "center", align: "center",
width: 120, width: 120,
}, },
{
title: "完成率",
dataIndex: "completedRate",
ellipsis: true,
key: "completedRate",
align: "center",
width: 120,
},
{ {
title: "发布时间", title: "发布时间",
dataIndex: "publishTime", dataIndex: "publishTime",
@@ -253,14 +316,6 @@ export default {
align: "center", align: "center",
width: 120, width: 120,
}, },
{
title: "创建人",
dataIndex: "createName",
ellipsis: true,
key: "createName",
align: "center",
width: 120,
},
{ {
title: "路径状态", title: "路径状态",
dataIndex: "status", dataIndex: "status",
@@ -269,6 +324,14 @@ export default {
align: "center", align: "center",
width: 120, width: 120,
}, },
{
title: "创建人",
dataIndex: "createName",
ellipsis: true,
key: "createName",
align: "center",
width: 120,
},
{ {
title: "操作", title: "操作",
dataIndex: "operation", dataIndex: "operation",
@@ -343,8 +406,9 @@ export default {
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null, orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
routerName: state.routerName, routerName: state.routerName,
createName: state.createName, createName: state.createName,
startTime: state.startTime, startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] + " 00:00:01",
endTime: state.endTime, endTime: typeof state.publishTime[1] == 'undefined' ? null : state.publishTime[1] + " 23:59:59",
// publishTime: state.publishTime,
name: state.name, name: state.name,
}); });
if (res) { if (res) {
@@ -363,6 +427,7 @@ export default {
const reset = async () => { const reset = async () => {
state.tableLoading = true; state.tableLoading = true;
state.createName = ""; state.createName = "";
state.publishTime = [];
state.routerName = ""; state.routerName = "";
state.orgId = state.resetOrgId; state.orgId = state.resetOrgId;
state.selectedRowKeys = []; state.selectedRowKeys = [];
@@ -388,6 +453,9 @@ export default {
} else { } else {
const params = { const params = {
createName: state.createName, createName: state.createName,
// publishTime: state.publishTime,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] + " 00:00:01",
endTime: typeof state.publishTime[1] == 'undefined' ? null : state.publishTime[1] + " 23:59:59",
routerName: state.routerName, routerName: state.routerName,
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null, orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
}; };
@@ -427,6 +495,9 @@ export default {
} else { } else {
const params = { const params = {
createName: state.createName, createName: state.createName,
// publishTime: state.publishTime,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] + " 00:00:01",
endTime: typeof state.publishTime[1] == 'undefined' ? null : state.publishTime[1] + " 23:59:59",
routerName: state.routerName, routerName: state.routerName,
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null, orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
}; };
@@ -481,7 +552,7 @@ export default {
.select { .select {
margin-right: 20px; margin-right: 20px;
margin-bottom: 20px; margin-bottom: 20px;
width: calc((100% - 76px - 220px) / 3); width: calc((100% - 76px - 240px) / 4);
} }
.btnz { .btnz {

View File

@@ -68,7 +68,7 @@
<div class="echartsTwo"> <div class="echartsTwo">
<div class="title"> <div class="title">
<div class="left">学习情况</div> <div class="left">学习情况</div>
<div v-if="1 == towParmasn.type || 2 == towParmasn.type || 3 == towParmasn.type" class="right" @click="exportTwoData"> <div class="right" @click="exportTwoData" v-show="towParmasn.type != 2">
<img src="../../assets/images/coursewareManage/export1.png" alt="" /> <img src="../../assets/images/coursewareManage/export1.png" alt="" />
<span>导出学习情况</span> <span>导出学习情况</span>
</div> </div>
@@ -83,27 +83,27 @@
@change="modalChange" @change="modalChange"
:options="[ :options="[
{ {
label: '项目', label: '课程',
value: 1, value: 1,
}, },
{ {
label: '学习路径图', label: '案例',
value: 2, value: 2,
}, },
{ {
label: '课程', label: '文章',
value: 3, value: 3,
}, },
{ {
label: '案例', label: '问答',
value: 4, value: 4,
}, },
{ {
label: '文章', label: '项目',
value: 5, value: 5,
}, },
{ {
label: '问答', label: '学习路径图',
value: 6, value: 6,
}, },
]" ]"
@@ -115,8 +115,8 @@
placeholder="请选择日期格式" placeholder="请选择日期格式"
@change="twoSelectChange" @change="twoSelectChange"
:options="[ :options="[
{ label: '按日查找', value: 0 }, { label: '按日查找', value: 1 },
{ label: '按月查找', value: 1 }, { label: '按月查找', value: 2 },
]" ]"
v-model:value="towParmasn.dateType" v-model:value="towParmasn.dateType"
></a-select> ></a-select>
@@ -124,7 +124,7 @@
<div class="leftItem"> <div class="leftItem">
<div class="timeItemSearch"> <div class="timeItemSearch">
<a-range-picker <a-range-picker
v-if="towParmasn.dateType == 0" v-if="towParmasn.dateType == 1"
style="width: 100%" style="width: 100%"
format="YYYY-MM-DD" format="YYYY-MM-DD"
v-model:value="towParmasn.day" v-model:value="towParmasn.day"
@@ -133,7 +133,7 @@
:placeholder="[' 开始时间', ' 结束时间']" :placeholder="[' 开始时间', ' 结束时间']"
/> />
<a-range-picker <a-range-picker
v-if="towParmasn.dateType == 1" v-if="towParmasn.dateType == 2"
style="width: 100%" style="width: 100%"
v-model:value="towParmasn.time" v-model:value="towParmasn.time"
@change="twoMonthChange" @change="twoMonthChange"
@@ -144,6 +144,9 @@
/> />
</div> </div>
</div> </div>
<div class="leftItem">
<a-checkbox-group style="margin-left:20px" v-model:value="checkedList" :options="plainOptions" @change="checkboxChange" />
</div>
</div> </div>
</div> </div>
<div class="echarts" ref="surface1Ref"></div> <div class="echarts" ref="surface1Ref"></div>
@@ -152,19 +155,19 @@
<div class="start" /> <div class="start" />
<div class="radio" /> <div class="radio" />
<div class="end" /> <div class="end" />
<div class="text">总学习人数</div> <div class="text">{{chartLabel.one}}</div>
</div>
<div class="item1">
<div class="start" />
<div class="radio" />
<div class="end" />
<div class="text">人均学习时长</div>
</div> </div>
<div class="item2"> <div class="item2">
<div class="start" /> <div class="start" />
<div class="radio" /> <div class="radio" />
<div class="end" /> <div class="end" />
<div class="text">总学习时长</div> <div class="text">{{chartLabel.two}}</div>
</div>
<div class="item1">
<div class="start" />
<div class="radio" />
<div class="end" />
<div class="text">{{chartLabel.three}}</div>
</div> </div>
</div> </div>
</div> </div>
@@ -334,11 +337,19 @@ export default {
forDay: [], forDay: [],
towParmasn: { towParmasn: {
type: 1, type: 1,
dateType: 1, dateType: 2,
time: [], time: [],
day: [], day: [],
}, },
modalFlag: false, modalFlag: false,
checkedList: ['学习人数', '总学习时长'],
limitCheckedList: ['学习人数', '总学习时长'],
plainOptions: ['学习人数', '总学习时长', '人均学习时长'],
chartLabel: {
one: "学习人数",
two: "总学习时长",
three: "人均学习时长",
}
}); });
const surfaceRef = ref(null); const surfaceRef = ref(null);
const surface1Ref = ref(null); const surface1Ref = ref(null);
@@ -350,6 +361,24 @@ export default {
const datess = ref(); const datess = ref();
const hackValues = ref(); const hackValues = ref();
const checkboxChange = (event) => {
console.log("checkboxChange event:",event);
if(event.length>2){
message.warning("最多选两个");
console.log("checkboxChange checkedList:",state.checkedList);
state.checkedList = state.limitCheckedList;
}else{
state.limitCheckedList = event;
// modalChange();
if (state.towParmasn.dateType == 2) {
twoMonthChange(state.towParmasn.time);
} else if (state.towParmasn.dateType == 1) {
twoDatChange(state.towParmasn.day);
}
}
};
const eChartClickRight = async () => { const eChartClickRight = async () => {
state.modalFlag = true; state.modalFlag = true;
@@ -371,7 +400,7 @@ export default {
const course = []; const course = [];
const project = []; const project = [];
const router = []; const router = [];
res?.data?.forEach((item) => { res?.data?.result.forEach((item) => {
xData.push(item.xdata.slice(item.xdata.indexOf("-") + 1)); xData.push(item.xdata.slice(item.xdata.indexOf("-") + 1));
item?.list?.forEach((iten) => { item?.list?.forEach((iten) => {
if (iten.name == "case") { if (iten.name == "case") {
@@ -406,7 +435,7 @@ export default {
const course = []; const course = [];
const project = []; const project = [];
const router = []; const router = [];
res?.data?.forEach((item) => { res?.data?.result.forEach((item) => {
xData.push(item.xdata); xData.push(item.xdata);
item?.list?.forEach((iten) => { item?.list?.forEach((iten) => {
if (iten.name == "case") { if (iten.name == "case") {
@@ -445,7 +474,7 @@ export default {
const course = []; const course = [];
const project = []; const project = [];
const router = []; const router = [];
res?.data?.forEach((item) => { res?.data?.result.forEach((item) => {
xData.push(item.xdata); xData.push(item.xdata);
item?.list?.forEach((iten) => { item?.list?.forEach((iten) => {
if (iten.name == "course") { if (iten.name == "course") {
@@ -481,7 +510,7 @@ export default {
const course = []; const course = [];
const project = []; const project = [];
const router = []; const router = [];
res?.data?.forEach((item) => { res?.data?.result.forEach((item) => {
xData.push(item.xdata.slice(item.xdata.indexOf("-") + 1)); xData.push(item.xdata.slice(item.xdata.indexOf("-") + 1));
item?.list?.forEach((iten) => { item?.list?.forEach((iten) => {
if (iten.name == "course") { if (iten.name == "course") {
@@ -504,7 +533,7 @@ export default {
} }
}; };
const exportTwoData = async () => { const exportTwoData = async () => {
if (state.towParmasn.dateType == 0) { if (state.towParmasn.dateType == 1) {
if (!state.towParmasn.day?.length || state.towParmasn.day?.length < 1) { if (!state.towParmasn.day?.length || state.towParmasn.day?.length < 1) {
message.error("请选择要导出的时间日期后再进行导出"); message.error("请选择要导出的时间日期后再进行导出");
} else { } else {
@@ -536,7 +565,7 @@ export default {
} }
); );
} }
} else if (state.towParmasn.dateType == 1) { } else if (state.towParmasn.dateType == 2) {
if ( if (
!state.towParmasn.time?.length || !state.towParmasn.time?.length ||
state.towParmasn.time?.length < 1 state.towParmasn.time?.length < 1
@@ -573,9 +602,35 @@ export default {
} }
}; };
const modalChange = async () => { const modalChange = async () => {
if (state.towParmasn.dateType == 1) { console.log("modalChange type:",state.towParmasn.type);
if(state.towParmasn.type==2 || state.towParmasn.type==3){
state.chartLabel.one = "总阅读人数";
state.chartLabel.two = "总阅读时长";
state.chartLabel.three = "人均阅读时长";
state.plainOptions = ["总阅读人数","总阅读时长","人均阅读时长"];
state.checkedList = ["总阅读人数","总阅读时长"];
state.limitCheckedList = ["总阅读人数","总阅读时长"];
}else if(state.towParmasn.type==4){
state.chartLabel.one = "总查看人数";
state.chartLabel.two = "总提问人数";
state.chartLabel.three = "总回答人数";
state.plainOptions = ["总查看人数","总提问人数","总回答人数"];
state.checkedList = ["总查看人数","总提问人数"];
state.limitCheckedList = ["总查看人数","总提问人数"];
}else {
state.chartLabel.one = "学习人数";
state.chartLabel.two = "总学习时长";
state.chartLabel.three = "人均学习时长";
state.plainOptions = ["学习人数","总学习时长","人均学习时长"];
state.checkedList = ["学习人数","总学习时长"];
state.limitCheckedList = ["学习人数","总学习时长"];
}
option.value.series[0].name = state.chartLabel.one;
option.value.series[1].name = state.chartLabel.two;
option.value.series[2].name = state.chartLabel.two;
if (state.towParmasn.dateType == 2) {
twoMonthChange(state.towParmasn.time); twoMonthChange(state.towParmasn.time);
} else if (state.towParmasn.dateType == 0) { } else if (state.towParmasn.dateType == 1) {
twoDatChange(state.towParmasn.day); twoDatChange(state.towParmasn.day);
} }
}; };
@@ -622,20 +677,22 @@ export default {
return tooEarly || tooLate; return tooEarly || tooLate;
}; };
const twoSelectChange = async (e) => { const twoSelectChange = async (e) => {
if (e == 1) { if (e == 2) {
twoMonthChange(state.towParmasn.time); twoMonthChange(state.towParmasn.time);
} else if (e == 0) { } else if (e == 1) {
twoDatChange(state.towParmasn.day); twoDatChange(state.towParmasn.day);
} }
}; };
// 获取图表2月份数据 // 获取图表2月份数据
const twoMonthChange = async (e) => { const twoMonthChange = async (e) => {
if (e?.length > 0) { console.log("twoMonthChange e:",e);
const monthEnd = dayjs(e[1]) // if (e?.length > 0) {
if (true) {
const monthEnd = dayjs(state.towParmasn.time[1])
.endOf("month") .endOf("month")
.format("YYYY-MM-DD hh:mm:ss"); .format("YYYY-MM-DD 23:59:59");
const res = await api.boeuStudyDataGetStudyStaisticsList({ const res = await api.boeuStudyDataGetStudyStaisticsList({
beginTime: dayjs(e[0]).format("YYYY-MM-01 00:00:01"), beginTime: dayjs(state.towParmasn.time[0]).format("YYYY-MM-01 00:00:01"),
endTime: monthEnd, endTime: monthEnd,
dateType: state.towParmasn.dateType, dateType: state.towParmasn.dateType,
type: state.towParmasn.type, type: state.towParmasn.type,
@@ -650,47 +707,91 @@ export default {
const avgDuration = []; const avgDuration = [];
const count = []; const count = [];
const duration = []; const duration = [];
res?.data?.forEach((item) => { res?.data?.result.forEach((item) => {
xData.push(item.month); xData.push(item.day);
avgDuration.push(item.viewCount);
count.push(item.count);
duration.push(item.duration);
});
option.value.xAxis.data = xData;
// 右侧坐标轴数据
option.value.series[0].data = count;
//左侧坐标轴数据
option.value.series[1].data = avgDuration;
option.value.series[2].data = duration;
createEcharts2();
} else {
const xData = [];
const avgDuration = [];
const count = [];
const duration = [];
res?.data?.forEach((item) => {
xData.push(item.month);
avgDuration.push(item.avgDuration); avgDuration.push(item.avgDuration);
count.push(item.count); count.push(item.count);
duration.push(item.duration); duration.push(item.duration);
}); });
option.value.xAxis.data = xData; option.value.xAxis.data = xData;
// 右侧坐标轴数据 // 右侧坐标轴数据
option.value.series[0].data = count; // option.value.series[0].data = count;
//左侧坐标轴数据 // //左侧坐标轴数据
option.value.series[1].data = avgDuration; // option.value.series[1].data = avgDuration;
option.value.series[2].data = duration; // option.value.series[2].data = duration;
option.value.series[0].data = [];
option.value.series[1].data = [];
option.value.series[2].data = [];
console.log("checkedList:",state.checkedList);
for(let i=0;i<state.checkedList.length;i++){
if(state.checkedList[i]=="学习人数" || state.checkedList[i]=="总阅读人数" || state.checkedList[i]=="总查看人数"){
option.value.series[0].data = count;
option.value.series[0].name = state.checkedList[i];
}
if(state.checkedList[i]=="人均学习时长" || state.checkedList[i]=="人均阅读时长" || state.checkedList[i]=="总回答人数"){
option.value.series[1].data = avgDuration;
option.value.series[1].yAxisIndex = i;
option.value.series[1].name = state.checkedList[i];
}
if(state.checkedList[i]=="总学习时长" || state.checkedList[i]=="总阅读时长" || state.checkedList[i]=="总提问人数"){
option.value.series[2].data = duration;
option.value.series[2].yAxisIndex = i;
option.value.series[2].name = state.checkedList[i];
}
}
createEcharts2();
} else {
const xData = [];
const avgDuration = [];
const count = [];
const duration = [];
res?.data?.result.forEach((item) => {
xData.push(item.day);
avgDuration.push(item.avgDuration);
count.push(item.count);
duration.push(item.duration);
});
option.value.xAxis.data = xData;
// 右侧坐标轴数据
// option.value.series[0].data = count;
// //左侧坐标轴数据
// option.value.series[1].data = avgDuration;
// option.value.series[2].data = duration;
option.value.series[0].data = [];
option.value.series[1].data = [];
option.value.series[2].data = [];
console.log("checkedList:",state.checkedList);
console.log("666 duration:",duration);
for(let i=0;i<state.checkedList.length;i++){
if(state.checkedList[i]=="学习人数" || state.checkedList[i]=="总阅读人数" || state.checkedList[i]=="总查看人数"){
option.value.series[0].data = count;
option.value.series[0].name = state.checkedList[i];
}
if(state.checkedList[i]=="人均学习时长" || state.checkedList[i]=="人均阅读时长" || state.checkedList[i]=="总回答人数"){
option.value.series[1].data = avgDuration;
option.value.series[1].yAxisIndex = i;
option.value.series[1].name = state.checkedList[i];
}
if(state.checkedList[i]=="总学习时长" || state.checkedList[i]=="总阅读时长" || state.checkedList[i]=="总提问人数"){
option.value.series[2].data = duration;
option.value.series[2].yAxisIndex = i;
option.value.series[2].name = state.checkedList[i];
}
}
console.log("123:",option.value.series)
createEcharts2(); createEcharts2();
} }
} }
} }
}; };
const twoDatChange = async (e) => { const twoDatChange = async (e) => {
if (e?.length > 0) { console.log("twoDatChange e:",e);
// if (e?.length > 0) {
if (true) {
const dayStart = dayjs(e[0]) const dayStart = dayjs(e[0])
.startOf("day") .startOf("day")
.format("YYYY-MM-DD 00:00:01"); .format("YYYY-MM-DD 00:00:01");
const dayEnd = dayjs(e[1]).endOf("day").format("YYYY-MM-DD hh:mm:ss"); const dayEnd = dayjs(e[1]).endOf("day").format("YYYY-MM-DD 23:59:59");
const res = await api.boeuStudyDataGetStudyStaisticsList({ const res = await api.boeuStudyDataGetStudyStaisticsList({
beginTime: dayStart, beginTime: dayStart,
endTime: dayEnd, endTime: dayEnd,
@@ -707,25 +808,7 @@ export default {
const avgDuration = []; const avgDuration = [];
const count = []; const count = [];
const duration = []; const duration = [];
res?.data?.forEach((item) => { res?.data?.result.forEach((item) => {
xData.push(item.day);
avgDuration.push(item.viewCount);
count.push(item.count);
duration.push(item.duration);
});
option.value.xAxis.data = xData;
// 右侧坐标轴数据
option.value.series[0].data = count;
//左侧坐标轴数据
option.value.series[1].data = avgDuration;
option.value.series[2].data = duration;
createEcharts2();
} else {
const xData = [];
const avgDuration = [];
const count = [];
const duration = [];
res?.data?.forEach((item) => {
xData.push(item.day); xData.push(item.day);
avgDuration.push(item.avgDuration); avgDuration.push(item.avgDuration);
count.push(item.count); count.push(item.count);
@@ -733,10 +816,68 @@ export default {
}); });
option.value.xAxis.data = xData; option.value.xAxis.data = xData;
// 右侧坐标轴数据 // 右侧坐标轴数据
option.value.series[0].data = count; // option.value.series[0].data = count;
//左侧坐标轴数据 // //左侧坐标轴数据
option.value.series[1].data = avgDuration; // option.value.series[1].data = avgDuration;
option.value.series[2].data = duration; // option.value.series[2].data = duration;
option.value.series[0].data = [];
option.value.series[1].data = [];
option.value.series[2].data = [];
console.log("checkedList:",state.checkedList);
for(let i=0;i<state.checkedList.length;i++){
if(state.checkedList[i]=="学习人数" || state.checkedList[i]=="总阅读人数" || state.checkedList[i]=="总查看人数"){
option.value.series[0].data = count;
option.value.series[0].name = state.checkedList[i];
}
if(state.checkedList[i]=="人均学习时长" || state.checkedList[i]=="人均阅读时长" || state.checkedList[i]=="总回答人数"){
option.value.series[1].data = avgDuration;
option.value.series[1].yAxisIndex = i;
option.value.series[1].name = state.checkedList[i];
}
if(state.checkedList[i]=="总学习时长" || state.checkedList[i]=="总阅读时长" || state.checkedList[i]=="总提问人数"){
option.value.series[2].data = duration;
option.value.series[2].yAxisIndex = i;
option.value.series[2].name = state.checkedList[i];
}
}
createEcharts2();
} else {
const xData = [];
const avgDuration = [];
const count = [];
const duration = [];
res?.data?.result.forEach((item) => {
xData.push(item.day);
avgDuration.push(item.avgDuration);
count.push(item.count);
duration.push(item.duration);
});
option.value.xAxis.data = xData;
// 右侧坐标轴数据
// option.value.series[0].data = count;
// //左侧坐标轴数据
// option.value.series[1].data = avgDuration;
// option.value.series[2].data = duration;
option.value.series[0].data = [];
option.value.series[1].data = [];
option.value.series[2].data = [];
console.log("checkedList:",state.checkedList);
for(let i=0;i<state.checkedList.length;i++){
if(state.checkedList[i]=="学习人数" || state.checkedList[i]=="总阅读人数" || state.checkedList[i]=="总查看人数"){
option.value.series[0].data = count;
option.value.series[0].name = state.checkedList[i];
}
if(state.checkedList[i]=="人均学习时长" || state.checkedList[i]=="人均阅读时长" || state.checkedList[i]=="总回答人数"){
option.value.series[1].data = avgDuration;
option.value.series[1].yAxisIndex = i;
option.value.series[1].name = state.checkedList[i];
}
if(state.checkedList[i]=="总学习时长" || state.checkedList[i]=="总阅读时长" || state.checkedList[i]=="总提问人数"){
option.value.series[2].data = duration;
option.value.series[2].yAxisIndex = i;
option.value.series[2].name = state.checkedList[i];
}
}
createEcharts2(); createEcharts2();
} }
} }
@@ -758,7 +899,7 @@ export default {
const course = []; const course = [];
const project = []; const project = [];
const router = []; const router = [];
res?.data?.forEach((item) => { res?.data?.result.forEach((item) => {
xData.push(item.xdata); xData.push(item.xdata);
item?.list?.forEach((iten) => { item?.list?.forEach((iten) => {
if (iten.name == "course") { if (iten.name == "course") {
@@ -794,7 +935,7 @@ export default {
const course = []; const course = [];
const project = []; const project = [];
const router = []; const router = [];
res?.data?.forEach((item) => { res?.data?.result.forEach((item) => {
xData.push(item.xdata.slice(item.xdata.indexOf("-") + 1)); xData.push(item.xdata.slice(item.xdata.indexOf("-") + 1));
item?.list?.forEach((iten) => { item?.list?.forEach((iten) => {
if (iten.name == "course") { if (iten.name == "course") {
@@ -909,7 +1050,7 @@ export default {
const course = []; const course = [];
const project = []; const project = [];
const router = []; const router = [];
res?.data?.forEach((item) => { res?.data?.result.forEach((item) => {
xData.push(item.xdata); xData.push(item.xdata);
item?.list?.forEach((iten) => { item?.list?.forEach((iten) => {
if (iten.name == "case") { if (iten.name == "case") {
@@ -945,7 +1086,7 @@ export default {
const course = []; const course = [];
const project = []; const project = [];
const router = []; const router = [];
res?.data?.forEach((item) => { res?.data?.result.forEach((item) => {
xData.push(item.xdata.slice(item.xdata.indexOf("-") + 1)); xData.push(item.xdata.slice(item.xdata.indexOf("-") + 1));
item?.list?.forEach((iten) => { item?.list?.forEach((iten) => {
if (iten.name == "case") { if (iten.name == "case") {
@@ -1406,11 +1547,27 @@ export default {
}); });
}; };
const initTime = () => { const initTime = () => {
const monthEnd = dayjs(new Date()).endOf("year").format("YYYY-MM"); // console.log("initTime:",dayjs(new Date()).year()+"-"+(dayjs(new Date()).month()));
const start = dayjs(new Date()).startOf("year").format("YYYY-MM"); // const monthEnd = dayjs(new Date()).endOf("year").format("YYYY-MM");
var year = dayjs(new Date()).year();
var month = dayjs(new Date()).month()+1;
console.log("initTime year:",year,"month:",month);
var year1 = year;
var month1 = parseInt(month) - 5;
if(month1<=0){
year1 = parseInt(year1) - 1;
month1 = 12 - (Math.abs(month1)%12);
}
console.log("initTime year1:",year1,"month1:",month1);
const monthEnd = dayjs(new Date()).year()+"-"+(dayjs(new Date()).month()+1);
// const start = dayjs(new Date()).startOf("year").format("YYYY-MM");
const start = year1 + "-" + month1;
state.threeTime = [dayjs(start), dayjs(monthEnd)]; state.threeTime = [dayjs(start), dayjs(monthEnd)];
state.forTime = [dayjs(start), dayjs(monthEnd)]; state.forTime = [dayjs(start), dayjs(monthEnd)];
state.towParmasn.time = [dayjs(start), dayjs(monthEnd)]; state.towParmasn.time = [dayjs(start), dayjs(monthEnd)];
state.towParmasn.day = [dayjs( year + "-" + month + "-" + "01" ), dayjs(monthEnd)];
state.threeDay = [dayjs( year + "-" + month + "-" + "01" ), dayjs(monthEnd)];
state.forDay = [dayjs( year + "-" + month + "-" + "01" ), dayjs(monthEnd)];
leftMonthChange([dayjs(start), dayjs(monthEnd)]); leftMonthChange([dayjs(start), dayjs(monthEnd)]);
rightMonthChange([dayjs(start), dayjs(monthEnd)]); rightMonthChange([dayjs(start), dayjs(monthEnd)]);
twoMonthChange([dayjs(start), dayjs(monthEnd)]); twoMonthChange([dayjs(start), dayjs(monthEnd)]);
@@ -1425,6 +1582,7 @@ export default {
}); });
return { return {
...toRefs(state), ...toRefs(state),
checkboxChange,
eChartClickRight, eChartClickRight,
rightMonthChange, rightMonthChange,
rightChange, rightChange,
@@ -1540,7 +1698,7 @@ export default {
} }
} }
.item1 { .item1 {
margin-right: 15px; // margin-right: 15px;
display: flex; display: flex;
align-items: center; align-items: center;
.start, .start,
@@ -1561,6 +1719,7 @@ export default {
} }
} }
.item2 { .item2 {
margin-right: 15px;
display: flex; display: flex;
align-items: center; align-items: center;
.start, .start,

View File

@@ -12,17 +12,19 @@
allowClear allowClear
></a-select> --> ></a-select> -->
<a-cascader <a-cascader
change-on-select
:options="option" :options="option"
placeholder="请选择组织"
v-model:value="orgId" v-model:value="orgId"
:allowClear="allowClear"
style="width: 100%" style="width: 100%"
placeholder="请选择归属组织"
:allowClear=false
:fieldNames="{ :fieldNames="{
label: 'name', label: 'orgName',
value: 'id', value: 'organizationId',
children: 'treeChildList', children: 'childList',
}" }"
/> >
</a-cascader>
</div> </div>
<div class="select"> <div class="select">
<a-input <a-input
@@ -44,6 +46,15 @@
> >
</a-input> </a-input>
</div> </div>
<div class="select">
<a-range-picker
v-model:value="publishTime"
type="date"
valueFormat="YYYY-MM-DD"
:placeholder="['创建开始时间','结束时间']"
style="width: 100%; margin-right: 0px"
/>
</div>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<div class="btnzx btnzx1" @click="searchClick"> <div class="btnzx btnzx1" @click="searchClick">
<div class="search"></div> <div class="search"></div>
@@ -64,7 +75,13 @@
:class="currentTab === index ? 'tabActive' : 'tabItem'" :class="currentTab === index ? 'tabActive' : 'tabItem'"
@click="tabClick(index)" @click="tabClick(index)"
> >
{{ item.text }} ({{ item.num }}) <a-popover v-if="index==0" trigger="hover" placement="topLeft">
<template #content>
此处数据展示全部单层项目数量列表展示条数与此处数量可能存在差异
</template>
{{ item.text }} ({{ item.num }})
</a-popover>
<span v-else>{{ item.text }} ({{ item.num }})</span>
</div> </div>
</div> </div>
<div class="btnzs"> <div class="btnzs">
@@ -289,9 +306,11 @@ import axios from "axios";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import Cookies from "vue-cookies"; import Cookies from "vue-cookies";
import {useStore} from "vuex";
export default { export default {
name: "OvervoeW", name: "OvervoeW",
setup() { setup() {
const store = useStore();
const state = reactive({ const state = reactive({
tableLoading: false, // table加载图标 tableLoading: false, // table加载图标
tableDataTotal: 0, // 数据总条数 tableDataTotal: 0, // 数据总条数
@@ -306,25 +325,42 @@ export default {
resetOrgId: [], resetOrgId: [],
allowClear: true, allowClear: true,
type: null, type: null,
publishTime: [], // 创建时间
}); });
// 获取tab数据 // 获取tab数据
const getTabData = async () => { const getTabData = async () => {
console.log(state.type); console.log("getTabData 111111:",state.type);
console.log("getTabData 222222:",store.state.userInfo.roleList);
var manageFlag = false;
for(let i=0;i<store.state.userInfo.roleList.length;i++){
if(store.state.userInfo.roleList[i].roleCode=="system-admin"){
manageFlag = true;
break;
}
}
axios({ axios({
method: "get", method: "post",
url: "/report/boeu/all/total", url: "/report/boeu/all/total",
params: { type: state.type }, // params: { manager: true },
data: {
manager: manageFlag,
name: state.name,
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
creator: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
},
headers: { headers: {
token: Cookies.get("token"), token: Cookies.get("token"),
}, },
}).then((res) => { }).then((res) => {
const list = [ const list = [
{ text: "项目", num: res.data.data?.projectTotal }, { text: "项目", num: res.data.result?.projectTotal },
{ text: "学习路径图", num: res.data.data?.routerTotal }, { text: "学习路径图", num: res.data.result?.routerTotal },
{ text: "授课", num: res.data.data?.teachingTotal }, { text: "授课", num: res.data.result?.teachingTotal },
{ text: "课程", num: res.data.data?.courseTotal }, { text: "课程", num: res.data.result?.courseTotal },
{ text: "考试", num: res.data.data?.examTotal }, { text: "考试", num: res.data.result?.examTotal },
{ text: "案例", num: res.data.data?.caseTotal }, { text: "案例", num: res.data.result?.caseTotal },
]; ];
tabData.value = list; tabData.value = list;
}); });
@@ -333,17 +369,46 @@ export default {
const reset = async () => { const reset = async () => {
state.tableLoading = true; state.tableLoading = true;
state.creator = ""; state.creator = "";
state.publishTime = [];
state.name = ""; state.name = "";
state.orgId = state.resetOrgId; state.orgId = state.resetOrgId;
getTableData(); getTableData();
getTabData();
}; };
//请求组织接口 //请求组织接口
const getOrgList = async () => { const getOrgList = async () => {
var manageFlag = false;
for(let i=0;i<store.state.userInfo.roleList.length;i++){
if(store.state.userInfo.roleList[i].roleCode=="system-admin"){
manageFlag = true;
break;
}
}
const res = await api.userGetUserOrg({}); const res = await api.userGetUserOrg({});
if (res) { if (res) {
state.option = res.data?.result?.list; if(manageFlag){
state.orgId = res.data?.result?.treeNodeList; state.option = [{
state.resetOrgId = res.data?.result?.treeNodeList; orgName:"全部",
organizationId: null,
childList:res.data?.result.orgTreeList
}];
state.orgId = [null,...res.data?.result.treeNodeList];
state.resetOrgId = [null,...res.data?.result.treeNodeList];
}else{
if(res.data?.result.orgTreeList!=null){
state.option = res.data?.result.orgTreeList;
state.orgId = res.data?.result.treeNodeList;
state.resetOrgId = res.data?.result.treeNodeList;
}else{
state.option = [{
orgName:"无权限",
organizationId: "1",
childList:[],
}];
state.orgId = ["1"];
state.resetOrgId = ["1"];
}
}
state.type = res.data?.result?.userType; state.type = res.data?.result?.userType;
res.data?.result?.userType === 1 res.data?.result?.userType === 1
? (state.allowClear = true) ? (state.allowClear = true)
@@ -440,10 +505,12 @@ export default {
url: "/report/boeu/case/exportAll", url: "/report/boeu/case/exportAll",
data: { data: {
name: state.name, name: state.name,
organizationId: state.orgId orgId: state.orgId
? state.orgId[state.orgId.length - 1] ? state.orgId[state.orgId.length - 1]
: null, : null,
createName: state.creator, createName: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
}, },
responseType: "blob", responseType: "blob",
headers: { headers: {
@@ -458,10 +525,12 @@ export default {
url: "/report/boeu/exam/exportAll", url: "/report/boeu/exam/exportAll",
data: { data: {
name: state.name, name: state.name,
organizationId: state.orgId orgId: state.orgId
? state.orgId[state.orgId.length - 1] ? state.orgId[state.orgId.length - 1]
: null, : null,
createName: state.creator, createName: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
}, },
responseType: "blob", responseType: "blob",
headers: { headers: {
@@ -480,6 +549,8 @@ export default {
? state.orgId[state.orgId.length - 1] ? state.orgId[state.orgId.length - 1]
: null, : null,
createName: state.creator, createName: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
}, },
responseType: "blob", responseType: "blob",
headers: { headers: {
@@ -498,6 +569,8 @@ export default {
? state.orgId[state.orgId.length - 1] ? state.orgId[state.orgId.length - 1]
: null, : null,
createName: state.creator, createName: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
}, },
responseType: "blob", responseType: "blob",
headers: { headers: {
@@ -512,10 +585,12 @@ export default {
url: "/report/boeu/router/exportAll", url: "/report/boeu/router/exportAll",
data: { data: {
name: state.name, name: state.name,
organizationId: state.orgId orgId: state.orgId
? state.orgId[state.orgId.length - 1] ? state.orgId[state.orgId.length - 1]
: null, : null,
createName: state.creator, createName: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
}, },
responseType: "blob", responseType: "blob",
headers: { headers: {
@@ -532,6 +607,8 @@ export default {
name: state.name, name: state.name,
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null, orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
createName: state.creator, createName: state.creator,
startCreateTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endCreateTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
}, },
responseType: "blob", responseType: "blob",
headers: { headers: {
@@ -554,14 +631,16 @@ export default {
//考试列表 //考试列表
const res = await api.boeuExamPageList({ const res = await api.boeuExamPageList({
creator: state.creator, creator: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null, orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
testName: state.name, testName: state.name,
page: state.pageNo, page: state.pageNo,
size: state.pageSize, size: state.pageSize,
}); });
if (res) { if (res) {
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
const list = res.data.rows?.map((item) => { const list = res.data.result.rows?.map((item) => {
return { return {
key: item.id, key: item.id,
...item, ...item,
@@ -574,14 +653,16 @@ export default {
//案例列表 //案例列表
const res = await api.boeuCasePageList({ const res = await api.boeuCasePageList({
author: state.creator, author: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null, orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
title: state.name, title: state.name,
page: state.pageNo, page: state.pageNo,
size: state.pageSize, size: state.pageSize,
}); });
if (res) { if (res) {
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
const list = res.data.rows?.map((item) => { const list = res.data.result.rows?.map((item) => {
return { return {
key: item.id, key: item.id,
...item, ...item,
@@ -599,15 +680,17 @@ export default {
? state.orgId[state.orgId.length - 1] ? state.orgId[state.orgId.length - 1]
: null, : null,
createName: state.creator, createName: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
}); });
const list = res.data.rows.map((item) => { const list = res.data.result.rows.map((item) => {
return { return {
key: item.boeCourseId, key: item.boeCourseId,
...item, ...item,
}; };
}); });
tableData.value = list; tableData.value = list;
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
state.tableLoading = false; state.tableLoading = false;
} else if (state.currentTab === 2) { } else if (state.currentTab === 2) {
const res = await api.boeuTeachingPageList({ const res = await api.boeuTeachingPageList({
@@ -616,15 +699,17 @@ export default {
teachingName: state.name, teachingName: state.name,
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null, orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
createName: state.creator, createName: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
}); });
const list = res.data.rows?.map((item) => { const list = res.data.result.rows?.map((item) => {
return { return {
key: item.boeOffcoursePlanId, key: item.boeOffcoursePlanId,
...item, ...item,
}; };
}); });
tableData.value = list; tableData.value = list;
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
state.tableLoading = false; state.tableLoading = false;
} else if (state.currentTab === 1) { } else if (state.currentTab === 1) {
const res = await api.boeuRoterPageList({ const res = await api.boeuRoterPageList({
@@ -633,8 +718,10 @@ export default {
routerName: state.name, routerName: state.name,
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null, orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
createName: state.creator, createName: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
}); });
const list = res.data.rows?.map((item) => { const list = res.data.result.rows?.map((item) => {
return { return {
key: item.boeRouterInfoId, key: item.boeRouterInfoId,
...item, ...item,
@@ -642,7 +729,7 @@ export default {
}); });
tableData.value = list; tableData.value = list;
state.tableLoading = false; state.tableLoading = false;
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
} else if (state.currentTab === 0) { } else if (state.currentTab === 0) {
const res = await api.boeuProjectPageList({ const res = await api.boeuProjectPageList({
page: state.pageNo, page: state.pageNo,
@@ -650,6 +737,8 @@ export default {
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null, orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
createName: state.creator, createName: state.creator,
projectName: state.name, projectName: state.name,
startCreateTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endCreateTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
}); });
if (res) { if (res) {
const fun = (arr) => { const fun = (arr) => {
@@ -666,8 +755,8 @@ export default {
}); });
return list; return list;
}; };
tableData.value = fun(res.data.rows); tableData.value = fun(res.data.result.rows);
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
state.tableLoading = false; state.tableLoading = false;
} }
} }
@@ -677,6 +766,7 @@ export default {
state.pageSize = 10; state.pageSize = 10;
state.tableDataTotal = 0; state.tableDataTotal = 0;
getTableData(); getTableData();
getTabData();
}; };
// cloumns 表头 // cloumns 表头
const columns = ref([ const columns = ref([
@@ -798,7 +888,7 @@ export default {
if (index === 0) { if (index === 0) {
columns.value = [ columns.value = [
{ {
title: "名称", title: "项目名称",
dataIndex: "projectName", dataIndex: "projectName",
key: "projectName", key: "projectName",
width: 120, width: 120,
@@ -816,7 +906,7 @@ export default {
fixed: "left", fixed: "left",
}, },
{ {
title: "分类", title: "项目分类",
dataIndex: "trainingType", dataIndex: "trainingType",
ellipsis: true, ellipsis: true,
key: "trainingType", key: "trainingType",
@@ -840,6 +930,14 @@ export default {
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "学习人数",
dataIndex: "startLearnerTotal",
ellipsis: true,
key: "startLearnerTotal",
width: 120,
align: "center",
},
{ {
title: "参与人数", title: "参与人数",
dataIndex: "participantsTotal", dataIndex: "participantsTotal",
@@ -849,10 +947,10 @@ export default {
align: "center", align: "center",
}, },
{ {
title: "学习人数", title: "参与率",
dataIndex: "startLearnerTotal", dataIndex: "participantsRate",
ellipsis: true, ellipsis: true,
key: "startLearnerTotal", key: "participantsRate",
width: 120, width: 120,
align: "center", align: "center",
}, },
@@ -864,6 +962,14 @@ export default {
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "完成率",
dataIndex: "completedRate",
ellipsis: true,
key: "completedRate",
width: 120,
align: "center",
},
{ {
title: "项目时间", title: "项目时间",
dataIndex: "proTime", dataIndex: "proTime",
@@ -872,6 +978,14 @@ export default {
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "创建时间",
dataIndex: "createTime",
ellipsis: true,
key: "createTime",
width: 120,
align: "center",
},
{ {
title: "发布时间", title: "发布时间",
dataIndex: "publishTime", dataIndex: "publishTime",
@@ -900,7 +1014,7 @@ export default {
} else if (index === 4) { } else if (index === 4) {
columns.value = [ columns.value = [
{ {
title: "名称", title: "考试名称",
dataIndex: "testName", dataIndex: "testName",
key: "id", key: "id",
width: 120, width: 120,
@@ -918,8 +1032,8 @@ export default {
fixed: "left", fixed: "left",
}, },
{ {
title: "参加人数", title: "题量",
dataIndex: "totalNumber", dataIndex: "numOfQuest",
ellipsis: true, ellipsis: true,
width: 120, width: 120,
@@ -934,13 +1048,22 @@ export default {
align: "center", align: "center",
}, },
{ {
title: "题量", title: "参加人数",
dataIndex: "numOfQuest", dataIndex: "totalNumber",
ellipsis: true, ellipsis: true,
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "参与率",
dataIndex: "answerRate",
ellipsis: true,
width: 120,
align: "center",
},
{ {
title: "通过人数", title: "通过人数",
dataIndex: "numOfPass", dataIndex: "numOfPass",
@@ -957,6 +1080,14 @@ export default {
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "创建时间",
dataIndex: "createTime",
ellipsis: true,
key: "createTime",
width: 120,
align: "center",
},
{ {
title: "发布时间", title: "发布时间",
dataIndex: "publishTime", dataIndex: "publishTime",
@@ -985,7 +1116,7 @@ export default {
} else if (index === 5) { } else if (index === 5) {
columns.value = [ columns.value = [
{ {
title: "名称", title: "案例名称",
dataIndex: "title", dataIndex: "title",
ellipsis: true, ellipsis: true,
}, },
@@ -995,6 +1126,12 @@ export default {
ellipsis: true, ellipsis: true,
align: "center", align: "center",
}, },
// {
// title: "案例分类",
// dataIndex: "majorType",
// ellipsis: true,
// align: "center",
// },
{ {
title: "专业分类", title: "专业分类",
dataIndex: "majorType", dataIndex: "majorType",
@@ -1002,47 +1139,47 @@ export default {
align: "center", align: "center",
}, },
{ {
title: "浏览", title: "浏览",
dataIndex: "views", dataIndex: "views",
ellipsis: true, ellipsis: true,
align: "center", align: "center",
}, },
{ {
title: "点赞", title: "点赞",
dataIndex: "praises", dataIndex: "praises",
ellipsis: true, ellipsis: true,
align: "center", align: "center",
}, },
{ {
title: "收藏量", title: "评论数",
dataIndex: "favorites",
ellipsis: true,
align: "center",
},
{
title: "评论量",
dataIndex: "comments", dataIndex: "comments",
ellipsis: true, ellipsis: true,
align: "center", align: "center",
}, },
{ {
title: "发布时间", title: "收藏数",
dataIndex: "favorites",
ellipsis: true,
align: "center",
},
{
title: "创建时间",
dataIndex: "sysCreateTime", dataIndex: "sysCreateTime",
key: "sysCreateTime", key: "sysCreateTime",
ellipsis: true, ellipsis: true,
align: "center", align: "center",
}, },
{ // {
title: "创建人/作者", // title: "创建人/作者",
dataIndex: "authorName", // dataIndex: "authorName",
ellipsis: true, // ellipsis: true,
align: "center", // align: "center",
}, // },
]; ];
} else if (index === 3) { } else if (index === 3) {
columns.value = [ columns.value = [
{ {
title: "名称", title: "课程名称",
dataIndex: "name", dataIndex: "name",
key: "name", key: "name",
width: 120, width: 120,
@@ -1060,19 +1197,19 @@ export default {
fixed: "left", fixed: "left",
}, },
{ {
title: "类", title: "课程分类",
dataIndex: "courseType", dataIndex: "type",
ellipsis: true, ellipsis: true,
key: "courseType", key: "type",
width: 120, width: 120,
align: "center", align: "center",
fixed: "left", fixed: "left",
}, },
{ {
title: "类", title: "类",
dataIndex: "type", dataIndex: "courseType",
ellipsis: true, ellipsis: true,
key: "type", key: "courseType",
width: 120, width: 120,
align: "center", align: "center",
fixed: "left", fixed: "left",
@@ -1095,22 +1232,6 @@ export default {
align: "center", align: "center",
fixed: "left", fixed: "left",
}, },
{
title: "评论数",
dataIndex: "commentTotal",
ellipsis: true,
key: "commentTotal",
width: 120,
align: "center",
},
{
title: "浏览量",
dataIndex: "viewTotal",
ellipsis: true,
key: "viewTotal",
width: 120,
align: "center",
},
{ {
title: "开课次数", title: "开课次数",
dataIndex: "classTotal", dataIndex: "classTotal",
@@ -1119,6 +1240,14 @@ export default {
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "浏览次数",
dataIndex: "viewTotal",
ellipsis: true,
key: "viewTotal",
width: 120,
align: "center",
},
{ {
title: "学习人数", title: "学习人数",
dataIndex: "learnerNumber", dataIndex: "learnerNumber",
@@ -1143,6 +1272,30 @@ export default {
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "完成率",
dataIndex: "completedRate",
ellipsis: true,
key: "completedRate",
width: 120,
align: "center",
},
{
title: "评论数",
dataIndex: "commentTotal",
ellipsis: true,
key: "commentTotal",
width: 120,
align: "center",
},
{
title: "创建时间",
dataIndex: "createTime",
ellipsis: true,
key: "createTime",
width: 120,
align: "center",
},
{ {
title: "发布时间", title: "发布时间",
dataIndex: "publishTime", dataIndex: "publishTime",
@@ -1171,7 +1324,7 @@ export default {
} else if (index === 2) { } else if (index === 2) {
columns.value = [ columns.value = [
{ {
title: "课名称", title: "课名称",
dataIndex: "name", dataIndex: "name",
key: "name", key: "name",
width: 120, width: 120,
@@ -1189,7 +1342,7 @@ export default {
fixed: "left", fixed: "left",
}, },
{ {
title: "分类", title: "课程分类",
dataIndex: "typeName", dataIndex: "typeName",
ellipsis: true, ellipsis: true,
key: "typeName", key: "typeName",
@@ -1198,19 +1351,11 @@ export default {
fixed: "left", fixed: "left",
}, },
{ {
title: "授课时长(分钟)", title: "授课时长(小时)",
dataIndex: "teachingLength", dataIndex: "teachingLength",
ellipsis: true, ellipsis: true,
key: "teachingLength", key: "teachingLength",
width: 120, width: 150,
align: "center",
},
{
title: "授课教师",
dataIndex: "teacher",
ellipsis: true,
key: "teacher",
width: 120,
align: "center", align: "center",
}, },
{ {
@@ -1222,21 +1367,13 @@ export default {
align: "center", align: "center",
}, },
{ {
title: "评分", title: "课程评分",
dataIndex: "score", dataIndex: "score",
ellipsis: true, ellipsis: true,
key: "score", key: "score",
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "授课时间",
dataIndex: "teachingTime",
ellipsis: true,
key: "teachingTime",
width: 120,
align: "center",
},
{ {
title: "创建时间", title: "创建时间",
dataIndex: "createTime", dataIndex: "createTime",
@@ -1245,6 +1382,14 @@ export default {
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "授课时间",
dataIndex: "teachingTime",
ellipsis: true,
key: "teachingTime",
width: 120,
align: "center",
},
{ {
title: "状态", title: "状态",
dataIndex: "status", dataIndex: "status",
@@ -1261,11 +1406,19 @@ export default {
width: 120, width: 120,
align: "center", align: "center",
}, },
// {
// title: "授课教师",
// dataIndex: "teacher",
// ellipsis: true,
// key: "teacher",
// width: 120,
// align: "center",
// },
]; ];
} else if (index === 1) { } else if (index === 1) {
columns.value = [ columns.value = [
{ {
title: "名称", title: "路径图名称",
dataIndex: "boeRouterInfoName", dataIndex: "boeRouterInfoName",
key: "boeRouterInfoName", key: "boeRouterInfoName",
width: 120, width: 120,
@@ -1317,6 +1470,14 @@ export default {
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "参与率",
dataIndex: "participantsRate",
ellipsis: true,
key: "participantsRate",
width: 120,
align: "center",
},
{ {
title: "完成人数", title: "完成人数",
dataIndex: "completionNumber", dataIndex: "completionNumber",
@@ -1326,13 +1487,29 @@ export default {
align: "center", align: "center",
}, },
{ {
title: "发布时间", title: "完成率",
dataIndex: "completedRate",
ellipsis: true,
key: "completedRate",
width: 120,
align: "center",
},
{
title: "创建时间",
dataIndex: "createTime", dataIndex: "createTime",
ellipsis: true, ellipsis: true,
key: "createTime", key: "createTime",
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "发布时间",
dataIndex: "publishTime",
ellipsis: true,
key: "publishTime",
width: 120,
align: "center",
},
{ {
title: "状态", title: "状态",
dataIndex: "status", dataIndex: "status",

View File

@@ -23,6 +23,15 @@
> >
</a-input> </a-input>
</div> </div>
<div class="select">
<a-range-picker
v-model:value="publishTime"
type="date"
valueFormat="YYYY-MM-DD"
:placeholder="['发布开始时间','结束时间']"
style="width: 100%; margin-right: 0px"
/>
</div>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<div class="btnzx btnzx1" @click="searchData"> <div class="btnzx btnzx1" @click="searchData">
<div class="search"></div> <div class="search"></div>
@@ -104,11 +113,13 @@ export default {
pageSize: 10, // 每页条数 pageSize: 10, // 每页条数
pageNo: 1, //当前页码 pageNo: 1, //当前页码
createName: "", createName: "",
publishTime: "", // 发布时间
title: "", title: "",
selectedRowKeys: [], selectedRowKeys: [],
}); });
const reset = async () => { const reset = async () => {
state.createName = ""; state.createName = "";
state.publishTime = [];
state.title = ""; state.title = "";
state.selectedRowKeys = [] state.selectedRowKeys = []
getTableData(); getTableData();
@@ -118,13 +129,16 @@ export default {
const params = { const params = {
title: state.title, title: state.title,
createName: state.createName, createName: state.createName,
// publishTime: state.publishTime,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
pageNo: state.pageNo, pageNo: state.pageNo,
pageSize: state.pageSize, pageSize: state.pageSize,
}; };
const res = await api.boeuQuestionPageList(params); const res = await api.boeuQuestionPageList(params);
if (res) { if (res) {
tableData.value = res.data.rows; tableData.value = res.data.result.rows;
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
state.tableLoading = false; state.tableLoading = false;
} }
}; };
@@ -133,46 +147,50 @@ export default {
// cloumns 表头 // cloumns 表头
const columns = ref([ const columns = ref([
{ {
title: "问答标题", title: "问答名称",
dataIndex: "title", dataIndex: "title",
ellipsis: true, ellipsis: true,
key: "title", key: "title",
align: "center", align: "center",
}, },
// {
// title: "归属组织",
// dataIndex: "organizationName",
// ellipsis: true,
// key: "organizationName",
// align: "center",
// },
{ {
title: "归属组织", title: "浏览数",
dataIndex: "organizationName",
ellipsis: true,
key: "organizationName",
align: "center",
},
{
title: "浏览量",
dataIndex: "views", dataIndex: "views",
ellipsis: true, ellipsis: true,
key: "views", key: "views",
align: "center", align: "center",
width: 100,
}, },
{ {
title: "评论数", title: "点赞数",
dataIndex: "answers",
ellipsis: true,
key: "answers",
align: "center",
},
{
title: "分享量",
dataIndex: "shares",
ellipsis: true,
key: "shares",
align: "center",
},
{
title: "点赞量",
dataIndex: "praises", dataIndex: "praises",
ellipsis: true, ellipsis: true,
key: "praises", key: "praises",
align: "center", align: "center",
width: 100,
},
{
title: "回答数",
dataIndex: "answers",
ellipsis: true,
key: "answers",
align: "center",
width: 100,
},
{
title: "分享数",
dataIndex: "shares",
ellipsis: true,
key: "shares",
align: "center",
width: 100,
}, },
{ {
title: "收藏数", title: "收藏数",
@@ -180,6 +198,7 @@ export default {
ellipsis: true, ellipsis: true,
key: "favorites", key: "favorites",
align: "center", align: "center",
width: 100,
}, },
{ {
title: "发布时间", title: "发布时间",
@@ -187,20 +206,22 @@ export default {
ellipsis: true, ellipsis: true,
key: "sysCreateTime", key: "sysCreateTime",
align: "center", align: "center",
width: 140,
}, },
{ // {
title: "问答状态", // title: "问答状态",
dataIndex: "status", // dataIndex: "status",
ellipsis: true, // ellipsis: true,
key: "status", // key: "status",
align: "center", // align: "center",
}, // },
{ {
title: "创建人", title: "创建人",
dataIndex: "sysCreateBy", dataIndex: "sysCreateBy",
ellipsis: true, ellipsis: true,
key: "sysCreateBy", key: "sysCreateBy",
align: "center", align: "center",
width: 140,
}, },
]); ]);
// 导出事件 // 导出事件
@@ -227,6 +248,9 @@ export default {
const params = { const params = {
title: state.title, title: state.title,
createName: state.createName, createName: state.createName,
// publishTime: state.publishTime,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0] +" 00:00:01",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
pageNo: state.pageNo, pageNo: state.pageNo,
pageSize: state.pageSize, pageSize: state.pageSize,
}; };
@@ -294,7 +318,7 @@ export default {
.select { .select {
margin-right: 20px; margin-right: 20px;
margin-bottom: 20px; margin-bottom: 20px;
width: calc((100% - 76px - 200px) / 2); width: calc((100% - 76px - 220px) / 3);
} }
.btnz { .btnz {
padding: 0px 26px 0px 26px; padding: 0px 26px 0px 26px;

View File

@@ -23,6 +23,15 @@
> >
</a-input> </a-input>
</div> </div>
<div class="select">
<a-range-picker
v-model:value="publishTime"
type="date"
valueFormat="YYYY-MM-DD"
:placeholder="['发布开始时间','结束时间']"
style="width: 100%; margin-right: 0px"
/>
</div>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<div class="btnzx btnzx1" @click="searchData"> <div class="btnzx btnzx1" @click="searchData">
<div class="search"></div> <div class="search"></div>
@@ -127,6 +136,7 @@ export default {
pageSize: 10, // 每页条数 pageSize: 10, // 每页条数
pageNo: 1, //当前页码 pageNo: 1, //当前页码
createName: "", //创建者名称 createName: "", //创建者名称
publishTime: "", // 发布时间
title: "", // 文章名称 title: "", // 文章名称
selectedRowKeys: [], // 选中的列 selectedRowKeys: [], // 选中的列
}); });
@@ -157,6 +167,11 @@ export default {
if (state.createName) { if (state.createName) {
params.createName = state.createName; params.createName = state.createName;
} }
if (state.publishTime.length>0) {
// params.publishTime = state.publishTime;
params.startTime = typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+" 00:00:00";
params.endTime = typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59";
}
axios({ axios({
method: "post", method: "post",
url: "/report/boeu/article/exportAll", url: "/report/boeu/article/exportAll",
@@ -183,19 +198,31 @@ export default {
} }
const getTableData = async () => { const getTableData = async () => {
state.tableLoading = true; state.tableLoading = true;
const params = { page: state.pageNo, size: state.pageSize }; const params = {
title: state.title,
createName: state.createName,
// publishTime: state.publishTime,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+" 00:00:00",
endTime: typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59",
page: state.pageNo,
size: state.pageSize
};
if (state.title) { if (state.title) {
params.title = state.title; params.title = state.title;
} }
if (state.createName) { if (state.createName) {
params.createName = state.createName; params.createName = state.createName;
} }
if (state.publishTime.length>0) {
// params.publishTime = state.publishTime;
params.startTime = state.publishTime[0]+" 00:00:00";
params.endTime = state.publishTime[1]+" 23:59:59";
}
const res = await api.boeuArticlePageList(params); const res = await api.boeuArticlePageList(params);
if (res) { if (res) {
state.tableLoading = false; state.tableLoading = false;
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
const list = res.data.rows?.map((item) => { const list = res.data.result.rows?.map((item) => {
return { return {
...item, ...item,
key: item.id, key: item.id,
@@ -207,6 +234,7 @@ export default {
const resetClick = () => { const resetClick = () => {
state.selectedRowKeys = []; state.selectedRowKeys = [];
state.createName = ""; state.createName = "";
state.publishTime = [];
state.title = ""; state.title = "";
getTableData(); getTableData();
}; };
@@ -220,19 +248,28 @@ export default {
key: "title", key: "title",
align: "center", align: "center",
}, },
// {
// title: "归属组织",
// dataIndex: "orgName",
// ellipsis: true,
// key: "orgName",
// align: "center",
// },
{ {
title: "归属组织", title: "浏览数",
dataIndex: "orgName",
ellipsis: true,
key: "orgName",
align: "center",
},
{
title: "浏览量",
dataIndex: "views", dataIndex: "views",
ellipsis: true, ellipsis: true,
key: "views", key: "views",
align: "center", align: "center",
width: 100,
},
{
title: "点赞数",
dataIndex: "praises",
ellipsis: true,
key: "praises",
align: "center",
width: 100,
}, },
{ {
title: "评论数", title: "评论数",
@@ -240,20 +277,15 @@ export default {
ellipsis: true, ellipsis: true,
key: "comments", key: "comments",
align: "center", align: "center",
width: 100,
}, },
{ {
title: "分享", title: "分享",
dataIndex: "shares", dataIndex: "shares",
ellipsis: true, ellipsis: true,
key: "shares", key: "shares",
align: "center", align: "center",
}, width: 100,
{
title: "点赞量",
dataIndex: "praises",
ellipsis: true,
key: "praises",
align: "center",
}, },
{ {
title: "收藏数", title: "收藏数",
@@ -261,6 +293,7 @@ export default {
ellipsis: true, ellipsis: true,
key: "favorites", key: "favorites",
align: "center", align: "center",
width: 100,
}, },
{ {
title: "发布时间", title: "发布时间",
@@ -268,20 +301,22 @@ export default {
ellipsis: true, ellipsis: true,
key: "publishTime", key: "publishTime",
align: "center", align: "center",
width: 140,
}, },
{ // {
title: "文章状态", // title: "文章状态",
dataIndex: "status", // dataIndex: "status",
ellipsis: true, // ellipsis: true,
key: "status", // key: "status",
align: "center", // align: "center",
}, // },
{ {
title: "创建人", title: "创建人",
dataIndex: "sysCreateBy", dataIndex: "sysCreateBy",
ellipsis: true, ellipsis: true,
key: "sysCreateBy", key: "sysCreateBy",
align: "center", align: "center",
width: 120,
}, },
]); ]);
// table选中 // table选中
@@ -327,7 +362,7 @@ export default {
.select { .select {
margin-right: 20px; margin-right: 20px;
margin-bottom: 20px; margin-bottom: 20px;
width: calc((100% - 76px - 200px) / 2); width: calc((100% - 76px - 220px) / 3);
} }
.btnz { .btnz {

View File

@@ -12,24 +12,25 @@
allowClear allowClear
></a-select> --> ></a-select> -->
<a-cascader <a-cascader
change-on-select
:options="option" :options="option"
placeholder="请选择组织"
v-model:value="orgId" v-model:value="orgId"
:allowClear="allowClear"
style="width: 100%" style="width: 100%"
placeholder="请选择归属组织"
:allowClear=false
:fieldNames="{ :fieldNames="{
label: 'name', label: 'orgName',
value: 'id', value: 'organizationId',
children: 'treeChildList', children: 'childList',
}" }"
> >
</a-cascader> </a-cascader>
</div> </div>
<div class="select"> <div class="select">
<a-input <a-input
style="width: 100%; height: 40px; border-radius: 8px" style="width: 100%; height: 40px; border-radius: 8px"
placeholder="请输入姓名" placeholder="请输入考试名称"
v-model:value="name" v-model:value="testName"
allowClear allowClear
showSearch showSearch
> >
@@ -38,22 +39,21 @@
<div class="select"> <div class="select">
<a-input <a-input
style="width: 100%; height: 40px; border-radius: 8px" style="width: 100%; height: 40px; border-radius: 8px"
placeholder="请输入工号" placeholder="请输入创建人"
v-model:value="userNo" v-model:value="creator"
allowClear allowClear
showSearch showSearch
> >
</a-input> </a-input>
</div> </div>
<div class="select"> <div class="select">
<a-input <a-range-picker
style="width: 100%; height: 40px; border-radius: 8px" v-model:value="publishTime"
placeholder="请输入Band" type="date"
v-model:value="band" valueFormat="YYYY-MM-DD"
allowClear :placeholder="['发布开始时间','结束时间']"
showSearch style="width: 100%; margin-right: 0px"
> />
</a-input>
</div> </div>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<div class="btnzx btnzx1" @click="getTableData"> <div class="btnzx btnzx1" @click="getTableData">
@@ -94,6 +94,38 @@
onChange: onSelectChange, onChange: onSelectChange,
}" }"
> >
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'published'">
<span>{{
record.published == 0
? "未发布"
: record.published == 1
? "已发布"
: ""
}}</span>
</template>
<template v-if="column.key === 'pertainCourse'">
<span>{{
record.pertainCourse == null
? "-"
: record.pertainCourse
}}</span>
</template>
<template v-if="column.key === 'pertainProject'">
<span>{{
record.pertainProject == null
? "-"
: record.pertainProject
}}</span>
</template>
<template v-if="column.key === 'pertainRouter'">
<span>{{
record.pertainRouter == null
? "-"
: record.pertainRouter
}}</span>
</template>
</template>
</a-table> </a-table>
<div class="tableBox"> <div class="tableBox">
<div class="pa"> <div class="pa">
@@ -120,9 +152,11 @@ import { message } from "ant-design-vue";
import Cookies from "vue-cookies"; import Cookies from "vue-cookies";
import axios from "axios"; import axios from "axios";
import downLoad from "../../utils/downLoad"; import downLoad from "../../utils/downLoad";
import { useStore } from 'vuex';
export default { export default {
name: "EmployeelearninG", name: "EmployeelearninG",
setup() { setup() {
const store = useStore();
const state = reactive({ const state = reactive({
tableLoading: false, // table加载图标 tableLoading: false, // table加载图标
tableDataTotal: 0, // 数据总条数 tableDataTotal: 0, // 数据总条数
@@ -136,22 +170,52 @@ export default {
selectedRowKeys: [], // 选中的列 selectedRowKeys: [], // 选中的列
ids: [], ids: [],
allowClear:true, allowClear:true,
resetOrgId:[] resetOrgId:[],
creator: "",
testName: "",
publishTime: [],
}); });
// table选中 // table选中
const onSelectChange = (selectedRowKeys, record) => { const onSelectChange = (selectedRowKeys, record) => {
state.selectedRowKeys = selectedRowKeys; state.selectedRowKeys = selectedRowKeys;
state.ids = record?.map((item) => { state.ids = record?.map((item) => {
return item.basicBoeUserId; return item.id;
}); });
}; };
//请求组织接口 //请求组织接口
const getOrgList = async () => { const getOrgList = async () => {
var manageFlag = false;
for(let i=0;i<store.state.userInfo.roleList.length;i++){
if(store.state.userInfo.roleList[i].roleCode=="system-admin"){
manageFlag = true;
break;
}
}
const res = await api.userGetUserOrg({}); const res = await api.userGetUserOrg({});
if (res) { if (res) {
state.option = res.data?.result?.list; if(manageFlag){
state.orgId = res.data?.result?.treeNodeList; state.option = [{
state.resetOrgId = res.data?.result?.treeNodeList; orgName:"全部",
organizationId: null,
childList:res.data?.result.orgTreeList
}];
state.orgId = [null,...res.data?.result.treeNodeList];
state.resetOrgId = [null,...res.data?.result.treeNodeList];
}else{
if(res.data?.result.orgTreeList!=null){
state.option = res.data?.result.orgTreeList;
state.orgId = res.data?.result.treeNodeList;
state.resetOrgId = res.data?.result.treeNodeList;
}else{
state.option = [{
orgName:"无权限",
organizationId: "1",
childList:[],
}];
state.orgId = ["1"];
state.resetOrgId = ["1"];
}
}
res.data?.result?.userType === 1 res.data?.result?.userType === 1
? (state.allowClear = true) ? (state.allowClear = true)
: (state.allowClear = false); : (state.allowClear = false);
@@ -165,14 +229,14 @@ export default {
} else { } else {
axios({ axios({
method: "get", method: "get",
url: "/report/boeu/studyData/export", url: "/report/boeu/exam/export",
params: { ids: `${state.ids}` }, params: { ids: `${state.ids}` },
responseType: "blob", responseType: "blob",
headers: { headers: {
token: Cookies.get("token"), token: Cookies.get("token"),
}, },
}).then((res) => { }).then((res) => {
downLoad(res.data, "学习员工数据.xlsx"); downLoad(res.data, "考试列表.xlsx");
}); });
} }
}; };
@@ -181,98 +245,162 @@ export default {
// cloumns 表头 // cloumns 表头
const columns = ref([ const columns = ref([
{ {
title: "工号", title: "考试名称",
dataIndex: "userNo", dataIndex: "testName",
key: "userNo", key: "testName",
width: 120, width: 120,
ellipsis: true, ellipsis: true,
align: "center", align: "center",
}, },
{ {
title: "姓名", title: "归属组织",
dataIndex: "name", dataIndex: "resOwner",
ellipsis: true, ellipsis: true,
key: "name", key: "resOwner",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "组织信息", title: "归属课程",
dataIndex: "departmentName", dataIndex: "pertainCourse",
ellipsis: true, ellipsis: true,
key: "departmentName", key: "pertainCourse",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "岗位", title: "归属项目",
dataIndex: "jobName", dataIndex: "pertainProject",
ellipsis: true, ellipsis: true,
key: "jobName", key: "pertainProject",
align: "center",
width: 120,
},
{
title: "归属路径",
dataIndex: "pertainRouter",
ellipsis: true,
key: "pertainRouter",
align: "center",
width: 120,
},
{
title: "题量",
dataIndex: "numOfQuest",
ellipsis: true,
key: "numOfQuest",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "Band", title: "考试人数",
dataIndex: "bandCode", dataIndex: "totalNumber",
ellipsis: true, ellipsis: true,
key: "bandCode", key: "totalNumber",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "授课次数", title: "参加人数",
dataIndex: "teachingTotal", dataIndex: "numOfAnswer",
ellipsis: true, ellipsis: true,
key: "teachingTotal", key: "numOfAnswer",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "授课时长(分钟)", title: "参与率",
dataIndex: "teachingTime", dataIndex: "answerRate",
ellipsis: true, ellipsis: true,
key: "teachingTime", key: "answerRate",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "案例数", title: "考试次数",
dataIndex: "caseTotal", dataIndex: "testTimes",
ellipsis: true, ellipsis: true,
key: "caseTotal", key: "testTimes",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "学习项目", title: "考试时长",
dataIndex: "studyProject", dataIndex: "testDuration",
ellipsis: true, ellipsis: true,
key: "studyProject", key: "testDuration",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "学习路径", title: "考试满分",
dataIndex: "studyRouter", dataIndex: "totalScore",
ellipsis: true, ellipsis: true,
key: "studyRouter", key: "totalScore",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "学习课程", title: "考试合格分",
dataIndex: "studyClass", dataIndex: "passLine",
ellipsis: true, ellipsis: true,
key: "studyClass", key: "passLine",
width: 120, width: 120,
align: "center", align: "center",
}, },
{ {
title: "累计学习时长(分钟)", title: "平均答题时长",
dataIndex: "studyTimeSum", dataIndex: "averageAnswerTime",
ellipsis: true, ellipsis: true,
key: "studyTimeSum", key: "averageAnswerTime",
width: 120,
align: "center",
},
{
title: "平均得分",
dataIndex: "averageScore",
ellipsis: true,
key: "averageScore",
width: 120,
align: "center",
},
{
title: "通过人数",
dataIndex: "numOfPass",
ellipsis: true,
key: "numOfPass",
width: 120,
align: "center",
},
{
title: "通过率",
dataIndex: "passRate",
ellipsis: true,
key: "passRate",
width: 120,
align: "center",
},
{
title: "发布时间",
dataIndex: "publishTime",
ellipsis: true,
key: "publishTime",
width: 140,
align: "center",
},
{
title: "考试状态",
dataIndex: "published",
ellipsis: true,
key: "published",
width: 120,
align: "center",
},
{
title: "创建人",
dataIndex: "creator",
ellipsis: true,
key: "creator",
width: 120, width: 120,
align: "center", align: "center",
}, },
@@ -300,15 +428,15 @@ export default {
// 行内单条下载 // 行内单条下载
const oneExport = (record) => { const oneExport = (record) => {
axios({ axios({
method: "get", method: "post",
url: "/report/boeu/studyData/export", url: "/report/boeu/exam/export/detail/v2",
params: { ids: `${record.record.basicBoeUserId}` }, data: { ids: [`${record.record.id}`] },
responseType: "blob", responseType: "blob",
headers: { headers: {
token: Cookies.get("token"), token: Cookies.get("token"),
}, },
}).then((res) => { }).then((res) => {
downLoad(res.data, "学习员工数据.xlsx"); downLoad(res.data, "考试详细数据.xlsx");
}); });
}; };
//table 分页事件 //table 分页事件
@@ -319,17 +447,21 @@ export default {
// 获取数据 // 获取数据
const getTableData = async () => { const getTableData = async () => {
state.tableLoading = true; state.tableLoading = true;
const res = await api.boeuStudyDataPageList({ const res = await api.boeuExamPageListV2({
page: state.pageNo, page: state.pageNo,
size: state.pageSize, size: state.pageSize,
userNo: state.userNo, // userNo: state.userNo,
name: state.name, testName: state.testName,
departmentId: state.orgId ? state.orgId[state.orgId.length - 1] : null, createName: state.creator,
bandCode: state.band, startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+ " 00:00:00",
endTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[1]+ " 23:59:59",
// name: state.name,
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
// bandCode: state.band,
}); });
if (res) { if (res) {
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
const list = res.data.rows?.map((item) => { const list = res.data.result.rows?.map((item) => {
return { return {
key: item.id, key: item.id,
...item, ...item,
@@ -342,9 +474,12 @@ export default {
// 重置按钮 // 重置按钮
const reset = async () => { const reset = async () => {
state.tableLoading = true; state.tableLoading = true;
state.name = ""; // state.name = "";
state.band = ""; // state.band = "";
state.userNo = ""; // state.userNo = "";
state.testName = "";
state.creator = "";
state.publishTime = [];
state.orgId = state.resetOrgId; state.orgId = state.resetOrgId;
getTableData(); getTableData();
}; };
@@ -353,19 +488,23 @@ export default {
const exportAllbtnz = async () => { const exportAllbtnz = async () => {
axios({ axios({
method: "post", method: "post",
url: "/report/boeu/studyData/exportAll", url: "/report/boeu/exam/export/list/v2",
data: { data: {
userNo: state.userNo, // userNo: state.userNo,
name: state.name, // name: state.name,
departmentId: state.orgId ? state.orgId[state.orgId.length - 1] : null, testName: state.testName,
bandCode: state.band, createName: state.creator,
startTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+ " 00:00:00",
endTime: typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[1]+ " 23:59:59",
orgId: state.orgId ? state.orgId[state.orgId.length - 1] : null,
// bandCode: state.band,
}, },
responseType: "blob", responseType: "blob",
headers: { headers: {
token: Cookies.get("token"), token: Cookies.get("token"),
}, },
}).then((res) => { }).then((res) => {
downLoad(res.data, "学习员工数据.xlsx"); downLoad(res.data, "考试列表.xlsx");
}); });
}; };
onMounted(() => { onMounted(() => {

View File

@@ -3,6 +3,22 @@
<div class="project"> <div class="project">
<!-- 以下为顶部搜索框 --> <!-- 以下为顶部搜索框 -->
<div class="filter"> <div class="filter">
<div class="select">
<a-cascader
change-on-select
:options="option"
v-model:value="orgId"
style="width: 100%"
placeholder="请选择归属组织"
:allowClear=false
:fieldNames="{
label: 'orgName',
value: 'organizationId',
children: 'childList',
}"
>
</a-cascader>
</div>
<div class="select"> <div class="select">
<a-input <a-input
style="width: 100%; height: 40px; border-radius: 8px" style="width: 100%; height: 40px; border-radius: 8px"
@@ -14,21 +30,25 @@
</a-input> </a-input>
</div> </div>
<div class="select"> <div class="select">
<a-cascader <a-input
:options="option" style="width: 100%; height: 40px; border-radius: 8px"
placeholder="请选择组织" placeholder="请输入创建人"
v-model:value="orgId" allowClear
:allowClear="allowClear" showSearch
style="width: 100%" v-model:value="createName"
:fieldNames="{
label: 'name',
value: 'id',
children: 'treeChildList',
}"
> >
</a-cascader> </a-input>
</div> </div>
<div class="select"> <div class="select">
<a-range-picker
v-model:value="publishTime"
type="date"
valueFormat="YYYY-MM-DD"
:placeholder="['发布开始时间','结束时间']"
style="width: 100%; margin-right: 0px"
/>
</div>
<!-- <div class="select">
<a-select <a-select
style="width: 100%" style="width: 100%"
placeholder="项目状态" placeholder="项目状态"
@@ -36,17 +56,7 @@
:options="stateOptions" :options="stateOptions"
v-model:value="status" v-model:value="status"
></a-select> ></a-select>
</div> </div> -->
<div class="select">
<a-input
style="width: 100%; height: 40px; border-radius: 8px"
placeholder="请输入创建者"
allowClear
showSearch
v-model:value="createName"
>
</a-input>
</div>
<div style="display: flex; margin-bottom: 20px"> <div style="display: flex; margin-bottom: 20px">
<div class="btnzx btnzx1" @click="searchData"> <div class="btnzx btnzx1" @click="searchData">
<div class="search"></div> <div class="search"></div>
@@ -169,9 +179,11 @@ import axios from "axios";
import Cookies from "vue-cookies"; import Cookies from "vue-cookies";
import downLoad from "../../utils/downLoad"; import downLoad from "../../utils/downLoad";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import { useStore } from "vuex";
export default { export default {
name: "reportProject", name: "reportProject",
setup() { setup() {
const store = useStore();
const state = reactive({ const state = reactive({
tableLoading: false, // table加载图标 tableLoading: false, // table加载图标
tableDataTotal: 0, // 数据总条数 tableDataTotal: 0, // 数据总条数
@@ -183,6 +195,7 @@ export default {
resetOrgId: [], resetOrgId: [],
projectName: "", projectName: "",
createName: "", createName: "",
publishTime: [], // 发布时间
selectedRowKeys: [], // 选中的列 selectedRowKeys: [], // 选中的列
status: null, status: null,
stateOptions: [ stateOptions: [
@@ -215,6 +228,9 @@ export default {
params.orgId = state.orgId; params.orgId = state.orgId;
params.createName = state.createName; params.createName = state.createName;
params.projectName = state.projectName; params.projectName = state.projectName;
// params.publishTime = state.publishTime;
params.startPublishTime =typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+" 00:00:01";
params.endPublishTime = typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59";
params.page = state.pageNo; params.page = state.pageNo;
params.size = state.pageSize; params.size = state.pageSize;
params.orgId = state.orgId ? state.orgId[state.orgId.length - 1] : null; params.orgId = state.orgId ? state.orgId[state.orgId.length - 1] : null;
@@ -261,6 +277,9 @@ export default {
params.orgId = state.orgId; params.orgId = state.orgId;
params.createName = state.createName; params.createName = state.createName;
params.projectName = state.projectName; params.projectName = state.projectName;
// params.publishTime = state.publishTime;
params.startPublishTime =typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+" 00:00:01";
params.endPublishTime = typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59";
params.page = state.pageNo; params.page = state.pageNo;
params.size = state.pageSize; params.size = state.pageSize;
params.orgId = state.orgId ? state.orgId[state.orgId.length - 1] : null; params.orgId = state.orgId ? state.orgId[state.orgId.length - 1] : null;
@@ -290,14 +309,43 @@ export default {
}; };
//请求组织接口 //请求组织接口
const getOrgList = async () => { const getOrgList = async () => {
const res = await api.userGetUserOrg({}); var manageFlag = false;
for(let i=0;i<store.state.userInfo.roleList.length;i++){
if(store.state.userInfo.roleList[i].roleCode=="system-admin"){
manageFlag = true;
break;
}
}
let params = {
roleList: store.state.userInfo.roleList,
userId: store.state.userInfo.userId
}
const res = await api.userGetUserOrg(params);
if (res) { if (res) {
state.option = res.data?.result?.list; if(manageFlag){
state.orgId = res.data?.result?.treeNodeList; state.option = [{
state.resetOrgId = res.data?.result?.treeNodeList; orgName:"全部",
res.data?.result?.userType === 1 organizationId: null,
? (state.allowClear = true) childList:res.data?.result.orgTreeList
: (state.allowClear = false); }];
state.orgId = [null,...res.data?.result.treeNodeList];
state.resetOrgId = [null,...res.data?.result.treeNodeList];
}else{
if(res.data?.result.orgTreeList!=null){
state.option = res.data?.result.orgTreeList;
state.orgId = res.data?.result.treeNodeList;
state.resetOrgId = res.data?.result.treeNodeList;
}else{
state.option = [{
orgName:"无权限",
organizationId: "1",
childList:[],
}];
state.orgId = ["1"];
state.resetOrgId = ["1"];
}
}
state.allowClear = true
getTableData(); getTableData();
} }
}; };
@@ -308,6 +356,7 @@ export default {
state.pageSize = 10; state.pageSize = 10;
state.projectName = ""; state.projectName = "";
state.createName = ""; state.createName = "";
state.publishTime = [];
state.selectedRowKeys = []; state.selectedRowKeys = [];
state.status = null; state.status = null;
getTableData(); getTableData();
@@ -324,6 +373,9 @@ export default {
params.status = state.status; params.status = state.status;
params.createName = state.createName; params.createName = state.createName;
params.projectName = state.projectName; params.projectName = state.projectName;
// params.publishTime = state.publishTime;
params.startPublishTime =typeof state.publishTime[0] === 'undefined' ? null : state.publishTime[0]+" 00:00:01";
params.endPublishTime = typeof state.publishTime[1] === 'undefined' ? null : state.publishTime[1]+" 23:59:59";
params.page = state.pageNo; params.page = state.pageNo;
params.size = state.pageSize; params.size = state.pageSize;
params.orgId = state.orgId ? state.orgId[state.orgId.length - 1] : null; params.orgId = state.orgId ? state.orgId[state.orgId.length - 1] : null;
@@ -343,8 +395,9 @@ export default {
}); });
return list; return list;
}; };
tableData.value = fun(res.data.rows); tableData.value = fun(res.data.result.rows);
state.tableDataTotal = res.data.total; state.tableDataTotal = res.data.result.total;
console.log("safgaga"+res.data.result.total)
state.tableLoading = false; state.tableLoading = false;
} }
}; };
@@ -356,7 +409,7 @@ export default {
// cloumns 表头 // cloumns 表头
const columns = ref([ const columns = ref([
{ {
title: "名称", title: "项目名称",
dataIndex: "projectName", dataIndex: "projectName",
key: "projectName", key: "projectName",
width: 120, width: 120,
@@ -374,7 +427,7 @@ export default {
fixed: "left", fixed: "left",
}, },
{ {
title: "分类", title: "项目分类",
dataIndex: "trainingType", dataIndex: "trainingType",
ellipsis: true, ellipsis: true,
key: "trainingType", key: "trainingType",
@@ -383,7 +436,7 @@ export default {
fixed: "left", fixed: "left",
}, },
{ {
title: "阶段数", title: "阶段数",
dataIndex: "stageTotal", dataIndex: "stageTotal",
ellipsis: true, ellipsis: true,
key: "stageTotal", key: "stageTotal",
@@ -391,7 +444,7 @@ export default {
align: "center", align: "center",
}, },
{ {
title: "任务数", title: "任务数",
dataIndex: "taskTotal", dataIndex: "taskTotal",
ellipsis: true, ellipsis: true,
key: "taskTotal", key: "taskTotal",
@@ -414,6 +467,14 @@ export default {
width: 120, width: 120,
align: "center", align: "center",
}, },
{
title: "参与率",
dataIndex: "participantsRate",
ellipsis: true,
key: "participantsRate",
width: 120,
align: "center",
},
{ {
title: "完成人数", title: "完成人数",
dataIndex: "peopleCompletedTotal", dataIndex: "peopleCompletedTotal",
@@ -423,23 +484,31 @@ export default {
align: "center", align: "center",
}, },
{ {
title: "项目时间", title: "完成率",
dataIndex: "proTime", dataIndex: "completedRate",
ellipsis: true, ellipsis: true,
key: "proTime", key: "completedRate",
width: 120, width: 120,
align: "center", align: "center",
}, },
// {
// title: "项目时间",
// dataIndex: "proTime",
// ellipsis: true,
// key: "proTime",
// width: 120,
// align: "center",
// },
{ {
title: "发布时间", title: "发布时间",
dataIndex: "publishTime", dataIndex: "publishTime",
ellipsis: true, ellipsis: true,
key: "publishTime", key: "publishTime",
width: 120, width: 140,
align: "center", align: "center",
}, },
{ {
title: "状态", title: "项目状态",
dataIndex: "status", dataIndex: "status",
ellipsis: true, ellipsis: true,
key: "projectStatus", key: "projectStatus",