合并课程

This commit is contained in:
kclf
2022-11-25 20:25:27 +08:00
parent c2e43611c8
commit 7a6f118bac
17 changed files with 3379 additions and 1298 deletions

2
.gitignore vendored
View File

@@ -21,3 +21,5 @@ pnpm-debug.log*
*.njsproj
*.sln
*.sw?
fe-manage.iml
package-lock.json

1002
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -32,7 +32,7 @@ http.interceptors.request.use(
// 此处测试默认配置token
config.headers.token = "123456";
// config.headers.token = "eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC91LmJvZS5jb20iLCJpYXQiOjE2NjkyMTE4MzMsImV4cCI6MTY2OTIxOTAzMywiR2l2ZW5OYW1lIjoiYm9ldSIsInVzZXJJZCI6IjZCMDQ5RkFGLUMzMTQtN0NDRi0wRDI4LTBEMjNGNEM0MjUzMSIsInVJZCI6Ijk2NTM0MjAyNzQ5NzYwNzE2OCIsInBlcm1pc3Npb24iOiIifQ==.40067eca3be5d50857448005a673cbe1a48f560ff8e9c7aea4e7ff12f59c7962";
// config.headers.token = "eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC91LmJvZS5jb20iLCJpYXQiOjE2Njg4NjI2MTAsImV4cCI6MTY2ODg2OTgxMCwiR2l2ZW5OYW1lIjoiYm9ldSIsInVzZXJJZCI6IjZCMDQ5RkFGLUMzMTQtN0NDRi0wRDI4LTBEMjNGNEM0MjUzMSIsInVJZCI6Ijk2NTM0MjAyNzQ5NzYwNzE2OCIsInBlcm1pc3Npb24iOiIifQ==.defa91ecb2b61d9b20d858db0c2c8d7d80dea4613cb2559a22569b7df36b3f6b";
}
return config;
},

View File

@@ -3,10 +3,12 @@ import http from "./config";
/**
* 1
*/
//添加课程学员
//1添加课程学员
export const addStudent = (obj) =>
http.post("/admin/offcourse/addStudent", obj);
//删除开课
//2面授课审核
export const auditView = (obj) => http.post("/admin/offcourse/auditView", obj);
//3删除开课
export const deletePlan = (obj) =>
http.delete(
"/admin/offcourse/deletePlan",
@@ -15,40 +17,44 @@ export const deletePlan = (obj) =>
headers: { "Content-Type": "application/x-www-form-urlencoded" },
}
);
//获取面授课详情
//4获取面授课详情
export const detail = (obj) =>
http.post("/admin/offcourse/detail", obj, {
headers: { "Content-Type": "application/x-www-form-urlencoded" },
});
//获取面授课开课详情
//5获取面授课开课详情
export const detailPlan = (obj) =>
http.post("/admin/offcourse/detailPlan", obj, {
headers: { "Content-Type": "application/x-www-form-urlencoded" },
});
//新建或编辑面授课
//6新建或编辑面授课
export const edit = (obj) => http.post("/admin/offcourse/edit", obj);
//新建或编辑面授课开课
//7新建或编辑面授课开课
export const editPlan = (obj) => http.post("/admin/offcourse/editPlan", obj);
//课程导出
//8课程导出
export const exportP = (obj) => http.post("/admin/offcourse/export", obj);
//操作面授课(发布,撤回,删除,审核,停用)
//9操作面授课(发布,撤回,删除,审核,停用)
export const handle = (obj) => http.post("/admin/offcourse/handle", obj);
//学员操作-支持批量
//10学员操作-支持批量
export const handleStudent = (obj) =>
http.post("/admin/offcourse/handleStudent", obj);
//获取面授课列表
//11获取面授课列表
export const list = (obj) => http.post("/admin/offcourse/list", obj);
//获取面授课已审核列表
//12获取面授课已审核列表
export const listReview = (obj) =>
http.post("/admin/offcourse/listReview", obj);
//面授课开课列表
//13面授课开课列表
export const planList = (obj) => http.post("/admin/offcourse/planList", obj);
//学员导出
//14学员导出
export const studentExport = (obj) =>
http.post("/admin/offcourse/studentExport", obj);
//获取学员列表
//15获取学员列表
export const studentList = (obj) =>
http.post("/admin/offcourse/studentList", obj);
//学习记录列表
//16学习记录列表
export const studyRecordList = (obj) =>
http.post("/admin/offcourse/studyRecordList", obj);
// 获取员工信息
export const getMemberInfoApi = (obj) =>
http.post("/admin/orgStruct/getMemberInfo", obj);

14
src/api/indexStu.js Normal file
View File

@@ -0,0 +1,14 @@
import http from "./config";
/**
* 1
*/
//获取受众信息
export const getAudienceInfoApi = (obj) =>
http.post("/admin/orgStruct/getAudienceInfo", obj);
//获取员工信息
export const getMemberInfoApi = (obj) =>
http.post("/admin/orgStruct/getMemberInfo", obj);
//获取所有组织
export const getOrgInfoApi = (obj) =>
http.post("/admin/orgStruct/getOrgInfo", obj);

View File

@@ -49,7 +49,7 @@
:row-class-name="
(_record, index) => (index % 2 === 1 ? 'table-striped' : null)
"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange,onSelect:onSelect }"
:columns="tableDataFunc()"
:data-source="tableData"
:loading="tableDataTotal === -1 ? true : false"
@@ -189,8 +189,11 @@ export default {
}
state.selectedRowKeys = selectedRowKeys;
state.apiTaskList = selectedRows;
console.log('-------------%o-%o',state.apiTaskList, state.apiTaskList.length);
};
const onSelect = ( record ) => {
state.caseId = record.caseid;
state.caseName = record.title;
}
const handelChangePage = (page, pageSize) => {
state.currentPage = page;
state.pageSize = pageSize;
@@ -212,7 +215,6 @@ export default {
array.push(obj);
});
state.tableData = array;
console.log('get下来的数据',state.tableData);
};
//获取全部案例信息接口
const getAllCaseText = () => {
@@ -235,11 +237,10 @@ export default {
};
const updateTask = () => {
if (props.isLevel == 1) {
for(let i = 0;i < state.apiTaskList.length;i++){
RouterEditTask({
chapterId: props.isactive,
courseId: state.apiTaskList[i].caseid,
name: state.apiTaskList[i].caseName,
courseId: state.caseId,
name: state.caseName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 3,
@@ -253,14 +254,12 @@ export default {
.catch(() => {
message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`);
});
}
} else if (props.isLevel == 2) {
console.log("state api task list: %o-length: %o", state.apiTaskList, state.apiTaskList.length )
for(let i = 0;i < state.apiTaskList.length;i++){
console.log(state.apiTaskList[i],'state.apiTaskList[i].caseIdstate.apiTaskList[i].caseId');
if(state.apiTaskList.length > 1){
for(let i = 0;i <= state.apiTaskList.length;i++){
apiTask
.addTask({
"courseId": state.apiTaskList[i].caseid,
"courseId": state.apiTaskList[i].caseId,
"duration": 0,
"flag": true,
"name": state.apiTaskList[i].caseName,
@@ -280,6 +279,27 @@ export default {
message.error(`${props.edit ? "编辑" : "新增"}阶段任务失败`);
});
}
} else {
apiTask
.addTask({
"courseId": state.caseId,
"duration": 0,
"flag": true,
"name": state.caseName,
"projectId": props.projectId,
"projectTaskId": props.projectTaskId,
"stageId": props.chooseStageId,
"type": 3,
})
.then(() => {
message.success(`${props.edit ? "编辑" : "新增"}阶段任务成功`);
ctx.emit("changeData", false);
closeDrawer();
})
.catch(() => {
message.error(`${props.edit ? "编辑" : "新增"}阶段任务失败`);
});
}
} else if (props.isLevel == 3) {
console.log("");
}
@@ -295,6 +315,7 @@ export default {
closeDrawer,
tableDataFunc,
onSelectChange,
onSelect,
handelChangePage,
getTableDate,
updateTask,

View File

@@ -51,14 +51,6 @@
<button class="checkEval" @click="showEvalDrawer">
选择测评
</button>
<span style="margin-left: 10px">
<a-tag
class="tag-style"
v-if="evaluationTypeName != ''"
:closable="true"
>{{ evaluationTypeName }}</a-tag
>
</span>
</div>
</div>
<div class="main_item">
@@ -96,8 +88,11 @@
</div>
<EvList
v-model:EvalListVisible="EvalListVisible"
@getEvListData="checkFinish"
@getEvLsitDate="checkFinish"
/>
<!-- v-model:evaluationTypeId="evaluationTypeId"
v-model:evaluationTypeName="evaluationTypeName" -->
<!-- <div class="aeLoading" :style="{display:addLoading?'flex':'none'}">
<a-spin :spinning="addLoading" tip="添加中..." />
</div> -->
@@ -166,105 +161,106 @@ export default {
setup(props, ctx) {
const state = reactive({
inputV1: "",
inputV2: "",
time: undefined,
EvalId: null,
//子传回来的参数
evaluationTypeId: 0,
evaluationTypeId: null,
evaluationTypeName: "",
description: "",
EvalListVisible: false,
// addLoading:false,
});
const checkFinish = (value)=> {
state.evaluationTypeId = value.quiz_kid
state.evaluationTypeName = value.title
const checkFinish = (EvListDate)=> {
state.evaluationTypeId = EvListDate.Id
state.evaluationTypeName = EvListDate.Name
}
const closeDrawer = () => {
ctx.emit("update:addevalVisible", false);
ctx.emit("update:edit", false);
state.inputV1 = "";
state.inputV2 = "";
localStorage.setItem("stageId", props.chooseStageId);
localStorage.setItem("chapterId", props.isactive);
};
const afterVisibleChange = (bool) => {
if (props.edit && bool) {
queryInvistById()
queryEval();
}
};
const showEvalDrawer = () => {
state.EvalListVisible = true;
};
const updateTask = (value) => {
if (props.isLevel == 1) {
RouterEditTask({
chapterId: props.isactive,
courseId: Number(value.evaluationId),
name: value.evaluationName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
type: 10,
const queryEval = () => {
api
.queryEvaluationDetailById({ evaluationId: props.evaluationId })
.then((res) => {
state.inputV1 = res.data.data.evaluationName;
state.time = [
dayjs(res.data.data.evaluationStartTime, "YYYY-MM-DD"),
dayjs(res.data.data.evaluationEndTime, "YYYY-MM-DD"),
];
state.evaluationTypeId = res.data.data.evaluationTypeId;
state.evaluationTypeName = res.data.data.evaluationTypeName;
})
.then(( ) => {
message.success(`${props.EditTestId ? "编辑" : "新增"}关卡任务成功`);
})
.catch(( ) => {
message.error(`${props.EditTestId ? "编辑" : "新增"}关卡任务失败`);
.catch(() => {
});
} else if (props.isLevel == 2) {
};
const updateTask = (res) => {
if (props.isLevel == 1) {
apitaskadd
.addTask({
duration: 0,
flag: true,
courseId: Number(value.evaluationId),
name: value.evaluationName,
courseId: res.data.data.evaluationId,
name: res.data.data.evaluationName,
projectId: props.projectId,
projectTaskId: props.projectTaskId || 0,
stageId: props.chooseStageId,
evaluationTypeId: state.evaluationTypeId,
evaluationTypeName: state.evaluationTypeName,
type: 10,
})
.then(( ) => {
message.success(`${props.edit ? "编辑" : "新增"}阶段任务成功`);
message.success(`${props.edit ? "编辑" : "新增"}关卡任务成功`);
})
.catch(( ) => {
message.error(`${props.edit ? "编辑" : "新增"}阶段任务失败`);
message.error(`${props.edit ? "编辑" : "新增"}关卡任务失败`);
});
} else if (props.isLevel == 2) {
RouterEditTask({
chapterId: props.isactive,
courseId: res.data.data.evaluationId,
name: res.data.data.evaluationName,
routerId: props.routerId,
routerTaskId: props.routerTaskId || 0,
evaluationTypeId: state.evaluationTypeId,
evaluationTypeName: state.evaluationTypeName,
type: 10,
})
.then(( ) => {
message.success(`${props.EditTestId ? "编辑" : "新增"}阶段任务成功`);
})
.catch(( ) => {
message.error(`${props.EditTestId ? "编辑" : "新增"}阶段任务失败`);
});
} else if (props.isLevel == 3) {
console.log("");
}
};
//根据id获取测评信息
const queryInvistById = ()=> {
let objqi = {
evaluationId : props.EditEvalId
}
api
.queryEvaluationDetailById(objqi)
.then((res) => {
message.destroy()
message.success("获取测评信息成功");
state.inputV1 = res.data.data.evaluationName
state.evaluationTypeName = res.data.data.evaluationTypeName
state.evaluationTypeId = res.data.data.evaluationTypeId;
state.time = [
dayjs(res.data.data.evaluationStartTime, "YYYY-MM-DD"),
dayjs(res.data.data.evaluationEndTime, "YYYY-MM-DD"),
];
})
.catch(() => {
message.destroy()
message.error("获取测量平信息失败");
});
}
//创建测评信息
//创建或编辑测评信息
const createEvalText = () => {
if (!state.inputV1) {
message.destroy();
return message.info("请输入测评名称");
}
if (!state.evaluationTypeId) {
if (!state.inputV2) {
message.destroy();
return message.info("请选择测评");
}
if (!state.time) {
message.destroy();
return message.warning("请输入直播时间");
}
let obj = {
evaluationName: state.inputV1,
evaluationEndTime: dayjs(state.time[1]).format("YYYY-MM-DD"),
@@ -272,15 +268,12 @@ export default {
evaluationStartTime: dayjs(state.time[0]).format("YYYY-MM-DD"),
evaluationTypeId: state.evaluationTypeId,
evaluationTypeName: state.evaluationTypeName,
evaluationFlag: "",
evaluationPictureAddress: "",
evaluationTag: "",
updateTime: "",
};
if (props.edit !== true) {
api
.createEvaluation(obj)
.then((res) => {
updateTask(res.data.data);
updateTask(res);
message.success("创建成功");
closeDrawer();
ctx.emit("changeData", false);
@@ -288,6 +281,19 @@ export default {
.catch(() => {
message.error("创建失败");
});
} else {
api
.updateEvaluation(obj)
.then((res) => {
updateTask(res);
message.success("编辑成功");
closeDrawer();
ctx.emit("changeData", false);
})
.catch(( ) => {
message.error("编辑失败");
});
}
};
return {
@@ -297,7 +303,6 @@ export default {
closeDrawer,
//增改
createEvalText,
queryInvistById,
showEvalDrawer,
updateTask,
};
@@ -361,10 +366,6 @@ export default {
margin-left: 15px;
color: #fff;
}
.tag-style {
color: rgb(113, 113, 237);
background-color: #d7d1f7;
}
}
}
.main_item2 {

View File

@@ -759,7 +759,7 @@ export default {
};
const getData = (value)=> {
state.paperId = value.paperId;
state.paperName = value.testName;
state.paperName = value.paperName;
}
return {
formState,

View File

@@ -0,0 +1,354 @@
<!-- 评估列表 -->
<template>
<a-drawer
:visible="assessmentVisible"
class="drawerStyle addinvistDrawer"
width="70%"
title="添加评估"
placement="right"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
<div class="header">
<div v-if="edit" class="headerTitle">编辑评估</div>
<div v-else class="headerTitle">添加评估</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="contentMain">
<div class="main_left">
<div class="main_item">
<div class="fi_input">
<a-input
v-model:value="inputV1"
style="width: 424px; height: 40px"
placeholder="请输入评估名称"
maxlength="20"
/>
</div>
<div class="btns" @click="getAllInvistText">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
<div class="btnsn" @click="resetInvist">
<div class="search"></div>
<div class="btnText">重置</div>
</div>
</div>
<div class="main_item2">
<a-table
style="border: 1px solid #f2f6fe"
:columns="tableDataFunc()"
:data-source="tableData"
:loading="tableDataTotal === -1 ? true : false"
expandRowByClick="true"
@expand="expandTable"
:pagination="false"
:row-selection="rowSelection"
filterMultiple:false
/>
<div class="pa">
<a-pagination
showSizeChanger="true"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="handelChangePage"
/>
</div>
</div>
</div>
</div>
</div>
</a-drawer>
</template>
<script>
import { reactive, toRefs } from "vue";
import * as api from "../../api/indexInvist.js";
import dayjs from "dayjs";
export default {
name: "AssessmentList",
// components: {
// },
props: {
assessmentVisible: {
type: Boolean,
default: false,
},
isface: {
type: Number,
default: null,
},
},
setup(props, ctx) {
const state = reactive({
assessmentVisible: false,
assessment: null,
inputV1: "",
currentPage: 1,
pageSize: 10,
tableDataTotal: 0,
tableData: [],
selectedRowKeys: [],
});
const closeDrawer = () => {
ctx.emit("update:assessmentVisible", false);
};
const afterVisibleChange = (bool) => {
console.log("state getAllInvistText", bool);
if (props.assessmentVisible) {
getAllInvistText();
}
};
const tableDataFunc = () => {
const columns = [
{
title: "名称",
dataIndex: "name",
// width: "30%",
key: "name",
width: "150px",
align: "left",
className: "classify",
},
{
title: "题数",
dataIndex: "num",
key: "num",
width: "80px",
align: "center",
},
{
title: "创建人",
dataIndex: "creator",
key: "creator",
width: "150px",
align: "center",
},
{
title: "创建时间",
dataIndex: "time",
key: "time",
width: "200px",
align: "center",
},
];
return columns;
};
const rowSelection = {
type: "radio",
onSelect: (selectedRows) => {
state.assessment = selectedRows;
console.log("selectedRows=======", state.assessment);
if (props.isface == 1) {
ctx.emit("faceAssess", state.assessment);
} else {
ctx.emit("checkedAss", state.assessment);
}
state.selectedRowKeys = [];
closeDrawer();
},
};
// const onSelectChange = (selectedRowKeys) => {
// if(selectedRowKeys.length>2){return}
// state.selectedRowKeys = selectedRowKeys;
// };
const handelChangePage = (page, pageSize) => {
state.currentPage = page;
state.pageSize = pageSize;
getAllInvistText();
};
const getTableDate = (tableData) => {
let data = tableData;
let array = [];
data.map((value, index) => {
let obj = {
key: index,
assessmentId: value.assessmentId,
num: value.essayQuestionVoList.length,
name: value.assessmentName ? value.assessmentName : "-",
creator: value.createUser ? value.createUser : "-",
time: dayjs(value.createTime).format("YYYY-MM-DD"),
};
array.push(obj);
});
(state.selectedRowKeys = []), (state.tableData = array);
};
//获取全部评估信息接口
const getAllInvistText = () => {
api
.queryAssessmentDetailList({
assessmentName: state.inputV1,
pageNo: state.currentPage,
pageSize: state.pageSize,
})
.then((res) => {
let arr = res.data.data.rows;
if (res.status === 200) {
// console.log("获取全部评估信息", res.data.data);
getTableDate(arr);
state.tableDataTotal = Number(res.data.data.total);
}
})
.catch((err) => {
console.log("获取全部评估信息接口失败", err);
// state.createLoading = false;
});
};
//重置评估信息
const resetInvist = () => {
state.inputV1 = "";
getAllInvistText();
};
return {
...toRefs(state),
afterVisibleChange,
closeDrawer,
tableDataFunc,
rowSelection,
getAllInvistText,
resetInvist,
handelChangePage,
};
},
};
</script>
<style lang="scss">
.ant-table-striped :deep(.table-striped) td {
background-color: #fafafa !important;
}
.addinvistDrawer {
.drawerMain {
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
margin-left: 24px;
}
}
.contentMain {
display: flex;
justify-content: space-between;
.main_left {
padding-right: 30px;
margin-top: 32px;
.main_item {
display: flex;
align-items: center;
margin-bottom: 32px;
.fi_input {
margin-right: 20px;
}
.btns {
margin-right: 20px;
padding: 0px 26px 0px 26px;
height: 38px;
background: #409eff;
border-radius: 8px;
//border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search0.png");
background-size: 100% 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #ffffff;
line-height: 36px;
margin-left: 5px;
}
}
.btnsn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #ffffff;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
width: 16px;
height: 18px;
background-image: url("../../assets/images/courseManage/reset1.png");
background-size: 100% 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #409eff;
line-height: 36px;
margin-left: 5px;
}
}
}
.main_item2 {
.pa {
width: 100%;
margin: 15px auto;
display: flex;
justify-content: center;
}
}
}
}
.main_btns {
height: 72px;
width: 100%;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
}
}
</style>

View File

@@ -103,7 +103,6 @@
evaluationTypeName:"",
tableData: [],
selectedRowKeys:[],
evListData:{},
columns:[
{
title: "课程编号",
@@ -149,12 +148,17 @@
},
]
});
// const onSelect = (record)=> {
// state.evaluationTypeName = record.title
// state.evaluationTypeId = record.quiz_code
// };
const onSelectChange = (selectedRowKeys,selectedRows)=> {
if(selectedRowKeys.length>1){
if(state.selectedRowKeys.length>1){
return
}
state.selectedRowKeys = selectedRowKeys
state.evListData = selectedRows[0] ? selectedRows[0] : []
state.evaluationTypeName = selectedRows[0].record.title
state.evaluationTypeId = selectedRows[0].quiz_code
}
const closeDrawer = () => {
ctx.emit("update:EvalListVisible", false);
@@ -165,7 +169,11 @@
}
};
const checkFinish =() =>{
ctx.emit("getEvListData", state.evListData);
let EvListDate = {
Id : state.evaluationTypeId,
Name : state.evaluationTypeName,
}
ctx.emit("getEvListDate", EvListDate);
closeDrawer();
}
const changePagination = (page) => {
@@ -179,7 +187,6 @@
let obj = {
status:value.status,
quiz_code:value.quiz_code,
quiz_kid:value.quiz_kid,
title:value.title,
theme_desc:value.theme_desc,
quiz_price:value.quiz_price,

View File

@@ -61,7 +61,7 @@
:columns="tableDataFunc()"
:data-source="tableData"
:loading="tableDataTotal === -1 ? true : false"
:row-selection="{selectedRowKeys:selectedRowKeys, onChange:onSelectChange, hideSelectAll:true}"
:row-selection="{selectedRowKeys:selectedRowKeys,onSelect:onSelect,onChange:onSelectChange}"
:scroll="{ x: 900 }"
:pagination="false"
/>
@@ -184,13 +184,14 @@
console.log("Page: ", pageNumber);
};
const onSelectChange = (selectedRowKeys,selectedRows) => {
const onSelect = (record) => {
state.SelectTestData = record
};
const onSelectChange = (selectedRowKeys) => {
if(selectedRowKeys.length>1){
return
}
state.selectedRowKeys = selectedRowKeys;
state.SelectTestData = selectedRows[0];
console.log('state.SelectTestData---------------',state.SelectTestData);
}
const newTest = ()=> {
@@ -281,6 +282,7 @@
closeDrawer,
afterVisibleChange,
getTableDate,
onSelect,
onSelectChange,
CreatSTText,
newTest,
@@ -296,6 +298,7 @@
<style lang="scss">
.TimeManage {
// overflow-x: auto;
.drawerMain {
min-width: 550px;
margin: 0px 32px 0px 32px;
@@ -403,7 +406,13 @@
}
}
.tab {
th,th.h {
.ant-table-selection-column {
.ant-table-selection{
display: none;
}
}
th.h {
background-color: #eff4fc !important;
}
@@ -414,10 +423,15 @@
}
.tableBox {
.pa {
// left: 0;
margin-top: 15px;
width: 100%;
// height: 20px;
// background-color: red;
display: flex;
justify-content: center;
// position: absolute;
// bottom: 20px;
.ant-pagination-prev,
.ant-pagination-next,
.ant-pagination-item,

File diff suppressed because it is too large Load Diff

View File

@@ -669,7 +669,7 @@ export default {
background-color: #eff4fc !important;
}
th,th.h {
th.h {
background-color: #eff4fc !important;
}

View File

@@ -26,20 +26,20 @@ export function traverseArr(arr, traverseObj, saveOld = false) {
return newArr;
}
// export function deepClone(obj) {
// let result = typeof obj.splice === "function" ? [] : {};
// if (obj && typeof obj === "object") {
// for (let key in obj) {
// if (obj[key] && typeof obj[key] === "object") {
// result[key] = deepClone(obj[key]);
// } else {
// result[key] = obj[key];
// }
// }
// return result;
// }
// return obj;
// }
export function deepClone(obj) {
let result = typeof obj.splice === "function" ? [] : {};
if (obj && typeof obj === "object") {
for (let key in obj) {
if (obj[key] && typeof obj[key] === "object") {
result[key] = deepClone(obj[key]);
} else {
result[key] = obj[key];
}
}
return result;
}
return obj;
}
export function deepCloneFilterString(obj, fillterKeys) {
let result = typeof obj.splice === "function" ? [] : {};
@@ -95,6 +95,14 @@ export function getdateToTime(date) {
return `${y}-${m < 10 ? "0" + m : m}-${d < 10 ? "0" + d : d} ${hh}:${mm}`;
}
export function getdateToDate(date) {
let now = new Date(parseInt(date)),
y = now.getFullYear(),
m = now.getMonth() + 1,
d = now.getDate();
return `${y}${m < 10 ? "0" + m : m}${d < 10 ? "0" + d : d}`;
}
//计算两个时间之间的时间差 多少天时分秒
export function intervalTime(startTime) {
const curTime = new Date().getTime(); //计算当前时间戳
@@ -117,3 +125,47 @@ export function intervalTime(startTime) {
seconds,
};
}
// 分片处理
export function batchLoadList(
sourceData,
dataTotal,
splitNumber = 10,
callback,
complete
) {
if (sourceData.length <= splitNumber) {
typeof callback === "function" && callback(sourceData);
typeof callback === "function" && complete();
return;
}
let first = 0;
const intTime = parseInt(String(dataTotal / splitNumber));
const floatTime = sourceData.length % splitNumber;
const total = intTime + (floatTime > 0 ? 1 : 0);
for (let i = 0; i < total; i += 1) {
const end = first + splitNumber;
const splitArray = sourceData.slice(first, end);
setTimeout(() => {
typeof callback === "function" && callback(splitArray);
if (i === total - 1) {
// 分片处理完成
typeof callback === "function" && complete();
}
});
first = end;
}
}
export function newFile(code) {
const blob = new Blob([code], {
type: "application/vnd.ms-excel",
});
const linkNode = document.createElement("a");
linkNode.style.display = "none";
linkNode.href = URL.createObjectURL(blob); //生成一个Blob URL
document.body.appendChild(linkNode);
linkNode.click(); //模拟在按钮上的一次鼠标单击
URL.revokeObjectURL(linkNode.href); // 释放URL 对象
document.body.removeChild(linkNode);
}

File diff suppressed because it is too large Load Diff

View File

@@ -483,6 +483,7 @@
<div class="img">
<img
src="../../assets/images/leveladd/xiang.png"
@click="showDrawer"
/>
</div>
<div class="text">项目</div>
@@ -730,7 +731,6 @@
<a-table
:columns="drawertableColumns()"
:data-source="drawertableData"
:row-selection="{selectedRowKeys:selectedProjRowKeys,onChange:onProjSelectChange}"
:loading="tableDataTotal === -1 ? true : false"
:scroll="{ x: 700 }"
@expand="expandTable"
@@ -1065,7 +1065,7 @@ import draggable from "vuedraggable";
import { editTask } from "../../api/indexTaskadd";
import * as apiProj from "../../api/index.js";
import { RouterEditTask } from "@/api/indexTask";
import dayjs from "dayjs";
// import dayjs from "dayjs";
import { toDate } from "../../api/method";
import UnlockMode from "../../components/drawers/UnlockMode.vue";
export default {
@@ -1188,52 +1188,94 @@ export default {
time: "2022-07-15 14:00",
},
],
//项目抽屉、列表参数
drawertableData: [
{
key: 1,
parentId:1,
name: '123',
manager:'afssfa',
children:[
{
key: 5,
parentId:1,
name: '123',
manager:'afssfa',
},
]
},
{
key: 2,
parentId:2,
name: '123',
manager:'afssfa',
children:[
{
key: 7,
parentId:1,
name: '123',
manager:'afssfa',
children:[
{
key: 9,
parentId:1,
name: '123',
manager:'afssfa',
},
]
},
]
},
{
key: 3,
parentId:3,
name: '123',
manager:'afssfa',
},
],
selectedProjRowKeys:[],
// drawertableData: [
// {
// key: 1,
// projectName: "管理者进阶",
// manager: "黄华 刘俊",
// creater: "毛继禹",
// time: "2022-07-20 14:00:03",
// children: [
// {
// key: "1-1",
// projectName: "管理者进阶-腾飞班",
// manager: "黄华 刘俊",
// creater: "毛继禹",
// time: "2022-07-20 14:00:03",
// children: [
// {
// key: "1-1-1",
// projectName: "管理者进阶-腾飞班K1",
// manager: "黄华 刘俊",
// creater: "毛继禹",
// time: "2022-07-20 14:00:03",
// },
// ],
// },
// ],
// },
// {
// key: 2,
// projectName: "管理者进阶",
// manager: "黄华 刘俊",
// creater: "毛继禹",
// time: "2022-07-20 14:00:03",
// children: [
// {
// key: "2-1",
// projectName: "管理者进阶-腾飞班",
// manager: "黄华 刘俊",
// creater: "毛继禹",
// time: "2022-07-20 14:00:03",
// children: [
// {
// key: "2-1-1",
// projectName: "管理者进阶-腾飞班K1",
// manager: "黄华 刘俊",
// creater: "毛继禹",
// time: "2022-07-20 14:00:03",
// },
// ],
// },
// ],
// },
// {
// key: 3,
// projectName: "管理者进阶-腾飞班K1",
// manager: "黄华 刘俊",
// creater: "毛继禹",
// time: "2022-07-20 14:00:03",
// },
// {
// key: 4,
// projectName: "管理者进阶-腾飞班K1",
// manager: "黄华 刘俊",
// creater: "毛继禹",
// time: "2022-07-20 14:00:03",
// },
// {
// key: 5,
// projectName: "管理者进阶-腾飞班K1",
// manager: "黄华 刘俊",
// creater: "毛继禹",
// time: "2022-07-20 14:00:03",
// },
// {
// key: 6,
// projectName: "管理者进阶-腾飞班K1",
// manager: "黄华 刘俊",
// creater: "毛继禹",
// time: "2022-07-20 14:00:03",
// },
// {
// key: 7,
// projectName: "管理者进阶-腾飞班K1",
// manager: "黄华 刘俊",
// creater: "毛继禹",
// time: "2022-07-20 14:00:03",
// },
// ],
drawertableData: [],
currentPage: 1,
tableDataTotal: 0,
pageSize: 10,
@@ -1279,6 +1321,7 @@ export default {
isLevel: 1, //学习路径1项目2模板库3
gqxy_hs: true,
isactive: 0,
projectChecked: null, //项目单选框
adddiscussvisible: false, //讨论抽屉
isStudiscuss: false,
addactivevisible: false, //活动抽屉
@@ -1408,6 +1451,14 @@ export default {
console.log("删除关卡失败", err);
});
};
const showDrawer = () => {
state.visible = true;
};
//关闭项目抽屉
const leaveProjDrawer = () => {
state.addprojvisible = false;
};
//在线抽屉
const showDrawerAddOnline = (id, eleId) => {
state.addonlinevisible = true;
@@ -1441,12 +1492,14 @@ export default {
};
//测试抽屉
const showDrawerAddEval = (id, eleId) => {
// state.addevalVisible = true;
state.addevalvisible = true;
state.EditEvalId = id;
state.routerTaskId = eleId;
};
//评估抽屉
const showDrawerAddInvist = (id, eleId) => {
// state.addinvistVisible = true;
state.addinvistvisible = true;
state.routerTaskId = eleId;
state.EditInvistId = id;
@@ -1488,10 +1541,6 @@ export default {
state.EditActiveId = id;
state.routerTaskId = eleId;
};
//关闭项目抽屉
const leaveProjDrawer = () => {
state.addprojvisible = false;
};
//tableData数据赋值方法
const dataAssignment = (id) => {
console.log(state.level);
@@ -1557,6 +1606,9 @@ export default {
message.error(err);
});
};
const closeDrawer = () => {
state.visible = false;
};
const afterProjVisibleChange = (bol) => {
if(bol == true){
getAllProjText()
@@ -1718,6 +1770,7 @@ export default {
"rgb(245, 247, 250,1)";
document.getElementsByTagName("main")[0].style.boxShadow = "none";
getDetail();
getAllProjText();
});
onUnmounted(() => {
document.getElementsByTagName("main")[0].style.background = "#ffffff";
@@ -1891,9 +1944,9 @@ export default {
} else if (type == "活动") {
showDrawerAddActive(id, eleId);
} else if (type == "测评") {
showDrawerAddEval(id, eleId);
} else if (type == "评估") {
showDrawerAddInvist(id, eleId);
} else if (type == "评估") {
showDrawerAddEval(id, eleId);
} else if (type == "投票") {
showDrawerAddVote(id, eleId);
} else if (type == "项目") {
@@ -1948,43 +2001,91 @@ export default {
state.removeStageId = option.chapterId;
};
//项目抽屉用的
const onProjSelectChange = (selectedRowKeys,selectedRows) => {
state.selectedProjRowKeys = selectedRowKeys
// if(selectedRowKeys.length>1){
// return
// }
state.projId = selectedRows[0].projectId
state.projName = selectedRows[0].name
console.log(state.projId,'------------------');
// console.log(selectedRowKeys,selectedRows);
}
const getTableDate = (data) => {
const rowSelection = {
onSelect: (selectedRows, selected, selectedRowKeys) => {
console.log(
"selectedRowKeys",
selectedRowKeys,
"selectedRows",
selectedRows,
"selected",
selected
);
state.projId = selectedRows.parentId;
state.projName = selectedRows.name;
},
};
const getTableDate = (drawertableData) => {
console.log(drawertableData,'drawertableDatadrawertableDatadrawertableDatadrawertableData')
let data = drawertableData
let array = []
data.map((value)=>{
if(value.type == 3){
let obj = {
key: value.projectId,
parentId:value.parentId,
projectId:value.projectId,
name: value.name,
manager:value.manager,
time: dayjs(value.createTime).format("YYYY-MM-DD"),
}
array.push(obj)
}
else {
if(value.type ==3){
let obj = {
key: value.projectId,
parentId:value.parentId,
name: value.name,
manager:value.manager,
time: dayjs(value.createTime).format("YYYY-MM-DD"),
children: value.subList ? getTableDate(value.subList) : [] ,
creator: value.createName,
// time: dayjs(value.createTime).format("YYYY-MM-DD"),
};
array.push(obj);
}
array.push(obj)
else if(value.type == 2){
value.subList.map((item)=>{
let obj = {
key: value.projectId,
parentId:value.parentId,
name: value.name,
manager:value.manager,
creator: value.createName,
// time: dayjs(value.createTime).format("YYYY-MM-DD"),
children:[{
key: item.projectId,
parentId:item.parentId,
name: item.name,
manager:item.manager,
creator: item.createName,
// time: dayjs(value.createTime).format("YYYY-MM-DD"),
}]
}
array.push(obj);
})
}
else{
value.subList.map((item)=>{
item.subList.map((items)=>{
let obj = {
key: value.projectId,
parentId:value.parentId,
name: value.name,
manager:value.manager,
creator: value.createName,
// time: dayjs(value.createTime).format("YYYY-MM-DD"),
children:[{
key: item.projectId,
parentId:item.parentId,
name: item.name,
manager:item.manager,
creator: item.createName,
children:[{
key: items.projectId,
parentId:items.parentId,
name: items.name,
manager:items.manager,
creator: items.createName,
}]
// time: dayjs(value.createTime).format("YYYY-MM-DD"),
}]
}
array.push(obj);
})
})
}
})
return array
state.drawertableData = array;
console.log(state.drawertableData,"------------state.drawertableData---------------");
};
//获取全部项目信息接口
const getAllProjText = () => {
@@ -2002,35 +2103,35 @@ export default {
.then((res) => {
let arr = res.data.data.rows;
if (res.status === 200) {
state.drawertableData = getTableDate(arr);
getTableDate(arr);
console.log("---------------项目信息---------------------------",res.data.data);
}
})
.catch(() => {
message.destroy()
message.error("获取全部项目信息接口失败")
.catch((err) => {
console.log("获取全部项目信息接口失败", err);
console.log("+++++++++++++++++++++++++++++++++++++++++++++++");
// state.createLoading = false;
});
};
//添加关卡项目
//不需要下面这个添加应该 没选数据
const updateTask = () => {
RouterEditTask({
duration: 0,
flag: true,
chapterId: state.isactive,
courseId: Number(state.projId),
name: state.projName,
courseId: state.assessmentId,
name: state.assessmentName,
routerId: state.routerId,
routerTaskId: state.routerTaskId,
routerTaskId: state.routerTaskId || 0,
type: 13,
})
.then(( ) => {
.then((res) => {
console.log(res, 11111);
message.success(`${state.editproj ? "编辑" : "新增"}关卡任务成功`);
// ctx.emit("changeData", false);
leaveProjDrawer()
closeDrawer();
state.addLoading = false;
})
.catch(() => {
message.destroy()
message.error("添加关卡任务失败")
.catch((err) => {
console.log(err, 1111);
});
};
@@ -2038,10 +2139,16 @@ export default {
const showModeVisible = () => {
state.unlockModeVisible = true;
};
onMounted(() => {
// createCase();
getAllProjText();
});
return {
...toRefs(state),
// tableDataFunc,
tableDataFunc2,
showDrawer,
closeDrawer,
showModal,
closeModal,
afterProjVisibleChange,
@@ -2084,7 +2191,7 @@ export default {
showChangeModal,
closeChangeModal,
handleChangeStage,
onProjSelectChange,
rowSelection,
getTableDate,
getAllProjText,
updateTask,

View File

@@ -8,13 +8,12 @@
*/
const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({
publicPath: '/manage',
publicPath: "/manage",
// transpileDependencies: true,
devServer: {
port: 8080,
proxy: {
"/manageApi": {
// target:"http://192.168.19.246:30001",
// target:"http://192.168.100.208:30001",
target: "http://111.231.196.214:30001/", //这里后台的地址模拟的;应该填写你们真实的后台接口
changeOrigin: true, //表示是否改变原域名