This commit is contained in:
宋文超
2022-11-24 14:29:47 +08:00
parent 00fbe3a3fa
commit 379c6d2ae3
7 changed files with 892 additions and 57 deletions

View File

@@ -17,3 +17,6 @@ export const auditList = (obj) => http.post('/admin/project/auditList', obj)
//项目审核
export const auditView = (obj) => http.post('/admin/project/auditView', obj)
//面授课审核
export const courseAuditView = (obj) => http.post('/admin/offcourse/auditView', obj)

View File

@@ -385,6 +385,7 @@ import { queryFaceDetailById, editPlan } from "../../api/indexFace";
import dayjs from "dayjs";
import AssessmentList from "../drawers/ AssessmentList.vue";
// import { toDate } from "../../api/method";
import { queryWorkDetailById } from "../../api/indexWork";
export default {
name: "AddFaceteach",
components: {
@@ -465,6 +466,7 @@ export default {
face: true, //面授传给配置作业的标识
chooseWork: null, //配置的work
chooseWorkName: null, //配置的work名字
chooseWorkId: null, //配置的work ID
chooseMent: null,
chooseMentName: null,
assessmentVisible: false,
@@ -486,7 +488,10 @@ export default {
state.checkedAssessment = false;
state.chooseMent = null;
state.chooseWork = null;
state.chooseWorkId = null;
state.chooseWorkName = null;
state.chooseCourse = null;
state.chooseCourseName = null;
};
const closeDrawer = () => {
ctx.emit("update:addfaceteachVisible", false);
@@ -501,7 +506,6 @@ export default {
// 该页面显示同时 edit为true 时,发送查询请求,
queryFaceTeach();
}
// queryFaceTeach();
};
const showDrawerSelFacet = () => {
state.selfacetvisible = true;
@@ -546,6 +550,7 @@ export default {
state.inputV6 = result.afterStart;
state.inputV7 = result.beforeEnd;
state.fileList = JSON.parse(result.attach);
state.chooseWorkId = result.homeWorkId;
// state.radioV1 = result.
state.checkedHolidy =
result.completeType == 1
@@ -568,6 +573,12 @@ export default {
state.radioV1 = "2";
}
state.checkedAssessment = result.evalFlag == 1 ? true : false;
if (state.chooseWorkId) {
queryWorkDetailById({ workId: state.chooseWorkId }).then((res) => {
state.chooseWork = res.data.data;
state.chooseWorkName = res.data.data.workName;
});
}
});
};
@@ -603,7 +614,7 @@ export default {
evalFlag: state.checkedAssessment == true ? 1 : 0,
evaluateId:
state.chooseMent == null ? 0 : state.chooseMent.assessmentId,
homeWorkId: 0,
homeWorkId: state.chooseWorkId || 0,
name: state.inputV1,
noProjectMember: state.radioV2 == "1" ? 0 : 1,
offcourseId: 0,
@@ -613,6 +624,7 @@ export default {
signWordFlag: 0,
teacherId: 0,
testId: 0,
teacher: state.inputV2,
};
if (props.edit) {
@@ -697,12 +709,15 @@ export default {
const closeTagWork = () => {
state.chooseWork = null;
state.chooseWorkName = null;
state.chooseWorkId = null;
};
const getWork = (value) => {
console.log("getWork", value);
state.chooseWork = value;
state.chooseWorkName = value.workName;
console.log("getWorkName", value.workName);
state.chooseWorkId = value.workId;
// console.log("getWorkName", value.workName);
};
const handleChange = ({ file, fileList }) => {
if (file.status !== "uploading") {

View File

@@ -368,8 +368,18 @@ export default {
const cle = () => {
console.log("xx", formState);
let obj = {
submitEndTime: dayjs(formState.choosedTime[1]).format("YYYY-MM-DD"),
submitStartTime: dayjs(formState.choosedTime[0]).format("YYYY-MM-DD"),
workEnclosureAddress: "",
workId: props.edit ? props.EditWorkId : 0,
workName: formState.workName,
workRequirement: formState.workRequirement,
};
if (props.face) {
ctx.emit("getWork", formState);
createWorkTask(obj).then((res) => {
ctx.emit("getWork", res.data.data);
});
}
};

View File

@@ -100,7 +100,9 @@
详情{{ showDetail ? "折叠" : "展开" }}
</button>
</div>
</a-tab-pane>
<a-tab-pane key="2" tab="修改记录"> </a-tab-pane>
</a-tabs>
<div class="audit">
<div class="set_content">
<div class="setc_name"><span>审核</span></div>
@@ -118,12 +120,10 @@
</div>
</div>
</div>
<div class="detaile" @click="subMit">
<button class="debtn">提交</button>
<div class="detaile">
<button class="can" @click="closeDrawer">取消</button>
<button class="debtn" @click="subMit">提交</button>
</div>
</a-tab-pane>
<a-tab-pane key="2" tab="修改记录"> </a-tab-pane>
</a-tabs>
</div>
</div>
</a-drawer>
@@ -196,6 +196,7 @@ export default {
const closeDrawer = () => {
ctx.emit("update:ProjAuditvisible", false);
state.valueSuggest = null;
state.valuePass = "1";
};
//获取项目信息
@@ -405,11 +406,22 @@ export default {
// background-color: blue;
display: flex;
justify-content: center;
.can {
width: 130px;
height: 40px;
border-radius: 4px;
border: 1px solid #387df7;
color: #387df7;
background-color: #fff;
margin-right: 30px;
}
.debtn {
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
border-radius: 4px;
color: #ffffff;
cursor: pointer;
}
}

View File

@@ -86,16 +86,317 @@
</div>
</div>
</div>
<!-- 审核弹窗 -->
<a-modal
v-model:visible="courAuditModal"
:footer="null"
:closable="closeBack"
wrapClassName="courAuditModal"
centered="true"
>
<div class="delete">
<div class="del_header"></div>
<div class="del_main">
<div class="header">
<div class="icon"></div>
<span>审核</span>
<div class="close_exit" @click="closeCourAuditModal"></div>
</div>
<div class="body">
<div class="item">
<div class="left">审核</div>
<div class="rig">
<a-radio-group name="radioGroup" v-model:value="valuepass">
<a-radio value="1">通过</a-radio>
<a-radio value="2" style="margin-left: 40px">不通过</a-radio>
</a-radio-group>
</div>
</div>
<div class="item" style="margin-top: 20px">
<div class="left">审核意见</div>
<div class="rig">
<a-textarea v-model:value="valueSugg" :rows="4" />
</div>
</div>
</div>
<div class="del_btnbox">
<div class="del_btn btn1" @click="closeCourAuditModal">
<div class="btnText">取消</div>
</div>
<div class="del_btn btn2" @click="sureCourAuditModal">
<div class="btnText">确定</div>
</div>
</div>
</div>
</div>
</a-modal>
<!-- 预览弹窗 -->
<a-modal
v-model:visible="lookCourseModal"
title="Title"
@ok="handlePush"
:footer="null"
:closable="false"
wrapClassName="modalStyle lookCourseModal"
width="80%"
@cancel="ft_exit"
>
<div class="modalHeader">
<div class="headerLeft">
<img
style="width: 17px; height: 18px; margin-right: 8px"
src="../../assets/images/basicinfo/add.png"
/>
<span class="headerLeftText">预览</span>
</div>
<div style="margin-right: 57px; cursor: pointer">
<img
@click="ft_exit"
style="width: 22px; height: 22px"
src="../../assets/images/basicinfo/close22.png"
/>
</div>
</div>
<div class="modalMain">
<div class="faceteach">
<div class="ft_main">
<div class="m_body">
<div class="mb_left">
<div class="mbl_items">
<div class="item_nam">
<div class="asterisk_icon">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 14px">课程名称</span>
</div>
<div class="item_inp">
<div class="i1_input">fefewf</div>
</div>
</div>
<div class="i2_cz">
<div class="i2_top">
<div
class="i2_right"
@click="hideShow"
style="cursor: pointer"
>
<div class="b_icon"></div>
</div>
</div>
</div>
<div class="mbl_items2">
<div class="item_nam">
<div class="asterisk_icon">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 14px">封面图</span>
</div>
<div class="item_inp">fefw</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<div class="asterisk_icon">
<img
style="width: 10px; height: 10px"
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 14px">目标人群</span>
</div>
<div class="item_inp">
<div class="i1_input"></div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<span style="margin-right: 14px">课程价值</span>
</div>
<div class="item_inp">
<div class="i1_input"></div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<div class="asterisk_icon">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 14px">资源归属</span>
</div>
<div class="item_inp">
<div class="select i6_input"></div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<div class="asterisk_icon">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 14px">内容分类</span>
</div>
<div class="item_inp">
<div class="select i6_input"></div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<span style="margin-right: 14px">场景</span>
</div>
<div class="item_inp">
<div class="select i7_input"></div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<span style="margin-right: 14px">内容标签</span>
</div>
<div class="item_inp"></div>
</div>
</div>
<div class="mb_right">
<div class="mbl_items">
<div class="item_nam">
<div class="asterisk_icon">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt="asterisk"
/>
</div>
<span style="margin-right: 14px">授课教师</span>
</div>
<div class="item_inp">
<div class="i1_input"></div>
</div>
</div>
<div class="mbl_items2">
<div class="item_nam">
<span style="margin-right: 14px">课程简介</span>
</div>
<div class="item_inp">
<div class="i10_textarea"></div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<span style="margin-right: 10px">附件</span>
</div>
<div class="item_inp">
<a-upload
multiple
:show-upload-list="false"
:before-upload="beforeUpload2"
>
<div class="accessory" style="cursor: pointer">
<div class="accessory_icon">
<img
src="@/assets/images/coursewareManage/enclosure.png"
alt="enclosure"
/>
</div>
<span style="color: #4ea6ff">添加附件</span>
</div>
</a-upload>
<span>
支持.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.jpg,.jpeg,.png,.gif,.zip
</span>
</div>
</div>
<div class="mbl_items12">
<div
class="i12_box1"
v-for="(item, index) in imgList"
:key="index"
>
<div class="file_img">
<img :src="item.img" />
</div>
<div class="file_detail">
<div class="file_name">
<span style="color: #6f6f6f">{{ item.name }}</span>
</div>
<div class="file_updata">
<div class="updatabox">
<div class="updatacolor"></div>
<div class="updataxq">上传完成</div>
</div>
<div class="upjd">
<span style="margin: auto 5px">100%</span>
</div>
</div>
</div>
<div class="file_operation">
<div class="fobox">
<span style="color: #4ea6ff" @click="handleDel(index)">
删除
</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="m_footer">
<div class="fotnam">
<span>课程大纲</span>
</div>
<div class="fotarea">
<div style="border: 1px solid #ccc">
<Toolbar
style="border-bottom: 1px solid #ccc"
:editor="editorRef"
:defaultConfig="toolbarConfig"
:mode="mode"
/>
<Editor
style="height: 500px; overflow-y: hidden"
v-model="valueHtml"
:defaultConfig="editorConfig"
:mode="mode"
@onCreated="handleCreated"
/>
</div>
</div>
</div>
<div class="m_btn">
<div class="btn btn5">
<div class="btnText" @click="ft_exit">取消</div>
</div>
<div class="btn btn6">
<div class="btnText" @click="handlePush">确定</div>
</div>
</div>
</div>
</div>
</div>
</a-modal>
</div>
</template>
<script>
import { reactive, toRefs, onMounted } from "vue";
import { list } from "../../api/indexAudit";
import { list, courseAuditView } from "../../api/indexAudit";
import { toDate } from "../../api/method";
import { message } from "ant-design-vue";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
export default {
name: "CoursereViewedN",
components: {
Editor,
Toolbar,
},
setup() {
const state = reactive({
optionsproj: [
@@ -115,6 +416,14 @@ export default {
currentPage: 1,
total: null,
pageSize: 10,
courAuditModal: false, //审核弹窗
closeBack: false,
valuepass: "1",
valueSugg: null,
chooseId: null,
chooseCreater: null,
chooseOffId: null,
lookCourseModal: false, //预览
columns1: [
{
title: "序号",
@@ -170,38 +479,30 @@ export default {
dataIndex: "opt",
key: "opt",
align: "center",
customRender: () => {
customRender: (value) => {
return (
<div>
<span style="cursor:pointer">审核</span>&nbsp;
<span
style="cursor:pointer"
onClick={() => {
showAudit(
value.record.createId,
value.record.creater,
value.record.offId
);
}}
>
审核
</span>
&nbsp;
<span style="cursor:pointer">预览</span>
</div>
);
},
},
],
tableData1: [
{
number: "1",
name: "课程1",
type: "在线",
content: "领导力/领导业务",
status: "待审核",
change: "",
creater: "-",
time: "-",
},
{
number: "2",
name: "面授课程",
type: "在线",
content: "领导力/领导业务",
status: "待审核",
change: "已转审",
creater: "-",
time: "-",
},
],
// 待审核课程的数据
tableData1: [],
});
const getFaceList = (obj) => {
@@ -242,6 +543,8 @@ export default {
change: "-",
creater: item.createName,
time: toDate(item.createTime, "Y-M-D h-m"),
createrId: item.createId,
offId: item.offcourseId,
};
array.push(obj);
});
@@ -271,6 +574,40 @@ export default {
state.currentPage = pagina;
getFaceList();
};
const showAudit = (id, creater, offId) => {
state.courAuditModal = true;
state.chooseId = id;
state.chooseCreater = creater;
state.chooseOffId = offId;
};
const closeCourAuditModal = () => {
state.courAuditModal = false;
state.valueSugg = null;
state.valuepass = "1";
state.chooseId = null;
state.chooseCreater = null;
state.chooseOffId = null;
};
const sureCourAuditModal = () => {
courseAuditView({
createId: state.chooseId,
createName: state.chooseCreater,
description: state.valueSugg,
offcourseId: state.chooseOffId,
pass: state.valuepass == "1" ? 1 : 0,
})
.then((res) => {
console.log(res);
state.courAuditModal = false;
message.destroy();
return message.success("审核提交成功");
})
.catch((err) => {
console.log(err);
message.destroy();
return message.warning("审核提交失败");
});
};
onMounted(() => {
getFaceList();
});
@@ -281,11 +618,468 @@ export default {
search,
reset,
changePagination,
showAudit,
closeCourAuditModal,
sureCourAuditModal,
};
},
};
</script>
<style lang="scss">
.courAuditModal {
.ant-modal {
width: 640px !important;
height: 400px !important;
.ant-modal-content {
width: 640px !important;
height: 400px !important;
.ant-modal-body {
width: 640px !important;
height: 400px !important;
padding: 0 !important;
.delete {
z-index: 999;
width: 640px;
height: 400px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
border-radius: 4px;
// position: absolute;
// left: 50%;
// top: 10%;
// transform: translate(-50%, -50%);
.del_header {
position: absolute;
width: calc(100%);
height: 68px;
background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100%
);
}
.del_main {
width: 100%;
position: relative;
.header {
display: flex;
align-items: center;
padding-top: 20px;
padding-left: 26px;
font-size: 16px;
.icon {
width: 16px;
height: 16px;
margin-right: 10px;
background-image: url(@/assets/images/taskpage/gan.png);
background-size: 100% 100%;
}
.close_exit {
position: absolute;
right: 42px;
cursor: pointer;
width: 20px;
height: 20px;
background-image: url(@/assets/images/coursewareManage/close.png);
background-size: 100% 100%;
}
}
.body {
width: 100%;
margin: 34px auto 56px auto;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
// background-color: red;
position: relative;
.item {
display: flex;
width: 100%;
.left {
width: 110px;
text-align: right;
}
.rig {
width: 450px;
.ant-input {
border-radius: 8px;
resize: none !important;
}
}
}
}
.del_btnbox {
display: flex;
margin: 30px auto;
justify-content: center;
.del_btn {
width: 100px;
height: 40px;
background: rgba(64, 158, 255, 0);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
cursor: pointer;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
.btn1 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
margin-right: 14px;
}
.btn2 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
}
}
}
.lookCourseModal {
.ant-modal {
.ant-modal-content {
// width:1358px !important;
.ant-modal-body {
.modalHeader {
display: flex;
align-items: center;
justify-content: space-between;
.headerLeft {
margin-left: 27px;
display: flex;
align-items: center;
.headerLeftText {
font-size: 16px;
font-weight: 400;
color: #000000;
line-height: 36px;
}
}
}
.modalMain {
.m_title {
margin-bottom: 20px;
}
.m_body {
display: flex;
flex-wrap: wrap;
.mb_left {
width: 50%;
.mbl_items {
display: flex;
align-items: center;
justify-content: flex-end;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-right: 5px;
margin-top: -15px;
}
}
.item_inp {
flex: 1;
position: relative;
.inp_num {
position: absolute;
left: 398px;
top: 10px;
}
}
}
.mbl_items2 {
display: flex;
align-items: start;
margin-top: 10px;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-right: 5px;
margin-top: -15px;
}
}
.item_inp {
flex: 1;
.i_upload_img {
width: 100px;
height: 100px;
border-radius: 8px;
}
.i_upload {
width: 100px;
height: 100px;
border: 1px solid #4ea6ff;
border-radius: 8px;
text-align: center;
align-items: center;
cursor: pointer;
.addimg {
position: relative;
.heng {
position: absolute;
top: 50px;
left: 25px;
width: 50px;
border: 1px solid #4ea6ff;
}
.shu {
position: absolute;
top: 25px;
left: 50px;
height: 50px;
border: 1px solid #4ea6ff;
}
}
}
}
}
.i2_cz {
width: 440px;
margin-left: 100px;
.i2_top {
display: flex;
justify-content: space-between;
}
}
.i8_bottom {
display: flex;
width: 440px;
margin-left: 100px;
}
}
.mb_right {
width: 50%;
.mbl_items {
display: flex;
align-items: flex-start;
justify-content: flex-end;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-top: -15px;
margin-right: 5px;
}
}
.item_inp {
flex: 1;
}
.accessory {
display: flex;
align-items: center;
.accessory_icon {
width: 16px;
height: 16px;
margin-top: -8px;
margin-right: 5px;
}
}
}
.mbl_items2 {
display: flex;
align-items: start;
margin-bottom: 10px;
.item_nam {
width: 100px;
display: flex;
align-items: center;
justify-content: flex-end;
white-space: nowrap;
.asterisk_icon {
width: 10px;
height: 10px;
margin-right: 5px;
margin-top: -15px;
}
}
.item_inp {
flex: 1;
position: relative;
.inp_num {
position: absolute;
left: 395px;
bottom: 10px;
}
}
}
.mbl_items12 {
width: 440px;
margin-left: 100px;
.i12_box1 {
display: flex;
align-items: center;
padding: 17px 0px 17px 21px;
border: 1px solid #eff4fc;
border-radius: 8px;
margin-bottom: 10px;
.file_img {
width: 27px;
height: 32px;
// background-image: url(@/assets/images/coursewareManage/imgs.png);
margin-right: 22px;
img {
width: 100%;
height: 100%;
}
}
.file_detail {
width: 250px;
margin-right: 21px;
.file_updata {
display: flex;
align-items: center;
.updatabox {
position: relative;
width: 230px;
height: 5px;
background-color: rgba(192, 192, 192, 0.25);
border-radius: 3px;
.updatacolor {
position: absolute;
left: 0;
width: 100%;
height: 5px;
background-color: #57c887;
border-radius: 3px;
}
.updatacolor2 {
position: absolute;
left: 0;
width: 80%;
height: 5px;
background-color: #ff7474;
border-radius: 3px;
}
.updatacolor3 {
position: absolute;
left: 0;
width: 60%;
height: 5px;
background-color: #388be1;
border-radius: 3px;
}
.updataxq {
position: absolute;
right: 2px;
top: -30px;
color: #57c887;
}
.updataxq2 {
position: absolute;
right: 2px;
top: -30px;
color: #ff7474;
}
.updataxq3 {
position: absolute;
right: 2px;
top: -30px;
color: #388be1;
}
}
}
}
.file_operation {
display: flex;
.fobox {
margin-right: 5px;
cursor: pointer;
}
}
}
}
}
}
.m_footer {
display: flex;
margin: 20px 0;
.fotnam {
width: 100px;
display: flex;
justify-content: end;
padding-right: 15px;
}
.fotarea {
position: relative;
.fuwenben {
width: 90%;
height: 20px;
background-color: rgb(95, 95, 95);
position: absolute;
left: 50%;
transform: translate(-50%, 0);
top: 3px;
z-index: 9999;
}
}
}
.m_btn {
width: 100%;
margin-top: 25px;
margin-bottom: 20px;
display: flex;
justify-content: center;
align-content: center;
.btn {
width: 100px;
height: 40px;
background: rgba(64, 158, 255, 0);
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.btnText {
font-size: 14px;
font-weight: 400;
line-height: 40px;
}
}
.btn5 {
border: 1px solid rgba(64, 158, 255, 1);
color: #4ea6ff;
}
.btn6 {
background-color: #4ea6ff;
color: #ffffff;
}
}
}
}
}
}
}
.coursereviewedn {
width: 100%;
.tmpl {

View File

@@ -113,7 +113,6 @@
:closable="closeBack"
wrapClassName="projAuditModal"
centered="true"
@after-visible-change="changeAu"
>
<div class="delete">
<div class="del_header"></div>
@@ -130,6 +129,7 @@
:data-source="tableDataAudit"
:loading="tableDataTotalAudit === -1 ? true : false"
expandRowByClick="true"
:scroll="{ y: 150 }"
@expand="expandTable"
:pagination="false"
/>
@@ -423,9 +423,9 @@ export default {
.then((res) => {
console.log("获取到了审核日志列表", res);
let result = res.data.data;
if (result.total > 0) {
// if (result.total > 0) {
setAudit(result.rows);
}
// }
})
.catch((err) => {
console.log("审核日志列表获取失败", err);

View File

@@ -202,6 +202,7 @@
v-model:projectId="projectId"
v-model:chooseStageId="chooseStageId"
@changeData="updateTableData"
v-model:projectTaskId="projectTaskId"
/>
</div>
<!-- 添加面授侧弹窗 -->