Files
fe-manage/src/components/drawers/ProjectAudit.vue
2023-02-13 09:57:42 +08:00

698 lines
20 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="ProjAuditvisible"
class="drawerStyle ProjectAudit"
placement="right"
width="60%"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">审核项目</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="main" style="padding-right: 10px">
<a-tabs v-model:activeKey="activeSetKey">
<a-tab-pane key="1" tab="基本信息">
<div class="content7" v-if="showDetail">
<div class="set_body">
<div class="set_content">
<div class="setc_name"><span>项目名称</span></div>
<div class="setc_main">
<span style="color: #999999">{{ projectInfo.name }}</span>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>封面图</span></div>
<div class="setc_main">
<img
style="width: 151px; height: 84px"
:src="projectInfo.picUrl"
alt=""
/>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>项目时间</span></div>
<div class="setc_main">
<span style="color: #999999"
>{{ projectInfo.beginTime }}
{{ projectInfo.endTime }}</span
>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>项目经理</span></div>
<div class="setc_main">
<span style="color: #999999">{{
projectInfo.manager
}}</span>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>资源归属</span></div>
<div class="setc_main">
<span style="color: #999999">{{
(projectInfo.sourceBelongFullName || "") +
projectInfo.sourceBelongName
}}</span>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>项目级别</span></div>
<div class="setc_main">
<ProjectLevel
v-model:value="projectInfo.level"
:tag="true"
></ProjectLevel>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>培训体系</span></div>
<div class="setc_main">
<TrainClass
v-model:value="projectInfo.systemId"
:tag="true"
></TrainClass>
</div>
</div>
<div class="set_content">
<div class="setc_name"><span>同步学习记录</span></div>
<div class="setc_main">
<a-switch
v-model:checked="projectInfo.courseSyncFlag"
:checkedValue="1"
:unCheckedValue="0"
:disabled="true"
><span
style="
width: 100%;
color: rgba(109, 117, 132, 1);
font-size: 14px;
"
>同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span
></a-switch
>
</div>
</div>
<div class="set_content" v-if="projectInfo.boeFlag">
<div class="setc_name"><span>是否BOEU实施</span></div>
<div class="setc_main">
<a-switch
v-model:checked="projectInfo.boeFlag"
:checkedValue="1"
:unCheckedValue="0"
:disabled="true"
></a-switch>
</div>
</div>
<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>
</div>
</div>
</div>
</div>
<div class="detaile">
<button class="debtn" @click="changeDe">
详情{{ showDetail ? "折叠" : "展开" }}
</button>
</div>
</a-tab-pane>
<a-tab-pane key="2" tab="修改记录" class="record">
<div
class="tableBox"
v-if="showRecord"
style="
margin-top: 22px;
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 20px;
"
>
<a-table
style="border: 1px solid #f2f6fe"
:columns="columns"
:data-source="tableData"
:loading="tableDataTotal === -1 ? true : false"
:scroll="{ x: 900 }"
:pagination="false"
childrenColumnName="childrens"
rowKey="id"
>
<template #expandedRowRender="{ record }">
<div class="reworkTitle">
<div style="width: 20%; text-align: center">内容</div>
<div style="width: 40%; text-align: center">修改前</div>
<div style="width: 40%; text-align: center">修改后</div>
</div>
<div
v-for="(elem, index) in record.children"
:key="index"
class="reworkCon"
>
<div style="width: 20%; text-align: center">
{{ elem.columnName }}
</div>
<div style="width: 40%; text-align: center">
{{ elem.beforeValue }}
</div>
<div style="width: 40%; text-align: center">
{{ elem.afterValue }}
</div>
</div>
</template>
</a-table>
<div class="pa" style="margin-top: 20px">
<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="detaile">
<button class="debtn" @click="changeRe">
详情{{ showDetail ? "折叠" : "展开" }}
</button>
</div>
</a-tab-pane>
</a-tabs>
<div class="audit">
<div class="set_content">
<div class="setc_name"><span>审核</span></div>
<div class="setc_main">
<a-radio-group v-model:value="valuePass">
<a-radio value="1">通过</a-radio>
<a-radio value="2">不通过</a-radio>
</a-radio-group>
</div>
</div>
<div class="set_content">
<div class="sign" style="position: relative; left: 70px; top: -3px">
<img src="@/assets/images/coursewareManage/asterisk.png" alt="" />
</div>
<div class="setc_name"><span>审核意见</span></div>
<div class="setc_main">
<a-textarea
v-model:value="valueSuggest"
:rows="4"
show-count
:maxlength="20"
/>
</div>
</div>
</div>
</div>
<div class="btnn">
<button class="btn1" @click="closeDrawer">取消</button>
<button class="btn2" @click="subMit">确定</button>
</div>
</div>
</a-drawer>
</template>
<script>
import { toRefs, reactive, onMounted } from "vue";
import { getTask } from "../../api/indexTaskadd";
import { toDate } from "../../api/method";
import { auditView, editRecord } from "../../api/indexAudit";
import { message } from "ant-design-vue";
import * as api1 from "@/api/index1";
import ProjectLevel from "@/components/project/ProjectLevel";
import TrainClass from "@/components/project/TrainClass";
export default {
name: "ProjectAudit",
components: {
ProjectLevel,
TrainClass,
},
props: {
ProjAuditvisible: {
type: Boolean,
default: false,
},
chooseProject: {
type: Number,
default: null,
},
chooseCreateId: {
type: Number,
default: null,
},
chooseCreater: {
type: String,
default: null,
},
finishdFun: {
type: Function,
default: null,
},
},
setup(props, ctx) {
const state = reactive({
activeSetKey: "1",
checkedBOEU: false, //是否BOEU实施
checkedSty: false, //同步学习记录
showDetail: false,
showRecord: false, //修改记录
valuePass: "1",
valueSuggest: null,
//基本信息
name: null, //项目名称 未改
startTime: null, //开始时间 已改
tstartTime: null, //开始事件 未改
endTime: null, //结束时间 已改
tendTime: null, //结束时间 未改
manager: null, //项目经理 未改
sourceBelong: null, //资源归属 已改
tsourceBelong: null, //资源归属 未改
remark: null, //项目说明 未改
level: null, //项目级别 已改
tlevel: null, //项目级别 未改
systemId: null, //培训分类
tsystemId: null, //培训分类 未改
picUrl: null, //未改
parentId: null, //未改
courseSyncFlag: null, //未改
boeFlag: null, //未改
managerId: null, //未改
notice: null, //未改
status: null, //未改
type: null, //未改
category: null, //未改
noticeFlag: null, //未改
templateId: null, //未改
attach: null,
calssifyList: [],
faceclassScene: [],
projectInfo: {},
tableDataTotal: 20,
pageSize: 10,
currentPage: 1,
tableData: [],
columns: [
{
title: "修改人",
dataIndex: "updateName",
key: "updateName",
align: "center",
className: "h",
width: "40%",
},
{
title: "修改时间",
dataIndex: "updateTime",
key: "updateTime",
align: "center",
className: "h",
width: "40%",
},
],
});
const closeDrawer = () => {
ctx.emit("update:ProjAuditvisible", false);
console.log(props.finishdFun);
props.finishdFun && props.finishdFun();
state.valueSuggest = null;
state.valuePass = "1";
};
//获取项目信息
const getTaskInfo = () => {
getTask({
projectId: props.chooseProject,
}).then((res) => {
console.log("get task", res.data.data);
state.projectInfo = res.data.data.projectInfo;
let info = res.data.data.projectInfo;
let start = toDate(info.beginTime / 1000, "Y-M-D h:m");
let end = toDate(info.endTime / 1000, "Y-M-D h:m");
state.tstartTime = info.beginTime;
state.tendTime = info.endTime;
state.tsourceBelong = info.sourceBelongId;
state.parentId = info.parentId;
state.name = info.name;
state.startTime = start;
state.endTime = end;
state.manager = info.manager;
state.remark = info.remark;
state.level =
info.level == 1
? "集团级"
: info.level == 2
? "组织级"
: info.level == 3
? "现地级"
: info.level == 4
? "部门级"
: "-";
state.tlevel = info.level;
state.systemId =
info.systemId == 1
? "集团级"
: info.systemId == 2
? "组织级"
: info.systemId == 3
? "现地级"
: info.systemId == 4
? "部门级"
: "-";
state.tsystemId = info.systemId;
state.checkedSty = info.courseSyncFlag == 1 ? true : false;
state.courseSyncFlag = info.courseSyncFlag;
state.checkedBOEU = info.boeFlag == 1 ? true : false;
state.boeFlag = info.boeFlag;
state.picUrl = info.picUrl;
state.managerId = info.managerId;
state.notice = info.notice;
state.status = info.status;
state.type = info.type;
state.category = info.category;
state.noticeFlag = info.noticeFlag;
// state.attach = info.attach;
// state.templateId = info.templateId;
state.sourceBelong =
info.sourceBelongId == 1
? "项目一"
: info.sourceBelongId == 2
? "项目二"
: info.sourceBelongId == 3
? "项目三"
: "-";
});
};
const afterVisibleChange = () => {
getTaskInfo();
getrecord();
};
const changeDe = () => {
state.showDetail = !state.showDetail;
};
const changeRe = () => {
state.showRecord = !state.showRecord;
};
const subMit = () => {
if (!state.valueSuggest) {
message.error(`请输入审核意见!`);
return;
}
auditView({
createId: props.chooseCreateId,
createName: props.chooseCreater,
description: state.valueSuggest,
pass: state.valuePass == "1" ? 1 : -1,
projectId: props.chooseProject,
})
.then((res) => {
console.log("提交成功", res);
message.destroy();
message.success("提交成功");
closeDrawer();
})
.catch((err) => {
console.log(err);
message.warning("提交失败");
});
};
const getDictList = async (param) =>
api1.getDict({
pageNo: 1,
pageSize: 20,
setCode: param,
})
.then((res) => res.data.data.rows);
onMounted(async () => {
state.calssifyList = (await getDictList("faceclassClass")).map((e) => ({
label: e.dictName,
value: e.dictCode,
})); //内容
state.faceclassScene = (await getDictList("faceclassScene")).map((e) => ({
label: e.dictName,
value: e.dictCode,
})); //场景
});
//获取项目修改记录
const getrecord = () => {
console.log("props.chooseProject", props.chooseProject);
editRecord(props.chooseProject)
.then((res) => {
console.log("获取修改记录2", res);
if (res.data.code === 200) {
state.tableData = res.data.data.records;
// console.log("state.tableData", state.tableData);
}
})
.catch((err) => {
console.log("获取修改记录失败", err);
});
};
return {
...toRefs(state),
closeDrawer,
afterVisibleChange,
getTaskInfo,
changeDe,
changeRe,
subMit,
};
},
};
</script>
<style lang="scss">
.ProjectAudit {
.drawerMain {
min-width: 600px;
margin: 0px 32px 0px 32px;
// overflow-x: auto;
display: flex;
flex-direction: column;
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
// background-color: red;
margin-bottom: 20px;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
// margin-left: 24px;
}
}
.main {
width: 100%;
height: 100%;
// background-color: #bfa;
overflow-y: auto;
padding-right: 10px;
.content7 {
margin-top: 20px;
.set_tit {
margin-left: 34px;
font-size: 18px;
font-weight: 500;
color: #232425;
}
.line {
width: 100%;
height: 1px;
background-color: #e8e8e8;
margin-top: 10px;
}
.set_body {
margin-left: 34px;
margin-right: 34px;
position: relative;
.edit {
position: absolute;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
right: 0;
cursor: pointer;
.img {
width: 18px;
height: 18px;
background-image: url(../../assets/images/basicinfo/edit.png);
background-size: 100%;
margin-right: 7px;
}
.ed {
font-size: 14px;
font-weight: 400;
color: #ffffff;
}
}
.set_content {
margin: 32px auto;
display: flex;
// justify-content: end;
.setc_name {
width: 150px;
display: flex;
justify-content: end;
}
.setc_main {
flex: 1;
margin-left: 12px;
}
}
}
}
.detaile {
width: 100%;
// 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: #4ea6ff;
border-radius: 8px;
border: 0;
color: #ffffff;
cursor: pointer;
}
}
.audit {
margin-left: 34px;
margin-right: 34px;
position: relative;
.set_content {
margin: 32px auto;
display: flex;
// justify-content: end;
.setc_name {
width: 150px;
display: flex;
justify-content: end;
}
.setc_main {
flex: 1;
margin-left: 12px;
textarea {
border-radius: 4px !important;
resize: none;
}
}
}
}
.record {
.reworkTitle {
height: 56px;
display: flex;
align-items: center;
background-color: #fafafa;
}
.reworkCon {
height: 56px;
display: flex;
align-items: center;
border-bottom: 1px solid #f0f6fc;
background-color: #fff;
}
.ant-table-thead > tr > th {
background: #f0f6fc;
}
tr.ant-table-expanded-row > td,
tr.ant-table-expanded-row:hover > td {
padding: 0px;
}
}
}
.btnn {
height: 72px;
width: 100%;
background-color: #fff;
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>