<template> <!-- 弹出框表单 --> <el-drawer :title="title" :visible.sync="open" :direction="direction" :destroy-on-close="true" size="50%" > <el-form ref="form" class="dra_content" :model="form" :rules="rules" label-width="120px" > <div class="box"> <div class="title">异常情况</div> <div class="content"> <el-row> <el-col :span="8" >员工:{{ form.staffName ? form.staffName : "--" }}</el-col > <el-col :span="8" >所属部门:{{ form.deptName ? form.deptName : "--" }}</el-col > <el-col :span="8" >窗口编号:{{ form.windowNum ? form.windowNum : "--" }}</el-col > </el-row> <el-row> <el-col :span="8" >考勤组:{{ form.attendanceGroupName ? form.attendanceGroupName : "--" }}</el-col > <el-col :span="8" >异常时间:{{ formatterDate(form.errorTime) }}</el-col > <el-col :span="8" >上下班时间:{{ form.goOffTimeStr ? form.goOffTimeStr : "--" }}</el-col > </el-row> <el-row> <el-col :span="10" >实际打卡时间:{{ formatterDate(form.actualAttendTime) }}</el-col > <el-col :span="9" >异常结果:{{ form.errorResult ? form.errorResult : "--" }}</el-col > <el-col :span="5" >加分/扣分方式:{{ form.subAddType ? util_formatter("subAddType", form.subAddType) : "--" }}</el-col > </el-row> <el-row> <el-col :span="8" >加分/扣分时间:{{ formatterDate(form.deductTime) }}</el-col > <el-col :span="8" >加分/扣分人员:{{ form.deductPerson ? form.deductPerson : "--" }}</el-col > </el-row> </div> </div> <div class="box"> <div class="title">核查情况</div> <div class="content"> <el-row> <el-col :span="8" >核查结果:{{ form.checkResult ? form.checkResult : "--" }}</el-col > <el-col :span="8" >绩效规则:{{ form.ruleName ? form.ruleName : "--" }}</el-col > <el-col :span="8" >加分/扣除分值:<span style="color:#ff0000">{{ form.score ? form.score : "--" }}</span></el-col > </el-row> <el-row> <el-col :span="8" >说明:{{ form.checkDesc ? form.checkDesc : "--" }}</el-col > <el-col :span="8" >核查人员:{{ form.checkPerson ? form.checkPerson : "--" }}</el-col > <el-col :span="8" >核查时间:{{ formatterDate(form.checkTime) }}</el-col > </el-row> </div> </div> <div class="box"> <div class="title">申诉情况</div> <div class="content"> <el-row> <el-col :span="24" >申诉说明:{{ form.appealDesc ? form.appealDesc : "--" }}</el-col > <el-col :span="24" >申诉时间:{{ formatterDate(form.appealTime) }}</el-col > <el-col :span="24" >申诉附件: <span v-if="!form.performAttendAppealFilesList"> -- </span> <div class="img_content" v-else> <div class="imgBox" v-for="val in form.performAttendAppealFilesList" :key="val.id" > <el-image v-if=" val.filePath.includes('.png') || val.filePath.includes('.jpg') || val.filePath.includes('.jpeg') || val.filePath.includes('.bmp') " style="width: 100px; height: 100px" :src=" `${ val.filePath.indexOf('http') == -1 ? baseUrl + val.filePath : val.filePath }` " :preview-src-list=" val.filePath.indexOf('http') == -1 ? [baseUrl + val.filePath] : [val.filePath] " > </el-image> <img src="../../../../assets/images/fileImg.png" v-else alt="" @click="hanldeDownloadFile(val)" /> <p>{{ val.fileName }}</p> </div> </div> </el-col> </el-row> </div> </div> <div class="box" v-if="form.view == '查看'"> <div class="title">申诉结果</div> <div class="content"> <el-row> <el-col :span="8" >申诉结果:{{ form.appealResult ? util_formatter("appealResult", form.appealResult) : "--" }}</el-col > <el-col :span="8" >处理人员:{{ util_formatter("updateUserId", form.updateUserId + "") }}</el-col > <el-col :span="8" >处理时间: {{ formatterDate(form.updateTime) }}</el-col > </el-row> <el-row> <el-col :span="24" >说明:{{ form.remark ? form.remark : "--" }}</el-col > </el-row> </div> </div> <div class="box" v-else> <div class="title">申诉结果</div> <div class="content"> <el-row> <el-col :span="24"> <el-form-item label="申诉结果:"> <el-radio-group v-model="form.appealResult" @input="radioChange" > <el-radio :label="1">通过</el-radio> <el-radio :label="2">不通过</el-radio> </el-radio-group> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="说明:"> <el-input type="textarea" v-model="form.remark"></el-input> </el-form-item> </el-col> </el-row> </div> </div> <form-buttons @submit="submitForm" v-if="pageInfo.type != 'view'" noCancelBtn /> </el-form> <!-- <el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-row> <Field label="核查记录Id" prop="checkRecordId" v-model="form.checkRecordId" placeholder="请输入核查记录Id" /> <Field label="员工ID" prop="staffId" v-model="form.staffId" placeholder="请输入员工ID" /> <Field label="员工姓名" prop="staffName" v-model="form.staffName" placeholder="请输入员工姓名" /> <Field label="工号" prop="workNum" v-model="form.workNum" placeholder="请输入工号" /> <Field label="所属部门" prop="deptId" v-model="form.deptId" placeholder="请输入所属部门" /> <Field label="所属部门名称" prop="deptName" v-model="form.deptName" placeholder="请输入所属部门名称" /> <Field label="所属考勤组ID" prop="attendanceGroupId" v-model="form.attendanceGroupId" placeholder="请输入所属考勤组ID" /> <Field label="所属考勤组名称" prop="attendanceGroupName" v-model="form.attendanceGroupName" placeholder="请输入所属考勤组名称" /> <Field label="考勤时间" prop="attendanceDate" v-model="form.attendanceDate" type="date" /> <Field label="绩效规则id" prop="ruleId" v-model="form.ruleId" placeholder="请输入绩效规则id" /> <Field label="规则名称" prop="ruleName" v-model="form.ruleName" placeholder="请输入规则名称" /> <Field label="加分/扣分方式" prop="subMethod" v-model="form.subMethod" type="select" :enumData="dict.subMethod" placeholder="请选择加分/扣分方式" /> <Field label="增减类型" prop="subAddType" v-model="form.subAddType" type="select" :enumData="dict.subAddType" placeholder="请选择增减类型" /> <Field label="扣分或增加分值" prop="score" v-model="form.score" placeholder="请输入扣分或增加分值" /> <Field label="上下班时间" prop="goOffTimeStr" v-model="form.goOffTimeStr" placeholder="请输入上下班时间" /> <Field label="异常时间" prop="errorTime" v-model="form.errorTime" type="date" /> <Field label="实际打卡时间" prop="actualAttendTime" v-model="form.actualAttendTime" type="date" /> <Field label="异常处理结果" prop="errorResult" v-model="form.errorResult" placeholder="请输入异常处理结果" /> <Field label="核查人员" prop="checkPerson" v-model="form.checkPerson" placeholder="请输入核查人员" /> <Field label="核查时间" prop="checkTime" v-model="form.checkTime" type="date" /> <Field label="核查说明" prop="checkDesc" v-model="form.checkDesc" type="textarea" placeholder="请输入核查说明" /> <Field label="核查结果" prop="checkResult" v-model="form.checkResult" placeholder="请输入核查结果" /> <Field label="处理状态" prop="processStatus" v-model="form.processStatus" type="select" :enumData="dict.processStatus" placeholder="请选择处理状态" /> <Field label="申诉说明" prop="appealDesc" v-model="form.appealDesc" placeholder="请输入申诉说明" /> <Field label="申诉时间" prop="appealTime" v-model="form.appealTime" type="date" /> <Field label="申诉结果" prop="appealResult" v-model="form.appealResult" type="select" :enumData="dict.appealResult" placeholder="请选择申诉结果" /> <Field label="说明" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入说明" /> </el-row> <el-divider content-position="center" >绩效记录申诉附件信息信息</el-divider > <br /> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAddPerformAttendAppealFiles" >添加</el-button > </el-col> <el-col :span="1.5"> <el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDeletePerformAttendAppealFiles" >删除</el-button > </el-col> </el-row> <el-table :data="performAttendAppealFilesList" :row-class-name="rowPerformAttendAppealFilesIndex" @selection-change="handlePerformAttendAppealFilesSelectionChange" ref="performAttendAppealFiles" > <el-table-column type="selection" width="50" align="center" /> <el-table-column label="序号" align="center" prop="index" width="50" /> <el-table-column label="文件名称" prop="fileName"> <template slot-scope="scope"> <el-input v-model="scope.row.fileName" placeholder="请输入文件名称" /> </template> </el-table-column> <el-table-column label="文件地址" prop="filePath"> <template slot-scope="scope"> <el-input v-model="scope.row.filePath" placeholder="请输入文件地址" /> </template> </el-table-column> <el-table-column label="创建用户" prop="createUserId"> <template slot-scope="scope"> <el-input v-model="scope.row.createUserId" placeholder="请输入创建用户" /> </template> </el-table-column> <el-table-column label="创建时间" prop="createTime"> <template slot-scope="scope"> <el-input v-model="scope.row.createTime" placeholder="请输入创建时间" /> </template> </el-table-column> <el-table-column label="更新用户" prop="updateUserId"> <template slot-scope="scope"> <el-input v-model="scope.row.updateUserId" placeholder="请输入更新用户" /> </template> </el-table-column> <el-table-column label="更新时间" prop="updateTime"> <template slot-scope="scope"> <el-input v-model="scope.row.updateTime" placeholder="请输入更新时间" /> </template> </el-table-column> </el-table> <form-buttons @submit="submitForm" v-if="pageInfo.type != 'view'" noCancelBtn /> </el-form> --> </el-drawer> </template> <script> import form from "@/assets/mixins/formdialog"; import { timestampToTime } from "@/assets/utils/dateFormat.js"; import { downloadFile } from "@/assets/utils/index"; import { formatterDate } from "@/assets/utils/index"; export default { name: "PerformAttendAppealDetail", mixins: [form], components: {}, created() { this.changePath("perform/attend/appeal"); }, data() { return { // 子表选中数据 checkedPerformAttendAppealFiles: [], // 绩效记录申诉附件信息表格数据 performAttendAppealFilesList: [], // 遮罩层 loading: true, // 弹出层标题 title: "绩效记录申诉信息", // 是否显示弹出层 open: false, direction: "rtl", toString: [ "subMethod", "subAddType", "processStatus", "appealResult", "updateUserId", ], toDate: [ "attendanceDate", "errorTime", "actualAttendTime", "checkTime", "appealTime", ], baseUrl: process.env.VUE_APP_API_BASE_URL + "/", // 表单校验 rules: { staffName: [ { required: true, message: "请输入员工姓名", trigger: "blur" }, { max: 64, message: "最多只能录入64个字符", trigger: "blur" }, ], createTime: [{ required: true, message: "请选择创建时间" }], }, urls: { saveUrl: "/perform/attend/appeal/audit", }, }; }, methods: { radioChange(val) { this.form.appealResult = val; this.$forceUpdate(this.form); }, util_formatter(key, val) { try { return this.dict[key][val]; } catch (error) { return val; } }, formatterDate, // 下载附件 hanldeDownloadFile(val) { downloadFile(val.filePath, val.fileName); }, picMatter(val) { if (val || val !== "--") { return ( <el-image src={val.indexOf("http") == -1 ? this.baseUrl + val : val} preview-src-list={ val.indexOf("http") == -1 ? this.baseUrl + val : val } style="width: 100px" ></el-image> ); } else { return val; } }, /** 绩效记录申诉附件信息序号 */ rowPerformAttendAppealFilesIndex({ row, rowIndex }) { row.index = rowIndex + 1; }, /** 绩效记录申诉附件信息添加按钮操作 */ handleAddPerformAttendAppealFiles() { let obj = {}; obj.fileName = ""; obj.filePath = ""; obj.createUserId = ""; obj.createTime = ""; obj.updateUserId = ""; obj.updateTime = ""; this.performAttendAppealFilesList.push(obj); }, /** 绩效记录申诉附件信息删除按钮操作 */ handleDeletePerformAttendAppealFiles() { if (this.checkedPerformAttendAppealFiles.length == 0) { this.$alert("请先选择要删除的绩效记录申诉附件信息数据", "提示", { confirmButtonText: "确定", }); } else { this.performAttendAppealFilesList.splice( this.checkedPerformAttendAppealFiles[0].index - 1, 1 ); } }, /** 单选框选中数据 */ handlePerformAttendAppealFilesSelectionChange(selection) { if (selection.length > 1) { this.$refs.performAttendAppealFiles.clearSelection(); this.$refs.performAttendAppealFiles.toggleRowSelection(selection.pop()); } else { this.checkedPerformAttendAppealFiles = selection; } }, // 渲染前置处理 beforeRender(data) { if (data.performAttendAppealFilesList) { this.performAttendAppealFilesList = data.performAttendAppealFilesList; } return data; }, /** 编辑 */ edit(row) { this.reset(); this.query = { id: row.id }; // this.urls.currUrl = "/perform/attend/appeal/info"; // this.getData(); this.$get("/perform/attend/appeal/info", { id: row.id }).then((res) => { if (res.code == 1) { this.form = res.data; this.dict = res.dict; } else { this.reset(); } this.form.appealResult = ""; this.form.processStatus = 2; this.form.remark = ""; this.form.view = "核查"; this.open = true; }); this.pageInfo.type = "edit"; this.title = "处理绩效记录申诉信息"; }, /** 新增 */ add(row) { this.reset(); this.urls.currUrl = "perform/attend/appeal/add"; this.getData(); this.pageInfo.type = "add"; this.title = "新增绩效记录申诉信息"; }, /** 查看*/ view(row) { this.reset(); this.query = { id: row.id }; // this.urls.currUrl = "perform/attend/appeal/view"; // this.getData(); this.$get("/perform/attend/appeal/view", { id: row.id }).then((res) => { if (res.code == 1) { this.form = res.data.entity; this.dict = res.data.dict; } else { this.reset(); } this.form.view = "查看"; this.pageInfo.type = "view"; this.open = true; }); this.title = "绩效记录申诉信息详细"; }, /**取消按钮 */ cancel() { this.open = false; }, /**获取数据后弹框 */ afterRender(data) { this.open = true; }, afterSubmit(data) { this.open = false; this.$emit("ok"); }, // 表单重置 reset() { this.form = { checkRecordId: null, staffId: null, staffName: "", workNum: "", deptId: null, deptName: "", attendanceGroupId: null, attendanceGroupName: "", attendanceDate: null, ruleId: null, ruleName: "", subMethod: 1, subAddType: 1, score: 0.0, goOffTimeStr: "", errorTime: null, actualAttendTime: null, errorResult: "", checkPerson: "", checkTime: null, checkDesc: "", checkResult: "", processStatus: 1, appealDesc: "", appealTime: null, appealResult: "", remark: "", }; this.resetForm("form"); }, resetForm(refName) { if (this.$refs[refName]) { this.$refs[refName].resetFields(); } }, }, }; </script> <style lang="less" scoped> .dra_content { width: 100%; height: 100%; padding: 20px; .box { width: 100%; height: auto; background: inherit; background-color: rgba(242, 246, 252, 1); border: none; border-radius: 8px; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; padding: 15px 0 0 15px; .title { color: #1890ff; font-size: 16px; padding-left: 10px; position: relative; margin-bottom: 30px; &::after { content: ""; display: block; border-left: 3px solid #1890ff; left: 0; top: 0; bottom: 0; position: absolute; } } .content { width: 100%; padding: 10px; font-family: "微软雅黑", sans-serif; font-weight: 400; font-style: normal; font-size: 14px; margin-left: 0 auto; margin-bottom: 30px; /deep/.el-row { margin-bottom: 20px; } .img_content { width: 100%; height: auto; display: flex; flex-wrap: wrap; padding: 10px 0 0 10px; } .imgBox { display: flex; flex-direction: column; justify-content: center; align-items: center; width: 100px; height: 100px; cursor: pointer; margin-right: 10px; img { width: 100%; height: 80px; margin-top: 10px; } p { width: 100%; text-align: center; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } } } } } </style>