From 0dac7ba33f77342d2a9a1392c820d10d3b72d76c Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期三, 28 九月 2022 16:02:47 +0800 Subject: [PATCH] '修改' --- src/views/specialWorkSystem/workProcess/workCheck/index.vue | 394 +++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 245 insertions(+), 149 deletions(-) diff --git a/src/views/specialWorkSystem/workProcess/workCheck/index.vue b/src/views/specialWorkSystem/workProcess/workCheck/index.vue index eafbbee..cc23da6 100644 --- a/src/views/specialWorkSystem/workProcess/workCheck/index.vue +++ b/src/views/specialWorkSystem/workProcess/workCheck/index.vue @@ -5,13 +5,13 @@ <el-col :span="6" style="display:flex;align-items: center"> <span style="white-space: nowrap">作业证编号:</span> <div class="grid-content topInfo"> - <el-input v-model="searchWord"></el-input> + <el-input v-model="workPermitNo" placeholder="请输入作业证编号"></el-input> </div> </el-col> <el-col :span="6" style="display:flex;align-items: center"> <span style="white-space: nowrap">作业类型:</span> <div class="grid-content topInfo"> - <el-select v-model="searchType" placeholder="请选择作业类型"> + <el-select v-model="workType" placeholder="请选择作业类型"> <el-option v-for="item in workTypeList" :key="item.id" @@ -30,27 +30,26 @@ <el-col :span="12" class="mainCardBtn"> <el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button> </el-col> - <el-button type="primary" :icon="Refresh" size="default"/> + <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData"/> </el-row> <el-table - ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{background: '#fafafa'}" > - <el-table-column type="index" label="序号" width="200"/> - <el-table-column property="id" label="作业证编号" width="200"/> - <el-table-column property="workType" label="作业类型" width="200"/> - <el-table-column property="checkInfo" label="检查内容"/> - <el-table-column property="result" label="检查结果"> + <el-table-column type="index" label="序号" width="80"/> + <el-table-column property="workPermitNo" label="作业证编号"/> + <el-table-column property="workTypeDesc" label="作业类型"/> + <el-table-column property="checkContent" label="检查内容"/> + <el-table-column property="checkResultDesc" label="检查结果"> <template #default="scope"> - <span :class="scope.row.result == '异常' ? 'red': ''">{{ scope.row.result }}</span> + <span :class="scope.row.checkResultDesc == '异常' ? 'red': ''">{{ scope.row.checkResultDesc}}</span> </template> </el-table-column> - <el-table-column property="desc" label="描述" width="200"/> - <el-table-column property="name" label="分析人"/> - <el-table-column property="updateTime" label="分析时间"/> + <el-table-column property="info" label="描述" show-overflow-tooltip width="200"/> + <el-table-column property="operatorUname" label="分析人"/> + <el-table-column property="operationTime" label="分析时间" width="180"/> <el-table-column fixed="right" label="操作" align="center" width="250"> <template #default="scope"> <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> @@ -65,7 +64,7 @@ small=false background layout="total, sizes, prev, pager, next, jumper" - :total="100" + :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> @@ -76,35 +75,44 @@ <el-dialog v-model="dialogDetails" title="检查记录"> <el-form :model="details" label-width="120px"> <el-form-item label="作业证编号"> - <el-input v-model="details.id" readonly/> + <el-input v-model="details.workPermitNo" readonly/> </el-form-item> <el-form-item label="作业类型"> - <el-input v-model="details.workType" readonly/> + <el-input v-model="details.workTypeDesc" readonly/> </el-form-item> <el-form-item label="检查内容"> - <el-input v-model="details.checkInfo" readonly/> + <el-input v-model="details.checkContent" readonly/> </el-form-item> <el-form-item label="检查结果"> - <el-input v-model="details.result" readonly/> + <el-input :class="details.checkResultDesc == '异常' ? 'red': ''" v-model="details.checkResultDesc" readonly/> + </el-form-item> + <el-form-item label="现场图片" v-if="details.imagePaths && details.imagePaths.length>0"> + <el-image v-for="item in details.imagePaths" :preview-src-list="details.imagePaths" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> </el-form-item> <el-form-item label="描述"> - <el-input v-model="details.desc" type="textarea" readonly/> + <el-input v-model="details.info" type="textarea" readonly/> </el-form-item> <el-form-item label="分析人"> - <el-input v-model="details.name" readonly/> + <el-input v-model="details.operatorUname" readonly/> </el-form-item> <el-form-item label="分析时间"> - <el-input v-model="details.updateTime" readonly/> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + <el-input v-model="details.operationTime" readonly/> </el-form-item> </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button type="primary" @click="dialogDetails = false">确认</el-button> + </span> + </template> </el-dialog> <el-dialog v-model="dialogAddRecord" title="新增" @close="closeAdd" @open="openAdd"> <el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules"> - <el-form-item label="作业证编号" prop="id"> - <el-input v-model="addRecord.id"> </el-input> + <el-form-item label="作业证编号" prop="workPermitNo"> + <el-input v-model="addRecord.workPermitNo" placeholder="作业编号须为已审批作业的编号,可点击右方按钮查询"> + <template #append> + <el-button :icon="Search" @click="dialogPermitNo = true"/> + </template> + </el-input> </el-form-item> <el-form-item label="作业类型" prop="workType"> <el-select v-model="addRecord.workType"> @@ -116,130 +124,131 @@ /> </el-select> </el-form-item> - <el-form-item label="检查内容" prop="checkInfo"> - <el-input v-model="addRecord.checkInfo"> </el-input> + <el-form-item label="检查内容" prop="checkContent"> + <el-input v-model="addRecord.checkContent"> </el-input> </el-form-item> - <el-form-item label="检查结果" prop="result"> - <el-select v-model="addRecord.result"> - <el-option label="正常" value="0"/> - <el-option label="异常" value="1"/> + <el-form-item label="检查结果" prop="checkResult"> + <el-select v-model="addRecord.checkResult"> + <el-option label="正常" value="1"/> + <el-option label="异常" value="2"/> </el-select> </el-form-item> - <el-form-item label="描述" prop="desc"> - <el-input v-model="addRecord.desc" type="textarea"> </el-input> + <el-form-item label="现场照片" prop="imagePaths"> + <el-upload accept="image/*" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl"> + <el-icon><Plus /></el-icon> + <template #tip> + <div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传3张</div> + </template> + </el-upload> </el-form-item> - <el-form-item> - <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> - <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + <el-form-item label="描述" prop="info"> + <el-input v-model="addRecord.info" type="textarea"> </el-input> </el-form-item> </el-form> + <template #footer> + <span class="dialog-footer"> + <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="dialogVisible"> + <img w-full :src="dialogImageUrl" alt="Preview Image" /> + </el-dialog> + <el-dialog v-model="dialogPermitNo" title="选择相应的作业编号"> + <permit-no ref="permitNoInfo"></permit-no> + <template #footer> + <span class="dialog-footer"> + <el-button type="warning" @click="dialogPermitNo = false" size="default" plain>取消</el-button> + <el-button type="primary" @click="confirmPermitNo" size="default">确认</el-button> + </span> + </template> </el-dialog> </div> </template> <script lang="ts"> - import { toRefs, reactive, ref, onMounted } from 'vue'; + import {toRefs, reactive, ref, onMounted, defineAsyncComponent} from 'vue'; import { storeToRefs } from 'pinia'; import { initBackEndControlRoutes } from '/@/router/backEnd'; import { useUserInfo } from '/@/stores/userInfo'; import { Session } from '/@/utils/storage'; import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue'; - import { ElTable } from 'element-plus'; - import { FormInstance, FormRules, ElMessage } from 'element-plus'; + import { ElTable, ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus' import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage'; + import { workProcessApi } from '/@/api/specialWorkSystem/workProcess'; + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import axios from 'axios'; // 定义接口来定义对象的类型 interface stateType { tableData: Array<any>; - departmentList: Array<any>; - department:string; - workerList: Array<string>; - casProps: {}; + imgLimit: number; + fileList: Array<file>, + uploadUrl: string, + isOverSize: Boolean, + dialogVisible: Boolean, + dialogImageUrl: string | null, multipleSelection: Array<any>; deleteArr: Array<any>; dialogDetails: boolean; dialogAddRecord: boolean; + dialogPermitNo: boolean; deleteDialog: boolean; deleteSetDialog: boolean; pageIndex: number; pageSize: number; chosenIndex: null | number; deleteId: null | number; - searchWord: string; - searchType: number | null + workPermitNo: string; + workType: number | null; totalSize: number; - addRecord: { - - }; - details: { - - }; + addRecord: {}; + details: {}; workTypeList: Array<any> } - + interface file { + url: string; + } export default { name: 'workCheck', - components: {}, + components: { + permitNo: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workProcess/components/dialogPermitNo.vue')) + }, setup() { const userInfo = useUserInfo(); const { userInfos } = storeToRefs(userInfo); - + const permitNoInfo = ref() const state = reactive<stateType>({ pageIndex: 1, pageSize: 10, totalSize: 0, chosenIndex: null, - searchWord: '', - searchType: null, - tableData: [ - { - id: 'GTXH-0000001', - workType: '动火作业', - checkInfo: '动火作业检查', - result: '正常', - desc: 'A车间动火作业过程检查', - name: '李羽飞', - updateTime: '2022-08-31 12:00:00' - }, - { - id: 'GTXH-0000002', - workType: '动火作业', - checkInfo: '动火作业检查', - result: '正常', - desc: 'B车间动火作业过程气体检查', - name: '李羽飞', - updateTime: '2022-08-31 16:31:44' - }, - { - id: 'GTXH-0000003', - workType: '动火作业', - checkInfo: '动火作业检查', - result: '异常', - desc: '', - name: '李羽飞', - updateTime: '2022-08-31 17:05:20' - } - ], - departmentList: [], - department: '', - workerList: [], - casProps: { - expandTrigger: 'hover', - emitPath: false, - value: 'depId', - label: 'depName' - }, + workPermitNo: '', + workType: null, + isOverSize: false, + fileList: [], + imgLimit: 3, + uploadUrl: '', + dialogVisible: false, + dialogImageUrl: null, + tableData: [], multipleSelection: [], dialogDetails: false, dialogAddRecord: false, + dialogPermitNo: false, deleteDialog: false, deleteSetDialog: false, addRecord: { - + workPermitNo: '', + checkContent: '', + checkResult: '', + info: '', + source: 2, + imagePaths: [] }, - details: { - - }, + details: {}, deleteId: null, deleteArr: [], workTypeList: [ @@ -256,34 +265,25 @@ const addRef = ref<FormInstance>(); const addRules = reactive<FormRules>({ - id: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workPermitNo: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - checkInfo: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - result: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - desc: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - updateTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + checkContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + checkResult: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + imagePaths: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + info: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], }); // 页面载入时执行方法 onMounted(() => { - // getListByPage(); - // getAllDepartment(); + getListByPage(); }); - // 分页获取班组管理列表 + // 分页获取作业检查列表 const getListByPage = async () => { - const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { groupName: state.searchWord, containGroupMemberEnable: true } }; - let res = await teamManageApi().getRecordPage(data); + const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { workType: state.workType, workPermitNo: state.workPermitNo } }; + let res = await workProcessApi().getCheckListPage(data); if (res.data.code === '200') { - state.tableData = res.data.data.map((item) => { - if (!item.groupMembers || item.groupMembers == null) { - item.groupMembers = []; - } else { - item.groupMembers = Array.from(item.groupMembers, ({ username }) => username); - } - return item; - }); + state.tableData = res.data.data state.totalSize = res.data.total; } else { ElMessage({ @@ -293,36 +293,127 @@ } }; - // 获取部门列表 - const getAllDepartment = async () => { - let res = await teamManageApi().getAllDepartment(); - if (res.data.code === '200') { - state.departmentList = res.data.data; - } else { + // 图片上传 + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + const confirmPermitNo = ()=>{ + if(permitNoInfo.value.workPermitNo == ''){ ElMessage({ type: 'warning', - message: res.data.msg + message: '请选择相应的作业编码' }); + }else{ + state.addRecord.workPermitNo = permitNoInfo.value.workPermitNo + state.dialogPermitNo = false + } + } + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const handlePictureCardPreview = (uploadFile: { url: string }) => { + state.dialogImageUrl = uploadFile.url!; + state.dialogVisible = true; + }; + + const getUploadUrl = async (rawFile: any) => { + const fileSize = rawFile.size / 1024 < 500 ? '1' : '0' + if(fileSize === '0'){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过500k。' + }); + state.isOverSize = true + return false + }else{ + const res = await workApplyApi().getUploadUrl(rawFile.name); + state.addRecord.imagePaths.push(res.data.data.fileName) + state.uploadUrl = res.data.data.uploadUrl; + console.log(state.addRecord.imagePaths,state.uploadUrl,6666666666666) } }; - const handleChange = async (value) => { - state.addRecord.depId = value; - console.log(state.addRecord.department, 'de'); - let res = await teamManageApi().getAllMember(value); + const upload = async (params: any) => { + // const formData = new FormData(); + // formData.append('file', state.fileList[0].raw); + let reader = new FileReader(); + reader.readAsArrayBuffer(params.file); + reader.onload = async () => { + axios + .put(state.uploadUrl, reader.result, { + header: { 'Content-Type': 'multipart/form-data' } + }) + .then(() => { + // if (state.fileList.length === 2) { + // state.fileList.splice(0, 1); + // } + // console.log(state.form.workDetail.photos,'photos') + }); + }; + }; + + const beforeRemove = (file: {}, fileList: []) => { + const result = new Promise((resolve, reject) => { + if(!state.isOverSize){ + ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(() => { + // console.log(state.workDetail.photos,'path') + const list = JSON.parse(JSON.stringify(state.addRecord.imagePaths)) + fileList.map((item,index)=>{ + if(item.uid === file.uid){ + fileList.splice(index,1) + state.addRecord.photos.splice(index,1) + // 请求删除接口 + deletePic(false,list[index]) + } + }) + }) + .catch(() => { + reject(false); + }); + }else{ + const list = JSON.parse(JSON.stringify(state.addRecord.imagePaths)) + fileList.map((item,index)=>{ + if(item.uid === file.uid){ + fileList.splice(index,1) + state.addRecord.photos.splice(index,1) + deletePic(true,list[index]) + } + }) + state.isOverSize = false + } + }); + return result; + }; + + // 删除图片接口 + const deletePic = async(isOverSize:boolean,fileName:string)=>{ + const res = await workApplyApi().deleteFile({fileName: fileName}) if (res.data.code === '200') { - state.workerList = res.data.data; + ElMessage({ + type: isOverSize ? 'error' : 'success', + message: isOverSize ? '上传失败':'删除成功!' + }); } else { ElMessage({ type: 'warning', message: res.data.msg }); } - }; + } + // 关键词查询记录 const searchRecord = async () => { - if (state.searchWord == '') { + if (state.workPermitNo == ''&& state.workType == null) { ElMessage({ type: 'warning', message: '请输入查询关键词' @@ -333,17 +424,19 @@ }; const clearSearch = async () => { - state.searchWord = ''; + state.workPermitNo = ''; + state.workType = null; getListByPage(); }; - // 添加班组管理方法 + + // 添加气体检测方法 const addRecord = async (data: any) => { - let res = await teamManageApi().addRecord(data); + let res = await workProcessApi().postCheckReport(data); if (res.data.code === '200') { ElMessage({ type: 'success', - message: res.data.msg + message: '添加成功!' }); getListByPage(); } else { @@ -354,24 +447,15 @@ } }; + // 新增修改记录 const confirmAddRecord = async (formEl: FormInstance | undefined) => { if (!formEl) return; await formEl.validate(async (valid, fields) => { if (valid) { - const data = { - groupName: state.addRecord.groupName, - groupInfo: state.addRecord.groupInfo, - depId: state.addRecord.depId, - groupMemberIds: state.addRecord.groupMembers - }; - if (state.chosenIndex == null) { - await addRecord(data); - } else { - data.groupId = JSON.stringify(state.addRecord.groupId); - await editRecord(data); - } + await addRecord(state.addRecord); state.dialogAddRecord = false; + getListByPage(); } else { console.log('error submit!', fields); } @@ -426,7 +510,15 @@ Delete, Refresh, Plus, - handleChange, + Search, + permitNoInfo, + showTip, + confirmPermitNo, + handlePreview, + handlePictureCardPreview, + getUploadUrl, + upload, + beforeRemove, searchRecord, clearSearch, viewRecord, @@ -448,6 +540,10 @@ $homeNavLengh: 8; .red{ color: red; + + ::v-deep(input){ + color: red; + } } .home-container { height: calc(100vh - 144px); -- Gitblit v1.9.2