integrated_traffic_vue/src/views/archives_management/semester/components/review.vue

344 lines
9.2 KiB
Vue
Raw Normal View History

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">
<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>
<table class="print_table">
2024-03-15 10:01:08 +08:00
<tr>
<th>教材名称</th>
<td colspan="3">{{ props.curriculumname }}</td>
<th>出版书号</th>
<td>
<el-input v-model="data.form.BOOK_NUM" />
2024-03-15 10:01:08 +08:00
</td>
</tr>
<tr>
<th>编写单位</th>
<td colspan="3">
<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"
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%">
<el-input v-model="data.form.enterpriseName" />
2024-03-15 10:01:08 +08:00
</td>
<th width="12%">主持人</th>
<td width="25%">
<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"
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">
<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>
<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>
单位盖章
<img :src="data.form.OFFICIAL_SEAL_PATH" />
2024-03-15 10:01:08 +08:00
</div>
<div>档案编号{{ data.form.CODE }}</div>
2024-03-15 10:01:08 +08:00
<div>
归档日期{{ 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>
<el-button type="primary" @click="fnSubmit"></el-button>
2024-03-15 10:01:08 +08:00
</template>
</el-dialog>
<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-15 10:01:08 +08:00
</template>
<script setup>
import dayjs from "dayjs";
import { nextTick, reactive, watchEffect } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
2024-03-15 10:01:08 +08:00
import {
getClassGoEdit,
getReviewGoEdit,
getReviewRecordList,
2024-03-15 10:01:08 +08:00
downloadHs,
getReviewAdd,
getReviewEdit,
setReviewRecordDelete,
setReviewRecordView,
2024-03-15 10:01:08 +08:00
} from "@/request/training_archive_management.js";
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({
form: {
ARCHIVES_REVIEW_ID: "",
CODE: "",
END_TIME: "",
BOOK_NUM: "",
CORP_NAME: "",
CREATTIME: "",
2024-03-27 15:53:32 +08:00
CURRICULUM_ID: "",
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,
});
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) {
data.reviewInfo = reviewInfo.pd;
2024-03-15 10:01:08 +08:00
if (reviewInfo.pd.ARCHIVES_REVIEW_ID) {
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
}
};
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();
});
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);
};
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;
}
}
}
:deep(.el-input) {
.el-input__wrapper {
box-shadow: none;
background-color: transparent;
}
}
2024-03-15 10:01:08 +08:00
</style>