Merge branch 'develop' into manage-release

# Conflicts:
#	src/App.vue
#	src/components/drawers/AddHomework.vue
#	src/components/drawers/AddTest.vue
#	src/components/student/ChangeLevelModal.vue
#	src/components/student/TableStudent.vue
#	src/views/examine/ProjectReviewed.vue
This commit is contained in:
yuping
2022-12-22 19:05:26 +08:00
24 changed files with 5578 additions and 5740 deletions

View File

@@ -19,7 +19,7 @@
</div>
</template>
<script>
import { computed, defineComponent, ref, watch } from "vue";
import { computed, defineComponent, ref } from "vue";
import { useRouter, useRoute } from "vue-router";
import { useStore } from "vuex";
import NavLeft from "@/components/NavLeft";
@@ -44,16 +44,16 @@ export default defineComponent({
const store = useStore();
const isLogin = ref(false);
// console.log("router", router.getRoutes(), route);
console.log("版本0.9.14------------");
console.log("版本1.01------------");
const routes = computed(() => {
return router.getRoutes().filter((e) => e.meta?.isLink);
});
watch(
() => route.path,
() => {
route.path === "/login" && (isLogin.value = true);
}
);
// watch(
// () => route.path,
// () => {
// route.path === "/login" && (isLogin.value = true);
// }
// );
const currentRouteName = computed(() => route.name);
function init() {
@@ -186,6 +186,34 @@ export default defineComponent({
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
}
.cus-btn {
width: 100%;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16px;
border: 1px solid #4ea6ff;
border-radius: 8px;
background: #4ea6ff;
cursor: pointer;
color: #fff;
}
.white {
background: #fff;
color: #4ea6ff;
}
.cus-input {
height: 40px;
border-radius: 8px;
}
.cus-select {
height: 40px;
border-radius: 8px;
}
// @media screen and (max-width: 1366px) {
// .cmMain {
// width: 750px;

View File

@@ -46,7 +46,7 @@
</div>
<div class="main_table">
<!--
<!--
<a-table
v-if="edit"
class="ant-table-striped"
@@ -64,7 +64,6 @@
:pagination="false"
/>-->
<a-table
class="ant-table-striped"
:row-class-name="
(_record, index) => (index % 2 === 1 ? 'table-striped' : null)
@@ -80,19 +79,20 @@
:pagination="false"
/>
<div class="tableBox">
<div class="pa">
<a-pagination
v-if="tableDataTotal > 10"
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="handelChangePage"
/>
</div></div>
<div class="pa">
<a-pagination
v-if="tableDataTotal > 10"
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="handelChangePage"
/>
</div>
</div>
</div>
</div>
<div class="main_btns">
@@ -171,7 +171,7 @@ export default {
time: undefined,
caseId: null,
caseName: "",
isClick: false
isClick: false,
});
const closeDrawer = () => {
ctx.emit("update:addcaseVisible", false);
@@ -202,13 +202,13 @@ export default {
width: "200px",
align: "center",
},
// {
// title: "导入时间",
// dataIndex: "time",
// key: "time",
// width: "400px",
// align: "center",
// },
// {
// title: "导入时间",
// dataIndex: "time",
// key: "time",
// width: "400px",
// align: "center",
// },
];
return columns;
};
@@ -218,6 +218,7 @@ export default {
}
state.selectedRowKeys = selectedRowKeys;
state.apiTaskList = selectedRows;
console.log("selectedRows", selectedRows);
};
const handelChangePage = (page, pageSize) => {
state.selectedRowKeys = [];
@@ -276,16 +277,16 @@ export default {
};
const updateTask = () => {
if (props.isLevel == 1) {
if(!props.isactive){
if (!props.isactive) {
message.destroy();
return message.warning("请先选中关卡");
}
if(state.isClick){
message.destroy();
message.error('请勿频繁点击')
return
}
state.isClick = true;
if (state.isClick) {
message.destroy();
message.error("请勿频繁点击");
return;
}
state.isClick = true;
for (let i = 0; i < state.apiTaskList.length; i++) {
RouterEditTask({
chapterId: props.isactive,
@@ -308,12 +309,12 @@ export default {
});
}
} else if (props.isLevel == 2) {
if(state.isClick){
message.destroy();
message.error('请勿频繁点击')
return
}
state.isClick = true;
if (state.isClick) {
message.destroy();
message.error("请勿频繁点击");
return;
}
state.isClick = true;
for (let i = 0; i < state.apiTaskList.length; i++) {
apiTask
.addTask({
@@ -338,19 +339,21 @@ export default {
});
}
} else if (props.isLevel == 3) {
if(state.isClick){
message.destroy();
message.error('请勿频繁点击')
return
}
state.isClick = true;
if (state.isClick) {
message.destroy();
message.error("请勿频繁点击");
return;
}
state.isClick = true;
for (let i = 0; i < state.apiTaskList.length; i++) {
apiTask
.addTaskTemplate({
courseId: Number(state.apiTaskList[i].casesId),
name: state.apiTaskList[i].title,
projectTaskId: props.projectTaskId,
projectTemplateId: Number(localStorage.getItem("projectTemplateId")),
projectTemplateId: Number(
localStorage.getItem("projectTemplateId")
),
stageId: Number(props.chooseStageId) || 0,
type: 3,
})
@@ -371,6 +374,7 @@ export default {
};
//搜索案例列表
const searchList = () => {
state.selectedRowKeys = [];
if (state.inputV1 !== "") {
getAllCaseText();
} else {
@@ -432,7 +436,7 @@ export default {
.main_items {
margin-top: 32px;
display: flex;
margin-bottom: 12px;
flex-wrap: wrap;
.mi_ipts {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -374,9 +374,11 @@ export default {
// this.selectedRows = selectedRows;
// };
const searchProjectList = () => {
state.selectedRowKeys = [];
getAllProjText();
};
const resetProjectList = () => {
state.selectedRowKeys = [];
state.inputV1 = "";
state.inputV2 = "";
state.inputV3 = "";

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@
maxlength="20"
/>
</div>
<div class="btns" @click="getAllInvistText">
<div class="btns" @click="searchList">
<div class="search"></div>
<div class="btnText">搜索</div>
</div>
@@ -43,10 +43,11 @@
>创建人
<span class="data">{{ assessment.creator }}</span>
</span>
<!--
<span class="title"
>创建时间
<span class="data">{{ assessment.time }}</span>
</span>
</span>-->
</div>
<!--
<div v-else>
@@ -144,14 +145,19 @@ export default {
assessmentId: null,
assessmentName: null,
});
const afterVisibleChange=()=>{
}
const closeDrawer = () => {
ctx.emit("update:assessmentVisible", false);
};
//清空所选
const clearLine = () => {
console.log("state.selectedRowKeys", state.selectedRowKeys);
state.selectedRowKeys = [];
state.addOnlineList = [];
state.inputV1 = "";
};
const queryInfo = () => {
//if (props.edit) {
@@ -185,8 +191,8 @@ export default {
assessmentId: info.assessmentId,
name: info.assessmentName,
num: num,
creator: info.createUser ? info.createUser : "-",
time: dayjs(info.createTime).format("YYYY-MM-DD"),
creator: info.createUserName ? info.createUserName : "-",
time: dayjs(info.createTime).format("YYYY-MM-DD HH:mm"),
};
//更新讨论信息
state.assessment = obj;
@@ -277,8 +283,8 @@ export default {
assessmentId: value.assessmentId,
num: num,
name: value.assessmentName ? value.assessmentName : "-",
creator: value.createUser ? value.createUser : "-",
time: dayjs(value.createTime).format("YYYY-MM-DD"),
creator: value.createUserName ? value.createUserName : "-",
time: dayjs(value.createTime).format("YYYY-MM-DD HH:mm"),
};
array.push(obj);
});
@@ -287,6 +293,7 @@ export default {
};
//获取全部评估信息接口
const getAllInvistText = () => {
api
.queryAssessmentDetailList({
assessmentName: state.inputV1,
@@ -308,9 +315,15 @@ export default {
// state.createLoading = false;
});
};
//重置评估信息
const searchList = () => {
state.selectedRowKeys = [];
getAllInvistText();
};
//重置评估信息
const resetInvist = () => {
state.selectedRowKeys = [];
state.inputV1 = "";
getAllInvistText();
};
@@ -321,10 +334,7 @@ export default {
state.selectedRowKeys,
state.assessmentId
);
if (!state.assessmentId) {
clearLine();
}
state.inputV1 = "";
queryInfo();
getAllInvistText();
});
@@ -332,10 +342,11 @@ export default {
() => props.assessmentId,
() => {
if (!props.assessmentId) {
clearLine();
clearLine();
state.assessment = null;
} else {
queryInfo();
console.log("dd");
}
console.log("props.assessmentId", props.assessmentId);
},
@@ -353,6 +364,8 @@ export default {
resetInvist,
handelChangePage,
queryInfo,
searchList,
afterVisibleChange,
};
},
};

View File

@@ -202,8 +202,8 @@ export default {
assessmentId: value.assessmentId,
num: num,
name: value.assessmentName ? value.assessmentName : "-",
creator: value.createUser ? value.createUser : "-",
time: dayjs(value.createTime).format("YYYY-MM-DD"),
creator: value.createUserName ? value.createUserName : "-",
time: dayjs(value.createTime).format("YYYY-MM-DD HH:mm"),
};
array.push(obj);
});

View File

@@ -24,7 +24,7 @@
<div class="fi_input">
<a-input
v-model:value="inputV1"
style="width:424px; height: 40px; border-radius: 8px"
style="width: 424px; height: 40px; border-radius: 8px"
placeholder="请输入项目名称"
/>
</div>
@@ -54,20 +54,21 @@
onChange: onSelectChange,
}"
/>
<div class="tableBox" style="margin-top:85px;">
<div class="pa">
<a-pagination
v-if="tableDataTotal > 10"
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
</div></div>
<div class="tableBox" style="margin-top: 85px">
<div class="pa">
<a-pagination
v-if="tableDataTotal > 10"
:showSizeChanger="false"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
class="pagination"
@change="changePagination"
/>
</div>
</div>
</div>
</div>
<div class="main_btns">
@@ -131,20 +132,20 @@ export default {
align: "center",
ellipsis: true,
},
// {
// {
// title: "状态",
// width: "13%",
// dataIndex: "status",
// key: "status",
// align: "center",
// },
// {
// width: "13%",
// dataIndex: "status",
// key: "status",
// align: "center",
// },
// {
// title: "价格",
// width: "13%",
// dataIndex: "quiz_price",
// key: "price",
// align: "center",
// },
// key: "price",
// align: "center",
// },
{
title: "可答题人数",
width: "20%",
@@ -161,7 +162,7 @@ export default {
}
state.selectedRowKeys = selectedRowKeys;
state.evListData = selectedRows[0] ? selectedRows[0] : {};
console.log("state.evListData",state.evListData);
console.log("state.evListData", state.evListData);
};
const closeDrawer = () => {
state.selectedRowKeys = [];
@@ -229,19 +230,20 @@ export default {
//获取测评列表
const getAllEvalText = () => {
let objael = {
keyword:state.inputV1,
keyword: state.inputV1,
};
api
.choiceEvaluation(objael)
.then((res) => {
state.tableDataTotal=9;
state.tableDataTotal = 9;
// console.log("测评列表", res.data.data);
getTableDataList(res.data.data);
})
.catch(() => {});
};
//搜索测评列表
const searchList = () => {
state.selectedRowKeys = [];
if (state.inputV1 !== "") {
getAllEvalText();
} else {
@@ -311,7 +313,7 @@ export default {
}
.mi_btns {
display: flex;
cursor: pointer;
.btn {
padding: 0px 26px 0px 26px;

View File

@@ -63,16 +63,12 @@
:unCheckedValue="0"
:disabled="true"
><span
style="
width: 100%;
color: rgba(109, 117, 132, 1);
font-size: 14px;
"
style="width: 100%;color: rgba(109, 117, 132, 1);font-size: 14px;"
>同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span
></a-switch>
</div>
</div>
<div class="set_content">
<div class="set_content" v-if="projectInfo.boeFlag">
<div class="setc_name"><span>是否BOEU实施</span></div>
<div class="setc_main">
<a-switch
@@ -83,7 +79,7 @@
></a-switch>
</div>
</div>
<div class="set_content">
<div class="set_content" v-if="projectInfo.remark ">
<div class="setc_name"><span>项目说明</span></div>
<div class="setc_main">
<span style="color: #999999">{{ projectInfo.remark }}</span>

View File

@@ -527,6 +527,7 @@ export default {
};
//搜索
const search = () => {
state.selectedRows = [];
//重新获取列表
getClassList();
};

View File

@@ -245,6 +245,7 @@ export default {
// };
//获取选择考试列表
const getManageList = () => {
state.selectedRowKeys = [];
let obj = {
keyWord: state.inputPname,
pageIndex: state.currentPage,

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@
style="padding-left: 20px; margin-right: 0px"
>
<a-col>
<a-form-item title="姓名:" @click="getStuList">
<a-form-item title="姓名:" >
<a-input
class="cus-input"
v-model:value="tableParam.studentName"
@@ -15,7 +15,7 @@
</a-form-item>
</a-col>
<a-col>
<a-button class="cus-btn" style="width: 100px">
<a-button class="cus-btn" style="width: 100px" @click="getStuList">
<template #icon>
<img
style="margin-right: 10px"
@@ -117,7 +117,7 @@ import { computed, defineProps, onMounted, ref, watch } from "vue";
import { delStudentList, getStuPage } from "@/api/index1";
import CommonStudent from "@/components/student/CommonStudent";
import ChangeLevelModal from "./ChangeLevelModal.vue";
import {message} from "ant-design-vue";
import { message } from "ant-design-vue";
const props = defineProps({
type: Number,
id: String,
@@ -191,7 +191,7 @@ const tableData = ref({
});
const stuRowSelection = computed(() => ({
columnWidth: 10,
columnWidth: 20,
selectedRowKeys: stuSelectKeys.value,
onChange: onStuSelectChange,
preserveSelectedRowKeys: true,
@@ -233,9 +233,16 @@ function getStuList() {
});
}
function reset() {}
function reset() {
tableParam.value.studentName="";
}
function bathDel() {
if( stuSelectKeys.value &&
stuSelectKeys.value.length === 0){
message.destroy();
return message.warning("请先选中学员");
}
stuSelectKeys.value &&
stuSelectKeys.value.length &&
delStudentList({

View File

@@ -143,7 +143,6 @@
placeholder="请输入课程名称"
v-model:value="xzinputV1"
v-model:validate="validate"
:maxlength="20"
show-count
:type="2"
@@ -226,7 +225,8 @@
</div>
<a-radio-group v-model:value="valueE1">
<div class="bc_box">
<div class="bc_boxl">
<!-- 2022-12-21 隐藏 后面放开 lixiaoge -->
<!-- <div class="bc_boxl">
<div class="ol_checkbox" @click="expectOnline">
<a-radio
v-model:checked="checked"
@@ -237,7 +237,7 @@
线上
</a-radio>
</div>
</div>
</div> -->
<div class="bc_boxr">
<div class="ol_checkbox">
<a-radio
@@ -364,7 +364,6 @@
placeholder="请输入课程名称"
v-model:value="qdms_inputV1"
v-model:validate="validate"
:maxlength="20"
show-count
:type="2"
@@ -2219,9 +2218,7 @@
</div>
</div>
</div>
<div class="aeLoading" :style="{ display: addLoading ? 'flex' : 'none' }">
<a-spin :spinning="addLoading" tip="" />
</div>
</a-modal>
<!--新建开课页面 -->
<!--开课学员管理页面 -->
@@ -2278,7 +2275,11 @@
<span>{{ currentPlanItem.teacher }}</span>
</div>
<div class="stmm_i5">
<TableStudent :type="3" :id="offcoursePlanId" :columns="stuColumns">
<TableStudent
:type="3"
:id="offcoursePlanId"
:columns="stuColumns"
>
<!-- <template #extension = "data">-->
<!-- <div style="display: flex">-->
<!-- <button @click="handlJoinStu(data)">成绩录入</button>-->
@@ -3412,21 +3413,21 @@ export default defineComponent({
}
},
},
{
title: "加入方式",
width: "10%",
dataIndex: "join",
key: "6",
align: "center",
customRender: ({ record }) => {
switch (String(record.source)) {
case "1":
return "手动加入";
case "2":
return "报名加入";
}
},
},
// {
// title: "加入方式",
// width: "10%",
// dataIndex: "join",
// key: "6",
// align: "center",
// customRender: ({ record }) => {
// switch (String(record.source)) {
// case "1":
// return "手动加入";
// case "2":
// // return "报名加入";
// }
// },
// },
// {
// title: "签到状态",
// width: '10%',
@@ -3732,7 +3733,7 @@ export default defineComponent({
codevisible: false, //二维码弹窗
codeInfo: null, //二维码内容
codeUrl: codeUrl,
// 课程三级分类
options2222: [
{
@@ -4658,7 +4659,6 @@ export default defineComponent({
}
console.log("state.validate", state.validate);
if (!state.validate) {
message.destroy();
@@ -4842,7 +4842,7 @@ export default defineComponent({
};
//保存开课
const handleSureStu = () => {
state.addLoading = true;
let startTime,
endTime = 0;
if (state.xjkkinputV3) {
@@ -4884,17 +4884,19 @@ export default defineComponent({
message.destroy();
return message.error("请输入必填项");
} else {
state.addLoading = true;
console.log("state.addLoading ", state.addLoading);
}
state.addLoading = true;
editPlan(postData).then((res) => {
if (res.data.code === 200) {
getTableDate3();
handleCancelStu();
rest();
}
state.addLoading = false;
});
state.addLoading = false;
};
//编辑开课
const handelEditStu = async (itm) => {
@@ -8125,183 +8127,9 @@ export default defineComponent({
display: flex;
justify-content: space-between;
.i5_left {
display: flex;
.select {
margin-right: 20px;
margin-bottom: 20px;
}
.addTimeBox {
position: relative;
display: flex;
align-items: center;
.addTime {
position: absolute;
z-index: 10;
margin-left: 10px;
color: rgba(0, 0, 0, 0.4);
}
.ant-picker {
padding-left: 85px;
}
.ant-picker-range .ant-picker-active-bar {
margin-left: 85px;
}
}
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #4ea6ff;
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 {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #ffffff;
line-height: 36px;
margin-left: 5px;
}
}
.btnn {
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 {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #4ea6ff;
line-height: 36px;
margin-left: 5px;
}
}
.btn1 {
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search0.png");
}
}
.btn2 {
.search {
width: 16px;
height: 18px;
background-image: url("../../assets/images/courseManage/reset1.png");
}
}
.btn1:hover {
background: rgba(64, 158, 255, 0.76);
.search {
background-image: url("../../assets/images/courseManage/search0.png");
}
.btnText {
color: #ffffff;
}
}
.btn1:active {
background: #0982ff;
}
.btn2:hover {
background: rgba(64, 158, 255, 0.1);
}
.btn2:active {
background: rgba(64, 158, 255, 0.2);
}
}
.btns {
display: flex;
// flex-wrap: wrap;
.btn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #4ea6ff;
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 {
background-size: 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #ffffff;
line-height: 36px;
margin-left: 5px;
}
}
.btn3 {
margin-right: 0px;
.search {
width: 17px;
height: 18px;
background-image: url("../../assets/images/courseManage/add0.png");
}
}
.btn3:hover {
background: rgba(64, 158, 255, 0.76);
.search {
background-image: url("../../assets/images/courseManage/add0.png");
}
.btnText {
color: #ffffff;
}
}
.btn3:active {
background: #0982ff;
}
}
}
.stmm_i6 {
@@ -8641,29 +8469,7 @@ export default defineComponent({
margin-bottom: 20px;
}
.cus-btn {
width: 100%;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16px;
border: 1px solid #4ea6ff;
border-radius: 8px;
background: #4ea6ff;
cursor: pointer;
color: #fff;
}
.white {
background: #fff;
color: #4ea6ff;
}
.cus-input {
height: 40px;
border-radius: 8px;
}
// .tableSelect {
// position: relative;

View File

@@ -49,16 +49,21 @@
placeholder="请输入创建人"
/>
</div>
<div class="inpbox1">
<div class="select addTimeBox">
<div class="addTime">审核时间</div>
<a-range-picker
v-model:value="valueDate"
:show-time="{ format: 'HH:mm' }"
style="border-radius: 8px; height: 40px; margin-left: 5px"
style="width: 360px"
format="YYYY-MM-DD"
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
format="YYYY/MM/DD HH:mm"
/>
</div>
</div>
</div>
</div>
<div class="tmplh_btn">
<div class="btn btn1" @click="getProjList">
@@ -144,6 +149,7 @@
import { onMounted, reactive, toRefs } from "vue";
import { auditedlist } from "../../api/indexAudit";
import * as moment from "moment";
import dayjs from "dayjs";
export default {
name: "ProjectViewed",
@@ -324,8 +330,8 @@ export default {
const getProjList = () => {
state.loading=true
let objn = {
beginTime: state.valueDate ? state.valueDate[0] : "",
endTime: state.valueDate ? state.valueDate[1] : "",
beginTime: state.valueDate ? dayjs(state.valueDate[0]).format("YYYY-MM-DD") : "",
endTime: state.valueDate ? dayjs(state.valueDate[1]).format("YYYY-MM-DD") : "",
createName: state.valuecreater,
manager: state.valuename,
name: state.valueproj,
@@ -408,6 +414,7 @@ export default {
</script>
<style lang="scss">
.projAuditModal {
.ant-modal {
width: 816px !important;
min-height: 420px !important;
@@ -539,7 +546,26 @@ export default {
.projectviewed {
width: 100%;
.addTimeBox {
position: relative;
display: flex;
align-items: center;
.addTime {
position: absolute;
z-index: 10;
margin-left: 10px;
color: rgba(0, 0, 0, 0.4);
}
.ant-picker {
padding-left: 85px;
}
.ant-picker-range .ant-picker-active-bar {
margin-left: 85px;
}
}
.tmpl {
width: 100%;

View File

@@ -4,7 +4,7 @@
<div class="left clearfix">
<div class="leftmain">
<div class="tit" style="margin-left: 18px">关卡</div>
<div class="btn btn3" @click="showModal()" style="margin-left: 19px">
<div class="btn btn3" @click="showModal()" style="margin-left: 19px">
<div class="search"></div>
<div class="btnText">添加关卡</div>
</div>
@@ -206,7 +206,8 @@
<router-link to="/leveladd">
<div style="display: flex">
<img
class="img2" style="margin-right:22px;"
class="img2"
style="margin-right: 22px"
src="../../assets/images/leveladd/back.png"
/>
<div class="return">返回</div>
@@ -688,7 +689,7 @@
</div>
</div>
<div style="width: 87px; text-align: center">
{{ element.cretime }}分钟
{{ element.cretime ? element.cretime + "分钟" : "-" }}
</div>
<div
style="
@@ -1309,22 +1310,21 @@ export default {
api
.deleteChapter(obj)
.then((res) => {
if(res.data.code==200){
if (res.data.code == 200) {
console.log("删除关卡成功", res);
message.destroy();
message.success("删除关卡成功");
let chapter = localStorage.getItem("chapterId")
if(state.deleteChapterId == chapter){
localStorage.removeItem("chapterId")
let chapter = localStorage.getItem("chapterId");
if (state.deleteChapterId == chapter) {
localStorage.removeItem("chapterId");
}
closeDeleteChapter();
getDetail();
}else if(res.data.code==-1){
} else if (res.data.code == -1) {
message.destroy();
message.success("至少保留一个关卡");
closeDeleteChapter();
}
})
.catch((err) => {
console.log("删除关卡失败", err);
@@ -1418,13 +1418,16 @@ export default {
state.chooseProjectList = JSON.stringify(state.level[i].taskList);
console.log("state.level[i].taskList", state.level[i].taskList);
state.level[i].taskList.forEach((element) => {
// console.log("element", element);
console.log("element", element);
let obj = {
id: element.routerTaskId,
key: element.routerTaskId,
lei: checkType(element.type),
creater: element.name,
cretime: element.duration,
cretime:
element.duration || element.duration == 0
? element.duration
: "-",
checked1: element.flag,
routerTaskId: element.routerTaskId,
courseId: element.courseId,
@@ -1466,7 +1469,7 @@ export default {
? JSON.parse(localStorage.getItem("chapterId"))
: null;
console.log("chapter", chapter);
if (chapter >0) {
if (chapter > 0) {
dataAssignment(chapter); //用哪个的任务表
state.isactive = chapter; //哪个亮
} else {
@@ -1513,7 +1516,7 @@ export default {
title: "姓名",
dataIndex: "name",
key: "name",
width: 60,
width: 160,
align: "left",
ellipsis: true,
className: "classify",
@@ -1535,13 +1538,13 @@ export default {
align: "center",
className: "h",
},
// {
// title: "岗位",
// dataIndex: "gang",
// key: "gang",
// width: 110,
// align: "center",
// className: "h",
// {
// title: "岗位",
// dataIndex: "gang",
// key: "gang",
// width: 110,
// align: "center",
// className: "h",
// },
{
title: "当前关卡",
@@ -1551,14 +1554,14 @@ export default {
align: "center",
className: "h",
},
{
title: "进度",
dataIndex: "jin",
key: "jin",
width: 110,
align: "center",
className: "h",
},
{
title: "进度",
dataIndex: "jin",
key: "jin",
width: 110,
align: "center",
className: "h",
},
{
title: "开始时间",
dataIndex: "time",
@@ -1853,7 +1856,7 @@ export default {
let obj = {
chapterId: ele.chapterId,
courseId: ele.courseId,
duration: ele.cretime,
duration: ele.cretime == "-" ? 0 : ele.cretime,
flag: ele.checked1,
name: ele.creater,
routerId: ele.routerId,
@@ -2667,7 +2670,7 @@ export default {
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.07);
display: flex;
justify-content: center;
min-height:512px;
min-height: 512px;
.boomcen {
width: 95%;
// height: 100%;

View File

@@ -332,7 +332,7 @@
</a-tab-pane>
</a-tabs>
</a-tab-pane>
<!--
<a-tab-pane key="3" tab="项目积分">
<div class="split"></div>
<div class="projectscore">
@@ -478,6 +478,8 @@
</div>
</div>
</a-tab-pane>
-->
<a-tab-pane key="4" tab="设置">
<div class="split"></div>
<a-tabs>

View File

@@ -175,7 +175,7 @@
</a-radio-group>
</div>
</div>
<div class="name name2">
<div class="name name2" v-if="courseSyncFlag">
<div class="namebox">
<div class="inname">同步学习记录</div>
</div>
@@ -194,7 +194,7 @@
>
</div>
</div>
<div class="name name2">
<div class="name name2" v-if="projectInfo.remark">
<div class="namebox">
<div class="inname" style="margin-top: 13px">项目说明</div>
</div>

File diff suppressed because it is too large Load Diff

View File

@@ -851,7 +851,7 @@
<div class="img"></div>
<div class="ed">编辑</div>
</div> -->
<div class="edit" @click="toEdit">
<div class="edit" v-if="status!=3 && status!=2" @click="toEdit">
<div class="img"></div>
<div class="ed">编辑</div>
</div>
@@ -1442,14 +1442,7 @@
>
<div
class="modalHeader"
style="
width: 100%;
height: 68px;
display: flex;
align-items: center;
justify-content: space-between;
"
>
style="width: 100%;height: 68px;display: flex;align-items: center; justify-content: space-between; ">
<div class="headerLeft" style="margin-left: 32px">
<span style="width: 15px; height: 15px"
><img src="../../assets/images/taskpage/pub.png"

View File

@@ -329,7 +329,7 @@
<!-- 添加外链侧弹窗 -->
<div class="lin"></div>
</div>
<!--TODO1216
<!--TODO1216
<div class="item" @click="showDrawerAddDiscuss">
<div class="itcon">
<div class="img">
@@ -427,7 +427,7 @@
<div class="lin"></div>
</div>
<!--TODO1216
<!--TODO1216
<div class="item" @click="showDrawerAddVote">
<div class="itcon">
<div class="img">
@@ -455,7 +455,6 @@
</div>
</div>
-->
</div>
<div class="boom">
<div class="boomcen">
@@ -649,7 +648,7 @@
</div>
</div>
<div style="width: 87px; text-align: center">
{{ element.cretime }}分钟
{{ element.cretime ? element.cretime + "分钟" : "-" }}
</div>
<div
style="
@@ -913,10 +912,10 @@
</div>
<div class="del_btnbox">
<div class="del_btn btn1">
<div class="btnText" @click="delete_exit">取消</div>
<div class="btnText" @click="closeCancel">取消</div>
</div>
<div class="del_btn btn2">
<div class="btnText" @click="showModal">确定</div>
<div class="btnText" @click="removeAllLevel">确定</div>
</div>
</div>
</div>
@@ -1389,7 +1388,7 @@ export default {
? "投票"
: "-",
creater: value.name,
cretime: Number(value.duration) > 0 ? value.duration : "-",
cretime: value.duration || value.duration == 0 ? value.duration : "-",
checked1: value.flag ? true : false,
checked: false, //是否选中类型
courseId: value.courseId,
@@ -1402,12 +1401,16 @@ export default {
state.tableData = array;
console.log("state.tableData", state.tableData);
};
//把阶段放到level里
const getStageData = (tableData) => {
//把阶段放到level里
const getStageData = (tableData) => {
let data = tableData;
let array = [];
data.map((value) => {
console.log("dd",Number(value.templateStageId) ,Number(value.templateStageId) > 0);
console.log(
"dd",
Number(value.templateStageId),
Number(value.templateStageId) > 0
);
if (Number(value.templateStageId) > 0) {
let obj = {
id: value.templateStageId,
@@ -1623,20 +1626,48 @@ export default {
console.log("获取任务列表失败", err);
});
};*/
//获取任务列表
const getTask = async () => {
await api
.templateDetail(localStorage.getItem("projectTemplateId")).then((res) => {
console.log("22222", res.data.data.stageList);
state.projectTitle = res.data.data.projectTemplateInfo.name;
state.picUrl = res.data.data.projectTemplateInfo.picUrl;
state.stageList = res.data.data.stageList;
getStageData(res.data.data.stageList);
updateStageChoosd();
});
// 删除所有阶段
const removeAllLevel = () => {
// state.cancelModal = false;
console.log(state.level);
let removeArr = state.level;
for (let i = 0; i < removeArr.length; i++) {
api
.deleteStage(removeArr[i].id)
.then((res) => {
console.log("删除阶段成功", res);
if (removeArr.length - 1 == i) {
message.destroy();
message.success("删除全部阶段成功");
closeDeleteStage();
localStorage.setItem("stageId", "");
getTask();
state.cancelModal = false;
}
})
.catch((err) => {
if (removeArr.length - 1 == i) {
console.log("删除阶段失败", err);
message.destroy();
message.success("删除全部阶段失败");
state.cancelModal = false;
}
});
}
};
//获取任务列表
const getTask = async () => {
await api
.templateDetail(localStorage.getItem("projectTemplateId"))
.then((res) => {
console.log("22222", res.data.data.stageList);
state.projectTitle = res.data.data.projectTemplateInfo.name;
state.picUrl = res.data.data.projectTemplateInfo.picUrl;
state.stageList = res.data.data.stageList;
getStageData(res.data.data.stageList);
updateStageChoosd();
});
};
function updateStageChoosd() {
@@ -1659,9 +1690,15 @@ export default {
getTableData(state.stageList[0].taskList);
return;
}
console.log(state.chooseStageId,state.stageList.find((e) => e.templateStageId == state.chooseStageId)?.taskList,state.stageList);
console.log(
state.chooseStageId,
state.stageList.find((e) => e.templateStageId == state.chooseStageId)
?.taskList,
state.stageList
);
getTableData(
state.stageList.find((e) => e.templateStageId == state.chooseStageId)?.taskList
state.stageList.find((e) => e.templateStageId == state.chooseStageId)
?.taskList
);
}
@@ -1956,10 +1993,9 @@ export default {
console.log("state.level", id, state.level);
state.chooseStageId = id;
let final = state.level.find((item) => item.id === id);
if(final !=null){
if (final != null) {
getTableData(final.taskList);
}
};
//选择单个任务
@@ -2154,6 +2190,7 @@ export default {
getTableData,
deleteTask,
editStage,
removeAllLevel,
updateTableData,
changeVData,
changeRow,

View File

@@ -78,6 +78,7 @@
<div class="in">
<a-range-picker
show-time
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
v-model:value="projectInfo.rangeTime"
@@ -214,7 +215,7 @@ import TrainClass from "@/components/project/TrainClass";
import OrgClass from "@/components/project/OrgClass";
import ProjectManager from "@/components/project/ProjectManagerNew";
import ProjectLevel from "@/components/project/ProjectLevel";
import dayjs from "dayjs";
const route = useRoute();
const router = useRouter();
const store = useStore();
@@ -240,9 +241,8 @@ const getDetail = () =>
route.query.projectTemplateId &&
api.templateDetail(route.query.projectTemplateId).then((res) => {
projectInfo.value = res.data.data.projectTemplateInfo;
projectInfo.value.rangeTime = [
projectInfo.value.beginTime,
projectInfo.value.endTime,
projectInfo.value.rangeTime = [dayjs(projectInfo.value.beginTime).format("YYYY-MM-DD HH:mm"),
dayjs(projectInfo.value.endTime).format("YYYY-MM-DD HH:mm"),
];
projectInfo.value.courseSyncFlag = !!projectInfo.value.courseSyncFlag
});
@@ -253,8 +253,8 @@ const backPage = () => {
function timeChange(e) {
if (e && e.length === 2) {
projectInfo.value.beginTime = e[0];
projectInfo.value.endTime = e[1];
projectInfo.value.beginTime = dayjs(e[0]).format("YYYY-MM-DD HH:mm"),
projectInfo.value.endTime =dayjs(e[1]).format("YYYY-MM-DD HH:mm")
}
}
@@ -281,6 +281,8 @@ const createProject = () => {
}
}
projectInfo.value.courseSyncFlag = courseSyncFlag.value ? 1 : 0;
projectInfo.value.beginTime = dayjs(projectInfo.value.beginTime).format("YYYY-MM-DD HH:mm"),
projectInfo.value.endTime =dayjs(projectInfo.value.endTime).format("YYYY-MM-DD HH:mm")
api
.templateEdit({
...projectInfo.value,

View File

@@ -24,12 +24,17 @@
></a-select>
</div>
<div class="select">
<a-range-picker
v-model:value="projectTime"
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
/>
</div>
<div class="select addTimeBox">
<div class="addTime">创建时间</div>
<a-range-picker
v-model:value="projectTime"
style="width: 420px"
format="YYYY-MM-DD"
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
/>
</div>
</div>
<div style="display: flex; margin-bottom: 20px">
<div class="btn btn1" @click="handleSearch">
<div class="search"></div>
@@ -166,7 +171,8 @@
<div class="btnText" @click="handleCancelModal">取消</div>
</div>
<div class="del_btn btn2">
<div class="btnText" @click="handleSure">确定</div>
<div class="btnText" v-if="!addLoading" @click="handleSure">确定</div>
<div class="btnText" v-else>确定</div>
</div>
</div>
</div>
@@ -414,7 +420,7 @@ export default {
if (state.projectTime) {
startTime = toDate(
new Date(state.projectTime[0].$d).getTime() / 1000,
"Y-M-D"
"Y-M-D hh:mm"
);
endTime = toDate(
new Date(state.projectTime[1].$d).getTime() / 1000,
@@ -665,6 +671,7 @@ export default {
state.copy_hs = true;
};
const handleSure = () => {
// 发布
if (state.pub_hs) {
editReleaseStatus({
@@ -710,11 +717,13 @@ export default {
}
// 复制
if (state.copy_hs) {
state.addLoading = true;
let resultPost = restData(state.copyItem);
resultPost.assessmentName = resultPost.assessmentName + "(1)";
console.log("resultPost");
console.log(resultPost);
createResearch(resultPost).then((res) => {
state.addLoading =false;
console.log(res);
handleCancelModal();
getTableDate();
@@ -865,6 +874,26 @@ export default {
display: block;
clear: both;
}
.addTimeBox {
position: relative;
display: flex;
align-items: center;
.addTime {
position: absolute;
z-index: 10;
margin-left: 10px;
color: rgba(0, 0, 0, 0.4);
}
.ant-picker {
padding-left: 85px;
}
.ant-picker-range .ant-picker-active-bar {
margin-left: 85px;
}
}
.out {
//display: flex;
display: block;