2024-03-15 10:01:08 +08:00
|
|
|
|
<template>
|
|
|
|
|
<el-dialog
|
|
|
|
|
:title="title"
|
|
|
|
|
:model-value="type === 100"
|
|
|
|
|
width="1100px"
|
|
|
|
|
@close="fnClose"
|
|
|
|
|
>
|
|
|
|
|
<div class="tr mb">
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<el-button type="primary" @click="fnAdd"> 新增</el-button>
|
2024-03-15 10:01:08 +08:00
|
|
|
|
<el-button type="primary" @click="fnExport">导出</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
<el-divider content-position="left">
|
|
|
|
|
生产经营单位安全培训教材会审表
|
|
|
|
|
</el-divider>
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<table class="print_table">
|
2024-03-15 10:01:08 +08:00
|
|
|
|
<tr>
|
|
|
|
|
<th>教材名称</th>
|
|
|
|
|
<td colspan="3">{{ props.curriculumname }}</td>
|
|
|
|
|
<th>出版书号</th>
|
|
|
|
|
<td>
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<el-input v-model="data.form.BOOK_NUM" />
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<th>编写单位</th>
|
|
|
|
|
<td colspan="3">
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<el-input v-model="data.form.CORP_NAME" />
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</td>
|
|
|
|
|
<th>编写时间</th>
|
|
|
|
|
<td>
|
|
|
|
|
<el-date-picker
|
|
|
|
|
v-model="data.form.CREATTIME"
|
|
|
|
|
value-format="YYYY-MM-DD"
|
2024-03-25 09:13:10 +08:00
|
|
|
|
format="YYYY-MM-DD"
|
2024-03-15 10:01:08 +08:00
|
|
|
|
/>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<th>教材类型</th>
|
|
|
|
|
<td colspan="5">{{ props.industryAllName }}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<th width="12%">会审地点</th>
|
|
|
|
|
<td width="15%">
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<el-input v-model="data.form.enterpriseName" />
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</td>
|
|
|
|
|
<th width="12%">主持人</th>
|
|
|
|
|
<td width="25%">
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<el-input v-model="data.form.REVIEW_PERSON" />
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</td>
|
|
|
|
|
<th width="12%">会审时间</th>
|
|
|
|
|
<td width="24%">
|
|
|
|
|
<el-date-picker
|
|
|
|
|
v-model="data.form.REVIEW_TIME"
|
|
|
|
|
value-format="YYYY-MM-DD"
|
2024-03-25 09:13:10 +08:00
|
|
|
|
format="YYYY-MM-DD"
|
2024-03-15 10:01:08 +08:00
|
|
|
|
/>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<th colspan="6">安全培训教材会审情况</th>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td colspan="6" style="padding: 0">
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<layout-table
|
|
|
|
|
:data="data.reviewRecordList"
|
|
|
|
|
:show-pagination="false"
|
|
|
|
|
@row-dblclick="fnEdit"
|
|
|
|
|
>
|
|
|
|
|
<el-table-column label="审查人员" prop="NAME" />
|
|
|
|
|
<el-table-column label="工作部门" prop="DEPARTMENT_NAME" />
|
|
|
|
|
<el-table-column label="职务/职称" prop="DUTIES" />
|
|
|
|
|
<el-table-column label="审查意见" prop="CHECK_OPINION" />
|
|
|
|
|
<el-table-column label="本人签字">
|
|
|
|
|
<template #default="{ row }">
|
|
|
|
|
<viewer v-if="row.SIGN_PICTURE">
|
|
|
|
|
<img
|
|
|
|
|
:src="FILE_URL + row.SIGN_PICTURE"
|
|
|
|
|
alt=""
|
|
|
|
|
width="100"
|
|
|
|
|
height="25"
|
|
|
|
|
/>
|
|
|
|
|
</viewer>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="操作" width="80">
|
|
|
|
|
<template #default="{ row }">
|
|
|
|
|
<el-button
|
|
|
|
|
type="primary"
|
|
|
|
|
text
|
|
|
|
|
link
|
|
|
|
|
@click="fnDelete(row.ARCHIVES_REVIEW_RECORD_ID)"
|
|
|
|
|
>
|
|
|
|
|
删除
|
|
|
|
|
</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</layout-table>
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr style="height: 200px">
|
|
|
|
|
<th>会审意见</th>
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<td colspan="5">
|
|
|
|
|
<el-input v-model="data.form.REVIEW_OPINIONS" />
|
|
|
|
|
</td>
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
<div class="footer">
|
|
|
|
|
<div>
|
|
|
|
|
单位(盖章):
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<img :src="data.form.OFFICIAL_SEAL_PATH" />
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</div>
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<div>档案编号:{{ data.form.CODE }}</div>
|
2024-03-15 10:01:08 +08:00
|
|
|
|
<div>
|
2024-03-25 09:13:10 +08:00
|
|
|
|
归档日期:{{ dayjs(data.form.END_TIME).format("YYYY年MM月DD日") }}
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<template #footer>
|
|
|
|
|
<el-button @click="fnClose">关闭</el-button>
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<el-button type="primary" @click="fnSubmit">保存</el-button>
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</template>
|
|
|
|
|
</el-dialog>
|
2024-03-25 09:13:10 +08:00
|
|
|
|
<add-review
|
|
|
|
|
v-model:visible="data.addDialog.visible"
|
|
|
|
|
v-model:form="data.addDialog.form"
|
|
|
|
|
:type="data.addDialog.type"
|
|
|
|
|
:outer-layer-form="data.form"
|
2024-03-27 15:53:32 +08:00
|
|
|
|
:curriculum-id="curriculumId"
|
|
|
|
|
@get-data="fnGetData"
|
2024-03-25 09:13:10 +08:00
|
|
|
|
/>
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
|
import dayjs from "dayjs";
|
2024-03-25 09:13:10 +08:00
|
|
|
|
import { nextTick, reactive, watchEffect } from "vue";
|
|
|
|
|
import { ElMessage, ElMessageBox } from "element-plus";
|
2024-03-15 10:01:08 +08:00
|
|
|
|
import {
|
|
|
|
|
getClassGoEdit,
|
|
|
|
|
getReviewGoEdit,
|
2024-03-25 09:13:10 +08:00
|
|
|
|
getReviewRecordList,
|
2024-03-15 10:01:08 +08:00
|
|
|
|
downloadHs,
|
2024-03-25 09:13:10 +08:00
|
|
|
|
getReviewAdd,
|
|
|
|
|
getReviewEdit,
|
|
|
|
|
setReviewRecordDelete,
|
|
|
|
|
setReviewRecordView,
|
2024-03-15 10:01:08 +08:00
|
|
|
|
} from "@/request/training_archive_management.js";
|
2024-03-25 09:13:10 +08:00
|
|
|
|
import { debounce } from "throttle-debounce";
|
|
|
|
|
import AddReview from "./add_review.vue";
|
|
|
|
|
|
2024-03-15 10:01:08 +08:00
|
|
|
|
const FILE_URL = import.meta.env.VITE_FILE_URL;
|
|
|
|
|
const props = defineProps({
|
|
|
|
|
type: {
|
|
|
|
|
type: Number,
|
|
|
|
|
required: true,
|
|
|
|
|
},
|
|
|
|
|
title: {
|
|
|
|
|
type: String,
|
|
|
|
|
required: true,
|
|
|
|
|
},
|
|
|
|
|
clazzId: {
|
|
|
|
|
type: String,
|
|
|
|
|
required: true,
|
|
|
|
|
},
|
|
|
|
|
corpInfoId: {
|
|
|
|
|
type: String,
|
|
|
|
|
required: true,
|
|
|
|
|
},
|
|
|
|
|
industryAllName: {
|
|
|
|
|
type: String,
|
|
|
|
|
required: true,
|
|
|
|
|
},
|
|
|
|
|
curriculumname: {
|
|
|
|
|
type: String,
|
|
|
|
|
required: true,
|
|
|
|
|
},
|
|
|
|
|
curriculumId: {
|
|
|
|
|
type: String,
|
|
|
|
|
required: true,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
const data = reactive({
|
2024-03-25 09:13:10 +08:00
|
|
|
|
form: {
|
|
|
|
|
ARCHIVES_REVIEW_ID: "",
|
|
|
|
|
CODE: "",
|
|
|
|
|
END_TIME: "",
|
|
|
|
|
BOOK_NUM: "",
|
|
|
|
|
CORP_NAME: "",
|
|
|
|
|
CREATTIME: "",
|
2024-03-27 15:53:32 +08:00
|
|
|
|
CURRICULUM_ID: "",
|
2024-03-25 09:13:10 +08:00
|
|
|
|
enterpriseName: "",
|
|
|
|
|
REVIEW_PERSON: "",
|
|
|
|
|
REVIEW_TIME: "",
|
|
|
|
|
REVIEW_OPINIONS: "此教材符合相关文件要求,同意使用。",
|
|
|
|
|
},
|
|
|
|
|
reviewRecordList: [],
|
|
|
|
|
addDialog: {
|
|
|
|
|
visible: false,
|
|
|
|
|
type: "",
|
|
|
|
|
form: {
|
|
|
|
|
REVIEW_USER: "",
|
|
|
|
|
DEPARTMENT_NAME: "",
|
|
|
|
|
DUTIES: "",
|
|
|
|
|
CHECK_OPINION: "",
|
|
|
|
|
SIGN_PICTURE: "",
|
2024-03-15 10:01:08 +08:00
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
const emits = defineEmits(["update:type"]);
|
|
|
|
|
const fnGetData = async () => {
|
|
|
|
|
const resData = await getClassGoEdit({
|
|
|
|
|
TYPE: props.type,
|
|
|
|
|
CLASS_ID: props.clazzId,
|
|
|
|
|
});
|
2024-03-25 09:13:10 +08:00
|
|
|
|
data.form = resData.pd;
|
2024-03-15 10:01:08 +08:00
|
|
|
|
|
|
|
|
|
// 会审表详情
|
|
|
|
|
const reviewInfo = await getReviewGoEdit({
|
|
|
|
|
CLASS_ID: props.clazzId,
|
|
|
|
|
CURRICULUM_ID: props.curriculumId,
|
|
|
|
|
});
|
|
|
|
|
if (reviewInfo.pd) {
|
2024-03-25 09:13:10 +08:00
|
|
|
|
data.reviewInfo = reviewInfo.pd;
|
2024-03-15 10:01:08 +08:00
|
|
|
|
if (reviewInfo.pd.ARCHIVES_REVIEW_ID) {
|
2024-03-25 09:13:10 +08:00
|
|
|
|
data.form.ARCHIVES_REVIEW_ID = reviewInfo.pd.ARCHIVES_REVIEW_ID;
|
|
|
|
|
if (reviewInfo.pd.REVIEW_TIME)
|
|
|
|
|
data.form.REVIEW_TIME = reviewInfo.pd.REVIEW_TIME;
|
|
|
|
|
if (reviewInfo.pd.REVIEW_PERSON)
|
|
|
|
|
data.form.REVIEW_PERSON = reviewInfo.pd.REVIEW_PERSON;
|
|
|
|
|
if (reviewInfo.pd.BOOK_NUM) data.form.BOOK_NUM = reviewInfo.pd.BOOK_NUM;
|
|
|
|
|
data.form.REVIEW_OPINIONS =
|
|
|
|
|
reviewInfo.pd.REVIEW_OPINIONS || "此教材符合相关文件要求,同意使用。";
|
|
|
|
|
if (reviewInfo.pd.CODE) data.form.CODE = reviewInfo.pd.CODE;
|
|
|
|
|
if (reviewInfo.pd.END_TIME) data.form.END_TIME = reviewInfo.pd.END_TIME;
|
|
|
|
|
if (reviewInfo.pd.enterpriseName)
|
|
|
|
|
data.form.enterpriseName = reviewInfo.pd.enterpriseName;
|
|
|
|
|
if (reviewInfo.pd.CORP_NAME)
|
|
|
|
|
data.form.CORP_NAME = reviewInfo.pd.CORP_NAME;
|
|
|
|
|
if (reviewInfo.pd.CREATTIME)
|
|
|
|
|
data.form.CREATTIME = reviewInfo.pd.CREATTIME;
|
|
|
|
|
await fnGetReviewRecordList();
|
2024-03-15 10:01:08 +08:00
|
|
|
|
}
|
2024-03-27 15:53:32 +08:00
|
|
|
|
} else {
|
|
|
|
|
data.reviewInfo = {};
|
|
|
|
|
data.reviewRecordList = [];
|
|
|
|
|
data.form.REVIEW_OPINIONS =
|
|
|
|
|
data.form.REVIEW_OPINIONS || "此教材符合相关文件要求,同意使用。";
|
2024-03-15 10:01:08 +08:00
|
|
|
|
}
|
|
|
|
|
};
|
2024-03-25 09:13:10 +08:00
|
|
|
|
const fnGetReviewRecordList = async () => {
|
|
|
|
|
const reviewRecord = await getReviewRecordList({
|
|
|
|
|
ARCHIVES_REVIEW_ID: data.form.ARCHIVES_REVIEW_ID,
|
|
|
|
|
});
|
|
|
|
|
data.reviewRecordList = reviewRecord.varList;
|
|
|
|
|
};
|
2024-03-15 10:01:08 +08:00
|
|
|
|
watchEffect(() => {
|
|
|
|
|
if (props.type === 100) fnGetData();
|
|
|
|
|
});
|
2024-03-25 09:13:10 +08:00
|
|
|
|
const fnAdd = () => {
|
|
|
|
|
if (data.reviewRecordList.length < 10) {
|
|
|
|
|
data.reviewRecordList.push({});
|
|
|
|
|
} else {
|
|
|
|
|
ElMessage.warning("已经超出上限,最多只能添加10条");
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
const fnEdit = async ({ ARCHIVES_REVIEW_RECORD_ID }) => {
|
|
|
|
|
data.addDialog.visible = true;
|
|
|
|
|
await nextTick();
|
|
|
|
|
if (!ARCHIVES_REVIEW_RECORD_ID) {
|
|
|
|
|
data.addDialog.type = "add";
|
|
|
|
|
} else {
|
|
|
|
|
const resData = await setReviewRecordView({ ARCHIVES_REVIEW_RECORD_ID });
|
|
|
|
|
data.addDialog.form = resData.pd;
|
|
|
|
|
data.addDialog.type = "edit";
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
const fnDelete = debounce(
|
|
|
|
|
1000,
|
|
|
|
|
async (ARCHIVES_REVIEW_RECORD_ID) => {
|
|
|
|
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
|
|
|
|
ARCHIVES_REVIEW_RECORD_ID &&
|
|
|
|
|
(await setReviewRecordDelete({ ARCHIVES_REVIEW_RECORD_ID }));
|
|
|
|
|
ElMessage.success("删除成功");
|
|
|
|
|
await fnGetReviewRecordList();
|
|
|
|
|
},
|
|
|
|
|
{ atBegin: true }
|
|
|
|
|
);
|
2024-03-15 10:01:08 +08:00
|
|
|
|
const fnExport = async () => {
|
|
|
|
|
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
|
|
|
|
await downloadHs({
|
|
|
|
|
CLASS_ID: props.clazzId,
|
|
|
|
|
CORPINFO_ID: props.corpInfoId,
|
|
|
|
|
CURRICULUM_ID: props.curriculumId,
|
|
|
|
|
});
|
|
|
|
|
await ElMessageBox.confirm("导出后请前往档案下载中下载该档案!", "温馨提示", {
|
|
|
|
|
type: "info",
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
const fnClose = () => {
|
|
|
|
|
emits("update:type", 0);
|
|
|
|
|
};
|
2024-03-25 09:13:10 +08:00
|
|
|
|
const fnSubmit = debounce(
|
|
|
|
|
1000,
|
|
|
|
|
async () => {
|
|
|
|
|
!data.form.ARCHIVES_REVIEW_ID
|
|
|
|
|
? await getReviewAdd({ ...data.form, CURRICULUM_ID: props.curriculumId })
|
|
|
|
|
: await getReviewEdit({
|
|
|
|
|
...data.form,
|
|
|
|
|
CURRICULUM_ID: props.curriculumId,
|
|
|
|
|
});
|
|
|
|
|
ElMessage.success("保存成功");
|
|
|
|
|
fnClose();
|
|
|
|
|
},
|
|
|
|
|
{ atBegin: true }
|
|
|
|
|
);
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
|
.footer {
|
|
|
|
|
margin-top: 40px;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: space-around;
|
|
|
|
|
|
|
|
|
|
div:first-child {
|
|
|
|
|
position: relative;
|
|
|
|
|
|
|
|
|
|
img {
|
|
|
|
|
width: 120px;
|
|
|
|
|
height: 120px;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: -41px;
|
|
|
|
|
left: -13px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-03-25 09:13:10 +08:00
|
|
|
|
|
|
|
|
|
:deep(.el-input) {
|
|
|
|
|
.el-input__wrapper {
|
|
|
|
|
box-shadow: none;
|
|
|
|
|
background-color: transparent;
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-03-15 10:01:08 +08:00
|
|
|
|
</style>
|