flx:提交劳务 人员入场 花名册

This commit is contained in:
X_Rian 2024-09-19 18:29:04 +08:00
parent 76d470c025
commit 543cc09ac6
6 changed files with 220 additions and 34 deletions

View File

@ -287,4 +287,9 @@ export const getWorkerAdmissionDetailPageApi = data => get('xmgl/workerAdmission
// 删除人员入场明细信息
export const deleteWorkerAdmissionDetailApi = data => post('xmgl/workerAdmissionDetail/delete', data);
// 列表查询人员入场明细资格证书信息
export const getWorkerAdmissionCertificateDetailListApi = data => get('xmgl/workerAdmissionCertificateDetail/list', data);
export const getWorkerAdmissionCertificateDetailListApi = data => get('xmgl/workerAdmissionCertificateDetail/list', data);
// 批量录入
export const batchEntryRecordApi = data => post('xmgl/workerAdmissionDetail/importWorkerBatch', data);
// 导出人员申请表
export const exportWorkerApplyApi = data => post('xmgl/workerAdmission/exportXls', data);

View File

@ -64,7 +64,7 @@ export default new Vuex.Store({
FILEURL: 'http://192.168.34.221:9111/image/', //郭圣雄本地
// WORKFLOWURL: "http://192.168.34.216:88/#/workspace/forms", //jiayu工作流地址(本地)
// WORKFLOWURL: "http://192.168.34.138:88/#/workspace/forms", //坤工作流地址(本地)
WORKFLOWURL: "http://192.168.34.175:88/#/workspace/forms", //罗峰工作流地址(本地)
WORKFLOWURL: "http://192.168.34.100:88/#/workspace/forms", //罗峰工作流地址(本地)
CONTRACTORURL: process.env.NODE_ENV == "development" ? "http://192.168.34.175:5173/#/contractorApply" : `${window.location.protocol}//${window.location.host}/contractorApply/index.html#/contractorApply`, //罗峰承包商入场地址(本地)
// UPLOADURL:'http://182.90.224.237:51234/upload/image/',// 郭圣雄远程
// FILEURL:'http://182.90.224.237:51234/image/',//郭圣雄远程

View File

@ -8,11 +8,13 @@
</el-input>
</el-form-item> -->
<el-form-item label="单位名称">
<el-input placeholder="请输入" v-model="formInline.certificateIssuingUnitName" clearable style="width: 200px">
<el-input placeholder="请输入" v-model="formInline.certificateIssuingUnitName" clearable
style="width: 200px">
</el-input>
</el-form-item>
<el-form-item label="办证人">
<el-input placeholder="请输入" v-model="formInline.certificateIssuingPersonName" clearable style="width: 200px">
<el-input placeholder="请输入" v-model="formInline.certificateIssuingPersonName" clearable
style="width: 200px">
</el-input>
</el-form-item>
<el-form-item label="时间">
@ -30,11 +32,14 @@
<el-form-item>
<el-button type="primary" @click="onSubmit" plain>{{
$t("message.quality.inquire")
}}</el-button>
}}</el-button>
</el-form-item>
<el-form-item>
<el-button type="warning" @click="onRefresh" plain>刷新</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" size="medium" @click="exportBtn">导出人员申请表</el-button>
</el-form-item>
<!-- <el-form-item>
<el-button type="primary" @click="isAddPoint(1)"> 新增 </el-button>
</el-form-item> -->
@ -47,9 +52,9 @@
<!-- <el-button type="danger" size="small">批量删除</el-button> -->
</div>
<div class="table-box">
<el-table class="tables" :data="tableData" size="small" @selection-change="handleSelectionChange"
:header-cell-style="{ 'text-align': 'center' }">
<!-- <el-table-column type="selection" align="center" width="60px"></el-table-column> -->
<el-table class="tables" :data="tableData" size="small" @select-all="selectAll"
@selection-change="handleSelectionChange" :header-cell-style="{ 'text-align': 'center' }">
<el-table-column type="selection" align="center" width="60px"></el-table-column>
<el-table-column label="序号" type="index" align="center"></el-table-column>
<el-table-column align="center" label="单位名称" show-overflow-tooltip>
<!-- 作业申请单位 -->
@ -59,6 +64,10 @@
</el-table-column>
<el-table-column align="center" label="办证人" prop="certificateIssuingPersonName"
show-overflow-tooltip></el-table-column>
<el-table-column align="center" label="总人数" prop="totalWorkerNum"
show-overflow-tooltip></el-table-column>
<el-table-column align="center" label="合格人数" prop="qualifierNum"
show-overflow-tooltip></el-table-column>
<el-table-column align="center" label="审批时间" prop="addTime" show-overflow-tooltip></el-table-column>
<!-- 操作 -->
<el-table-column align="center" :label="$t('message.dangerousBigProject.operation')">
@ -194,13 +203,27 @@
<el-page-header @back="goBack" :content="dialogTitle" class="backText"
:class="{ dark: styleType == 2 }"></el-page-header>
<!-- <addPlan @cancleSave="goBack" v-if="isAdd"></addPlan> -->
<detail @cancleSave="goBack"
:workDetail="workDetail" v-if="isEdit">
<detail @cancleSave="goBack" :workDetail="workDetail" v-if="isEdit">
</detail>
</div>
<!-- 添加卡片弹框 -->
<el-dialog :destroy-on-close="true" :modal-append-to-body="false" title="" :visible.sync="cardDialog2"
width="900px">
<div class="dialog_content">
<div class="percentage_title">
{{ this.percentageTitle }}
</div>
<el-progress :percentage="percentage"></el-progress>
<!-- <div class="dialog-footer">
<el-button type="primary" icon="el-icon-circle-check" @click="getProgress" size="medium">{{
$t("message.personnelPosition.determine") }}
</el-button>
</div> -->
</div>
</el-dialog>
</div>
</template>
<script>
import moment from "moment";
// import addPlan from './addPlan.vue'
@ -218,6 +241,7 @@ import {
import {
getWorkerAdmissionPageApi,
deleteWorkerAdmissionApi,
exportWorkerApplyApi,
} from "@/assets/js/api/laborPerson";
import { getWorkerInfoList } from '@/assets/js/api/laborPerson.js'
@ -228,6 +252,10 @@ export default {
},
data() {
return {
percentage: 0,
percentageTitle: "正在下载中,请稍后",
cardDialog2: false,
formInline: {
certificateIssuingUnitName: "",
certificateIssuingPersonName: "",
@ -443,7 +471,7 @@ export default {
},
initData() {
let data = {
addTime_start: this.formInline.addTime instanceof Array ? this.formInline.addTime[0] : "",
addTime_begin: this.formInline.addTime instanceof Array ? this.formInline.addTime[0] : "",
addTime_end: this.formInline.addTime instanceof Array ? this.formInline.addTime[1] : "",
certificateIssuingPersonName: this.formInline.certificateIssuingPersonName,
certificateIssuingUnitName: this.formInline.certificateIssuingUnitName,
@ -460,7 +488,12 @@ export default {
}
});
},
selectAll(val) {
console.log("selectAll", val);
this.multipleSelection = val;
},
handleSelectionChange(val) {
console.log("handleSelectionChange", val);
this.multipleSelection = val;
},
deleteRow(rows) {
@ -500,7 +533,7 @@ export default {
this.isUpdate = false;
//
this.dialogTitle = this.$t("message.dangerousBigProject.detailed");
this.workDetail = { ...val };
this.workDetail = { ...val };
},
//
handleClose(done) {
@ -538,6 +571,79 @@ export default {
}
})
},
exportBtn() {
console.log(this.multipleSelection);
if (this.multipleSelection.length == 0) {
this.$message.warning('请选择需要导出的数据');
return
}
exportWorkerApplyApi({
projectSn: this.projectSn,
ids: this.multipleSelection.map(item => item.id).join(','),
}).then((res) => {
if (res.code == 200) {
const url = res.result.file.includes("http://") ? res.result.file : this.$store.state.FILEURL + res.result.file;
this.getProgress(url);
this.cardDialog2 = true;
} else {
this.$message.error(res.msg);
}
});
},
getProgress(rowUrl) {
// 0
this.percentage = 0;
//
this.$http({
//
url: rowUrl,
// get post
method: "get",
//base64new Blob()
responseType: "blob",
// get-->params post-->data
params: {},
//xml axios
onDownloadProgress: (progressEvent) => {
//progressEvent.loaded
//progressEvent.total
let progressBar = Math.round(progressEvent.loaded / progressEvent.total * 100);
//99%
if (progressBar >= 99) {
this.percentage = 99;
this.percentageTitle = '下载完成,文件正在编译。';
} else {
this.percentage = progressBar;
this.percentageTitle = '正在下载,请耐心等待...';
}
}
}).then(res => {
//res.message
if (res.status != 200) {
this.percentageTitle = '下载失败,请重试。';
return
}
console.log(res.data)
// return;
//
const url = window.URL.createObjectURL(res.data);
// <a>
const link = document.createElement("a");
link.href = url;
link.download = "人员入场登记"; //
//
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// URL
window.URL.revokeObjectURL(url);
this.percentageTitle = '下载完成';
//100%100
this.percentage = 100;
})
},
},
computed: {
workerListOptionsUp() {
@ -553,8 +659,14 @@ export default {
}
};
</script>
<style lang="less" scoped>
.percentage_title {
display: flex;
justify-content: center;
padding: 10px 0;
}
.dialogFormBox {
width: 100%;
display: flex;
@ -899,5 +1011,4 @@ export default {
::v-deep .el-image-viewer__btn.el-image-viewer__close {
color: white;
}
</style>
</style>

View File

@ -236,7 +236,7 @@
<div>
劳动合同
<div>
<div class="download" v-for="item in cardForm.laborContract" :key="item.id">
<div class="download" @click="downloadFn(item)" v-for="item in cardForm.laborContract" :key="item.id">
{{ item.name }}
</div>
</div>
@ -244,7 +244,7 @@
<div>
保险
<div>
<div class="download" v-for="item in cardForm.insurance" :key="item.id">
<div class="download" @click="downloadFn(item)" v-for="item in cardForm.insurance" :key="item.id">
{{ item.name }}
</div>
</div>
@ -252,7 +252,7 @@
<div>
体检报告
<div>
<div class="download" v-for="item in cardForm.examinationImage" :key="item.id">
<div class="download" @click="downloadFn(item)" v-for="item in cardForm.examinationImage" :key="item.id">
{{ item.name }}
</div>
</div>
@ -458,7 +458,8 @@ export default {
},
downloadFn(row) {
// "http://42.180.188.17:11211/image/669b96b66b90a34a1aa4ec9c.jpg"
fetch(row.url).then((response) => {
const url = row.url.includes('http://') ? row.url : this.fileUrl + row.url;
fetch(url).then((response) => {
//
if (!response.ok) {
throw new Error("导出失败");

View File

@ -914,8 +914,8 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" v-if="workerInfo.devType == 1">
<el-col :span="12">
<el-row :gutter="24">
<el-col :span="12" v-if="workerInfo.devType == 1">
<el-form-item
:label="$t('message.laborMange.faceDevice') + ':'"
prop="ufaceDevId"
@ -955,6 +955,13 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工作区域:" prop="safeScore">
<span>{{ workerInfo.workArea }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12" v-if="isEnableDeduct == 1">
<el-form-item label="当前安全评分分值:" prop="safeScore">
<!-- <el-input
v-if="detailInfoStatus"
@ -966,13 +973,6 @@
<span>{{ workerInfo.safeScore }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="工作区域:" prop="safeScore">
<span>{{ workerInfo.workArea }}</span>
</el-form-item>
</el-col>
<el-col :span="12" v-if="workerInfo.devType == 2">
<el-form-item label="人脸分组:" prop="ufaceDevGroupId">
<!-- <div v-if="detailInfoStatus"> -->
@ -2132,7 +2132,7 @@
</el-tab-pane>
</el-tabs>
</div>
<div id="getAJob" class="table" style="padding-bottom: 100px" v-if="projectInfo.isEnableDeduct ==1">
<div id="getAJob" class="table" style="padding-bottom: 100px" v-if="projectInfo.isEnableDeduct == 1">
<div class="pageTitle" style="display: flex; align-items: center">
<span>安全分详情</span>
<!-- 重置 -->
@ -2520,6 +2520,7 @@ export default {
imgRadiolist: [],
isSzProject: "",
projectSn: "",
isEnableDeduct: 0,
isNew: true,
formRules: {
personMail: [
@ -2606,7 +2607,8 @@ export default {
getProjectConfigListApi({ projectSn: this.projectSn }).then((res) => {
// this.isSzProject = 1
this.isSzProject = res.result[0].isSzProject; //1 0
// console.log(res.result[0].isSzProject)
this.isEnableDeduct = res.result[0].isEnableDeduct; // 1 0
console.log(res.result)
});
},
handleCheckAllChangeGroup(val) {

View File

@ -96,7 +96,21 @@ getInfoList();
key: 'hmc_batch_authorization',
menuPath: '/project/labor/roster',
}">批量授权门禁权限</el-button>
<el-button type="primary" @click="enteringDialog(1)">批量导入</el-button>
<el-upload
style="margin: 0px 15px; display: inline"
class="upload-demo expintBtn"
name="file"
:on-success="handleImportSuccess"
:before-upload="handleBeforeUpload"
:file-list="enteringFileList"
:action="$http.defaults.baseURL + 'xmgl/workerAdmission/getIdCardsByExcel'"
:data="{ projectSn: projectSn }"
:show-file-list="false"
:headers="headers"
>
<el-button size="medium" type="primary">批量导入</el-button>
</el-upload>
<!-- <el-button type="primary" @click="enteringDialog(1)">批量导入</el-button> -->
<el-button type="primary" @click="enteringDialog(2)">手动录入</el-button>
<!-- <el-button
type="primary"
@ -685,7 +699,7 @@ getInfoList();
</el-form-item>
</el-form>
</div>
<el-table class="tables" ref="workerTable" :show-header="false" :data="enteringInfo.dataList" size="small"
<el-table :row-class-name="tableRowClassNameDetail" row-key="id" ref="workerTable" :show-header="false" :data="enteringInfo.dataList" size="small"
:header-cell-style="{ 'text-align': 'center' }">
<el-table-column type="selection" align="center" width="55px"></el-table-column>
<!-- <el-table-column label="序号" type="index" align="center"></el-table-column> -->
@ -734,6 +748,10 @@ getInfoList();
<el-pagination class="pagerBox" @size-change="SizeChange" @current-change="CurrentChange"
:current-page="enteringInfo.pageNo" :page-sizes="$store.state.PAGESIZRS" :page-size="enteringInfo.pageSize"
layout="total, sizes, prev, pager, next" :total="Number(enteringInfo.total)" background></el-pagination>
<div class="dialog-footer">
<el-button icon="el-icon-circle-check" type="primary" size="medium">批量制卡</el-button>
<el-button icon="el-icon-circle-check" type="primary" size="medium" @click="batchCardPrint">批量录入</el-button>
</div>
</div>
</div>
</el-dialog>
@ -755,6 +773,7 @@ import {
getWorkerAdmissionPageApi,
getWorkerAdmissionDetailPageApi,
batchEntryRecordApi
} from "@/assets/js/api/laborPerson";
import {
getProjectConfigListApi,
@ -894,6 +913,7 @@ export default {
workerName: "",
enterpriseName: "",
},
idCards: "",
unitInfo: {
certificateIssuingUnitName: "",
pageNo: 1,
@ -903,6 +923,7 @@ export default {
dataList: [],
},
enteringType: -1,
enteringFileList: [],
};
},
computed: {
@ -948,6 +969,9 @@ export default {
});
}
},
headers() {
return { Authorization: this.$store.state.userInfo.token }
},
},
created() {
this.projectSn = this.$store.state.projectSn;
@ -966,6 +990,17 @@ export default {
this.mqttMSG();
},
methods: {
batchCardPrint() {
console.log(this.$refs.workerTable.selection);
batchEntryRecordApi({
idCards:this.$refs.workerTable.selection.map(item => item.idCard).join(','),
}).then((res) => {
if(res.success) {
this.$message.success("批量录入成功");
this.initData();
}
})
},
handleCheckAllChangeWorker() {
// this.checkedCities = val ? cityOptions : [];
console.log(this.$refs.workerTable);
@ -981,6 +1016,7 @@ export default {
enteringDialog(type) {
this.enteringType = type;
if(type == 2) {
this.idCards = '';
this.clearWorkerAdmission();
this.getWorkerAdmissionPage();
}
@ -1050,6 +1086,19 @@ export default {
this.enteringInfo.pageNo = 1;
this.initData();
},
//
handleImportSuccess(res) {
if (res.code == 200) {
this.$message.success(res.message);
this.idCards = res.result.idCards;
this.enteringDialog(1);
} else {
this.$message.error(res.message);
}
},
handleBeforeUpload(file) {
console.log('=========', file)
},
initData() {
let data = {
enterpriseName: this.formInline.enterpriseName,
@ -1057,6 +1106,7 @@ export default {
pageNo: this.pageNo,
pageSize: this.pageSize,
projectSn: this.projectSn,
idCards: this.idCards,
workerAdmissionId: this.unitInfo.unitActive,
};
getWorkerAdmissionDetailPageApi(data).then((res) => {
@ -1602,6 +1652,12 @@ export default {
return "yellow2";
}
},
tableRowClassNameDetail({ row, rowIndex }) {
console.log(row.isImport, "--------------------");
if (row.isImport == 1) {
return "gray";
}
},
async issueTeamEvent(id) {
this.issueTeamDialog = true;
this.whoId = id;
@ -1721,6 +1777,17 @@ export default {
margin-left: 30px;
}
.el-table {
width: 100%;
min-height: 450px;
max-height: calc(100% - 98px);
background-color: transparent;
overflow: auto;
/deep/ .gray {
background-color: #DCDCDC;
}
}
/deep/ .el-table__row {
border-bottom: 1px solid #e6e6e6;
td {
@ -1913,7 +1980,7 @@ export default {
}
.pagerBox {
margin-top: 0;
margin-top: 10px;
}
}
</style>