Files
fe-manage/src/components/drawers/AddEval.vue

522 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<a-drawer
:visible="addevalVisible"
class="drawerStyle addevalDrawer"
width="80%"
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="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">测评名称</span>
</div>
<div class="btnbox">
<a-input
v-model:value="inputV1"
style="width: 424px; height: 32px"
placeholder="请输入测评名称"
maxlength="20"
/>
</div>
</div>
<div class="main_item">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">选择测评</span>
</div>
<div class="btnbox">
<a-input
v-model:value="inputV2"
style="width: 424px; height: 32px"
placeholder="请输入名称或编码后选择"
/>
</div>
</div>
<div class="main_item">
<div class="signbox">
<span style="margin-right: 3px">有效期</span>
</div>
<div class="btnbox">
<a-range-picker
style="width: 424px"
v-model:value="time"
format="YYYY-MM-DD HH:mm:ss"
:placeholder="[' 开始时间', ' 结束时间']"
/>
</div>
</div>
<div class="main_item2">
<div class="signbox">
<span style="margin-right: 3px">图片</span>
</div>
<div class="textarea">
<a-upload
v-model:file-list="fileList"
name="file"
list-type="picture-card"
class="avatar-uploader"
:show-upload-list="false"
action="/api/file/upload"
:before-upload="beforeUpload"
@change="handleChange"
>
<img v-if="imageUrl" :src="imageUrl" alt="avatar" />
<div v-else>
<loading-outlined v-if="loading"></loading-outlined>
<plus-outlined v-else></plus-outlined>
<div class="ant-upload-text">Upload</div>
</div>
</a-upload>
<span style="padding-bottom: 20px; color: #878b92"
>图片格式为JPG/PNG 图片大小不可超过1MB</span
>
</div>
</div>
</div>
</div>
<div class="main_btns">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="createEvalText">确定</button>
</div>
</div>
<!-- <div class="aeLoading" :style="{display:addLoading?'flex':'none'}">
<a-spin :spinning="addLoading" tip="添加中..." />
</div> -->
</a-drawer>
</template>
<script>
import { reactive, toRefs, ref } from "vue";
// import { useRouter } from "vue-router";
import * as api from "../../api/indexEval";
import * as apitaskadd from "../../api/indexTaskadd";
import { message } from "ant-design-vue";
import { toDate } from "../../api/method";
import { RouterEditTask } from "@/api/indexTask";
// const router = useRouter();
export default {
name: "AddEval",
// components: {
// },
props: {
addevalVisible: {
type: Boolean,
default: false,
},
edit: {
type: Boolean,
default: false,
},
learn: {
type: Number,
default: 0,
},
projectId: {
type: Number,
default: null,
},
chooseStageId: {
type: Number,
default: null,
},
isactive: {
type: Number,
default: null,
},
routerId: {
type: Number,
default: null,
},
EditEvalId: {
type: Number,
default: 147,
},
},
setup(props, ctx) {
const state = reactive({
inputV1: "",
inputV2: "",
time: undefined,
endTimes: "",
startTimes: "",
picUrl: "",
tableData: [],
deletePathId: null, //删除路径id
editPathId: null, //修改路径id
currentPage: 1, //当前页
tableDataTotal: -1, //学习路径列表总数
pageSize: 10, //每页10条数据
// addLoading:false,
});
const closeDrawer = () => {
ctx.emit("update:addevalVisible", false);
ctx.emit("update:edit", false);
state.inputV1 = "";
state.inputV2 = "";
};
const afterVisibleChange = (bool) => {
console.log("state", bool);
};
//上传组件
function getBase64(img, callback) {
const reader = new FileReader();
reader.addEventListener("load", () => callback(reader.result));
reader.readAsDataURL(img);
}
const fileList = ref([]);
const loading = ref(false);
const imageUrl = ref("");
const handleChange = (info) => {
if (info.file.status === "uploading") {
loading.value = true;
return;
}
if (info.file.status === "done") {
console.log("上传图片返回的信息 %o", info);
state.picUrl = info.file.response.data;
// Get this url from response in real world.
getBase64(info.file.originFileObj, (base64Url) => {
imageUrl.value = base64Url;
loading.value = false;
});
}
if (info.file.status === "error") {
loading.value = false;
message.error("upload error");
}
};
const beforeUpload = (file) => {
const isJpgOrPng =
file.type === "image/jpeg" || file.type === "image/png";
if (!isJpgOrPng) {
message.error("You can only upload JPG file!");
}
const isLt2M = file.size / 1024 / 1024 < 1;
if (!isLt2M) {
message.error("Image must smaller than 1MB!");
}
return isJpgOrPng && isLt2M;
};
//创建或编辑测评信息
const createEvalText = () => {
if (!state.inputV1) {
message.destroy();
return message.info("请输入测评名称");
}
if (!state.inputV2) {
message.destroy();
return message.info("请选择测评");
}
if (state.time != undefined) {
state.endTimes = toDate(
new Date(state.time[0].$d).getTime() / 1000,
"Y-M-D"
);
state.startTimes = toDate(
new Date(state.time[1].$d).getTime() / 1000,
"Y-M-D"
);
}
let obj = {
evaluationName: state.inputV1,
createTime: "",
createUser: 0,
evaluationEndTime: state.endTimes,
evaluationFlag: "",
evaluationId: 0,
evaluationPictureAddress: "",
evaluationStartTime: state.startTimes,
evaluationTag: "",
evaluationTypeId: 0,
evaluationTypeName: "",
updateTime: "",
updateUser: 0,
};
let objedit = {
createTime: "",
createUser: 0,
evaluationEndTime: "",
evaluationFlag: "",
evaluationId: props.EditEvalId == null ? 0 : props.EditEvalId,
evaluationName: state.inputV1,
evaluationPictureAddress: "",
evaluationStartTime: "",
evaluationTag: "",
evaluationTypeId: 0,
evaluationTypeName: "",
updateTime: "",
updateUser: 0,
};
let queryobj = {
evaluationId:props.EditEvalId
}
console.log(queryobj,'ssssssssss');
if (props.edit == false) {
api
.createEvaluation(obj)
.then((res) => {
console.log("创建成功", res);
message.success("创建成功");
closeDrawer();
//渲染到项目列表
if (props.learn == 0)
apitaskadd
.addTask({
courseId: res.data.data.evaluationId,
duration: 0,
flag: true,
name: obj.evaluationName,
projectId: props.projectId,
projectTaskId: 0,
stageId: props.chooseStageId,
type: 10,
})
.then((res) => {
console.log("调用项目添加接口后", res.data);
//自定义事件给父组件传值
ctx.emit("changeData", false);
//重新获取任务列表
// apiTask.getTask({ projectId: 28 });
// router.push("/taskadd");
})
.catch((err) => {
console.log(err);
});
//渲染到学历路径
else {
let editObj1 = {
chapterId: props.isactive,
courseId: res.data.data.evaluationId,
duration: 0,
flag: true,
name: obj.evaluationName,
routerId: props.routerId,
routerTaskId: 0,
type: 10,
};
RouterEditTask(editObj1)
}
})
.catch((err) => {
console.log("创建失败", err);
// state.createLoading = false;
});
}
else {
api
.queryEvaluationDetailById(queryobj)
.then((res) => {
setTimeout(() => {
console.log("获取成功", res,objedit.evaluationId);
message.success("获取成功");
}, 1000);
})
.catch((err) => {
console.log("获取失败", err);
});
api
.updateEvaluation(objedit)
.then((res) => {
setTimeout(() => {
console.log("修改成功", res);
message.success("修改成功");
}, 1000);
})
.catch((err) => {
console.log("修改失败", err);
// state.createLoading = false;
//重新获取列表
// getTask();
});
}
};
return {
...toRefs(state),
afterVisibleChange,
closeDrawer,
//增改
createEvalText,
//上传组件
fileList,
loading,
imageUrl,
handleChange,
beforeUpload,
};
},
};
</script>
<style lang="scss">
.ant-table-striped :deep(.table-striped) td {
background-color: #fafafa !important;
}
.addevalDrawer {
.drawerMain {
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
.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;
flex: 1;
border-right: 1px solid #e8e8e8;
.main_item {
display: flex;
align-items: center;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.sign {
margin-right: 5px;
}
}
.btnbox {
display: flex;
flex: 1;
align-items: center;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 8px;
color: #fff;
}
}
}
.main_item2 {
display: flex;
align-items: flex-start;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.sign {
margin-right: 5px;
}
}
.kqszbox {
.qdqtbox {
margin-left: 56px;
}
.setbox {
display: flex;
flex-wrap: wrap;
margin-top: 10px;
margin-bottom: 24px;
.timerbox {
margin-top: 6px;
margin-right: 32px;
display: flex;
align-items: center;
flex-wrap: nowrap;
}
}
}
.btnbox2 {
display: flex;
flex-direction: column;
justify-content: flex-start;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 16px 8px 32px 0;
color: #fff;
margin-top: 16px;
margin-bottom: 60px;
}
}
}
}
}
.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>