🎨 教育培训-统一调整已完成功能的样式(含打印)

pull/1/head
duhang 2024-01-10 19:17:03 +08:00
parent f74c51cbb7
commit 405c6c296d
17 changed files with 1471 additions and 968 deletions

View File

@ -311,7 +311,7 @@ export default [
{
path: "/platform_resource_library/curriculum/view",
meta: {
title: "课程详情查看",
title: "查看详情",
activeMenu: "/platform_resource_library/curriculum/list",
},
component: "platform_resource_library/curriculum/view",
@ -330,7 +330,7 @@ export default [
{
path: "/platform_resource_library/paper/view",
meta: {
title: "试卷详情查看",
title: "查看试卷",
activeMenu: "/platform_resource_library/paper/list",
},
component: "platform_resource_library/paper/view",

View File

@ -1,5 +1,5 @@
<template>
<div>
<layout-card>
<layout-table :data="catalogueList" :show-pagination="false">
<el-table-column show-overflow-tooltip prop="NAME" label="目录" />
<el-table-column label="操作">
@ -19,7 +19,7 @@
:type="data.current.TYPE"
:study-task-id="studyTaskId"
/>
</div>
</layout-card>
</template>
<script setup>
import LayoutTable from "@/components/table/index.vue";

View File

@ -14,73 +14,124 @@
<el-button type="primary" v-print="'#printContent'"></el-button>
</el-space>
<div id="printContent">
<div style="text-align: center">
<el-text size="large">
{{ year }}年度培训资金提取和使用情况管理台账
</el-text>
</div>
<div>
<el-text size="small">单位名称:{{ CORP_NAME }}</el-text>
</div>
<layout-table
:data="data.capitalList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="40">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
<table class="print_use mb-10" style="width: 100%">
<thead>
<tr>
<td colspan="12" style="border: none">
<div class="tc">
<h3>{{ year }}年度培训资金提取和使用情况管理台账</h3>
</div>
<p class="tl">单位名称:{{ CORP_NAME }}</p>
</td>
</tr>
<tr>
<td class="title" rowspan="2">序号</td>
<td class="title" rowspan="2">日期</td>
<td class="title" colspan="9">费用项目</td>
<td class="title" rowspan="2">余额</td>
</tr>
<tr>
<td class="title">提取金额</td>
<td class="title">培训教材教具费</td>
<td class="title">师资费</td>
<td class="title">试卷印制费</td>
<td class="title">外出培训费</td>
<td class="title">教学设备课桌椅等购置维护费</td>
<td class="title">培训活动费</td>
<td class="title">委托活动费</td>
<td class="title">其他与培训有关的直接支出</td>
</tr>
</thead>
<tbody>
<template v-if="data.dataList && data.dataList.length > 0">
<tr v-for="(item, index) in data.dataList" :key="index">
<td class="tc">{{ index + 1 }}</td>
<td class="tc">{{ item.DATE }}</td>
<td class="tc">{{ item.AMOUNT }}</td>
<td class="tc">{{ item.MATERIAL_COST }}</td>
<td class="tc">{{ item.TEACHER_COST }}</td>
<td class="tc">{{ item.PAPER_COST }}</td>
<td class="tc">{{ item.OUTSIDE_COST }}</td>
<td class="tc">{{ item.EQUIPMENT_COST }}</td>
<td class="tc">{{ item.TRAIN_COST }}</td>
<td class="tc">{{ item.ENTRUST_COST }}</td>
<td class="tc">{{ item.OTHER_COST }}</td>
<td class="tc">{{ item.BALANCE }}</td>
</tr>
</template>
</el-table-column>
<el-table-column prop="DATE" label="日期" width="85" />
<el-table-column label="费用项目">
<el-table-column prop="AMOUNT" label="提取金额" width="80" />
<el-table-column
prop="MATERIAL_COST"
label="培训教材教具费"
width="80"
/>
<el-table-column prop="TEACHER_COST" label="师资费" width="80" />
<el-table-column prop="PAPER_COST" label="试卷印制费" width="80" />
<el-table-column
prop="OUTSIDE_COST"
label="外出培训费"
width="80"
/>
<el-table-column
prop="EQUIPMENT_COST"
label="教学设备、课桌椅等购置维护费"
width="80"
/>
<el-table-column prop="TRAIN_COST" label="培训活动费" width="80" />
<el-table-column
prop="ENTRUST_COST"
label="委托活动费"
width="80"
/>
<el-table-column
prop="OTHER_COST"
label="其他与培训有关的直接支出"
width="80"
/>
</el-table-column>
<el-table-column prop="BALANCE" label="余额" width="75" />
</layout-table>
</tbody>
</table>
<div class="print_no_use">
<div class="tc">
<h3>{{ year }}年度培训资金提取和使用情况管理台账</h3>
</div>
<p class="mtb-10">单位名称:{{ CORP_NAME }}</p>
<layout-table
:data="data.dataList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="40">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
<el-table-column prop="DATE" label="日期" width="85" />
<el-table-column label="费用项目">
<el-table-column prop="AMOUNT" label="提取金额" width="80" />
<el-table-column
prop="MATERIAL_COST"
label="培训教材教具费"
width="80"
/>
<el-table-column prop="TEACHER_COST" label="师资费" width="80" />
<el-table-column
prop="PAPER_COST"
label="试卷印制费"
width="80"
/>
<el-table-column
prop="OUTSIDE_COST"
label="外出培训费"
width="80"
/>
<el-table-column
prop="EQUIPMENT_COST"
label="教学设备、课桌椅等购置维护费"
width="80"
/>
<el-table-column
prop="TRAIN_COST"
label="培训活动费"
width="80"
/>
<el-table-column
prop="ENTRUST_COST"
label="委托活动费"
width="80"
/>
<el-table-column
prop="OTHER_COST"
label="其他与培训有关的直接支出"
width="80"
/>
</el-table-column>
<el-table-column prop="BALANCE" label="余额" width="75" />
</layout-table>
</div>
<el-row>
<el-col :span="6">制表人:</el-col>
<el-col :span="6">编制日期:</el-col>
<el-col :span="6">审核人:</el-col>
<el-col :span="6">审核日期:</el-col>
</el-row>
<br />
<div>
<el-text size="small">
填表说明:1.将实际发生的费用金额记录在费用项目栏内2.培训提取比例按职工工资1.5%可按季或月提取
</el-text>
</div>
<p class="mt-10">
填表说明:1.将实际发生的费用金额记录在费用项目栏内2.培训提取比例按职工工资1.5%可按季或月提取
</p>
</div>
<div v-html="PRINT_STYLE" />
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
@ -108,6 +159,7 @@ import LayoutTable from "@/components/table/index.vue";
import { serialNumber } from "@/assets/js/utils.js";
import CapitalForm from "./capital_form.vue";
import { ElMessageBox } from "element-plus";
import { PRINT_STYLE } from "@/assets/js/constant.js";
const userStore = useUserStore();
const CORP_NAME = userStore.getUserInfo.CORP_NAME;
@ -136,7 +188,7 @@ const props = defineProps({
const { title, year, type } = useVModels(props);
const data = reactive({
capitalList: [],
dataList: [],
current: undefined,
formVisible: false,
});
@ -152,7 +204,7 @@ const fnCurrentChange = (row) => {
};
const fnAddArchivesCapital = () => {
data.capitalList.push({});
data.dataList.push({});
};
const fnDeleteArchivesCapital = async () => {
@ -171,7 +223,7 @@ const fnDeleteArchivesCapital = async () => {
const fnGetArchivesCapitalList = async () => {
const respData = await getArchivesCapitalList({ YEAR: year.value });
if (respData && respData.varList) {
data.capitalList = respData.varList;
data.dataList = respData.varList;
}
};
await fnGetArchivesCapitalList();

View File

@ -12,54 +12,95 @@
<el-button type="primary" v-print="'#printContent'"></el-button>
</el-space>
<div id="printContent">
<div style="text-align: center">
<el-text size="large">{{ year }}年度安全培训教育管理台账</el-text>
</div>
<div>
<el-text size="small">单位名称:{{ CORP_NAME }}</el-text>
</div>
<layout-table
:data="data.dataList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="45">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
<table class="print_use mb-10" style="width: 100%">
<thead>
<tr>
<td colspan="11" style="border: none">
<div class="tc">
<h3>{{ year }}年度安全培训教育管理台账</h3>
</div>
<p class="tl">单位名称:{{ CORP_NAME }}</p>
</td>
</tr>
<tr>
<td class="title">序号</td>
<td class="title">培训时间</td>
<td class="title">培训对象</td>
<td class="title">培训类型</td>
<td class="title">培训内容</td>
<td class="title">参加人数</td>
<td class="title">培训学时</td>
<td class="title">培训地点</td>
<td class="title">培训教师</td>
<td class="title">考核方式</td>
<td class="title">汇总考核情况</td>
</tr>
</thead>
<tbody>
<template v-if="data.dataList && data.dataList.length > 0">
<tr v-for="(item, index) in data.dataList" :key="index">
<td class="tc">{{ index + 1 }}</td>
<td class="tc">{{ item.TRAINING_DATE }}</td>
<td class="tc">{{ item.TRAINING_OBJECT }}</td>
<td class="tc">{{ item.TRAINING_TYPE }}</td>
<td class="tc">{{ item.TRAINING_CONTENT }}</td>
<td class="tc">{{ item.PERSON_NUMBER }}</td>
<td class="tc">{{ item.CLASS_HOURS }}</td>
<td class="tc">{{ item.TRAINING_PLACE }}</td>
<td class="tc">{{ item.TRAINING_TEACHER }}</td>
<td class="tc">{{ item.ASSESSMENT_METHOD }}</td>
<td class="tc">{{ item.ASSESSMENT }}</td>
</tr>
</template>
</el-table-column>
<el-table-column prop="TRAINING_DATE" label="培训时间" />
<el-table-column prop="TRAINING_OBJECT" label="培训对象" />
<el-table-column prop="TRAINING_TYPE" label="培训类型" />
<el-table-column
show-overflow-tooltip
prop="TRAINING_CONTENT"
label="培训内容"
/>
<el-table-column prop="PERSON_NUMBER" label="参加人数" />
<el-table-column prop="CLASS_HOURS" label="培训学时" />
<el-table-column
show-overflow-tooltip
prop="TRAINING_PLACE"
label="培训地点"
/>
<el-table-column prop="TRAINING_TEACHER" label="培训教师" />
<el-table-column prop="ASSESSMENT_METHOD" label="考核方式" />
<el-table-column
show-overflow-tooltip
prop="ASSESSMENT"
label="汇总考核情况"
/>
</layout-table>
<el-row>
<el-col :span="6">填表人:</el-col>
<el-col :span="6"></el-col>
<el-col :span="6"></el-col>
<el-col :span="6">填表日期:</el-col>
</el-row>
</tbody>
</table>
<div class="print_no_use">
<div class="tc">
<h3>{{ year }}年度安全培训教育管理台账</h3>
</div>
<p class="mtb-10">单位名称:{{ CORP_NAME }}</p>
<layout-table
:data="data.dataList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="45">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
<el-table-column prop="TRAINING_DATE" label="培训时间" />
<el-table-column prop="TRAINING_OBJECT" label="培训对象" />
<el-table-column prop="TRAINING_TYPE" label="培训类型" />
<el-table-column
show-overflow-tooltip
prop="TRAINING_CONTENT"
label="培训内容"
/>
<el-table-column prop="PERSON_NUMBER" label="参加人数" />
<el-table-column prop="CLASS_HOURS" label="培训学时" />
<el-table-column
show-overflow-tooltip
prop="TRAINING_PLACE"
label="培训地点"
/>
<el-table-column prop="TRAINING_TEACHER" label="培训教师" />
<el-table-column prop="ASSESSMENT_METHOD" label="考核方式" />
<el-table-column
show-overflow-tooltip
prop="ASSESSMENT"
label="汇总考核情况"
/>
</layout-table>
</div>
<div class="flex">
<span>填表人:</span>
<span>填表日期:</span>
</div>
</div>
<div v-html="PRINT_STYLE" />
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
@ -87,6 +128,7 @@ import LayoutTable from "@/components/table/index.vue";
import { serialNumber } from "@/assets/js/utils.js";
import EdumanagerForm from "./edumanager_form.vue";
import { ElMessageBox } from "element-plus";
import { PRINT_STYLE } from "@/assets/js/constant.js";
const userStore = useUserStore();
const CORP_NAME = userStore.getUserInfo.CORP_NAME;

View File

@ -12,55 +12,98 @@
<el-button type="primary" v-print="'#printContent'"></el-button>
</el-space>
<div id="printContent">
<div style="text-align: center">
<el-text size="large">{{ year }}年度安全培训教育计划</el-text>
</div>
<div>
<el-text size="small">单位名称:{{ CORP_NAME }}</el-text>
</div>
<layout-table
:data="data.dataList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="45">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
<table class="print_use mb-10" style="width: 100%">
<thead>
<tr>
<td colspan="12" style="border: none">
<div class="tc">
<h3>{{ year }}年度安全培训教育计划</h3>
</div>
<p class="tl">单位名称:{{ CORP_NAME }}</p>
</td>
</tr>
<tr>
<td class="title">序号</td>
<td class="title">开始时间</td>
<td class="title">结束时间</td>
<td class="title">培训对象</td>
<td class="title">培训教材</td>
<td class="title">培训方式</td>
<td class="title">考核方式</td>
<td class="title">学时</td>
<td class="title">地点</td>
<td class="title">培训教师</td>
<td class="title">经费保障</td>
<td class="title">质量评估</td>
</tr>
</thead>
<tbody>
<template v-if="data.dataList && data.dataList.length > 0">
<tr v-for="(item, index) in data.dataList" :key="index">
<td class="tc">{{ index + 1 }}</td>
<td class="tc">{{ item.START_DATE }}</td>
<td class="tc">{{ item.END_DATE }}</td>
<td class="tc">{{ item.TRAINING_OBJECT }}</td>
<td class="tc">{{ item.TRAINING_MATERIALS }}</td>
<td class="tc">{{ item.TRAINING_METHODS }}</td>
<td class="tc">{{ item.ASSESSMENT_METHOD }}</td>
<td class="tc">{{ item.CLASS_HOURS }}</td>
<td class="tc">{{ item.PLACE }}</td>
<td class="tc">{{ item.TRAINING_TEACHERS }}</td>
<td class="tc">{{ item.FUND_GUARANTEE }}</td>
<td class="tc">{{ item.QUALITY_ASSESSMENT }}</td>
</tr>
</template>
</el-table-column>
<el-table-column prop="START_DATE" label="开始时间" width="85" />
<el-table-column prop="END_DATE" label="结束时间" width="85" />
<el-table-column prop="TRAINING_OBJECT" label="培训对象" />
<el-table-column
show-overflow-tooltip
prop="TRAINING_MATERIALS"
label="培训教材"
/>
<el-table-column prop="TRAINING_METHODS" label="培训方式" />
<el-table-column prop="ASSESSMENT_METHOD" label="考核方式" />
<el-table-column prop="CLASS_HOURS" label="学时" width="70" />
<el-table-column show-overflow-tooltip prop="PLACE" label="地点" />
<el-table-column prop="TRAINING_TEACHERS" label="培训教师" />
<el-table-column
show-overflow-tooltip
prop="FUND_GUARANTEE"
label="经费保障"
/>
<el-table-column
show-overflow-tooltip
prop="QUALITY_ASSESSMENT"
label="质量评估"
/>
</layout-table>
<el-row>
<el-col :span="6">档案管理人员:</el-col>
<el-col :span="6"></el-col>
<el-col :span="6"></el-col>
<el-col :span="6">更新日期:</el-col>
</el-row>
</tbody>
</table>
<div class="print_no_use">
<div class="tc">
<h3>{{ year }}年度安全培训教育计划</h3>
</div>
<p class="mtb-10">单位名称:{{ CORP_NAME }}</p>
<layout-table
:data="data.dataList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="45">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
<el-table-column prop="START_DATE" label="开始时间" width="85" />
<el-table-column prop="END_DATE" label="结束时间" width="85" />
<el-table-column prop="TRAINING_OBJECT" label="培训对象" />
<el-table-column
show-overflow-tooltip
prop="TRAINING_MATERIALS"
label="培训教材"
/>
<el-table-column prop="TRAINING_METHODS" label="培训方式" />
<el-table-column prop="ASSESSMENT_METHOD" label="考核方式" />
<el-table-column prop="CLASS_HOURS" label="学时" width="70" />
<el-table-column show-overflow-tooltip prop="PLACE" label="地点" />
<el-table-column prop="TRAINING_TEACHERS" label="培训教师" />
<el-table-column
show-overflow-tooltip
prop="FUND_GUARANTEE"
label="经费保障"
/>
<el-table-column
show-overflow-tooltip
prop="QUALITY_ASSESSMENT"
label="质量评估"
/>
</layout-table>
</div>
<div class="flex">
<span>档案管理人员:</span>
<span>更新日期:</span>
</div>
</div>
<div v-html="PRINT_STYLE" />
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
@ -88,6 +131,7 @@ import LayoutTable from "@/components/table/index.vue";
import { serialNumber } from "@/assets/js/utils.js";
import EduplanForm from "./eduplan_form.vue";
import { ElMessageBox } from "element-plus";
import { PRINT_STYLE } from "@/assets/js/constant.js";
const userStore = useUserStore();
const CORP_NAME = userStore.getUserInfo.CORP_NAME;
@ -164,4 +208,10 @@ const fnAddOrUpdate = (row) => {
};
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.flex {
display: flex;
justify-content: space-between;
width: 80%;
}
</style>

View File

@ -12,42 +12,75 @@
<el-button type="primary" v-print="'#printContent'"></el-button>
</el-space>
<div id="printContent">
<div style="text-align: center">
<el-text size="large">{{ year }}三岗人员管理台账</el-text>
</div>
<div>
<el-text size="small">单位名称:{{ CORP_NAME }}</el-text>
</div>
<layout-table
:data="data.dataList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="45">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
<table class="print_use mb-10" style="width: 100%">
<thead>
<tr>
<td colspan="7" style="border: none">
<div class="tc">
<h3>{{ year }}三岗人员管理台账</h3>
</div>
<p class="tl">单位名称:{{ CORP_NAME }}</p>
</td>
</tr>
<tr>
<td class="title">序号</td>
<td class="title">姓名</td>
<td class="title">岗位/操作项目</td>
<td class="title">电话</td>
<td class="title">证书号</td>
<td class="title">证书有效期限</td>
<td class="title">复训日期</td>
</tr>
</thead>
<tbody>
<template v-if="data.dataList && data.dataList.length > 0">
<tr v-for="(item, index) in data.dataList" :key="index">
<td class="tc">{{ index + 1 }}</td>
<td class="tc">{{ item.NAME }}</td>
<td class="tc">{{ item.POST }}</td>
<td class="tc">{{ item.PHONE }}</td>
<td class="tc">{{ item.CARD_ID }}</td>
<td class="tc">{{ item.EFFECTIVE_DATE }}</td>
<td class="tc">{{ item.RETRAINING }}</td>
</tr>
</template>
</el-table-column>
<el-table-column prop="NAME" label="姓名" />
<el-table-column prop="POST" label="岗位/操作项目" />
<el-table-column prop="PHONE" label="电话" />
<el-table-column
show-overflow-tooltip
prop="CARD_ID"
label="证书号"
/>
<el-table-column prop="EFFECTIVE_DATE" label="证书有效期限" />
<el-table-column prop="RETRAINING" label="复训日期" />
</layout-table>
<el-row>
<el-col :span="6">档案管理人员:</el-col>
<el-col :span="6"></el-col>
<el-col :span="6"></el-col>
<el-col :span="6">更新日期:</el-col>
</el-row>
</tbody>
</table>
<div class="print_no_use">
<div class="tc mt-10">
<h3>{{ year }}三岗人员管理台账</h3>
</div>
<p class="mtb-10">单位名称:{{ CORP_NAME }}</p>
<layout-table
:data="data.dataList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="45">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
<el-table-column prop="NAME" label="姓名" />
<el-table-column prop="POST" label="岗位/操作项目" />
<el-table-column prop="PHONE" label="电话" />
<el-table-column
show-overflow-tooltip
prop="CARD_ID"
label="证书号"
/>
<el-table-column prop="EFFECTIVE_DATE" label="证书有效期限" />
<el-table-column prop="RETRAINING" label="复训日期" />
</layout-table>
</div>
<div class="flex">
<span>档案管理人员:</span>
<span>更新日期:</span>
</div>
</div>
<div v-html="PRINT_STYLE" />
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
@ -75,6 +108,7 @@ import LayoutTable from "@/components/table/index.vue";
import { serialNumber } from "@/assets/js/utils.js";
import PostmanForm from "./postman_form.vue";
import { ElMessageBox } from "element-plus";
import { PRINT_STYLE } from "@/assets/js/constant.js";
const userStore = useUserStore();
const CORP_NAME = userStore.getUserInfo.CORP_NAME;
@ -151,4 +185,10 @@ const fnAddOrUpdate = (row) => {
};
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.flex {
display: flex;
justify-content: space-between;
width: 80%;
}
</style>

View File

@ -12,49 +12,90 @@
<el-button type="primary" v-print="'#printContent'"></el-button>
</el-space>
<div id="printContent">
<div style="text-align: center">
<el-text size="large">{{ year }}年度本单位师资管理台账</el-text>
</div>
<div>
<el-text size="small">单位名称:{{ CORP_NAME }}</el-text>
</div>
<layout-table
:data="data.dataList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="45">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
<table class="print_use mb-10" style="width: 100%">
<thead>
<tr>
<td colspan="10" style="border: none">
<div class="tc">
<h3>{{ year }}年度本单位师资管理台账</h3>
</div>
<p class="tl">单位名称:{{ CORP_NAME }}</p>
</td>
</tr>
<tr>
<td class="title">序号</td>
<td class="title">姓名</td>
<td class="title">电话</td>
<td class="title">从事本专业工作年限</td>
<td class="title">/兼职</td>
<td class="title">证书编号</td>
<td class="title">考核部门</td>
<td class="title">考核日期</td>
<td class="title">考核结果</td>
<td class="title">备注</td>
</tr>
</thead>
<tbody>
<template v-if="data.dataList && data.dataList.length > 0">
<tr v-for="(item, index) in data.dataList" :key="index">
<td class="tc">{{ index + 1 }}</td>
<td class="tc">{{ item.NAME }}</td>
<td class="tc">{{ item.PHONE }}</td>
<td class="tc">
{{ item.WORK_YEAR ? item.WORK_YEAR + "年" : "" }}
</td>
<td class="tc">{{ item.OCCUPATION }}</td>
<td class="tc">{{ item.CARD_ID }}</td>
<td class="tc">{{ item.ASSESSMENT_DEPT }}</td>
<td class="tc">{{ item.ASSESSMENT_DATE }}</td>
<td class="tc">{{ item.ASSESSMENT_RESULT }}</td>
<td class="tc">{{ item.DESCR }}</td>
</tr>
</template>
</el-table-column>
<el-table-column prop="NAME" label="姓名" />
<el-table-column prop="PHONE" label="电话" />
<el-table-column prop="WORK_YEAR" label="从事本专业工作年限">
<template v-slot="{ row }">
{{ row.WORK_YEAR ? row.WORK_YEAR + "年" : "" }}
</template>
</el-table-column>
<el-table-column prop="OCCUPATION" label="专/兼职" />
<el-table-column
show-overflow-tooltip
prop="CARD_ID"
label="证书编号"
/>
<el-table-column prop="ASSESSMENT_DEPT" label="考核部门" />
<el-table-column prop="ASSESSMENT_DATE" label="考核日期" />
<el-table-column prop="ASSESSMENT_RESULT" label="考核结果" />
<el-table-column show-overflow-tooltip prop="DESCR" label="备注" />
</layout-table>
<el-row>
<el-col :span="6">档案管理人员:</el-col>
<el-col :span="6"></el-col>
<el-col :span="6"></el-col>
<el-col :span="6">更新日期:</el-col>
</el-row>
</tbody>
</table>
<div class="print_no_use">
<div class="tc">
<h3>{{ year }}年度本单位师资管理台账</h3>
</div>
<p class="mtb-10">单位名称:{{ CORP_NAME }}</p>
<layout-table
:data="data.dataList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="45">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
<el-table-column prop="NAME" label="姓名" />
<el-table-column prop="PHONE" label="电话" />
<el-table-column prop="WORK_YEAR" label="从事本专业工作年限">
<template v-slot="{ row }">
{{ row.WORK_YEAR ? row.WORK_YEAR + "年" : "" }}
</template>
</el-table-column>
<el-table-column prop="OCCUPATION" label="专/兼职" />
<el-table-column
show-overflow-tooltip
prop="CARD_ID"
label="证书编号"
/>
<el-table-column prop="ASSESSMENT_DEPT" label="考核部门" />
<el-table-column prop="ASSESSMENT_DATE" label="考核日期" />
<el-table-column prop="ASSESSMENT_RESULT" label="考核结果" />
<el-table-column show-overflow-tooltip prop="DESCR" label="备注" />
</layout-table>
</div>
<div class="flex">
<span>档案管理人员:</span>
<span>更新日期:</span>
</div>
</div>
<div v-html="PRINT_STYLE" />
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
@ -82,6 +123,7 @@ import LayoutTable from "@/components/table/index.vue";
import { serialNumber } from "@/assets/js/utils.js";
import TeacherForm from "./teacher_form.vue";
import { ElMessageBox } from "element-plus";
import { PRINT_STYLE } from "@/assets/js/constant.js";
const userStore = useUserStore();
const CORP_NAME = userStore.getUserInfo.CORP_NAME;
@ -158,4 +200,10 @@ const fnAddOrUpdate = (row) => {
};
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.flex {
display: flex;
justify-content: space-between;
width: 80%;
}
</style>

View File

@ -1,26 +1,28 @@
<template>
<div>
<el-form :model="data.form" label-width="80px">
<el-row>
<el-col :span="4">
<el-form-item label="企业名称:" prop="KEYWORDS">
<span style="color: white">{{ CORP_NAME }}</span>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="年份:" prop="YEAR">
<el-date-picker
v-model="data.form.year"
value-format="YYYY"
format="YYYY"
type="year"
clearable
placeholder="请选择年份"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-card>
<el-form :model="data.form" label-width="80px">
<el-row>
<el-col :span="4">
<el-form-item label="企业名称:" prop="KEYWORDS">
<span style="color: white">{{ CORP_NAME }}</span>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="年份:" prop="YEAR">
<el-date-picker
v-model="data.form.year"
value-format="YYYY"
format="YYYY"
type="year"
clearable
placeholder="请选择年份"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<catalogue source="corp" :year="data.form.year" />
</div>
</template>

View File

@ -10,27 +10,26 @@
<el-button type="primary" v-print="'#printContent'"></el-button>
</el-space>
<div id="printContent">
<div style="text-align: center">
<el-text size="large">
{{ CORP_NAME }} {{ data.taskInfo.post_type_name }}
</el-text>
<div class="tc">
<h3>{{ CORP_NAME }} {{ data.taskInfo.post_type_name }}</h3>
</div>
<template v-for="(item, index) in data.coursewareList" :key="index">
<el-descriptions
:title="`${index + 1}.${item.COURSEWARENAME}`"
:column="1"
border
>
<el-descriptions-item label="讲师:">
{{ item.SPEAKER }}
</el-descriptions-item>
<el-descriptions-item label="课件类型:">
{{ item.coutType }}
</el-descriptions-item>
<el-descriptions-item label="课件描述:">
{{ item.COURSEWAREINTRODUCE }}
</el-descriptions-item>
</el-descriptions>
<div>
<el-divider content-position="left">
{{ index + 1 }}.{{ item.COURSEWARENAME }}
</el-divider>
<el-descriptions :column="1" border>
<el-descriptions-item label="讲师:">
{{ item.SPEAKER }}
</el-descriptions-item>
<el-descriptions-item label="课件类型:">
{{ item.coutType }}
</el-descriptions-item>
<el-descriptions-item label="课件描述:">
{{ item.COURSEWAREINTRODUCE }}
</el-descriptions-item>
</el-descriptions>
</div>
</template>
</div>
<template #footer>
@ -111,4 +110,8 @@ const fnGetAllCoursewareByHandout = async () => {
await fnGetAllCoursewareByHandout();
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.title {
width: 100px;
}
</style>

View File

@ -11,74 +11,104 @@
</el-space>
<br /><br />
<div id="printContent">
<p>单位名称:{{ CORP_NAME }}</p>
<p class="mt-10">任务名称:{{ data.taskInfo.STUDY_NAME }}</p>
<div class="tc">
<h3 class="mt-10">{{ data.paperInfo.EXAMNAME }}</h3>
<p class="mt-10">(满分:{{ data.paperInfo.EXAMSCORE }})</p>
</div>
<div>
<el-text>单位名称:{{ CORP_NAME }}</el-text>
</div>
<br />
<div>
<el-text>任务名称:{{ data.taskInfo.STUDY_NAME }}</el-text>
</div>
<div style="text-align: center">
<el-text size="large">{{ data.paperInfo.EXAMNAME }}</el-text>
</div>
<div style="text-align: center">
<el-text size="small">
(满分:{{ data.paperInfo.EXAMSCORE }})
</el-text>
</div>
<div v-if="data.paperInfo.selectList.length > 0" style="color: white">
<el-divider content-position="left">单选题</el-divider>
<template
v-for="(item, index) in data.paperInfo.selectList"
:key="item.QUESTION_ID"
>
{{ index + 1 }}.{{ item.QUESTIONDRY }}
<el-row>
<el-col :span="2"></el-col>
<el-col :span="22">
<p>A.{{ item.OPTIONA }}</p>
<p>B.{{ item.OPTIONB }}</p>
<p>C.{{ item.OPTIONC }}</p>
<p>D.{{ item.OPTIOND }}</p>
</el-col>
</el-row>
<template v-if="data.paperInfo.selectList.length > 0">
<table style="width: 100%">
<thead>
<tr>
<td style="border: none">
<el-divider content-position="left">单选题</el-divider>
</td>
</tr>
</thead>
<tbody>
<tr
v-for="(item, index) in data.paperInfo.selectList"
:key="item.QUESTION_ID"
>
<td style="border: none">
<p class="mt-10">{{ index + 1 }}.{{ item.QUESTIONDRY }}</p>
<el-row class="mt-10">
<el-col :span="2"></el-col>
<el-col :span="22">
<p class="mt-10">A.{{ item.OPTIONA }}</p>
<p class="mt-10">B.{{ item.OPTIONB }}</p>
<p class="mt-10">C.{{ item.OPTIONC }}</p>
<p class="mt-10">D.{{ item.OPTIOND }}</p>
</el-col>
</el-row>
</td>
</tr>
</tbody>
</table>
</template>
</div>
<div v-if="data.paperInfo.multiList.length > 0" style="color: white">
<el-divider content-position="left">多选题</el-divider>
<template
v-for="(item, index) in data.paperInfo.multiList"
:key="item.QUESTION_ID"
>
{{ index + 1 }}.{{ item.QUESTIONDRY }}
<el-row>
<el-col :span="2"></el-col>
<el-col :span="22">
<p>A.{{ item.OPTIONA }}</p>
<p>B.{{ item.OPTIONB }}</p>
<p>C.{{ item.OPTIONC }}</p>
<p>D.{{ item.OPTIOND }}</p>
</el-col>
</el-row>
<template v-if="data.paperInfo.multiList.length > 0">
<table style="width: 100%">
<thead>
<tr>
<td style="border: none">
<el-divider content-position="left">多选题</el-divider>
</td>
</tr>
</thead>
<tbody>
<tr
v-for="(item, index) in data.paperInfo.multiList"
:key="item.QUESTION_ID"
>
<td style="border: none">
<p class="mt-10">{{ index + 1 }}.{{ item.QUESTIONDRY }}</p>
<el-row class="mt-10">
<el-col :span="2"></el-col>
<el-col :span="22">
<p class="mt-10">A.{{ item.OPTIONA }}</p>
<p class="mt-10">B.{{ item.OPTIONB }}</p>
<p class="mt-10">C.{{ item.OPTIONC }}</p>
<p class="mt-10">D.{{ item.OPTIOND }}</p>
</el-col>
</el-row>
</td>
</tr>
</tbody>
</table>
</template>
</div>
<div v-if="data.paperInfo.judgeList.length > 0" style="color: white">
<el-divider content-position="left">判断题</el-divider>
<template
v-for="(item, index) in data.paperInfo.judgeList"
:key="item.QUESTION_ID"
>
{{ index + 1 }}.{{ item.QUESTIONDRY }}
<el-row>
<el-col :span="2"></el-col>
<el-col :span="22">
<p>A.{{ item.OPTIONA }}</p>
<p>B.{{ item.OPTIONB }}</p>
</el-col>
</el-row>
<template v-if="data.paperInfo.judgeList.length > 0">
<table style="width: 100%">
<thead>
<tr>
<td style="border: none">
<el-divider content-position="left">判断题</el-divider>
</td>
</tr>
</thead>
<tbody>
<tr
v-for="(item, index) in data.paperInfo.judgeList"
:key="item.QUESTION_ID"
>
<td style="border: none">
<p class="mt-10">{{ index + 1 }}.{{ item.QUESTIONDRY }}</p>
<el-row class="mt-10">
<el-col :span="2"></el-col>
<el-col :span="22">
<p class="mt-10">A.{{ item.OPTIONA }}</p>
<p class="mt-10">B.{{ item.OPTIONB }}</p>
</el-col>
</el-row>
</td>
</tr>
</tbody>
</table>
</template>
</div>
</div>
<div v-html="PRINT_STYLE" />
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
@ -91,6 +121,7 @@ import { getStudyTaskInfo, getPaperByTaskId } from "@/request/archives.js";
import { reactive } from "vue";
import { useVModels } from "@vueuse/core";
import { useUserStore } from "@/pinia/user.js";
import { PRINT_STYLE } from "@/assets/js/constant.js";
const props = defineProps({
title: {

View File

@ -10,51 +10,55 @@
<el-button type="primary" v-print="'#printContent'"></el-button>
</el-space>
<div id="printContent">
<div style="text-align: center">
<el-text size="large">
{{ data.taskInfo.STUDY_NAME }}培训综合考评报告
</el-text>
<div class="tc mt-10">
<h3>{{ data.taskInfo.STUDY_NAME }}培训综合考评报告</h3>
</div>
<br />
<el-descriptions :column="2" border>
<el-descriptions-item label="任务名称">
{{ data.taskInfo.STUDY_NAME }}
</el-descriptions-item>
<el-descriptions-item label="培训组织部门"> </el-descriptions-item>
<el-descriptions-item label="培训组织部门"></el-descriptions-item>
<el-descriptions-item label="评估日期">
{{ data.taskInfo.PEIXUE_END_TIME }}
</el-descriptions-item>
<el-descriptions-item label="考核方式"> 考核 </el-descriptions-item>
<el-descriptions-item label="考核方式">考核</el-descriptions-item>
<el-descriptions-item label="本次工作培训描述" :span="2">
本次培训的主要内容是:{{ curriculums }} 共应参加人数为{{
data.studentList.length
}}, 实际参加培训人数为{{ join_student_list.length }}, 参加率为{{
(
(join_student_list.length / data.studentList.length) *
100
).toFixed(2)
}}%
<div class="large-content">
本次培训的主要内容是:{{ curriculums }} 共应参加人数为{{
data.studentList.length
}}, 实际参加培训人数为{{ join_student_list.length }},
参加率为{{
(
(join_student_list.length / data.studentList.length) *
100
).toFixed(2)
}}%
</div>
</el-descriptions-item>
<el-descriptions-item label="本次培训考评结论" :span="2">
本次通过笔试的方式进行了培训效果考核,考核人数为{{
data.studentList.length
}},考核合格人数为{{ pass_student_list.length }}, 合格率为{{
(
(pass_student_list.length / data.studentList.length) *
100
).toFixed(2)
}}%
<div class="large-content">
本次通过笔试的方式进行了培训效果考核,考核人数为{{
data.studentList.length
}},考核合格人数为{{ pass_student_list.length }}, 合格率为{{
(
(pass_student_list.length / data.studentList.length) *
100
).toFixed(2)
}}%
</div>
</el-descriptions-item>
<el-descriptions-item label="改进意见建议" :span="2">
<div>1.本次培训的讲师</div>
<div>讲师的语言表达能力应该更加的生动清晰易懂</div>
<div>非常满意</div>
<div>2.本次培训的课程</div>
<div>课程内容应该更加专业可以对我的工作帮助更大</div>
<div>非常满意</div>
<p>1.本次培训的讲师</p>
<p class="mt-10">讲师的语言表达能力应该更加的生动清晰易懂</p>
<p class="mt-10">非常满意</p>
<p class="mt-10">2.本次培训的课程</p>
<p class="mt-10">课程内容应该更加专业可以对我的工作帮助更大</p>
<p class="mt-10">非常满意</p>
</el-descriptions-item>
</el-descriptions>
</div>
<div v-html="PRINT_STYLE" />
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
@ -70,6 +74,7 @@ import {
} from "@/request/archives.js";
import { computed, reactive } from "vue";
import { useVModels } from "@vueuse/core";
import { PRINT_STYLE } from "@/assets/js/constant.js";
const props = defineProps({
title: {
@ -178,4 +183,8 @@ const fnGetStudentByTaskId = async () => {
await fnGetStudentByTaskId();
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.large-content {
height: 127px;
}
</style>

View File

@ -10,14 +10,17 @@
<el-button type="primary" v-print="'#printContent'"></el-button>
</el-space>
<div id="printContent">
<div style="text-align: center">
<el-text size="large">学员统计情况总表</el-text>
<div class="tc mt-10">
<h3>学员统计情况总表</h3>
</div>
<div style="display: flex; justify-content: space-between">
<el-text size="small">平台名称:</el-text>
<el-text size="small">报表日期:{{ fnGetCurrentDay() }}</el-text>
<div
class="mt-10"
style="display: flex; justify-content: space-between"
>
<span>平台名称:</span>
<span>报表日期:{{ fnGetCurrentDay() }}</span>
</div>
<el-descriptions direction="vertical" :column="2" border>
<el-descriptions class="mt-10" direction="vertical" :column="2" border>
<el-descriptions-item label="公司名称">
{{ CORP_NAME }}
</el-descriptions-item>
@ -38,48 +41,125 @@
{{ pass_student_list.length }}
</el-descriptions-item>
</el-descriptions>
<br />
<div style="text-align: center">
<el-text>合格学员名单</el-text>
<table class="print_use" style="width: 100%">
<thead>
<tr>
<td colspan="7" class="tc" style="border: none">合格学员名单</td>
</tr>
<tr>
<td class="title">序号</td>
<td class="title">姓名</td>
<td class="title">身份证</td>
<td class="title">手机号</td>
<td class="title">性别</td>
<td class="title">完成学时</td>
<td class="title">结业考试成绩</td>
</tr>
</thead>
<tbody>
<template v-if="pass_student_list && pass_student_list.length > 0">
<tr
v-for="(item, index) in pass_student_list"
:key="item.USER_ID"
>
<td class="tc">{{ index + 1 }}</td>
<td class="tc">{{ item.USER_NAME }}</td>
<td class="tc">{{ item.USER_ID_CARD }}</td>
<td class="tc">{{ item.PHONE }}</td>
<td class="tc">{{ item.SEX_NAME }}</td>
<td class="tc">{{ item.COMPLETE_CLASSHOUR }}</td>
<td class="tc">
{{
item.STAGEEXAMSCORE > -1 ? item.STAGEEXAMSCORE : "未参加"
}}
</td>
</tr>
</template>
</tbody>
</table>
<table class="print_use" style="width: 100%">
<thead>
<tr>
<td colspan="7" class="tc" style="border: none">
未合格学员名单
</td>
</tr>
<tr>
<td class="title">序号</td>
<td class="title">姓名</td>
<td class="title">身份证</td>
<td class="title">手机号</td>
<td class="title">性别</td>
<td class="title">完成学时</td>
<td class="title">结业考试成绩</td>
</tr>
</thead>
<tbody>
<template
v-if="unpass_student_list && unpass_student_list.length > 0"
>
<tr
v-for="(item, index) in unpass_student_list"
:key="item.USER_ID"
>
<td class="tc">{{ index + 1 }}</td>
<td class="tc">{{ item.USER_NAME }}</td>
<td class="tc">{{ item.USER_ID_CARD }}</td>
<td class="tc">{{ item.PHONE }}</td>
<td class="tc">{{ item.SEX_NAME }}</td>
<td class="tc">{{ item.COMPLETE_CLASSHOUR }}</td>
<td class="tc">
{{
item.STAGEEXAMSCORE > -1 ? item.STAGEEXAMSCORE : "未参加"
}}
</td>
</tr>
</template>
</tbody>
</table>
<div class="print_no_use">
<div class="tc mtb-10">合格学员名单</div>
<layout-table :data="pass_student_list" :show-pagination="false">
<el-table-column label="序号" width="50">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
<el-table-column prop="USER_NAME" label="姓名" />
<el-table-column prop="USER_ID_CARD" label="身份证" />
<el-table-column prop="PHONE" label="手机号" />
<el-table-column prop="SEX_NAME" label="性别" />
<el-table-column prop="COMPLETE_CLASSHOUR" label="完成学时" />
<el-table-column prop="STAGEEXAMSCORE" label="结业考试成绩">
<template v-slot="{ row }">
{{ row.STAGEEXAMSCORE > -1 ? row.STAGEEXAMSCORE : "未参加" }}
</template>
</el-table-column>
</layout-table>
<div class="tc mb-10">未合格学员名单</div>
<layout-table :data="unpass_student_list" :show-pagination="false">
<el-table-column label="序号" width="50">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
<el-table-column prop="USER_NAME" label="姓名" />
<el-table-column prop="USER_ID_CARD" label="身份证" />
<el-table-column prop="PHONE" label="手机号" />
<el-table-column prop="SEX_NAME" label="性别" />
<el-table-column prop="COMPLETE_CLASSHOUR" label="完成学时" />
<el-table-column prop="STAGEEXAMSCORE" label="结业考试成绩">
<template v-slot="{ row }">
{{ row.STAGEEXAMSCORE > -1 ? row.STAGEEXAMSCORE : "未参加" }}
</template>
</el-table-column>
</layout-table>
</div>
<layout-table :data="pass_student_list" :show-pagination="false">
<el-table-column label="序号" width="50">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
<el-table-column prop="USER_NAME" label="姓名" />
<el-table-column prop="USER_ID_CARD" label="身份证" />
<el-table-column prop="PHONE" label="手机号" />
<el-table-column prop="SEX_NAME" label="性别" />
<el-table-column prop="COMPLETE_CLASSHOUR" label="完成学时" />
<el-table-column prop="STAGEEXAMSCORE" label="结业考试成绩">
<template v-slot="{ row }">
{{ row.STAGEEXAMSCORE > -1 ? row.STAGEEXAMSCORE : "未参加" }}
</template>
</el-table-column>
</layout-table>
<div style="text-align: center">
<el-text>未合格学员名单</el-text>
</div>
<layout-table :data="unpass_student_list" :show-pagination="false">
<el-table-column label="序号" width="50">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
<el-table-column prop="USER_NAME" label="姓名" />
<el-table-column prop="USER_ID_CARD" label="身份证" />
<el-table-column prop="PHONE" label="手机号" />
<el-table-column prop="SEX_NAME" label="性别" />
<el-table-column prop="COMPLETE_CLASSHOUR" label="完成学时" />
<el-table-column prop="STAGEEXAMSCORE" label="结业考试成绩">
<template v-slot="{ row }">
{{ row.STAGEEXAMSCORE > -1 ? row.STAGEEXAMSCORE : "未参加" }}
</template>
</el-table-column>
</layout-table>
</div>
<div v-html="PRINT_STYLE" />
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
@ -98,6 +178,7 @@ import { useVModels } from "@vueuse/core";
import LayoutTable from "@/components/table/index.vue";
import { useUserStore } from "@/pinia/user.js";
import { serialNumber } from "@/assets/js/utils.js";
import { PRINT_STYLE } from "@/assets/js/constant.js";
const userStore = useUserStore();
const CORP_NAME = userStore.getUserInfo.CORP_NAME;

View File

@ -1,59 +1,83 @@
<template>
<div>
<el-dialog
v-if="type === 102"
:model-value="type === 102"
:title="title"
:before-close="fnClose"
>
<el-space wrap>
<el-button type="primary" v-print="'#printContent'"></el-button>
</el-space>
<div id="printContent">
<div style="text-align: center">
<el-text size="large">安全培训教育记录及签字表</el-text>
</div>
<div style="text-align: center">
(
<el-checkbox>岗前三级培训</el-checkbox>
<el-checkbox>专项培训</el-checkbox>
<el-checkbox>再培训</el-checkbox>
<el-checkbox>日常培训</el-checkbox>
)
</div>
<el-descriptions :column="3" border>
<el-descriptions-item label="日期">
{{ data.taskInfo.CREATTIME }}
</el-descriptions-item>
<el-descriptions-item label="培训地点"> </el-descriptions-item>
<el-descriptions-item label="人数">
{{ data.studentList.length }}
</el-descriptions-item>
<el-descriptions-item label="学时">
{{ class_hours }}
</el-descriptions-item>
<el-descriptions-item label="培训对象" :span="2">
</el-descriptions-item>
<el-descriptions-item label="培训教师" :span="3">
{{ teachers }}
</el-descriptions-item>
<el-descriptions-item label="培训内容:" :span="3">
{{ coursewares }}
</el-descriptions-item>
</el-descriptions>
<div style="text-align: center">
<el-text>受培训人</el-text>
</div>
<el-dialog
v-if="type === 102"
:model-value="type === 102"
:title="title"
:before-close="fnClose"
>
<el-space wrap>
<el-button type="primary" v-print="'#printContent'"></el-button>
</el-space>
<div id="printContent">
<div class="tc">
<h3>安全培训教育记录及签字表</h3>
</div>
<div class="tc">
(
<el-checkbox>岗前三级培训</el-checkbox>
<el-checkbox>专项培训</el-checkbox>
<el-checkbox>再培训</el-checkbox>
<el-checkbox>日常培训</el-checkbox>
)
</div>
<el-descriptions :column="3" border>
<el-descriptions-item label="日期">
{{ data.taskInfo.CREATTIME }}
</el-descriptions-item>
<el-descriptions-item label="培训地点"> </el-descriptions-item>
<el-descriptions-item label="人数">
{{ data.studentList.length }}
</el-descriptions-item>
<el-descriptions-item label="学时">
{{ class_hours }}
</el-descriptions-item>
<el-descriptions-item label="培训对象" :span="2">
</el-descriptions-item>
<el-descriptions-item label="培训教师" :span="3">
{{ teachers }}
</el-descriptions-item>
<el-descriptions-item label="培训内容:" :span="3">
{{ coursewares }}
</el-descriptions-item>
</el-descriptions>
<table class="print_use">
<thead>
<tr>
<td colspan="2" class="tc" style="border: none">受培训人</td>
</tr>
<tr>
<td class="title">姓名</td>
<td class="title">部门</td>
</tr>
</thead>
<tbody>
<template v-if="data.studentList && data.studentList.length > 0">
<tr v-for="(item, index) in data.studentList" :key="index">
<td>
{{ item.USER_NAME }}
</td>
<td>
{{ item.DEPARTMENT_NAME }}
</td>
</tr>
</template>
</tbody>
</table>
<div class="print_no_use">
<div class="tc">受培训人</div>
<layout-table :data="data.studentList" :show-pagination="false">
<el-table-column prop="USER_NAME" label="姓名" />
<el-table-column prop="DEPARTMENT_NAME" label="部门" />
</layout-table>
</div>
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
</el-dialog>
</div>
</div>
<div v-html="PRINT_STYLE" />
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
</el-dialog>
</template>
<script setup>
@ -65,6 +89,7 @@ import {
import { computed, reactive } from "vue";
import { useVModels } from "@vueuse/core";
import LayoutTable from "@/components/table/index.vue";
import { PRINT_STYLE } from "@/assets/js/constant.js";
const props = defineProps({
title: {
@ -168,4 +193,10 @@ const fnGetStudentByTaskId = async () => {
await fnGetStudentByTaskId();
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
:deep {
.el-descriptions__label {
width: 100px;
}
}
</style>

View File

@ -11,60 +11,107 @@
<el-button type="danger" @click="fnDelete"> </el-button>
<el-button type="primary" v-print="'#printContent'"></el-button>
</el-space>
<div id="printContent">
<div style="text-align: center">
<el-text size="large">{{ CORP_NAME }}培训计划</el-text>
</div>
<div>
<el-text size="small">单位名称:{{ CORP_NAME }}</el-text>
</div>
<layout-table
:data="data.dataList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="45">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
<table class="print_use" style="width: 100%">
<thead>
<tr>
<td colspan="12" style="border: none">
<div class="tc">
<h3>{{ CORP_NAME }}培训计划</h3>
</div>
<div class="tl">单位名称:{{ CORP_NAME }}</div>
</td>
</tr>
<tr>
<td class="title">序号</td>
<td class="title">培训组织部门</td>
<td class="title">培训日期</td>
<td class="title">培训时间</td>
<td class="title">培训内容</td>
<td class="title">培训方式</td>
<td class="title">培训对象</td>
<td class="title">考核方式</td>
<td class="title">地点</td>
<td class="title">培训教师</td>
<td class="title">经费保障</td>
<td class="title">质量评估</td>
</tr>
</thead>
<tbody>
<template v-if="data.dataList && data.dataList.length > 0">
<tr v-for="(item, index) in data.dataList" :key="index">
<td class="tc">{{ index + 1 }}</td>
<td class="tc">{{ item.ORGANIZATION_DEPARTMENT }}</td>
<td class="tc">{{ item.TRAINING_DATE }}</td>
<td class="tc">{{ item.TRAINING_TIME }}</td>
<td class="tc">{{ item.TRAINING_CONTENT }}</td>
<td class="tc">{{ item.TRAINING_METHODS }}</td>
<td class="tc">{{ item.TRAINING_OBJECT }}</td>
<td class="tc">{{ item.ASSESSMENT_METHOD }}</td>
<td class="tc">{{ item.PLACE }}</td>
<td class="tc">{{ item.TRAINING_TEACHER }}</td>
<td class="tc">{{ item.FUND_GUARANTEE }}</td>
<td class="tc">{{ item.QUALITY_ASSESSMENT }}</td>
</tr>
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="ORGANIZATION_DEPARTMENT"
label="培训组织部门"
/>
<el-table-column prop="TRAINING_DATE" label="培训日期" width="85" />
<el-table-column prop="TRAINING_TIME" label="培训时间" width="85" />
<el-table-column
show-overflow-tooltip
prop="TRAINING_CONTENT"
label="培训内容"
/>
<el-table-column prop="TRAINING_METHODS" label="培训方式" />
<el-table-column prop="TRAINING_OBJECT" label="培训对象" />
<el-table-column prop="ASSESSMENT_METHOD" label="考核方式" />
<el-table-column show-overflow-tooltip prop="PLACE" label="地点" />
<el-table-column prop="TRAINING_TEACHER" label="培训教师" />
<el-table-column
show-overflow-tooltip
prop="FUND_GUARANTEE"
label="经费保障"
/>
<el-table-column
show-overflow-tooltip
prop="QUALITY_ASSESSMENT"
label="质量评估"
/>
</layout-table>
<el-row>
</tbody>
</table>
<div class="print_no_use mt-10">
<div class="tc">
<h3>{{ CORP_NAME }}培训计划</h3>
</div>
<p class="mtb-10">单位名称:{{ CORP_NAME }}</p>
<layout-table
:data="data.dataList"
:show-pagination="false"
highlight-current-row
@row-click="fnCurrentChange"
@row-dblclick="fnAddOrUpdate"
>
<el-table-column label="序号" width="45">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="ORGANIZATION_DEPARTMENT"
label="培训组织部门"
/>
<el-table-column prop="TRAINING_DATE" label="培训日期" width="85" />
<el-table-column prop="TRAINING_TIME" label="培训时间" width="85" />
<el-table-column
show-overflow-tooltip
prop="TRAINING_CONTENT"
label="培训内容"
/>
<el-table-column prop="TRAINING_METHODS" label="培训方式" />
<el-table-column prop="TRAINING_OBJECT" label="培训对象" />
<el-table-column prop="ASSESSMENT_METHOD" label="考核方式" />
<el-table-column show-overflow-tooltip prop="PLACE" label="地点" />
<el-table-column prop="TRAINING_TEACHER" label="培训教师" />
<el-table-column
show-overflow-tooltip
prop="FUND_GUARANTEE"
label="经费保障"
/>
<el-table-column
show-overflow-tooltip
prop="QUALITY_ASSESSMENT"
label="质量评估"
/>
</layout-table>
</div>
<el-row class="mt-10">
<el-col :span="6">编制人:</el-col>
<el-col :span="6">编制日期:</el-col>
<el-col :span="6">审核人:</el-col>
<el-col :span="6">审核日期:</el-col>
</el-row>
</div>
<div v-html="PRINT_STYLE" />
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
@ -92,6 +139,7 @@ import LayoutTable from "@/components/table/index.vue";
import { serialNumber } from "@/assets/js/utils.js";
import TrainingScheduleForm from "./training_schedule_form.vue";
import { ElMessageBox } from "element-plus";
import { PRINT_STYLE } from "@/assets/js/constant.js";
const userStore = useUserStore();
const CORP_NAME = userStore.getUserInfo.CORP_NAME;

View File

@ -1,40 +1,41 @@
<template>
<el-dialog v-model="visible" title="人员登记表" :before-close="fnClose">
<el-button type="primary" v-print="'#printContent'"></el-button>
<br /><br />
<div id="printContent">
<div style="text-align: center">
<el-text size="large">生产经营单位新入职从业人员登记表</el-text>
<div id="printContent" class="mt-20">
<div class="tc">
<h3>生产经营单位新入职从业人员登记表</h3>
</div>
<el-descriptions :column="2">
<el-descriptions-item label="生产经营单位名称(盖章):">
{{ CORP_NAME }}
</el-descriptions-item>
<el-descriptions-item label="档案编号:"> </el-descriptions-item>
</el-descriptions>
<el-row>
<div
class="mt-20"
style="display: flex; justify-content: space-between; width: 80%"
>
<span>生产经营单位名称(盖章):{{ CORP_NAME }}</span>
<span>档案编号:</span>
</div>
<el-row class="mt-10">
<el-col :span="20">
<el-descriptions :column="2" border>
<el-descriptions-item label="姓名">
<el-descriptions-item label="姓名" label-align="center">
{{ data.userInfo.NAME }}
</el-descriptions-item>
<el-descriptions-item label="性别">
<el-descriptions-item label="性别" label-align="center">
{{ data.userInfo.SEX_NAME }}
</el-descriptions-item>
<el-descriptions-item label="民族">
<el-descriptions-item label="民族" label-align="center">
{{ data.userInfo.NATION_NAME }}
</el-descriptions-item>
<el-descriptions-item label="政治面貌">
<el-descriptions-item label="政治面貌" label-align="center">
{{ data.userInfo.POLITICAL_OUTLOOK_NAME }}
</el-descriptions-item>
<el-descriptions-item label="文化程度">
<el-descriptions-item label="文化程度" label-align="center">
{{ data.userInfo.DEGREE_OF_EDUCATION_NAME }}
</el-descriptions-item>
<el-descriptions-item label="健康状况"> </el-descriptions-item>
<el-descriptions-item label="出生年月">
<el-descriptions-item label="健康状况" label-align="center">
</el-descriptions-item>
<el-descriptions-item label="出生年月" label-align="center">
{{ data.userInfo.DATE_OF_BIRTH }}
</el-descriptions-item>
<el-descriptions-item label="身份证号">
<el-descriptions-item label="身份证号" label-align="center">
{{ data.userInfo.USER_ID_CARD }}
</el-descriptions-item>
</el-descriptions>
@ -54,59 +55,72 @@
</el-col>
</el-row>
<el-descriptions :column="2" border>
<el-descriptions-item label="毕业院校及专业"> </el-descriptions-item>
<el-descriptions-item label="职务/职称">
<el-descriptions-item label="毕业院校及专业" label-align="center">
</el-descriptions-item>
<el-descriptions-item label="职务/职称" label-align="center">
{{ data.userInfo.DUTIES_NAME }}
</el-descriptions-item>
<el-descriptions-item label="户籍所在地"> </el-descriptions-item>
<el-descriptions-item label="参加工作时间">
<el-descriptions-item label="户籍所在地" label-align="center">
</el-descriptions-item>
<el-descriptions-item label="参加工作时间" label-align="center">
{{ data.userInfo.WORKING_DATE }}
</el-descriptions-item>
<el-descriptions-item label="进入本单位时间">
<el-descriptions-item label="进入本单位时间" label-align="center">
{{ data.userInfo.ENTRY_DATE }}
</el-descriptions-item>
<el-descriptions-item label="入职部门">
<el-descriptions-item label="入职部门" label-align="center">
{{ data.userInfo.DEPARTMENT_NAME }}
</el-descriptions-item>
<el-descriptions-item label="岗位名称">
<el-descriptions-item label="岗位名称" label-align="center">
{{ data.userInfo.POST_NAME }}
</el-descriptions-item>
<el-descriptions-item label="之前从事本岗位时间">
<el-descriptions-item label="之前从事本岗位时间" label-align="center">
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="1" border>
<el-descriptions-item label="主要工作经历"> </el-descriptions-item>
<el-descriptions-item label="主要工作经历" label-align="center">
<div class="large-content"></div>
</el-descriptions-item>
<el-descriptions-item
label="入职前接受安全培训和考核以及取得安全培训有关的岗位证书等情况"
label-align="center"
>
<div class="large-content"></div>
</el-descriptions-item>
<el-descriptions-item
label="入职前受过何种有关安全生产的处罚以及是否受到刑事处罚"
>
<div class="large-content"></div>
</el-descriptions-item>
<el-descriptions-item label="入职统计表相关信息核定情况">
<div>
<p>
<p class="mtb-20">
入职人承诺:以上信息已经本人核实信息真实有效完整如有虚假或欺骗等行为自愿承担相应的法律责任.
</p>
<div class="flex">
<p>入职人(签字并按指纹)</p>
<p>
承诺日期<span style="padding-left: 40px"></span
><span style="padding-left: 20px"></span
><span style="padding-left: 20px"></span>
</p>
<div
class="mt-20"
style="display: flex; justify-content: space-between; width: 80%"
>
<span>入职人(签字并按指纹)</span>
<span>
承诺日期
<span class="pl-40"></span>
<span class="pl-20"></span>
<span class="pl-20"></span>
</span>
</div>
</div>
<div>
<p>生产经营单位核查意见</p>
<div class="flex">
<p>核查人员(签字)</p>
<p>
核查日期<span style="padding-left: 40px"></span
><span style="padding-left: 20px"></span
><span style="padding-left: 20px"></span>
</p>
<p class="mt-20">生产经营单位核查意见</p>
<div
class="mtb-20"
style="display: flex; justify-content: space-between; width: 80%"
>
<span>核查人员(签字)</span>
<span>
核查日期
<span class="pl-40"></span>
<span class="pl-20"></span>
<span class="pl-20"></span>
</span>
</div>
</div>
</el-descriptions-item>
@ -159,4 +173,8 @@ const fnGetUserInfo = async () => {
await fnGetUserInfo();
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.large-content {
height: 127px;
}
</style>

View File

@ -1,350 +1,406 @@
<template>
<div>
<el-descriptions title="学时证明" :column="1">
<template #extra>
<el-button type="primary" v-print="'#printContent'" size="small">
打印
</el-button>
</template>
</el-descriptions>
<div id="printContent">
<div class="print_use">
<div style="text-align: right">
<span>档案编号</span>
</div>
<div
style="
font-size: 30px;
font-weight: 700;
text-align: center;
padding-top: 100px;
"
>
<span>生产经营单位从业人员安全培训档案</span>
</div>
<div style="width: 300px; margin: auto; padding-top: 400px">
<div>
<span
style="
text-align: justify;
text-align-last: justify;
width: 64px;
display: inline-block;
"
>
姓名
</span>
<span>{{ data.userInfo.NAME }}</span>
</div>
<div style="padding-top: 20px">
<span style="width: 64px; display: inline-block">身份证号</span>
<span>{{ data.userInfo.USER_ID_CARD }}</span>
</div>
<div style="padding-top: 20px">
<span style="width: 64px; display: inline-block">建档日期</span>
<span>{{ fnGetCurrentDay() }}</span>
</div>
<div style="padding-top: 20px">单位名称公章</div>
</div>
<layout-print-table-package entrance="archive">
<div class="print_use">
<div class="tr mt-30">
<span>档案编号</span>
</div>
<div>
<span style="color: white">证书编号:</span>
</div>
<el-descriptions :column="1" border>
<el-descriptions-item label="姓名">
{{ data.userInfo.NAME }}
</el-descriptions-item>
<el-descriptions-item label="证件类型">身份证</el-descriptions-item>
<el-descriptions-item label="证件编号">
{{ data.userInfo.USER_ID_CARD }}
</el-descriptions-item>
<el-descriptions-item label="培训单位名称">
{{ CORP_NAME }}
</el-descriptions-item>
<el-descriptions-item label="任务名称">
{{ data.studyTaskInfo.STUDY_NAME }}
</el-descriptions-item>
<el-descriptions-item label="培训日期">
{{ data.studyTaskInfo.PEIXUE_START_TIME }}
{{ data.studyTaskInfo.PEIXUE_END_TIME }}
</el-descriptions-item>
<el-descriptions-item label="培训类型">
{{ data.studyTaskInfo.train_type_name }}
</el-descriptions-item>
<el-descriptions-item label="视频学习时长">
{{ video_class_hours }}分钟(包含{{ video_count }}个视频)
</el-descriptions-item>
<el-descriptions-item label="资料学习时长">
{{ data_class_hours }}分钟(包含{{ data_count }}个资料)
</el-descriptions-item>
<el-descriptions-item label="合计学习时长">
{{ video_class_hours + data_class_hours }}分钟
</el-descriptions-item>
<el-descriptions-item>
<template #label>
培训单位:(盖章) 日期: {{ fnGetCurrentDay() }}
</template>
</el-descriptions-item>
</el-descriptions>
<br />
<el-descriptions title="课程资料" :column="2">
<el-descriptions-item label="姓名:">
{{ data.userInfo.NAME }}
</el-descriptions-item>
<el-descriptions-item label="身份证号:">
{{ data.userInfo.USER_ID_CARD }}
</el-descriptions-item>
</el-descriptions>
<layout-table :data="data.curriculumList" :show-pagination="false">
<el-table-column label="任务名称">
<el-table-column label="序号" width="70">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
</el-table-column>
<el-table-column :label="data.studyTaskInfo.STUDY_NAME">
<el-table-column prop="COURSEWARENAME" label="课程内容" />
<el-table-column prop="CLASSHOUR" label="课时">
<template v-slot="{ row }">
{{ (row.CLASSHOUR / 45).toFixed(2) }}
</template>
</el-table-column>
<el-table-column prop="SPEAKER" label="讲师" />
</el-table-column>
</layout-table>
<el-descriptions title="考卷详情" :column="2" />
<div style="text-align: center; color: white">
<h3>{{ data.paper.info.EXAMNAME }}</h3>
<span>(满分:{{ data.paper.info.EXAMSCORE || 0 }})</span>
</div>
<el-descriptions :column="2">
<el-descriptions-item label="任务名称:">
{{ data.studyTaskInfo.STUDY_NAME }}
</el-descriptions-item>
<el-descriptions-item label="姓名:">
{{ data.userInfo.NAME }}
</el-descriptions-item>
<el-descriptions-item label="考试时间:">
{{ data.paper.info.OPERATTIME }}
</el-descriptions-item>
<el-descriptions-item label="分数:">
{{ data.examScore.userSecond[0] }}
</el-descriptions-item>
</el-descriptions>
<div v-if="data.paper.selectList.length > 0" style="color: white">
<el-divider content-position="left">单选题</el-divider>
<template
v-for="(item, index) in data.paper.selectList"
:key="item.QUESTION_ID"
>
<el-row>
<el-col :span="24">
{{ index + 1 }}.{{ item.QUESTIONDRY }} 选择答案[{{
data.paper.isExam === "1" ? item.ANSWER : ""
}}]
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="4">A.{{ item.OPTIONA }}</el-col>
<el-col :span="4">B.{{ item.OPTIONB }}</el-col>
<el-col :span="4">C.{{ item.OPTIONC }}</el-col>
<el-col :span="4">D.{{ item.OPTIOND }}</el-col>
<el-col :span="4">
参考答案:{{
data.paper.isExam === "1" ? item.ANSWERRIGHT : item.ANSWER
}}
</el-col>
</el-row>
<el-divider border-style="dashed" />
</template>
</div>
<div v-if="data.paper.multiList.length > 0" style="color: white">
<el-divider content-position="left">多选题</el-divider>
<template
v-for="(item, index) in data.paper.multiList"
:key="item.QUESTION_ID"
>
<el-row>
<el-col :span="24">
{{ index + 1 }}.{{ item.QUESTIONDRY }} 选择答案[{{
data.paper.isExam === "1" ? item.ANSWER : ""
}}]
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="4">A.{{ item.OPTIONA }}</el-col>
<el-col :span="4">B.{{ item.OPTIONB }}</el-col>
<el-col :span="4">C.{{ item.OPTIONC }}</el-col>
<el-col :span="4">D.{{ item.OPTIOND }}</el-col>
<el-col :span="4">
参考答案:{{
data.paper.isExam === "1" ? item.ANSWERRIGHT : item.ANSWER
}}
</el-col>
</el-row>
<el-divider border-style="dashed" />
</template>
</div>
<div v-if="data.paper.judgeList.length > 0" style="color: white">
<el-divider content-position="left">判断题</el-divider>
<template
v-for="(item, index) in data.paper.judgeList"
:key="item.QUESTION_ID"
>
<el-row>
<el-col :span="24">
{{ index + 1 }}.{{ item.QUESTIONDRY }} 选择答案[{{
data.paper.isExam === "1" ? item.ANSWER : ""
}}]
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="4">A.{{ item.OPTIONA }}</el-col>
<el-col :span="4">B.{{ item.OPTIONB }}</el-col>
<el-col :span="4">
参考答案:{{
data.paper.isExam === "1" ? item.ANSWERRIGHT : item.ANSWER
}}
</el-col>
</el-row>
<el-divider border-style="dashed" />
</template>
</div>
<br />
<el-descriptions title="培训考核记录" :column="5" />
<div style="text-align: center; color: white">
<h4>
{{ data.studyTaskInfo.train_type_name }}生产经营单位{{
data.studyTaskInfo.post_type_name
}}安全培训考核记录
</h4>
</div>
<el-descriptions :column="2">
<el-descriptions-item label="生产经营单位或安全生产管理机构名称:(盖章)">
</el-descriptions-item>
<el-descriptions-item label="档案编号:"> </el-descriptions-item>
</el-descriptions>
<el-descriptions :column="5" border>
<el-descriptions-item label="姓名">
{{ data.userInfo.NAME }}
</el-descriptions-item>
<el-descriptions-item label="性别">
{{ data.userInfo.SEX_NAME }}
</el-descriptions-item>
<el-descriptions-item label="身份证">
{{ data.userInfo.USER_ID_CARD }}
</el-descriptions-item>
<el-descriptions-item label="学历">
{{ data.userInfo.DEGREE_OF_EDUCATION_NAME }}
</el-descriptions-item>
<el-descriptions-item label="专业"> </el-descriptions-item>
<el-descriptions-item label="职务">
{{ data.userInfo.DUTIES_NAME }}
</el-descriptions-item>
<el-descriptions-item label="部门">
{{ data.userInfo.DEPARTMENT_NAME }}
</el-descriptions-item>
<el-descriptions-item label="工种">
{{ data.userInfo.TYPE_OF_WORK_NAME }}
</el-descriptions-item>
<el-descriptions-item label="行业类别">
{{ data.studyTaskInfo.train_type_name }}
</el-descriptions-item>
<el-descriptions-item label="联系电话">
{{ data.userInfo.USERNAME }}
</el-descriptions-item>
<el-descriptions-item label="人员类型" :span="5">
<el-checkbox-group v-model="data.checkPerType" disabled>
<el-checkbox
v-for="(item, index) in data.personalTypeList"
:key="index"
:label="item.DICTIONARIES_ID"
>{{ item.NAME }}</el-checkbox
>
</el-checkbox-group>
</el-descriptions-item>
</el-descriptions>
<div style="text-align: center; color: white">
<span>安全培训及考核实施情况</span>
</div>
<layout-table
:data="data.curriculumList"
:show-pagination="false"
:span-method="fnMergeCells"
<div
style="
font-size: 30px;
font-weight: 700;
text-align: center;
padding-top: 100px;
"
>
<el-table-column label="序号" width="70">
<template v-slot="{ $index }">
{{ serialNumber({ currentPage: 1, pageSize: 99999 }, $index) }}
</template>
</el-table-column>
<el-table-column label="培训时间">
<template v-slot>
<span>生产经营单位从业人员安全培训档案</span>
</div>
<div style="width: 300px; margin: auto; padding-top: 400px">
<div>
<span
style="
text-align: justify;
text-align-last: justify;
width: 64px;
display: inline-block;
"
>
姓名
</span>
<span>{{ data.userInfo.NAME }}</span>
</div>
<div style="padding-top: 20px">
<span style="width: 64px; display: inline-block">身份证号</span>
<span>{{ data.userInfo.USER_ID_CARD }}</span>
</div>
<div style="padding-top: 20px">
<span style="width: 64px; display: inline-block">建档日期</span>
<span>{{ fnGetCurrentDay() }}</span>
</div>
<div style="padding-top: 20px">单位名称公章</div>
</div>
</div>
<table>
<thead>
<tr>
<td colspan="2" style="border: none">
<el-divider content-position="left">学时证明</el-divider>
<div class="mb-10">证书编号:</div>
</td>
</tr>
</thead>
<tbody>
<tr>
<td class="title">姓名</td>
<td>{{ data.userInfo.NAME }}</td>
</tr>
<tr>
<td class="title">证件类型</td>
<td>身份证</td>
</tr>
<tr>
<td class="title">证件编号</td>
<td>{{ data.userInfo.USER_ID_CARD }}</td>
</tr>
<tr>
<td class="title">培训单位名称</td>
<td>{{ CORP_NAME }}</td>
</tr>
<tr>
<td class="title">任务名称</td>
<td>{{ data.studyTaskInfo.STUDY_NAME }}</td>
</tr>
<tr>
<td class="title">培训日期</td>
<td>
{{ data.studyTaskInfo.PEIXUE_START_TIME }}
{{ data.studyTaskInfo.PEIXUE_END_TIME }}
</template>
</el-table-column>
<el-table-column label="培训地点">
<template v-slot></template>
</el-table-column>
<el-table-column prop="COURSEWARENAME" label="培训主要内容" />
<el-table-column label="学时">
<template v-slot="{ row }">
{{ (row.CLASSHOUR / 45).toFixed(2) }}
</template>
</el-table-column>
<el-table-column prop="SPEAKER" label="培训教师" />
<el-table-column label="考试成绩">
<template v-slot>{{ data.examScore.userSecond[0] }}</template>
</el-table-column>
<el-table-column label="补考成绩">
<template v-slot>{{ data.examScore.userSecond[1] }}</template>
</el-table-column>
<el-table-column label="本人签字">
<template v-slot>
<img
v-if="data.examScore.USER_SIGN_PATH"
:src="FILE_URL + data.examScore.USER_SIGN_PATH"
style="height: 50px; width: 50px"
alt="本人"
/>
</template>
</el-table-column>
</layout-table>
<el-descriptions :column="4">
<el-descriptions-item label="记录人员(签字):">
<div v-for="(item, index) in data.signList" :key="index">
<img
v-if="item.TYPE === 1 && item.USER_SIGN_FILE_PATH"
:src="FILE_URL + item.USER_SIGN_FILE_PATH"
style="height: 50px; width: 50px"
alt="记录人员"
/>
</div>
</el-descriptions-item>
<el-descriptions-item label="考核人员(签字):">
<div v-for="(item, index) in data.signList" :key="index">
<img
v-if="item.TYPE === 2 && item.USER_SIGN_FILE_PATH"
:src="FILE_URL + item.USER_SIGN_FILE_PATH"
style="height: 50px; width: 50px"
alt="考核人员"
/>
</div>
</el-descriptions-item>
<el-descriptions-item label="安全生产管理机构负责人(签章):">
</el-descriptions-item>
<el-descriptions-item label="归档日期:">
{{ fnGetCurrentDay() }}
</el-descriptions-item>
</el-descriptions>
</div>
</div>
</td>
</tr>
<tr>
<td class="title">培训类型</td>
<td>{{ data.studyTaskInfo.train_type_name }}</td>
</tr>
<tr>
<td class="title">视频学习时长</td>
<td>{{ video_class_hours }}分钟(包含{{ video_count }}个视频)</td>
</tr>
<tr>
<td class="title">资料学习时长</td>
<td>{{ data_class_hours }}分钟(包含{{ data_count }}个资料)</td>
</tr>
<tr>
<td class="title">合计学习时长</td>
<td>{{ video_class_hours + data_class_hours }}分钟</td>
</tr>
<tr style="height: 150px">
<td class="title">
<div style="width: 150px">
<p>培训单位:(盖章)</p>
<p>日期: {{ fnGetCurrentDay() }}</p>
</div>
</td>
<td></td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<td colspan="4" style="border: none">
<el-divider content-position="left">课程材料</el-divider>
<div class="mb-10 flex">
<span>姓名:{{ data.userInfo.NAME }}</span>
<span>身份证号:{{ data.userInfo.USER_ID_CARD }}</span>
</div>
</td>
</tr>
<tr>
<td class="title">任务名称</td>
<td class="title" colspan="3">{{ data.studyTaskInfo.STUDY_NAME }}</td>
</tr>
<tr>
<td class="title">序号</td>
<td class="title">课程内容</td>
<td class="title">课时</td>
<td class="title">讲师</td>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in data.curriculumList" :key="index">
<td class="tc">{{ index + 1 }}</td>
<td class="tc">{{ item.COURSEWARENAME }}</td>
<td class="tc">{{ (item.CLASSHOUR / 45).toFixed(2) }}</td>
<td class="tc">{{ item.SPEAKER }}</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<td style="border: none">
<el-divider content-position="left">考卷详情</el-divider>
</td>
</tr>
<tr>
<td style="border: none">
<div class="tc">
<h3>{{ data.paper.info.EXAMNAME }}</h3>
</div>
<div class="tc mt-10">
<span>(满分:{{ data.paper.info.EXAMSCORE || 0 }})</span>
</div>
<div class="flex">
<span>任务名称:{{ data.studyTaskInfo.STUDY_NAME }}</span>
<span>姓名:{{ data.userInfo.NAME }}</span>
</div>
</td>
</tr>
<tr>
<td style="border: none">
<div class="flex">
<span>考试时间:{{ data.paper.info.OPERATTIME }}</span>
<span>分数:{{ data.examScore.userSecond[0] }}</span>
</div>
</td>
</tr>
</thead>
<tbody>
<template v-if="data.paper.selectList.length > 0">
<tr>
<td style="border: none">
<el-divider content-position="left">单选题</el-divider>
</td>
</tr>
<tr
v-for="(item, index) in data.paper.selectList"
:key="item.QUESTION_ID"
>
<td style="border: none">
<p>
{{ index + 1 }}.{{ item.QUESTIONDRY }} 选择答案[{{
data.paper.isExam === "1" ? item.ANSWER : ""
}}]
</p>
<el-row :gutter="30" class="mt-10">
<el-col :span="4">A.{{ item.OPTIONA }}</el-col>
<el-col :span="4">B.{{ item.OPTIONB }}</el-col>
<el-col :span="4">C.{{ item.OPTIONC }}</el-col>
<el-col :span="4">D.{{ item.OPTIOND }}</el-col>
<el-col :span="4">
参考答案:{{
data.paper.isExam === "1" ? item.ANSWERRIGHT : item.ANSWER
}}
</el-col>
</el-row>
<el-divider border-style="dashed" />
</td>
</tr>
</template>
<template v-if="data.paper.multiList.length > 0">
<tr>
<td style="border: none">
<el-divider content-position="left">多选题</el-divider>
</td>
</tr>
<tr
v-for="(item, index) in data.paper.multiList"
:key="item.QUESTION_ID"
>
<td style="border: none">
<p>
{{ index + 1 }}.{{ item.QUESTIONDRY }} 选择答案[{{
data.paper.isExam === "1" ? item.ANSWER : ""
}}]
</p>
<el-row :gutter="30" class="mt-10">
<el-col :span="4">A.{{ item.OPTIONA }}</el-col>
<el-col :span="4">B.{{ item.OPTIONB }}</el-col>
<el-col :span="4">C.{{ item.OPTIONC }}</el-col>
<el-col :span="4">D.{{ item.OPTIOND }}</el-col>
<el-col :span="4">
参考答案:{{
data.paper.isExam === "1" ? item.ANSWERRIGHT : item.ANSWER
}}
</el-col>
</el-row>
<el-divider border-style="dashed" />
</td>
</tr>
</template>
<template v-if="data.paper.judgeList.length > 0">
<tr>
<td style="border: none">
<el-divider content-position="left">判断题</el-divider>
</td>
</tr>
<tr
v-for="(item, index) in data.paper.judgeList"
:key="item.QUESTION_ID"
>
<td style="border: none">
<p>
{{ index + 1 }}.{{ item.QUESTIONDRY }} 选择答案[{{
data.paper.isExam === "1" ? item.ANSWER : ""
}}]
</p>
<el-row :gutter="30">
<el-col :span="4">A.{{ item.OPTIONA }}</el-col>
<el-col :span="4">B.{{ item.OPTIONB }}</el-col>
<el-col :span="4">
参考答案:{{
data.paper.isExam === "1" ? item.ANSWERRIGHT : item.ANSWER
}}
</el-col>
</el-row>
<el-divider border-style="dashed" />
</td>
</tr>
</template>
</tbody>
</table>
<table>
<thead>
<tr>
<td colspan="10" style="border: none">
<el-divider content-position="left">培训考核记录</el-divider>
<div class="tc">
<h3>
{{ data.studyTaskInfo.train_type_name }}生产经营单位{{
data.studyTaskInfo.post_type_name
}}安全培训考核记录
</h3>
</div>
</td>
</tr>
<tr>
<td colspan="10" style="border: none">
<div class="flex">
<span>生产经营单位或安全生产管理机构名称:(盖章)</span>
<span>档案编号:</span>
</div>
</td>
</tr>
</thead>
<tbody>
<tr>
<td class="title">姓名</td>
<td class="tc">{{ data.userInfo.NAME }}</td>
<td class="title">性别</td>
<td class="tc">{{ data.userInfo.SEX_NAME }}</td>
<td class="title">身份证</td>
<td class="tc">{{ data.userInfo.USER_ID_CARD }}</td>
<td class="title">学历</td>
<td class="tc">{{ data.userInfo.DEGREE_OF_EDUCATION_NAME }}</td>
<td class="title">专业</td>
<td class="tc"></td>
</tr>
<tr>
<td class="title">职务</td>
<td class="tc">{{ data.userInfo.DUTIES_NAME }}</td>
<td class="title">部门</td>
<td class="tc">{{ data.userInfo.DEPARTMENT_NAME }}</td>
<td class="title">工种</td>
<td class="tc">{{ data.studyTaskInfo.TYPE_OF_WORK_NAME }}</td>
<td class="title">行业类别</td>
<td class="tc">{{ data.studyTaskInfo.train_type_name }}</td>
<td class="title">联系电话</td>
<td class="tc">{{ data.userInfo.USERNAME }}</td>
</tr>
<tr>
<td class="title">人员类型</td>
<td colspan="9" class="tc">
<el-checkbox-group v-model="data.checkPerType" disabled>
<el-checkbox
v-for="(item, index) in data.personalTypeList"
:key="index"
:label="item.DICTIONARIES_ID"
>
{{ item.NAME }}
</el-checkbox>
</el-checkbox-group>
</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<td colspan="9" class="tc">安全培训及考核实施情况</td>
</tr>
<tr>
<td class="title" style="width: 4%">序号</td>
<td class="title">培训时间</td>
<td class="title">培训地点</td>
<td class="title">培训主要内容</td>
<td class="title">学时</td>
<td class="title">培训教师</td>
<td class="title">考试成绩</td>
<td class="title">补考成绩</td>
<td class="title">本人签字</td>
</tr>
</thead>
<tbody>
<template v-if="data.curriculumList && data.curriculumList.length > 0">
<tr
v-for="(item, index) in data.curriculumList"
:key="item.COURSEWARE_ID"
>
<td class="tc">{{ index + 1 }}</td>
<td class="tc">
{{ data.studyTaskInfo.PEIXUE_START_TIME }}
{{ data.studyTaskInfo.PEIXUE_END_TIME }}
</td>
<td class="tc">一体化双控平台</td>
<td class="tc">{{ item.COURSEWARENAME }}</td>
<td class="tc">{{ (item.CLASSHOUR / 45).toFixed(2) }}</td>
<td class="tc">{{ item.SPEAKER }}</td>
<td class="tc">{{ data.examScore.userSecond[0] }}</td>
<td class="tc">{{ data.examScore.userSecond[1] }}</td>
<td class="tc">
<img
v-if="data.examScore.USER_SIGN_PATH"
:src="FILE_URL + data.examScore.USER_SIGN_PATH"
style="height: 50px; width: 50px"
alt="本人"
/>
</td>
</tr>
</template>
</tbody>
</table>
<el-row class="mt-10">
<el-col :span="6">
记录人员(签字):
<div v-for="(item, index) in data.signList" :key="index">
<img
v-if="item.TYPE === 1 && item.USER_SIGN_FILE_PATH"
:src="FILE_URL + item.USER_SIGN_FILE_PATH"
style="height: 50px; width: 50px"
alt="记录人员"
/>
</div>
</el-col>
<el-col :span="6">
考核人员(签字):
<div v-for="(item, index) in data.signList" :key="index">
<img
v-if="item.TYPE === 2 && item.USER_SIGN_FILE_PATH"
:src="FILE_URL + item.USER_SIGN_FILE_PATH"
style="height: 50px; width: 50px"
alt="考核人员"
/>
</div>
</el-col>
<el-col :span="6"> 安全生产管理机构负责人(签章): </el-col>
<el-col :span="6"> 归档日期:{{ fnGetCurrentDay() }} </el-col>
</el-row>
</layout-print-table-package>
<div v-html="PRINT_STYLE" />
</template>
<script setup>
@ -357,11 +413,11 @@ import {
getUserExamScoreByStudyTaskId,
} from "@/request/archives.js";
import { layoutFnGetPersonnelType } from "@/assets/js/data_dictionary.js";
import LayoutTable from "@/components/table/index.vue";
import { computed, reactive } from "vue";
import { useRoute } from "vue-router";
import { useUserStore } from "@/pinia/user";
import { serialNumber } from "@/assets/js/utils.js";
import LayoutPrintTablePackage from "@/components/print_table_package/index.vue";
import { PRINT_STYLE } from "@/assets/js/constant.js";
const FILE_URL = import.meta.env.VITE_FILE_URL;
@ -529,21 +585,12 @@ const fnGetCurrentDay = () => {
const day = String(currentDatetime.getDate()).padStart(2, "0");
return `${year}${month}${day}`;
};
const fnMergeCells = ({ rowIndex, columnIndex }) => {
if (columnIndex > 5) {
if (rowIndex < 1) {
return {
rowspan: data.curriculumList.length,
colspan: 1,
};
}
return {
rowspan: 0,
colspan: 0,
};
}
};
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.flex {
display: flex;
justify-content: space-between;
width: 80%;
}
</style>

View File

@ -38,55 +38,51 @@
</el-descriptions>
<template v-for="(row, index) in data.questionList" :key="row.QUESTION_ID">
<div>
<el-row>
<el-col :span="24">
{{ index + 1 }}.
<el-text v-if="row.QUESTIONTYPE === '1'" type="info">
(单选题)
</el-text>
<el-text v-if="row.QUESTIONTYPE === '2'" type="info">
(多选题)
</el-text>
<el-text v-if="row.QUESTIONTYPE === '3'" type="info">
(判断题)
</el-text>
{{ row.QUESTIONDRY }}
</el-col>
</el-row>
<el-space wrap>
<el-radio-group
v-if="row.QUESTIONTYPE === '1'"
:disabled="true"
v-model="row.ANSWER"
>
<el-radio label="A">A.{{ row.OPTIONA }}</el-radio>
<el-radio label="B">B.{{ row.OPTIONB }}</el-radio>
<el-radio label="C">C.{{ row.OPTIONC }}</el-radio>
<el-radio label="D">D.{{ row.OPTIOND }}</el-radio>
</el-radio-group>
<el-checkbox-group
v-if="row.QUESTIONTYPE === '2'"
:disabled="true"
:model-value="row.ANSWER.split('')"
>
<el-checkbox label="A">A.{{ row.OPTIONA }}</el-checkbox>
<el-checkbox label="B">B.{{ row.OPTIONB }}</el-checkbox>
<el-checkbox label="C">C.{{ row.OPTIONC }}</el-checkbox>
<el-checkbox label="D">D.{{ row.OPTIOND }}</el-checkbox>
</el-checkbox-group>
<el-radio-group
v-if="row.QUESTIONTYPE === '3'"
:disabled="true"
v-model="row.ANSWER"
>
<el-radio label="A">A.{{ row.OPTIONA }}</el-radio>
<el-radio label="B">B.{{ row.OPTIONB }}</el-radio>
</el-radio-group>
</el-space>
<div>答案{{ row.ANSWER }}</div>
<div class="mt-20">
{{ index + 1 }}.
<span v-if="row.QUESTIONTYPE === '1'" class="question-type">
(单选题)
</span>
<span v-if="row.QUESTIONTYPE === '2'" class="question-type">
(多选题)
</span>
<span v-if="row.QUESTIONTYPE === '3'" class="question-type">
(判断题)
</span>
{{ row.QUESTIONDRY }}
</div>
<div class="mt-10 ml-30">
<el-radio-group
v-if="row.QUESTIONTYPE === '1'"
:disabled="true"
v-model="row.ANSWER"
>
<el-radio label="A">A.{{ row.OPTIONA }}</el-radio>
<el-radio label="B">B.{{ row.OPTIONB }}</el-radio>
<el-radio label="C">C.{{ row.OPTIONC }}</el-radio>
<el-radio label="D">D.{{ row.OPTIOND }}</el-radio>
</el-radio-group>
<el-checkbox-group
v-if="row.QUESTIONTYPE === '2'"
:disabled="true"
:model-value="row.ANSWER.split('')"
>
<el-checkbox label="A">A.{{ row.OPTIONA }}</el-checkbox>
<el-checkbox label="B">B.{{ row.OPTIONB }}</el-checkbox>
<el-checkbox label="C">C.{{ row.OPTIONC }}</el-checkbox>
<el-checkbox label="D">D.{{ row.OPTIOND }}</el-checkbox>
</el-checkbox-group>
<el-radio-group
v-if="row.QUESTIONTYPE === '3'"
:disabled="true"
v-model="row.ANSWER"
>
<el-radio label="A">A.{{ row.OPTIONA }}</el-radio>
<el-radio label="B">B.{{ row.OPTIONB }}</el-radio>
</el-radio-group>
</div>
<div class="mt-10">答案{{ row.ANSWER }}</div>
</template>
</layout-card>
</template>
@ -114,4 +110,9 @@ const fnGetPaperInfo = async () => {
await fnGetPaperInfo();
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.question-type {
font-size: 12px;
color: gray;
}
</style>