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

@ -288,3 +288,8 @@ export const getWorkerAdmissionDetailPageApi = data => get('xmgl/workerAdmission
export const deleteWorkerAdmissionDetailApi = data => post('xmgl/workerAdmissionDetail/delete', data); 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/', //郭圣雄本地 FILEURL: 'http://192.168.34.221:9111/image/', //郭圣雄本地
// WORKFLOWURL: "http://192.168.34.216:88/#/workspace/forms", //jiayu工作流地址(本地) // WORKFLOWURL: "http://192.168.34.216:88/#/workspace/forms", //jiayu工作流地址(本地)
// WORKFLOWURL: "http://192.168.34.138:88/#/workspace/forms", //坤工作流地址(本地) // 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`, //罗峰承包商入场地址(本地) 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/',// 郭圣雄远程 // UPLOADURL:'http://182.90.224.237:51234/upload/image/',// 郭圣雄远程
// FILEURL:'http://182.90.224.237:51234/image/',//郭圣雄远程 // FILEURL:'http://182.90.224.237:51234/image/',//郭圣雄远程

View File

@ -8,11 +8,13 @@
</el-input> </el-input>
</el-form-item> --> </el-form-item> -->
<el-form-item label="单位名称"> <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-input>
</el-form-item> </el-form-item>
<el-form-item label="办证人"> <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-input>
</el-form-item> </el-form-item>
<el-form-item label="时间"> <el-form-item label="时间">
@ -30,11 +32,14 @@
<el-form-item> <el-form-item>
<el-button type="primary" @click="onSubmit" plain>{{ <el-button type="primary" @click="onSubmit" plain>{{
$t("message.quality.inquire") $t("message.quality.inquire")
}}</el-button> }}</el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="warning" @click="onRefresh" plain>刷新</el-button> <el-button type="warning" @click="onRefresh" plain>刷新</el-button>
</el-form-item> </el-form-item>
<el-form-item>
<el-button type="primary" size="medium" @click="exportBtn">导出人员申请表</el-button>
</el-form-item>
<!-- <el-form-item> <!-- <el-form-item>
<el-button type="primary" @click="isAddPoint(1)"> 新增 </el-button> <el-button type="primary" @click="isAddPoint(1)"> 新增 </el-button>
</el-form-item> --> </el-form-item> -->
@ -47,9 +52,9 @@
<!-- <el-button type="danger" size="small">批量删除</el-button> --> <!-- <el-button type="danger" size="small">批量删除</el-button> -->
</div> </div>
<div class="table-box"> <div class="table-box">
<el-table class="tables" :data="tableData" size="small" @selection-change="handleSelectionChange" <el-table class="tables" :data="tableData" size="small" @select-all="selectAll"
:header-cell-style="{ 'text-align': 'center' }"> @selection-change="handleSelectionChange" :header-cell-style="{ 'text-align': 'center' }">
<!-- <el-table-column type="selection" align="center" width="60px"></el-table-column> --> <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 label="序号" type="index" align="center"></el-table-column>
<el-table-column align="center" label="单位名称" show-overflow-tooltip> <el-table-column align="center" label="单位名称" show-overflow-tooltip>
<!-- 作业申请单位 --> <!-- 作业申请单位 -->
@ -59,6 +64,10 @@
</el-table-column> </el-table-column>
<el-table-column align="center" label="办证人" prop="certificateIssuingPersonName" <el-table-column align="center" label="办证人" prop="certificateIssuingPersonName"
show-overflow-tooltip></el-table-column> 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="审批时间" prop="addTime" show-overflow-tooltip></el-table-column>
<!-- 操作 --> <!-- 操作 -->
<el-table-column align="center" :label="$t('message.dangerousBigProject.operation')"> <el-table-column align="center" :label="$t('message.dangerousBigProject.operation')">
@ -194,10 +203,24 @@
<el-page-header @back="goBack" :content="dialogTitle" class="backText" <el-page-header @back="goBack" :content="dialogTitle" class="backText"
:class="{ dark: styleType == 2 }"></el-page-header> :class="{ dark: styleType == 2 }"></el-page-header>
<!-- <addPlan @cancleSave="goBack" v-if="isAdd"></addPlan> --> <!-- <addPlan @cancleSave="goBack" v-if="isAdd"></addPlan> -->
<detail @cancleSave="goBack" <detail @cancleSave="goBack" :workDetail="workDetail" v-if="isEdit">
:workDetail="workDetail" v-if="isEdit">
</detail> </detail>
</div> </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> </div>
</template> </template>
@ -218,6 +241,7 @@ import {
import { import {
getWorkerAdmissionPageApi, getWorkerAdmissionPageApi,
deleteWorkerAdmissionApi, deleteWorkerAdmissionApi,
exportWorkerApplyApi,
} from "@/assets/js/api/laborPerson"; } from "@/assets/js/api/laborPerson";
import { getWorkerInfoList } from '@/assets/js/api/laborPerson.js' import { getWorkerInfoList } from '@/assets/js/api/laborPerson.js'
@ -228,6 +252,10 @@ export default {
}, },
data() { data() {
return { return {
percentage: 0,
percentageTitle: "正在下载中,请稍后",
cardDialog2: false,
formInline: { formInline: {
certificateIssuingUnitName: "", certificateIssuingUnitName: "",
certificateIssuingPersonName: "", certificateIssuingPersonName: "",
@ -443,7 +471,7 @@ export default {
}, },
initData() { initData() {
let data = { 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] : "", addTime_end: this.formInline.addTime instanceof Array ? this.formInline.addTime[1] : "",
certificateIssuingPersonName: this.formInline.certificateIssuingPersonName, certificateIssuingPersonName: this.formInline.certificateIssuingPersonName,
certificateIssuingUnitName: this.formInline.certificateIssuingUnitName, certificateIssuingUnitName: this.formInline.certificateIssuingUnitName,
@ -460,7 +488,12 @@ export default {
} }
}); });
}, },
selectAll(val) {
console.log("selectAll", val);
this.multipleSelection = val;
},
handleSelectionChange(val) { handleSelectionChange(val) {
console.log("handleSelectionChange", val);
this.multipleSelection = val; this.multipleSelection = val;
}, },
deleteRow(rows) { deleteRow(rows) {
@ -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: { computed: {
workerListOptionsUp() { workerListOptionsUp() {
@ -555,6 +661,12 @@ export default {
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.percentage_title {
display: flex;
justify-content: center;
padding: 10px 0;
}
.dialogFormBox { .dialogFormBox {
width: 100%; width: 100%;
display: flex; display: flex;
@ -900,4 +1012,3 @@ export default {
color: white; color: white;
} }
</style> </style>

View File

@ -236,7 +236,7 @@
<div> <div>
劳动合同 劳动合同
<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 }} {{ item.name }}
</div> </div>
</div> </div>
@ -244,7 +244,7 @@
<div> <div>
保险 保险
<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 }} {{ item.name }}
</div> </div>
</div> </div>
@ -252,7 +252,7 @@
<div> <div>
体检报告 体检报告
<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 }} {{ item.name }}
</div> </div>
</div> </div>
@ -458,7 +458,8 @@ export default {
}, },
downloadFn(row) { downloadFn(row) {
// "http://42.180.188.17:11211/image/669b96b66b90a34a1aa4ec9c.jpg" // "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) { if (!response.ok) {
throw new Error("导出失败"); throw new Error("导出失败");

View File

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

View File

@ -96,7 +96,21 @@ getInfoList();
key: 'hmc_batch_authorization', key: 'hmc_batch_authorization',
menuPath: '/project/labor/roster', menuPath: '/project/labor/roster',
}">批量授权门禁权限</el-button> }">批量授权门禁权限</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" @click="enteringDialog(2)">手动录入</el-button>
<!-- <el-button <!-- <el-button
type="primary" type="primary"
@ -685,7 +699,7 @@ getInfoList();
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </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' }"> :header-cell-style="{ 'text-align': 'center' }">
<el-table-column type="selection" align="center" width="55px"></el-table-column> <el-table-column type="selection" align="center" width="55px"></el-table-column>
<!-- <el-table-column label="序号" type="index" align="center"></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" <el-pagination class="pagerBox" @size-change="SizeChange" @current-change="CurrentChange"
:current-page="enteringInfo.pageNo" :page-sizes="$store.state.PAGESIZRS" :page-size="enteringInfo.pageSize" :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> 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>
</div> </div>
</el-dialog> </el-dialog>
@ -755,6 +773,7 @@ import {
getWorkerAdmissionPageApi, getWorkerAdmissionPageApi,
getWorkerAdmissionDetailPageApi, getWorkerAdmissionDetailPageApi,
batchEntryRecordApi
} from "@/assets/js/api/laborPerson"; } from "@/assets/js/api/laborPerson";
import { import {
getProjectConfigListApi, getProjectConfigListApi,
@ -894,6 +913,7 @@ export default {
workerName: "", workerName: "",
enterpriseName: "", enterpriseName: "",
}, },
idCards: "",
unitInfo: { unitInfo: {
certificateIssuingUnitName: "", certificateIssuingUnitName: "",
pageNo: 1, pageNo: 1,
@ -903,6 +923,7 @@ export default {
dataList: [], dataList: [],
}, },
enteringType: -1, enteringType: -1,
enteringFileList: [],
}; };
}, },
computed: { computed: {
@ -948,6 +969,9 @@ export default {
}); });
} }
}, },
headers() {
return { Authorization: this.$store.state.userInfo.token }
},
}, },
created() { created() {
this.projectSn = this.$store.state.projectSn; this.projectSn = this.$store.state.projectSn;
@ -966,6 +990,17 @@ export default {
this.mqttMSG(); this.mqttMSG();
}, },
methods: { 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() { handleCheckAllChangeWorker() {
// this.checkedCities = val ? cityOptions : []; // this.checkedCities = val ? cityOptions : [];
console.log(this.$refs.workerTable); console.log(this.$refs.workerTable);
@ -981,6 +1016,7 @@ export default {
enteringDialog(type) { enteringDialog(type) {
this.enteringType = type; this.enteringType = type;
if(type == 2) { if(type == 2) {
this.idCards = '';
this.clearWorkerAdmission(); this.clearWorkerAdmission();
this.getWorkerAdmissionPage(); this.getWorkerAdmissionPage();
} }
@ -1050,6 +1086,19 @@ export default {
this.enteringInfo.pageNo = 1; this.enteringInfo.pageNo = 1;
this.initData(); 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() { initData() {
let data = { let data = {
enterpriseName: this.formInline.enterpriseName, enterpriseName: this.formInline.enterpriseName,
@ -1057,6 +1106,7 @@ export default {
pageNo: this.pageNo, pageNo: this.pageNo,
pageSize: this.pageSize, pageSize: this.pageSize,
projectSn: this.projectSn, projectSn: this.projectSn,
idCards: this.idCards,
workerAdmissionId: this.unitInfo.unitActive, workerAdmissionId: this.unitInfo.unitActive,
}; };
getWorkerAdmissionDetailPageApi(data).then((res) => { getWorkerAdmissionDetailPageApi(data).then((res) => {
@ -1602,6 +1652,12 @@ export default {
return "yellow2"; return "yellow2";
} }
}, },
tableRowClassNameDetail({ row, rowIndex }) {
console.log(row.isImport, "--------------------");
if (row.isImport == 1) {
return "gray";
}
},
async issueTeamEvent(id) { async issueTeamEvent(id) {
this.issueTeamDialog = true; this.issueTeamDialog = true;
this.whoId = id; this.whoId = id;
@ -1721,6 +1777,17 @@ export default {
margin-left: 30px; 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 { /deep/ .el-table__row {
border-bottom: 1px solid #e6e6e6; border-bottom: 1px solid #e6e6e6;
td { td {
@ -1913,7 +1980,7 @@ export default {
} }
.pagerBox { .pagerBox {
margin-top: 0; margin-top: 10px;
} }
} }
</style> </style>