| | |
| | | <div class="menu dadetails"> |
| | | <div style="height: 22vh;"> |
| | | |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | action="#" |
| | | :show-file-list="false" |
| | | :on-change="handlePictureCardPreview" |
| | | :auto-upload="false" |
| | | > |
| | | <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过4MB</div> |
| | | <img v-if="empBaseInfoImageUrl" :src="empBaseInfoImageUrl" class="avatar"> |
| | | <i v-else class="el-icon-plus avatar-uploader-icon" /> |
| | | </el-upload> |
| | | <!-- 头像显示区域 --> |
| | | <div class="avatar-wrapper"> |
| | | <img |
| | | v-if="empBaseInfoImageUrl" |
| | | :src="empBaseInfoImageUrl" |
| | | class="avatar" |
| | | @click="openCamera" |
| | | > |
| | | <div v-else class="avatar-uploader-placeholder" @click="openCamera"> |
| | | <i class="el-icon-plus avatar-uploader-icon" /> |
| | | <div class="upload-tip">点击拍照上传</div> |
| | | </div> |
| | | </div> |
| | | <!-- <img src="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1333074204,3035391839&fm=26&gp=0.jpg" class="jbxxImg">--> |
| | | <div class="title-da"> |
| | | 档案号:{{ empBaseInfoForm.archivesNumb }} |
| | |
| | | <div class="item-node" /> |
| | | <div> |
| | | <a href="javascript:void(0)" :class="item=='lzaj'?'light':''" @click="goAnchor('lzaj')"> |
| | | 劳资案件 |
| | | 仲裁案件 |
| | | </a> |
| | | </div> |
| | | </li> |
| | |
| | | <el-input v-model="empBaseInfoForm.certificateListName" :disabled="readon ? false : true" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="年假天数" prop="annualLeave"> |
| | | <el-input v-model="empBaseInfoForm.annualLeave" disabled /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | |
| | | <span v-text="getIndex(scope.$index)" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column show-overflow-tooltip prop="newDeptName" label="现部门" /> |
| | | <el-table-column show-overflow-tooltip prop="allDeptName" label="现部门" /> |
| | | <el-table-column show-overflow-tooltip prop="newJobName" label="现岗位" /> |
| | | <el-table-column show-overflow-tooltip prop="empName" label="姓名" width="180" /> |
| | | <el-table-column show-overflow-tooltip prop="oldDeptName" label="原部门" /> |
| | |
| | | <span v-text="getIndex(scope.$index)" /> |
| | | </template>EmpLeaveInfo |
| | | </el-table-column> |
| | | <el-table-column show-overflow-tooltip prop="deptName" label="部门/护卫点" /> |
| | | <el-table-column show-overflow-tooltip prop="entryDate" label="入职日期" /> |
| | | <el-table-column show-overflow-tooltip prop="dimissionDate" label="离职日期" /> |
| | | <el-table-column show-overflow-tooltip prop="dimissionType" label="离职类型" :formatter="dimissionTypeFormat" /> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="fsnumShow" show-overflow-tooltip prop="accidentId" label="" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredTime" label="受伤日期" width="100" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredAddress" label="受伤地点" width="100" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredTime" label="受伤日期" width="110"> |
| | | <template slot-scope="scope"> |
| | | <span class="table-button" @click="editAccidentCases(scope.row,9)">{{ scope.row.injuredTime }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column show-overflow-tooltip prop="injuredAddress" label="受伤地点" width="200" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredPart" label="受伤部位" width="80" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredDescribe" label="受伤经过描述" width="120" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredDiacrisis" label="意外险诊断" width="100" /> |
| | | <el-table-column show-overflow-tooltip prop="hospitalName" label="就诊医院" width="100" /> |
| | | <el-table-column show-overflow-tooltip prop="treatmentName" label="就诊科室" width="100" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredDescribe" label="受伤经过描述" width="300" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredDiacrisis" label="意外险诊断" width="150" /> |
| | | <!-- <el-table-column show-overflow-tooltip prop="hospitalName" label="就诊医院" width="100" />--> |
| | | <!-- <el-table-column show-overflow-tooltip prop="treatmentName" label="就诊科室" width="100" />--> |
| | | <el-table-column show-overflow-tooltip prop="hospitalizatioFlag" label="是否住院" width="80" :formatter="hospitalizatioFlagFormat" /> |
| | | <el-table-column show-overflow-tooltip prop="bedNumb" label="床号" width="60" /> |
| | | <!-- <el-table-column show-overflow-tooltip prop="bedNumb" label="床号" width="60" />--> |
| | | <el-table-column show-overflow-tooltip prop="reprotTime" label="报案时间" width="100" /> |
| | | <el-table-column show-overflow-tooltip prop="submitTime" label="递交资料时间" width="120" /> |
| | | <el-table-column show-overflow-tooltip prop="sbumitBy" label="递交人" width="100" /> |
| | | <!-- <el-table-column show-overflow-tooltip prop="submitTime" label="递交资料时间" width="120" />--> |
| | | <!-- <el-table-column show-overflow-tooltip prop="sbumitBy" label="递交人" width="100" />--> |
| | | <el-table-column show-overflow-tooltip prop="expensesFee" label="医疗总费用" width="100" /> |
| | | <el-table-column show-overflow-tooltip prop="innsureFee" label="保险赔付费用" width="120" /> |
| | | <el-table-column show-overflow-tooltip prop="settleStatus" label="是否结案" width="120" :formatter="settleStatusFormat" /> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="fsnumShow" show-overflow-tooltip prop="occupationalId" label="" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredTime" label="受伤日期" width="120" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredTime" label="受伤日期" width="110"> |
| | | <template slot-scope="scope"> |
| | | <span class="table-button" @click="editOccupational(scope.row)">{{ scope.row.injuredTime }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column show-overflow-tooltip prop="injuredAddress" label="受伤地点" width="100" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredPart" label="受伤部位" width="100" /> |
| | | <el-table-column show-overflow-tooltip prop="injuredDescribe" label="受伤经过描述" width="140" /> |
| | |
| | | </div> |
| | | <div ref="lzaj" class="lzaj"> |
| | | <div class="jbxxTitle"> |
| | | 劳资案件 |
| | | 仲裁案件 |
| | | </div> |
| | | |
| | | <div class="jbxxCon"> |
| | |
| | | <el-form |
| | | ref="accidentCasesForm" |
| | | :model="accidentCasesForm" |
| | | :rules="accidentCasesRules" |
| | | label-position="right" |
| | | label-width="120px" |
| | | > |
| | |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="备注"> |
| | | <el-input v-model="accidentCasesForm.remark" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="putAccidentCases('accidentCasesForm')">保 存</el-button> |
| | | |
| | | <el-button v-if="dialogshowArr[9].read" type="primary" @click="putAccidentCases('accidentCasesForm')">保 存</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog title="工伤案件" append-to-body :visible.sync="dialogshowArr[10].show" width="50%"> |
| | | <el-form |
| | | ref="occupationalForm" |
| | | :model="occupationalForm" |
| | | :rules="occupationalRules" |
| | | label-position="right" |
| | | label-width="140px" |
| | | > |
| | |
| | | </el-row> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="putOccupational('occupationalForm')">保 存</el-button> |
| | | <el-button v-if="dialogshowArr[10].read" type="primary" @click="putOccupational('occupationalForm')">保 存</el-button> |
| | | |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog title="劳资案件" append-to-body :visible.sync="dialogshowArr[11].show" width="50%"> |
| | | <el-dialog title="仲裁案件" append-to-body :visible.sync="dialogshowArr[11].show" width="50%"> |
| | | <el-form |
| | | ref="laborTroubleForm" |
| | | :model="laborTroubleForm" |
| | |
| | | </div> |
| | | </el-dialog> |
| | | </el-dialog> |
| | | |
| | | <!-- 摄像头拍照弹窗 --> |
| | | <el-dialog |
| | | title="拍照上传" |
| | | :visible.sync="cameraDialogVisible" |
| | | width="640px" |
| | | :close-on-click-modal="false" |
| | | @close="closeCamera" |
| | | > |
| | | <div class="camera-container"> |
| | | <!-- 视频预览 --> |
| | | <video |
| | | v-show="!capturedImage" |
| | | ref="video" |
| | | class="camera-video" |
| | | autoplay |
| | | playsinline |
| | | /> |
| | | <!-- 画布(用于拍照) --> |
| | | <canvas ref="canvas" style="display: none;" /> |
| | | |
| | | <!-- 拍照结果预览 --> |
| | | <img |
| | | v-if="capturedImage" |
| | | :src="capturedImage" |
| | | class="captured-image" |
| | | > |
| | | </div> |
| | | |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeCamera">取消</el-button> |
| | | <el-button |
| | | v-if="!capturedImage" |
| | | type="primary" |
| | | @click="takePhoto" |
| | | > |
| | | 拍照 |
| | | </el-button> |
| | | <el-button |
| | | v-if="capturedImage" |
| | | @click="retakePhoto" |
| | | > |
| | | 重拍 |
| | | </el-button> |
| | | <el-button |
| | | v-if="capturedImage" |
| | | type="primary" |
| | | @click="confirmPhoto" |
| | | > |
| | | 确认使用 |
| | | </el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <script> |
| | |
| | | show: false |
| | | }, |
| | | { |
| | | show: false |
| | | show: false, |
| | | read: false |
| | | }, |
| | | { |
| | | show: false |
| | | show: false, |
| | | read: false |
| | | }, |
| | | { |
| | | show: false |
| | |
| | | } |
| | | ], |
| | | empBaseInfoImageUrl: '', |
| | | // 摄像头相关 |
| | | cameraDialogVisible: false, |
| | | capturedImage: '', |
| | | stream: null, |
| | | rules: { |
| | | archivesNumb: [{ required: true, message: '请输入档案号', trigger: 'blur' }, { |
| | | max: 20, |
| | |
| | | creator: '', |
| | | modifyTime: '', |
| | | modifier: '', |
| | | |
| | | empStatus: 0, |
| | | version: '' |
| | | }, |
| | |
| | | modifyTime: '', |
| | | modifier: '', |
| | | empStatus: 0, |
| | | version: '' |
| | | version: '', |
| | | annualLeave: '' |
| | | }, |
| | | fsnumShow: false, |
| | | badRecordForm: { |
| | |
| | | this.initunemploymentData() // 失业金领取 |
| | | this.initinsuranceData() // 社保申请 |
| | | this.initremarkInfoData() // 备注 |
| | | this.initlaborTroubleData() // 劳资案件 |
| | | this.initlaborTroubleData() // 仲裁案件 |
| | | this.initoccupationalData() // 工伤案件 |
| | | this.initbadRecordData() // 不良记录 |
| | | this.initaccidentCasesData() // 意外险案件 |
| | |
| | | getIndex($index) { |
| | | return (this.pagination.num - 1) * this.pagination.size + $index + 1 |
| | | }, |
| | | // 打开摄像头 |
| | | openCamera() { |
| | | this.cameraDialogVisible = true |
| | | this.$nextTick(() => { |
| | | this.initCamera() |
| | | }) |
| | | }, |
| | | // 初始化摄像头 |
| | | async initCamera() { |
| | | try { |
| | | // 请求摄像头权限 |
| | | this.stream = await navigator.mediaDevices.getUserMedia({ |
| | | video: { |
| | | width: { ideal: 640 }, |
| | | height: { ideal: 480 }, |
| | | facingMode: 'user' // 前置摄像头 |
| | | }, |
| | | audio: false |
| | | }) |
| | | |
| | | // 将视频流绑定到 video 元素 |
| | | const video = this.$refs.video |
| | | if (video) { |
| | | video.srcObject = this.stream |
| | | } |
| | | } catch (error) { |
| | | this.$message.error('无法访问摄像头,请检查摄像头权限设置') |
| | | console.error('摄像头初始化失败:', error) |
| | | } |
| | | }, |
| | | // 拍照 |
| | | takePhoto() { |
| | | const video = this.$refs.video |
| | | const canvas = this.$refs.canvas |
| | | |
| | | if (!video || !canvas) return |
| | | |
| | | // 设置画布尺寸 |
| | | canvas.width = video.videoWidth || 640 |
| | | canvas.height = video.videoHeight || 480 |
| | | |
| | | // 绘制视频帧到画布 |
| | | const ctx = canvas.getContext('2d') |
| | | ctx.drawImage(video, 0, 0, canvas.width, canvas.height) |
| | | |
| | | // 转换为图片数据 |
| | | this.capturedImage = canvas.toDataURL('image/jpeg', 0.9) |
| | | |
| | | // 停止摄像头 |
| | | this.stopCamera() |
| | | }, |
| | | // 重拍 |
| | | retakePhoto() { |
| | | this.capturedImage = '' |
| | | this.initCamera() |
| | | }, |
| | | // 确认使用照片 |
| | | confirmPhoto() { |
| | | if (this.capturedImage) { |
| | | // 设置图片预览 |
| | | this.empBaseInfoImageUrl = this.capturedImage |
| | | |
| | | // 设置表单数据(Base64格式) |
| | | this.empBaseInfoForm.imagePath = this.capturedImage |
| | | |
| | | // 关闭弹窗 |
| | | this.closeCamera() |
| | | |
| | | this.$message.success('照片已保存') |
| | | } |
| | | }, |
| | | // 关闭摄像头 |
| | | closeCamera() { |
| | | this.stopCamera() |
| | | this.cameraDialogVisible = false |
| | | this.capturedImage = '' |
| | | }, |
| | | // 停止摄像头流 |
| | | stopCamera() { |
| | | if (this.stream) { |
| | | this.stream.getTracks().forEach(track => { |
| | | track.stop() |
| | | }) |
| | | this.stream = null |
| | | } |
| | | |
| | | const video = this.$refs.video |
| | | if (video) { |
| | | video.srcObject = null |
| | | } |
| | | }, |
| | | cleanOccupational() { |
| | | this.occupationalForm.occupationalId = '' |
| | | this.occupationalForm.injuredTime = '' |
| | |
| | | this.accidentCasesForm.version = row.version |
| | | this.thisShowIndex = 9 |
| | | this.dialogshowArr[9].show = true |
| | | this.dialogshowArr[9].read = false |
| | | }, |
| | | editOccupational(row) { |
| | | this.isAdd = false |
| | |
| | | this.occupationalForm.remark = row.remark |
| | | this.thisShowIndex = 10 |
| | | this.dialogshowArr[10].show = true |
| | | this.dialogshowArr[10].read = false |
| | | }, |
| | | editLaborTrouble(row) { |
| | | this.isAdd = false |
| | |
| | | height: 100px; |
| | | } |
| | | |
| | | // 头像包装器 |
| | | .avatar-wrapper { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | margin-bottom: 10px; |
| | | |
| | | .avatar { |
| | | width: 150px; |
| | | height: 150px; |
| | | border-radius: 4px; |
| | | cursor: pointer; |
| | | object-fit: cover; |
| | | border: 1px dashed #d9d9d9; |
| | | |
| | | &:hover { |
| | | border-color: #409eff; |
| | | } |
| | | } |
| | | |
| | | .avatar-uploader-placeholder { |
| | | width: 150px; |
| | | height: 150px; |
| | | border: 1px dashed #d9d9d9; |
| | | border-radius: 4px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | justify-content: center; |
| | | align-items: center; |
| | | cursor: pointer; |
| | | background-color: #fafafa; |
| | | |
| | | &:hover { |
| | | border-color: #409eff; |
| | | background-color: #f0f9ff; |
| | | } |
| | | |
| | | .avatar-uploader-icon { |
| | | font-size: 28px; |
| | | color: #8c939d; |
| | | line-height: 1; |
| | | margin-bottom: 8px; |
| | | } |
| | | |
| | | .upload-tip { |
| | | font-size: 12px; |
| | | color: #8c939d; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 摄像头容器 |
| | | .camera-container { |
| | | text-align: center; |
| | | |
| | | .camera-video { |
| | | width: 100%; |
| | | max-width: 600px; |
| | | height: auto; |
| | | border-radius: 4px; |
| | | background: #000; |
| | | } |
| | | |
| | | .captured-image { |
| | | width: 100%; |
| | | max-width: 600px; |
| | | height: auto; |
| | | border-radius: 4px; |
| | | } |
| | | } |
| | | |
| | | .table-button { |
| | | color: #a00515; |
| | | display: inline-block; |