From 039b4a3407bf7b6878a564df3324d9da5cfb7527 Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期四, 26 十二月 2024 14:33:05 +0800 Subject: [PATCH] 完成7.4样品接收 --- src/components/view/a7-sample-registration.vue | 676 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/assets/api/controller.js | 14 + 2 files changed, 690 insertions(+), 0 deletions(-) diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js index d3115c7..08409ff 100644 --- a/src/assets/api/controller.js +++ b/src/assets/api/controller.js @@ -56,6 +56,7 @@ processOrder, processMethodSearchNew, processMethodVerify, + processSample, } } @@ -725,3 +726,16 @@ delVerifyMethodFileList:'/processMethodVerify/delVerifyMethodFileList', // 鍒犻櫎楠岃瘉鍘熷璁板綍鍒楄〃 delMethodVerify:'/processMethodVerify/delMethodVerify', // 鍒犻櫎鏍囧噯鏂规硶鏇存柊楠岃瘉 } + +// 7.4妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�-鏍峰搧鎺ユ敹 +const processSample = { + pageProcessTotalSample:'/processTotalSample/pageProcessTotalSample',//鏌ョ湅鍘嗗彶 + submitProcessTotalSample :'/processTotalSample/submitProcessTotalSample ',// 鎻愪氦鍘嗗彶 浼犲弬id + checkProcessTotalSample:'/processTotalSample/checkProcessTotalSample',//瀹℃牳 浼犲弬id鍜岄�氳繃涓嶉�氳繃state(涓枃) + ratifyProcessTotalSample:'/processTotalSample/ratifyProcessTotalSample',//鎵瑰噯 浼犲弬id鍜岄�氳繃涓嶉�氳繃state(涓枃) + pageProcessSample:'/processSample/pageProcessSample',//鏌ヨ璇︽儏 鍒嗛〉鏌ヨ閲岄潰totaldealId 浼犲弬鍘嗗彶鐨刬d + addProcessSample:'/processSample/addProcessSample',//鏂板璇︽儏鐨勬暟鎹� + delProcessSample:'/processSample/delProcessSample',//鍒犻櫎 浼犲弬id + doProcessSample:'/processSample/doProcessSample',//淇敼 + getProcessSample:'/processSample/getProcessSample',// 鏌ョ湅 浼犲弬id +} diff --git a/src/components/view/a7-sample-registration.vue b/src/components/view/a7-sample-registration.vue new file mode 100644 index 0000000..ed9380b --- /dev/null +++ b/src/components/view/a7-sample-registration.vue @@ -0,0 +1,676 @@ +<template> + <div class="sample-registration"> + <el-row class="title"> + <el-col :span="20" style="padding-left: 20px;text-align: left;">鏍峰搧鎺ユ敹</el-col> + </el-row> + <el-tabs type="border-card" v-model="activeName" style="height: 100%;" @tab-click="componentData0.entity.totalSampleId=''"> + <el-tab-pane label="濉啓" name="濉啓" style="height: 100%;" :key="1"> + <el-button size="small" type="primary" @click="handleAdd0" style="margin-left: 20px;" v-if="addPower">鏂板</el-button> + <div class="table" style="height: calc(100% - 200px)" v-if="activeName=='濉啓'"> + <ValueTable ref="ValueTable0" :url="$api.processSample.pageProcessSample" + :componentData="componentData0" :key="upIndex0" :delUrl="$api.processSample.delProcessSample" /> + </div> + </el-tab-pane> + <el-tab-pane label="鍘嗗彶璁板綍" name="鍘嗗彶璁板綍" style="height: 100%;" :key="2"> + <div class="search"> + <div class="search_thing"> + <div class="search_label">骞存湀锛�</div> + <div class="search_input"> + <el-date-picker + v-model="componentData.entity.month" + type="month" + placeholder="閫夋嫨鏈�" format="yyyy-MM" + value-format="yyyy-MM" size="small" @change="refreshTable()"> + </el-date-picker> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> + </div> + <div class="table"> + <ValueTable ref="ValueTable" :url="$api.processSample.pageProcessTotalSample" + :componentData="componentData" :key="upIndex"/> + </div> + </el-tab-pane> + </el-tabs> + + <!-- 濉啓 --> + <!-- <el-dialog + title="濉啓" + :visible.sync="editDialogVisible" + width="1000px" :close-on-click-modal="false" :close-on-press-escape="false"> + <template #title> + <span>濉啓</span> + <el-button size="small" type="primary" @click="handleAdd0" style="position: absolute;right: 60px;">鏂板</el-button> + </template> + <div style="max-height: 80vh;overflow-y: auto;" > + <ValueTable ref="ValueTable0" :url="$api.processTotaldeal.pageProcessDeal" + :componentData="componentData0" :key="upIndex0" style="height: calc(100% - 10px);" :delUrl="$api.processTotaldeal.delProcessDeal" /> + </div> + </el-dialog> --> + <!-- 鏂板鏍峰搧 --> + <el-dialog + :title="title" + :visible.sync="addDialogVisible" + width="400px"> + <el-row> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏍峰搧鍚嶇О锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.sampleName"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏍峰搧缂栧彿锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.sampleCode"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏉ユ牱鍗曚綅锛�</div> + <div class="search_input"> + <el-select v-model="addInfo.sampleSupplier" size="small"> + <el-option :label="item.company" :value="item.company" v-for="(item,index) in customPageList" :key="item.id"></el-option> + </el-select> + </div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏁版牱鍝侀噺锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.num"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鐣欐牱鏃ユ湡锛�</div> + <div class="search_input"> + <el-date-picker + v-model="addInfo.leaveDate" + type="date" + size="small" + placeholder="閫夋嫨鏃ユ湡" + format="yyyy-MM-dd" + value-format="yyyy-MM-dd" style="width: 100%;"> + </el-date-picker></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏀舵牱鏃ユ湡锛�</div> + <div class="search_input"> + <el-date-picker + v-model="addInfo.receiveDate" + type="date" + size="small" + placeholder="閫夋嫨鏃ユ湡" + format="yyyy-MM-dd" + value-format="yyyy-MM-dd" style="width: 100%;"> + </el-date-picker></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏍峰搧鐘舵�侊細</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.sampleState"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">閫�鏍风鏀�/澶勭悊鏃ユ湡锛�</div> + <div class="search_input"> + <el-date-picker + v-model="addInfo.dealTime" + type="date" + size="small" + placeholder="閫夋嫨鏃ユ湡" + format="yyyy-MM-dd" + value-format="yyyy-MM-dd" style="width: 100%;"> + </el-date-picker></div> + </div> + </el-col> + </el-row> + <span slot="footer" class="dialog-footer"> + <el-button @click="addDialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="submitAdd" :loading="addLoading">纭� 瀹�</el-button> + </span> + </el-dialog> + <!-- 璇︽儏/涓嬭浇/瀹℃牳/鎵瑰噯 --> + <el-dialog + :title="title0" + :visible.sync="lookDialogVisible" + width="800px" :class="{downPdf:title0=='涓嬭浇'}" :modal="title0!='涓嬭浇'" top="5vh"> + <filePreview v-if="lookDialogVisible" :fileUrl="javaApi+'/word/'+currentInfo.url" + :currentFile="{}" style="max-height: 70vh;overflow-y: auto;"/> + <!-- <div class="dialog-body"> + <div id="dialogBody"> + <h4 style="display: flex;align-items: center;flex-direction: column;justify-content: center;"> + <span style="font-size: 20px;">鏍峰搧澶勭悊鐢宠琛�</span> + <span>Sample Handing Request Form</span> + </h4> + <p style="display: flex;justify-content: space-between;margin-top: 16px;"> + <span>{{ currentInfo.complainNo }}</span> + <span>NO:</span> + </p> + <table border="1" class="tables" cellpadding="10"> + <tr> + <td> + <p>搴忓彿</p> + <p class="en">No.</p> + </td> + <td> + <p>鏍峰搧鍚嶇О</p> + <p class="en">Sample name</p> + </td> + <td> + <p>鏍峰搧缂栧彿</p> + <p class="en">Sample number</p> + </td> + <td> + <p>渚涙牱鍗曚綅</p> + <p class="en">Sample unit</p> + </td> + <td> + <p>鏁伴噺</p> + <p class="en">Quantity</p> + </td> + <td> + <p>澶勭悊鏂瑰紡</p> + <p class="en">Processing</p> + </td> + <td> + <p>鏃堕棿</p> + <p class="en">Date</p> + </td> + </tr> + <tr v-for="(item,index) in currentInfo.arr" :key="index"> + <td>{{ index+1 }}</td> + <td>{{ item.sampleName }}</td> + <td>{{ item.sampleCode }}</td> + <td>{{ item.sampleSupplier }}</td> + <td>{{ item.num }}</td> + <td>{{ item.dealMethod }}</td> + <td>{{ item.dealTime }}</td> + </tr> + </table> + <div class="user-info" v-if="title0=='鏌ョ湅'||title0=='涓嬭浇'"> + <div class="user-info-item"> + <p>濉〃锛�<img :src="javaApi+'img/'+currentInfo.submitUrl" :alt="currentInfo.submitUserName" style="width: 100px;height: 60px"></p> + <p class="en">Filing</p> + </div> + <div class="user-info-item"> + <p>瀹℃牳锛�<img :src="javaApi+'/img/'+currentInfo.examineUrl" :alt="currentInfo.examineUserName" style="width: 100px;height: 60px"></p> + <p class="en">Audit</p> + </div> + <div class="user-info-item"> + <p>鎵瑰噯锛�<img :src="javaApi+'/img/'+currentInfo.ratifyUrl" :alt="currentInfo.ratifyUserName" style="width: 100px;height: 60px"></p> + <p class="en">Approve</p> + </div> + </div> + </div> + </div> --> + <span slot="footer" class="dialog-footer" v-if="title0=='瀹℃牳'||title0=='鎵瑰噯'"> + <el-button @click="submitCheck('涓嶉�氳繃')" :loading="noCheckLoading">涓嶉�氳繃</el-button> + <el-button type="primary" @click="submitCheck('閫氳繃')" :loading="checkLoading">閫� 杩�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import ValueTable from '../tool/value-table.vue' +import {exportHtmlToPDF} from '../../util/downHtmlToPDF' +import filePreview from '../tool/file-preview.vue' +export default { + components: { + ValueTable, + filePreview, + }, + name: "SampleDisposal", + data() { + return { + activeName:'濉啓', + title:'鏂板', + addDialogVisible:false, + addLoading:false, + outLoading:false, + editDialogVisible:false, + lookDialogVisible:false, + title0:'鏌ョ湅', + noCheckLoading:false, + checkLoading:false, + // 鍘嗗彶鍒楄〃 + componentData: { + entity: { + month: null, + orderBy: { + field: 'id', + order: 'desc' + } + }, + isIndex: true, + showSelect: false, + select: false, + do: [{ + id: 'handleLook', + font: '鏌ョ湅', + type: 'text', + method: 'handleLook', + }, { + id: 'handleDown0', + font: '涓嬭浇', + type: 'text', + method: 'handleDown0', + disabFun: (row, index) => { + return !row.url + } + }, + // { + // id: 'handleAdd', + // font: '濉啓', + // type: 'text', + // method: 'handleAdd', + // disabFun: (row, index) => { + // return row.submitState=='宸叉彁浜�' + // } + // }, + { + id: 'handleSubmit', + font: '鎻愪氦', + type: 'text', + method: 'handleSubmit', + disabFun: (row, index) => { + return !!row.submitState&&row.submitState!='寰呮彁浜�' + } + }, { + id: 'handleCheck', + font: '瀹℃牳', + type: 'text', + method: 'handleCheck', + disabFun: (row, index) => { + return row.examineState=='閫氳繃'||row.submitState=='寰呮彁浜�' + } + }, { + id: 'handleApproval', + font: '鎵瑰噯', + type: 'text', + method: 'handleApproval', + disabFun: (row, index) => { + return row.ratifyState=='閫氳繃'||row.submitState=='寰呮彁浜�' + } + }], + tagField: {}, + selectField: {}, + requiredAdd: [], + requiredUp: [], + needSort: [], + inputType:'' + }, + // 鏍峰搧鍒楄〃 + componentData0: { + entity: { + totalSampleId: null, + orderBy: { + field: 'id', + order: 'desc' + } + }, + isIndex: true, + showSelect: false, + select: false, + do: [{ + id: 'handleAdd0', + font: '淇敼', + type: 'text', + method: 'handleAdd0' + },{ + id: 'delete', + font: '鍒犻櫎', + type: 'text', + method: 'doDiy' + }], + tagField: {}, + selectField: {}, + requiredAdd: [], + requiredUp: [], + needSort: [], + inputType:聽'' + }, + upIndex0: 100, + entityCopy: {}, + upIndex: 0, + addInfo:{},//鏂板鏍峰搧 + customPageList:[], + currentInfo:{ + arr:[] + },//鏌ョ湅鐨勮鎯� + outPower:true, + addPower:true, + }; + }, + mounted() { + this.entityCopy = this.HaveJson(this.componentData.entity); + this.getCustomPageList() + // this.getPower() + }, + methods: { + getPower(){ + let power = JSON.parse(sessionStorage.getItem('power')) + let add = false + let out = false + let submitProcessTotaldeal = false + let checkProcessTotaldeal = false + let ratifyProcessTotaldeal = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'addProcessDeal') { + add = true + } + // if (power[i].menuMethod == 'exportProcessEvaluate') { + // out = true + // } + if (power[i].menuMethod == 'submitProcessTotaldeal') { + submitProcessTotaldeal = true + } + if (power[i].menuMethod == 'checkProcessTotaldeal') { + checkProcessTotaldeal = true + } + if (power[i].menuMethod == 'ratifyProcessTotaldeal') { + ratifyProcessTotaldeal = true + } + } + if (!ratifyProcessTotaldeal) { + this.componentData.do.splice(4, 1) + } + if (!checkProcessTotaldeal) { + this.componentData.do.splice(3, 1) + } + if (!submitProcessTotaldeal) { + this.componentData.do.splice(2, 1) + } + if (!add) { + this.componentData0.do.splice(1, 1) + this.componentData0.do.splice(0, 1) + } + this.addPower = add + }, + // 鑾峰彇閫佹牱鍗曚綅鍒楄〃 + getCustomPageList(){ + this.$axios.post(this.$api.user.selectCustomPageList,{ + entity: { + orderBy: { + field: 'createTime', + order: 'desc' + } + }, + page:{ + current:-1, + size:-1 + } + },{headers: { + 'Content-Type': 'application/json' + }}).then(res=>{ + this.customPageList = res.data.body.records + }).catch(err=>{}); + }, + refreshTable() { + this.$refs['ValueTable'].selectList() + }, + refresh() { + this.componentData.entity = this.HaveJson(this.entityCopy) + this.upIndex++ + this.refreshTable() + }, + // 濉啓 + // handleAdd(row){ + // this.componentData0.entity.totaldealId = row.id + // this.editDialogVisible = true + // }, + // 鎵撳紑鏂板鐣岄潰 + handleAdd0(row){ + if(row){ + this.addInfo = this.HaveJson(row) + this.title = '缂栬緫' + }else{ + this.title = '鏂板' + this.addInfo = {} + } + this.addDialogVisible = true + }, + // 鎻愪氦鏂板 + submitAdd(){ + if(this.addInfo.id){ + // 缂栬緫 + this.addLoading = true + this.$axios.post(this.$api.processSample.doProcessSample,{ + totalSampleId:this.componentData0.entity.totalSampleId, + ...this.addInfo + },{headers: { + 'Content-Type': 'application/json' + },noQs:false}).then(res=>{ + this.addLoading = false + if (res.code === 201) return + this.addDialogVisible = false + this.$message({ + type: 'success', + message: '缂栬緫鎴愬姛!' + }); + this.$refs.ValueTable0.selectList() + }).catch(err=>{}); + }else{ + // 鏂板 + this.addLoading = true + this.$axios.post(this.$api.processSample.addProcessSample,{ + totalSampleId:this.componentData0.entity.totalSampleId, + ...this.addInfo + },{headers: { + 'Content-Type': 'application/json' + },noQs:false}).then(res=>{ + this.addLoading = false + if (res.code === 201) return + this.addDialogVisible = false + this.$message({ + type: 'success', + message: '鏂板鎴愬姛!' + }); + this.$refs.ValueTable0.selectList() + }).catch(err=>{}); + } + }, + // 鎻愪氦 + handleSubmit(row){ + this.$confirm('鏄惁鎻愪氦 '+row.month+' 鏈堜唤鐨勬暟鎹�', '鎻愪氦', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.$axios.post(this.$api.processSample.submitProcessTotalSample,{ + id:row.id + }).then(res=>{ + if (res.code === 201) return + this.$message({ + type: 'success', + message: '鎻愪氦鎴愬姛!' + }); + this.$refs['ValueTable'].selectList() + }).catch(err=>{}); + }) + }, + // 鏌ョ湅 + handleLook(row){ + // console.log(row) + // this.title0 = '鏌ョ湅' + // this.commonFun(row) + this.activeName = '濉啓' + this.componentData0.entity.totalSampleId = row.id + this.$refs['ValueTable0'].selectList() + }, + commonFun(row,callbanck){ + this.currentInfo = row + this.componentData0.entity.totalSampleId = row.id + this.$axios.post(this.$api.processSample.pageProcessSample,{ + entity:this.componentData0.entity, + page:{ + current:-1, + size:-1 + } + },{headers: { + 'Content-Type': 'application/json' + }}).then(res=>{ + this.currentInfo.arr = res.data.body.records + this.lookDialogVisible = true + if(callbanck){ + callbanck() + } + }).catch(err=>{}); + }, + // 瀹℃牳 + handleCheck(row){ + this.title0 = '瀹℃牳' + this.commonFun(row) + }, + // 鎵瑰噯 + handleApproval(row){ + this.title0 = '鎵瑰噯' + this.commonFun(row) + }, + // 鎻愪氦瀹℃牳/鎵瑰噯 + submitCheck(state){ + if(state=='閫氳繃'){ + this.checkLoading = true + }else{ + this.noCheckLoading = true + } + if(this.title0=='瀹℃牳'){ + this.$axios.post(this.$api.processSample.checkProcessTotalSample,{ + id:this.currentInfo.id, + state:state + }).then(res=>{ + this.checkLoading = false + this.noCheckLoading = false + if (res.code === 201) return + this.$message({ + type: 'success', + message: '鎿嶄綔鎴愬姛!' + }); + this.$refs['ValueTable'].selectList() + this.lookDialogVisible = false + }).catch(err=>{}); + }else if(this.title0=='鎵瑰噯'){ + this.$axios.post(this.$api.processSample.ratifyProcessTotalSample,{ + id:this.currentInfo.id, + state:state + }).then(res=>{ + this.checkLoading = false + this.noCheckLoading = false + if (res.code === 201) return + this.$message({ + type: 'success', + message: '鎿嶄綔鎴愬姛!' + }); + this.$refs['ValueTable'].selectList() + this.lookDialogVisible = false + }).catch(err=>{}); + } + }, + // 瀵煎嚭璇︽儏 + handleDown0(row){ + // 鍓嶇涓嬭浇 + // this.title0 = '涓嬭浇' + // let that = this + // function down() { + // setTimeout(() => { + // that.$nextTick(() => { + // const element = document.getElementById("dialogBody"); + // exportHtmlToPDF(element,that.currentInfo.month+' 鏍峰搧澶勭悊鐢宠琛�').then(res=>{ + // that.lookDialogVisible = false + // }) + // }) + // }, 1000); + // } + // this.commonFun(row,down) + + // 鍚庣涓嬭浇 + let url = this.javaApi+'/word/'+row.url + const link = document.createElement('a'); + link.href = url; + link.download = row.month+' 鏍峰搧鎺ユ敹琛�'; + link.click(); + } + }, +} +</script> + +<style scoped> +.title { + height: 60px; + line-height: 60px; + } + .search { + background-color: #fff; + height: 40px; + display: flex; + align-items: center; + position: relative; + } + + .search_thing { + width: 350px; + display: flex; + align-items: center; + } + + .search_label { + width: 110px; + font-size: 14px; + text-align: right; + } + + .search_input { + width: calc(100% - 110px); + } + + .table { + background-color: #fff; + width: calc(100% - 40px); + height: calc(100% - 60px - 140px); + padding: 20px; + } + .downPdf{ + opacity: 0 !important; + } + .tables { + table-layout: fixed; + width: 100%; + margin-top: 10px; + } + + .tables td { + height: 40px; + width: 100px; + text-align: center; + font-size: 14px; + word-wrap: break-word; + white-space: normal; + } + .en{ + font-size: 12px; + word-break: break-word; /* 鑷姩鏂 */ + overflow-wrap: break-word; /* 闃叉婧㈠嚭 */ + white-space: normal; /* 榛樿鎹㈣ */ + } + .user-info{ + display: flex; + align-items: center; + justify-content: space-evenly; + margin-top: 20px; + } + .user-info .el-button{ + margin: 0; + } + >>>.el-tabs__content{ + height: 100%; + } +</style> -- Gitblit v1.9.3