forked from integrated_whb/integrated_whb_vue
档案管理和效果评估
parent
8156e84bff
commit
1ffbba0de9
|
@ -1,4 +1,4 @@
|
||||||
import { post } from "@/request/axios.js";
|
import { post, upload } from "@/request/axios.js";
|
||||||
|
|
||||||
export const getStudentsList = (params) =>
|
export const getStudentsList = (params) =>
|
||||||
post("/archives/getStudentsList", params); // 一人一档用户列表
|
post("/archives/getStudentsList", params); // 一人一档用户列表
|
||||||
|
@ -24,6 +24,8 @@ export const getLearningRecord = (params) =>
|
||||||
export const getDict = (params) => post("/dictionaries/getLevels", params); // 获取人员类型
|
export const getDict = (params) => post("/dictionaries/getLevels", params); // 获取人员类型
|
||||||
export const downloadFilesdetailword = (params) =>
|
export const downloadFilesdetailword = (params) =>
|
||||||
post("/archives/filesdetailword", params); // 一人一档:档案详情导出
|
post("/archives/filesdetailword", params); // 一人一档:档案详情导出
|
||||||
|
export const downloadAward = (params) =>
|
||||||
|
post("/archives/batchDownloadWord", params); // 一人一档:补充档案导出
|
||||||
|
|
||||||
export const getClassPapers = (params) =>
|
export const getClassPapers = (params) =>
|
||||||
post("/archives/getClassPapers", params); // 一期一档:班级试卷列表
|
post("/archives/getClassPapers", params); // 一期一档:班级试卷列表
|
||||||
|
@ -70,12 +72,19 @@ export const downloadSign = (params) => post("/archives/sign", params); // 一
|
||||||
|
|
||||||
export const downloadAllwordzip = (params) =>
|
export const downloadAllwordzip = (params) =>
|
||||||
post("/archivesallcorpword/allwordzip", params); // 一企一档:档案目录
|
post("/archivesallcorpword/allwordzip", params); // 一企一档:档案目录
|
||||||
export const getArchivesfilesList = (params) =>
|
|
||||||
post("/archivesfiles/list", params); // 一企一档列表
|
|
||||||
export const getArchivesPostmanList = (params) =>
|
export const getArchivesPostmanList = (params) =>
|
||||||
post("/archivespostman/list", params); // 一企一档:年度三岗人员管理台账列表
|
post("/archivespostman/list", params); // 一企一档:年度三岗人员管理台账列表
|
||||||
export const downloadPersonmanage = (params) =>
|
export const downloadPersonmanage = (params) =>
|
||||||
post("/archivespostman/personmanage", params); // 一企一档:三岗人员管理台账导出
|
post("/archivespostman/personmanage", params); // 一企一档:三岗人员管理台账导出
|
||||||
|
export const getPostmanView = (params) =>
|
||||||
|
post("/archivespostman/goEdit", params); // 一企一档:三岗人员管理台账查看
|
||||||
|
export const setPostmanDelete = (params) =>
|
||||||
|
post("/archivespostman/delete", params); // 一企一档:三岗人员管理台账删除
|
||||||
|
export const setPostmanAdd = (params) => upload("/archivespostman/add", params); // 一企一档:三岗人员管理台账添加
|
||||||
|
export const setPostmanEdit = (params) =>
|
||||||
|
upload("/archivespostman/edit", params); // 一企一档:三岗人员管理台账修改
|
||||||
|
export const setPostmanImport = (params) =>
|
||||||
|
upload("/archivespostman/readExcel", params); // 一企一档:三岗人员管理台账导入
|
||||||
export const getArchivesTeacherList = (params) =>
|
export const getArchivesTeacherList = (params) =>
|
||||||
post("/archivesteacher/list", params); // 一企一档:年度本单位师资管理台账
|
post("/archivesteacher/list", params); // 一企一档:年度本单位师资管理台账
|
||||||
export const getArchivesPlanList = (params) =>
|
export const getArchivesPlanList = (params) =>
|
||||||
|
@ -84,6 +93,18 @@ export const getArchivesManagerList = (params) =>
|
||||||
post("/archivesedumanager/list", params); // 一企一档:年度安全培训教育管理台账
|
post("/archivesedumanager/list", params); // 一企一档:年度安全培训教育管理台账
|
||||||
export const getArchivesCapitalList = (params) =>
|
export const getArchivesCapitalList = (params) =>
|
||||||
post("/archivescapital/list", params); // 一企一档:年度培训资金提取和使用情况管理台账
|
post("/archivescapital/list", params); // 一企一档:年度培训资金提取和使用情况管理台账
|
||||||
|
export const setCapitalDelete = (params) =>
|
||||||
|
post("/archivescapital/delete", params); // 一企一档:年度培训资金提取和使用情况管理台账删除
|
||||||
|
export const getCapitalView = (params) =>
|
||||||
|
post("/archivescapital/goEdit", params); // 一企一档:年度培训资金提取和使用情况管理台账查看
|
||||||
|
export const setCapitalAdd = (params) => post("/archivescapital/add", params); // 一企一档:年度培训资金提取和使用情况管理台账添加
|
||||||
|
export const setCapitalEdit = (params) => post("/archivescapital/edit", params); // 一企一档:年度培训资金提取和使用情况管理台账修改
|
||||||
|
export const setArchivesFilesUpload = (params) =>
|
||||||
|
upload("/archivesfiles/add", params); // 一企一档:上传pdf文件
|
||||||
|
export const getArchivesFilesList = (params) =>
|
||||||
|
post("/archivesfiles/listAll", params); // 一企一档:获取附件
|
||||||
|
export const setArchivesFilesDelete = (params) =>
|
||||||
|
post("/archivesfiles/delete", params); // 一企一档:删除附件
|
||||||
export const downloadFundmanageword = (params) =>
|
export const downloadFundmanageword = (params) =>
|
||||||
post("/archivescapital/fundmanageword", params); // 一企一档:年度培训资金提取和使用情况管理台账导出
|
post("/archivescapital/fundmanageword", params); // 一企一档:年度培训资金提取和使用情况管理台账导出
|
||||||
export const downloadTrainingplanword = (params) =>
|
export const downloadTrainingplanword = (params) =>
|
||||||
|
@ -96,3 +117,12 @@ export const downloadTeacherword = (params) =>
|
||||||
export const getPdffileList = (params) => post("/archivespdffile/list", params); // 档案下载重新下载
|
export const getPdffileList = (params) => post("/archivespdffile/list", params); // 档案下载重新下载
|
||||||
export const redownLoad = (params) =>
|
export const redownLoad = (params) =>
|
||||||
post("/archivespdffile/redownload", params); // 档案下载重新下载
|
post("/archivespdffile/redownload", params); // 档案下载重新下载
|
||||||
|
export const getClassStrengthenDetailsList = (params) =>
|
||||||
|
post("/class/strengthenlist", params); // 效果评估:班级列表
|
||||||
|
export const getStudentStrengthenDetailsList = (params) =>
|
||||||
|
post("/class/strengthenstudentlist", params); // 效果评估:学员列表
|
||||||
|
export const getClassEvaluation = (params) =>
|
||||||
|
post("/class/getEvaluation", params); // 获取班级效果评估表信息
|
||||||
|
export const getStudentEvaluation = (params) =>
|
||||||
|
post("/student/getEvaluation", params); // 获取个人效果评估表信息
|
||||||
|
export const downloadClassEvaluation = (params) => post("class/hs", params); // 导出班级效果评估表信息
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
v-if="data.component"
|
v-if="data.component"
|
||||||
v-model:type="data.type"
|
v-model:type="data.type"
|
||||||
:title="data.title"
|
:title="data.title"
|
||||||
|
:corp-name="data.corp_name"
|
||||||
:year="data.YEAR"
|
:year="data.YEAR"
|
||||||
/>
|
/>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
@ -53,6 +54,7 @@ import Eduplan from "./components/eduplan";
|
||||||
import Edumanager from "./components/edumanager";
|
import Edumanager from "./components/edumanager";
|
||||||
import Capital from "./components/capital";
|
import Capital from "./components/capital";
|
||||||
import { downloadAllwordzip } from "@/request/training_archive_management.js";
|
import { downloadAllwordzip } from "@/request/training_archive_management.js";
|
||||||
|
import { getEnterpriseInfo } from "@/request/enterprise_management.js";
|
||||||
|
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
list: [
|
list: [
|
||||||
|
@ -81,8 +83,14 @@ const data = reactive({
|
||||||
YEAR: dayjs().format("YYYY"),
|
YEAR: dayjs().format("YYYY"),
|
||||||
component: "",
|
component: "",
|
||||||
type: "",
|
type: "",
|
||||||
|
corp_name: "",
|
||||||
title: "",
|
title: "",
|
||||||
});
|
});
|
||||||
|
const fnGetData = async () => {
|
||||||
|
const resData = await getEnterpriseInfo();
|
||||||
|
data.corp_name = resData.pd.CORP_NAME;
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
const fnExport = debounce(
|
const fnExport = debounce(
|
||||||
1000,
|
1000,
|
||||||
async () => {
|
async () => {
|
||||||
|
|
|
@ -6,13 +6,22 @@
|
||||||
@close="fnClose"
|
@close="fnClose"
|
||||||
>
|
>
|
||||||
<div class="tr">
|
<div class="tr">
|
||||||
|
<el-button type="primary" @click="list.push({})">新增</el-button>
|
||||||
|
<el-button type="danger" @click="fnDelete">删除</el-button>
|
||||||
<el-button type="primary" @click="fnExport">导出</el-button>
|
<el-button type="primary" @click="fnExport">导出</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="tc">
|
<div class="tc">
|
||||||
<h3>{{ year }}年度培训资金提取和使用情况管理台账</h3>
|
<h3>{{ year }}年度培训资金提取和使用情况管理台账</h3>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb">单位名称:{{ name }}</p>
|
<p class="mb">单位名称:{{ corpName }}</p>
|
||||||
<layout-table :data="data.list" :show-pagination="false">
|
<layout-table
|
||||||
|
:data="list"
|
||||||
|
:show-pagination="false"
|
||||||
|
:stripe="false"
|
||||||
|
:highlight-current-row="true"
|
||||||
|
@row-click="fnRowClick"
|
||||||
|
@row-dblclick="fnRowDblclick"
|
||||||
|
>
|
||||||
<el-table-column type="index" label="序号" width="60" />
|
<el-table-column type="index" label="序号" width="60" />
|
||||||
<el-table-column prop="DATE" label="日期" />
|
<el-table-column prop="DATE" label="日期" />
|
||||||
<el-table-column label="费用项目">
|
<el-table-column label="费用项目">
|
||||||
|
@ -32,6 +41,43 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="BALANCE" label="余额" />
|
<el-table-column prop="BALANCE" label="余额" />
|
||||||
</layout-table>
|
</layout-table>
|
||||||
|
<table class="print_use dn">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="2">序号</td>
|
||||||
|
<td rowspan="2">日期</td>
|
||||||
|
<td colspan="9">费用项目</td>
|
||||||
|
<td rowspan="2">余额</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>提取金额</td>
|
||||||
|
<td>培训教材教具费</td>
|
||||||
|
<td>师资费</td>
|
||||||
|
<td>试卷印制费</td>
|
||||||
|
<td>外出培训费</td>
|
||||||
|
<td>教学设备、课桌椅等购置维护费</td>
|
||||||
|
<td>培训活动费</td>
|
||||||
|
<td>委托培训费</td>
|
||||||
|
<td>其他与培训有关的直接支出</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="(item, index) in list" :key="index">
|
||||||
|
<td>{{ index + 1 }}</td>
|
||||||
|
<td>{{ item.DATE }}</td>
|
||||||
|
<td>{{ item.AMOUNT }}</td>
|
||||||
|
<td>{{ item.MATERIAL_COST }}</td>
|
||||||
|
<td>{{ item.TEACHER_COST }}</td>
|
||||||
|
<td>{{ item.PAPER_COST }}</td>
|
||||||
|
<td>{{ item.OUTSIDE_COST }}</td>
|
||||||
|
<td>{{ item.EQUIPMENT_COST }}</td>
|
||||||
|
<td>{{ item.TRAIN_COST }}</td>
|
||||||
|
<td>{{ item.ENTRUST_COST }}</td>
|
||||||
|
<td>{{ item.OTHER_COST }}</td>
|
||||||
|
<td>{{ item.BALANCE }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
<div class="flex mt">
|
<div class="flex mt">
|
||||||
<div>制表人:</div>
|
<div>制表人:</div>
|
||||||
<div>编制日期:</div>
|
<div>编制日期:</div>
|
||||||
|
@ -45,17 +91,28 @@
|
||||||
<el-button @click="fnClose">关闭</el-button>
|
<el-button @click="fnClose">关闭</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
<capital-add
|
||||||
|
v-model:visible="data.addOrEditDialog.visible"
|
||||||
|
v-model:form="data.addOrEditDialog.form"
|
||||||
|
:type="data.addOrEditDialog.type"
|
||||||
|
:year="year"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import LayoutTable from "@/components/table/index";
|
import LayoutTable from "@/components/table/index";
|
||||||
import { reactive, watchEffect } from "vue";
|
import { nextTick, reactive, watchEffect } from "vue";
|
||||||
import { ElMessageBox } from "element-plus";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
import { debounce } from "throttle-debounce";
|
import { debounce } from "throttle-debounce";
|
||||||
import {
|
import {
|
||||||
getArchivesCapitalList,
|
getArchivesCapitalList,
|
||||||
downloadFundmanageword,
|
downloadFundmanageword,
|
||||||
|
setCapitalDelete,
|
||||||
|
getCapitalView,
|
||||||
} from "@/request/training_archive_management.js";
|
} from "@/request/training_archive_management.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import capitalAdd from "./capital_add.vue";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: {
|
type: {
|
||||||
|
@ -66,31 +123,44 @@ const props = defineProps({
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
CORPINFO_ID: {
|
|
||||||
type: String,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
name: {
|
|
||||||
type: String,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
year: {
|
year: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
corpName: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
list: [],
|
ARCHIVESCAPITAL_ID: "",
|
||||||
|
addOrEditDialog: {
|
||||||
|
visible: false,
|
||||||
|
type: "",
|
||||||
|
form: {
|
||||||
|
DATE: "",
|
||||||
|
AMOUNT: "",
|
||||||
|
MATERIAL_COST: "",
|
||||||
|
TEACHER_COST: "",
|
||||||
|
PAPER_COST: "",
|
||||||
|
OUTSIDE_COST: "",
|
||||||
|
EQUIPMENT_COST: "",
|
||||||
|
TRAIN_COST: "",
|
||||||
|
ENTRUST_COST: "",
|
||||||
|
OTHER_COST: "",
|
||||||
|
BALANCE: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const emits = defineEmits(["update:type"]);
|
const emits = defineEmits(["update:type"]);
|
||||||
const fnGetData = async () => {
|
const { list, fnGetData } = useListData(getArchivesCapitalList, {
|
||||||
const resData = await getArchivesCapitalList({
|
otherParams: {
|
||||||
TYPE: props.type,
|
TYPE: props.type,
|
||||||
CORPINFO_ID: props.CORPINFO_ID,
|
|
||||||
YEAR: props.year,
|
YEAR: props.year,
|
||||||
});
|
},
|
||||||
data.list = resData.varList;
|
usePagination: false,
|
||||||
};
|
immediate: false,
|
||||||
|
});
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
if (props.type === 105) fnGetData();
|
if (props.type === 105) fnGetData();
|
||||||
});
|
});
|
||||||
|
@ -100,8 +170,7 @@ const fnExport = debounce(
|
||||||
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
||||||
await downloadFundmanageword({
|
await downloadFundmanageword({
|
||||||
YEAR: props.year,
|
YEAR: props.year,
|
||||||
CORPINFO_ID: props.CORPINFO_ID,
|
NAME: props.corpName,
|
||||||
NAME: props.name,
|
|
||||||
});
|
});
|
||||||
await ElMessageBox.confirm(
|
await ElMessageBox.confirm(
|
||||||
"导出后请前往档案下载中下载该档案!",
|
"导出后请前往档案下载中下载该档案!",
|
||||||
|
@ -111,6 +180,35 @@ const fnExport = debounce(
|
||||||
},
|
},
|
||||||
{ atBegin: true }
|
{ atBegin: true }
|
||||||
);
|
);
|
||||||
|
const fnRowClick = (row) => {
|
||||||
|
data.ARCHIVESCAPITAL_ID = row.ARCHIVESCAPITAL_ID;
|
||||||
|
};
|
||||||
|
const fnRowDblclick = async (row) => {
|
||||||
|
data.addOrEditDialog.visible = true;
|
||||||
|
await nextTick();
|
||||||
|
if (row.ARCHIVESCAPITAL_ID) {
|
||||||
|
const resData = await getCapitalView({
|
||||||
|
ARCHIVESCAPITAL_ID: row.ARCHIVESCAPITAL_ID,
|
||||||
|
});
|
||||||
|
data.addOrEditDialog.form = resData.pd;
|
||||||
|
data.addOrEditDialog.type = "edit";
|
||||||
|
} else data.addOrEditDialog.type = "add";
|
||||||
|
};
|
||||||
|
const fnDelete = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
if (data.ARCHIVESCAPITAL_ID) {
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setCapitalDelete({
|
||||||
|
ARCHIVESCAPITAL_ID: data.ARCHIVESCAPITAL_ID,
|
||||||
|
});
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
}
|
||||||
|
data.ARCHIVESCAPITAL_ID = "";
|
||||||
|
fnGetData();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
const fnClose = () => {
|
const fnClose = () => {
|
||||||
emits("update:type", 0);
|
emits("update:type", 0);
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,153 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="visible"
|
||||||
|
:append-to-body="true"
|
||||||
|
:title="type === 'edit' ? '修改' : '新增'"
|
||||||
|
:on-close="fnClose"
|
||||||
|
>
|
||||||
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="220px">
|
||||||
|
<el-form-item label="日期" prop="DATE">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.DATE"
|
||||||
|
type="date"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="提取金额 " prop="AMOUNT">
|
||||||
|
<el-input v-model="form.AMOUNT" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="项目类型 " prop="ITEM_TYPE">
|
||||||
|
<el-input v-model="form.ITEM_TYPE" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="培训教材教具费" prop="MATERIAL_COST">
|
||||||
|
<el-input v-model="form.MATERIAL_COST" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="师资费 " prop="TEACHER_COST">
|
||||||
|
<el-input v-model="form.TEACHER_COST" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="试卷印制费 " prop="PAPER_COST">
|
||||||
|
<el-input v-model="form.PAPER_COST" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="外出培训费 " prop="OUTSIDE_COST">
|
||||||
|
<el-input v-model="form.OUTSIDE_COST" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="教学设备、课桌椅等购置维护费 " prop="EQUIPMENT_COST">
|
||||||
|
<el-input v-model="form.EQUIPMENT_COST" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="培训活动费 " prop="TRAIN_COST">
|
||||||
|
<el-input v-model="form.TRAIN_COST" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="委托培训费 " prop="ENTRUST_COST">
|
||||||
|
<el-input v-model="form.ENTRUST_COST" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="其他与培训有关的直接支出" prop="OTHER_COST">
|
||||||
|
<el-input v-model="form.OTHER_COST" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="余额" prop="BALANCE">
|
||||||
|
<el-input v-model="form.BALANCE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="fnClose">取消</el-button>
|
||||||
|
<el-button type="primary" @click="fnSubmit">确定</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useVModels } from "@vueuse/core";
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import {
|
||||||
|
setCapitalAdd,
|
||||||
|
setCapitalEdit,
|
||||||
|
} from "@/request/training_archive_management.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
type: Object,
|
||||||
|
required: true,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
year: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
|
||||||
|
const { visible, form } = useVModels(props, emits);
|
||||||
|
const rules = {
|
||||||
|
DATE: [{ required: true, message: "请选择日期", trigger: "blur" }],
|
||||||
|
AMOUNT: [{ required: true, message: "提取金额不能为空", trigger: "blur" }],
|
||||||
|
ITEM_TYPE: [{ required: true, message: "项目类型不能为空", trigger: "blur" }],
|
||||||
|
MATERIAL_COST: [
|
||||||
|
{ required: true, message: "培训教材教具费不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
TEACHER_COST: [
|
||||||
|
{ required: true, message: "师资费不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
PAPER_COST: [
|
||||||
|
{ required: true, message: "试卷印制费不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
OUTSIDE_COST: [
|
||||||
|
{ required: true, message: "外出培训费不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
EQUIPMENT_COST: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "教学设备、课桌椅等购置维护费不能为空",
|
||||||
|
trigger: "blur",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
TRAIN_COST: [
|
||||||
|
{ required: true, message: "培训活动费不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
ENTRUST_COST: [
|
||||||
|
{ required: true, message: "委托培训费不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
OTHER_COST: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "其他与培训有关的直接支出不能为空",
|
||||||
|
trigger: "blur",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
BALANCE: [{ required: true, message: "余额不能为空", trigger: "blur" }],
|
||||||
|
};
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnClose = () => {
|
||||||
|
formRef.value.resetFields();
|
||||||
|
visible.value = false;
|
||||||
|
};
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
props.type === "add"
|
||||||
|
? await setCapitalAdd({ ...props.form, YEAR: props.year })
|
||||||
|
: await setCapitalEdit({ ...props.form });
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
fnClose();
|
||||||
|
emits("get-data");
|
||||||
|
},
|
||||||
|
{
|
||||||
|
atBegin: true,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
|
@ -11,8 +11,8 @@
|
||||||
<div class="tc">
|
<div class="tc">
|
||||||
<h3>{{ year }}年度安全培训教育管理台账</h3>
|
<h3>{{ year }}年度安全培训教育管理台账</h3>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb">单位名称:{{ name }}</p>
|
<p class="mb">单位名称:{{ corpName }}</p>
|
||||||
<layout-table :data="data.list" :show-pagination="false">
|
<layout-table :data="list" :show-pagination="false">
|
||||||
<el-table-column type="index" label="序号" width="60" />
|
<el-table-column type="index" label="序号" width="60" />
|
||||||
<el-table-column prop="TRAINING_DATE" label="培训时间" />
|
<el-table-column prop="TRAINING_DATE" label="培训时间" />
|
||||||
<el-table-column prop="TRAINING_OBJECT" label="培训对象" />
|
<el-table-column prop="TRAINING_OBJECT" label="培训对象" />
|
||||||
|
@ -27,9 +27,7 @@
|
||||||
<el-table-column prop="TRAINING_CONTENT" label="培训内容" />
|
<el-table-column prop="TRAINING_CONTENT" label="培训内容" />
|
||||||
<el-table-column prop="PERSON_NUMBER" label="参加人数" />
|
<el-table-column prop="PERSON_NUMBER" label="参加人数" />
|
||||||
<el-table-column prop="CLASS_HOURS" label="培训学时" />
|
<el-table-column prop="CLASS_HOURS" label="培训学时" />
|
||||||
<el-table-column prop="TRAINING_PLACE" label="培训地点">
|
<el-table-column prop="CORP_NAME" label="培训地点" />
|
||||||
<span>{{ name }}</span>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="TRAINING_TEACHERS" label="培训教师" />
|
<el-table-column prop="TRAINING_TEACHERS" label="培训教师" />
|
||||||
<el-table-column prop="ASSESSMENT_METHOD" label="考核方式">
|
<el-table-column prop="ASSESSMENT_METHOD" label="考核方式">
|
||||||
<span>线上考核</span>
|
<span>线上考核</span>
|
||||||
|
@ -60,13 +58,14 @@
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import LayoutTable from "@/components/table/index";
|
import LayoutTable from "@/components/table/index";
|
||||||
import { reactive, watchEffect } from "vue";
|
import { watchEffect } from "vue";
|
||||||
import { ElMessageBox } from "element-plus";
|
import { ElMessageBox } from "element-plus";
|
||||||
import { debounce } from "throttle-debounce";
|
import { debounce } from "throttle-debounce";
|
||||||
import {
|
import {
|
||||||
getArchivesManagerList,
|
getArchivesManagerList,
|
||||||
downloadEdumanageword,
|
downloadEdumanageword,
|
||||||
} from "@/request/training_archive_management.js";
|
} from "@/request/training_archive_management.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: {
|
type: {
|
||||||
|
@ -77,11 +76,7 @@ const props = defineProps({
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
CORPINFO_ID: {
|
corpName: {
|
||||||
type: String,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
name: {
|
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
@ -90,19 +85,15 @@ const props = defineProps({
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const data = reactive({
|
|
||||||
list: [],
|
|
||||||
});
|
|
||||||
const emits = defineEmits(["update:type"]);
|
const emits = defineEmits(["update:type"]);
|
||||||
const fnGetData = async () => {
|
const { list, fnGetData } = useListData(getArchivesManagerList, {
|
||||||
const resData = await getArchivesManagerList({
|
otherParams: {
|
||||||
TYPE: props.type,
|
TYPE: props.type,
|
||||||
CORPINFO_ID: props.CORPINFO_ID,
|
|
||||||
YEAR: props.year,
|
YEAR: props.year,
|
||||||
});
|
},
|
||||||
|
usePagination: false,
|
||||||
data.list = resData.varList;
|
immediate: false,
|
||||||
};
|
});
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
if (props.type === 104) fnGetData();
|
if (props.type === 104) fnGetData();
|
||||||
});
|
});
|
||||||
|
@ -112,8 +103,7 @@ const fnExport = debounce(
|
||||||
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
||||||
await downloadEdumanageword({
|
await downloadEdumanageword({
|
||||||
YEAR: props.year,
|
YEAR: props.year,
|
||||||
CORPINFO_ID: props.CORPINFO_ID,
|
NAME: props.corpName,
|
||||||
NAME: props.name,
|
|
||||||
});
|
});
|
||||||
await ElMessageBox.confirm(
|
await ElMessageBox.confirm(
|
||||||
"导出后请前往档案下载中下载该档案!",
|
"导出后请前往档案下载中下载该档案!",
|
||||||
|
|
|
@ -7,15 +7,13 @@
|
||||||
>
|
>
|
||||||
<div class="tr">
|
<div class="tr">
|
||||||
<el-button type="primary" @click="fnExport">导出</el-button>
|
<el-button type="primary" @click="fnExport">导出</el-button>
|
||||||
<el-button type="primary" @click="data.dialogForFile = true"
|
<el-button type="primary" @click="fnImport">上传文件</el-button>
|
||||||
>上传文件</el-button
|
|
||||||
>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="tc">
|
<div class="tc">
|
||||||
<h3>{{ year }}年度安全培训教育计划</h3>
|
<h3>{{ year }}年度安全培训教育计划</h3>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb">单位名称:{{ name }}</p>
|
<p class="mb">单位名称:{{ corpName }}</p>
|
||||||
<layout-table :data="data.list" :show-pagination="false">
|
<layout-table :data="list" :show-pagination="false">
|
||||||
<el-table-column type="index" label="序号" width="60" />
|
<el-table-column type="index" label="序号" width="60" />
|
||||||
<el-table-column prop="START_TIME" label="开始时间" />
|
<el-table-column prop="START_TIME" label="开始时间" />
|
||||||
<el-table-column prop="END_TIME" label="结束时间" />
|
<el-table-column prop="END_TIME" label="结束时间" />
|
||||||
|
@ -28,9 +26,7 @@
|
||||||
<span>线上考核</span>
|
<span>线上考核</span>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="CLASSHOUR" label="学时" />
|
<el-table-column prop="CLASSHOUR" label="学时" />
|
||||||
<el-table-column prop="PLACE" label="地点">
|
<el-table-column prop="CORP_NAME" label="地点" />
|
||||||
<span>{{ name }}</span>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="TRAINING_TEACHERS" label="培训教师" />
|
<el-table-column prop="TRAINING_TEACHERS" label="培训教师" />
|
||||||
<el-table-column prop="FUND_GUARANTEE" label="经费保障">
|
<el-table-column prop="FUND_GUARANTEE" label="经费保障">
|
||||||
<span>安全生产投入</span>
|
<span>安全生产投入</span>
|
||||||
|
@ -43,28 +39,9 @@
|
||||||
<div>档案管理人员:</div>
|
<div>档案管理人员:</div>
|
||||||
<div>更新日期:</div>
|
<div>更新日期:</div>
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer> <el-button @click="fnClose">关闭</el-button> </template>
|
||||||
<el-button @click="fnClose">关闭</el-button>
|
|
||||||
</template>
|
|
||||||
<el-dialog
|
|
||||||
v-model:visible="data.dialogForFile"
|
|
||||||
:title="'安全培训教育计划'"
|
|
||||||
top="50px"
|
|
||||||
width="1200px"
|
|
||||||
append-to-body
|
|
||||||
>
|
|
||||||
<file
|
|
||||||
v-if="data.dialogForFile"
|
|
||||||
:id="CORPINFO_ID"
|
|
||||||
:year="year"
|
|
||||||
:type="103"
|
|
||||||
/>
|
|
||||||
<template #footer>
|
|
||||||
<el-button @click="data.dialogForFile = false">关闭</el-button>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
<pdf
|
<pdf
|
||||||
v-if="data.dialogForFile"
|
v-model:visible="data.dialogForFile.visible"
|
||||||
:title="'安全培训教育计划'"
|
:title="'安全培训教育计划'"
|
||||||
:type="103"
|
:type="103"
|
||||||
:year="year"
|
:year="year"
|
||||||
|
@ -82,6 +59,7 @@ import {
|
||||||
downloadTrainingplanword,
|
downloadTrainingplanword,
|
||||||
} from "@/request/training_archive_management.js";
|
} from "@/request/training_archive_management.js";
|
||||||
import Pdf from "./pdf.vue";
|
import Pdf from "./pdf.vue";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: {
|
type: {
|
||||||
|
@ -92,11 +70,7 @@ const props = defineProps({
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
id: {
|
corpName: {
|
||||||
type: String,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
name: {
|
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
@ -106,19 +80,16 @@ const props = defineProps({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
list: [],
|
dialogForFile: {
|
||||||
dialogForFile: false,
|
visible: false,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const emits = defineEmits(["update:type"]);
|
const emits = defineEmits(["update:type"]);
|
||||||
const fnGetData = async () => {
|
const { list, fnGetData } = useListData(getArchivesPlanList, {
|
||||||
const resData = await getArchivesPlanList({
|
otherParams: { TYPE: props.type, YEAR: props.year },
|
||||||
TYPE: props.type,
|
usePagination: false,
|
||||||
CORPINFO_ID: props.CORPINFO_ID,
|
immediate: false,
|
||||||
ENTERPRISE_ID: props.ENTERPRISE_ID,
|
});
|
||||||
YEAR: props.year,
|
|
||||||
});
|
|
||||||
data.list = resData.varList;
|
|
||||||
};
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
if (props.type === 103) fnGetData();
|
if (props.type === 103) fnGetData();
|
||||||
});
|
});
|
||||||
|
@ -128,8 +99,6 @@ const fnExport = debounce(
|
||||||
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
||||||
await downloadTrainingplanword({
|
await downloadTrainingplanword({
|
||||||
YEAR: props.year,
|
YEAR: props.year,
|
||||||
CORPINFO_ID: props.CORPINFO_ID,
|
|
||||||
ENTERPRISE_ID: props.ENTERPRISE_ID,
|
|
||||||
NAME: props.name,
|
NAME: props.name,
|
||||||
});
|
});
|
||||||
await ElMessageBox.confirm(
|
await ElMessageBox.confirm(
|
||||||
|
@ -140,6 +109,9 @@ const fnExport = debounce(
|
||||||
},
|
},
|
||||||
{ atBegin: true }
|
{ atBegin: true }
|
||||||
);
|
);
|
||||||
|
const fnImport = () => {
|
||||||
|
data.dialogForFile.visible = !data.dialogForFile.visible;
|
||||||
|
};
|
||||||
const fnClose = () => {
|
const fnClose = () => {
|
||||||
emits("update:type", 0);
|
emits("update:type", 0);
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,17 +1,30 @@
|
||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
|
v-model="visible"
|
||||||
:title="title"
|
:title="title"
|
||||||
:model-value="
|
:model-value="
|
||||||
type === 1 || type === 2 || type === 3 || type === 4 || type === 103
|
type === 1 || type === 2 || type === 3 || type === 4 || visible
|
||||||
"
|
"
|
||||||
width="1100px"
|
width="1100px"
|
||||||
@close="fnClose"
|
@close="fnClose"
|
||||||
>
|
>
|
||||||
|
<div>
|
||||||
|
<layout-upload
|
||||||
|
:file-list="[]"
|
||||||
|
auto-upload
|
||||||
|
:http-request="fnUpload"
|
||||||
|
accept=".pdf"
|
||||||
|
:show-file-list="false"
|
||||||
|
:limit="999"
|
||||||
|
>
|
||||||
|
<template #tip>只能上传pdf文件</template>
|
||||||
|
</layout-upload>
|
||||||
|
</div>
|
||||||
<div class="content-flex">
|
<div class="content-flex">
|
||||||
<div class="content-left">
|
<div class="content-left">
|
||||||
<el-scrollbar style="height: 600px">
|
<el-scrollbar style="height: 600px">
|
||||||
<layout-table
|
<layout-table
|
||||||
:data="data.list"
|
:data="list"
|
||||||
:show-header="false"
|
:show-header="false"
|
||||||
:show-pagination="false"
|
:show-pagination="false"
|
||||||
:border="false"
|
:border="false"
|
||||||
|
@ -20,16 +33,26 @@
|
||||||
@row-click="fnRowClick"
|
@row-click="fnRowClick"
|
||||||
>
|
>
|
||||||
<el-table-column prop="FILE_NAME" />
|
<el-table-column prop="FILE_NAME" />
|
||||||
|
<el-table-column label="操作">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button type="primary" text link @click.stop="fnDelete(row)">
|
||||||
|
<el-icon color="red" class="mr-10">
|
||||||
|
<delete />
|
||||||
|
</el-icon>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</layout-table>
|
</layout-table>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
<div class="content-right">
|
<div class="content-right">
|
||||||
<div v-if="!data.pdfSrc" class="content-tip">
|
<div v-if="!pdfSrc" class="content-tip">
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div class="icon">
|
<div class="icon">
|
||||||
<icon-file-pdf-one
|
<icon-file-pdf-one
|
||||||
theme="filled"
|
theme="filled"
|
||||||
size="60"
|
size="50"
|
||||||
fill="#fff"
|
fill="#fff"
|
||||||
:stroke-width="3"
|
:stroke-width="3"
|
||||||
/>
|
/>
|
||||||
|
@ -40,16 +63,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-scrollbar style="height: 600px">
|
<layout-pdf v-if="pdfSrc" :src="pdfSrc" model="normal" />
|
||||||
<div v-if="data.pdfSrc">
|
|
||||||
<vue-pdf
|
|
||||||
v-for="page in data.numOfPages"
|
|
||||||
:key="page"
|
|
||||||
:src="data.pdfSrc"
|
|
||||||
:page="page"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</el-scrollbar>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
@ -59,13 +73,26 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import LayoutTable from "@/components/table/index";
|
import {
|
||||||
import { nextTick, reactive, watchEffect } from "vue";
|
getArchivesFilesList,
|
||||||
import { VuePdf, createLoadingTask } from "vue3-pdfjs/esm";
|
setArchivesFilesDelete,
|
||||||
import { getArchivesfilesList } from "@/request/training_archive_management.js";
|
setArchivesFilesUpload,
|
||||||
|
} from "@/request/training_archive_management.js";
|
||||||
|
import LayoutUpload from "@/components/upload/index.vue";
|
||||||
|
import LayoutPdf from "@/components/pdf/index.vue";
|
||||||
|
import { ref, watchEffect } from "vue";
|
||||||
|
import { Delete } from "@element-plus/icons-vue";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import { useVModels } from "@vueuse/core";
|
||||||
|
|
||||||
const FILE_URL = import.meta.env.VITE_FILE_URL;
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
type: {
|
type: {
|
||||||
type: Number,
|
type: Number,
|
||||||
required: true,
|
required: true,
|
||||||
|
@ -74,7 +101,7 @@ const props = defineProps({
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
CORPINFO_ID: {
|
corpName: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
@ -83,21 +110,14 @@ const props = defineProps({
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const data = reactive({
|
const emits = defineEmits(["update:visible", "update:type"]);
|
||||||
list: [],
|
const { visible } = useVModels(props, emits);
|
||||||
pdfSrc: "",
|
const pdfSrc = ref("");
|
||||||
numOfPages: 0,
|
const { list, fnGetData } = useListData(getArchivesFilesList, {
|
||||||
|
otherParams: { TYPE: props.type, YEAR: props.year },
|
||||||
|
usePagination: false,
|
||||||
|
immediate: false,
|
||||||
});
|
});
|
||||||
const emits = defineEmits(["update:type"]);
|
|
||||||
const fnGetData = async () => {
|
|
||||||
const resData = await getArchivesfilesList({
|
|
||||||
TYPE: props.type,
|
|
||||||
YEAR: props.year,
|
|
||||||
CORPINFO_ID: props.CORPINFO_ID,
|
|
||||||
MODULE: "corp",
|
|
||||||
});
|
|
||||||
data.list = resData.varList;
|
|
||||||
};
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
if (
|
if (
|
||||||
props.type === 1 ||
|
props.type === 1 ||
|
||||||
|
@ -106,21 +126,38 @@ watchEffect(() => {
|
||||||
props.type === 4 ||
|
props.type === 4 ||
|
||||||
props.type === 103
|
props.type === 103
|
||||||
)
|
)
|
||||||
fnGetData();
|
fnGetData({ TYPE: props.type, YEAR: props.year });
|
||||||
});
|
});
|
||||||
|
const fnUpload = async (item) => {
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("FFILE", item.file);
|
||||||
|
formData.append("TYPE", props.type);
|
||||||
|
formData.append("YEAR", props.year);
|
||||||
|
await setArchivesFilesUpload(formData);
|
||||||
|
fnGetData({ TYPE: props.type, YEAR: props.year });
|
||||||
|
};
|
||||||
|
const fnDelete = debounce(
|
||||||
|
1000,
|
||||||
|
async ({ ARCHIVESFILES_ID, FILE_PATH }) => {
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", {
|
||||||
|
type: "warning",
|
||||||
|
});
|
||||||
|
await setArchivesFilesDelete({
|
||||||
|
ARCHIVESFILES_ID,
|
||||||
|
FILE_PATH,
|
||||||
|
});
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnGetData({ TYPE: props.type, YEAR: props.year });
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
const fnRowClick = async (row) => {
|
const fnRowClick = async (row) => {
|
||||||
data.pdfSrc = "";
|
pdfSrc.value = row.FILE_PATH;
|
||||||
await nextTick();
|
|
||||||
data.pdfSrc = FILE_URL + row.FILE_PATH;
|
|
||||||
const loadingTask = createLoadingTask(FILE_URL + row.FILE_PATH);
|
|
||||||
loadingTask.promise.then((pdf) => {
|
|
||||||
data.numOfPages = pdf.numPages;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
const fnClose = () => {
|
const fnClose = () => {
|
||||||
data.pdfSrc = "";
|
pdfSrc.value = "";
|
||||||
data.numOfPages = 0;
|
|
||||||
emits("update:type", 0);
|
emits("update:type", 0);
|
||||||
|
visible.value = false;
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,23 @@
|
||||||
@close="fnClose"
|
@close="fnClose"
|
||||||
>
|
>
|
||||||
<div class="tr">
|
<div class="tr">
|
||||||
|
<el-button type="primary" @click="list.push({})">新增</el-button>
|
||||||
|
<el-button type="danger" @click="fnDelete">删除</el-button>
|
||||||
|
<el-button type="primary" @click="fnImport">导入</el-button>
|
||||||
<el-button type="primary" @click="fnExport">导出</el-button>
|
<el-button type="primary" @click="fnExport">导出</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="tc">
|
<div class="tc">
|
||||||
<h3>{{ year }}年度三岗人员管理台账</h3>
|
<h3>{{ year }}年度三岗人员管理台账</h3>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb">单位名称:{{ name }}</p>
|
<p class="mb">单位名称:{{ corpName }}</p>
|
||||||
<layout-table :data="data.list" :show-pagination="false">
|
<layout-table
|
||||||
|
:data="list"
|
||||||
|
:show-pagination="false"
|
||||||
|
:stripe="false"
|
||||||
|
:highlight-current-row="true"
|
||||||
|
@row-click="fnRowClick"
|
||||||
|
@row-dblclick="fnRowDblclick"
|
||||||
|
>
|
||||||
<el-table-column type="index" label="序号" width="60" />
|
<el-table-column type="index" label="序号" width="60" />
|
||||||
<el-table-column prop="NAME" label="姓名" />
|
<el-table-column prop="NAME" label="姓名" />
|
||||||
<el-table-column prop="POST" label="岗位/操作项目" />
|
<el-table-column prop="POST" label="岗位/操作项目" />
|
||||||
|
@ -30,12 +40,31 @@
|
||||||
<el-table-column prop="CARD_ID" label="证书号" />
|
<el-table-column prop="CARD_ID" label="证书号" />
|
||||||
<el-table-column prop="EFFECTIVE_DATE" label="证书有效期限" />
|
<el-table-column prop="EFFECTIVE_DATE" label="证书有效期限" />
|
||||||
<el-table-column prop="RETRAINING" label="复训日期" />
|
<el-table-column prop="RETRAINING" label="复训日期" />
|
||||||
<el-table-column prop="RETRAINING" label="操作" align="center">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-button type="primary" @click="handleEdit(row)">编辑</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</layout-table>
|
</layout-table>
|
||||||
|
<table class="print_use dn">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td>序号</td>
|
||||||
|
<td>姓名</td>
|
||||||
|
<td>岗位/操作项目</td>
|
||||||
|
<td>电话</td>
|
||||||
|
<td>证书号</td>
|
||||||
|
<td>证书有效期限</td>
|
||||||
|
<td>复训日期</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="(item, index) in list" :key="index">
|
||||||
|
<td>{{ index + 1 }}</td>
|
||||||
|
<td>{{ item.NAME }}</td>
|
||||||
|
<td>{{ item.POST }}</td>
|
||||||
|
<td>{{ item.PHONE }}</td>
|
||||||
|
<td>{{ item.CARD_ID }}</td>
|
||||||
|
<td>{{ item.EFFECTIVE_DATE }}</td>
|
||||||
|
<td>{{ item.RETRAINING }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
<div class="flex mt">
|
<div class="flex mt">
|
||||||
<div>档案管理人员:</div>
|
<div>档案管理人员:</div>
|
||||||
<div>更新日期:</div>
|
<div>更新日期:</div>
|
||||||
|
@ -43,18 +72,36 @@
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="fnClose">关闭</el-button>
|
<el-button @click="fnClose">关闭</el-button>
|
||||||
</template>
|
</template>
|
||||||
|
<postman-add
|
||||||
|
v-model:visible="data.addOrEditDialog.visible"
|
||||||
|
v-model:form="data.addOrEditDialog.form"
|
||||||
|
:type="data.addOrEditDialog.type"
|
||||||
|
:year="year"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
/>
|
||||||
|
<layout-import-file
|
||||||
|
v-model:visible="data.importDialogVisible"
|
||||||
|
template-url="/TrafficFile/template/post.xls"
|
||||||
|
@submit="fnSubmitImport"
|
||||||
|
/>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import LayoutTable from "@/components/table/index";
|
import LayoutTable from "@/components/table/index";
|
||||||
import { reactive, watchEffect } from "vue";
|
import { nextTick, reactive, watchEffect } from "vue";
|
||||||
import { ElMessageBox } from "element-plus";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
import { debounce } from "throttle-debounce";
|
import { debounce } from "throttle-debounce";
|
||||||
import {
|
import {
|
||||||
getArchivesPostmanList,
|
getArchivesPostmanList,
|
||||||
downloadPersonmanage,
|
downloadPersonmanage,
|
||||||
|
getPostmanView,
|
||||||
|
setPostmanDelete,
|
||||||
|
setPostmanImport,
|
||||||
} from "@/request/training_archive_management.js";
|
} from "@/request/training_archive_management.js";
|
||||||
|
import PostmanAdd from "./postman_add.vue";
|
||||||
|
import LayoutImportFile from "@/components/import_file/index.vue";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
|
||||||
const FILE_URL = import.meta.env.VITE_FILE_URL;
|
const FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
@ -66,31 +113,37 @@ const props = defineProps({
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
CORPINFO_ID: {
|
|
||||||
type: String,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
year: {
|
year: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
name: {
|
corpName: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
list: [],
|
importDialogVisible: false,
|
||||||
|
ARCHIVES_POSTMAN_ID: "",
|
||||||
|
addOrEditDialog: {
|
||||||
|
visible: false,
|
||||||
|
type: "",
|
||||||
|
form: {
|
||||||
|
NAME: "",
|
||||||
|
POST: "",
|
||||||
|
PHONE: "",
|
||||||
|
CARD_ID: "",
|
||||||
|
EFFECTIVE_DATE: "",
|
||||||
|
RETRAINING: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const emits = defineEmits(["update:type"]);
|
const emits = defineEmits(["update:type"]);
|
||||||
const fnGetData = async () => {
|
const { list, fnGetData } = useListData(getArchivesPostmanList, {
|
||||||
const resData = await getArchivesPostmanList({
|
otherParams: { TYPE: props.type, YEAR: props.year },
|
||||||
TYPE: props.type,
|
usePagination: false,
|
||||||
CORPINFO_ID: props.CORPINFO_ID,
|
immediate: false,
|
||||||
YEAR: props.year,
|
});
|
||||||
});
|
|
||||||
data.list = resData.varList;
|
|
||||||
};
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
if (props.type === 101) fnGetData();
|
if (props.type === 101) fnGetData();
|
||||||
});
|
});
|
||||||
|
@ -100,8 +153,7 @@ const fnExport = debounce(
|
||||||
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
||||||
await downloadPersonmanage({
|
await downloadPersonmanage({
|
||||||
YEAR: props.year,
|
YEAR: props.year,
|
||||||
CORPINFO_ID: props.CORPINFO_ID,
|
NAME: props.corpName,
|
||||||
NAME: props.name,
|
|
||||||
});
|
});
|
||||||
await ElMessageBox.confirm(
|
await ElMessageBox.confirm(
|
||||||
"导出后请前往档案下载中下载该档案!",
|
"导出后请前往档案下载中下载该档案!",
|
||||||
|
@ -111,6 +163,42 @@ const fnExport = debounce(
|
||||||
},
|
},
|
||||||
{ atBegin: true }
|
{ atBegin: true }
|
||||||
);
|
);
|
||||||
|
const fnRowClick = (row) => {
|
||||||
|
data.ARCHIVES_POSTMAN_ID = row.ARCHIVES_POSTMAN_ID;
|
||||||
|
};
|
||||||
|
const fnRowDblclick = async (row) => {
|
||||||
|
data.addOrEditDialog.visible = true;
|
||||||
|
await nextTick();
|
||||||
|
if (row.ARCHIVES_POSTMAN_ID) {
|
||||||
|
const resData = await getPostmanView({
|
||||||
|
ARCHIVES_POSTMAN_ID: row.ARCHIVES_POSTMAN_ID,
|
||||||
|
});
|
||||||
|
data.addOrEditDialog.form = resData.pd;
|
||||||
|
data.addOrEditDialog.type = "edit";
|
||||||
|
} else data.addOrEditDialog.type = "add";
|
||||||
|
};
|
||||||
|
const fnDelete = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
if (data.ARCHIVES_POSTMAN_ID) {
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setPostmanDelete({
|
||||||
|
ARCHIVES_POSTMAN_ID: data.ARCHIVES_POSTMAN_ID,
|
||||||
|
});
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
}
|
||||||
|
data.ARCHIVES_POSTMAN_ID = "";
|
||||||
|
fnGetData();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnImport = () => {
|
||||||
|
data.importDialogVisible = !data.importDialogVisible;
|
||||||
|
};
|
||||||
|
const fnSubmitImport = async (formData) => {
|
||||||
|
const resData = await setPostmanImport(formData);
|
||||||
|
ElMessage.success(resData.msg);
|
||||||
|
};
|
||||||
const fnClose = () => {
|
const fnClose = () => {
|
||||||
emits("update:type", 0);
|
emits("update:type", 0);
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="visible"
|
||||||
|
:append-to-body="true"
|
||||||
|
:title="type === 'edit' ? '修改' : '新增'"
|
||||||
|
:on-close="fnClose"
|
||||||
|
>
|
||||||
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
|
||||||
|
<el-form-item label="姓名" prop="NAME">
|
||||||
|
<el-input v-model="form.NAME" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="岗位/操作项目" prop="POST">
|
||||||
|
<el-input v-model="form.POST" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="手机号" prop="PHONE">
|
||||||
|
<el-input v-model="form.PHONE" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="照片" prop="hideUpload">
|
||||||
|
<layout-upload
|
||||||
|
v-model:file-list="form.hideUpload"
|
||||||
|
accept=".jpg,.jpeg,.png"
|
||||||
|
list-type="picture-card"
|
||||||
|
:limit="1"
|
||||||
|
delete-to-server
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="证书号" prop="CARD_ID">
|
||||||
|
<el-input v-model="form.CARD_ID" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="证书有效期限" prop="EFFECTIVE_DATE">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.EFFECTIVE_DATE"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="复训日期" prop="RETRAINING">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.RETRAINING"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="fnClose">取消</el-button>
|
||||||
|
<el-button type="primary" @click="fnSubmit">确定</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useVModels } from "@vueuse/core";
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import {
|
||||||
|
setPostmanAdd,
|
||||||
|
setPostmanEdit,
|
||||||
|
} from "@/request/training_archive_management.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import LayoutUpload from "@/components/upload/index.vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
type: Object,
|
||||||
|
required: true,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
year: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
|
||||||
|
const { visible, form } = useVModels(props, emits);
|
||||||
|
const rules = {
|
||||||
|
NAME: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
|
||||||
|
POST: [{ required: true, message: "岗位/操作项目不能为空", trigger: "blur" }],
|
||||||
|
PHONE: [
|
||||||
|
{ required: true, message: "手机号不能为空", trigger: "blur" },
|
||||||
|
{
|
||||||
|
pattern:
|
||||||
|
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
|
||||||
|
message: "请输入正确的手机号",
|
||||||
|
trigger: "blur",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
hideUpload: [{ required: true, message: "照片不能为空", trigger: "blur" }],
|
||||||
|
CARD_ID: [{ required: true, message: "证书号不能为空", trigger: "blur" }],
|
||||||
|
EFFECTIVE_DATE: [
|
||||||
|
{ required: true, message: "请选择证书有效期限", trigger: "change" },
|
||||||
|
],
|
||||||
|
RETRAINING: [
|
||||||
|
{ required: true, message: "请选择复训日期", trigger: "change" },
|
||||||
|
],
|
||||||
|
};
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnClose = () => {
|
||||||
|
formRef.value.resetFields();
|
||||||
|
visible.value = false;
|
||||||
|
};
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
const formData = new FormData();
|
||||||
|
Object.keys(props.form).forEach((key) => {
|
||||||
|
formData.append(key, props.form[key]);
|
||||||
|
});
|
||||||
|
if (props.form.hideUpload[0].raw) {
|
||||||
|
formData.append("FFILE", props.form.hideUpload[0].raw);
|
||||||
|
}
|
||||||
|
formData.append("YEAR", props.year);
|
||||||
|
props.type === "add"
|
||||||
|
? await setPostmanAdd(formData)
|
||||||
|
: await setPostmanEdit(formData);
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
fnClose();
|
||||||
|
emits("get-data");
|
||||||
|
},
|
||||||
|
{
|
||||||
|
atBegin: true,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
|
@ -11,8 +11,8 @@
|
||||||
<div class="tc">
|
<div class="tc">
|
||||||
<h3>{{ year }}年度本单位师资管理台账</h3>
|
<h3>{{ year }}年度本单位师资管理台账</h3>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb">单位名称:{{ name }}</p>
|
<p class="mb">单位名称:{{ corpName }}</p>
|
||||||
<layout-table :data="data.list" :show-pagination="false">
|
<layout-table :data="list" :show-pagination="false">
|
||||||
<el-table-column type="index" label="序号" width="60" />
|
<el-table-column type="index" label="序号" width="60" />
|
||||||
<el-table-column prop="NAME" label="姓名" />
|
<el-table-column prop="NAME" label="姓名" />
|
||||||
<el-table-column prop="WORKYEAR" label="从事本专业工作年限" />
|
<el-table-column prop="WORKYEAR" label="从事本专业工作年限" />
|
||||||
|
@ -37,13 +37,14 @@
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import LayoutTable from "@/components/table/index";
|
import LayoutTable from "@/components/table/index";
|
||||||
import { reactive, watchEffect } from "vue";
|
import { watchEffect } from "vue";
|
||||||
import { ElMessageBox } from "element-plus";
|
import { ElMessageBox } from "element-plus";
|
||||||
import { debounce } from "throttle-debounce";
|
import { debounce } from "throttle-debounce";
|
||||||
import {
|
import {
|
||||||
getArchivesTeacherList,
|
getArchivesTeacherList,
|
||||||
downloadTeacherword,
|
downloadTeacherword,
|
||||||
} from "@/request/training_archive_management.js";
|
} from "@/request/training_archive_management.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: {
|
type: {
|
||||||
|
@ -54,11 +55,7 @@ const props = defineProps({
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
CORPINFO_ID: {
|
corpName: {
|
||||||
type: String,
|
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
name: {
|
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
@ -67,18 +64,12 @@ const props = defineProps({
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const data = reactive({
|
|
||||||
list: [],
|
|
||||||
});
|
|
||||||
const emits = defineEmits(["update:type"]);
|
const emits = defineEmits(["update:type"]);
|
||||||
const fnGetData = async () => {
|
const { list, fnGetData } = useListData(getArchivesTeacherList, {
|
||||||
const resData = await getArchivesTeacherList({
|
otherParams: { TYPE: props.type, YEAR: props.year },
|
||||||
TYPE: props.type,
|
usePagination: false,
|
||||||
CORPINFO_ID: props.CORPINFO_ID,
|
immediate: false,
|
||||||
YEAR: props.year,
|
});
|
||||||
});
|
|
||||||
data.list = resData.varList;
|
|
||||||
};
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
if (props.type === 102) fnGetData();
|
if (props.type === 102) fnGetData();
|
||||||
});
|
});
|
||||||
|
@ -88,8 +79,7 @@ const fnExport = debounce(
|
||||||
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
||||||
await downloadTeacherword({
|
await downloadTeacherword({
|
||||||
YEAR: props.year,
|
YEAR: props.year,
|
||||||
CORPINFO_ID: props.CORPINFO_ID,
|
NAME: props.corpName,
|
||||||
NAME: props.name,
|
|
||||||
});
|
});
|
||||||
await ElMessageBox.confirm(
|
await ElMessageBox.confirm(
|
||||||
"导出后请前往档案下载中下载该档案!",
|
"导出后请前往档案下载中下载该档案!",
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<div id="printContent">
|
<div id="printContent">
|
||||||
<h2 class="tc">学员考核成绩统计表</h2>
|
<h2 class="tc">学员考核成绩统计表</h2>
|
||||||
<div class="flex mt mb">
|
<div class="flex mt mb">
|
||||||
<span>平台名称:{{ data.info.CORPINFO_NAME }}</span>
|
<span>平台名称:{{ corpName }}</span>
|
||||||
<span
|
<span
|
||||||
>报表日期:{{ dayjs(data.clazz.END_TIME).format("YYYY-MM-DD") }}</span
|
>报表日期:{{ dayjs(data.clazz.END_TIME).format("YYYY-MM-DD") }}</span
|
||||||
>
|
>
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
<td colspan="2">公司名称</td>
|
<td colspan="2">公司名称</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2">{{ data.clazz.CORP_INFO }}</td>
|
<td colspan="2">{{ corpName }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>培训时间</td>
|
<td>培训时间</td>
|
||||||
|
@ -173,6 +173,10 @@ const props = defineProps({
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
corpName: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
info: {},
|
info: {},
|
||||||
|
|
|
@ -9,9 +9,9 @@
|
||||||
<el-button type="primary" @click="fnExport">导出</el-button>
|
<el-button type="primary" @click="fnExport">导出</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="tc">
|
<div class="tc">
|
||||||
<h3>{{ CORP_NAME }}培训计划</h3>
|
<h3>{{ corpName }}培训计划</h3>
|
||||||
</div>
|
</div>
|
||||||
<p class="mb">单位名称:{{ CORP_INFO }}</p>
|
<p class="mb">单位名称:{{ corpName }}</p>
|
||||||
<layout-table :data="data.list" :show-pagination="false">
|
<layout-table :data="data.list" :show-pagination="false">
|
||||||
<el-table-column type="index" label="序号" width="50" />
|
<el-table-column type="index" label="序号" width="50" />
|
||||||
<el-table-column label="培训人员类型"> 从业人员 </el-table-column>
|
<el-table-column label="培训人员类型"> 从业人员 </el-table-column>
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
<el-table-column prop="TRAINING_TEACHERS" label="授课教师" />
|
<el-table-column prop="TRAINING_TEACHERS" label="授课教师" />
|
||||||
</layout-table>
|
</layout-table>
|
||||||
<div class="flex mt">
|
<div class="flex mt">
|
||||||
<div>编制单位:{{ CORP_NAME }}</div>
|
<div>编制单位:{{ corpName }}</div>
|
||||||
<div>编制日期:</div>
|
<div>编制日期:</div>
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
|
|
|
@ -6,15 +6,15 @@
|
||||||
</div>
|
</div>
|
||||||
<layout-table
|
<layout-table
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
v-model:pagination="data.pagination"
|
v-model:pagination="pagination"
|
||||||
row-key="CURRICULUM_ID"
|
row-key="CURRICULUM_ID"
|
||||||
:data="data.varlist"
|
:data="list"
|
||||||
@get-data="fnGetData"
|
@get-data="fnGetData"
|
||||||
>
|
>
|
||||||
<el-table-column reserve-selection type="selection" width="55" />
|
<el-table-column reserve-selection type="selection" width="55" />
|
||||||
<el-table-column label="序号" width="60">
|
<el-table-column label="序号" width="60">
|
||||||
<template #default="{ $index }">
|
<template #default="{ $index }">
|
||||||
{{ serialNumber(data.pagination, $index) }}
|
{{ serialNumber(pagination, $index) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="CURRICULUMNAME" label="教材名称" />
|
<el-table-column prop="CURRICULUMNAME" label="教材名称" />
|
||||||
|
@ -50,17 +50,12 @@ import {
|
||||||
getClassCurriculumList,
|
getClassCurriculumList,
|
||||||
downloadTeachingMaterialAll,
|
downloadTeachingMaterialAll,
|
||||||
} from "@/request/training_archive_management.js";
|
} from "@/request/training_archive_management.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const { CLASS_ID } = route.query;
|
const { CLASS_ID } = route.query;
|
||||||
const tableRef = ref(null);
|
const tableRef = ref(null);
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
varlist: [],
|
|
||||||
pagination: {
|
|
||||||
currentPage: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
total: 0,
|
|
||||||
},
|
|
||||||
type: 0,
|
type: 0,
|
||||||
CURRICULUM_ID: "",
|
CURRICULUM_ID: "",
|
||||||
});
|
});
|
||||||
|
@ -68,16 +63,9 @@ const fnView = (row) => {
|
||||||
data.type = 106;
|
data.type = 106;
|
||||||
data.CURRICULUM_ID = row.CURRICULUM_ID;
|
data.CURRICULUM_ID = row.CURRICULUM_ID;
|
||||||
};
|
};
|
||||||
const fnGetData = async () => {
|
const { list, pagination, fnGetData } = useListData(getClassCurriculumList, {
|
||||||
const resData = await getClassCurriculumList({
|
otherParams: { CLASS_ID },
|
||||||
currentPage: data.pagination.currentPage,
|
});
|
||||||
pageSize: data.pagination.pageSize,
|
|
||||||
CLASS_ID,
|
|
||||||
});
|
|
||||||
data.varlist = resData.varList;
|
|
||||||
data.pagination.total = resData.page.totalResult;
|
|
||||||
};
|
|
||||||
fnGetData();
|
|
||||||
const fnExport = debounce(
|
const fnExport = debounce(
|
||||||
1000,
|
1000,
|
||||||
async () => {
|
async () => {
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
<div>
|
<div>
|
||||||
<el-card>
|
<el-card>
|
||||||
<el-form
|
<el-form
|
||||||
:model="data.searchForm"
|
:model="searchForm"
|
||||||
label-width="80px"
|
label-width="80px"
|
||||||
@submit.prevent="fnResetPagination"
|
@submit.prevent="fnResetPagination"
|
||||||
>
|
>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="试卷名称" prop="KEYWORDS">
|
<el-form-item label="试卷名称" prop="KEYWORDS">
|
||||||
<el-input v-model="data.searchForm.KEYWORDS" />
|
<el-input v-model="searchForm.KEYWORDS" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
|
@ -18,10 +18,7 @@
|
||||||
<el-button native-type="reset" @click="fnResetPagination">
|
<el-button native-type="reset" @click="fnResetPagination">
|
||||||
重置
|
重置
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button v-if="list.length > 0" type="primary" @click="fnExport"
|
||||||
v-if="data.varlist.length > 0"
|
|
||||||
type="primary"
|
|
||||||
@click="fnExport"
|
|
||||||
>导出</el-button
|
>导出</el-button
|
||||||
>
|
>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
@ -30,15 +27,15 @@
|
||||||
</el-form>
|
</el-form>
|
||||||
<layout-table
|
<layout-table
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
v-model:pagination="data.pagination"
|
v-model:pagination="pagination"
|
||||||
row-key="STAGEEXAMPAPERINPUT_ID"
|
row-key="STAGEEXAMPAPERINPUT_ID"
|
||||||
:data="data.varlist"
|
:data="list"
|
||||||
@get-data="fnGetData"
|
@get-data="fnGetData"
|
||||||
>
|
>
|
||||||
<el-table-column reserve-selection type="selection" width="55" />
|
<el-table-column reserve-selection type="selection" width="55" />
|
||||||
<el-table-column label="序号" width="60">
|
<el-table-column label="序号" width="60">
|
||||||
<template #default="{ $index }">
|
<template #default="{ $index }">
|
||||||
{{ serialNumber(data.pagination, $index) }}
|
{{ serialNumber(pagination, $index) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="EXAMNAME" label="试卷名称" />
|
<el-table-column prop="EXAMNAME" label="试卷名称" />
|
||||||
|
@ -78,18 +75,12 @@ import {
|
||||||
getClassPaperList,
|
getClassPaperList,
|
||||||
downloadArchivePapers,
|
downloadArchivePapers,
|
||||||
} from "@/request/training_archive_management.js";
|
} from "@/request/training_archive_management.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const { CLASS_ID, CLASS_NAME } = route.query;
|
const { CLASS_ID, CLASS_NAME } = route.query;
|
||||||
const tableRef = ref(null);
|
const tableRef = ref(null);
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
varlist: [],
|
|
||||||
pagination: {
|
|
||||||
currentPage: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
total: 0,
|
|
||||||
},
|
|
||||||
searchForm: {},
|
|
||||||
type: 0,
|
type: 0,
|
||||||
STAGEEXAMPAPERINPUT_ID: "",
|
STAGEEXAMPAPERINPUT_ID: "",
|
||||||
});
|
});
|
||||||
|
@ -97,26 +88,8 @@ const fnView = (STAGEEXAMPAPERINPUT_ID) => {
|
||||||
data.type = 103;
|
data.type = 103;
|
||||||
data.STAGEEXAMPAPERINPUT_ID = STAGEEXAMPAPERINPUT_ID;
|
data.STAGEEXAMPAPERINPUT_ID = STAGEEXAMPAPERINPUT_ID;
|
||||||
};
|
};
|
||||||
const fnGetData = async () => {
|
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||||
const resData = await getClassPaperList({
|
useListData(getClassPaperList, { otherParams: { CLASS_ID } });
|
||||||
currentPage: data.pagination.currentPage,
|
|
||||||
pageSize: data.pagination.pageSize,
|
|
||||||
CLASS_ID,
|
|
||||||
...data.searchForm,
|
|
||||||
});
|
|
||||||
data.varlist = resData.varList;
|
|
||||||
data.pagination.total = resData.page.totalResult;
|
|
||||||
};
|
|
||||||
fnGetData();
|
|
||||||
const fnResetPagination = () => {
|
|
||||||
data.pagination = {
|
|
||||||
currentPage: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
total: 0,
|
|
||||||
};
|
|
||||||
tableRef.value.clearSelection();
|
|
||||||
fnGetData();
|
|
||||||
};
|
|
||||||
const fnExport = debounce(
|
const fnExport = debounce(
|
||||||
1000,
|
1000,
|
||||||
async () => {
|
async () => {
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="4">
|
||||||
<el-form-item label-width="10px">
|
<el-form-item label-width="10px">
|
||||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||||
<el-button native-type="reset" @click="fnResetPagination">
|
<el-button native-type="reset" @click="fnResetPagination">
|
||||||
|
@ -23,6 +23,14 @@
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-form-item label-width="10px">
|
||||||
|
<el-button type="primary" @click="fnBatchDownload">
|
||||||
|
下载补充档案
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label-width="10px">
|
||||||
|
<el-button type="primary"> 班级档案 </el-button>
|
||||||
|
</el-form-item>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
@ -83,12 +91,42 @@ import { serialNumber } from "@/assets/js/utils.js";
|
||||||
import useListData from "@/assets/js/useListData.js";
|
import useListData from "@/assets/js/useListData.js";
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
|
|
||||||
import { getStudentsList } from "@/request/training_archive_management.js";
|
import {
|
||||||
|
downloadAward,
|
||||||
|
getStudentsList,
|
||||||
|
} from "@/request/training_archive_management.js";
|
||||||
import router from "@/router/index.js";
|
import router from "@/router/index.js";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
|
||||||
const tableRef = ref(null);
|
const tableRef = ref(null);
|
||||||
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||||
useListData(getStudentsList);
|
useListData(getStudentsList);
|
||||||
</script>
|
|
||||||
|
|
||||||
|
const fnBatchDownload = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
const selectionData = tableRef.value.getSelectionRows();
|
||||||
|
if (selectionData.length === 0) {
|
||||||
|
ElMessage.warning("请选中要下载的学员补充档案...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const ids = selectionData
|
||||||
|
.map((item) => {
|
||||||
|
return item.USER_ID;
|
||||||
|
})
|
||||||
|
.join(",");
|
||||||
|
await downloadAward({
|
||||||
|
ids,
|
||||||
|
});
|
||||||
|
await ElMessageBox.confirm(
|
||||||
|
"导出后请前往档案下载中下载该档案!",
|
||||||
|
"温馨提示",
|
||||||
|
{ type: "info" }
|
||||||
|
);
|
||||||
|
tableRef.value.clearSelection();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
<style scoped></style>
|
<style scoped></style>
|
||||||
|
|
|
@ -0,0 +1,211 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog v-model="visible" width="1100px" title="效果评估表">
|
||||||
|
<div class="tr mb">
|
||||||
|
<el-button type="primary" @click="fnExport">导出</el-button>
|
||||||
|
</div>
|
||||||
|
<div id="printContent">
|
||||||
|
<h1 style="text-align: center; margin-left: 60px">
|
||||||
|
安全生产教育培训动态评估报告
|
||||||
|
</h1>
|
||||||
|
<p class="p1" style="width: 100%; text-align: center">
|
||||||
|
企业名称:
|
||||||
|
{{ data.evaluationDialogForm.CORP_NAME }}
|
||||||
|
评估日期:
|
||||||
|
{{ data.evaluationDialogForm.END_TIME }}
|
||||||
|
</p>
|
||||||
|
<h3>一、评估概述</h3>
|
||||||
|
<p class="p1">
|
||||||
|
本报告旨在对{{ data.evaluationDialogForm.CORP_NAME }}公司
|
||||||
|
的安全生产培训进行动态评估,安全生产培训的目标是提高员工的安全意识和技能,促进工作场所的安全管理和事故预防。本报告将对培训的实施情况、培训效果、参与度、员工考试通过率、知识盲点以及可能的改进措施进行评估和分析。
|
||||||
|
</p>
|
||||||
|
<h3>二、评估内容</h3>
|
||||||
|
<p class="p1">
|
||||||
|
贵公司于{{ data.evaluationDialogForm.START_TIME }}时间 -
|
||||||
|
{{ data.evaluationDialogForm.END_TIME }}时间进行了{{
|
||||||
|
data.evaluationDialogForm.CLASS_NAME
|
||||||
|
}}培训,培训内容如下:{{ data.evaluationDialogForm.coursewareName }}
|
||||||
|
</p>
|
||||||
|
<h3>三、考试结果</h3>
|
||||||
|
<p class="p1">
|
||||||
|
<b
|
||||||
|
>(一)本次考试共{{
|
||||||
|
data.evaluationDialogForm.EXMA_COUNT
|
||||||
|
}}人参加,合格人数{{
|
||||||
|
data.evaluationDialogForm.PASS_COUNT
|
||||||
|
}}人,未合格人数{{
|
||||||
|
data.evaluationDialogForm.NO_PASS_COUNT
|
||||||
|
}}人,通过率{{
|
||||||
|
data.evaluationDialogForm.passRate
|
||||||
|
}}%。具体情况如下:</b
|
||||||
|
>
|
||||||
|
</p>
|
||||||
|
<div id="chart" ref="chart" style="width: 900px; height: 320px" />
|
||||||
|
<p class="p1"><b>(二)评估结果和分析</b></p>
|
||||||
|
<p class="p1">
|
||||||
|
基于评估结果和培训过程中的观察,我们对员工的知识盲点进行分析,指出可能存在的理解不足或需要加强的知识领域,主要知识盲点体现为:
|
||||||
|
</p>
|
||||||
|
<p class="p1">{{ data.evaluationDialogForm.error }}</p>
|
||||||
|
<table class="table">
|
||||||
|
<tr>
|
||||||
|
<td>标签名称</td>
|
||||||
|
<td>错误率</td>
|
||||||
|
</tr>
|
||||||
|
<tr
|
||||||
|
v-for="(value, key) in data.evaluationDialogForm.ratioMap"
|
||||||
|
:key="key"
|
||||||
|
>
|
||||||
|
<td>{{ key }}</td>
|
||||||
|
<td>{{ value }}%</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p class="p1">知识盲点对应课件为:</p>
|
||||||
|
<p class="p1">{{ data.evaluationDialogForm.errorVideoName }}</p>
|
||||||
|
<p class="p1"><b>(三)评估建议</b></p>
|
||||||
|
<p class="p1">
|
||||||
|
存在的知识盲点需要进一步加强和补充。我们建议您将重点放在弥补这些盲点上,通过进一步学习、参与讨论或与安全专家交流弥补知识盲区。
|
||||||
|
</p>
|
||||||
|
<h3>四、强化培训记录</h3>
|
||||||
|
<p class="p1"><b>(一)强化培训考试记录</b></p>
|
||||||
|
<table class="table">
|
||||||
|
<tr>
|
||||||
|
<td colspan="3">班级名称</td>
|
||||||
|
<td colspan="3">培训时间</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3">{{ data.evaluationDialogForm.CLASS_NAME }}</td>
|
||||||
|
<td colspan="3">
|
||||||
|
{{
|
||||||
|
dayjs(data.evaluationDialogForm.START_TIME).format(
|
||||||
|
"YYYY年MM月DD日"
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
-
|
||||||
|
{{
|
||||||
|
dayjs(data.evaluationDialogForm.END_TIME).format("YYYY年MM月DD日")
|
||||||
|
}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3">培训人数</td>
|
||||||
|
<td colspan="3">合格人数</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3">{{ data.evaluationDialogForm.STR_EXMA_COUNT }}</td>
|
||||||
|
<td colspan="3">{{ data.evaluationDialogForm.STR_PASS_COUNT }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">合格学员名单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="width: 10%">序号</td>
|
||||||
|
<td style="width: 15%">姓名</td>
|
||||||
|
<td style="width: 25%">身份证号</td>
|
||||||
|
<td style="width: 20%">手机号</td>
|
||||||
|
<td style="width: 10%">性别</td>
|
||||||
|
<td style="width: 25%">效果评估成绩</td>
|
||||||
|
</tr>
|
||||||
|
<tr
|
||||||
|
v-for="(value, key) in data.evaluationDialogForm.PASS_List"
|
||||||
|
:key="key"
|
||||||
|
>
|
||||||
|
<td style="width: 10%">{{ key + 1 }}</td>
|
||||||
|
<td style="width: 15%">{{ value.NAME }}</td>
|
||||||
|
<td style="width: 25%">{{ value.USER_ID_CARD }}</td>
|
||||||
|
<td style="width: 20%">{{ value.PHONE }}</td>
|
||||||
|
<td style="width: 10%">{{ value.SEX }}</td>
|
||||||
|
<td style="width: 25%">{{ value.STRENGTHENEXAMSCORE }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">未合格学员名单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td style="width: 10%">序号</td>
|
||||||
|
<td style="width: 15%">姓名</td>
|
||||||
|
<td style="width: 25%">身份证号</td>
|
||||||
|
<td style="width: 20%">手机号</td>
|
||||||
|
<td style="width: 10%">性别</td>
|
||||||
|
<td style="width: 25%">效果评估成绩</td>
|
||||||
|
</tr>
|
||||||
|
<tr
|
||||||
|
v-for="(value, key) in data.evaluationDialogForm.NO_PASS_List"
|
||||||
|
:key="key"
|
||||||
|
>
|
||||||
|
<td style="width: 10%">{{ key + 1 }}</td>
|
||||||
|
<td style="width: 15%">{{ value.NAME }}</td>
|
||||||
|
<td style="width: 25%">{{ value.USER_ID_CARD }}</td>
|
||||||
|
<td style="width: 20%">{{ value.PHONE }}</td>
|
||||||
|
<td style="width: 10%">{{ value.SEX }}</td>
|
||||||
|
<td style="width: 25%">{{ value.STRENGTHENEXAMSCORE }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="visible = false">关闭</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { reactive, watchEffect } from "vue";
|
||||||
|
import { ElMessageBox } from "element-plus";
|
||||||
|
|
||||||
|
import { getClassEvaluation } from "@/request/training_archive_management.js";
|
||||||
|
import { useVModel } from "@vueuse/core";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
const props = defineProps({
|
||||||
|
classId: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const visible = useVModel(props, "visible");
|
||||||
|
const data = reactive({
|
||||||
|
evaluationDialogForm: {},
|
||||||
|
count1: "",
|
||||||
|
count2: "",
|
||||||
|
count3: "",
|
||||||
|
});
|
||||||
|
const fnGetData = async () => {
|
||||||
|
const resData = await getClassEvaluation({
|
||||||
|
CLASS_ID: props.classId,
|
||||||
|
});
|
||||||
|
data.evaluationDialogForm = resData.pageData;
|
||||||
|
data.count1 = data.pageData.count1;
|
||||||
|
data.count2 = data.pageData.count2;
|
||||||
|
data.count3 = data.pageData.count3;
|
||||||
|
};
|
||||||
|
const fnExport = async () => {
|
||||||
|
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
||||||
|
window.location.href =
|
||||||
|
import.meta.env[import.meta.env.DEV ? "VITE_PROXY" : "VITE_BASE_URL"] +
|
||||||
|
"class/hs?CLASS_ID=" +
|
||||||
|
props.classId;
|
||||||
|
};
|
||||||
|
watchEffect(() => {
|
||||||
|
if (visible.value) fnGetData();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.flex {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
|
||||||
|
td {
|
||||||
|
border: 1px solid var(--el-border-color);
|
||||||
|
padding: 8px;
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,283 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog v-model="visible" width="1100px" title="效果评估表">
|
||||||
|
<div class="tr mb">
|
||||||
|
<el-button type="primary" @click="fnExport">导出</el-button>
|
||||||
|
</div>
|
||||||
|
<div id="printContent">
|
||||||
|
<h1 style="text-align: center; margin-left: 60px">
|
||||||
|
安全生产教育培训动态评估报告
|
||||||
|
</h1>
|
||||||
|
<p class="p1" style="width: 100%; text-align: center">
|
||||||
|
姓名: {{ data.evaluationDialogForm.NAME }}
|
||||||
|
身份证号:
|
||||||
|
{{
|
||||||
|
data.evaluationDialogForm.USER_ID_CARD
|
||||||
|
}} 评估日期:
|
||||||
|
{{ data.evaluationDialogForm.OPERATTIME }}
|
||||||
|
</p>
|
||||||
|
<h3>一、评估概述</h3>
|
||||||
|
<p class="p1">
|
||||||
|
本报告旨在评估您在最近接受的安全培训中的个人效果,并提供课程考试结果以及指出可能存在的知识盲点。安全培训的目标是提高您在工作环境中的安全意识和行为,以减少事故和伤害的发生。本报告将对您的培训参与度、知识掌握程度、课程考试成绩以及可能存在的知识盲点进行评估。
|
||||||
|
</p>
|
||||||
|
<h3>二、学员基本情况</h3>
|
||||||
|
<table
|
||||||
|
align="center"
|
||||||
|
border="1"
|
||||||
|
cellspacing="0"
|
||||||
|
width="100%"
|
||||||
|
class="table"
|
||||||
|
>
|
||||||
|
<tr>
|
||||||
|
<td style="width: 70px">姓名</td>
|
||||||
|
<td style="width: 60px">{{ data.evaluationDialogForm.NAME }}</td>
|
||||||
|
<td style="width: 55px">性别</td>
|
||||||
|
<td style="width: 80px">{{ data.evaluationDialogForm.SEX }}</td>
|
||||||
|
<td style="width: 60px">身份证号</td>
|
||||||
|
<td style="width: 150px">
|
||||||
|
{{ data.evaluationDialogForm.USER_ID_CARD }}
|
||||||
|
</td>
|
||||||
|
<td style="width: 60px">学历</td>
|
||||||
|
<td style="width: 200px">
|
||||||
|
{{ data.evaluationDialogForm.DEGREE_OF_EDUCATION }}
|
||||||
|
</td>
|
||||||
|
<td style="width: 60px">专业</td>
|
||||||
|
<td>{{ data.evaluationDialogForm.MAJOR }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>职务/职称</td>
|
||||||
|
<td>{{ data.evaluationDialogForm.DUTIES }}</td>
|
||||||
|
<td>部门</td>
|
||||||
|
<td>{{ data.evaluationDialogForm.DEPARTMENT_NAME }}</td>
|
||||||
|
<td>工种</td>
|
||||||
|
<td>{{ data.evaluationDialogForm.POST_NAME }}</td>
|
||||||
|
<td>行业类别</td>
|
||||||
|
<td>{{ data.evaluationDialogForm.INDUSTRY_ALL_NAME }}</td>
|
||||||
|
<td>联系电话</td>
|
||||||
|
<td>{{ data.evaluationDialogForm.PHONE }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>人员类型</td>
|
||||||
|
<td colspan="9">{{ data.evaluationDialogForm.PERSONNEL_TYPE }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3>三、评估内容</h3>
|
||||||
|
<p class="p1">
|
||||||
|
您在 {{ data.evaluationDialogForm.START_TIME }} -
|
||||||
|
{{ data.evaluationDialogForm.END_TIME }} 进行了
|
||||||
|
{{ data.evaluationDialogForm.CLASS_NAME }}, 培训内容如下:
|
||||||
|
{{ data.evaluationDialogForm.coursewareName }}
|
||||||
|
</p>
|
||||||
|
<p class="p1">
|
||||||
|
您参加了培训后的课程考试,并取得了以下成绩:{{
|
||||||
|
data.evaluationDialogForm.STAGEEXAMSCORE
|
||||||
|
}}分
|
||||||
|
</p>
|
||||||
|
<h3>四、评估结果</h3>
|
||||||
|
<p class="p1">根据我们的评估,您的个人培训效果如下:</p>
|
||||||
|
<p class="p1">
|
||||||
|
<b
|
||||||
|
>(一)您在培训期间表现出积极的参与度,完成了所有的培训课程和活动;</b
|
||||||
|
>
|
||||||
|
</p>
|
||||||
|
<p class="p1">
|
||||||
|
<b
|
||||||
|
>(二)<span v-if="data.evaluationDialogForm.correct !== ''"
|
||||||
|
>您对 {{ data.evaluationDialogForm.correct }} 知识掌握得很好。</span
|
||||||
|
>在评估过程中,我们发现您可能存在以下知识盲点:{{
|
||||||
|
data.evaluationDialogForm.error
|
||||||
|
}}</b
|
||||||
|
>
|
||||||
|
</p>
|
||||||
|
<p class="p1">知识盲点对应课件为:</p>
|
||||||
|
<p class="p1">{{ data.evaluationDialogForm.errorVideoName }}</p>
|
||||||
|
<p class="p1"><b>(三)评估建议</b></p>
|
||||||
|
<p class="p1">
|
||||||
|
存在的知识盲点需要进一步加强和补充。我们建议您将重点放在弥补这些盲点上,通过进一步学习、参与讨论或与安全专家交流弥补知识盲区。
|
||||||
|
</p>
|
||||||
|
<h3>五、强化培训记录</h3>
|
||||||
|
<p class="p1"><b>(一)强化培训考试记录</b></p>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-if="data.evaluationDialogForm.STRENGTHEN_EXAMNAME !== '0'"
|
||||||
|
class="page-break"
|
||||||
|
>
|
||||||
|
<div class="levelup no-print">
|
||||||
|
<h1>考卷详情</h1>
|
||||||
|
</div>
|
||||||
|
<div class="paper-details chapter_box">
|
||||||
|
<div class="chapter_right_img" />
|
||||||
|
<h1 style="text-align: center">
|
||||||
|
{{ data.evaluationDialogForm.STRENGTHEN_EXAMNAME }}
|
||||||
|
</h1>
|
||||||
|
<div style="text-align: center">
|
||||||
|
(满分:{{ data.evaluationDialogForm.STRENGTHEN_EXAMSCORE }}分)
|
||||||
|
</div>
|
||||||
|
<div class="subflex">
|
||||||
|
<span>班级名称:{{ data.evaluationDialogForm.CLASS_NAME }}</span>
|
||||||
|
<span>姓名:{{ data.evaluationDialogForm.NAME }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="subflex">
|
||||||
|
<span
|
||||||
|
>考试时间:{{
|
||||||
|
data.evaluationDialogForm.STRENGTHEN_OPERATTIME
|
||||||
|
}}</span
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
>分数:{{ data.evaluationDialogForm.STRENGTHENEXAMSCORE }}</span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="study-papg">
|
||||||
|
<dl
|
||||||
|
v-for="(row, key) in data.evaluationDialogForm
|
||||||
|
.strengthenexamrecord"
|
||||||
|
:key="key"
|
||||||
|
>
|
||||||
|
<dt>
|
||||||
|
<span v-if="row.QUESTIONTYPE === '1'" class="mark mark-green"
|
||||||
|
>(单选题)
|
||||||
|
</span>
|
||||||
|
<span v-if="row.QUESTIONTYPE === '2'" class="mark mark-blue"
|
||||||
|
>(多选题)</span
|
||||||
|
>
|
||||||
|
<span v-if="row.QUESTIONTYPE === '3'" class="mark mark-orange"
|
||||||
|
>(判断题)</span
|
||||||
|
>
|
||||||
|
<span v-if="row.QUESTIONTYPE === '4'" class="mark mark-purple"
|
||||||
|
>(填空题)</span
|
||||||
|
>
|
||||||
|
{{ key + 1 }}.{{ row.QUESTIONDRY }}
|
||||||
|
<span class="ml-10">(题目分值:{{ row.SCORE }})</span>
|
||||||
|
</dt>
|
||||||
|
<el-radio-group
|
||||||
|
v-if="row.QUESTIONTYPE === '1'"
|
||||||
|
v-model="row.ANSWER"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<dd>
|
||||||
|
<el-radio label="A">A.{{ row.OPTIONA }}</el-radio>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<el-radio label="B">B.{{ row.OPTIONB }}</el-radio>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<el-radio label="C">C.{{ row.OPTIONC }}</el-radio>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<el-radio label="D">D.{{ row.OPTIOND }}</el-radio>
|
||||||
|
</dd>
|
||||||
|
</el-radio-group>
|
||||||
|
<el-checkbox-group
|
||||||
|
v-if="row.QUESTIONTYPE === '2'"
|
||||||
|
v-model="row.checkList"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<dd>
|
||||||
|
<el-checkbox label="A">A.{{ row.OPTIONA }}</el-checkbox>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<el-checkbox label="B">B.{{ row.OPTIONB }}</el-checkbox>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<el-checkbox label="C">C.{{ row.OPTIONC }}</el-checkbox>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<el-checkbox label="D">D.{{ row.OPTIOND }}</el-checkbox>
|
||||||
|
</dd>
|
||||||
|
</el-checkbox-group>
|
||||||
|
<el-radio-group
|
||||||
|
v-if="row.QUESTIONTYPE === '3'"
|
||||||
|
v-model="row.ANSWER"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<dd>
|
||||||
|
<el-radio label="A">A.{{ row.OPTIONA }}</el-radio>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<el-radio label="B">B.{{ row.OPTIONB }}</el-radio>
|
||||||
|
</dd>
|
||||||
|
</el-radio-group>
|
||||||
|
<div class="flex-layout space-between">
|
||||||
|
<div>
|
||||||
|
<div v-if="row.QUESTIONTYPE === '4'" class="mb-10">
|
||||||
|
学员答案:{{ row.ANSWER }}
|
||||||
|
</div>
|
||||||
|
<div class="mb-10">参考答案:{{ row.ANSWERRIGHT }}</div>
|
||||||
|
<div>答案解析:{{ row.DESCR }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="visible = false">关闭</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { reactive, watchEffect } from "vue";
|
||||||
|
import { ElMessageBox } from "element-plus";
|
||||||
|
|
||||||
|
import { getStudentEvaluation } from "@/request/training_archive_management.js";
|
||||||
|
import { useVModel } from "@vueuse/core";
|
||||||
|
const props = defineProps({
|
||||||
|
studentId: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const visible = useVModel(props, "visible");
|
||||||
|
const data = reactive({
|
||||||
|
evaluationDialogForm: {},
|
||||||
|
count1: "",
|
||||||
|
count2: "",
|
||||||
|
count3: "",
|
||||||
|
});
|
||||||
|
const fnGetData = async () => {
|
||||||
|
const resData = await getStudentEvaluation({
|
||||||
|
STUDENT_ID: props.studentId,
|
||||||
|
});
|
||||||
|
data.evaluationDialogForm = resData.pageData;
|
||||||
|
data.count1 = data.pageData.count1;
|
||||||
|
data.count2 = data.pageData.count2;
|
||||||
|
data.count3 = data.pageData.count3;
|
||||||
|
};
|
||||||
|
|
||||||
|
const fnExport = async () => {
|
||||||
|
await ElMessageBox.confirm("确定要导出吗?", { type: "warning" });
|
||||||
|
window.location.href =
|
||||||
|
import.meta.env[import.meta.env.DEV ? "VITE_PROXY" : "VITE_BASE_URL"] +
|
||||||
|
"student/hs?STUDENT_ID=" +
|
||||||
|
props.studentId;
|
||||||
|
};
|
||||||
|
watchEffect(() => {
|
||||||
|
if (visible.value) fnGetData();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.flex {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
|
||||||
|
td {
|
||||||
|
border: 1px solid var(--el-border-color);
|
||||||
|
padding: 8px;
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,126 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="100px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="班级名称" prop="NAME">
|
||||||
|
<el-input
|
||||||
|
v-model="searchForm.NAME"
|
||||||
|
placeholder="请输入班级名称"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="年份" prop="YEAR">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="searchForm.YEAR"
|
||||||
|
value-format="YYYY"
|
||||||
|
type="year"
|
||||||
|
style="width: 100%"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label-width="10px">
|
||||||
|
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||||
|
<el-button native-type="reset" @click="fnResetPagination">
|
||||||
|
重置
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
<layout-card>
|
||||||
|
<layout-table
|
||||||
|
ref="tableRef"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
:data="list"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
>
|
||||||
|
<el-table-column type="selection" width="55"> </el-table-column>
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="NAME" label="班级名称" width="200" />
|
||||||
|
<el-table-column prop="CODE" label="班级编码" width="200" />
|
||||||
|
<el-table-column prop="TRAINTYPENAME" label="培训类型" width="200" />
|
||||||
|
<el-table-column prop="POSTTYPENAME" label="岗位类型" width="200" />
|
||||||
|
<el-table-column
|
||||||
|
prop="PASSSTUDENTCOUNT"
|
||||||
|
label="效果评估通过人数"
|
||||||
|
width="200"
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="ALLSTUDENTCOUNT"
|
||||||
|
label="效果评估总人数"
|
||||||
|
width="200"
|
||||||
|
/>
|
||||||
|
<el-table-column label="操作">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/effect_appraisal/enterprise_effect/index/studentStrengthenDetailsList',
|
||||||
|
query: {
|
||||||
|
CLASS_ID: row.CLASS_ID,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
学员详情
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="goClassStrengthenInfo(row.CLASS_ID)"
|
||||||
|
>
|
||||||
|
班级效果评估表
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</layout-table>
|
||||||
|
</layout-card>
|
||||||
|
<class-strengthen
|
||||||
|
v-model:visible="data.evaluationDialog.visible"
|
||||||
|
:class-id="data.evaluationDialog.CLASS_ID"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { serialNumber } from "@/assets/js/utils.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import { reactive, ref } from "vue";
|
||||||
|
|
||||||
|
import { getClassStrengthenDetailsList } from "@/request/training_archive_management.js";
|
||||||
|
import router from "@/router/index.js";
|
||||||
|
import ClassStrengthen from "./components/classStrengthen.vue";
|
||||||
|
|
||||||
|
const data = reactive({
|
||||||
|
evaluationDialog: {
|
||||||
|
visible: false,
|
||||||
|
CLASS_ID: "",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const tableRef = ref(null);
|
||||||
|
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||||
|
useListData(getClassStrengthenDetailsList);
|
||||||
|
|
||||||
|
const goClassStrengthenInfo = (class_id) => {
|
||||||
|
data.evaluationDialog.visible = true;
|
||||||
|
data.evaluationDialog.CLASS_ID = class_id;
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style scoped></style>
|
|
@ -0,0 +1,128 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="100px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="姓名" prop="STUDENTNAME">
|
||||||
|
<el-input v-model="searchForm.NAME" placeholder="请输入姓名" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="年份" prop="YEAR">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="searchForm.YEAR"
|
||||||
|
value-format="YYYY"
|
||||||
|
type="year"
|
||||||
|
style="width: 100%"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label-width="10px">
|
||||||
|
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||||
|
<el-button native-type="reset" @click="fnResetPagination">
|
||||||
|
重置
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
<layout-card>
|
||||||
|
<layout-table
|
||||||
|
ref="tableRef"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
:data="list"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
>
|
||||||
|
<el-table-column type="selection" width="55"> </el-table-column>
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="STUDENTNAME" label="姓名" width="200" />
|
||||||
|
<el-table-column prop="USERIDCARD" label="身份证号" width="200" />
|
||||||
|
<el-table-column prop="PHONE" label="手机号" width="200" />
|
||||||
|
<el-table-column
|
||||||
|
prop="STRENGTHENEXAMSTATE"
|
||||||
|
label="效果评估状态"
|
||||||
|
width="200"
|
||||||
|
>
|
||||||
|
<template #default="{ row }">
|
||||||
|
<span>
|
||||||
|
{{ row.STRENGTHENEXAMSTATE === "3" ? "通过" : "未通过" }}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="STRENGTHENEXAMSCORE"
|
||||||
|
label="效果评估最高分"
|
||||||
|
width="200"
|
||||||
|
>
|
||||||
|
<template #default="{ row }">
|
||||||
|
<span>
|
||||||
|
{{
|
||||||
|
row.STRENGTHENEXAMSCORE
|
||||||
|
? row.STRENGTHENEXAMSCORE
|
||||||
|
: "未进行评估考试"
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="goStudentStrengthenInfo(row.STUDENT_ID)"
|
||||||
|
>
|
||||||
|
查看个人效果评估
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</layout-table>
|
||||||
|
</layout-card>
|
||||||
|
<student-strengthen
|
||||||
|
v-model:visible="data.evaluationDialog.visible"
|
||||||
|
:student-id="data.evaluationDialog.STUDENT_ID"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { serialNumber } from "@/assets/js/utils.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import { reactive, ref } from "vue";
|
||||||
|
|
||||||
|
import { getStudentStrengthenDetailsList } from "@/request/training_archive_management.js";
|
||||||
|
import { useRoute } from "vue-router";
|
||||||
|
import StudentStrengthen from "./components/studentStrengthen.vue";
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const { CLASS_ID } = route.query;
|
||||||
|
const tableRef = ref(null);
|
||||||
|
const data = reactive({
|
||||||
|
evaluationDialog: {
|
||||||
|
visible: false,
|
||||||
|
STUDENT_ID: "",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||||
|
useListData(getStudentStrengthenDetailsList, {
|
||||||
|
otherParams: { CLASS_ID },
|
||||||
|
});
|
||||||
|
|
||||||
|
const goStudentStrengthenInfo = (student_id) => {
|
||||||
|
data.evaluationDialog.visible = true;
|
||||||
|
data.evaluationDialog.STUDENT_ID = student_id;
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style scoped></style>
|
Loading…
Reference in New Issue