| | |
| | | "bootstart": "0.0.0", |
| | | "bootstrap": "^5.0.1", |
| | | "core-js": "^3.37.1", |
| | | "dom-to-image": "^2.6.0", |
| | | "dragula": "^3.7.3", |
| | | "echarts": "^5.4.2", |
| | | "element-ui": "^2.15.6", |
| | |
| | | personCommunicationAbility, |
| | | procurementSuppliesContents, |
| | | procurementSuppliesStore, |
| | | deviceAcceptance, |
| | | deviceAccidentReport, |
| | | deviceExaminePlan, |
| | | deviceCalibrationPlan, |
| | | deviceExternalApply, |
| | | deviceBreakdownMaintenance, |
| | | deviceMaintenancePlan, |
| | | deviceScrapped, |
| | | deviceInspectionRecord, |
| | | deviceTraceabilityManagement, |
| | | } |
| | | } |
| | | |
| | |
| | | exportExcel: '/procurementSuppliesStore/exportExcel', // èæå
¥åºå¯¼åº |
| | | updateStore: '/procurementSuppliesStore/updateStore', // èæå
¥åºä¿®æ¹ |
| | | } |
| | | |
| | | // 设å¤éªæ¶ï¼è£
å¤ï¼ |
| | | const deviceAcceptance = { |
| | | addDeviceAcceptance: '/deviceAcceptance/addDeviceAcceptance', // æ°å¢è®¾å¤éªæ¶ |
| | | updateDeviceAcceptance: '/deviceAcceptance/updateDeviceAcceptance', // ç¼è¾è®¾å¤éªæ¶ |
| | | delDeviceAcceptance: '/deviceAcceptance/delDeviceAcceptance', // å é¤è®¾å¤éªæ¶ |
| | | delDeviceAcceptanceFileList: '/deviceAcceptance/delDeviceAcceptanceFileList', // 设å¤éªæ¶éä»¶å é¤ |
| | | getDeviceAcceptance: '/deviceAcceptance/getDeviceAcceptance', // æ¥è¯¢è®¾å¤éªæ¶ |
| | | getDeviceAcceptanceFileList: '/deviceAcceptance/getDeviceAcceptanceFileList', // 设å¤éªæ¶éä»¶å表 |
| | | pageDeviceAcceptance: '/deviceAcceptance/pageDeviceAcceptance', // 设å¤éªæ¶å表 |
| | | uploadDeviceAcceptanceFile: '/deviceAcceptance/uploadDeviceAcceptanceFile', // 设å¤éªæ¶éä»¶æ°å¢ |
| | | exportDeviceAcceptance: '/deviceAcceptance/exportDeviceAcceptance', // å¯¼åº |
| | | } |
| | | |
| | | // 设å¤äºæ
|
| | | const deviceAccidentReport = { |
| | | addDeviceAccidentReport: '/deviceAccidentReport/addDeviceAccidentReport', // æ°å¢è®¾å¤äºæ
æ¥å |
| | | delDeviceAccidentReport: '/deviceAccidentReport/delDeviceAccidentReport', // å é¤è®¾å¤äºæ
æ¥å |
| | | getDeviceAccidentReport: '/deviceAccidentReport/getDeviceAccidentReport', // æ¥è¯¢è®¾å¤äºæ
æ¥å |
| | | pageDeviceAccidentReport: '/deviceAccidentReport/pageDeviceAccidentReport', // 设å¤äºæ
æ¥åå表 |
| | | exportDeviceAccidentReport: '/deviceAccidentReport/exportDeviceAccidentReport', // å¯¼åº |
| | | } |
| | | |
| | | // è®¾å¤æ ¸æ¥è®¡å |
| | | const deviceExaminePlan = { |
| | | addDeviceExaminePlanDetail: '/deviceExaminePlan/addDeviceExaminePlanDetail', // æ°å¢è®¾å¤æ ¸æ¥è®¡å详æ
|
| | | addExamineRecord: '/deviceExaminePlan/addExamineRecord', // æ°å¢æ ¸æ¥è®°å½ |
| | | addExamineRecordContrast: '/deviceExaminePlan/addExamineRecordContrast', // æ°å¢æ ¸æ¥å¯¹æ¯è®°å½ |
| | | delDeviceExaminePlanDetail: '/deviceExaminePlan/delDeviceExaminePlanDetail', // å é¤è®¾å¤æ ¸æ¥è®¡å详æ
|
| | | delQualitySupervise: '/deviceExaminePlan/delQualitySupervise', // è®¾å¤æ ¸æ¥è®¡åå é¤ |
| | | exportDeviceExaminePlanDetail: '/deviceExaminePlan/exportDeviceExaminePlanDetail', // 导åºè®¾å¤æ ¸æ¥è®¡å |
| | | getExamineRecord: '/deviceExaminePlan/getExamineRecord', // æ¥è¯¢æ ¸æ¥è®°å½ |
| | | getExamineRecordContrast: '/deviceExaminePlan/getExamineRecordContrast', // æ¥è¯¢æ ¸æ¥å¯¹æ¯è®°å½ |
| | | importDeviceExaminePlan: '/deviceExaminePlan/importDeviceExaminePlan', // 导å
¥è®¾å¤æ ¸æ¥è®¡å |
| | | pageDeviceExaminePlan: '/deviceExaminePlan/pageDeviceExaminePlan', // è®¾å¤æ ¸æ¥è®¡åå表 |
| | | pageDeviceExaminePlanDetail: '/deviceExaminePlan/pageDeviceExaminePlanDetail', // è®¾å¤æ ¸æ¥è®¡å详æ
å表 |
| | | ratifyDeviceExaminePlan: '/deviceExaminePlan/ratifyDeviceExaminePlan', // è®¾å¤æ ¸æ¥è®¡åæ¹å |
| | | reviewExamineRecord: '/deviceExaminePlan/reviewExamineRecord', // 夿 ¸æ ¸æ¥è®°å½ |
| | | reviewExamineRecordContrast: '/deviceExaminePlan/reviewExamineRecordContrast', // å®¡æ ¸æ ¸æ¥å¯¹æ¯è®°å½ |
| | | updateDeviceExaminePlanDetail: '/deviceExaminePlan/updateDeviceExaminePlanDetail', // ä¿®æ¹è®¾å¤æ ¸æ¥è®¡å详æ
|
| | | exportReviewExamineRecordDetail: '/deviceExaminePlan/exportReviewExamineRecordDetail', // æ ¸æ¥è®°å½å¯¼åº |
| | | exportReviewExamineRecordContrast: '/deviceExaminePlan/exportReviewExamineRecordContrast', // æ ¸æ¥å¯¹æ¯å¯¼åº |
| | | addDeviceExaminePlan: '/deviceExaminePlan/addDeviceExaminePlan', // æ·»å è®¾å¤æ ¸æ¥è®¡å |
| | | } |
| | | |
| | | // è®¾å¤æ ¡å计å |
| | | const deviceCalibrationPlan = { |
| | | pageDeviceCalibrationPlan: '/deviceCalibrationPlan/pageDeviceCalibrationPlan', // è®¾å¤æ ¡å计åå表æ¥è¯¢ |
| | | importDeviceCalibrationPlan: '/deviceCalibrationPlan/importDeviceCalibrationPlan', // 导å
¥è®¾å¤æ ¡å计 |
| | | ratifyDeviceCalibrationPlan: '/deviceCalibrationPlan/ratifyDeviceCalibrationPlan', // è®¾å¤æ ¡åè®¡åæ¹å |
| | | exportDeviceCalibrationPlanDetail: '/deviceCalibrationPlan/exportDeviceCalibrationPlanDetail', // è®¾å¤æ ¡å计åå¯¼åº |
| | | delQualitySupervise: '/deviceCalibrationPlan/delQualitySupervise', // è®¾å¤æ ¡å计åå é¤ |
| | | pageDeviceCalibrationPlanDetail: '/deviceCalibrationPlan/pageDeviceCalibrationPlanDetail', // è®¾å¤æ ¡å计å详æ
å表 |
| | | addDeviceCalibrationPlanDetail: '/deviceCalibrationPlan/addDeviceCalibrationPlanDetail', // æ°å¢è®¾å¤æ ¡å计å详æ
|
| | | updateDeviceCalibrationPlanDetail: '/deviceCalibrationPlan/updateDeviceCalibrationPlanDetail', // ä¿®æ¹è®¾å¤æ ¡å计å详æ
|
| | | delDeviceCalibrationPlanDetail: '/deviceCalibrationPlan/delDeviceCalibrationPlanDetail', // è®¾å¤æ ¡å计å详æ
å é¤ |
| | | addDeviceCalibrationPlan: '/deviceCalibrationPlan/addDeviceCalibrationPlan', // æ°å¢è®¾å¤æ ¡å计å |
| | | } |
| | | |
| | | // åç¨å¤é¨ä»ªå¨ |
| | | const deviceExternalApply = { |
| | | addDeviceExternalApply: '/deviceExternalApply/addDeviceExternalApply', // æ°å¢å©ç¨å¤é¨è®¾å¤ç³è¯· |
| | | delDeviceExternalApply: '/deviceExternalApply/delDeviceExternalApply', // å é¤å©ç¨å¤é¨è®¾å¤ç³è¯· |
| | | getDeviceExternalApply: '/deviceExternalApply/getDeviceExternalApply', // æ¥è¯¢å©ç¨å¤é¨è®¾å¤ç³è¯· |
| | | pageDeviceExternalApply: '/deviceExternalApply/pageDeviceExternalApply', // å©ç¨å¤é¨è®¾å¤ç³è¯·å表 |
| | | exportDeviceExternalApply: '/deviceExternalApply/exportDeviceExternalApply', // å¯¼åº |
| | | } |
| | | |
| | | // è®¾å¤æ
éä¸ç»´ä¿® |
| | | const deviceBreakdownMaintenance = { |
| | | addDeviceBreakdownMaintenance: '/deviceBreakdownMaintenance/addDeviceBreakdownMaintenance', // æ°å¢è®¾å¤æ
éç»´ä¿® |
| | | delDeviceBreakdownMaintenance: '/deviceBreakdownMaintenance/delDeviceBreakdownMaintenance', // å é¤è®¾å¤æ
éç»´ä¿® |
| | | getDeviceBreakdownMaintenance: '/deviceBreakdownMaintenance/getDeviceBreakdownMaintenance', // æ¥è¯¢è®¾å¤æ
éç»´ä¿® |
| | | pageDeviceBreakdownMaintenance: '/deviceBreakdownMaintenance/pageDeviceBreakdownMaintenance', // è®¾å¤æ
éç»´ä¿®å表 |
| | | exportDeviceBreakdownMaintenance: '/deviceBreakdownMaintenance/exportDeviceBreakdownMaintenance', // å¯¼åº |
| | | } |
| | | |
| | | // 设å¤ä¿å
» |
| | | const deviceMaintenancePlan = { |
| | | addMaintenancePlan: '/deviceMaintenancePlan/addMaintenancePlan', // æ°å¢è®¾å¤ä¿å
»è®¡å |
| | | deleteMaintenancePlan: '/deviceMaintenancePlan/deleteMaintenancePlan', // å é¤è®¾å¤ä¿å
»è®¡å |
| | | exportDeviceMaintenancePlan: '/deviceMaintenancePlan/exportDeviceMaintenancePlan', // 导åºè®¾å¤ä¿å
»è®¡å |
| | | getMaintenancePlanDetail: '/deviceMaintenancePlan/getMaintenancePlanDetail', // æ¥è¯¢è®¾å¤ä¿å
»è®¡å详æ
|
| | | reviewMaintenancePlanStatus: '/deviceMaintenancePlan/reviewMaintenancePlanStatus', // ä¿å
»è®¡åå®¡æ ¸ç¶æä¿®æ¹ |
| | | selectDeviceMaintenancePlanByPage: '/deviceMaintenancePlan/selectDeviceMaintenancePlanByPage', // å页æ¥è¯¢è®¾å¤ä¿å
»è®¡å |
| | | updateMaintenancePlan: '/deviceMaintenancePlan/updateMaintenancePlan', // ä¿®æ¹è®¾å¤ä¿å
»è®¡å |
| | | } |
| | | |
| | | // è®¾å¤æ¥åº |
| | | const deviceScrapped = { |
| | | addDeviceScrapped: '/deviceScrapped/addDeviceScrapped', // æ°å¢è®¾å¤æ¥åºç³è¯· |
| | | delDeviceScrapped: '/deviceScrapped/delDeviceScrapped', // å é¤è®¾å¤æ¥åºç³è¯· |
| | | getDeviceScrapped: '/deviceScrapped/getDeviceScrapped', // æ¥è¯¢è®¾å¤æ¥åºç³è¯· |
| | | pageDeviceScrapped: '/deviceScrapped/pageDeviceScrapped', // è®¾å¤æ¥åºç³è¯·å表 |
| | | exportDeviceScrapped: '/deviceScrapped/exportDeviceScrapped', // å¯¼åº |
| | | } |
| | | |
| | | // 设å¤ç¹æ£ |
| | | const deviceInspectionRecord = { |
| | | addDeviceInspectionRecord: '/deviceInspectionRecord/addDeviceInspectionRecord', // æ°å¢è®¾å¤ç¹æ£è®°å½ |
| | | deleteDeviceInspectionRecord: '/deviceInspectionRecord/deleteDeviceInspectionRecord', // å é¤è®¾å¤ç¹æ£è®°å½ |
| | | exportDeviceInspectionRecord: '/deviceInspectionRecord/exportDeviceInspectionRecord', // 导åºè®¾å¤ç¹æ£è®°å½ |
| | | getDeviceInspectionRecordByPage: '/deviceInspectionRecord/getDeviceInspectionRecordByPage', // å页æ¥è¯¢è®¾å¤ç¹æ£è®°å½ |
| | | updateDeviceInspectionRecord: '/deviceInspectionRecord/updateDeviceInspectionRecord', // ä¿®æ¹è®¾å¤ç¹æ£è®°å½ |
| | | reviewDeviceInspectionRecord: '/deviceInspectionRecord/reviewDeviceInspectionRecord', // 夿 ¸è®¾å¤ç¹æ£è®°å½ |
| | | getDeviceInspectionRecord: '/deviceInspectionRecord/getDeviceInspectionRecord', // 设å¤ç¹æ£è®°å½è¯¦æ
|
| | | } |
| | | |
| | | // 设å¤é弿º¯æºè®¡å |
| | | const deviceTraceabilityManagement = { |
| | | addTraceabilityManagement: '/deviceTraceabilityManagement/addTraceabilityManagement', // æ°å¢é弿º¯æºè®¡å |
| | | deleteTraceabilityManagement: '/deviceTraceabilityManagement/deleteTraceabilityManagement', // å é¤é弿º¯æºè®¡å |
| | | exportDeviceTraceabilityManagement: '/deviceTraceabilityManagement/exportDeviceTraceabilityManagement', // 导åºé弿º¯æºè®¡å |
| | | getTraceabilityManagementDetail: '/deviceTraceabilityManagement/getTraceabilityManagementDetail', // æ¥è¯¢é弿º¯æºè®¡å详æ
|
| | | reviewTraceabilityManagementStatus: '/deviceTraceabilityManagement/reviewTraceabilityManagementStatus', // é弿º¯æºè®¡åå®¡æ ¸ç¶æä¿®æ¹ |
| | | selectDeviceTraceabilityManagementByPage: '/deviceTraceabilityManagement/selectDeviceTraceabilityManagementByPage', // å页æ¥è¯¢é弿º¯æºè®¡å |
| | | updateTraceabilityManagement: '/deviceTraceabilityManagement/updateTraceabilityManagement', // ä¿®æ¹é弿º¯æºè®¡å |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="data-acquisition-config"> |
| | | <div> |
| | | <el-row class="title"> |
| | | <el-col :span="6" style="padding-left: 20px;text-align: left;">æ°éé
ç½®</el-col> |
| | | <el-col :span="18" style="text-align: right;"> |
| | | <el-button size="medium" type="primary" @click="fileConfiguration">æä»¶é
ç½®</el-button> |
| | | <el-button size="medium" @click="$parent.closeDataVue()"> |
| | | <span style="color: #3A7BFA;">è¿å</span> |
| | | </el-button> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div class="table"> |
| | | <el-table :data="tableList.slice( |
| | | (page.current - 1) * page.size, |
| | | page.current * page.size |
| | | ) |
| | | " border tooltip-effect="dark" style="width: 74%;" height="100%" :span-method="spanMethod"> |
| | | <el-table-column type="index" label="åºå·" align="center" width="65"></el-table-column> |
| | | <el-table-column prop="deviceName" align="center" min-width="100" label="设å¤åç§°"></el-table-column> |
| | | <el-table-column prop="fileType" align="center" label="æä»¶åç¼"></el-table-column> |
| | | <el-table-column prop="collectUrl" align="center" min-width="100" show-overflow-tooltip |
| | | label="ééå°å"></el-table-column> |
| | | <el-table-column prop="storageUrl" align="center" min-width="100" show-overflow-tooltip |
| | | label="åå¨å°å"></el-table-column> |
| | | <el-table-column prop="ip" align="center" label="IPå°å" min-width="100"></el-table-column> |
| | | <el-table-column prop="sample" align="center" label="æ£éªå¯¹è±¡" show-overflow-tooltip |
| | | min-width="150"></el-table-column> |
| | | <el-table-column prop="inspectionItemClass" align="center" label="æ£éªé¡¹åç±»" min-width="120"></el-table-column> |
| | | <el-table-column prop="inspectionItem" align="center" label="æ£éªé¡¹" min-width="100"></el-table-column> |
| | | <el-table-column prop="inspectionItemSubclass" align="center" label="æ£éªå项" min-width="100"></el-table-column> |
| | | <el-table-column prop="referx" align="center" label="åç
§X" min-width="100"></el-table-column> |
| | | <el-table-column prop="x" align="center" label="X"></el-table-column> |
| | | <el-table-column prop="refery" align="center" label="åç
§Y" min-width="100"></el-table-column> |
| | | <el-table-column prop="y" align="center" label="Y"></el-table-column> |
| | | <el-table-column prop="anotherName" align="center" label="å«å" min-width="100"></el-table-column> |
| | | <el-table-column prop="matchingName" align="center" label="å¹é
åç§°" min-width="100"></el-table-column> |
| | | <el-table-column prop="formula" align="center" label="å
¬å¼"></el-table-column> |
| | | <el-table-column prop="section" fixed="right" label="æä½" width="120"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="dataConfig(scope.row)">æ°éé
ç½®</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <div class="page" v-if="tableList.length > 0"> |
| | | <el-pagination @size-change="sizeChange" @current-change="currentChange" :current-page="page.current" |
| | | :page-sizes="[10, 20, 30, 50, 100]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper" |
| | | :total="tableList.length"> |
| | | </el-pagination> |
| | | </div> |
| | | <el-dialog title="æ°éé
ç½®" :visible.sync="dialogVisible3" width="920px" :before-close="closeForm"> |
| | | <el-form :model="configForm" label-position="top" size="small" ref="configForm" label-width="100px" |
| | | class="demo-ruleForm"> |
| | | <el-table :data="domains" style="width: 100%" height="300"> |
| | | <el-table-column label="åºå·" type="index" width="80"> |
| | | <template v-slot="scope"> |
| | | {{ getIndexWithAlphabet(scope.$index) }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="referx" label="åç
§X" min-width="140"> |
| | | <template v-slot="scope"> |
| | | <el-input style="width: 100%" v-model="scope.row.referx"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="x" label="X" min-width="100"> |
| | | <template v-slot="scope"> |
| | | <el-input style="width: 100%" v-model="scope.row.x"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="refery" label="åç
§Y" min-width="140"> |
| | | <template v-slot="scope"> |
| | | <el-input style="width: 100%" v-model="scope.row.refery"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="y" label="Y" min-width="100"> |
| | | <template v-slot="scope"> |
| | | <el-input style="width: 100%" v-model="scope.row.y"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="anotherName" label="å«å" min-width="140"> |
| | | <template v-slot="scope"> |
| | | <el-input style="width: 100%" v-model="scope.row.anotherName"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="matchingName" label="å¹é
åç§°" min-width="140"> |
| | | <template v-slot="scope"> |
| | | <el-input style="width: 100%" v-model="scope.row.matchingName"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" width="150"> |
| | | <template v-slot="scope"> |
| | | <el-button @click.prevent="removeDomain(scope.row)" size="small" type="text">å é¤</el-button> |
| | | <el-button @click="addDomain" size="small" type="text">æ°å¢</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="fomItem2"> |
| | | <el-form-item class="fomItemInput1"> |
| | | <template v-slot="label"> |
| | | å
¬å¼ï¼ |
| | | <el-tooltip v-for="(formula, key) in formulas" class="itemFomItem" effect="dark" :content="formula.content" :key="key" |
| | | placement="top"> |
| | | <label>{{ formula.label }}()</label> |
| | | </el-tooltip> |
| | | <el-input type="textarea" autosi:autosize="{ minRows: 2, maxRows: 4}" ze placeholder="请è¾å
¥å
容" |
| | | v-model="configForm.formula" @change="evalResult"> |
| | | </el-input> |
| | | </template> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-row> |
| | | <el-button @click="closeForm">å æ¶</el-button> |
| | | <el-button type="primary" @click="submitForm3" :loading="upLoad3">ç¡® å®</el-button> |
| | | </el-row> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="æ°éé
ç½®" :visible.sync="dialogVisible4" width="400px"> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"> |
| | | <span style="color:red;margin-right: 4px;">*</span>IPï¼ |
| | | </div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.ip"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"> |
| | | <span style="color:red;margin-right: 4px;">*</span>ééå°åï¼ |
| | | </div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.collectUrl"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label">å¨åå°åï¼</div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.storageUrl"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"> |
| | | <span style="color:red;margin-right: 4px;">*</span>æä»¶åç¼ï¼ |
| | | </div> |
| | | <el-select v-model="configForm.fileType" size="small" placeholder="è¯·éæ©" style="width: 100%;"> |
| | | <el-option v-for="item in fileTypeOptions" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label">å§æåæ®µï¼</div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.entrustCode"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label">æ ·ååæ®µï¼</div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.sampleCode"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label">æä»¶åç§°ï¼</div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.dbFileName"></el-input> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-row> |
| | | <el-button @click="dialogVisible4 = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="submitForm4" :loading="upLoad4">ç¡® å®</el-button> |
| | | </el-row> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "dataAcquisitionConfig", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | props: { |
| | | deviceId: { |
| | | type: Number, |
| | | default: () => [] |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.init(); |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formulas: [ |
| | | { |
| | | label: "MAX", |
| | | content: "æ±åæ°æå¤§å¼ï¼åæ°ä¸ªæ°æå°ä¸¤ä¸ªï¼å¦ï¼MAX(A1,B2)" |
| | | }, |
| | | { |
| | | label: "MIN", |
| | | content: "æ±åæ°æå°å¼ï¼åæ°ä¸ªæ°æå°ä¸¤ä¸ªï¼å¦ï¼MIN(A1,B2)" |
| | | }, |
| | | { |
| | | label: "SUM", |
| | | content: "æ±åï¼åæ°ä¸ªæ°æå°ä¸¤ä¸ªï¼å¦ï¼SUM(A1,B2)" |
| | | }, |
| | | { |
| | | label: "ABS", |
| | | content: "æ±ç»å¯¹å¼ï¼åæ°ä¸ªæ°æå°ä¸ä¸ªï¼å¦ï¼ABS(A1)" |
| | | }, |
| | | { |
| | | label: "AVERAGE", |
| | | content: "æ±å¹³åå¼ï¼åæ°ä¸ªæ°æå°ä¸¤ä¸ªä¸ªï¼å¦ï¼AVERAGE(A1,B2)" |
| | | }, |
| | | { |
| | | label: "MEDIAN", |
| | | content: "æ±ä¸å¼ï¼åæ°ä¸ªæ°æå°ä¸¤ä¸ªä¸ªï¼å¦ï¼MEDIAN(A1,B2)" |
| | | }, |
| | | ], |
| | | dialogVisible4: false, |
| | | tableList: [], |
| | | page: { |
| | | current: 1, |
| | | size: 20 |
| | | }, |
| | | dialogVisible3: false, |
| | | configForm: { |
| | | formula: "", |
| | | collectUrl: "", |
| | | storageUrl: "", |
| | | entrustCode: "", |
| | | sampleCode: "", |
| | | dbFileName: "", |
| | | fiberOpticRibbon: "" |
| | | }, |
| | | domains: [ |
| | | { |
| | | referx: "", |
| | | refery: "", |
| | | x: "", |
| | | y: "", |
| | | anotherName: "", |
| | | matchingName: "" |
| | | } |
| | | ], |
| | | upLoad3: false, |
| | | upLoad4: false, |
| | | fileTypeOptions: [ |
| | | { label: "csv", value: ".csv" }, |
| | | { label: "db", value: ".db" }, |
| | | { label: "mdb", value: ".mdb" }, |
| | | { label: "word", value: ".docx" }, |
| | | { label: "excel", value: ".xlsx" }, |
| | | { label: "txt", value: ".txt" }, |
| | | { label: "png", value: ".png" } |
| | | ], |
| | | spanList: [], |
| | | specialSpanList: [], |
| | | spanConfig: { |
| | | special: { |
| | | main: "inspectionItemSubclass", |
| | | rows: [ |
| | | { |
| | | name: "deviceName", |
| | | index: 1 |
| | | }, |
| | | { |
| | | name: "fileType", |
| | | index: 2 |
| | | }, |
| | | { |
| | | name: "collectUrl", |
| | | index: 3 |
| | | }, |
| | | { |
| | | name: "storageUrl", |
| | | index: 4 |
| | | }, |
| | | { |
| | | name: "ip", |
| | | index: 5 |
| | | }, |
| | | { |
| | | name: "inspectionItem", |
| | | index: 6 |
| | | }, |
| | | { |
| | | name: "inspectionItemSubclass", |
| | | index: 7 |
| | | }, |
| | | { |
| | | name: "formula", |
| | | index: 13 |
| | | }, |
| | | { |
| | | name: "section", |
| | | index: 14 |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | deleteList: [] |
| | | }; |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | getIndexWithAlphabet(index) { |
| | | const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; |
| | | const letterIndex = index % 26; |
| | | return alphabet.charAt(letterIndex) + (index + 1); |
| | | }, |
| | | rowspan(spanArr, position, spanName) { |
| | | this.tableList.forEach((item, index) => { |
| | | if (index === 0) { |
| | | spanArr.push(1); |
| | | position = 0; |
| | | } else { |
| | | if ( |
| | | this.tableList[index][spanName] === |
| | | this.tableList[index - 1][spanName] |
| | | ) { |
| | | spanArr[position] += 1; |
| | | spanArr.push(0); |
| | | } else { |
| | | spanArr.push(1); |
| | | position = index; |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | spanMethod({ row, column, rowIndex, columnIndex }) { |
| | | // ä¸è¬çåå¹¶è¡ |
| | | if ( |
| | | this.spanConfig != undefined && |
| | | this.spanConfig.rows && |
| | | this.spanConfig.rows.length > 0 |
| | | ) { |
| | | let i = null; |
| | | let obj = this.spanConfig.rows.find((item, index) => { |
| | | i = index; |
| | | return item.index == columnIndex; |
| | | }); |
| | | if (obj) { |
| | | const _row = this.spanList[i].arr[rowIndex]; |
| | | const _col = _row > 0 ? 1 : 0; |
| | | return { |
| | | rowspan: _row, |
| | | colspan: _col |
| | | }; |
| | | } |
| | | } |
| | | // ç¹æ®çåå¹¶è¡ |
| | | if ( |
| | | this.spanConfig != undefined && |
| | | this.spanConfig.special && |
| | | this.spanConfig.special.main && |
| | | this.spanConfig.special.rows && |
| | | this.spanConfig.special.rows.length > 0 |
| | | ) { |
| | | let i = null; |
| | | let obj = this.spanConfig.special.rows.find((item, index) => { |
| | | i = index; |
| | | return item.index == columnIndex; |
| | | }); |
| | | if (obj) { |
| | | const _row = this.specialSpanList[i].arr[rowIndex]; |
| | | const _col = _row > 0 ? 1 : 0; |
| | | return { |
| | | rowspan: _row, |
| | | colspan: _col |
| | | }; |
| | | } |
| | | } |
| | | }, |
| | | fileConfiguration() { |
| | | this.dialogVisible4 = true; |
| | | if (this.tableList[0]) { |
| | | this.$set(this.configForm, "fileType", this.tableList[0].fileType); |
| | | this.$set(this.configForm, "collectUrl", this.tableList[0].collectUrl); |
| | | this.$set(this.configForm, "storageUrl", this.tableList[0].storageUrl); |
| | | this.$set(this.configForm, "ip", this.tableList[0].ip); |
| | | this.$set( |
| | | this.configForm, |
| | | "entrustCode", |
| | | this.tableList[0].entrustCode |
| | | ); |
| | | this.$set( |
| | | this.configForm, |
| | | "sampleCode", |
| | | this.tableList[0].sampleCode |
| | | ); |
| | | this.$set( |
| | | this.configForm, |
| | | "dbFileName", |
| | | this.tableList[0].dbFileName |
| | | ); |
| | | this.$set( |
| | | this.configForm, |
| | | "fiberOpticRibbon", |
| | | this.tableList[0].fiberOpticRibbon |
| | | ) |
| | | } |
| | | }, |
| | | init() { |
| | | this.$axios |
| | | .get( |
| | | this.$api.deviceScope.queryDataAcquisitionConfiguration + |
| | | "?deviceId=" + |
| | | this.deviceId + |
| | | "&isDevice=" + |
| | | false |
| | | ) |
| | | .then(res => { |
| | | this.tableList = res.data; |
| | | this.tableList.forEach(i => { |
| | | let isIncludes = false |
| | | if (i.formula && i.formula != "") { |
| | | this.formulas.forEach(j => { |
| | | if (i.formula.includes(j.label)) { |
| | | isIncludes = true |
| | | } |
| | | }) |
| | | } |
| | | if (!isIncludes && i.formula) { |
| | | i.formula = i.formula.slice(1, -1) |
| | | } |
| | | i.sample = i.sample |
| | | .replace(/"/g, "") |
| | | .replace(/],/g, "ï¼") |
| | | .replace(/\[/g, "") |
| | | .replace(/]/g, ""); |
| | | }); |
| | | if (this.tableList[0]) { |
| | | this.$set(this.configForm, "fileType", this.tableList[0].fileType); |
| | | this.$set( |
| | | this.configForm, |
| | | "collectUrl", |
| | | this.tableList[0].collectUrl |
| | | ); |
| | | this.$set( |
| | | this.configForm, |
| | | "storageUrl", |
| | | this.tableList[0].storageUrl |
| | | ); |
| | | this.$set(this.configForm, "ip", this.tableList[0].ip); |
| | | this.$set( |
| | | this.configForm, |
| | | "entrustCode", |
| | | this.tableList[0].entrustCode |
| | | ); |
| | | this.$set( |
| | | this.configForm, |
| | | "sampleCode", |
| | | this.tableList[0].sampleCode |
| | | ); |
| | | this.$set( |
| | | this.configForm, |
| | | "dbFileName", |
| | | this.tableList[0].dbFileName |
| | | ); |
| | | this.$set( |
| | | this.configForm, |
| | | "fiberOpticRibbon", |
| | | this.tableList[0].fiberOpticRibbon |
| | | ) |
| | | } |
| | | // ä¸è¬çåå¹¶è¡ |
| | | if ( |
| | | this.spanConfig != undefined && |
| | | this.spanConfig.rows && |
| | | this.spanConfig.rows.length > 0 |
| | | ) { |
| | | this.spanList = []; |
| | | this.spanConfig.rows.forEach((item, index) => { |
| | | this.spanList.push({ |
| | | arr: [], |
| | | position: 0 |
| | | }); |
| | | this.rowspan( |
| | | this.spanList[index].arr, |
| | | this.spanList[index].position, |
| | | item.name |
| | | ); |
| | | }); |
| | | } |
| | | // ç¹æ®çåå¹¶è¡ |
| | | if ( |
| | | this.spanConfig != undefined && |
| | | this.spanConfig.special && |
| | | this.spanConfig.special.main && |
| | | this.spanConfig.special.rows && |
| | | this.spanConfig.special.rows.length > 0 |
| | | ) { |
| | | this.specialSpanList = []; |
| | | this.spanConfig.special.rows.forEach((item, index) => { |
| | | this.specialSpanList.push({ |
| | | arr: [], |
| | | position: 0 |
| | | }); |
| | | this.rowspan( |
| | | this.specialSpanList[index].arr, |
| | | this.specialSpanList[index].position, |
| | | this.spanConfig.special.main |
| | | ); |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | submitForm4() { |
| | | const obj = Object.assign({ |
| | | deviceId: this.deviceId, |
| | | fileType: this.configForm.fileType, |
| | | collectUrl: this.configForm.collectUrl, |
| | | storageUrl: this.configForm.storageUrl, |
| | | ip: this.configForm.ip, |
| | | isDevice: true, |
| | | entrustCode: this.configForm.entrustCode, |
| | | sampleCode: this.configForm.sampleCode, |
| | | dbFileName: this.configForm.dbFileName, |
| | | fiberOpticRibbon: this.configForm.fiberOpticRibbon |
| | | }); |
| | | this.upLoad4 = true; |
| | | this.$axios |
| | | .post( |
| | | this.$api.deviceScope.saveDataAcquisitionConfiguration + |
| | | "?deviceId=" + |
| | | this.deviceId, |
| | | obj, |
| | | { |
| | | headers: { |
| | | "Content-Type": "application/json" |
| | | } |
| | | } |
| | | ) |
| | | .then(res => { |
| | | if (res.code == 200) { |
| | | // this.tableList = res.data; |
| | | this.dialogVisible4 = false; |
| | | this.init(); |
| | | this.$message.success("æä½æå"); |
| | | } |
| | | this.upLoad4 = false; |
| | | }) |
| | | .catch(err => { |
| | | this.upLoad4 = false; |
| | | }); |
| | | }, |
| | | dataConfig(row) { |
| | | this.configForm = { |
| | | deviceId: row.deviceId, |
| | | inspectionItem: row.inspectionItem.trim(), |
| | | inspectionItemSubclass: row.inspectionItemSubclass, |
| | | structureItemParameterId: row.structureItemParameterId, |
| | | inspectionItemClass: row.inspectionItemClass, |
| | | }; |
| | | this.dialogVisible3 = true; |
| | | this.$axios |
| | | .get( |
| | | this.$api.deviceScope.queryDataAcquisitionConfiguration + |
| | | "?deviceId=" + |
| | | this.deviceId + |
| | | "&inspectionItem=" + |
| | | row.inspectionItem.trim() + |
| | | "&isDevice=" + |
| | | true + |
| | | "&inspectionItemSubclass=" + |
| | | row.inspectionItemSubclass.trim() + |
| | | "&inspectionItemClass=" + |
| | | row.inspectionItemClass.trim() |
| | | + |
| | | "&structureItemParameterId=" + |
| | | row.structureItemParameterId |
| | | ) |
| | | .then(res => { |
| | | const data = res.data; |
| | | if (data[0]) { |
| | | this.domains.splice(0, 1); |
| | | let formula = data[0].formula |
| | | let isIncludes = false |
| | | if (formula && formula != "") { |
| | | for (let key in this.formulas) { |
| | | if (formula.includes(this.formulas[key].label)) { |
| | | isIncludes = true |
| | | } |
| | | } |
| | | } |
| | | if (!isIncludes && formula) { |
| | | let formulaValue = formula.slice(1, -1) |
| | | this.$set(this.configForm, "formula", formulaValue); |
| | | } else { |
| | | this.$set(this.configForm, "formula", data[0].formula); |
| | | } |
| | | data.forEach(i => { |
| | | this.domains.push({ |
| | | referx: i.referx, |
| | | refery: i.refery, |
| | | x: i.x, |
| | | y: i.y, |
| | | anotherName: i.anotherName, |
| | | matchingName: i.matchingName, |
| | | id: i.id |
| | | }); |
| | | }); |
| | | } |
| | | }); |
| | | }, |
| | | submitForm3() { |
| | | this.$refs.configForm.validate(valid => { |
| | | // è¡¨åæ ¡éª |
| | | if (valid) { |
| | | this.domains.forEach(item => { |
| | | const isEmpty = Object.values(item).every(val => val === ""); |
| | | if (isEmpty) { |
| | | this.$message.error("请填ååç
§æ°æ®"); |
| | | } |
| | | }); |
| | | this.domains.forEach((i, index) => { |
| | | let isIncludes = false |
| | | if (this.configForm.formula && this.configForm.formula !== "") { |
| | | for (let formula in this.formulas) { |
| | | if (this.configForm.formula.includes(this.formulas[formula].label)) { |
| | | isIncludes = true |
| | | } |
| | | } |
| | | } |
| | | if (isIncludes === false && this.configForm.formula !== "" && this.configForm.formula !== undefined) { |
| | | i.formula = "(" + this.configForm.formula + ")"; |
| | | } else { |
| | | i.formula = this.configForm.formula; |
| | | } |
| | | i.deviceId = this.deviceId; |
| | | i.inspectionItem = this.configForm.inspectionItem; |
| | | i.inspectionItemSubclass = this.configForm.inspectionItemSubclass; |
| | | i.structureItemParameterId = this.configForm.structureItemParameterId; |
| | | i.inspectionItemClass = this.configForm.inspectionItemClass; |
| | | i.serialNumber = this.getIndexWithAlphabet(index) |
| | | }); |
| | | this.$axios |
| | | .post( |
| | | this.$api.deviceScope.saveDataAcquisitionConfiguration + |
| | | "?deviceId=" + |
| | | this.deviceId, |
| | | { dataConfigList: this.domains, isDevice: false }, |
| | | { |
| | | headers: { |
| | | "Content-Type": "application/json" |
| | | } |
| | | } |
| | | ) |
| | | .then(res => { |
| | | this.dialogVisible3 = false; |
| | | this.domains = [ |
| | | { |
| | | referx: "", |
| | | refery: "", |
| | | x: "", |
| | | y: "", |
| | | id: "" |
| | | } |
| | | ]; |
| | | if (this.deleteList.length > 0) { |
| | | this.$axios |
| | | .delete( |
| | | this.$api.deviceScope.deleteDataAcquisitionConfiguration + |
| | | "?ids=" + |
| | | this.deleteList.join() |
| | | ) |
| | | .then(res => { |
| | | if (res.code == 200) { |
| | | this.init(); |
| | | } |
| | | }); |
| | | } |
| | | this.init(); |
| | | this.$message.success("æ·»å æå"); |
| | | }); |
| | | } else { |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | removeDomain(item) { |
| | | // å é¤å
¬å¼formItem |
| | | const index = this.domains.indexOf(item); |
| | | if (index !== -1 && this.domains.length > 1) { |
| | | if (item.id) { |
| | | this.deleteList.push(item.id); |
| | | this.domains.splice(index, 1); |
| | | } else { |
| | | this.domains.splice(index, 1); |
| | | } |
| | | } else { |
| | | this.$message.error("ä¸å
许å 餿å䏿¡æ°æ®ï¼"); |
| | | } |
| | | }, |
| | | addDomain() { |
| | | // æ·»å å
¬å¼formItem |
| | | this.domains.push({ |
| | | referx: "", |
| | | refery: "", |
| | | x: "", |
| | | y: "", |
| | | id: "" |
| | | }); |
| | | }, |
| | | evalResult(val) { |
| | | this.configForm.formula = val; |
| | | // æ ¹æ®å
¬å¼è®¡ç®åºç»æ |
| | | }, |
| | | sizeChange(val) { |
| | | this.page.size = val; |
| | | }, |
| | | currentChange(val) { |
| | | this.page.current = val; |
| | | }, |
| | | closeForm() { |
| | | this.deleteList = []; |
| | | this.domains = [ |
| | | { |
| | | referx: "", |
| | | refery: "", |
| | | x: "", |
| | | y: "", |
| | | id: "" |
| | | } |
| | | ]; |
| | | this.dialogVisible3 = false; |
| | | this.$refs.configForm.resetFields(); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .itemFomItem { |
| | | margin-left: 20px; |
| | | } |
| | | |
| | | .search_thing { |
| | | width: 350px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 110px; |
| | | |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .data-acquisition-config { |
| | | width: 100%; |
| | | height: 100%; |
| | | overflow-y: hidden; |
| | | overflow-x: hidden; |
| | | .title { |
| | | height: 60px; |
| | | line-height: 60px; |
| | | } |
| | | } |
| | | |
| | | .page { |
| | | width: 100%; |
| | | height: 30px; |
| | | text-align: right; |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .table { |
| | | margin-top: 10px; |
| | | background-color: #fff; |
| | | width: calc(100vw - 1em); |
| | | height: calc(100vh - 18em); |
| | | } |
| | | |
| | | .fomItem1 { |
| | | display: flex; |
| | | height: 74px; |
| | | } |
| | | |
| | | .fomItem2 { |
| | | display: flex; |
| | | width: 100%; |
| | | } |
| | | |
| | | .fomItemInput { |
| | | width: 180px; |
| | | margin-right: 6px; |
| | | } |
| | | |
| | | .fomItemInput1 { |
| | | width: 100%; |
| | | margin-right: 6px; |
| | | } |
| | | |
| | | >>>.el-form-item__label { |
| | | padding-bottom: 0 !important; |
| | | } |
| | | </style> |
| | |
| | | <!-- 设å¤åç¨ --> |
| | | <template> |
| | | <div>设å¤åç¨</div> |
| | | <div> |
| | | <div class="search"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æµç¨ç¼å·ï¼</div> |
| | | <div ><el-input size="small" placeholder="请è¾å
¥" clearable v-model="componentData.entity.processNumber" |
| | | @keyup.enter.native="refreshTable()"></el-input></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 class="btns"> |
| | | <el-button size="small" type="primary" @click="add">æ°å¢</el-button> |
| | | <el-button size="small" type="primary" @click="handleDown" :loading="outLoading">导åº</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="tables" style="margin-top: 10px;"> |
| | | <ValueTable ref="ValueTable" :url="$api.deviceBorrow.deviceBorrowPage" |
| | | :delUrl="$api.deviceBorrow.deleteDeviceBorrow" |
| | | :componentData="componentData" :key="upIndex"/> |
| | | </div> |
| | | <el-dialog title="仪å¨è®¾å¤é¢(å)ç¨ç»è®°" top="5vh" :visible.sync="dialogVisible" width="60%"> |
| | | <el-steps :active="currentStep" finish-status="success" align-center> |
| | | <el-step style="cursor:pointer" v-for="(v, i) in steps" :title="v" :key="i" |
| | | @click.native="choiceStep(i)"></el-step> |
| | | </el-steps> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="130px"> |
| | | <div v-show="currentStepClick === 0"> |
| | | <el-card style="margin-top: 1em; height: 51vh; overflow-y: scroll;"> |
| | | <!-- æ°å¢è®¾å¤äºè®°å½å¡ç --> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç¼å·ï¼" prop="processNumber"> |
| | | <el-input v-model="form.processNumber" size="small" :disabled="currentStep>0"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤åç§°ï¼"> |
| | | <el-input v-model="form.deviceName" size="small" disabled></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="管çç¼å·ï¼" prop="unifyNumber"> |
| | | <el-input v-model="form.unifyNumber" size="small" :disabled="currentStep>0"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åç¨äººï¼" prop="recipientUser"> |
| | | <el-select v-model="form.recipientUser" filterable placeholder="è¯·éæ©" clearable |
| | | size="small" style="width: 100%;" :disabled="currentStep>0"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åç¨äººèç³»æ¹å¼ï¼" prop="borrowerContactInformation" label-width="150px"> |
| | | <el-input v-model="form.borrowerContactInformation" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åç¨æ¥æï¼" prop="recipientTime"> |
| | | <el-date-picker |
| | | v-model="form.recipientTime" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" size="small" format="yyyy-MM-dd" style="width: 100%" value-format="yyyy-MM-dd" :disabled="currentStep>0"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åç¨æ¶ç¶æï¼" |
| | | > |
| | | <el-radio-group v-model="form.recipientState" :disabled="currentStep !== 0"> |
| | | <el-radio :label="0">åæ ¼</el-radio> |
| | | <el-radio :label="1">ç»´ä¿®</el-radio> |
| | | <el-radio :label="2">åç¨</el-radio> |
| | | <el-radio :label="3">æ¥åº</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ç¸å
³éä»¶ï¼" prop="fileName"> |
| | | <el-input v-model="form.fileName" disabled size="small" |
| | | :style="`width: ${currentStep == 0 ? '88%' : '100%'};`"> |
| | | <el-button slot="append" v-if="currentStep === 0" icon="el-icon-delete-solid" |
| | | @click="deleteFile"></el-button> |
| | | </el-input> |
| | | <el-upload ref="upload" style="float: right;" :action="action" :show-file-list="false" |
| | | :on-success="onSuccess" :disabled="currentStep !== 0"> |
| | | <el-button style="position: relative;top: -4px" class="uploadFile" slot="trigger" size="small" |
| | | type="primary" v-if="currentStep === 0">éä»¶ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¸ç¯è责任人ï¼" prop="nextUser"> |
| | | <el-select v-model="form.nextUser" filterable placeholder="è¯·éæ©" clearable |
| | | size="small" style="width: 100%;" :disabled="currentStep !== 0"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.submitOperationUser }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.submitOperationTime }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div v-show="currentStepClick === 1"> |
| | | <el-card style="margin-top: 1em; height: 51vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å½è¿äººï¼" prop="rebackUser" :rules="[{ required: currentStep === 1, message: '请è¾å
¥å½è¿äºº', trigger: 'change' }]"> |
| | | <!-- <el-input v-model="form.rebackUser" size="small" :disabled="currentStep !== 1"></el-input> --> |
| | | <el-select v-model="form.rebackUser" filterable placeholder="è¯·éæ©" clearable |
| | | size="small" style="width: 50%;" :disabled="currentStep !== 1"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å½è¿æ¥æï¼" prop="rebackTime" :rules="[{ required: currentStep === 1, message: 'è¯·éæ©å½è¿æ¥æ', trigger: 'change' }]"> |
| | | <el-date-picker |
| | | v-model="form.rebackTime" |
| | | :disabled="currentStep !== 1" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" size="small" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¥æ¶ç¶åµï¼" |
| | | > |
| | | <el-radio-group v-model="form.receiveState" :disabled="currentStep !== 1"> |
| | | <el-radio :label="0">åæ ¼</el-radio> |
| | | <el-radio :label="1">ç»´ä¿®</el-radio> |
| | | <el-radio :label="2">åç¨</el-radio> |
| | | <el-radio :label="3">æ¥åº</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤è´è´£äººï¼" prop="deviceUser" :rules="[{ required: currentStep === 1, message: 'è¯·éæ©è®¾å¤è´è´£äºº', trigger: 'change' }]"> |
| | | <!-- <el-input v-model="form.deviceUser" size="small" :disabled="currentStep !== 1"></el-input> --> |
| | | <el-select v-model="form.deviceUser" filterable placeholder="è¯·éæ©" clearable |
| | | size="small" style="width: 50%;" :disabled="currentStep !== 1"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="夿³¨ï¼"> |
| | | <el-input type="textarea" v-model="form.note" :disabled="currentStep !== 1" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.receiveOperationUser }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.receiveOperationTime }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="submitForm('3reject')" v-if="currentStep !== 0 && currentStep !== 2">驳å</el-button> |
| | | <el-button @click="submitForm('2save')" v-if="currentStep === 0">ä¿å</el-button> |
| | | <el-button type="primary" v-if="currentStep !== 2" @click="submitForm('1submit')">{{ currentStep === 0 ? 'æäº¤' : |
| | | 'éè¿' |
| | | }}</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="æµç¨è·è¸ª" top="5vh" :visible.sync="dialogVisible0" width="60%"> |
| | | <el-table |
| | | :data="deviceLogs" |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | type="index" |
| | | width="50"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="operator" |
| | | label="æä½äºº" |
| | | width="180"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="operationTime" |
| | | label="æä½æ¥æ" |
| | | width="180"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="operationType" |
| | | label="æäº¤ç±»å"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="operationContent" |
| | | label="æä½å
容"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | import { dateFormat } from '../../../util/date' |
| | | export default { |
| | | |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | components: { |
| | | ValueTable |
| | | }, |
| | | data() { |
| | | return { |
| | | dialogVisible: false, |
| | | dialogVisible0:false, |
| | | //表头æ¾ç¤º |
| | | componentData:{ |
| | | entity: { |
| | | processNumber: null, |
| | | deviceId:null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'asc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | do: [ |
| | | { |
| | | id: 'show', |
| | | font: 'æ¥ç', |
| | | type: 'text', |
| | | method: 'lookDetail' |
| | | }, |
| | | { |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy' |
| | | }, |
| | | { |
| | | id: '111', |
| | | font: 'æµç¨è·è¸ª', |
| | | type: 'text', |
| | | method: 'handleLookList' |
| | | }], |
| | | init:false, |
| | | tagField: { |
| | | recipientState:{ |
| | | select: [{ |
| | | value: 0, |
| | | type: 'success', |
| | | label: 'åæ ¼' |
| | | }, { |
| | | value: 1, |
| | | type: 'warning', |
| | | label: 'ç»´ä¿®' |
| | | }, { |
| | | value: 2, |
| | | type: 'info', |
| | | label: 'åç¨' |
| | | }, { |
| | | value: 3, |
| | | type: 'danger', |
| | | label: 'æ¥åº' |
| | | }] |
| | | } |
| | | }, |
| | | selectField: {}, |
| | | requiredAdd: [], |
| | | requiredUp: [], |
| | | }, |
| | | upIndex:0, |
| | | entityCopy:null, |
| | | currentStep: 0, // æ¥éª¤æ¡æ¾ç¤ºç¬¬å æ¥ |
| | | currentStepClick: 0, // ç¹å»æ¥éª¤æ¡åå |
| | | steps: ['ååº', 'åç¨'], |
| | | responsibleOptions: [], // ä¸ç¯èè´è´£äººlist |
| | | form:{ |
| | | processNumber:null, |
| | | deviceName:null, |
| | | unifyNumber:null, |
| | | recipientUser:null, |
| | | recipientTime:null, |
| | | nextUser:null, |
| | | rebackUser:null, |
| | | rebackTime:null, |
| | | receiveState:null, |
| | | deviceUser:null, |
| | | fileName:null, |
| | | }, |
| | | rules:{ |
| | | processNumber: [{ required: true, message: '请è¾å
¥ç¼å·', trigger: 'blur' }], |
| | | deviceName: [{ required: true, message: '请è¾å
¥è®¾å¤åç§°', trigger: 'blur' }], |
| | | unifyNumber: [{ required: true, message: '请è¾å
¥ç®¡çç¼å·', trigger: 'blur' }], |
| | | recipientUser: [{ required: true, message: '请è¾å
¥åç¨äºº', trigger: 'blur' }], |
| | | borrowerContactInformation: [{ required: true, message: '请è¾å
¥åç¨äººèç³»æ¹å¼', trigger: 'blur' }], |
| | | recipientTime: [{ required: true, message: 'è¯·éæ©åç¨æ¥æ', trigger: 'change' }], |
| | | nextUser: [{ required: true, message: 'è¯·éæ©ä¸ç¯èè´è´£äºº', trigger: 'change' }], |
| | | }, |
| | | deviceLogs:[], |
| | | outLoading:false |
| | | } |
| | | }, |
| | | watch:{ |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.componentData.entity.deviceId = this.clickNodeVal.value |
| | | this.entityCopy = this.HaveJson(this.componentData.entity) |
| | | this.refreshTable() |
| | | } |
| | | }, |
| | | dialogVisible(newVal) { |
| | | if (!newVal) { |
| | | this.form = {} |
| | | this.currentStep = 0 // æ¥éª¤æ¡æ¾ç¤ºç¬¬å æ¥ |
| | | this.currentStepClick = 0 // ç¹å»æ¥éª¤æ¡åå |
| | | this.$refs['form'].clearValidate() |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | action() { |
| | | return this.javaApi + this.$api.personnel.saveCNASFile |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.componentData.entity.deviceId = this.clickNodeVal.value |
| | | this.entityCopy = this.HaveJson(this.componentData.entity) |
| | | // console.log(333,this.clickNodeVal) |
| | | this.getUserList() |
| | | this.refreshTable() |
| | | }, |
| | | methods: { |
| | | refreshTable(e) { |
| | | this.$refs['ValueTable'].selectList(e) |
| | | }, |
| | | refresh() { |
| | | this.componentData.entity = this.HaveJson(this.entityCopy) |
| | | this.refreshTable() |
| | | // this.upIndex++ |
| | | }, |
| | | choiceStep(index) { |
| | | this.currentStepClick = index |
| | | }, |
| | | //æäº¤è¡¨å |
| | | async submitForm(saveState) { |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid === true || saveState !== '1submit') { |
| | | // ç»å½åç¯è设置åå»ºäººä¸æ¶é´ |
| | | let user = JSON.parse(localStorage.getItem('user')) |
| | | const dateTime = dateFormat(new Date()) |
| | | // è·åå½åç¯èæä½äººä¸æ¥æ |
| | | switch (this.currentStep) { |
| | | case 0: |
| | | this.form.submitOperationUser = user.name |
| | | this.form.submitOperationTime = dateTime |
| | | break |
| | | case 1: |
| | | this.form.receiveOperationUser = user.name |
| | | this.form.receiveOperationTime = dateTime |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | // è·åå½åç¯èè´è´£äºº |
| | | switch (saveState === '3reject' ? this.currentStep - 1 : this.currentStep) { |
| | | case 0: |
| | | this.form.nowUser = this.form.nextUser |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | let currentStepAction; |
| | | // 设置该æä½å¤ææ¯å¦ä¸ºæäº¤ï¼ä¿åï¼é©³åï¼éè¿ |
| | | switch (saveState) { |
| | | // æäº¤ï¼éè¿ |
| | | case '1submit': |
| | | currentStepAction = this.currentStep + 1 |
| | | break |
| | | // ä¿å |
| | | case '2save': |
| | | currentStepAction = this.currentStep |
| | | break |
| | | // 驳å |
| | | case '3reject': |
| | | currentStepAction = this.currentStep - 1 |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | // è·åå½åç¶æ |
| | | this.form.nowState = currentStepAction === 2 ? 'å
³é' : this.steps[currentStepAction] |
| | | this.form.deviceId = this.clickNodeVal.value |
| | | delete this.form.deviceLogs |
| | | this.$axios.post(this.$api.deviceBorrow.saveDeviceBorrow, this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs:true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æäº¤æå') |
| | | this.dialogVisible = false |
| | | this.refreshTable() |
| | | } |
| | | }) |
| | | } else { |
| | | let step = this.steps[this.currentStep] |
| | | this.$message.warning(step + ' æµç¨ä¸æå¿
填项æªå¡«ï¼'); |
| | | } |
| | | }); |
| | | }, |
| | | deleteFile() { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + this.form.fileName).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å 餿åï¼') |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | onSuccess(response, file, fileList) { |
| | | if (response.code == 200) { |
| | | // å¨ä¿åèµå¼æ°æä»¶ |
| | | this.form.fileName = file.name |
| | | this.form.url= response.data |
| | | } else { |
| | | this.$message.error(response.message) |
| | | } |
| | | }, |
| | | // è·åè´è´£äººä¿¡æ¯æ¥å£ |
| | | getUserList() { |
| | | this.$axios.get(this.$api.deviceScope.selectUserList).then(res => { |
| | | if (res.code == 200) { |
| | | this.responsibleOptions = res.data |
| | | } |
| | | }) |
| | | }, |
| | | // æ¥ç详æ
|
| | | lookDetail(row){ |
| | | this.$axios.get(this.$api.deviceBorrow.getDeviceBorrow+'?id='+row.id).then(res => { |
| | | if (res.code == 200) { |
| | | this.form = res.data |
| | | this.form.deviceName = this.clickNodeVal.label |
| | | this.form.deviceId = this.clickNodeVal.value |
| | | this.deviceLogs = res.data.deviceLogs |
| | | let i = this.steps.findIndex(item => item == row.nowState) |
| | | if(i==-1){ |
| | | this.currentStep = 2 |
| | | this.currentStepClick = 0 |
| | | }else{ |
| | | this.currentStep = i |
| | | this.currentStepClick = i |
| | | } |
| | | console.log(this.currentStepClick) |
| | | this.dialogVisible = true |
| | | } |
| | | }) |
| | | }, |
| | | // æ°å¢ |
| | | add(){ |
| | | this.dialogVisible = true |
| | | this.form = { |
| | | processNumber:null, |
| | | deviceName:null, |
| | | unifyNumber:null, |
| | | recipientUser:null, |
| | | recipientTime:null, |
| | | nextUser:null, |
| | | rebackUser:null, |
| | | rebackTime:null, |
| | | receiveState:null, |
| | | deviceUser:null, |
| | | fileName:null, |
| | | } |
| | | this.form.deviceName = this.clickNodeVal.label |
| | | this.form.deviceId = this.clickNodeVal.value |
| | | }, |
| | | //å¯¼åº |
| | | handleDown() { |
| | | this.outLoading = true |
| | | this.$axios.post(this.$api.deviceBorrow.deviceBorrowExport,{deviceId:this.clickNodeVal.value},{responseType: 'blob'}).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { |
| | | type: 'application/force-download' |
| | | }) |
| | | const filename = decodeURI(this.clickNodeVal.label+'设å¤ååºç»è®¡'+'.xlsx') |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | // å建ä¸ä¸ªè¶
龿¥ï¼å°æä»¶æµèµè¿å»ï¼ç¶åå®ç°è¿ä¸ªè¶
龿¥çåå»äºä»¶ |
| | | const elink = document.createElement('a') |
| | | elink.download = filename |
| | | elink.style.display = 'none' |
| | | elink.href = URL.createObjectURL(blob) |
| | | document.body.appendChild(elink) |
| | | elink.click(); |
| | | URL.revokeObjectURL(elink.href) // éæ¾URL 对象 |
| | | document.body.removeChild(elink) |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | // å建ä¸ä¸ªè¶
龿¥ï¼å°æä»¶æµèµè¿å»ï¼ç¶åå®ç°è¿ä¸ªè¶
龿¥çåå»äºä»¶ |
| | | const elink = document.createElement('a') |
| | | elink.download = filename |
| | | elink.style.display = 'none' |
| | | elink.href = URL.createObjectURL(blob) |
| | | document.body.appendChild(elink) |
| | | elink.click(); |
| | | URL.revokeObjectURL(elink.href) // éæ¾URL 对象 |
| | | document.body.removeChild(elink) |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | handleLookList(row){ |
| | | this.$axios.get(this.$api.deviceBorrow.getDeviceBorrow+'?id='+row.id).then(res => { |
| | | if (res.code == 200) { |
| | | this.deviceLogs = res.data.deviceLogs |
| | | this.dialogVisible0 = true |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | h4 { |
| | | font-weight: 400; |
| | | font-size: 16px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin: 10px 0; |
| | | } |
| | | |
| | | h4 .line { |
| | | display: inline-block; |
| | | width: 3px; |
| | | height: 16px; |
| | | background: #3A7BFA; |
| | | margin-right: 4px; |
| | | } |
| | | |
| | | .tables { |
| | | width: 100%; |
| | | height: calc(100vh - 15em); |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | display: flex; |
| | | align-items: center; |
| | | position: relative; |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 40px; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 70px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 120px); |
| | | } |
| | | |
| | | .btns { |
| | | position: absolute; |
| | | right: 0px; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | } |
| | | |
| | | .btns_thing { |
| | | position: absolute; |
| | | right: 230px; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | } |
| | | |
| | | .form .search_label { |
| | | width: 120px; |
| | | } |
| | | .el-radio{ |
| | | margin-right: 10px; |
| | | } |
| | | .el-radio-group{ |
| | | width: 100%; |
| | | display: flex; |
| | | margin-top: 12px; |
| | | } |
| | | </style> |
| | |
| | | <!-- è®¾å¤æ ¡å --> |
| | | <template> |
| | | <div> |
| | | <div class="search"> |
| | | <div class="search_thing"> |
| | | <el-button size="small" type="primary" @click="dialogVisible0=true">æ ¡å项ç®ç»´æ¤</el-button> |
| | | </div> |
| | | <div class="btns"> |
| | | <el-button size="small" type="primary">æ·»å æ ¡åè®°å½</el-button> |
| | | <el-button size="small" type="primary">导åº</el-button> |
| | | </div> |
| | | <div class="btnS"> |
| | | <el-button size="small" type="primary" @click="calibrationMaintenance()">æ ¡å项ç®ç»´æ¤</el-button> |
| | | <el-button size="small" type="primary" @click="add('add')">æ·»å æ ¡åè®°å½</el-button> |
| | | <el-button size="small" type="primary" @click="handleDown">导åºExcel</el-button> |
| | | </div> |
| | | <div class="tables" style="margin-top: 16px;"> |
| | | <ValueTable ref="ValueTable" |
| | | :url="$api.auxiliaryWorkingHoursDay.selectAuxiliaryWorkingHoursDay" |
| | | :delUrl="$api.auxiliaryWorkingHoursDay.deleteAuxiliaryWorkingHoursDay" :componentData="componentData" :key="upIndex"/> |
| | | <div class="tables" style="margin-top: 10px;"> |
| | | <el-table :data="tableData" height="calc(100vh - 20em)"> |
| | | <el-table-column label="åºå·" type="index" width="120"> |
| | | <template v-slot="scope"> |
| | | <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="è®°å½ç¼å·" min-width="150" prop="processNumber"></el-table-column> |
| | | <el-table-column label="æ ¡åæºæ" min-width="150" prop="unitOfMeasure" |
| | | show-overflow-tooltip></el-table-column> |
| | | <el-table-column label="æ ¡åç»è®º" min-width="150" prop="status"> |
| | | <template v-slot="scope"> |
| | | {{ scope.row.status === '0yes' ? 'åæ ¼' : scope.row.status === '1no' ? 'ä¸åæ ¼' : 'å
¶ä»' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ ¡åè¯ä¹¦ç¼å·" min-width="150" prop="certificateSerialNumber"></el-table-column> |
| | | <el-table-column label="说æ" min-width="150" prop="remark" show-overflow-tooltip></el-table-column> |
| | | <el-table-column label="æ ¡åæ¥æ" min-width="150" prop="calibrationDate"></el-table-column> |
| | | <el-table-column label="䏿¬¡æ ¡åæ¥æ" min-width="150" prop="nextCalibrationDate"></el-table-column> |
| | | <el-table-column label="ç¡®è®¤æ¥æ" min-width="150" prop="confirmDate"></el-table-column> |
| | | <el-table-column label="ç»è®°äºº" min-width="150" prop="createUser"></el-table-column> |
| | | <el-table-column label="ç»è®°æ¥æ" min-width="150" prop="createTime"></el-table-column> |
| | | <el-table-column fixed="right" label="æä½" min-width="180" align="center"> |
| | | <template #default="{ row }"> |
| | | <el-button size="small" type="text" @click="handleAttachmentClick(row)">ä¸è½½éä»¶</el-button> |
| | | <el-button size="small" type="text" @click="handleViewClick('view', row)">æ¥ç</el-button> |
| | | <el-button size="small" type="text" @click="handleDeleteClick(row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" style="margin-right: 5%;" |
| | | @size-change="handleSizeChange" @current-change="handleCurrentChange"> |
| | | </el-pagination> |
| | | </div> |
| | | <el-dialog |
| | | title="æ ¡å项ç®ç»´æ¤" |
| | | :visible.sync="dialogVisible0" |
| | | width="60%" |
| | | style="max-height: 80vh;margin-top: 10vh;" |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false"> |
| | | <!-- æ ¡å项ç®ç»´æ¤ --> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible0" title="æ ¡å项ç®ç»´æ¤" |
| | | top="5vh" width="70%"> |
| | | <h4> |
| | | <div style="display: flex; |
| | | align-items: center;"><span class="line"></span><span>è®¾å¤æ ¡ååæ°ç»´æ¤</span></div> |
| | | <el-button type="primary" size="small" @click="addCalibrate">æ·» å </el-button> |
| | | <span style="display: flex;align-items: center;"><span class="line"></span><span>è®¾å¤æ ¡ååæ°ç»´æ¤</span></span> |
| | | <el-button :loading="addCalibrateLoading" size="small" type="primary" @click="addCalibrate">æ·» å </el-button> |
| | | </h4> |
| | | <div class="search"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">计éåæ°ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="form0.value"></el-input></div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">éç¨èå´ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="form0.value"></el-input></div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label" style="width: 100px;">æå¤§å
许误差ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="form0.value"></el-input></div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">å¤å®æ åï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="form0.value"></el-input></div> |
| | | </div> |
| | | <div> |
| | | <el-form ref="form0" :model="form0" :rules="form0Rules" |
| | | label-position="right" label-width="120px"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="计éåæ°:" prop="measurementParameter"> |
| | | <el-input v-model="form0.measurementParameter" clearable placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="éç¨èå´:" prop="rangeOfMeasurement"> |
| | | <el-input v-model="form0.rangeOfMeasurement" clearable placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æå¤§å
许误差:" prop="maxPermissibleError"> |
| | | <el-input v-model="form0.maxPermissibleError" clearable placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¤å®æ å:" prop="judgmentCriteria"> |
| | | <el-input v-model="form0.judgmentCriteria" clearable placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <h4> |
| | | <div style="display: flex; |
| | | align-items: center;"><span class="line"></span><span>è®¾å¤æ ¡ååæ°</span></div> |
| | | <span style="display: flex;align-items: center;"><span class="line"></span><span>è®¾å¤æ ¡ååæ°</span></span> |
| | | </h4> |
| | | <ValueTable ref="ValueTable0" |
| | | :url="$api.auxiliaryWorkingHoursDay.selectAuxiliaryWorkingHoursDay" |
| | | :delUrl="$api.auxiliaryWorkingHoursDay.deleteAuxiliaryWorkingHoursDay" :componentData="componentData0" :key="upIndex0"/> |
| | | <!-- è®¾å¤æ ¡ååæ°è¡¨æ ¼ --> |
| | | <el-table ref="calibrateTable" v-loading="calibrateParamsLoading" :data="calibrateParams" |
| | | max-height="450" |
| | | stripe style="width: 100%"> |
| | | <el-table-column label="ç¼å·" type="index" width="80"></el-table-column> |
| | | <el-table-column label="计éåæ°" prop="measurementParameter"></el-table-column> |
| | | <el-table-column label="éç¨èå´" prop="rangeOfMeasurement"></el-table-column> |
| | | <el-table-column label="æå¤§å
许误差" prop="maxPermissibleError"></el-table-column> |
| | | <el-table-column label="å¤å®æ å" prop="judgmentCriteria"></el-table-column> |
| | | <el-table-column label="å建人" prop="createdBy"></el-table-column> |
| | | <el-table-column label="å建æ¶é´" prop="creationTime"></el-table-column> |
| | | <el-table-column fixed="right" label="æä½"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="handleDelete(scope.row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | |
| | | <!-- æ·»å æ ¡åè®°å½ --> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible1" title="æ·»å æ ¡åè®°å½" |
| | | top="5vh" |
| | | width="80%" @close="resetCalibrationRecord"> |
| | | <div style="height: 70vh;overflow-y: auto;overflow-x: hidden;"> |
| | | <h4> |
| | | <div style="display: flex;align-items: center;"> |
| | | <span class="line"></span> |
| | | <span>æ·»å è®¾å¤æ ¡åè®°å½</span> |
| | | </div> |
| | | </h4> |
| | | <el-form ref="calibrationRecord" :model="calibrationRecord" |
| | | :rules="formRules" label-position="right" label-width="120px"> |
| | | <el-row> |
| | | <el-col :span="6"> |
| | | <el-form-item label="æ ¡åæå¡æºæ:" prop="unitOfMeasure"> |
| | | <el-input v-model="calibrationRecord.unitOfMeasure" :disabled="operationType === 'view'" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ ¡åæ¥æ:" prop="calibrationDate"> |
| | | <el-date-picker v-model="calibrationRecord.calibrationDate" :disabled="operationType === 'view'" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 90%" type="date" |
| | | value-format="yyyy-MM-dd" @change="getNextCalibrationDate"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="10"> |
| | | <el-form-item label="䏿¬¡æ ¡åæ¥æ:" label-width="140px"> |
| | | <el-date-picker v-model="calibrationRecord.nextCalibrationDate" disabled |
| | | format="yyyy-MM-dd" placeholder="éæ©æ¥æ" size="small" style="width: 90%" |
| | | type="date" value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="计ç®å¨å
·:" prop="calculatingApparatus"> |
| | | <el-input v-model="calibrationRecord.calculatingApparatus" :disabled="operationType === 'view'" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="è®¡ç®æ åéç¨:" prop="standardRange"> |
| | | <el-input v-model="calibrationRecord.standardRange" :disabled="operationType === 'view'" size="small" |
| | | style="width: 90%"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="10"> |
| | | <el-form-item label="è®¡éæ åä¸ç¡®å®åº¦:" label-width="140px" prop="calibrationStandardUncertainty"> |
| | | <el-input v-model="calibrationRecord.calibrationStandardUncertainty" :disabled="operationType === 'view'" size="small" |
| | | style="width: 90%"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="æä¾æ®æä»¶:" prop="byDocument"> |
| | | <el-input v-model="calibrationRecord.byDocument" :disabled="operationType === 'view'" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="è¯ä¹¦ç¼å·:" prop="certificateSerialNumber"> |
| | | <el-input v-model="calibrationRecord.certificateSerialNumber" :disabled="operationType === 'view'" size="small" |
| | | style="width: 90%"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="10"> |
| | | <el-form-item label="ç¶æ:" label-width="140px" prop="status" required> |
| | | <el-radio-group v-model="calibrationRecord.status" :disabled="operationType === 'view'"> |
| | | <el-radio label="0yes">åæ ¼</el-radio> |
| | | <el-radio label="1no">ä¸åæ ¼</el-radio> |
| | | <el-radio label="2other">å
¶ä»</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="ç¡®è®¤æ¥æ:"> |
| | | <el-date-picker v-model="calibrationRecord.confirmDate" :disabled="operationType === 'view'" |
| | | format="yyyy-MM-dd HH:mm:ss" placeholder="éæ©æ¥æ" size="small" style="width: 100%" |
| | | type="datetime" value-format="yyyy-MM-dd HH:mm:ss"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="17"> |
| | | <el-form-item label="éä»¶ï¼" prop="fileName"> |
| | | <el-input v-model="calibrationRecord.fileName" :style="`width: ${operationType === 'add' ? '85%' : '100%'};}`" disabled |
| | | size="small"> |
| | | <el-button v-if="operationType === 'add'" slot="append" icon="el-icon-delete-solid" |
| | | @click="deleteFile"></el-button> |
| | | </el-input> |
| | | <el-upload v-if="operationType === 'add'" ref="upload" :action="action" |
| | | :before-upload="beforeUpload" |
| | | :headers="headers" |
| | | :limit="1" :on-error="onError" :on-success="handleSuccessUp" |
| | | :show-file-list="false" |
| | | style="float: right;"> |
| | | <el-button :loading="upLoading" size="small" style="position: relative; top: -4px;" |
| | | type="primary">éä»¶ä¸ä¼ |
| | | </el-button> |
| | | </el-upload> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="夿³¨:"> |
| | | <el-input v-model="calibrationRecord.remark" :disabled="operationType === 'view'" :rows="3" size="small" style="width: 96%" |
| | | type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <h4> |
| | | <span style="display: flex;align-items: center;"> |
| | | <span class="line"></span><span>æ ¡åæ¡ç®ç¡®è®¤ç»æ</span> |
| | | </span> |
| | | </h4> |
| | | <el-table ref="calibrateTable" :data="calibrateParams" border> |
| | | <el-table-column label="ç¼å·" type="index" width="60"></el-table-column> |
| | | <el-table-column label="计éåæ°" prop="measurementParameter"></el-table-column> |
| | | <el-table-column label="éç¨èå´" prop="rangeOfMeasurement"></el-table-column> |
| | | <el-table-column label="æå¤§å
许误差" prop="maxPermissibleError"></el-table-column> |
| | | <el-table-column label="å¤å®æ å" prop="judgmentCriteria"></el-table-column> |
| | | <el-table-column label="æ¯å¦æ ¡å" prop="isCalibration"> |
| | | <template slot="header" slot-scope="scope"> |
| | | <span class="required-span">* </span>æ¯å¦æ ¡å |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <el-radio-group v-model="scope.row.isCalibration" :disabled="operationType === 'view'"> |
| | | <el-radio label="0yes">æ¯</el-radio> |
| | | <el-radio label="1no">å¦</el-radio> |
| | | </el-radio-group> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¤å®ç»æ" min-width="140" prop="result"> |
| | | <template slot="header" slot-scope="scope"> |
| | | <span class="required-span">* </span>å¤å®ç»æ |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <el-radio-group v-model="scope.row.result" :disabled="operationType === 'view'" @input="checkRadio()"> |
| | | <el-radio label="0yes">åæ ¼</el-radio> |
| | | <el-radio label="1no">ä¸åæ ¼</el-radio> |
| | | <el-radio label="2other">å
¶ä»</el-radio> |
| | | </el-radio-group> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="åé¡¹ç»æè¯´æ" prop="singleResultStatement"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.singleResultStatement" :disabled="operationType === 'view'" |
| | | size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <!-- æä½æ¥å¿ --> |
| | | <!-- <h4>--> |
| | | <!-- <div style="display: flex;--> |
| | | <!-- align-items: center;">--> |
| | | <!-- <span class="line"></span><span>æ¬è®°å½ç¶æåæä½æ¥å¿</span>--> |
| | | <!-- </div>--> |
| | | <!-- </h4>--> |
| | | <!-- <el-table :data="tableDataOperate" style="width: 100%">--> |
| | | <!-- <el-table-column type="index" label="åºå·" width="100"></el-table-column>--> |
| | | <!-- <el-table-column prop="operator" label="æä½äºº" width="120"></el-table-column>--> |
| | | <!-- <el-table-column prop="operationTime" label="æä½æ¶é´" width="180"></el-table-column>--> |
| | | <!-- <el-table-column prop="operationType" label="æä½ç±»å" width="120"></el-table-column>--> |
| | | <!-- <el-table-column prop="operationContent" label="æä½å
容"></el-table-column>--> |
| | | <!-- </el-table>--> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="dialogVisible0 = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="dialogVisible0 = false">ç¡® å®</el-button> |
| | | <el-button v-if="operationType === 'add'" @click="dialogVisible1 = false">å æ¶</el-button> |
| | | <el-button v-if="operationType === 'add'" :loading="addRecordLoading" type="primary" |
| | | @click="addRecord">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | import file from '../../../util/file'; |
| | | import fileDownload from "../../../util/file"; |
| | | |
| | | export default { |
| | | components: { |
| | | ValueTable |
| | | }, |
| | | data(){ |
| | | return { |
| | | componentData: { |
| | | entity: { |
| | | week: null, |
| | | weekDay: null, |
| | | dateTime: null, |
| | | name:null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | do: [{ |
| | | id: 'handleLook', |
| | | font: 'æ¥ç详æ
', |
| | | type: 'text', |
| | | method: 'handleLook' |
| | | }], |
| | | tagField: { |
| | | shift:{ |
| | | select:[] |
| | | }, |
| | | state:{ |
| | | select:[ |
| | | { |
| | | label:'å·²æäº¤', |
| | | value:'å·²æäº¤', |
| | | type:'primary' |
| | | }, |
| | | { |
| | | label:'å·²å®¡æ ¸', |
| | | value:'å·²å®¡æ ¸', |
| | | type:'warning' |
| | | }, |
| | | { |
| | | label:'å·²æ¹å', |
| | | value:'å·²æ¹å', |
| | | type:'success' |
| | | }, |
| | | ] |
| | | }, |
| | | weekDay:{ |
| | | select:[] |
| | | } |
| | | }, |
| | | linkEvent: {}, |
| | | selectField: { |
| | | shift:{ |
| | | select:[] |
| | | }, |
| | | state:{ |
| | | select:[ |
| | | { |
| | | label:'å·²æäº¤', |
| | | value:'å·²æäº¤', |
| | | type:'primary' |
| | | }, |
| | | { |
| | | label:'å·²å®¡æ ¸', |
| | | value:'å·²å®¡æ ¸', |
| | | type:'warning' |
| | | }, |
| | | { |
| | | label:'å·²æ¹å', |
| | | value:'å·²æ¹å', |
| | | type:'success' |
| | | }, |
| | | ] |
| | | }, |
| | | weekDay:{ |
| | | select:[] |
| | | } |
| | | }, |
| | | requiredAdd: [], |
| | | requiredUp: [] |
| | | }, |
| | | upIndex:0, |
| | | componentData0: { |
| | | entity: { |
| | | week: null, |
| | | weekDay: null, |
| | | dateTime: null, |
| | | name:null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | isPage:false, |
| | | do: [{ |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy', |
| | | }], |
| | | tagField: { |
| | | shift:{ |
| | | select:[] |
| | | }, |
| | | state:{ |
| | | select:[ |
| | | { |
| | | label:'å·²æäº¤', |
| | | value:'å·²æäº¤', |
| | | type:'primary' |
| | | }, |
| | | { |
| | | label:'å·²å®¡æ ¸', |
| | | value:'å·²å®¡æ ¸', |
| | | type:'warning' |
| | | }, |
| | | { |
| | | label:'å·²æ¹å', |
| | | value:'å·²æ¹å', |
| | | type:'success' |
| | | }, |
| | | ] |
| | | }, |
| | | weekDay:{ |
| | | select:[] |
| | | } |
| | | }, |
| | | linkEvent: {}, |
| | | selectField: { |
| | | shift:{ |
| | | select:[] |
| | | }, |
| | | state:{ |
| | | select:[ |
| | | { |
| | | label:'å·²æäº¤', |
| | | value:'å·²æäº¤', |
| | | type:'primary' |
| | | }, |
| | | { |
| | | label:'å·²å®¡æ ¸', |
| | | value:'å·²å®¡æ ¸', |
| | | type:'warning' |
| | | }, |
| | | { |
| | | label:'å·²æ¹å', |
| | | value:'å·²æ¹å', |
| | | type:'success' |
| | | }, |
| | | ] |
| | | }, |
| | | weekDay:{ |
| | | select:[] |
| | | } |
| | | }, |
| | | requiredAdd: [], |
| | | requiredUp: [] |
| | | }, |
| | | upIndex0:0, |
| | | dialogVisible0:false, |
| | | form0:{ |
| | | value:'' |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | methods:{ |
| | | addCalibrate(){ |
| | | if(!this.form0.value){ |
| | | this.$message.error('请è¾å
¥è®¡éåæ°') |
| | | return |
| | | data() { |
| | | return { |
| | | value: "", |
| | | calibrateParams: [], |
| | | calibrateParamsLoading: false, |
| | | addCalibrateLoading: false, |
| | | calibrationRecord: { |
| | | unitOfMeasure: '', // 计éåä½ |
| | | calibrationDate: null, // æ ¡åæ¥æ |
| | | nextCalibrationDate: null, // 䏿¬¡æ ¡åæ¥æ |
| | | calculatingApparatus: '', // 计ç®å¨å
· |
| | | confirmDate: null, // ç¡®è®¤æ¥æ |
| | | standardRange: '', // è®¡ç®æ åéç¨ |
| | | calibrationStandardUncertainty: '', // è®¡éæ åä¸ç¡®å®åº¦ |
| | | byDocument: '', // 便®æä»¶ |
| | | certificateSerialNumber: '', // è¯ä¹¦ç¼å· |
| | | status: '', // ç¶æ |
| | | remark: '', // 夿³¨ |
| | | systemFileName: '', // |
| | | fileName: '', // |
| | | }, |
| | | formRules: { |
| | | unitOfMeasure: [{required: true, message: '请è¾å
¥æ ¡åæå¡æºæ', trigger: 'blur'}], |
| | | calibrationDate: [{required: true, message: 'è¯·éæ©æ ¡åæ¥æ', trigger: 'change'}], |
| | | calculatingApparatus: [{required: true, message: '请è¾å
¥è®¡ç®å¨å
·', trigger: 'blur'}], |
| | | standardRange: [{required: true, message: '请è¾å
¥è®¡ç®æ åéç¨', trigger: 'blur'}], |
| | | calibrationStandardUncertainty: [{required: true, message: '请è¾å
¥è®¡éæ åä¸ç¡®å®åº¦', trigger: 'blur'}], |
| | | byDocument: [{required: true, message: '请è¾å
¥æä¾æ®æä»¶', trigger: 'blur'}], |
| | | status: [{required: true, message: 'è¯·éæ©ç¶æ', trigger: 'change'}], |
| | | }, |
| | | tableData: [], |
| | | dialogVisible0: false, |
| | | dialogVisible1: false, |
| | | form0: { |
| | | measurementParameter: '', // 计éåæ° |
| | | rangeOfMeasurement: '', |
| | | maxPermissibleError: '', |
| | | judgmentCriteria: '', |
| | | createdBy: '', |
| | | action: '', |
| | | deviceId: null |
| | | }, |
| | | form0Rules: { |
| | | measurementParameter: [ |
| | | {required: true, message: '请è¾å
¥è®¡éåæ°', trigger: 'blur'} |
| | | ], |
| | | rangeOfMeasurement: [ |
| | | {required: true, message: '请è¾å
¥éç¨èå´', trigger: 'blur'} |
| | | ], |
| | | maxPermissibleError: [ |
| | | {required: true, message: '请è¾å
¥æå¤§å
许误差', trigger: 'blur'} |
| | | ], |
| | | judgmentCriteria: [ |
| | | {required: true, message: '请è¾å
¥å¤å®æ å', trigger: 'blur'} |
| | | ], |
| | | }, |
| | | addRecordLoading: false, |
| | | tableDataOperate: [], // æ¬è®°å½ç¶æåæä½æ¥å¿ |
| | | upLoading: false, |
| | | operationType: '', |
| | | search: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0 |
| | | }, |
| | | } |
| | | }, |
| | | // ç¨äºä¸ä¼ æä»¶çä¿¡æ¯ |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | 'token': sessionStorage.getItem('token') |
| | | } |
| | | // ä¿å |
| | | // æ´æ°å表 |
| | | }, |
| | | action() { |
| | | return this.javaApi + this.$api.personnel.saveCNASFile |
| | | } |
| | | }, |
| | | mounted() { |
| | | //è·åæä½è®°å½ä¿¡æ¯ |
| | | this.getOperateMsg(); |
| | | this.getTableList(this.clickNodeVal.value) // è·åè®¾å¤æ ¡ååè¡¨æ°æ® |
| | | }, |
| | | methods: { |
| | | //ç¶æå¤å® |
| | | checkRadio(){ |
| | | let resultList = this.calibrateParams.map(ele=>ele.result) |
| | | if(resultList && resultList.filter(ele=>ele=='1no').length>0){ |
| | | this.calibrationRecord.status = '1no' |
| | | }else if(resultList && resultList.filter(ele=>ele=='2other').length==resultList.length){ |
| | | this.calibrationRecord.status = '2other' |
| | | }else if(resultList && resultList.filter(ele=>ele=='0yes').length==resultList.length){ |
| | | this.calibrationRecord.status = '0yes' |
| | | } |
| | | }, |
| | | getNextCalibrationDate(val) { |
| | | let oneYearLaterDate = new Date(val) |
| | | oneYearLaterDate.setFullYear(oneYearLaterDate.getFullYear() + 1); |
| | | oneYearLaterDate.setDate(oneYearLaterDate.getDate() - 1); |
| | | // let obj = oneYearLaterDate.toISOString().split('T')[0]; |
| | | this.calibrationRecord.nextCalibrationDate = oneYearLaterDate |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.search.size = val |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.search.current = val |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | getTableList(deviceId) { |
| | | this.$axios.get(this.$api.deviceCheck.deviceMetricRecordPage + '?deviceId=' + deviceId + "&size=" + this.search.size + "¤t=" + this.search.current + "&type=calibrate").then(res => { |
| | | this.tableData = res.data.records |
| | | this.search.total = res.data.total |
| | | }) |
| | | }, |
| | | getOperateMsg() { |
| | | this.$axios.get(this.$api.deviceOperate.list + "/" + this.clickNodeVal.value).then(res => { |
| | | this.tableDataOperate = res.data |
| | | }) |
| | | }, |
| | | // æ·»å æ ¸æ¥è®°å½ |
| | | add(type) { |
| | | this.operationType = type |
| | | this.dialogVisible1 = true |
| | | this.getXmsg() |
| | | }, |
| | | // æ¥ç详æ
|
| | | handleViewClick(type, row) { |
| | | this.$axios.get(this.$api.deviceCheck.showDeviceMetricsCopy + "?id=" + row.id + "&type=calibrate").then(res => { |
| | | this.calibrateParams = res.data |
| | | }) |
| | | this.calibrationRecord = {...row} |
| | | this.operationType = type |
| | | this.dialogVisible1 = true |
| | | }, |
| | | // è¡¨æ ¼å é¤æä½ |
| | | handleDeleteClick(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteDeviceMetricRecord + "?id=" + row.id).then(res => { |
| | | this.getTableList(this.clickNodeVal.value) // è·åè®¾å¤æ ¡ååè¡¨æ°æ® |
| | | this.$message.success('å 餿åï¼') |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }) |
| | | }, |
| | | handleAttachmentClick(row) { |
| | | let state = /\.(jpg|jpeg|png|gif)$/i.test(row.systemFileName) |
| | | if (state) { |
| | | let url = this.javaApi + '/img/' + row.systemFileName; |
| | | fileDownload.downloadIamge(url, row.systemFileName) |
| | | } else { |
| | | const url = this.javaApi+'/word/'+ row.systemFileName |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = row.systemFileName; |
| | | link.click(); |
| | | this.$message.success('ä¸è½½æå') |
| | | } |
| | | }, |
| | | //å¯¼åº |
| | | handleDown() { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceCheck.deviceMetricRecordExport + '?deviceId=' + this.clickNodeVal.value + "&type=calibrate", { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], {type: 'application/octet-stream'}); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'è®¾å¤æ ¡å.xlsx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'è®¾å¤æ ¡å.xlsx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | deleteFile() { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å 餿件, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + this.calibrationRecord.systemFileName).then(res => { |
| | | this.calibrationRecord.fileName = '' |
| | | this.$refs.upload.clearFiles() |
| | | if (res.code == 200) { |
| | | this.$message.success('å 餿åï¼') |
| | | } |
| | | }) |
| | | }).catch((err) => { |
| | | console.log('err----', err) |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // æ ¡å项ç®ç»´æ¤ |
| | | calibrationMaintenance() { |
| | | this.dialogVisible0 = true |
| | | this.getXmsg(); |
| | | }, |
| | | // è·åè®¾å¤æ ¡ååæ°tableä¿¡æ¯ |
| | | async getXmsg() { |
| | | this.calibrateParamsLoading = true |
| | | try { |
| | | await this.$axios.get(this.$api.deviceCheck.selectDeviceMetric + "?deviceId=" + this.clickNodeVal.value + "&type=calibrate").then(res => { |
| | | if (res.code == 200) { |
| | | this.calibrateParams = res.data |
| | | } |
| | | this.calibrateParamsLoading = false |
| | | }) |
| | | } catch (e) { |
| | | console.log('getXmsg---', e) |
| | | this.calibrateParamsLoading = false |
| | | } |
| | | }, |
| | | // æ ¡å项ç®ç»´æ¤-å é¤è®¾å¤æ ¡ååæ° |
| | | handleDelete(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteDeviceMetrics + '?id=' + row.id).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('å 餿å!'); |
| | | this.getXmsg(); |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$message.info('已忶å é¤'); |
| | | }) |
| | | }, |
| | | addCalibrate() { |
| | | this.$refs['form0'].validate((valid) => { |
| | | if (valid) { |
| | | // ä¿å |
| | | this.calibrateParamsLoading = true |
| | | this.addCalibrateLoading = true |
| | | this.form0.deviceId = this.clickNodeVal.value; |
| | | const user = JSON.parse(localStorage.getItem('user')) |
| | | this.form0.createdBy = user.name; |
| | | this.form0.type = 'calibrate' |
| | | this.$axios.post(this.$api.deviceCheck.saveOrUpdateDeviceMetric, this.form0, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('ä¿åæå') |
| | | this.$refs['form0'].resetFields() |
| | | this.getXmsg() // å·æ°è®¾å¤æ ¡ååæ°è¡¨æ ¼ |
| | | } |
| | | this.calibrateParamsLoading = false |
| | | this.addCalibrateLoading = false |
| | | }) |
| | | } else { |
| | | this.addCalibrateLoading = false |
| | | this.$message.warning('æå¿
填项æªå¡«'); |
| | | } |
| | | }) |
| | | }, |
| | | addRecord() { |
| | | this.$refs['calibrationRecord'].validate((valid) => { |
| | | if (valid) { |
| | | try { |
| | | if (this.calibrateParams.some(m => m.isCalibration === undefined)) { |
| | | this.$message.error('è¯·éæ©æ¯å¦æ ¡å') |
| | | return |
| | | } |
| | | if (!this.calibrateParams.every(m => m.result !== undefined)) { |
| | | this.$message.error('è¯·éæ©å¤å®ç»æ') |
| | | return |
| | | } |
| | | this.addRecordLoading = true |
| | | this.calibrationRecord.deviceId = this.clickNodeVal.value; |
| | | let user = JSON.parse(localStorage.getItem('user')) |
| | | this.calibrationRecord.createUser = user.name |
| | | this.calibrationRecord.type = 'calibrate' |
| | | this.calibrationRecord.deviceMetricsCopyList = this.calibrateParams |
| | | this.$axios.post(this.$api.deviceCheck.addOrUpdateDeviceMetricRecord, this.calibrationRecord, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ·»å æå') |
| | | this.dialogVisible1 = false |
| | | this.getTableList(this.clickNodeVal.value) |
| | | } |
| | | this.addRecordLoading = false |
| | | }) |
| | | } catch (e) { |
| | | console.log('addRecord---', e) |
| | | this.addRecordLoading = false |
| | | } |
| | | } else { |
| | | this.$message.warning('æå¿
填项æªå¡«'); |
| | | } |
| | | }) |
| | | }, |
| | | resetCalibrationRecord() { |
| | | this.$refs.calibrationRecord.resetFields() |
| | | }, |
| | | // ä¸ä¼ éä»¶ |
| | | handleSuccessUp(response, file) { |
| | | if (response.code == 200) { |
| | | // å¨ä¿åèµå¼æ°æä»¶ |
| | | this.calibrationRecord.fileName = file.name |
| | | this.calibrationRecord.systemFileName = response.data |
| | | this.upLoading = false; |
| | | } else { |
| | | this.upLoading = false; |
| | | this.$message.error(response.message) |
| | | } |
| | | }, |
| | | beforeUpload(file) { |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload.clearFiles() |
| | | return false; |
| | | } else { |
| | | this.upLoading = true; |
| | | return true; |
| | | } |
| | | }, |
| | | onError(err, file, fileList) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | // end |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getTableList(newVal.value); |
| | | } |
| | | }, |
| | | dialogVisible1(newVal) { |
| | | if (newVal === false) { |
| | | this.calibrateParams = [] |
| | | this.calibrationRecord = { |
| | | unitOfMeasure: '', // 计éåä½ |
| | | calibrationDate: null, // æ ¡åæ¥æ |
| | | nextCalibrationDate: null, // 䏿¬¡æ ¡åæ¥æ |
| | | calculatingApparatus: '', // 计ç®å¨å
· |
| | | standardRange: '', // è®¡ç®æ åéç¨ |
| | | calibrationStandardUncertainty: '', // è®¡éæ åä¸ç¡®å®åº¦ |
| | | byDocument: '', // 便®æä»¶ |
| | | certificateSerialNumber: '', // è¯ä¹¦ç¼å· |
| | | status: '', // ç¶æ |
| | | remark: '', // 夿³¨ |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | function downloadImage(url) { |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.target="_blank" |
| | | link.download = 'attachment.jpg'; // æä»¶å |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | } |
| | | |
| | | </script> |
| | | <style scoped> |
| | | .tables{ |
| | | width: calc(100vw - 390px); |
| | | .tables { |
| | | width: 100%; |
| | | height: calc(100vh - 230px); |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 40px; |
| | |
| | | width: 70px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 110px); |
| | | } |
| | | .btns{ |
| | | position: absolute; |
| | | right: 40px; |
| | | top: 50%; |
| | | transform: translate(0,-50%); |
| | | |
| | | .btnS { |
| | | text-align: right; |
| | | margin-top: 10px; |
| | | } |
| | | h4{ |
| | | |
| | | h4 { |
| | | font-weight: 400; |
| | | font-size: 16px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin: 10px 0; |
| | | } |
| | | h4 .line{ |
| | | |
| | | h4 .line { |
| | | display: inline-block; |
| | | width: 3px; |
| | | height: 16px; |
| | | background: #3A7BFA; |
| | | margin-right: 4px; |
| | | } |
| | | |
| | | .check { |
| | | background-color: #fff; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .check_thing { |
| | | flex: 0 0 calc(20% - 10px); |
| | | margin-bottom: 20px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: flex-start; |
| | | } |
| | | |
| | | .check_label { |
| | | font-size: 14px; |
| | | margin-bottom: 5px; |
| | | } |
| | | |
| | | .check_data .check_input { |
| | | width: 100%; |
| | | } |
| | | |
| | | .el-table { |
| | | font-size: 14px; |
| | | color: #333; |
| | | } |
| | | |
| | | .el-table thead { |
| | | background-color: #f5f5f5; |
| | | } |
| | | </style> |
| | | |
| | | |
| | | |
| | | |
| | |
| | | <!-- 设å¤éªæ¶ --> |
| | | <template> |
| | | <div> |
| | | <div class="search"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">å
³é®åï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="value" @keyup.enter.native="refreshTable()"></el-input></div> |
| | | <div class="search_label">æµç¨ç¼å·ï¼</div> |
| | | <div class="search_input"><el-input v-model="search.processNumber" clearable placeholder="请è¾å
¥" size="small" |
| | | @keyup.enter.native="getDeviceAList(clickNodeVal.value)"></el-input></div> |
| | | <el-button size="small" style="margin-left: 10px" @click="resetSearch">é ç½®</el-button> |
| | | <el-button size="small" type="primary" @click="getDeviceAList(clickNodeVal.value)">æ¥ è¯¢</el-button> |
| | | </div> |
| | | <div class="search_thing" style="padding-left: 30px;"> |
| | | <el-button size="small" type="primary" @click="refreshTable()">æ¥ è¯¢</el-button> |
| | | </div> |
| | | <div class="btns"> |
| | | <el-button size="small" type="primary">æ°å»º</el-button> |
| | | <el-button size="small" type="primary">导åº</el-button> |
| | | <div class="search_thing"> |
| | | <el-button size="small" type="primary" @click="dialogVisible = true">æ·»å éªæ¶</el-button> |
| | | <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">导åº</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="tables" style="margin-top: 16px;"> |
| | | <ValueTable ref="ValueTable" |
| | | :url="$api.auxiliaryWorkingHoursDay.selectAuxiliaryWorkingHoursDay" |
| | | :delUrl="$api.auxiliaryWorkingHoursDay.deleteAuxiliaryWorkingHoursDay" :componentData="componentData" :key="upIndex"/> |
| | | <div class="tables"> |
| | | <el-table ref="table" :data="tableDataAlist" height="100%"> |
| | | <el-table-column label="åºå·" type="index" width="60"> |
| | | <template v-slot="scope"> |
| | | <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æµç¨ç¼å·" min-width="150" prop="processNumber" show-overflow-tooltip/> |
| | | <el-table-column label="设å¤åç§°" min-width="140" prop="deviceName" show-overflow-tooltip/> |
| | | <el-table-column label="管çç¼å·" min-width="140" prop="managementNumber" show-overflow-tooltip/> |
| | | <el-table-column label="åºåå·" min-width="80" prop="serialNumber" /> |
| | | <el-table-column label="æäº¤è
" min-width="100" prop="submitUser" /> |
| | | <el-table-column label="æäº¤æ¥æ" min-width="150" prop="createTime" /> |
| | | <el-table-column label="å½åç¶æ" min-width="140" prop="currentState" /> |
| | | <el-table-column label="å½åè´è´£äºº" min-width="120" prop="currentResponsible" /> |
| | | <el-table-column fixed="right" label="æä½" min-width="180"> |
| | | <template #default="{ row }"> |
| | | <el-button size="small" type="text" @click="handleAttachmentClick(row)">éä»¶</el-button> |
| | | <el-button size="small" type="text" @click="handleViewClick(row)">æ¥ç</el-button> |
| | | <el-button size="small" type="text" @click="handleDownOne(row)">导åº</el-button> |
| | | <el-button size="small" type="text" @click="handleDeleteClick(row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange"> |
| | | </el-pagination> |
| | | </div> |
| | | <!-- æ·»å è®¾å¤æ
éè®°å½ --> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="仪å¨è®¾å¤éªæ¶è®°å½" |
| | | width="60%" @open="openRecordAcceptance"> |
| | | <el-steps :active="currentStep" finish-status="success"> |
| | | <el-step v-for="(v, i) in steps" :key="i" :title="v" style="cursor:pointer" |
| | | @click.native="choiceStep(i)"></el-step> |
| | | </el-steps> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="130px"> |
| | | <div v-show="currentStepClick === 0"> |
| | | <el-card style="margin-top: 1em; height: 56vh; overflow-y: scroll;"> |
| | | <!-- æ°å¢è®¾å¤äºè®°å½å¡ç --> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æµç¨ç¼å·ï¼" prop="processNumber"> |
| | | <el-input v-model="form.processNumber" disabled size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤åç§°ï¼"> |
| | | <el-input v-model="form.deviceName" disabled size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç产åå®¶ï¼"> |
| | | <el-input v-model="form.manufacturer" disabled size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤åå·ï¼"> |
| | | <el-input v-model="form.specificationModel" disabled size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="管çç¼å·ï¼"> |
| | | <el-input v-model="form.managementNumber" disabled size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: currentStep === 0, message: '请è¾å
¥åºåå·', trigger: 'blur' }]" label="åºåå·ï¼" |
| | | prop="serialNumber"> |
| | | <el-input v-model="form.serialNumber" :disabled="currentStep !== 0" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: currentStep === 0, message: '请è¾å
¥è®¾å¤ç±»å«', trigger: 'change' }]" label="设å¤ç±»å«ï¼" |
| | | prop="deviceClass"> |
| | | <el-radio-group v-model="form.deviceClass" :disabled="currentStep !== 0"> |
| | | <el-radio label="0precision">ç²¾å¯å设å¤</el-radio> |
| | | <el-radio label="1conventional">常è§è®¾å¤</el-radio><br /> |
| | | <el-radio label="2auxiliary_class">è¾
å©ç±»è®¾å¤</el-radio> |
| | | <el-radio label="4environmental">ç¯å¢ç±»è®¾å¤</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: currentStep === 0, message: '请è¾å
¥å¼ç®±åæ£æ¥å¤å
è£
ææ ç ´æ', trigger: 'blur' }]" label="å¼ç®±åæ£æ¥å¤å
è£
ææ ç ´æï¼" label-width="220px" |
| | | prop="checkOuterPackaging"> |
| | | <el-input v-model="form.checkOuterPackaging" :disabled="currentStep !== 0" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ç¸å
³éä»¶ï¼" prop="fileName"> |
| | | <el-input v-model="form.fileName" :style="`width: ${currentStep == 0 ? '88%' : '100%'};`" disabled |
| | | size="small"> |
| | | <el-button v-if="currentStep === 0" slot="append" icon="el-icon-delete-solid" |
| | | @click="deleteFile"></el-button> |
| | | </el-input> |
| | | <el-upload ref="upload" :action="action" :on-success="onSuccess" :show-file-list="false" |
| | | style="float: right;"> |
| | | <el-button v-if="currentStep === 0" slot="trigger" class="uploadFile" size="small" |
| | | style="position: relative;top: -4px" type="primary">éä»¶ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: currentStep === 0, message: 'è¯·éæ©ä¸ç¯è责任人', trigger: 'change' }]" label="ä¸ç¯è责任人ï¼" |
| | | prop="submitNextPesponsible"> |
| | | <el-select v-model="form.submitNextPesponsible" :disabled="currentStep !== 0" clearable filterable |
| | | placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 50%;"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: currentStep === 0, message: '请è¾å
¥è®¾å¤å¼ç®±éªæ¶ç»è®º', trigger: 'change' }]" label="设å¤å¼ç®±éªæ¶ç»è®ºï¼" label-width="150px" |
| | | prop="unpackingAcceptanceConclusion"> |
| | | <el-radio-group v-model="form.unpackingAcceptanceConclusion" :disabled="currentStep !== 0"> |
| | | <el-radio :label="'0qualified'">åæ ¼</el-radio> |
| | | <el-radio :label="'1unqualified'">ä¸åæ ¼ï¼ç¼ºå°å¤ä»¶ä¾åºåè¡¥å</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <div style="margin-bottom: 20px; width: 100%;"> |
| | | <label>å¤ä»¶ç¡®è®¤ï¼</label> |
| | | <el-button v-if="currentStep === 0" size="small" style="float: right;" |
| | | type="primary" @click="addTableRow('sparePartsConfirmationList')">å¢å è¡</el-button> |
| | | </div> |
| | | <el-table :data="form.sparePartsConfirmationList" border stripe style="width: 100%; min-height: 30vh"> |
| | | <el-table-column label="åºå·" prop="åºå·" type="index" width="80" /> |
| | | <el-table-column label="åç§°" min-width="120" prop="name"> |
| | | <template v-slot="scope"> |
| | | <el-input v-if="currentStep === 0" v-model="scope.row.name" size="small"></el-input> |
| | | <label v-else>{{ scope.row.name }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ°é" min-width="120" prop="number"> |
| | | <template v-slot="scope"> |
| | | <el-input v-if="currentStep === 0" v-model="scope.row.number" size="small"></el-input> |
| | | <label v-else>{{ scope.row.number }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="夿³¨" min-width="120" prop="note"> |
| | | <template v-slot="scope"> |
| | | <el-input v-if="currentStep === 0" v-model="scope.row.note" size="small"></el-input> |
| | | <label v-else>{{ scope.row.note }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="currentStep === 0" fixed="right" label="æä½" width="90"> |
| | | <template slot-scope="scope"> |
| | | <el-button icon="el-icon-delete" type="text" |
| | | @click="deleteRow(scope.$index, scope.row, 'sparePartsConfirmationList')">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <div style="margin: 20px 0; width: 100%;"> |
| | | <label>æä»¶ç±»ç¡®è®¤ï¼</label> |
| | | <el-button v-if="currentStep === 0" size="small" style="float: right;" |
| | | type="primary" @click="addTableRow('fileClassConfirmationList')">å¢å è¡</el-button> |
| | | </div> |
| | | <el-table :data="form.fileClassConfirmationList" border stripe style="width: 100%; min-height: 30vh"> |
| | | <el-table-column label="åºå·" prop="åºå·" type="index" width="80" /> |
| | | <el-table-column label="åºæåæ°" min-width="120" prop="expectedCopies"> |
| | | <template v-slot="scope"> |
| | | <el-input v-if="currentStep === 0" v-model="scope.row.expectedCopies" size="small"></el-input> |
| | | <label v-else>{{ scope.row.expectedCopies }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å®é
æ¶å°åæ°" min-width="120" prop="actualCopies"> |
| | | <template v-slot="scope"> |
| | | <el-input v-if="currentStep === 0" v-model="scope.row.actualCopies" size="small"></el-input> |
| | | <label v-else>{{ scope.row.actualCopies }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="currentStep === 0" fixed="right" label="æä½" width="90"> |
| | | <template v-slot="scope"> |
| | | <el-button icon="el-icon-delete" type="text" |
| | | @click="deleteRow(scope.$index, scope.row, 'fileClassConfirmationList')">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-col> |
| | | <el-col :span="24" style="margin-top: 10px;"> |
| | | <el-form-item label="夿³¨ï¼" label-width="90px"> |
| | | <el-input v-model="form.submitRemarks" :disabled="currentStep !== 0" size="small" |
| | | type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.submitOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.submitDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div v-show="currentStepClick === 1"> |
| | | <el-card style="margin-top: 1em; height: 56vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="夿 ¸æè§ï¼" prop="accidentDescription"> |
| | | <el-input v-model="form.unpackingReviewOpinion" :disabled="currentStep !== 1" size="small" |
| | | type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: currentStep === 1, message: '请è¾å
¥ä¸ç¯è责任人', trigger: 'change' }]" label="ä¸ç¯è责任人ï¼" |
| | | prop="unpackingNextPesponsible"> |
| | | <el-select v-model="form.unpackingNextPesponsible" :disabled="currentStep !== 1" clearable filterable |
| | | placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 50%;"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.unpackingOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.unpackingDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div v-show="currentStepClick === 2"> |
| | | <el-card style="margin-top: 1em; height: 56vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: currentStep === 2, message: '请è¾å
¥å®è£
ä½ç½®', trigger: 'blur' }]" label="å®è£
ä½ç½®ï¼" |
| | | prop="installLocation"> |
| | | <el-input v-model="form.installLocation" :disabled="currentStep !== 2" clearable placeholder="请è¾å
¥å®è£
ä½ç½®" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="夿³¨ï¼"> |
| | | <el-input v-model="form.installRemarks" :disabled="currentStep !== 2" size="small" |
| | | type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: currentStep === 2, message: '请è¾å
¥ä¸ç¯è责任人', trigger: 'blur' }]" label="ä¸ç¯è责任人ï¼" |
| | | prop="installNextPesponsible"> |
| | | <el-select v-model="form.installNextPesponsible" :disabled="currentStep !== 2" clearable filterable |
| | | placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 50%;"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <div style="margin-bottom: 20px; width: 100%;"> |
| | | <label>å®è£
éªæ¶è®°å½</label> |
| | | <el-button v-if="currentStep === 2" size="small" style="float: right;" |
| | | type="primary" @click="addTableRow('installationAcceptanceRecordList')">å¢å è¡</el-button> |
| | | </div> |
| | | <el-table :data="form.installationAcceptanceRecordList" border stripe |
| | | style="width: 100%; min-height: 30vh"> |
| | | <el-table-column label="åºå·" prop="åºå·" type="index" width="80" /> |
| | | <el-table-column label="项ç®" min-width="120" prop="installationProject"> |
| | | <template v-slot="scope"> |
| | | <el-input v-if="currentStep === 2" v-model="scope.row.installationProject" |
| | | size="small"></el-input> |
| | | <label v-else>{{ scope.row.installationProject }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å®è£
æ
åµ" min-width="120" prop="installationSituation"> |
| | | <template v-slot="scope"> |
| | | <el-input v-if="currentStep === 2" v-model="scope.row.installationSituation" |
| | | size="small"></el-input> |
| | | <label v-else>{{ scope.row.installationSituation }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å®è£
宿" min-width="120" prop="installationCompleted"> |
| | | <template v-slot="scope"> |
| | | <el-select v-if="currentStep === 2" v-model="scope.row.installationCompleted" placeholder="è¯·éæ©"> |
| | | <el-option label="æ¯" value="0yes"></el-option> |
| | | <el-option label="å¦" value="1no"></el-option> |
| | | </el-select> |
| | | <label v-else>{{ scope.row.installationCompleted === '0yes' ? 'æ¯' : |
| | | scope.row.installationCompleted === '1no' ? 'å¦' : '' }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="currentStep === 2" fixed="right" label="æä½" width="90"> |
| | | <template slot-scope="scope"> |
| | | <el-button icon="el-icon-delete" type="text" |
| | | @click="deleteRow(scope.$index, scope.row, 'installationAcceptanceRecordList')">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.installOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.installDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div v-show="currentStepClick === 3"> |
| | | <el-card style="margin-top: 1em; height: 56vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: currentStep === 3, message: '请è¾å
¥å¤åæè§', trigger: 'blur' }]" label="å¤åæè§ï¼" |
| | | prop="installationAcceptanceCompoundOpinion"> |
| | | <el-input v-model="form.installationAcceptanceCompoundOpinion" :disabled="currentStep !== 3" |
| | | size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: currentStep === 3, message: '请è¾å
¥ä¸ç¯èè´è´£äºº', trigger: 'change' }]" label="ä¸ç¯è责任人ï¼" |
| | | prop="installationAcceptanceNextPesponsible"> |
| | | <el-select v-model="form.installationAcceptanceNextPesponsible" :disabled="currentStep !== 3" clearable |
| | | filterable placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 50%;"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.installationAcceptanceOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.installationAcceptanceDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div v-show="currentStepClick === 4"> |
| | | <el-card style="margin-top: 1em; height: 56vh; overflow-y: scroll;"> |
| | | <div style="margin-bottom: 20px; width: 100%;"> |
| | | <label>éªæ¶æ ¸æ¥è®°å½ï¼</label> |
| | | <el-button v-if="currentStep === 4" size="small" style="float: right;" |
| | | type="primary" @click="addTableRow('acceptanceCheckRecordList')">å¢å è¡</el-button> |
| | | </div> |
| | | <el-table :data="form.acceptanceCheckRecordList" border style="width: 100%; min-height: 30vh"> |
| | | <el-table-column label="åºå·" prop="sequence" width="80"> |
| | | </el-table-column> |
| | | <el-table-column label="ä»ªå¨æ¨¡å" min-width="120" prop="instrumentModule"> |
| | | <template v-slot="scope"> |
| | | <el-input v-if="currentStep === 4" v-model="scope.row.instrumentModule" size="small"></el-input> |
| | | <label v-else>{{ scope.row.instrumentModule }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ ¸æ¥åæ°" min-width="120" prop="verificationParameter"> |
| | | <template v-slot="scope"> |
| | | <el-input v-if="currentStep === 4" v-model="scope.row.verificationParameter" size="small"></el-input> |
| | | <label v-else>{{ scope.row.verificationParameter }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="坿¥æ¶é" min-width="120" prop="acceptableLimit"> |
| | | <template v-slot="scope"> |
| | | <el-input v-if="currentStep === 4" v-model="scope.row.acceptableLimit" size="small"></el-input> |
| | | <label v-else>{{ scope.row.acceptableLimit }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ ¸æ¥ç»æ" min-width="120" prop="verificationResult"> |
| | | <template v-slot="scope"> |
| | | <el-input v-if="currentStep === 4" v-model="scope.row.verificationResult" size="small"></el-input> |
| | | <label v-else>{{ scope.row.verificationResult }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ ¸æ¥ç»è®º" min-width="120" prop="verificationConclusion"> |
| | | <template v-slot="scope"> |
| | | <el-select v-if="currentStep === 4" v-model="scope.row.verificationConclusion" placeholder="è¯·éæ©"> |
| | | <el-option label="符å" value="0accordWith"></el-option> |
| | | <el-option label="ä¸ç¬¦å" value="1inconformity"></el-option> |
| | | </el-select> |
| | | <label v-else>{{ scope.row.verificationConclusion }}</label> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="currentStep === 4" fixed="right" label="æä½" width="90"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" |
| | | @click="deleteRow(scope.$index, scope.row, 'acceptanceCheckRecordList')">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-form-item :rules="[{ required: currentStep === 4, message: '请è¾å
¥è®¾å¤å¼ç®±éªæ¶ç»è®º', trigger: 'change' }]" label="设å¤å¼ç®±éªæ¶ç»è®ºï¼" |
| | | label-width="150px" prop="acceptanceCheckUnpackingConclusion"> |
| | | <el-radio-group v-model="form.acceptanceCheckUnpackingConclusion" :disabled="currentStep !== 4"> |
| | | <el-radio :label="'0qualified'">åæ ¼</el-radio> |
| | | <el-radio :label="'1unqualified'">ä¸åæ ¼ï¼ç¼ºå°å¤ä»¶ä¾åºåè¡¥å</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item :rules="[{ required: currentStep === 4, message: '请è¾å
¥ä¸ç¯è责任人', trigger: 'change' }]" label="ä¸ç¯è责任人ï¼" |
| | | prop="acceptanceCheckNextPesponsible"> |
| | | <el-select v-model="form.acceptanceCheckNextPesponsible" :disabled="currentStep !== 4" clearable |
| | | filterable placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 50%;"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.value" :label="item.label" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.acceptanceCheckOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.acceptanceCheckDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div v-show="currentStepClick === 5"> |
| | | <el-card style="margin-top: 1em; height: 56vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: currentStep === 5, message: '请è¾å
¥å®¡æ ¸æè§', trigger: 'blur' }]" label="å®¡æ ¸æè§ï¼" |
| | | prop="acceptanceAuditAuditOpinion"> |
| | | <el-input v-model="form.acceptanceAuditAuditOpinion" :disabled="currentStep !== 5" size="small" |
| | | type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.acceptanceAuditOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.acceptanceAuditDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button v-if="currentStep !== 0 && currentStep !== 6" @click="submitForm('3reject')">驳å</el-button> |
| | | <el-button v-if="currentStep === 0" @click="submitForm('2save')">ä¿å</el-button> |
| | | <el-button v-if="currentStep !== 6" type="primary" @click="submitForm('1submit')">{{ currentStep === 0 ? 'æäº¤' : |
| | | 'éè¿' |
| | | }}</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | <!-- æ¥åç¼è¾æ¡ --> |
| | | </template> |
| | | |
| | | <script> |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | import { dateFormat } from '../../../util/date' |
| | | import file from '../../../util/file'; |
| | | |
| | | export default { |
| | | components: { |
| | | ValueTable |
| | | }, |
| | | data(){ |
| | | return { |
| | | value:'', |
| | | componentData: { |
| | | entity: { |
| | | week: null, |
| | | weekDay: null, |
| | | dateTime: null, |
| | | name:null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | do: [{ |
| | | id: 'getFile', |
| | | font: 'éä»¶', |
| | | type: 'text', |
| | | method: 'getFile' |
| | | }, { |
| | | id: 'handleLook', |
| | | font: 'æ¥ç', |
| | | type: 'text', |
| | | method: 'handleLook' |
| | | },{ |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy', |
| | | disabFun: (row, index) => { |
| | | return row.state === 'å·²å®¡æ ¸' || row.state === 'å·²æ¹å' |
| | | } |
| | | }], |
| | | tagField: { |
| | | shift:{ |
| | | select:[] |
| | | }, |
| | | state:{ |
| | | select:[ |
| | | { |
| | | label:'å·²æäº¤', |
| | | value:'å·²æäº¤', |
| | | type:'primary' |
| | | }, |
| | | { |
| | | label:'å·²å®¡æ ¸', |
| | | value:'å·²å®¡æ ¸', |
| | | type:'warning' |
| | | }, |
| | | { |
| | | label:'å·²æ¹å', |
| | | value:'å·²æ¹å', |
| | | type:'success' |
| | | }, |
| | | ] |
| | | }, |
| | | weekDay:{ |
| | | select:[] |
| | | } |
| | | }, |
| | | linkEvent: {}, |
| | | selectField: { |
| | | shift:{ |
| | | select:[] |
| | | }, |
| | | state:{ |
| | | select:[ |
| | | { |
| | | label:'å·²æäº¤', |
| | | value:'å·²æäº¤', |
| | | type:'primary' |
| | | }, |
| | | { |
| | | label:'å·²å®¡æ ¸', |
| | | value:'å·²å®¡æ ¸', |
| | | type:'warning' |
| | | }, |
| | | { |
| | | label:'å·²æ¹å', |
| | | value:'å·²æ¹å', |
| | | type:'success' |
| | | }, |
| | | ] |
| | | }, |
| | | weekDay:{ |
| | | select:[] |
| | | } |
| | | }, |
| | | requiredAdd: [], |
| | | requiredUp: [] |
| | | }, |
| | | upIndex:0, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | methods:{ |
| | | refreshTable(){} |
| | | data() { |
| | | return { |
| | | //äºæ
设å¤ä¿¡æ¯ |
| | | tableDataAlist: [], // æ´æ¹åéåç§° |
| | | dialogVisible: false, |
| | | rules: { |
| | | quantity: [{ required: true, message: '请è¾å
¥æ°é', trigger: 'blur' }], |
| | | }, |
| | | currentStep: 0, // æ¥éª¤æ¡æ¾ç¤ºç¬¬å æ¥ |
| | | currentStepClick: 0, // ç¹å»æ¥éª¤æ¡åå |
| | | steps: ['æäº¤', 'å¼ç®±éªæ¶å¤æ ¸', 'å®è£
éªæ¶æ£æ¥', 'å®è£
éªæ¶å¤æ ¸', 'éªæ¶æ ¸æ¥', 'éªæ¶æ ¸æ¥å®¡æ ¸'], |
| | | form: { |
| | | sparePartsConfirmationList: [], // å¤ä»¶ç¡®è®¤List |
| | | fileClassConfirmationList: [], // æä»¶ç¡®è®¤List |
| | | installationAcceptanceRecordList: [], // å®è£
éªæ¶è®°å½ |
| | | acceptanceCheckRecordList: [], // éªæ¶æ ¸æ¥è®°å½ |
| | | fileName: '', // æä»¶åç§° |
| | | systemFileName: '', // ç³»ç»æä»¶åç§° |
| | | }, |
| | | outLoading: false, |
| | | responsibleOptions: [], // ä¸ç¯èè´è´£äººlist |
| | | isUpdate: false, |
| | | search: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | processNumber: '', |
| | | }, |
| | | } |
| | | }, |
| | | computed: { |
| | | action() { |
| | | return this.javaApi + this.$api.personnel.saveCNASFile |
| | | } |
| | | }, |
| | | mounted() { |
| | | // è·å设å¤äºæ
ä¿¡æ¯ |
| | | this.getDeviceAList(this.clickNodeVal.value); |
| | | window.excelClosed = this.closed |
| | | }, |
| | | methods: { |
| | | handleSizeChange(val) { |
| | | this.search.size = val |
| | | this.getPersonnelTraining(this.clickNodeVal.value); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.search.current = val |
| | | this.getPersonnelTraining(this.clickNodeVal.value); |
| | | }, |
| | | deleteFile() { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + this.form.systemFileName).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å 餿åï¼') |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | onSuccess(response, file, fileList) { |
| | | if (response.code == 200) { |
| | | // å¨ä¿åèµå¼æ°æä»¶ |
| | | this.form.fileName = file.name |
| | | this.form.systemFileName = response.data |
| | | } else { |
| | | this.$message.error(response.message) |
| | | } |
| | | }, |
| | | addTableRow(value) { |
| | | switch (value) { |
| | | // å¤ä»¶ç¡®è®¤ |
| | | case 'sparePartsConfirmationList': |
| | | const obj = Object.assign({ |
| | | name: '', |
| | | number: null, |
| | | note: '' |
| | | }) |
| | | this.form.sparePartsConfirmationList.push(obj) |
| | | break |
| | | // æä»¶ç¡®è®¤List |
| | | case 'fileClassConfirmationList': |
| | | const obj1 = Object.assign({ |
| | | expectedCopies: '', |
| | | actualCopies: '', |
| | | }) |
| | | this.form.fileClassConfirmationList.push(obj1) |
| | | break |
| | | // å®è£
éªæ¶è®°å½ |
| | | case 'installationAcceptanceRecordList': |
| | | const obj2 = Object.assign({ |
| | | installationProject: '', |
| | | installationSituation: '', |
| | | installationCompleted: '' |
| | | }) |
| | | this.form.installationAcceptanceRecordList.push(obj2) |
| | | break |
| | | // éªæ¶æ ¸æ¥è®°å½ |
| | | case 'acceptanceCheckRecordList': |
| | | const obj3 = Object.assign({ |
| | | instrumentModule: '', |
| | | verificationParameter: '', |
| | | acceptableLimit: '', |
| | | verificationResult: '', |
| | | verificationConclusion: '' |
| | | }) |
| | | this.form.acceptanceCheckRecordList.push(obj3) |
| | | default: |
| | | break |
| | | } |
| | | }, |
| | | deleteRow(index, row, type) { |
| | | switch (type) { |
| | | // å¤ä»¶ç¡®è®¤ |
| | | case 'sparePartsConfirmationList': |
| | | if (row.sparePartsId) { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteIncidentReportAll + '?sparePartsId=' + row.sparePartsId).then(res => { }); |
| | | } |
| | | this.form.sparePartsConfirmationList.splice(index, 1) |
| | | this.$message.success('å 餿åï¼') |
| | | break |
| | | // æä»¶ç¡®è®¤List |
| | | case 'fileClassConfirmationList': |
| | | if (row.fileId) { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteIncidentReportAll + '?fileId=' + row.fileId).then(res => { }); |
| | | } |
| | | this.form.fileClassConfirmationList.splice(index, 1) |
| | | this.$message.success('å 餿åï¼') |
| | | break |
| | | // å®è£
éªæ¶è®°å½ |
| | | case 'installationAcceptanceRecordList': |
| | | if (row.installId) { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteIncidentReportAll + '?installId=' + row.installId).then(res => { }); |
| | | } |
| | | this.form.installationAcceptanceRecordList.splice(index, 1) |
| | | this.$message.success('å 餿åï¼') |
| | | break |
| | | // éªæ¶æ ¸æ¥è®°å½ |
| | | case 'acceptanceCheckRecordList': |
| | | if (row.acceptanceCheckId) { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteIncidentReportAll + '?acceptanceCheckId=' + row.acceptanceCheckId).then(res => { }); |
| | | } |
| | | this.form.acceptanceCheckRecordList.splice(index, 1) |
| | | this.$message.success('å 餿åï¼') |
| | | default: |
| | | break |
| | | } |
| | | }, |
| | | choiceStep(index) { |
| | | this.currentStepClick = index |
| | | }, |
| | | openRecordAcceptance() { |
| | | // è·å设å¤åºç¡ä¿¡æ¯ |
| | | this.$axios.get(this.$api.deviceScope.selectDeviceByCode + '?id=' + this.clickNodeVal.value).then(res => { |
| | | this.form.deviceName = res.data.deviceName |
| | | this.form.manufacturer = res.data.manufacturer |
| | | this.form.specificationModel = res.data.specificationModel |
| | | this.form.managementNumber = res.data.managementNumber |
| | | this.$nextTick(() => { |
| | | this.$refs['form'].clearValidate() |
| | | }) |
| | | }); |
| | | // è·åè´è´£äººä¿¡æ¯ |
| | | this.getUserList() |
| | | }, |
| | | //æäº¤è¡¨å |
| | | async submitForm(saveState) { |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid === true || saveState !== '1submit') { |
| | | // ç»å½åç¯è设置åå»ºäººä¸æ¶é´ |
| | | let user = JSON.parse(localStorage.getItem('user')) |
| | | const dateTime = dateFormat(new Date()) |
| | | // è·åå½åç¯èæä½äººä¸æ¥æ |
| | | switch (this.currentStep) { |
| | | case 0: |
| | | this.form.submitOperatingPersonnel = user.name |
| | | this.form.submitDate = dateTime |
| | | break |
| | | case 1: |
| | | this.form.unpackingOperatingPersonnel = user.name |
| | | this.form.unpackingDate = dateTime |
| | | break |
| | | case 2: |
| | | this.form.installOperatingPersonnel = user.name |
| | | this.form.installDate = dateTime |
| | | break |
| | | case 3: |
| | | this.form.installationAcceptanceOperatingPersonnel = user.name |
| | | this.form.installationAcceptanceDate = dateTime |
| | | break |
| | | case 4: |
| | | this.form.acceptanceCheckOperatingPersonnel = user.name |
| | | this.form.acceptanceCheckDate = dateTime |
| | | break |
| | | case 5: |
| | | this.form.acceptanceAuditOperatingPersonnel = user.name |
| | | this.form.acceptanceAuditDate = dateTime |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | // è·åå½åç¯èè´è´£äºº |
| | | switch (saveState === '3reject' ? this.currentStep - 1 : this.currentStep) { |
| | | case 0: |
| | | this.form.currentResponsible = this.form.submitNextPesponsible |
| | | break |
| | | case 1: |
| | | this.form.currentResponsible = this.form.unpackingNextPesponsible |
| | | break |
| | | case 2: |
| | | this.form.currentResponsible = this.form.installNextPesponsible |
| | | break |
| | | case 3: |
| | | this.form.currentResponsible = this.form.installationAcceptanceNextPesponsible |
| | | break |
| | | case 4: |
| | | this.form.currentResponsible = this.form.acceptanceCheckNextPesponsible |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | let currentStepAction; |
| | | // 设置该æä½å¤ææ¯å¦ä¸ºæäº¤ï¼ä¿åï¼é©³åï¼éè¿ |
| | | switch (saveState) { |
| | | // æäº¤ï¼éè¿ |
| | | case '1submit': |
| | | currentStepAction = this.currentStep + 1 |
| | | break |
| | | // ä¿å |
| | | case '2save': |
| | | currentStepAction = this.currentStep |
| | | break |
| | | // 驳å |
| | | case '3reject': |
| | | currentStepAction = this.currentStep - 1 |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | // è·åå½åç¶æ |
| | | this.form.currentState = currentStepAction === 6 ? 'å
³é' : this.steps[currentStepAction] |
| | | this.form.deviceId = this.clickNodeVal.value |
| | | this.$axios.post(this.$api.deviceCheck.saveIncidentReportData, this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æäº¤æå') |
| | | this.getDeviceAList(this.clickNodeVal.value); |
| | | this.dialogVisible = false |
| | | } |
| | | }) |
| | | } else { |
| | | let step = this.steps[this.currentStep] |
| | | this.$message.warning(step + ' æµç¨ä¸æå¿
填项æªå¡«ï¼'); |
| | | } |
| | | }); |
| | | }, |
| | | // è·åè´è´£äººä¿¡æ¯æ¥å£ |
| | | getUserList() { |
| | | this.$axios.get(this.$api.deviceScope.selectUserList).then(res => { |
| | | if (res.code == 200) { |
| | | this.responsibleOptions = res.data |
| | | } |
| | | }) |
| | | }, |
| | | resetSearch() { |
| | | this.search = { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | processNumber: '', |
| | | } |
| | | this.getDeviceAList(this.clickNodeVal.value); |
| | | }, |
| | | // è·å设å¤äºæ
ä¿¡æ¯(æ ¹æ®ä»vuexä¸è·åå°ç设å¤åç§°idè¿è¡æ°æ®æ¥è¯¢) |
| | | getDeviceAList(deviceId) { |
| | | this.$axios.get(this.$api.deviceCheck.incidentReportPage + "?deviceId=" + deviceId + "&size=" + this.search.size + "¤t=" + this.search.current + "&processNumber=" + this.search.processNumber).then(res => { |
| | | if (res.code == 200) { |
| | | this.tableDataAlist = res.data.records |
| | | this.search.total = res.data.total |
| | | } |
| | | }) |
| | | }, |
| | | //table äºä»¶å¤çå¼å§å¤ |
| | | handleAttachmentClick(row) { |
| | | // 模æä¸è½½éä»¶ |
| | | const imageUrl = this.javaApi+'/img/'+row.systemFileName; // å¾ç URL |
| | | // downloadImage(imageUrl); |
| | | file.downloadIamge(imageUrl,row.fileName) |
| | | }, |
| | | handleViewClick(row) { |
| | | this.$axios.get(this.$api.deviceCheck.getShowIncidentReport + "?id=" + row.id).then(res => { |
| | | this.form = { ...res.data } |
| | | // å¦æç´¢å¼ä¸º6表示å
¨é¨éè¿ |
| | | this.currentStep = this.steps.indexOf(this.form.currentState) === -1 ? 6 : this.steps.indexOf(this.form.currentState) |
| | | this.currentStepClick = this.currentStep === 6 ? 0 : this.currentStep |
| | | this.$nextTick(() => { |
| | | this.$refs['form'].clearValidate() |
| | | }) |
| | | }) |
| | | this.dialogVisible = true |
| | | }, |
| | | // å¯¼åº |
| | | handleDownOne(row) { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceCheck.acceptanceCertificateExport + '?deviceId=' + row.deviceId + '&processNumber=' + row.processNumber, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤éªæ¶.doc'; |
| | | link.click(); |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | handleDeleteClick(row) { |
| | | this.$confirm('æ¤æä½å°å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteIncidentReport + '?id=' + row.id).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å 餿å') |
| | | this.getDeviceAList(this.clickNodeVal.value); |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | |
| | | }, |
| | | //å¯¼åº |
| | | handleDown() { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceCheck.incidentReportExport + '?deviceId=' + this.clickNodeVal.value, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤éªæ¶.xlsx'; |
| | | link.click(); |
| | | }) |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getDeviceAList(newVal.value); |
| | | } |
| | | }, |
| | | dialogVisible(newVal) { |
| | | if (!newVal) { |
| | | this.form = { |
| | | sparePartsConfirmationList: [], // å¤ä»¶ç¡®è®¤List |
| | | fileClassConfirmationList: [], // æä»¶ç¡®è®¤List |
| | | installationAcceptanceRecordList: [], // å®è£
éªæ¶è®°å½ |
| | | acceptanceCheckRecordList: [], // éªæ¶æ ¸æ¥è®°å½ |
| | | fileName: '', // æä»¶åç§° |
| | | systemFileName: '', // ç³»ç»æä»¶åç§° |
| | | } |
| | | this.currentStep = 0 // æ¥éª¤æ¡æ¾ç¤ºç¬¬å æ¥ |
| | | this.currentStepClick = 0 // ç¹å»æ¥éª¤æ¡åå |
| | | this.$refs['form'].clearValidate() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | function downloadImage(url) { |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'attachment.jpg'; // æä»¶å |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .tables{ |
| | | width: calc(100vw - 390px); |
| | | height: calc(100vh - 230px); |
| | | >>>.el-radio { |
| | | color: #606266; |
| | | font-weight: 500; |
| | | cursor: pointer; |
| | | margin-right: 0px; |
| | | width: 10em; |
| | | } |
| | | |
| | | .tables { |
| | | width: 100%; |
| | | height: calc(100vh - 17em); |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 40px; |
| | | display: flex; |
| | | align-items: center; |
| | | position: relative; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .search_thing { |
| | |
| | | } |
| | | |
| | | .search_label { |
| | | width: 70px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | width: 110px; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 120px); |
| | | } |
| | | .btns{ |
| | | position: absolute; |
| | | right: 40px; |
| | | top: 50%; |
| | | transform: translate(0,-50%); |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | margin: 10px 0; |
| | | } |
| | | |
| | | .line { |
| | | width: 20px; |
| | | height: 1px; |
| | | background-color: #ccc; |
| | | display: inline-block; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .form .search_label { |
| | | width: 120px; |
| | | } |
| | | </style> |
| | |
| | | <!-- è®¾å¤æ ¸æ¥ --> |
| | | <template> |
| | | <div>è®¾å¤æ ¸æ¥</div> |
| | | <div> |
| | | <div class="btns"> |
| | | <el-button size="small" type="primary" @click="calibrationMaintenance()">æ ¸æ¥é¡¹ç®ç»´æ¤</el-button> |
| | | <el-button size="small" type="primary" @click="add('add')">æ·»å æ ¸æ¥è®°å½</el-button> |
| | | <el-button size="small" type="primary">导åºExcel</el-button> |
| | | </div> |
| | | <div class="tables" style="margin-top: 16px;"> |
| | | <el-table :data="tableData" height="calc(100vh - 20em)"> |
| | | <el-table-column label="åºå·" type="index" width="120"> |
| | | <template v-slot="scope"> |
| | | <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="è®°å½ç¼å·" min-width="150" prop="processNumber"></el-table-column> |
| | | <el-table-column label="æ ¸æ¥æºæ" min-width="150" prop="calibrationInstitution" |
| | | show-overflow-tooltip></el-table-column> |
| | | <el-table-column label="æ ¸æ¥ç»è®º" min-width="150" prop="status"> |
| | | <template v-slot="scope"> |
| | | {{ scope.row.status === '0yes' ? 'åæ ¼' : scope.row.status === '1no' ? 'ä¸åæ ¼' : 'å
¶ä»' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ ¸æ¥è¯ä¹¦ç¼å·" min-width="150" prop="certificateSerialNumber"></el-table-column> |
| | | <el-table-column label="说æ" min-width="150" prop="remark" show-overflow-tooltip></el-table-column> |
| | | <el-table-column label="æ ¸æ¥æ¥æ" min-width="150" prop="calibrationDate"></el-table-column> |
| | | <el-table-column label="䏿¬¡æ ¸æ¥æ¥æ" min-width="150" prop="nextCalibrationDate"></el-table-column> |
| | | <el-table-column label="ç»è®°äºº" min-width="150" prop="createUser"></el-table-column> |
| | | <el-table-column label="ç»è®°æ¥æ" min-width="150" prop="createTime"></el-table-column> |
| | | <el-table-column fixed="right" label="æä½" min-width="150"> |
| | | <template #default="{ row }"> |
| | | <el-button size="small" type="text" @click="handleAttachmentClick(row)">éä»¶</el-button> |
| | | <el-button size="small" type="text" @click="handleViewClick('view', row)">æ¥ç</el-button> |
| | | <el-button size="small" type="text" @click="handleDeleteClick(row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" style="margin-right: 5%;" |
| | | @size-change="handleSizeChange" @current-change="handleCurrentChange"> |
| | | </el-pagination> |
| | | </div> |
| | | |
| | | <!-- æ ¡å项ç®ç»´æ¤ --> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible0" title="æ ¸æ¥é¡¹ç®ç»´æ¤" |
| | | top="5vh" width="70%"> |
| | | <h4> |
| | | <span style="display: flex;align-items: center;"><span class="line"></span><span>è®¾å¤æ ¸æ¥åæ°ç»´æ¤</span></span> |
| | | <el-button :loading="addCalibrateLoading" size="small" type="primary" @click="addCalibrate">æ·» å </el-button> |
| | | </h4> |
| | | <div> |
| | | <el-form ref="form0" :model="form0" :rules="form0Rules" |
| | | label-position="right" label-width="120px"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ ¸æ¥åæ°:" prop="measurementParameter"> |
| | | <el-input v-model="form0.measurementParameter" clearable placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ ¸æ¥èå´:" prop="rangeOfMeasurement"> |
| | | <el-input v-model="form0.rangeOfMeasurement" clearable placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æå¤§å
许误差:" prop="maxPermissibleError"> |
| | | <el-input v-model="form0.maxPermissibleError" clearable placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å¤å®æ å:" prop="judgmentCriteria"> |
| | | <el-input v-model="form0.judgmentCriteria" clearable placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <h4> |
| | | <span style="display: flex;align-items: center;"><span class="line"></span><span>è®¾å¤æ ¸æ¥åæ°</span></span> |
| | | </h4> |
| | | <!-- è®¾å¤æ ¡ååæ°è¡¨æ ¼ --> |
| | | <el-table ref="calibrateTable" v-loading="calibrateParamsLoading" :data="calibrateParams" |
| | | max-height="450" |
| | | stripe style="width: 100%"> |
| | | <el-table-column label="ç¼å·" type="index" width="80"></el-table-column> |
| | | <el-table-column label="æ ¸æ¥åæ°" prop="measurementParameter"></el-table-column> |
| | | <el-table-column label="æ ¸æ¥èå´" prop="rangeOfMeasurement"></el-table-column> |
| | | <el-table-column label="æå¤§å
许误差" prop="maxPermissibleError"></el-table-column> |
| | | <el-table-column label="å¤å®æ å" prop="judgmentCriteria"></el-table-column> |
| | | <el-table-column label="å建人" prop="createdBy"></el-table-column> |
| | | <el-table-column label="å建æ¶é´" prop="creationTime"></el-table-column> |
| | | <el-table-column fixed="right" label="æä½"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="handleDelete(scope.row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | |
| | | <!-- æ·»å æ ¸æ¥è®°å½ --> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible1" title="æ·»å æ ¸æ¥è®°å½" |
| | | top="5vh" |
| | | width="80%" @close="resetcalibrationRecord"> |
| | | <div class="dialog-content"> |
| | | <h4> |
| | | <span style="display: flex;align-items: center;"> |
| | | <span class="line"></span> |
| | | <span>æ·»å è®¾å¤æ ¸æ¥è®°å½</span> |
| | | </span> |
| | | </h4> |
| | | <el-form ref="calibrationRecord" :model="calibrationRecord" :rules="formRules" |
| | | label-position="right" label-width="120px"> |
| | | <el-row> |
| | | <el-col :span="6"> |
| | | <el-form-item label="æ ¸æ¥äºº:" prop="unitOfMeasure"> |
| | | <el-input v-model="calibrationRecord.unitOfMeasure" :disabled="operationType === 'view'" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ ¸æ¥æ¥æ:" prop="calibrationDate"> |
| | | <el-date-picker v-model="calibrationRecord.calibrationDate" :disabled="operationType === 'view'" format="yyyy-MM-dd" placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 90%" type="date" value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="10"> |
| | | <el-form-item label="䏿¬¡æ ¸æ¥æ¥æ:" label-width="140px" prop="nextCalibrationDate"> |
| | | <el-date-picker v-model="calibrationRecord.nextCalibrationDate" :disabled="operationType === 'view'" :picker-options="{ disabledDate: this.disabledDate }" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" style="width: 90%" type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="æ ¸æ¥å¨å
·:" prop="calculatingApparatus"> |
| | | <el-input v-model="calibrationRecord.calculatingApparatus" :disabled="operationType === 'view'" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ ¸æ¥æ åéç¨:" prop="standardRange"> |
| | | <el-input v-model="calibrationRecord.standardRange" :disabled="operationType === 'view'" size="small" |
| | | style="width: 90%"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="10"> |
| | | <el-form-item label="æ ¸æ¥æ åä¸ç¡®å®åº¦:" label-width="140px" prop="calibrationStandardUncertainty"> |
| | | <el-input v-model="calibrationRecord.calibrationStandardUncertainty" :disabled="operationType === 'view'" size="small" |
| | | style="width: 90%"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="æ ¸æ¥æå¯¼ä¹¦:" prop="byDocument"> |
| | | <el-input v-model="calibrationRecord.byDocument" :disabled="operationType === 'view'" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ£æ¥æ¥åç¼å·:" prop="certificateSerialNumber"> |
| | | <el-input v-model="calibrationRecord.certificateSerialNumber" :disabled="operationType === 'view'" size="small" |
| | | style="width: 90%"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ ¸æ¥æ»ç»è®º:" label-width="140px" prop="status"> |
| | | <el-radio-group v-model="calibrationRecord.status" :disabled="operationType === 'view'"> |
| | | <el-radio label="0yes">åæ ¼</el-radio> |
| | | <el-radio label="1no">ä¸åæ ¼</el-radio> |
| | | <el-radio label="2other">å
¶ä»</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="23"> |
| | | <el-form-item label="éä»¶ï¼" prop="fileName"> |
| | | <el-input v-model="calibrationRecord.fileName" :style="`width: ${operationType === 'add' ? '90%' : '100%'};}`" disabled |
| | | size="small"> |
| | | <el-button v-if="operationType === 'add'" slot="append" icon="el-icon-delete-solid" |
| | | @click="deleteFile"></el-button> |
| | | </el-input> |
| | | <el-upload v-if="operationType === 'add'" ref="upload" :action="action" :before-upload="beforeUpload" :headers="headers" |
| | | :limit="1" :on-error="onError" :on-success="handleSuccessUp" |
| | | :show-file-list="false" |
| | | style="float: right;"> |
| | | <el-button :loading="upLoading" size="small" style="position: relative; top: -4px;" |
| | | type="primary">éä»¶ä¸ä¼ |
| | | </el-button> |
| | | </el-upload> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="夿³¨:"> |
| | | <el-input v-model="calibrationRecord.remark" :disabled="operationType === 'view'" :rows="3" size="small" |
| | | style="width: 96%" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <h4> |
| | | <span style="display: flex;align-items: center;"> |
| | | <span class="line"></span><span>æ ¸æ¥æ¡ç®ç¡®è®¤ç»æ</span> |
| | | </span> |
| | | </h4> |
| | | <el-table ref="calibrateTable" :data="calibrateParams" stripe style="width: 100%;"> |
| | | <el-table-column label="ç¼å·" type="index" width="80"></el-table-column> |
| | | <el-table-column label="æ ¸æ¥åæ°" prop="measurementParameter" width="150"></el-table-column> |
| | | <el-table-column label="æ ¸æ¥èå´" prop="rangeOfMeasurement" width="150"></el-table-column> |
| | | <el-table-column label="æå¤§å
许误差" prop="maxPermissibleError" width="150"></el-table-column> |
| | | <el-table-column label="å¤å®æ å" prop="judgmentCriteria" width="150"></el-table-column> |
| | | <el-table-column label="æ¯å¦æ ¸æ¥" prop="isCalibration"> |
| | | <template slot="header" slot-scope="scope"> |
| | | <span class="required-span">* </span>æ¯å¦æ ¸æ¥ |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <el-radio-group v-model="scope.row.isCalibration" :disabled="operationType === 'view'"> |
| | | <el-radio label="0yes">æ¯</el-radio> |
| | | <el-radio label="1no">å¦</el-radio> |
| | | </el-radio-group> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¤å®ç»æ" prop="result"> |
| | | <template slot="header" slot-scope="scope"> |
| | | <span class="required-span">* </span>å¤å®ç»æ |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <el-radio-group v-model="scope.row.result" :disabled="operationType === 'view'" @input="checkRadio()"> |
| | | <el-radio label="0yes">åæ ¼</el-radio> |
| | | <el-radio label="1no">ä¸åæ ¼</el-radio> |
| | | <el-radio label="2other">å
¶ä»</el-radio> |
| | | </el-radio-group> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="åé¡¹ç»æè¯´æ" prop="singleResultStatement"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.singleResultStatement" :disabled="operationType === 'view'" size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer" style="float: right;margin-top: 10px"> |
| | | <el-button v-if="operationType === 'add'" @click="dialogVisible1 = false">å æ¶</el-button> |
| | | <el-button v-if="operationType === 'add'" type="primary" @click="addRecord">ç¡® å®</el-button> |
| | | </span> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | import file from '../../../util/file'; |
| | | export default { |
| | | components: { |
| | | ValueTable |
| | | }, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | search: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0 |
| | | }, |
| | | calibrateParamsLoading: false, |
| | | addCalibrateLoading: false, |
| | | form0: { |
| | | measurementParameter: '', // 计éåæ° |
| | | rangeOfMeasurement: '', |
| | | maxPermissibleError: '', |
| | | judgmentCriteria: '', |
| | | createdBy: '', |
| | | action: '', |
| | | deviceId: null |
| | | }, |
| | | form0Rules: { |
| | | measurementParameter: [ |
| | | {required: true, message: '请è¾å
¥è®¡éåæ°', trigger: 'blur'} |
| | | ], |
| | | rangeOfMeasurement: [ |
| | | {required: true, message: '请è¾å
¥éç¨èå´', trigger: 'blur'} |
| | | ], |
| | | maxPermissibleError: [ |
| | | {required: true, message: '请è¾å
¥æå¤§å
许误差', trigger: 'blur'} |
| | | ], |
| | | judgmentCriteria: [ |
| | | {required: true, message: '请è¾å
¥å¤å®æ å', trigger: 'blur'} |
| | | ], |
| | | }, |
| | | dialogVisible0: false, |
| | | calibrationRecord: { |
| | | unitOfMeasure: '', // æ ¸æ¥äºº |
| | | calibrationDate: '', // æ ¸æ¥æ¥æ |
| | | nextCalibrationDate: '', // 䏿¬¡æ ¸æ¥æ¥æ |
| | | calculatingApparatus: '', // æ ¸æ¥å¨å
· |
| | | standardRange: '', // æ ¸æ¥æ åéç¨ |
| | | calibrationStandardUncertainty: '', // æ ¸æ¥æ åä¸ç¡®å®åº¦ |
| | | byDocument: '', // æ ¸æ¥æå¯¼ä¹¦ |
| | | certificateSerialNumber: '', // æ£æ¥æ¥åæå¯¼ä¹¦ |
| | | fileName: '', // éä»¶ |
| | | status: '', // æ ¸æ¥æ»ç»è®º |
| | | remark: '', // 夿³¨ |
| | | }, |
| | | formRules: { |
| | | unitOfMeasure: [{required: true, message: '请è¾å
¥æ ¸æ¥äºº', trigger: 'blur'}], |
| | | calibrationDate: [{required: true, message: 'è¯·éæ©æ ¸æ¥æ¥æ', trigger: 'change'}], |
| | | nextCalibrationDate: [{required: true, message: 'è¯·éæ©ä¸æ¬¡æ ¸æ¥æ¥æ', trigger: 'change'}], |
| | | calculatingApparatus: [{required: true, message: '请è¾å
¥æ ¸æ¥å¨å
·', trigger: 'blur'}], |
| | | standardRange: [{required: true, message: '请è¾å
¥æ ¸æ¥æ åéç¨', trigger: 'blur'}], |
| | | calibrationStandardUncertainty: [{required: true, message: '请è¾å
¥æ ¸æ¥æ åä¸ç¡®å®åº¦', trigger: 'blur'}], |
| | | byDocument: [{required: true, message: '请è¾å
¥æ ¸æ¥æå¯¼ä¹¦', trigger: 'blur'}], |
| | | certificateSerialNumber: [{required: true, message: '请è¾å
¥æ£æ¥æ¥åæå¯¼ä¹¦', trigger: 'blur'}], |
| | | status: [{required: true, message: 'è¯·éæ©æ ¸æ¥æ»ç»è®º', trigger: 'change'}] |
| | | }, |
| | | calibrateParams: [], |
| | | tableData: [], |
| | | operationType: '', |
| | | dialogVisible1: false, |
| | | formData: { |
| | | person: '', |
| | | data1: '', |
| | | name: '', |
| | | }, |
| | | upLoading: false |
| | | } |
| | | }, |
| | | // ç¨äºä¸ä¼ æä»¶çä¿¡æ¯ |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | 'token': sessionStorage.getItem('token') |
| | | } |
| | | }, |
| | | action() { |
| | | return this.javaApi + this.$api.personnel.saveCNASFile |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getTableList(this.clickNodeVal.value) // è·åè®¾å¤æ ¸æ¥åè¡¨æ°æ® |
| | | }, |
| | | methods: { |
| | | //ç¶æå¤å® |
| | | checkRadio(){ |
| | | let resultList = this.calibrateParams.map(ele=>ele.result) |
| | | if(resultList && resultList.filter(ele=>ele=='1no').length>0){ |
| | | this.calibrationRecord.status = '1no' |
| | | }else if(resultList && resultList.filter(ele=>ele=='2other').length==resultList.length){ |
| | | this.calibrationRecord.status = '2other' |
| | | }else if(resultList && resultList.filter(ele=>ele=='0yes').length==resultList.length){ |
| | | this.calibrationRecord.status = '0yes' |
| | | } |
| | | }, |
| | | //䏿¬¡æ ¸æ¥æ¥æ:ç¦ç¨å¨æ ¸æ¥æ¥æåçæ¥æ |
| | | disabledDate(time){ |
| | | let selectDate = this.calibrationRecord.calibrationDate |
| | | if(selectDate){ |
| | | let oldDate = new Date(selectDate) |
| | | return time <= oldDate.getTime() |
| | | } |
| | | return false |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.search.size = val |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.search.current = val |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | // è·åè®¾å¤æ ¡ååæ°tableä¿¡æ¯ |
| | | async getXmsg() { |
| | | this.calibrateParamsLoading = true |
| | | try { |
| | | await this.$axios.get(this.$api.deviceCheck.selectDeviceMetric + "?deviceId=" + this.clickNodeVal.value + "&type=examine").then(res => { |
| | | if (res.code == 200) { |
| | | this.calibrateParams = res.data |
| | | } |
| | | this.calibrateParamsLoading = false |
| | | }) |
| | | } catch (e) { |
| | | this.calibrateParamsLoading = false |
| | | } |
| | | }, |
| | | // æ ¡å项ç®ç»´æ¤ |
| | | calibrationMaintenance() { |
| | | this.dialogVisible0 = true |
| | | this.getXmsg(); |
| | | }, |
| | | addCalibrate() { |
| | | this.$refs['form0'].validate((valid) => { |
| | | if (valid) { |
| | | // ä¿å |
| | | this.calibrateParamsLoading = true |
| | | this.addCalibrateLoading = true |
| | | this.form0.deviceId = this.clickNodeVal.value; |
| | | const user = JSON.parse(localStorage.getItem('user')) |
| | | this.form0.createdBy = user.name; |
| | | this.form0.type = 'examine' |
| | | this.$axios.post(this.$api.deviceCheck.saveOrUpdateDeviceMetric, this.form0, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('ä¿åæå') |
| | | this.$refs['form0'].resetFields() |
| | | this.getXmsg() // å·æ°è®¾å¤æ ¡ååæ°è¡¨æ ¼ |
| | | } |
| | | this.calibrateParamsLoading = false |
| | | this.addCalibrateLoading = false |
| | | }) |
| | | } else { |
| | | this.addCalibrateLoading = false |
| | | this.$message.warning('æå¿
填项æªå¡«'); |
| | | } |
| | | }) |
| | | }, |
| | | // æ¥è¯¢è®¾å¤æ ¸æ¥å表 |
| | | getTableList(deviceId) { |
| | | this.$axios.get(this.$api.deviceCheck.deviceMetricRecordPage + '?deviceId=' + deviceId + "&size=" + this.search.size + "¤t=" + this.search.current + "&type=examine").then(res => { |
| | | this.tableData = res.data.records |
| | | this.search.total = res.data.total |
| | | }) |
| | | }, |
| | | // æäº¤è¦æ·»å çè®°å½ |
| | | addRecord() { |
| | | this.$refs['calibrationRecord'].validate((valid) => { |
| | | if (valid) { |
| | | try { |
| | | if (this.calibrateParams.some(m => m.isCalibration === undefined)) { |
| | | this.$message.error('è¯·éæ©æ¯å¦æ ¸æ¥') |
| | | return |
| | | } |
| | | if (!this.calibrateParams.every(m => m.result !== undefined)) { |
| | | this.$message.error('è¯·éæ©å¤å®ç»æ') |
| | | return |
| | | } |
| | | this.addRecordLoading = true |
| | | this.calibrationRecord.deviceId = this.clickNodeVal.value; |
| | | let user = JSON.parse(localStorage.getItem('user')) |
| | | this.calibrationRecord.createUser = user.name |
| | | this.calibrationRecord.deviceMetricsCopyList = this.calibrateParams |
| | | this.calibrationRecord.type = 'examine' |
| | | this.$axios.post(this.$api.deviceCheck.addOrUpdateDeviceMetricRecord, this.calibrationRecord, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ·»å æå') |
| | | this.dialogVisible1 = false |
| | | this.getTableList(this.clickNodeVal.value) |
| | | } |
| | | this.addRecordLoading = false |
| | | }) |
| | | } catch (e) { |
| | | console.log('addRecord---', e) |
| | | this.addRecordLoading = false |
| | | } |
| | | } else { |
| | | this.$message.warning('æå¿
填项æªå¡«'); |
| | | } |
| | | }) |
| | | }, |
| | | resetcalibrationRecord() { |
| | | this.$refs.calibrationRecord.resetFields() |
| | | }, |
| | | // éä»¶ä¸ä¼ |
| | | handleSuccessUp(response, file) { |
| | | if (response.code == 200) { |
| | | // å¨ä¿åèµå¼æ°æä»¶ |
| | | this.calibrationRecord.fileName = file.name |
| | | this.calibrationRecord.systemFileName = response.data |
| | | this.upLoading = false; |
| | | } else { |
| | | this.$message.error(response.message) |
| | | } |
| | | }, |
| | | beforeUpload(file) { |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload.clearFiles() |
| | | return false; |
| | | } else { |
| | | this.upLoading = true; |
| | | return true; |
| | | } |
| | | }, |
| | | onError(err, file, fileList) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | deleteFile() { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + this.form.systemFileName).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å 餿åï¼') |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // end |
| | | handleAttachmentClick(row) { |
| | | // 模æä¸è½½éä»¶ |
| | | const imageUrl = this.javaApi+'/img/'+row.systemFileName; // å¾ç URL |
| | | file.downloadIamge(imageUrl,row.fileName) |
| | | // downloadImage(imageUrl, row.fileName); |
| | | }, |
| | | // æ·»å æ ¸æ¥è®°å½ |
| | | add(type) { |
| | | this.operationType = type |
| | | this.dialogVisible1 = true |
| | | this.getXmsg() |
| | | }, |
| | | // æ¥ç详æ
|
| | | handleViewClick(type, row) { |
| | | this.$axios.get(this.$api.deviceCheck.showDeviceMetricsCopy + "?id=" + row.id + "&type=examine").then(res => { |
| | | this.calibrateParams = res.data |
| | | }) |
| | | this.calibrationRecord = {...row} |
| | | this.operationType = type |
| | | this.dialogVisible1 = true |
| | | }, |
| | | |
| | | // è¡¨æ ¼å é¤æä½ |
| | | handleDeleteClick(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteDeviceMetricRecord + "?id=" + row.id).then(res => { |
| | | this.getTableList(this.clickNodeVal.value) // è·åè®¾å¤æ ¡ååè¡¨æ°æ® |
| | | this.$message.success('å 餿åï¼') |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }) |
| | | }, |
| | | handleDelete(row){ |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteDeviceMetrics + "?id=" + row.id).then(res => { |
| | | this.getXmsg(); |
| | | this.$message.success('å 餿åï¼') |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }) |
| | | } |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getTableList(newVal.value); |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | |
| | | function downloadImage(url,name) { |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = name; // æä»¶å |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .dialog-content { |
| | | max-height: 70vh; /* 设置æå¤§é«åº¦ */ |
| | | overflow-y: auto; /* å¯ç¨åç´æ»å¨ */ |
| | | } |
| | | |
| | | .tables { |
| | | width: 100%; |
| | | height: calc(100vh - 230px); |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 40px; |
| | | display: flex; |
| | | align-items: center; |
| | | position: relative; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 40px; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 70px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 110px); |
| | | } |
| | | |
| | | .btns { |
| | | text-align: right; |
| | | } |
| | | |
| | | h4 { |
| | | font-weight: 400; |
| | | font-size: 16px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin: 10px 0; |
| | | } |
| | | |
| | | h4 .line { |
| | | display: inline-block; |
| | | width: 3px; |
| | | height: 16px; |
| | | background: #3A7BFA; |
| | | margin-right: 4px; |
| | | } |
| | | |
| | | .check { |
| | | background-color: #fff; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .check_thing { |
| | | flex: 0 0 calc(20% - 10px); |
| | | margin-bottom: 20px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: flex-start; |
| | | } |
| | | |
| | | .check_label { |
| | | font-size: 14px; |
| | | margin-bottom: 5px; |
| | | } |
| | | |
| | | .check_data .check_input { |
| | | width: 100%; |
| | | } |
| | | |
| | | .el-table { |
| | | font-size: 14px; |
| | | color: #333; |
| | | } |
| | | |
| | | .el-table thead { |
| | | background-color: #f5f5f5; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- è®¾å¤æ»è§ --> |
| | | <style scoped> |
| | | .title { |
| | | height: 60px; |
| | | line-height: 60px; |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 50px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_thing { |
| | | width: 350px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 110px; |
| | | font-size: 14px; |
| | | text-align: left; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 110px); |
| | | } |
| | | |
| | | .table { |
| | | background-color: #fff; |
| | | width: calc(100% - 40px); |
| | | height: calc(100vh - 17em); |
| | | /* padding: 10px; */ |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | .card { |
| | | list-style-type: none; |
| | | display: grid; |
| | | grid-template-columns: repeat(auto-fit, 380px); |
| | | justify-content: start; |
| | | grid-gap: 16px; |
| | | min-height: 300px; |
| | | } |
| | | |
| | | .card li { |
| | | width: 380px; |
| | | height: 165px; |
| | | border-radius: 8px 8px 8px 8px; |
| | | border: 1px solid #EEEEEE; |
| | | margin: 0 !important; |
| | | display: flex; |
| | | align-items: center; |
| | | box-sizing: border-box; |
| | | padding: 16px; |
| | | font-size: 14px; |
| | | color: #666666; |
| | | position: relative; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .card li .img { |
| | | width: 114px; |
| | | height: 114px; |
| | | border-radius: 16px; |
| | | margin-right: 24px; |
| | | } |
| | | |
| | | .list-left .list-left-info { |
| | | line-height: 36px; |
| | | display: flex; |
| | | } |
| | | |
| | | .text-truncate { |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap |
| | | } |
| | | |
| | | .circles { |
| | | position: absolute; |
| | | width: 70px; |
| | | height: 70px; |
| | | right: 0; |
| | | top: 0; |
| | | z-index: 0; |
| | | } |
| | | |
| | | .circles .circle { |
| | | border-radius: 50%; |
| | | opacity: 0.2; |
| | | } |
| | | |
| | | .circle0, |
| | | .circle1, |
| | | .circle2 { |
| | | width: 60px; |
| | | height: 60px; |
| | | position: absolute; |
| | | } |
| | | |
| | | .circle3 { |
| | | width: 16px; |
| | | height: 16px; |
| | | position: absolute; |
| | | } |
| | | |
| | | .circle0 { |
| | | bottom: 6px; |
| | | left: 0; |
| | | } |
| | | |
| | | .circle1 { |
| | | bottom: 0; |
| | | right: -30px; |
| | | } |
| | | |
| | | .circle2 { |
| | | left: 0; |
| | | top: -30px; |
| | | } |
| | | |
| | | .circle3 { |
| | | top: 0; |
| | | right: 0; |
| | | } |
| | | |
| | | .success .circle { |
| | | background: #34BD66; |
| | | } |
| | | |
| | | .danger .circle { |
| | | background: #FF3838; |
| | | } |
| | | |
| | | .warning .circle { |
| | | background: #FBB247; |
| | | } |
| | | .info .circle { |
| | | background: #909399; |
| | | } |
| | | </style> |
| | | |
| | | <template> |
| | | <div class="role_manage"> |
| | | <div> |
| | | <el-form :model="entity" inline label-position="right" label-width="80px"> |
| | | <el-form-item label="ç¶æ:"> |
| | | <el-select v-model="entity.deviceStatus" placeholder="å
¨é¨" size="small" clearable> |
| | | <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="设å¤åç§°:"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="entity.deviceName"></el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button size="small" @click="refresh()">é ç½®</el-button> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button size="small" type="primary" |
| | | @click="currentPage = 1, keyMap = {}, list = [], finishLoding = false, refreshTable()">æ¥ è¯¢</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <!-- <div class="search_thing"> |
| | | <div class="search_label">ç¶æï¼</div> |
| | | <el-select v-model="entity.deviceStatus" placeholder="å
¨é¨" size="small" clearable> |
| | | <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">设å¤åç§°ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="entity.deviceName"></el-input> |
| | | </div> |
| | | </div> --> |
| | | |
| | | |
| | | <!-- <div class="search_thing" style="padding-left: 30px;"> |
| | | </div> --> |
| | | </div> |
| | | <div class="table" v-loading="loading"> |
| | | <scroll-pagination @load="refreshTable()" :finishLoding="finishLoding" :list="list" |
| | | v-if="list.length > 0 || loading"> |
| | | <ul class="card"> |
| | | <li v-for="(m, i) in list" :key="i"> |
| | | <el-image class="img" :src="javaApi + '/img/' + m.imageUpload"> |
| | | <div slot="error" class="image-error" style="width: 112px; |
| | | height: 112px; |
| | | border-radius: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border: 1px solid #EEEEEE;"> |
| | | <i class="el-icon-picture-outline" style="font-size:30px;color:#666666;"></i> |
| | | </div> |
| | | </el-image> |
| | | <div class="list-left"> |
| | | <div class="list-left-info"> |
| | | <span class="label">设å¤åç§°ï¼</span> |
| | | <span style="color:#3A7BFA; |
| | | font-size: 16px; |
| | | display: inline-block; |
| | | width: 129px; |
| | | word-break: break-all;" class="text-truncate" :title="m.deviceName">{{ m.deviceName ? m.deviceName : 'æ ' }}</span> |
| | | </div> |
| | | <div class="list-left-info"> |
| | | <span class="label">è§æ ¼åå·ï¼</span> |
| | | <span style="color:#333333;font-size: 16px;">{{ m.specificationModel ? m.specificationModel : 'æ ' |
| | | }}</span> |
| | | </div> |
| | | <div class="list-left-info"> |
| | | <span class="label">ç¶æï¼</span> |
| | | <el-tag :type="m.type" v-if="m.deviceStatusName">{{ m.deviceStatusName }}</el-tag> |
| | | <span v-else style="color:#333333;font-size: 16px;">æ </span> |
| | | </div> |
| | | </div> |
| | | <div class="circles" :class="m.type"> |
| | | <div class="circle0 circle"></div> |
| | | <div class="circle1 circle"></div> |
| | | <div class="circle2 circle"></div> |
| | | <div class="circle3 circle"></div> |
| | | </div> |
| | | </li> |
| | | </ul> |
| | | </scroll-pagination> |
| | | <div v-if="list.length < 1 && !loading" style="color:#909399;font-size:14px;text-align: center;margin-top:200px"> |
| | | ææ æ°æ® |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ScrollPagination from '../../tool/scroll-paging.vue' |
| | | export default { |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | components: { |
| | | ScrollPagination |
| | | }, |
| | | data() { |
| | | return { |
| | | entity: { |
| | | deviceStatus: null, |
| | | deviceName: null, |
| | | orderBy: { field: "id", order: "asc" } |
| | | }, |
| | | options: [], |
| | | list: [], |
| | | currentPage: 1, // å½å页 |
| | | pageSize: 16, // ä¸é¡µ16æ¡ |
| | | total: '', |
| | | loading: true, // ç»ä»¶loadingçå±ç¤º,é»è®¤ä¸ºtrue |
| | | finishLoding: false, // å è½½å®æï¼æ¾ç¤ºå·²ç»æ²¡ææ´å¤äº |
| | | keyMap: {}, |
| | | laboratoryNameIsNull: false, |
| | | } |
| | | }, |
| | | created() { |
| | | this.selectEnumByCategory() |
| | | this.keyMap = {}; |
| | | this.currentPage = 1; |
| | | this.list = []; |
| | | this.clickSidebar(this.clickNodeVal) |
| | | }, |
| | | methods: { |
| | | refreshTable() { |
| | | const key = `_${this.currentPage}` |
| | | const value = this.keyMap[key] |
| | | // 妿valueåå¨ï¼è¡¨ç¤ºç¼åæå¼ï¼é£ä¹é»æ¢è¯·æ± |
| | | if (value) { |
| | | return |
| | | } |
| | | // valueä¸åå¨ï¼è¡¨ç¤ºç¬¬ä¸æ¬¡è¯·æ±,设置å ä½ |
| | | this.keyMap[key] = 'temp' |
| | | if (this.currentPage == 1) { |
| | | this.loading = true |
| | | } |
| | | if(this.list.length==0){ |
| | | this.finishLoding = false; |
| | | } |
| | | this.$axios.post(this.$api.deviceScope.selectDeviceParameter + "?laboratoryNameIsNull=" + this.laboratoryNameIsNull, { |
| | | page: { |
| | | current: this.currentPage, |
| | | size: this.pageSize |
| | | }, |
| | | entity: this.entity |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.total = res.data.body.total |
| | | let list = res.data.body.records.map(m => { |
| | | switch (m.deviceStatus) { |
| | | case 0: |
| | | // æ£å¸¸ |
| | | m.type = 'success' |
| | | break; |
| | | case 1: |
| | | // ç»´ä¿® |
| | | m.type = 'warning' |
| | | break; |
| | | case 2: |
| | | // åç¨ |
| | | m.type = 'danger' |
| | | break; |
| | | case 3: |
| | | // æ¥åº |
| | | m.type = 'info' |
| | | break; |
| | | } |
| | | this.options.forEach(j => { |
| | | if (m.deviceStatus == j.value) { |
| | | m.deviceStatusName = j.label |
| | | } |
| | | }) |
| | | return m; |
| | | }) |
| | | if (list.length == 0) { |
| | | this.finishLoding = true; |
| | | } else { |
| | | if (list.length < this.pageSize) { |
| | | this.finishLoding = true; |
| | | } |
| | | this.list = this.list.concat(list) |
| | | if (this.total == this.list.length) { |
| | | this.finishLoding = true; |
| | | } |
| | | this.currentPage++; |
| | | } |
| | | } |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | refresh() { |
| | | this.keyMap = {}; |
| | | this.currentPage = 1; |
| | | this.list = []; |
| | | this.finishLoding = false; |
| | | this.entity = { |
| | | deviceStatus: null, |
| | | deviceName: null, |
| | | orderBy: { field: "id", order: "asc" } |
| | | }; |
| | | this.refreshTable() |
| | | }, |
| | | // è·ååå
¸ |
| | | selectEnumByCategory() { |
| | | this.$axios.post(this.$api.enums.selectEnumByCategory, { |
| | | category: "设å¤ç¶æ" |
| | | }).then(res => { |
| | | this.options = res.data |
| | | }) |
| | | }, |
| | | // ç¹å»ä¾§è¾¹æ å·æ° |
| | | clickSidebar(clickNodeVal) { |
| | | this.laboratoryNameIsNull = false |
| | | // æ¯å¦åå¨valueï¼åå¨value代表为ä¸çº§ |
| | | if (!clickNodeVal.value) { |
| | | this.finishLoding = false; |
| | | this.keyMap = {}; |
| | | this.currentPage = 1; |
| | | this.list = []; |
| | | this.entity.laboratoryName = null |
| | | this.entity.storagePoint = null |
| | | // çäº1代表为æ çä¸çº§ï¼label为é¨é¨ |
| | | if (clickNodeVal.label == 'å
¶ä»') { |
| | | this.laboratoryNameIsNull = true |
| | | this.refreshTable(); |
| | | return |
| | | } |
| | | if (clickNodeVal.level == 1) { |
| | | this.entity.laboratoryName = clickNodeVal.label |
| | | // çäºäºçº§ãlabel为åå¨å°ç¹ |
| | | } else if (clickNodeVal.level == 2) { |
| | | // å
¶ä»è¡¨ç¤ºæ²¡æé
ç½®å®éªå®¤ï¼åªé
ç½®äºå°ç¹ |
| | | if (clickNodeVal.parent.label == 'å
¶ä»') { |
| | | this.laboratoryNameIsNull = true |
| | | } else { |
| | | this.entity.laboratoryName = clickNodeVal.parent.label |
| | | } |
| | | this.entity.storagePoint = clickNodeVal.label |
| | | } |
| | | this.refreshTable(); |
| | | } |
| | | } |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | this.clickSidebar(newVal) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | |
| | | <!-- è®¾å¤æ
é --> |
| | | <template> |
| | | <div>è®¾å¤æ
é</div> |
| | | <div> |
| | | <div class="search"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æµç¨ç¼å·ï¼</div> |
| | | <div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="search.processNumber" style="width: 100%;" |
| | | @keyup.enter.native="getTableList(clickNodeVal.value)"> |
| | | </el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" style="padding-left: 30px;"> |
| | | <el-button size="small" @click="resetSearch">é ç½®</el-button> |
| | | <el-button size="small" type="primary" @click="getTableList(clickNodeVal.value)">æ¥ è¯¢</el-button> |
| | | </div> |
| | | <div class="btns"> |
| | | <el-button size="small" type="primary" @click="dialogVisible = true, addRecode()">æ°å»º</el-button> |
| | | <el-button size="small" type="primary" @click="handleDown" :loading="outLoading">导åº</el-button> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <div class="tables" style="margin-top: 16px;"> |
| | | <el-table :data="faultParam" style="width: 100%" height="calc(100vh - 20em)"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column header-align="center" align="center" width="70" prop="prop" label="åºå·" |
| | | type="index"></el-table-column> |
| | | <el-table-column prop="processNumber" label="æµç¨ç¼å·" min-width="180"></el-table-column> |
| | | <el-table-column prop="deviceName" label="设å¤åç§°" min-width="150"></el-table-column> |
| | | <el-table-column prop="managementNumber" label="ç»ä¸ç¼å·" min-width="150"></el-table-column> |
| | | <el-table-column prop="faultSituation" label="æ
éæ
åµ" min-width="130"></el-table-column> |
| | | <el-table-column prop="submitPerson" label="æäº¤äºº" min-width="130"></el-table-column> |
| | | <el-table-column prop="createTime" label="æäº¤æ¥æ" min-width="150"></el-table-column> |
| | | <el-table-column prop="currentState" label="å½åç¶æ" min-width="130"></el-table-column> |
| | | <el-table-column prop="currentResponsible" label="å½å责任人" width="180"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column label="æä½" fixed="right" min-width="150"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="showDetailsDialog(scope.row)">æ¥ç详æ
</el-button> |
| | | <el-button type="text" size="small" @click="handleDeleteClick(scope.$index, scope.row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="1" |
| | | style="margin-right: 5%;" :page-sizes="[10, 20, 30, 50, 100]" :page-size="search.size" |
| | | layout="->,total, sizes, prev, pager, next, jumper" :total="search.total"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <el-dialog title="æ°å¢ç»´ä¿®è®°å½" top="5vh" :visible.sync="dialogVisible" width="60%" @open="openRecordAcceptance" |
| | | :close-on-click-modal="false" :close-on-press-escape="false"> |
| | | <el-steps :active="currentStep" finish-status="success" align-center> |
| | | <el-step v-for="(v, i) in steps" style="cursor:pointer" :title="v" :key="i" |
| | | @click.native="choiceStep(i)"></el-step> |
| | | </el-steps> |
| | | <el-form ref="form" :model="form" label-position="right" label-width="120px"> |
| | | <!-- æäº¤ --> |
| | | <div v-show="currentStepClick == 0"> |
| | | <el-card style="margin-top: 1em;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æµç¨ç¼å·:"> |
| | | <el-input v-model="form.processNumber" size="small" disabled></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤åç§°:"> |
| | | <el-input v-model="form.deviceName" size="small" disabled></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è§æ ¼åå·:"> |
| | | <el-input v-model="form.specificationModel" size="small" disabled></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤ç¼å·:"> |
| | | <el-input v-model="form.managementNumber" size="small" disabled></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å确度éå¼:" prop="measureOfAccuracy" |
| | | :rules="[{required: currentStep === 0, message: '请è¾å
¥å确度éå¼', trigger: 'blur'}]"> |
| | | <el-input v-model="form.measureOfAccuracy" size="small" :disabled="currentStep !== 0"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ
鿥æ:" prop="faultDate"> |
| | | <el-date-picker |
| | | v-model="form.faultDate" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" size="small" format="yyyy-MM-dd" style="width: 100%" value-format="yyyy-MM-dd" :disabled="currentStep !== 0"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¦æ±ä¿®å¤æ¥æ:" prop="requestRepairDate"> |
| | | <el-date-picker |
| | | v-model="form.requestRepairDate" |
| | | :picker-options="{ disabledDate: this.disabledDate }" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" size="small" format="yyyy-MM-dd" style="width: 100%" value-format="yyyy-MM-dd" :disabled="currentStep !== 0"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æ
éæ
åµ:" prop="faultSituation" |
| | | :rules="[{required: currentStep === 0, message: '请è¾å
¥æ
éæ
åµ', trigger: 'blur'}]"> |
| | | <el-input v-model="form.faultSituation" type="textarea" size="small" :disabled="currentStep !== 0"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ç¸å
³éä»¶:"> |
| | | <el-input v-model="form.fileName" :disabled="true" size="small" style="width: 80%;"> |
| | | <el-button slot="append" icon="el-icon-delete-solid" @click="deleteFile" :disabled="currentStep !== 0"></el-button> |
| | | </el-input> |
| | | <el-upload ref="upload" style="float: right;" :action="action" :show-file-list="false" |
| | | :on-success="handleSuccess"> |
| | | <el-button style="position: relative;top: -4px;" class="uploadFile" slot="trigger" size="small" |
| | | type="primary" :disabled="currentStep !== 0">éä»¶ä¸ä¼ |
| | | </el-button> |
| | | </el-upload> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¸ç¯èè´è´£äºº:" prop="submitNextPesponsible" |
| | | :rules="[{required: currentStep === 0, message: '请è¾å
¥ä¸ç¯èè´è´£äºº', trigger: 'change'}]"> |
| | | <el-select v-model="form.submitNextPesponsible" placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 100%" :disabled="currentStep !== 0"> |
| | | <el-option v-for="(v, i) in users" :label="v.name" :value="v.name" :key="i"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.submitOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.submitDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <!-- 设å¤ç®¡çåæè§ --> |
| | | <div v-show="currentStepClick == 1"> |
| | | <el-card style="margin-top: 1em; height: 45vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ç»´ä¿®æ¹å¼åè´¹ç¨:" prop="methodCost" |
| | | :rules="[{required: currentStep === 1, message: '请è¾å
¥ç»´ä¿®æ¹å¼åè´¹ç¨', trigger: 'blur'}]"> |
| | | <el-input v-model="form.methodCost" type="textarea" size="small" :disabled="currentStep !== 1"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸æè§:" prop="adminAuditOption" |
| | | :rules="[{required: currentStep === 1, message: '请è¾å
¥å®¡æ ¸æè§', trigger: 'blur'}]"> |
| | | <el-input v-model="form.adminAuditOption" type="textarea" size="small" :disabled="currentStep !== 1"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¸ç¯èè´è´£äºº:" prop="adminNextPesponsible" |
| | | :rules="[{required: currentStep === 1, message: '请è¾å
¥ä¸ç¯èè´è´£äºº', trigger: 'change'}]"> |
| | | <el-select v-model="form.adminNextPesponsible" placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 100%" :disabled="currentStep !== 1"> |
| | | <el-option v-for="(v, i) in users" :label="v.name" :value="v.name" :key="i"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.adminOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.adminDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <!-- ææ¯è´è´£äººæè§ --> |
| | | <div v-show="currentStepClick == 2"> |
| | | <el-card style="margin-top: 1em; height: 45vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®¡æ ¸æè§:" prop="technicalAuditOption" |
| | | :rules="[{required: currentStep === 2, message: '请è¾å
¥å®¡æ ¸æè§', trigger: 'blur'}]"> |
| | | <el-input v-model="form.technicalAuditOption" type="textarea" size="small" :disabled="currentStep !== 2"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¸ç¯èè´è´£äºº:" prop="technicalNextPesponsible" |
| | | :rules="[{required: currentStep === 2, message: '请è¾å
¥ä¸ç¯èè´è´£äºº', trigger: 'change'}]"> |
| | | <el-select v-model="form.technicalNextPesponsible" placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 100%" :disabled="currentStep !== 2"> |
| | | <el-option v-for="(v, i) in users" :label="v.name" :value="v.name" :key="i"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.technicalOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.technicalDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <!-- ç»´ä¿®æ
åµè®°å½ --> |
| | | <div v-show="currentStepClick == 3"> |
| | | <el-card style="margin-top: 1em; height: 45vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ç»´ä¿®æ
åµ:" prop="maintainSituation" |
| | | :rules="[{required: currentStep === 3, message: '请è¾å
¥ç»´ä¿®æ
åµ', trigger: 'blur'}]"> |
| | | <el-input v-model="form.maintainSituation" type="textarea" size="small" :disabled="currentStep !== 3"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¸ç¯èè´è´£äºº:" prop="maintainNextPesponsible" |
| | | :rules="[{required: currentStep === 3, message: '请è¾å
¥ä¸ç¯èè´è´£äºº', trigger: 'change'}]"> |
| | | <el-select v-model="form.maintainNextPesponsible" placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 100%" :disabled="currentStep !== 3"> |
| | | <el-option v-for="(v, i) in users" :label="v.name" :value="v.name" :key="i"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.maintainOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.maintainDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <!-- ç»´ä¿®åç确认 --> |
| | | <div v-show="currentStepClick == 4"> |
| | | <el-card style="margin-top: 1em; height: 45vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="éªæ¶ãç¡®è®¤ãæ ¡åæ
åµ:" prop="checkCalSituation" label-width="200" |
| | | :rules="[{required: currentStep === 4, message: '请è¾å
¥éªæ¶ãç¡®è®¤ãæ ¡åæ
åµ', trigger: 'blur'}]"> |
| | | <el-input v-model="form.checkCalSituation" type="textarea" size="small" style="width: 100%" :disabled="currentStep !== 4"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.afterMaintenanceOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.afterMaintenanceDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="submitForm('3reject')" v-if="currentStep !== 0 && currentStep !== 5" |
| | | :loading="sumbitLoading1">驳å</el-button> |
| | | <el-button @click="submitForm('2save')" v-if="currentStep === 0" :loading="sumbitLoading2">ä¿å</el-button> |
| | | <el-button type="primary" v-if="currentStep !== 5" @click="submitForm('1submit')" :loading="sumbitLoading3"> |
| | | {{ currentStep === 0 ? 'æäº¤' : 'éè¿' }} |
| | | </el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | import {dateFormat} from '../../../util/date' |
| | | |
| | | export default { |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | search: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | processNumber: '' |
| | | }, |
| | | users: [], |
| | | currentStep: 0, |
| | | currentStepClick: 0, |
| | | steps: ['æäº¤', '设å¤ç®¡çåæè§', 'ææ¯è´è´£äººæè§', 'ç»´ä¿®æ
åµè®°å½', 'ç»´ä¿®åç确认'], |
| | | outLoading: false, |
| | | form: {}, |
| | | faultParam: [], |
| | | dialogVisible: false, |
| | | sumbitLoading1: false, |
| | | sumbitLoading2: false, |
| | | sumbitLoading3: false, |
| | | } |
| | | }, |
| | | computed: { |
| | | action() { |
| | | return this.javaApi + this.$api.personnel.saveCNASFile |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getTableList(this.clickNodeVal.value) |
| | | }, |
| | | methods: { |
| | | //è¦æ±ä¿®å¤æ¥æ:ç¦ç¨å¨æ
鿥æåçæ¥æ |
| | | disabledDate(time){ |
| | | let selectDate = this.form.faultDate |
| | | if(selectDate){ |
| | | let selectTime = new Date(selectDate).getTime() - 28800000 |
| | | return time < selectTime |
| | | } |
| | | return false |
| | | }, |
| | | //æäº¤è¡¨å |
| | | async submitForm(saveState) { |
| | | let currentStepAction; |
| | | // 设置该æä½å¤ææ¯å¦ä¸ºæäº¤ï¼ä¿åï¼é©³åï¼éè¿ å¼å¯loding |
| | | switch (saveState) { |
| | | // æäº¤ï¼éè¿ |
| | | case '1submit': |
| | | currentStepAction = this.currentStep + 1 |
| | | this.sumbitLoading1 = true |
| | | break |
| | | // ä¿å |
| | | case '2save': |
| | | currentStepAction = this.currentStep |
| | | this.sumbitLoading2 = true |
| | | break |
| | | // 驳å |
| | | case '3reject': |
| | | currentStepAction = this.currentStep - 1 |
| | | this.sumbitLoading3 = true |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid === true || saveState !== '1submit') { |
| | | // ç»å½åç¯è设置åå»ºäººä¸æ¶é´ |
| | | let user = JSON.parse(localStorage.getItem('user')) |
| | | const dateTime = dateFormat(new Date()) |
| | | // è·åå½åç¯èæä½äººä¸æ¥æ |
| | | switch (this.currentStep) { |
| | | case 0: |
| | | this.form.submitUser = user.name |
| | | this.form.submitOperatingPersonnel = user.name |
| | | this.form.submitDate = dateTime |
| | | break |
| | | case 1: |
| | | this.form.adminOperatingPersonnel = user.name |
| | | this.form.adminDate = dateTime |
| | | break |
| | | case 2: |
| | | this.form.technicalOperatingPersonnel = user.name |
| | | this.form.technicalDate = dateTime |
| | | break |
| | | case 3: |
| | | this.form.maintainOperatingPersonnel = user.name |
| | | this.form.maintainDate = dateTime |
| | | break |
| | | case 4: |
| | | this.form.afterMaintenanceOperatingPersonnel = user.name |
| | | this.form.afterMaintenanceDate = dateTime |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | // è·åå½åç¯èè´è´£äºº |
| | | switch (saveState === '3reject' ? this.currentStep - 1 : this.currentStep) { |
| | | case 0: |
| | | this.form.currentResponsible = this.form.submitOperatingPersonnel |
| | | break |
| | | case 1: |
| | | this.form.currentResponsible = this.form.departmentOperatingPersonnel |
| | | break |
| | | case 2: |
| | | this.form.currentResponsible = this.form.measuringRoomOperatingPersonnel |
| | | break |
| | | case 3: |
| | | this.form.currentResponsible = this.form.approvalOperatingPersonnel |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | // è·åå½åç¶æ |
| | | this.form.currentState = currentStepAction === 5 ? 'å
³é' : this.steps[currentStepAction] |
| | | this.form.deviceId = this.clickNodeVal.value |
| | | this.$axios.post(this.$api.deviceCheck.addOrUpdateDeviceFaultOne, this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æäº¤æå') |
| | | this.getTableList(this.clickNodeVal.value) |
| | | this.dialogVisible = false |
| | | } |
| | | this.closeLoading() |
| | | }) |
| | | } else { |
| | | let step = this.steps[this.currentStep] |
| | | this.$message.warning(step + ' æµç¨ä¸æå¿
填项æªå¡«ï¼'); |
| | | this.closeLoading() |
| | | } |
| | | }); |
| | | }, |
| | | closeLoading() { |
| | | this.sumbitLoading1 = false |
| | | this.sumbitLoading2 = false |
| | | this.sumbitLoading3 = false |
| | | }, |
| | | openRecordAcceptance() { |
| | | // è·å设å¤åºç¡ä¿¡æ¯ |
| | | this.$axios.get(this.$api.deviceScope.selectDeviceByCode + '?id=' + this.clickNodeVal.value).then(res => { |
| | | this.form.deviceName = res.data.deviceName |
| | | this.form.manufacturer = res.data.manufacturer |
| | | this.form.specificationModel = res.data.specificationModel |
| | | this.form.managementNumber = res.data.managementNumber |
| | | }); |
| | | // è·åè´è´£äººä¿¡æ¯ |
| | | this.getUserList() |
| | | }, |
| | | // è·åè´è´£äººä¿¡æ¯æ¥å£ |
| | | getUserList() { |
| | | this.$axios.get(this.$api.deviceScope.selectUserList).then(res => { |
| | | if (res.code == 200) { |
| | | this.users = res.data |
| | | } |
| | | }) |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.search.size = val |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.search.current = val |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | deleteFile() { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + this.form.systemFileName).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å 餿åï¼') |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | choiceStep(index) { |
| | | this.currentStepClick = index |
| | | }, |
| | | //ææ¡£ |
| | | handleSuccess(response, file, fileList) { |
| | | if (response.code == 200) { |
| | | this.form.fileName = response.data |
| | | this.$message.success('ä¸ä¼ æå') |
| | | } else { |
| | | this.$message.error(response.message) |
| | | } |
| | | }, |
| | | onError(error, file, fileList) { |
| | | // æä»¶ä¸ä¼ 失败æ¶çå¤çé»è¾ |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | beforeUpload(file) { |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload.clearFiles() |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }, |
| | | resetSearch() { |
| | | this.search = { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | processNumber: '', |
| | | } |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | //è·åææä¿¡æ¯ |
| | | getTableList(deviceId) { |
| | | this.$axios.get(this.$api.deviceCheck.deviceFaultOnePage + '?deviceId=' + deviceId + "&size=" + this.search.size + "¤t=" + this.search.current + "&processNumber=" + this.search.processNumber).then(res => { |
| | | if (res.code == 200) { |
| | | this.faultParam = res.data.records |
| | | this.search.total = res.data.total |
| | | } |
| | | }) |
| | | }, |
| | | //å¯¼åº |
| | | handleDown() { |
| | | this.outLoading = true |
| | | this.$axios.post(this.$api.deviceCheck.exportRewardAndPunishmentRecords, { |
| | | deviceId: this.clickNodeVal.value |
| | | }, {responseType: "blob"}).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], {type: 'application/octet-stream'}); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'è®¾å¤æ
é表.xlsx'; |
| | | link.click(); |
| | | }).finally(() => { |
| | | this.outLoading = false |
| | | }) |
| | | }, |
| | | selectAllByOne(row) { |
| | | this.dialogVisible = true; |
| | | this.formData = this.HaveJson(row); |
| | | }, |
| | | //æ·»å è®°å½æé® |
| | | addRecode() { |
| | | this.currentStep = 0; |
| | | this.currentStepClick = 0; |
| | | }, |
| | | //æ¥ç详æ
|
| | | showDetailsDialog(row) { |
| | | this.form = {...row} |
| | | this.currentStep = this.steps.indexOf(this.form.currentState) === -1 ? 5 : this.steps.indexOf(this.form.currentState) |
| | | this.currentStepClick = this.currentStep === 5 ? 0 : this.currentStep |
| | | this.$nextTick(() => { |
| | | this.$refs['form'].clearValidate() |
| | | }) |
| | | this.dialogVisible = true |
| | | }, |
| | | //å é¤æä½ |
| | | handleDeleteClick(index, row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteDeviceFaultOne + '?id=' + row.id).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å 餿å') |
| | | this.getTableList(this.clickNodeVal.value) |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getTableList(newVal.value); |
| | | } |
| | | }, |
| | | dialogVisible(newVal) { |
| | | if (!newVal) { |
| | | this.form = {} |
| | | this.closeLoading() |
| | | this.currentStep = 0 // æ¥éª¤æ¡æ¾ç¤ºç¬¬å æ¥ |
| | | this.currentStepClick = 0 // ç¹å»æ¥éª¤æ¡åå |
| | | this.$refs['form'].clearValidate() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | h4 { |
| | | font-weight: 400; |
| | | font-size: 16px; |
| | | /* display: flex; |
| | | justify-content: space-between; */ |
| | | margin: 10px 0; |
| | | } |
| | | |
| | | /* |
| | | ä¿åæäº¤æé®æ ·å¼ |
| | | */ |
| | | h4 .title { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | h4 .title .line { |
| | | display: inline-block; |
| | | width: 3px; |
| | | height: 16px; |
| | | background: #3A7BFA; |
| | | margin-right: 4px; |
| | | } |
| | | |
| | | .tables { |
| | | width: 100%; |
| | | height: calc(100vh - 230px); |
| | | } |
| | | |
| | | .el-from { |
| | | max-width: 400px; |
| | | margin: 0 auto; |
| | | } |
| | | |
| | | .form-row { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .dialogBottom { |
| | | margin-top: 14px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .form-operation { |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .form-item { |
| | | display: flex; |
| | | margin-right: 100px; |
| | | } |
| | | |
| | | .label { |
| | | margin-right: 20px; |
| | | line-height: 40px; |
| | | } |
| | | |
| | | .value { |
| | | font-weight: normal; |
| | | line-height: 40px; |
| | | } |
| | | |
| | | .form-row .el-form-item { |
| | | flex: 1; |
| | | /* æ¯ä¸ªè¡¨åé¡¹å æ®ç¸åæ¯ä¾çç©ºé´ */ |
| | | margin-right: 100px; |
| | | /* å¯éï¼ä¸ºå³ä¾§å
ç´ æ·»å é´è· */ |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 40px; |
| | | display: flex; |
| | | align-items: center; |
| | | position: relative; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | height: 40px; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 70px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 120px); |
| | | } |
| | | |
| | | .btns { |
| | | position: absolute; |
| | | right: 0px; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | } |
| | | |
| | | .form .search_label { |
| | | width: 120px; |
| | | } |
| | | </style> |
| | |
| | | <!-- è®¾å¤æ¡£æ¡ --> |
| | | <template> |
| | | <div class="page"> |
| | | <div class="page-header"> |
| | | <h4><span class="line"></span><span>è®¾å¤æ¡£æ¡</span></h4> |
| | | <div class="btns"> |
| | | <el-button type="primary" size="small" @click="dialogVisible=true" style="margin-right: 16px;">修订档æ¡</el-button> |
| | | <!-- <el-button type="primary" size="small">æ·»å éä»¶</el-button> --> |
| | | <el-upload |
| | | class="upload-demo" |
| | | :action="action" |
| | | :headers="headers" |
| | | :show-file-list="false" |
| | | :limit="1" |
| | | :before-upload="beforeUpload" |
| | | :on-success="handleSuccess" |
| | | ref="upload" |
| | | :on-error="onError"> |
| | | <el-button size="small" type="primary" :loading="inLoading">æ·»å éä»¶</el-button> |
| | | </el-upload> |
| | | <el-button type="primary" size="small" @click="openEditForm" |
| | | style="">修订档æ¡</el-button> |
| | | <el-button type="primary" size="small" @click="dialogVisible1 = true" |
| | | style="">æ·»å éä»¶</el-button> |
| | | <el-button type="primary" v-if="isPermission('showDeviceQrCodeButton')" size="small" @click="deviceDialog = true" |
| | | style="">æ¥ç设å¤äºç»´ç </el-button> |
| | | <el-button type="primary" size="small" @click="handleDownOne" |
| | | style="">导åº</el-button> |
| | | </div> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="6"> |
| | | <el-image src="" fit="fill" style="width: 200px;height: 300px;border: 1px solid #000;border-radius: 10px;margin-left: 30px;margin-top: 20px;"> |
| | | <div slot="error" class="image-slot"> |
| | | <i class="el-icon-picture-outline" style="font-size: 40px;"></i> |
| | | <div class="main_div"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="6"> |
| | | <!-- å æ¶é´æ³é¿å
æµè§å¨ç¼åé®é¢ --> |
| | | <el-image :src="`${javaApi}/img/${Mdata.imageUpload}`" fit="fill" :key="'personalPicture' + timeStamp" |
| | | style="width: 200px;height: 300px;border: 1px solid #000;border-radius: 10px;margin-left: 30px;margin-top: 20px;"> |
| | | <div slot="error" class="image-slot"> |
| | | <i class="el-icon-picture-outline" style="font-size: 40px;"></i> |
| | | </div> |
| | | </el-image> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <label>设å¤åç§°</label> |
| | | <!-- <p>{{ Mdata.deviceName }}</p> --> |
| | | <el-tooltip |
| | | class="item" |
| | | :content="Mdata.deviceName" |
| | | > |
| | | <span class="text-ellipsis" >{{ Mdata.deviceName }}</span> |
| | | </el-tooltip> |
| | | </div> |
| | | </el-image> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <label>设å¤åç§°</label> |
| | | <p>{{ handleData('æ«æçµé(带è½è°±)') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>大类</label> |
| | | <p>{{ handleData('åæä»ªå¨') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>å
é¨ç¼å·</label> |
| | | <p>{{ handleData('æ«æçµé(带è½è°±)') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>ç产åå®¶</label> |
| | | <p>{{ handleData('æ«æçµé(带è½è°±)') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>èµäº§ç¼ç </label> |
| | | <p>{{ handleData('æ«æçµé(带è½è°±)') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>åºåæ¥æ</label> |
| | | <p>{{ handleData('2024-7-20') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>å¯ç¨æ¥æ</label> |
| | | <p>{{ handleData('2024-7-20') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ ¸å卿(æ)</label> |
| | | <p>{{ handleData('12') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ£æµç±»å</label> |
| | | <p>{{ handleData('12') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ¥åºæ¶é´</label> |
| | | <p>{{ handleData('12') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>å确度éå¼</label> |
| | | <p>{{ handleData('12') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>被ææäºº</label> |
| | | <p>{{ handleData('12') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>维修记å½</label> |
| | | <p>{{ handleData('12') }}</p> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="10"> |
| | | <div class="form-item"> |
| | | <label>è§æ ¼åå·</label> |
| | | <p>{{ handleData('JSM-6010LA') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <div class="form-item"> |
| | | <label>设å¤ç±»å</label> |
| | | <p>{{ Mdata.largeCategory }}</p> |
| | | </div> |
| | | |
| | | <div class="form-item"> |
| | | <label>管çç¼å·</label> |
| | | <p>{{ Mdata.managementNumber }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æå±é¨é¨</label> |
| | | <p>{{ Mdata.laboratoryName }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>ç产åå®¶</label> |
| | | <!-- <p>{{ Mdata.manufacturer }}</p> --> |
| | | <el-tooltip |
| | | class="item" |
| | | :content="Mdata.manufacturer" |
| | | > |
| | | <span class="text-ellipsis" >{{ Mdata.manufacturer }}</span> |
| | | </el-tooltip> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>èµäº§ç¼ç </label> |
| | | <p class="text-ellipsis">{{ Mdata.assetCode }}</p> |
| | | </div> |
| | | |
| | | <div class="form-item"> |
| | | <label>åºåæ¥æ</label> |
| | | <p>{{ Mdata.acquisitionDate | formaterDateTime }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>å¯ç¨æ¥æ</label> |
| | | <p>{{ Mdata.activationDate | formaterDateTime }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ ¸å卿(æ)</label> |
| | | <p>{{ Mdata.calibrationDate }}</p> |
| | | </div> |
| | | |
| | | <div class="form-item"> |
| | | <label>æ¥åºæ¶é´</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>å确度éå¼</label> |
| | | <el-tooltip |
| | | class="item" |
| | | :content="Mdata.technicalIndicators" |
| | | > |
| | | <span class="text-ellipsis">{{ Mdata.technicalIndicators }}</span> |
| | | </el-tooltip> |
| | | <!-- <p>{{ Mdata.technicalIndicators }}</p> --> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>维修记å½</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>被ææäºº</label> |
| | | <p>{{ Mdata.authorizedPersonName }}</p> |
| | | </div> |
| | | |
| | | </el-col> |
| | | <el-col :span="10"> |
| | | <div class="form-item"> |
| | | <label>è§æ ¼åå·</label> |
| | | <p>{{ Mdata.specificationModel }}</p> |
| | | </div> |
| | | <!-- <div class="form-item"> |
| | | <label>ç»ç±»</label> |
| | | <p>{{ handleData('åæä»ªå¨') }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>设å¤ç¶æ</label> |
| | | <el-radio-group v-model="form.value1" disabled> |
| | | <el-radio :label="0" style="width: 40px;">åæ ¼</el-radio> |
| | | <el-radio :label="1" style="width: 40px;">ç»´ä¿®</el-radio> |
| | | <el-radio :label="2" style="width: 40px;">åç¨</el-radio> |
| | | <el-radio :label="3" style="width: 40px;">æ¥åº</el-radio> |
| | | </el-radio-group> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>åºåç¼å·</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>åæ¾ç¹</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>è´ç½®æ¥æ</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>产å°</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æè¿æº¯æºæ¥æ</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>éè´è´¹ç¨(å
)</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>åç¨æ¶é´</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>设å¤è´è´£äºº</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>éªæ¶è®°å½</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ ¸åè¯ä¹¦</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <h4 style="margin-bottom: 10px;margin-top: 10px;"><span class="line"></span><span>éä»¶åç¸å
³ææ¡£</span></h4> |
| | | <div class="tables"> |
| | | <ValueTable ref="ValueTable" |
| | | :url="$api.auxiliaryWorkingHoursDay.selectAuxiliaryWorkingHoursDay" |
| | | :delUrl="$api.auxiliaryWorkingHoursDay.deleteAuxiliaryWorkingHoursDay" :componentData="componentData" :key="upIndex" style="min-height: 400px;"/> |
| | | </div> --> |
| | | <div class="form-item"> |
| | | <label>åºåç¼å·</label> |
| | | <p>{{ Mdata.factoryNo }}</p> |
| | | </div> |
| | | <div class="form-items"> |
| | | <label>设å¤ç¶æ</label> |
| | | <el-radio-group v-model="Mdata.deviceStatus" style="margin-left: 10px;"> |
| | | <el-radio :label="0" :disabled="Mdata.deviceStatus != 0">æ£å¸¸</el-radio> |
| | | <el-radio :label="1" :disabled="Mdata.deviceStatus != 1">ç»´ä¿®</el-radio> |
| | | <el-radio :label="2" :disabled="Mdata.deviceStatus != 2">åç¨</el-radio> |
| | | <el-radio :label="3" :disabled="Mdata.deviceStatus != 3">æ¥åº</el-radio> |
| | | </el-radio-group> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>åæ¾ç¹</label> |
| | | <p>{{ Mdata.storagePoint }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>产å°</label> |
| | | <p>{{ Mdata.origin }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ£éªé¡¹</label> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="Mdata.insProductItem" |
| | | placement="top" |
| | | > |
| | | <span class="text-ellipsis" >{{ Mdata.insProductItem }}</span> |
| | | </el-tooltip> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>è´ç½®æ¥æ</label> |
| | | <p>{{ Mdata.acquisitionDate | formaterDateTime }}</p> |
| | | </div> |
| | | |
| | | <div class="form-item"> |
| | | <label>æè¿æº¯æºæ¥æ</label> |
| | | <p>{{ Mdata.lastCalibrationDate | formaterDateTime }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>éè´è´¹ç¨(å
)</label> |
| | | <p>{{ Mdata.unitPrice }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>åç¨æ¶é´</label> |
| | | <p>{{ Mdata.nextCalibrationDate | formaterDateTime }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>设å¤è´è´£äºº</label> |
| | | <p>{{ Mdata.equipmentManagerName }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>éªæ¶è®°å½</label> |
| | | <p>{{ handleData() }}</p> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ ¸åè¯ä¹¦</label> |
| | | <p>{{ Mdata.calibrateNo }}</p> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <h4 style="margin-bottom: 10px;margin-top: 10px;"><span class="line"></span><span>éä»¶åç¸å
³ææ¡£</span></h4> |
| | | <el-table height="200px" :data="tableDataA"> |
| | | <el-table-column header-align="center" align="center" prop="prop" label="åºå·" type="index" width="60" /> |
| | | <el-table-column prop="documentType" label="ç±»å" min-width="100"> |
| | | <template v-slot="scope"> |
| | | {{ scope.row.documentType === '0' ? 'éä»¶' : scope.row.documentType === '1' ? 'ææ¡£' : '' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="name" label="åç§°" min-width="150" /> |
| | | <el-table-column prop="number" label="ç¼å·" min-width="150" /> |
| | | <el-table-column prop="version" label="çæ¬" min-width="80" /> |
| | | <el-table-column prop="quantity" label="份æ°" min-width="80" /> |
| | | <el-table-column prop="pageCount" label="页ç " min-width="80" /> |
| | | <el-table-column prop="provider" label="æä¾è
" min-width="150" /> |
| | | <el-table-column prop="provideDate" label="æä¾æ¥æ" min-width="150" /> |
| | | <el-table-column prop="comments" label="夿³¨" min-width="150" /> |
| | | <el-table-column fixed="right" label="æä½" min-width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" size="small" @click="handleAttachmentClick(scope.row)">ä¸è½½éä»¶</el-button> |
| | | <el-button type="text" size="small" @click="handleViewClick(scope.row)">æ¥ç</el-button> |
| | | <el-button type="text" size="small" @click="handleDeleteClick(scope.row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <el-dialog title="æ¡£æ¡ä¿®è®¢" :visible.sync="dialogVisible" width="70%" :before-close="handleClose"> |
| | | <el-row style="display:flex;justify-content: space-around;"> |
| | | <!-- 左边å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-col> |
| | | <!-- å¾ç --> |
| | | <el-image class="img" style="width:100%;height: 320px;marginBottom:16px" |
| | | :src="javaApi+'/img/'+formData.imageUpload"> |
| | | <div slot="error" class="image-error" style="width: calc(100% -2px); |
| | | <!-- 修订 --> |
| | | <el-dialog title="修订档æ¡" top="5vh" :visible.sync="dialogVisible" width="70%" @open="openFileRevisionDialog" |
| | | :before-close="handleClose"> |
| | | <el-row style="display:flex;justify-content: space-around;"> |
| | | <!-- 左边å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-col> |
| | | <!-- å¾ç --> |
| | | <el-image class="img" style="width:100%;height: 320px;margin-bottom:16px" |
| | | :src="javaApi + '/img/' + editData.imageUpload"> |
| | | <div slot="error" class="image-error" style="width: calc(100% -2px); |
| | | height: 318px; |
| | | border-radius: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border: 1px solid #EEEEEE;"> |
| | | <i class="el-icon-picture-outline" style="font-size:60px;color:#666666;"></i> |
| | | </div> |
| | | </el-image> |
| | | <!-- 表å --> |
| | | <el-form :model="formData" label-width="120px"> |
| | | <el-form-item label="仪å¨åç§°:" required> |
| | | <el-input v-model="formData.deviceName" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="仪å¨åç§°EN:" required> |
| | | <el-input v-model="formData.enDeviceName" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="è§æ ¼åå·:" required> |
| | | <el-input v-model="formData.specificationModel" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç产åå®¶:"> |
| | | <el-input v-model="formData.manufacturer" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | </el-col> |
| | | <!-- ä¸é´å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-form :model="formData" label-width="116px"> |
| | | <el-form-item label="æ ¡åæå¡æºæ:"> |
| | | <el-input v-model="formData.calibrationServices" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="åºåç¼å·:"> |
| | | <el-input v-model="formData.factoryNo" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="管çç¼å·:" required> |
| | | <el-input v-model="formData.managementNumber" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="è´ç½®æ¥æ:"> |
| | | <el-date-picker style="width:100%" v-model="formData.acquisitionDate" type="date" |
| | | format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="å¯ç¨æ¥æ:" required> |
| | | <el-date-picker style="width:100%" v-model="formData.activationDate" type="date" |
| | | format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="管ç人:"> |
| | | <el-select v-model="formData.equipmentManager" placeholder="è¯·éæ©" size="small" style="width:100%"> |
| | | <el-option v-for="item in responsiblePersonList" :key="item.value" :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="åæ¾ç¹:"> |
| | | <el-input v-model="formData.storagePoint" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ææ¯ææ :"> |
| | | <el-input v-model="formData.technicalIndicators" :rows="7" type="textarea" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | <!-- å³è¾¹å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-form :model="formData" label-width="140px" ref="ruleForm"> |
| | | <i class="el-icon-picture-outline" style="font-size:60px;color:#666666;"></i> |
| | | </div> |
| | | </el-image> |
| | | <!-- 表å --> |
| | | <el-form :model="editData" label-width="120px" ref="rules1" :rules="rules1"> |
| | | <el-form-item label="仪å¨åç§°:" prop="deviceName"> |
| | | <el-input v-model="editData.deviceName" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="仪å¨åç§°EN:" prop="enDeviceName"> |
| | | <el-input v-model="editData.enDeviceName" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="è§æ ¼åå·:" prop="specificationModel"> |
| | | <el-input v-model="editData.specificationModel" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç产åå®¶:"> |
| | | <el-input v-model="editData.manufacturer" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | </el-col> |
| | | <!-- ä¸é´å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-form :model="editData" label-width="116px" ref="rules2" :rules="rules1"> |
| | | <el-form-item label="æ ¡åæå¡æºæ:"> |
| | | <el-input v-model="editData.calibrationServices" disabled size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="èµäº§ç¼ç :"> |
| | | <el-input v-model="editData.assetCode" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="产å°:"> |
| | | <el-input v-model="editData.origin" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="åºåç¼å·:"> |
| | | <el-input v-model="editData.factoryNo" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="管çç¼å·:" prop="managementNumber"> |
| | | <el-input v-model="editData.managementNumber" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="è´ç½®æ¥æ:"> |
| | | <el-date-picker style="width:100%" v-model="editData.acquisitionDate" type="date" format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="å¯ç¨æ¥æ:" prop="activationDate"> |
| | | <el-date-picker style="width:100%" v-model="editData.activationDate" type="date" format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="è´è´£äºº:"> |
| | | <el-select v-model="editData.equipmentManager" placeholder="è¯·éæ©" size="small" style="width:100%"> |
| | | <el-option v-for="item in responsiblePersonList" :key="item.name" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="åæ¾ç¹:"> |
| | | <el-input v-model="editData.storagePoint" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ææ¯ææ :"> |
| | | <el-input v-model="editData.technicalIndicators" :rows="7" type="textarea" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | <!-- å³è¾¹å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-form :model="editData" label-width="140px" ref="ruleForm" :rules="rules1"> |
| | | <!-- å®éªå®¤å表 --> |
| | | <el-form-item label="æå±é¨é¨:"> |
| | | <el-select v-model="formData.subordinateDepartmentsId" placeholder="è¯·éæ©" size="small" style="width:100%"> |
| | | <el-select v-model="editData.subordinateDepartmentsId" placeholder="è¯·éæ©" size="small" style="width:100%"> |
| | | <el-option v-for="item in subordinateDepartmentsList" :key="item.value" :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ£æµé¡¹ç®:"> |
| | | <el-cascader |
| | | v-model="formData.insProductIds" |
| | | :options="options" |
| | | :show-all-levels="false" |
| | | :props="props" |
| | | placeholder="è¯·éæ©" size="small" |
| | | style="width:100%;" |
| | | :collapse-tags="true" |
| | | separator="," |
| | | filterable |
| | | clearable></el-cascader> |
| | | <el-cascader v-model="editData.insProductIds" :options="options" :show-all-levels="false" :props="props" |
| | | placeholder="è¯·éæ©" size="small" style="width:100%;" :collapse-tags="true" separator="," filterable |
| | | clearable></el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="æè¿æ ¡åæ¥æ:"> |
| | | <el-date-picker style="width:100%" v-model="formData.latestTraceability" format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" type="date" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="䏿¬¡æ ¡åæ¥æ:"> |
| | | <el-date-picker style="width:100%" v-model="formData.latestTraceability" format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" type="date" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <!-- <el-form-item label="æè¿æ ¡åæ¥æ:"> |
| | | <el-date-picker style="width:100%" v-model="Mdata.latestTraceability" format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" type="date" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> --> |
| | | <!-- <el-form-item label="䏿¬¡æ ¡åæ¥æ:"> |
| | | <el-date-picker style="width:100%" v-model="Mdata.nextCalibrationDate" format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd HH:mm:ss" type="date" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> --> |
| | | <el-form-item label="设å¤ç±»å:"> |
| | | <el-select v-model="formData.largeCategory" placeholder="è¯·éæ©" size="small" style="width:100%"> |
| | | <el-option v-for="item in equipmentList" :key="item.value" :label="item.label" |
| | | :value="item.value"> |
| | | <el-select v-model="editData.largeCategory" placeholder="è¯·éæ©" size="small" style="width:100%"> |
| | | <el-option v-for="item in equipmentList" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="åä»·(ä¸å
):"> |
| | | <el-input v-model="formData.unitPrice" size="small"></el-input> |
| | | <el-input v-model="editData.unitPrice" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å½åç¶æ:" required> |
| | | <el-select v-model="formData.deviceStatus" placeholder="è¯·éæ©" size="small" style="width:100%"> |
| | | <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ ¡åå¨æï¼æï¼:" required> |
| | | <el-input v-model="formData.calibrationDate" size="small"></el-input> |
| | | <el-form-item label="å½åç¶æ:" prop="deviceStatus"> |
| | | <el-select v-model="editData.deviceStatus" placeholder="è¯·éæ©" size="small" style="width:100%"> |
| | | <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å¾ç:"> |
| | | <div |
| | | style="border: 1px solid #DCDFE6;border-radius:4px;height:32px;lineHeight:32px;display:flex;justify-content: space-around;font-size: 13px;"> |
| | | <div v-show="formData.imageName" class="picName">{{formData.imageName}}</div> |
| | | <el-upload :action="action" :on-success="handleSuccessUpImg2" :show-file-list="false" |
| | | accept='image/jpg,image/jpeg,image/png' :headers="headers" :on-change="beforeUpload" |
| | | :on-error="onError" ref='upload'> |
| | | <el-button type="text" style="height:30px;padding-top:8px">ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </div> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | </el-row> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-row> |
| | | <el-button @click="handleClose">å æ¶</el-button> |
| | | <el-button type="primary" @click="submitForm" :loading="upLoad">ç¡® å®</el-button> |
| | | </el-row> |
| | | </span> |
| | | </el-dialog> |
| | | <el-form-item label="æ ¡åå¨æï¼æï¼:" prop="calibrationDate"> |
| | | <el-input v-model="editData.calibrationDate" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="被ææäºº:"> |
| | | <el-select v-model="editData.authorizedPerson" multiple placeholder="è¯·éæ©" size="small" style="width:100%"> |
| | | <el-option v-for="item in responsiblePersonList" :key="item.name" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="å¾ç:"> |
| | | <!-- <div |
| | | style="border: 1px solid #DCDFE6;border-radius:4px;height:32px;lineHeight:32px;display:flex;justify-content: space-around;font-size: 13px;"> |
| | | <div v-show="Mdata.imageName" class="picName">{{ Mdata.imageName }}</div> |
| | | <el-upload :action="action" :on-success="handleSuccessUpImg2" :show-file-list="false" |
| | | accept='image/jpg,image/jpeg,image/png' :headers="headers" :on-change="beforeUpload" |
| | | :on-error="onError" ref='upload'> |
| | | <el-button type="text" style="height:30px;padding-top:8px"><span v-if="Mdata.imageName"></span></el-button> |
| | | </el-upload> |
| | | </div> --> |
| | | |
| | | <div> |
| | | <div v-show="editData.imageName" class="picName">{{ editData.imageName }}</div> |
| | | <el-upload :action="action" :on-success="handleSuccessUpImg2" :show-file-list="false" |
| | | accept='image/jpg,image/jpeg,image/png' :headers="headers" :on-change="beforeUpload" |
| | | :on-error="onError" ref='upload' class="avatar-uploader" |
| | | > |
| | | <img v-if="editData.imageUpload" :src="javaApi + '/img/' + editData.imageUpload" class="avatar"> |
| | | <i v-else class="el-icon-plus avatar-uploader-icon"></i> |
| | | </el-upload> |
| | | </div> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | </el-row> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-row> |
| | | <el-button @click="handleClose">å æ¶</el-button> |
| | | <el-button type="primary" @click="submitForm" :loading="upLoad">ç¡® å®</el-button> |
| | | </el-row> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="æ·»å 设å¤éä»¶" top="5vh" v-if="dialogVisible1" :visible.sync="dialogVisible1" width="40%"> |
| | | <el-form ref="form" :model="addFile" label-width="120px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç»´æ¤ç±»åï¼"> |
| | | <el-radio-group v-model="addFile.documentType"> |
| | | <el-radio :label="0">éä»¶</el-radio> |
| | | <el-radio :label="1">ææ¡£</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¡£æ¡åç§°ï¼"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="addFile.name"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="åºå·/èµäº§ç¼å·:"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="addFile.number"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="çæ¬ï¼"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="addFile.version"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="份æ°ï¼"> |
| | | <el-input-number v-model="addFile.quantity" controls-position="right" style="width: 100%;" size="small" |
| | | :min="0" :max="10"></el-input-number> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="页ç ï¼"> |
| | | <el-input-number v-model="addFile.pageCount" controls-position="right" style="width: 100%;" size="small" |
| | | :min="0" :max="10"></el-input-number> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æä¾è
ï¼"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="addFile.provider"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="彿¡£æ¥æï¼"> |
| | | <el-date-picker type="date" style="width:100%" placeholder="è¯·éæ©æ¥æ" size="small" v-model="addFile.archiveDate" |
| | | format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="夿³¨ï¼"> |
| | | <el-input type="textarea" :rows="2" size="small" v-model="addFile.comments"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="éä»¶ï¼" style="float: left;"> |
| | | <el-upload class="upload-demo" :action="action" :headers="headers" ref="uploadFile" :on-error="onError" |
| | | :on-remove="handleRemove" :on-success="onSuccess" :before-remove="beforeRemove" multiple :limit="1" |
| | | :on-exceed="handleExceed" :file-list="fileList"> |
| | | <el-button size="small" type="primary">ç¹å»ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-row> |
| | | <el-button @click="dialogVisible1 = false" size="small">å æ¶</el-button> |
| | | <el-button type="primary" @click="saveRecord" size="small" :loading="isLoading">{{ isAddFileUpdate == true ? |
| | | 'æ´æ°' : |
| | | 'ç¡® å®' }}</el-button> |
| | | </el-row> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="设å¤äºç»´ç " |
| | | :visible.sync="deviceDialog" |
| | | top="5vh" |
| | | width="30%"> |
| | | <div style="width:90%;text-align: right;"> |
| | | <el-button type="primary" size="mini" @click="clickGeneratePicture">ä¸è½½å¾ç</el-button> |
| | | <el-button type="primary" size="mini" @click="labelPrint">æ ç¾æå°</el-button> |
| | | </div> |
| | | <div class="device-main" ref="deviceQrCode" id="deviceCode"> |
| | | <div class="device-center" > |
| | | <p class="device-title">{{Mdata.deviceName}}</p> |
| | | <div class="device-footer"> |
| | | <div> |
| | | <vueQr class="qr-code" :text="'https://zttx-lims.ztt.cn:8021/lims/qr/qrScan?code='+Mdata.managementNumber+'&type=device'" :size="200" :margin="10"></vueQr> |
| | | </div> |
| | | <div class="device-number"> |
| | | <span class="device-text">设å¤ç¼ç :</span> |
| | | <span class="device-text">{{Mdata.managementNumber}}</span> |
| | | </div> |
| | | <div class="device-name"> |
| | | <span class="device-text">设å¤åå·:</span> |
| | | <span class="device-text">{{Mdata.specificationModel}}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { MessageBox } from 'element-ui' |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | import fileDownload from '../../../util/file' |
| | | import vueQr from 'vue-qr' |
| | | import PrintJS from 'print-js' |
| | | import domtoimage from 'dom-to-image'; |
| | | import {isPermission} from '../../../util/auth' |
| | | export default { |
| | | components: { |
| | | ValueTable |
| | | filters:{ |
| | | formaterDateTime(dateTime){ |
| | | if(dateTime === undefined || dateTime === null || dateTime === ''){ |
| | | return dateTime |
| | | } |
| | | return dateTime.split(" ")[0] |
| | | } |
| | | }, |
| | | data(){ |
| | | return{ |
| | | componentData: { |
| | | entity: { |
| | | week: null, |
| | | weekDay: null, |
| | | dateTime: null, |
| | | name:null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | isPage:false, |
| | | do: [{ |
| | | id: 'getFile', |
| | | font: 'éä»¶', |
| | | type: 'text', |
| | | method: 'getFile' |
| | | }, { |
| | | id: 'handleLook', |
| | | font: 'æ¥ç', |
| | | type: 'text', |
| | | method: 'handleLook' |
| | | },{ |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy', |
| | | disabFun: (row, index) => { |
| | | return row.state === 'å·²å®¡æ ¸' || row.state === 'å·²æ¹å' |
| | | } |
| | | }], |
| | | tagField: { |
| | | shift:{ |
| | | select:[] |
| | | }, |
| | | state:{ |
| | | select:[ |
| | | { |
| | | label:'å·²æäº¤', |
| | | value:'å·²æäº¤', |
| | | type:'primary' |
| | | }, |
| | | { |
| | | label:'å·²å®¡æ ¸', |
| | | value:'å·²å®¡æ ¸', |
| | | type:'warning' |
| | | }, |
| | | { |
| | | label:'å·²æ¹å', |
| | | value:'å·²æ¹å', |
| | | type:'success' |
| | | }, |
| | | ] |
| | | }, |
| | | weekDay:{ |
| | | select:[] |
| | | } |
| | | }, |
| | | linkEvent: {}, |
| | | selectField: { |
| | | shift:{ |
| | | select:[] |
| | | }, |
| | | state:{ |
| | | select:[ |
| | | { |
| | | label:'å·²æäº¤', |
| | | value:'å·²æäº¤', |
| | | type:'primary' |
| | | }, |
| | | { |
| | | label:'å·²å®¡æ ¸', |
| | | value:'å·²å®¡æ ¸', |
| | | type:'warning' |
| | | }, |
| | | { |
| | | label:'å·²æ¹å', |
| | | value:'å·²æ¹å', |
| | | type:'success' |
| | | }, |
| | | ] |
| | | }, |
| | | weekDay:{ |
| | | select:[] |
| | | } |
| | | }, |
| | | requiredAdd: [], |
| | | requiredUp: [] |
| | | }, |
| | | upIndex:0, |
| | | dialogVisible:false, |
| | | inLoading:false, |
| | | form: { |
| | | value1:'' |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | components: { |
| | | ValueTable, |
| | | vueQr |
| | | }, |
| | | data() { |
| | | return { |
| | | isPermission:isPermission, |
| | | deviceDialog: false,//æ¥ç设å¤äºç»´ç å¼¹æ¡ |
| | | rules1: { |
| | | deviceName: [ |
| | | { required: true, message: '请è¾å
¥ä»ªå¨åç§°', trigger: 'blur' }, |
| | | ], |
| | | enDeviceName: [ |
| | | { required: true, message: '请è¾å
¥ä»ªå¨åç§°EN', trigger: 'blur' }, |
| | | ], |
| | | specificationModel: [ |
| | | { required: true, message: '请è¾å
¥è§æ ¼åå·', trigger: 'blur' }, |
| | | ], |
| | | managementNumber: [ |
| | | { required: true, message: '请è¾å
¥ç®¡çç¼å·', trigger: 'blur' }, |
| | | ], |
| | | activationDate: [ |
| | | { required: true, message: '请è¾å
¥å¯ç¨æ¥æ', trigger: 'blur' }, |
| | | ], |
| | | deviceStatus: [ |
| | | { required: true, message: '请è¾å
¥å½åç¶æ', trigger: 'blur' }, |
| | | ], |
| | | calibrationDate: [ |
| | | { required: true, message: '请è¾å
¥æ ¡å卿(æ)', trigger: 'blur' }, |
| | | ], |
| | | }, |
| | | upLoad:false, |
| | | formData:{}, |
| | | responsiblePersonList:[], |
| | | subordinateDepartmentsList:[], |
| | | options:[], |
| | | equipmentList:[], |
| | | deviceStatusList:[], |
| | | props: { multiple: true,emitPath:false,value:'id',label:'name' }, |
| | | // dateForm: { |
| | | |
| | | // }, |
| | | fileList: [], // æ·»å éä»¶ä¸ä¼ æä»¶å表 |
| | | timeStamp: '', // ç»å¾çæ·»å keyï¼å¨æ¯æ¬¡å 载页é¢çæ¶åæ°å»ºæ¶é´æ³ |
| | | equipmentManager: [], |
| | | formLabelWidth: '100px', |
| | | dialogVisible1: false, |
| | | recordNumber: '', |
| | | inLoading: false, // æ§å¶ä¸ä¼ æé®å è½½ç¶æ |
| | | isLoading: false, // æ§å¶ç¡®å®æé®å è½½ç¶æ |
| | | formData: {}, |
| | | tableDataA: [], |
| | | num: 1, |
| | | //æ·»å éä»¶æ°æ®æ¶é |
| | | addFile: { |
| | | documentType: '', // ç»´æ¤ç±»å |
| | | archiveDate: null, // 彿¡£æ¥æ |
| | | name: '', // æ¡£æ¡åç§° |
| | | number: '', // åºå·/èµäº§ç¼å· |
| | | version: '', // çæ¬ |
| | | quantity: 1, // ä»½æ° |
| | | pageCount: 1, // 页ç |
| | | provider: '', // æä¾è
|
| | | comments: "", // 夿³¨ |
| | | fileName: "", // æä»¶ååç§° |
| | | systemFileName: "", // ç³»ç»çæåç§° |
| | | }, |
| | | componentData: { |
| | | entity: { name: "", orderBy: { field: "id", order: "asc" } }, |
| | | page: { current: "1", size: "80" } |
| | | }, |
| | | upIndex: 0, |
| | | dialogVisible: false, |
| | | dialogVisible1: false, |
| | | inLoading: false, |
| | | upLoad: false, |
| | | responsiblePersonList: [], |
| | | subordinateDepartmentsList: [], |
| | | options: [], |
| | | equipmentList: [], |
| | | deviceStatusList: [], |
| | | props: { multiple: true, emitPath: false, value: 'id', label: 'name' }, |
| | | // æ¶éè®¾å¤æ¡£æ¡æ°æ® |
| | | Mdata: { |
| | | deviceName: null |
| | | }, |
| | | isAddFileUpdate: false, |
| | | editData: { |
| | | authorizedPerson: [], |
| | | }, |
| | | } |
| | | }, |
| | | computed: { |
| | |
| | | return this.javaApi + this.$api.deviceScope.uploadFile |
| | | } |
| | | }, |
| | | mounted(){ |
| | | this.selectDevicePrincipal() |
| | | this.obtainItemParameterList() |
| | | this.getInsProductIds() |
| | | this.selectEnumByCategory() |
| | | mounted() { |
| | | // æ¶éæ°æ® |
| | | this.getList(this.clickNodeVal.value) |
| | | // è·åç¸å
³ææ¡£çæ°æ® |
| | | this.getPage() |
| | | this.timeStamp = Date.now() |
| | | }, |
| | | methods: { |
| | | handleData(m){ |
| | | if(m){ |
| | | /** |
| | | * å°é¡µé¢æå®èç¹å
容转为å¾ç |
| | | * 1.æ¿å°æ³è¦è½¬æ¢ä¸ºå¾ççå
容èç¹DOMï¼ |
| | | * 2.转æ¢ï¼æ¿å°è½¬æ¢åçcanvas |
| | | * 3.转æ¢ä¸ºå¾ç |
| | | */ |
| | | clickGeneratePicture() { |
| | | const _than = this |
| | | domtoimage.toPng(_than.$refs.deviceQrCode,{ quality: 1,width:440,}).then(function (dataUrl) { |
| | | // å°è½¬æ¢åçå¾åæ°æ®åå¨ä¸º data URL |
| | | fileDownload.downloadIamge(dataUrl,_than.Mdata.deviceName) |
| | | }); |
| | | }, |
| | | //æå°è®¾å¤äºç»´ç |
| | | labelPrint(){ |
| | | PrintJS({ |
| | | printable: 'deviceCode',//é¡µé¢ |
| | | type: "html",//ææ¡£ç±»å |
| | | maxWidth:360, |
| | | css: ['/static/css/device-print.css'], |
| | | style: '@page { size: auto; margin: 0mm;}', |
| | | targetStyles: ["*"], // 使ç¨domçæææ ·å¼ï¼å¾éè¦ |
| | | }); |
| | | }, |
| | | openFileRevisionDialog() { |
| | | // è·åæ¡£æ¡ä¿®è®¢è´è´£äººä¸ææ¡æ°æ® |
| | | this.selectDevicePrincipal() |
| | | // è·åæ¡£æ¡ä¿®è®¢æå±é¨é¨ä¸ææ¡æ°æ® |
| | | this.obtainItemParameterList() |
| | | // è·åæ¡£æ¡ä¿®è®¢è®¾å¤ç¶æä¸ææ¡æ°æ® |
| | | this.selectEnumByCategory() |
| | | // è·åæ¡£æ¡ä¿®è®¢æ£éªé¡¹ç®çº§èå¼¹æ¡æ°æ® |
| | | this.getInsProductIds() |
| | | }, |
| | | //éä»¶åç¸å
³ææ¡£äºä»¶ |
| | | handleAttachmentClick(row) { |
| | | console.log(row) |
| | | if (row.fileName && row.documentType == 0) { |
| | | const fileUrl = this.javaApi + '/img/' + row.fileName; |
| | | fileDownload.downloadIamge(fileUrl, row.systemFileName) |
| | | } else if (row.fileName && row.documentType == 1) { |
| | | const url = this.javaApi+'/word/'+ row.fileName |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = row.fileName; |
| | | link.click(); |
| | | this.$message.success('ä¸è½½æå') |
| | | } else { |
| | | this.$message.warning('æªä¸ä¼ æä»¶ï¼') |
| | | } |
| | | }, |
| | | handleViewClick(row) { |
| | | this.isAddFileUpdate = true |
| | | this.addFile = { ...row } |
| | | this.dialogVisible1 = true |
| | | if (row.fileName) { |
| | | const obj = Object.assign({ |
| | | name: row.fileName, |
| | | url: row.fileName, |
| | | status: 'success', |
| | | uid: Date.now(), |
| | | }) |
| | | this.fileList.push(obj) |
| | | } |
| | | }, |
| | | handleDeleteClick(row) { |
| | | // å é¤é»è¾ |
| | | MessageBox.confirm('ç¡®å®è¦å é¤è¯¥è®°å½åï¼', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning', |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.getDocuments.list + "/" + row.id).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å 餿å') |
| | | this.getPage() |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$message.info('已忶å é¤') |
| | | }) |
| | | }, |
| | | saveRecord() { |
| | | //è½¬æ¢æ°æ® |
| | | this.addFile.deviceId = this.clickNodeVal.value |
| | | let obj= this.addFile.systemFileName |
| | | this.addFile.systemFileName = obj.name |
| | | this.addFile.fileName = obj.url |
| | | |
| | | // æ´æ° |
| | | if (this.isAddFileUpdate) { |
| | | this.$axios.put(this.$api.getDocuments.updateDocument, this.addFile, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ´æ°æå') |
| | | this.dialogVisible1 = false; |
| | | this.getPage() |
| | | } |
| | | }) |
| | | } else { |
| | | // æ°å¢ |
| | | this.$axios.post(this.$api.getDocuments.list, this.addFile).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('ä¿åæå') |
| | | this.dialogVisible1 = false; |
| | | this.getPage() |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | onSuccess(response, file, fileList) { |
| | | if (response.code == 200) { |
| | | this.addFile.systemFileName = response.data |
| | | this.addFile.fileName = file.name |
| | | } else { |
| | | this.$refs.uploadFile.clearFiles() |
| | | this.$message.error('ä¸ä¼ 失败ï¼' + response.message) |
| | | } |
| | | }, |
| | | handleRemove(file, fileList) { |
| | | this.deleteFile(this.addFile.systemFileName) |
| | | }, |
| | | deleteFile(fileName) { |
| | | this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + fileName).then(res => { |
| | | this.$message.success('å 餿åï¼') |
| | | }) |
| | | }, |
| | | handleExceed(files, fileList) { |
| | | this.$message.warning(`å½åéå¶éæ© 1 个æä»¶ï¼æ¬æ¬¡éæ©äº ${files.length} 个æä»¶ï¼å
±éæ©äº ${files.length + fileList.length} 个æä»¶`); |
| | | }, |
| | | beforeRemove(file, fileList) { |
| | | return this.$confirm(`ç¡®å®ç§»é¤ ${file.name}ï¼`); |
| | | }, |
| | | // è·åç¸å
³ææ¡£æ°æ®çapi |
| | | getPage() { |
| | | this.$axios.get(this.$api.getDocuments.get + "/" + this.clickNodeVal.value).then(res => { |
| | | if (res.code == 200) |
| | | this.tableDataA = res.data |
| | | }) |
| | | }, |
| | | // æ¶éæ°æ® |
| | | getList(id) { |
| | | this.$axios |
| | | .get( |
| | | this.$api.deviceScope.selectDeviceByCode + "?id=" + id) |
| | | .then(res => { |
| | | // å°åç±»å表çä¿¡æ¯åèµ·æ¥ |
| | | if (res.code == 200) { |
| | | this.Mdata = res.data; |
| | | this.Mdata.insProductIds = this.Mdata.insProductIds.split(',') |
| | | this.Mdata.authorizedPerson = JSON.parse(this.Mdata.authorizedPerson) |
| | | } |
| | | }); |
| | | }, |
| | | handleData(m) { |
| | | if (m) { |
| | | return m |
| | | }else{ |
| | | } else { |
| | | return '-' |
| | | } |
| | | }, |
| | | handleClose(){ |
| | | handleClose() { |
| | | this.dialogVisible = false |
| | | }, |
| | | handleSuccess(response,){ |
| | | this.inLoading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå') |
| | | // æ´æ°é¡µé¢ |
| | | }else{ |
| | | this.$message.error(response.message) |
| | | } |
| | | //æå¼ä¿®è®¢æ¡£æ¡å¼¹æ¡ |
| | | openEditForm(){ |
| | | this.editData = JSON.parse(JSON.stringify(this.Mdata)) |
| | | this.$nextTick(()=>{ |
| | | this.dialogVisible = true |
| | | }) |
| | | }, |
| | | submitForm(){ |
| | | if(!this.formData.deviceName){ |
| | | this.$message.error('æªè¾å
¥ä»ªå¨åç§°') |
| | | //ä¿®è®¢æ¡£æ¡ |
| | | submitForm() { |
| | | let flag = true |
| | | this.$refs['rules1'].validate((valid) => { |
| | | if (!valid) { |
| | | flag = false; |
| | | return false; |
| | | } |
| | | }); |
| | | this.$refs['rules2'].validate((valid) => { |
| | | if (!valid) { |
| | | flag = false; |
| | | return false; |
| | | } |
| | | }); |
| | | this.$refs['ruleForm'].validate((valid) => { |
| | | if (!valid) { |
| | | flag = false; |
| | | return false; |
| | | } |
| | | }); |
| | | if(!flag) { |
| | | return; |
| | | } |
| | | delete this.editData.nextCalibrationDate |
| | | delete this.editData.createTime |
| | | delete this.editData.updateTime |
| | | delete this.editData.createUser |
| | | delete this.editData.updateUser |
| | | delete this.editData.orderBy |
| | | // this.Mdata.equipmentManager = 1; |
| | | |
| | | this.editData.userAllow = this.equipmentManager.toString(); |
| | | this.editData.insProductIds = Array.isArray(this.editData.insProductIds) |
| | | ? this.editData.insProductIds.join(',') |
| | | : ''; |
| | | this.upLoad = true; |
| | | this.editData.authorizedPerson = JSON.stringify(this.editData.authorizedPerson) |
| | | this.$axios.post(this.$api.deviceScope.upDeviceParameter, this.editData, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | this.upLoad = false |
| | | return |
| | | } |
| | | if(!this.formData.enDeviceName){ |
| | | this.$message.error('æªè¾å
¥ä»ªå¨åç§°EN') |
| | | return |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.upLoad = false |
| | | this.getList(this.clickNodeVal.value) |
| | | this.dialogVisible = false |
| | | }).catch(e => { |
| | | this.$message.error('ä¿®æ¹å¤±è´¥') |
| | | this.dialogVisible = false |
| | | this.upLoad = false |
| | | }) |
| | | }, |
| | | // å¯¼åº |
| | | handleDownOne(row) { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceCheck.exportDeviceFile + '?deviceId=' + this.clickNodeVal.value, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'è®¾å¤æ¡£æ¡å¡.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'è®¾å¤æ¡£æ¡å¡.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | if(!this.formData.specificationModel){ |
| | | this.$message.error('æªè¾å
¥è§æ ¼åå·') |
| | | return |
| | | } |
| | | if(!this.formData.managementNumber){ |
| | | this.$message.error('æªè¾å
¥ç®¡çç¼å·') |
| | | return |
| | | } |
| | | if(!this.formData.activationDate){ |
| | | this.$message.error('æªè¾å
¥å¯ç¨æ¥æ') |
| | | return |
| | | } |
| | | if(this.formData.deviceStatus==='' || this.formData.deviceStatus===null){ |
| | | this.$message.error('æªéæ©å½åç¶æ') |
| | | return |
| | | } |
| | | if(!this.formData.calibrationDate){ |
| | | this.$message.error('æªè¾å
¥æ ¡åå¨æï¼æï¼') |
| | | return |
| | | } |
| | | delete this.formData.createTime |
| | | delete this.formData.updateTime |
| | | delete this.formData.createUser |
| | | delete this.formData.updateUser |
| | | this.formData.insProductIds = this.formData.insProductIds?this.formData.insProductIds.join():'' |
| | | this.upLoad = true; |
| | | this.$axios.post(this.$api.deviceScope.upDeviceParameter, this.formData, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | this.upLoad = false |
| | | return |
| | | } |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.upLoad = false |
| | | this.dialogVisible = false |
| | | }).catch(e => { |
| | | this.$message.error('ä¿®æ¹å¤±è´¥') |
| | | this.dialogVisible = false |
| | | this.upLoad = false |
| | | }) |
| | | }) |
| | | }, |
| | | handleSuccessUpImg2(response) { |
| | | if (response.code == 200) { |
| | | this.$nextTick(() => { |
| | | this.formData.imageUpload = response.data.url; |
| | | this.formData.imageName = response.data.name; |
| | | this.editData.imageUpload = response.data.url; |
| | | this.editData.imageName = response.data.name; |
| | | console.log(this.javaApi + 'img/' + this.editData.imageUpload); |
| | | |
| | | }) |
| | | } |
| | | }, |
| | |
| | | }, |
| | | // è·åè´è´£äººå表 |
| | | selectDevicePrincipal() { |
| | | this.$axios.get(this.$api.deviceScope.selectDevicePrincipal).then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.responsiblePersonList = data |
| | | this.$axios.post(this.$api.user.selectUserList, this.componentData, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | this.responsiblePersonList = res.data.body.records; |
| | | }) |
| | | }, |
| | | obtainItemParameterList() { |
| | | this.$axios.get(this.$api.laboratoryScope.obtainItemParameterList).then(res => { |
| | | let data = [] |
| | | res.data.forEach(a=>{ |
| | | res.data.forEach(a => { |
| | | data.push({ |
| | | label: a.laboratoryName, |
| | | value: a.id |
| | |
| | | this.subordinateDepartmentsList = data |
| | | }) |
| | | }, |
| | | getInsProductIds(){ |
| | | getInsProductIds() { |
| | | this.$axios.post(this.$api.capacityScope.getInsProduction).then(res => { |
| | | this.options = res.data.map((m,i)=>{ |
| | | this.options = res.data.map((m, i) => { |
| | | m.id = m.name; |
| | | return m |
| | | }) |
| | | this.options.forEach(item=>{ |
| | | if(item.children.length==0){ |
| | | this.options.forEach(item => { |
| | | if (item.children.length == 0) { |
| | | item.children = null; |
| | | }else{ |
| | | item.children.forEach(m=>{ |
| | | if(m.children.length==0){ |
| | | } else { |
| | | item.children.forEach(m => { |
| | | if (m.children.length == 0) { |
| | | m.children = null; |
| | | }else{ |
| | | m.children.forEach(n=>{ |
| | | if(n.children&&n.children.length==0){ |
| | | } else { |
| | | m.children.forEach(n => { |
| | | if (n.children && n.children.length == 0) { |
| | | n.children = null; |
| | | } |
| | | }) |
| | |
| | | category: "设å¤ç¶æ" |
| | | }).then(res => { |
| | | this.deviceStatusList = res.data |
| | | this.deviceStatusList.forEach(a=>{ |
| | | if(!isNaN(a.value)){ |
| | | this.deviceStatusList.forEach(a => { |
| | | if (!isNaN(a.value)) { |
| | | a.value = parseInt(a.value) |
| | | } |
| | | }) |
| | |
| | | this.equipmentList = res.data |
| | | }) |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getList(newVal.value) |
| | | this.getPage() |
| | | } |
| | | }, |
| | | dialogVisible1(newVal) { |
| | | if (newVal == false) { |
| | | this.isAddFileUpdate = false |
| | | this.addFile = {} |
| | | this.fileList = [] |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .page{ |
| | | width: 100%; |
| | | height: 100%; |
| | | .main_div { |
| | | height: calc(100vh - 15em); |
| | | overflow-y: auto; |
| | | overflow-x: hidden; |
| | | } |
| | | .page-header{ |
| | | |
| | | .page { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | |
| | | .page-header { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-top: 10px; |
| | | } |
| | | h4{ |
| | | |
| | | h4 { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | h4 .line{ |
| | | |
| | | h4 .line { |
| | | display: inline-block; |
| | | width: 3px; |
| | | height: 16px; |
| | | background: #3A7BFA; |
| | | margin-right: 4px; |
| | | } |
| | | .tables{ |
| | | width: calc(100vw - 390px); |
| | | |
| | | .tables { |
| | | width: 100%; |
| | | } |
| | | |
| | | .el-image { |
| | | position: relative; |
| | | } |
| | | .el-icon-picture-outline{ |
| | | |
| | | .el-icon-picture-outline { |
| | | position: absolute; |
| | | left: 50%; |
| | | top: 50%; |
| | | transform: translate(-50%,-50%); |
| | | transform: translate(-50%, -50%); |
| | | } |
| | | .form-item{ |
| | | |
| | | .form-item { |
| | | line-height: 34px; |
| | | display: flex; |
| | | align-items: center; |
| | | font-size: 14px; |
| | | } |
| | | .form-item label{ |
| | | width: 110px; |
| | | |
| | | .text-ellipsis { |
| | | display: inline-block; |
| | | width: 200px; /* æè
æ¨å¯ä»¥è®¾ç½®ä¸ä¸ªå
·ä½çå®½åº¦å¼ */ |
| | | box-sizing: border-box; /* ç¡®ä¿paddingåborderä¸å½±åå
ç´ çæ»å®½åº¦ */ |
| | | white-space: nowrap; /* ç¦æ¢ææ¬æ¢è¡ */ |
| | | text-overflow: ellipsis; /* 使ç¨çç¥å·è¡¨ç¤ºè¢«æªæçææ¬ */ |
| | | overflow: hidden; /* éèè¶
åºå®¹å¨çå
容 */ |
| | | } |
| | | |
| | | .form-items { |
| | | line-height: 34px; |
| | | /* display: flex; */ |
| | | /* align-items: center; */ |
| | | margin-left: 15%; |
| | | font-size: 14px; |
| | | } |
| | | |
| | | |
| | | .form-item label { |
| | | min-width: 130px; |
| | | display: inline-block; |
| | | text-align: right; |
| | | margin-right: 20px; |
| | | color: #999; |
| | | } |
| | | |
| | | .form-item p { |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | display: -webkit-box; |
| | | -webkit-line-clamp: 3; |
| | | /* è¿éè®¾ç½®ä½ æ³è¦çè¡æ° */ |
| | | -webkit-box-orient: vertical; |
| | | } |
| | | |
| | | .btns { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_thing, |
| | | .check_thing { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | gap: 1rem; |
| | | } |
| | | |
| | | .search_label, |
| | | .check_label { |
| | | width: 120px; |
| | | } |
| | | |
| | | .search_input, |
| | | .check_data, |
| | | .check_input { |
| | | flex-grow: 1; |
| | | } |
| | | |
| | | .avatar-uploader .el-upload { |
| | | border: 1px dashed #190505; |
| | | border-radius: 6px; |
| | | cursor: pointer; |
| | | position: relative; |
| | | overflow: hidden; |
| | | } |
| | | .avatar-uploader .el-upload:hover { |
| | | border-color: #409EFF; |
| | | } |
| | | .avatar-uploader-icon { |
| | | font-size: 28px; |
| | | color: #8c939d; |
| | | width: 178px; |
| | | height: 178px; |
| | | line-height: 178px; |
| | | text-align: center; |
| | | } |
| | | .avatar { |
| | | width: 178px; |
| | | height: 178px; |
| | | display: block; |
| | | } |
| | | |
| | | .device-main{ |
| | | width:90%; |
| | | margin:0px 5%; |
| | | height:460px; |
| | | padding:25px 0px; |
| | | background-color: #fff; |
| | | } |
| | | .device-center{ |
| | | width:90%; |
| | | height:460px; |
| | | margin:0px 5%; |
| | | border-radius: 15px; |
| | | background-color: #fff; |
| | | overflow: hidden; |
| | | /* box-shadow: 3px 3px 8px 0 rgba(0, 0, 0, 0.3); */ |
| | | filter: drop-shadow(0px 5px 5px rgba(0,0,0,0.3)) |
| | | } |
| | | .device-title{ |
| | | position: relative; |
| | | top:20px; |
| | | z-index: 2; |
| | | font-size: clamp(1rem, 0.582rem + 1.59vw, 1.475rem); |
| | | font-weight: bold; |
| | | color: #4f6ab2; |
| | | width: 100%; |
| | | height:90px; |
| | | line-height: 100px; |
| | | text-align: center; |
| | | } |
| | | .device-footer{ |
| | | width:100%; |
| | | height:420px; |
| | | background-color: #3361d0; |
| | | position: relative |
| | | } |
| | | .device-footer::after{ |
| | | content: ""; |
| | | width: 100%; |
| | | height: 70px; |
| | | position: absolute; |
| | | top:-30px; |
| | | border-radius: 0 0 50% 50%; |
| | | background-color: #fff; |
| | | } |
| | | .device-footer .qr-code{ |
| | | width: 55%; |
| | | height: 200px; |
| | | position: relative; |
| | | top: 60px; |
| | | left:22.5%; |
| | | background-color: #fff; |
| | | border-radius: 15px; |
| | | overflow: hidden; |
| | | } |
| | | .device-number{ |
| | | width:80%; |
| | | height: 20px; |
| | | margin-left:20%; |
| | | position: relative; |
| | | top: 80px; |
| | | } |
| | | .device-text{ |
| | | color:#fff; |
| | | font-weight: bold; |
| | | font-size:100%; |
| | | } |
| | | .device-name{ |
| | | width:80%; |
| | | margin-left:20%; |
| | | height: 20px; |
| | | position: relative; |
| | | top: 90px; |
| | | } |
| | | </style> |
| | |
| | | <!-- 设å¤ç»´æ¤ --> |
| | | <template> |
| | | <div> |
| | | <div class="search"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">å
³é®åï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="value" @keyup.enter.native="refreshTable()"></el-input></div> |
| | | <div class="search_label">æµç¨ç¼å·ï¼</div> |
| | | <div class="search_input"><el-input v-model="search.deviceNumber" clearable placeholder="请è¾å
¥" size="small" |
| | | @keyup.enter.native="getAllMessage(clickNodeVal.value)"></el-input></div> |
| | | </div> |
| | | <div class="search_thing" style="padding-left: 30px;"> |
| | | <el-button size="small" type="primary" @click="refreshTable()">æ¥ è¯¢</el-button> |
| | | <el-button size="small" @click="resetSearch">é ç½®</el-button> |
| | | <el-button size="small" type="primary" @click="getAllMessage(clickNodeVal.value)">æ¥ è¯¢</el-button> |
| | | </div> |
| | | <div class="btns"> |
| | | <el-button size="small" type="primary" @click="dialogVisible=true">æ°å»º</el-button> |
| | | <el-button size="small" type="primary">导åº</el-button> |
| | | <el-button size="small" type="primary" @click="dialogVisible = true; add()">æ·»å ç»´æ¤è®°å½</el-button> |
| | | <el-button :loading="outLoading" size="small" type="primary" @click="handleDownOne">导åº</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="tables" style="margin-top: 16px;"> |
| | | <ValueTable ref="ValueTable" |
| | | :url="$api.auxiliaryWorkingHoursDay.selectAuxiliaryWorkingHoursDay" |
| | | :delUrl="$api.auxiliaryWorkingHoursDay.deleteAuxiliaryWorkingHoursDay" :componentData="componentData" :key="upIndex"/> |
| | | <div class="tables" style="margin-top: 10px;"> |
| | | <el-table ref="table" :data="MaintainParam" height="calc(100vh - 20em)"> |
| | | <el-table-column label="åºå·" type="index" width="120"> |
| | | <template v-slot="scope"> |
| | | <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æµç¨ç¼å·" min-width="180" prop="deviceNumber" /> |
| | | <el-table-column label="设å¤åç§°" min-width="150" prop="deviceName" /> |
| | | <el-table-column label="管çç¼å·" min-width="150" prop="managementNumber" /> |
| | | <el-table-column label="ç»´æ¤å
容" min-width="150" prop="content" /> |
| | | <el-table-column label="ç»´æ¤æ¶é´" min-width="150" prop="date" /> |
| | | <el-table-column label="æäº¤äºº" min-width="150" prop="name" /> |
| | | <el-table-column label="æäº¤æ¥æ" min-width="150" prop="date"> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="æä½" width="110"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="handleViewClick(scope.row)">æ¥ç</el-button> |
| | | <el-button size="small" type="text" @click="handleDeleteClick(scope.$index, scope.row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange"> |
| | | </el-pagination> |
| | | </div> |
| | | <el-dialog |
| | | title="仪å¨è®¾å¤ç»´æ¤è®°å½è¡¨" |
| | | :visible.sync="dialogVisible" |
| | | width="30%" |
| | | style="max-height: 80vh;margin-top: 10vh;" |
| | | :close-on-click-modal="false" |
| | | :close-on-press-escape="false"> |
| | | <div class="form"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">设å¤ç¼å·ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="value"></el-input></div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">设å¤åç§°ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="value"></el-input></div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">ç»ä¸ç¼å·ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="value"></el-input></div> |
| | | </div> |
| | | <div class="search_thing" style="margin: 10px 0;"> |
| | | <div class="search_label">ç»´æ¤å
容ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="value" type="textarea" |
| | | :rows="2"></el-input></div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">ç»´æ¤æ¶é´ï¼</div> |
| | | <div class="search_input"> |
| | | <el-date-picker style="width:100%" v-model="value" type="date" |
| | | format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">ç»´æ¤ç±»åï¼</div> |
| | | <div class="search_input"> |
| | | <el-radio-group v-model="value"> |
| | | <el-radio :label="0">使ç¨ååç»´æ¤</el-radio> |
| | | <el-radio :label="1">计åä¸ç»´æ¤</el-radio> |
| | | </el-radio-group> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">䏿¬¡ç»´æ¤æ¶é´ï¼</div> |
| | | <div class="search_input"> |
| | | <el-date-picker style="width:100%" v-model="value" type="date" |
| | | format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">ç»´æ¤äººï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="value"></el-input></div> |
| | | </div> |
| | | <div class="search_thing" style="margin: 10px 0;"> |
| | | <div class="search_label">夿³¨ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="value" type="textarea" |
| | | :rows="2"></el-input></div> |
| | | </div> |
| | | </div> |
| | | <!-- æ°å»ºç»´æ¤ --> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" |
| | | title="æ·»å ç»´æ¤è®°å½" |
| | | top="5vh" width="60%"> |
| | | <el-form ref="form" :model="formData" label-width="130px"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æµç¨ç¼å·:" prop="deviceNumber"> |
| | | <el-input v-model="formData.deviceNumber" clearable disabled size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤åç§°:" prop="deviceName"> |
| | | <el-input v-model="formData.deviceName" clearable disabled placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="管çç¼å·:" prop="managementNumber"> |
| | | <el-input v-model="formData.managementNumber" clearable disabled placeholder="请è¾å
¥" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: true, message: '请è¾å
¥ç»´æ¤å
容', trigger: 'blur' }]" label="ç»´æ¤å
容:" |
| | | prop="content"> |
| | | <el-input v-model="formData.content" placeholder="请è¾å
¥" size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: '请è¾å
¥ç»´æ¤æ¶é´', trigger: 'blur' }]" label="ç»´æ¤æ¶é´:" prop="date"> |
| | | <el-date-picker v-model="formData.date" format="yyyy-MM-dd" placeholder="éæ©æ¥æ" size="small" |
| | | style="width:100%" type="date" value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: '请è¾å
¥ç»´æ¤æ¶é´', trigger: 'blur' }]" label="ç»´æ¤ç±»å:" |
| | | prop="maintenanceType"> |
| | | <el-radio-group v-model="formData.maintenanceType" :disabled="!this.editMode"> |
| | | <el-radio :label="0">使ç¨ååç»´æ¤</el-radio> |
| | | <el-radio :label="1">计åä¸ç»´æ¤</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: 'è¯·éæ©ä¸æ¬¡ç»´æ¤æ¶é´', trigger: 'blur' }]" label="䏿¬¡ç»´æ¤æ¶é´:" |
| | | prop="nextDate"> |
| | | <el-date-picker |
| | | v-model="formData.nextDate" |
| | | :picker-options="{ disabledDate: this.disabledDate }" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" size="small" |
| | | style="width:100%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: '请è¾å
¥ç»´æ¤äºº', trigger: 'blur' }]" label="ç»´æ¤äºº:" prop="name"> |
| | | <el-input v-model="formData.name" clearable placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="夿³¨:"> |
| | | <el-input v-model="formData.comments" placeholder="请è¾å
¥" size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="dialogVisible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="dialogVisible = false">ç¡® å®</el-button> |
| | | <el-button v-if="editMode" @click="dialogVisible = false">å æ¶</el-button> |
| | | <el-button v-if="editMode" type="primary" @click="addRecord">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | export default { |
| | | components: { |
| | | ValueTable |
| | | }, |
| | | data(){ |
| | | return { |
| | | value:'', |
| | | componentData: { |
| | | entity: { |
| | | week: null, |
| | | weekDay: null, |
| | | dateTime: null, |
| | | name:null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | do: [{ |
| | | id: 'handleLook', |
| | | font: 'æ¥ç', |
| | | type: 'text', |
| | | method: 'handleLook' |
| | | },{ |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy', |
| | | disabFun: (row, index) => { |
| | | return row.state === 'å·²å®¡æ ¸' || row.state === 'å·²æ¹å' |
| | | } |
| | | }], |
| | | tagField: { |
| | | shift:{ |
| | | select:[] |
| | | }, |
| | | state:{ |
| | | select:[ |
| | | { |
| | | label:'å·²æäº¤', |
| | | value:'å·²æäº¤', |
| | | type:'primary' |
| | | }, |
| | | { |
| | | label:'å·²å®¡æ ¸', |
| | | value:'å·²å®¡æ ¸', |
| | | type:'warning' |
| | | }, |
| | | { |
| | | label:'å·²æ¹å', |
| | | value:'å·²æ¹å', |
| | | type:'success' |
| | | }, |
| | | ] |
| | | }, |
| | | weekDay:{ |
| | | select:[] |
| | | } |
| | | }, |
| | | linkEvent: {}, |
| | | selectField: { |
| | | shift:{ |
| | | select:[] |
| | | }, |
| | | state:{ |
| | | select:[ |
| | | { |
| | | label:'å·²æäº¤', |
| | | value:'å·²æäº¤', |
| | | type:'primary' |
| | | }, |
| | | { |
| | | label:'å·²å®¡æ ¸', |
| | | value:'å·²å®¡æ ¸', |
| | | type:'warning' |
| | | }, |
| | | { |
| | | label:'å·²æ¹å', |
| | | value:'å·²æ¹å', |
| | | type:'success' |
| | | }, |
| | | ] |
| | | }, |
| | | weekDay:{ |
| | | select:[] |
| | | } |
| | | }, |
| | | requiredAdd: [], |
| | | requiredUp: [] |
| | | }, |
| | | upIndex:0, |
| | | dialogVisible:true |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | methods:{ |
| | | refreshTable(){} |
| | | data() { |
| | | return { |
| | | search: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | deviceNumber: '' |
| | | }, |
| | | editMode: false, |
| | | dialogVisible: false, |
| | | //表åç»´æ¤å
容 |
| | | formData: {}, |
| | | //表头æ¾ç¤º |
| | | MaintainParam: [], |
| | | outLoading: false |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getAllMessage(this.clickNodeVal.value) |
| | | }, |
| | | methods: { |
| | | //䏿¬¡ç»´æ¤æ¥æ:ç¦ç¨å¨ç»´æ¤æ¥æåçæ¥æ |
| | | disabledDate(time){ |
| | | let selectDate = this.formData.date |
| | | if(selectDate){ |
| | | let oldDate = new Date(selectDate) |
| | | return time <= oldDate.getTime() |
| | | } |
| | | return false |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.search.size = val |
| | | this.getAllMessage(this.clickNodeVal.value) |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.search.current = val |
| | | this.getAllMessage(this.clickNodeVal.value) |
| | | }, |
| | | //æä½è¯¦æ
æ¥ç |
| | | handleViewClick(row) { |
| | | this.editMode = false; |
| | | this.dialogVisible = true; |
| | | this.formData = row; |
| | | }, |
| | | // å¯¼åº |
| | | handleDownOne() { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceCheck.exportMaintenanceRecord + '?deviceId=' + this.clickNodeVal.value, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤ç»´æ¤ä¿å
»è®°å½.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤ç»´æ¤ä¿å
»è®°å½.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | //æä½è¯¦æ
å é¤ |
| | | handleDeleteClick(index, row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.deviceCheck.deviceMaintenanceDelete + '/' + row.id).then(res => { |
| | | }) |
| | | this.MaintainParam.splice(index, 1); |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'å 餿å!' |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | //ç¹å»åå¯ç¼è¾ |
| | | add() { |
| | | this.$axios.get(this.$api.deviceScope.selectDeviceByCode + '?id=' + this.clickNodeVal.value).then(res => { |
| | | this.formData.deviceName = res.data.deviceName |
| | | this.formData.managementNumber = res.data.managementNumber |
| | | this.$nextTick(() => { |
| | | this.$refs['form'].clearValidate() |
| | | }) |
| | | }); |
| | | this.editMode = true; |
| | | }, |
| | | //æ·»å ç»´æ¤è®°å½ |
| | | addRecord() { |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | this.formData.deviceId = this.clickNodeVal.value; |
| | | this.$axios.post(this.$api.deviceCheck.deviceMaintainAdd, this.formData).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ·»å æå'); |
| | | this.getAllMessage(this.clickNodeVal.value) |
| | | } |
| | | }) |
| | | this.MaintainParam.push(this.formData) |
| | | this.dialogVisible = false; |
| | | this.formData = {}; //æ¸
空表å |
| | | } |
| | | }) |
| | | }, |
| | | resetSearch() { |
| | | this.search = { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | deviceNumber: '', |
| | | } |
| | | this.getAllMessage(this.clickNodeVal.value); |
| | | }, |
| | | //è·å表å设å¤ç»´æ¤ä¿¡æ¯ |
| | | getAllMessage(deviceId) { |
| | | this.$axios.get(this.$api.deviceCheck.getDeviceMaintenancePage + "?deviceId=" + deviceId + "&size=" + this.search.size + "¤t=" + this.search.current + "&deviceNumber=" + this.search.deviceNumber).then(res => { |
| | | if (res.code == 200) { |
| | | this.MaintainParam = res.data.records |
| | | this.search.total = res.data.total |
| | | } |
| | | }) |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getAllMessage(newVal.value) |
| | | } |
| | | }, |
| | | dialogVisible(newVal) { |
| | | if (newVal === false) { |
| | | this.formData = {} |
| | | this.$refs['form'].clearValidate() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .tables{ |
| | | width: calc(100vw - 390px); |
| | | height: calc(100vh - 230px); |
| | | h4 { |
| | | font-weight: 400; |
| | | font-size: 16px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin: 10px 0; |
| | | } |
| | | |
| | | h4 .line { |
| | | display: inline-block; |
| | | width: 3px; |
| | | height: 16px; |
| | | background: #3A7BFA; |
| | | margin-right: 4px; |
| | | } |
| | | |
| | | .tables { |
| | | width: 100%; |
| | | height: calc(100vh - 17em); |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 40px; |
| | | display: flex; |
| | | align-items: center; |
| | | position: relative; |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .search_thing { |
| | |
| | | } |
| | | |
| | | .search_label { |
| | | width: 70px; |
| | | width: 80px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 120px); |
| | | width: 73%; |
| | | } |
| | | .btns{ |
| | | |
| | | .btns { |
| | | position: absolute; |
| | | right: 40px; |
| | | right: 0px; |
| | | top: 50%; |
| | | transform: translate(0,-50%); |
| | | transform: translate(0, -50%); |
| | | } |
| | | .form .search_label{ |
| | | |
| | | .btns_thing { |
| | | position: absolute; |
| | | right: 230px; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | } |
| | | |
| | | .form .search_label { |
| | | width: 120px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- 设å¤å·¥å
·æç» --> |
| | | <template> |
| | | <div class="role_manage"> |
| | | <div class="search" v-show="!showData"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">ç¶æï¼</div> |
| | | <el-select v-model="componentData.entity.deviceStatus" placeholder="å
¨é¨" size="small"> |
| | | <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">设å¤åç§°ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="componentData.entity.deviceName" |
| | | @keyup.enter.native="refreshTable()"> |
| | | </el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">è§æ ¼åå·ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="componentData.entity.specificationModel" |
| | | @keyup.enter.native="refreshTable()"></el-input> |
| | | </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> |
| | | <el-button size="small" type="primary" @click="dialogVisible2 = true">æ° å¢</el-button> |
| | | <el-button size="small" type="primary" @click="handleDownOne">导 åº</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table" v-show="!showData"> |
| | | <!-- è¯æ³ åç»ä»¶éè¿ this.$emit +ä¼ å
¥æ¹æ³å è°ç¨ç¶ç»ä»¶æ¹æ³ ä¾å¦ this.$emitï¼selectAllByOneï¼ å°±éå¨ç¶ç»ä»¶å£°æå¹¶ä¼ å
¥ @selectAllByOne="selectAllByOne" --> |
| | | <ValueTable @selectAllByOne="selectAllByOne" @isUpdate="isUpdate" ref="ValueTable" |
| | | :dateFormat="dateFormat" |
| | | :upUrl="$api.deviceScope.upDeviceParameter" :delUrl="$api.deviceScope.delDeviceParameter" |
| | | :componentData="componentData" :key="upIndex" :url="$api.deviceScope.selectDeviceParameter + '?laboratoryNameIsNull=' + laboratoryNameIsNull" /> |
| | | </div> |
| | | <el-dialog :title="isUp ? '设å¤è¯¦æ
' : 'æ¡£æ¡ä¿®è®¢'" :visible.sync="dialogVisible" width="70%" |
| | | top="5vh" |
| | | :before-close="handleClose"> |
| | | <el-row style="display:flex;justify-content: space-around;max-height: 75vh;overflow-y: auto;"> |
| | | <!-- 左边å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-col> |
| | | <!-- å¾ç --> |
| | | <el-image class="img" style="width:100%;height: 320px;marginBottom:16px" |
| | | :src="javaApi + '/img/' + formData.imageUpload"> |
| | | <div slot="error" class="image-error" style="width: calc(100% -2px); |
| | | height: 318px; |
| | | border-radius: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border: 1px solid #EEEEEE;"> |
| | | <i class="el-icon-picture-outline" style="font-size:60px;color:#666666;"></i> |
| | | </div> |
| | | </el-image> |
| | | <!-- 表å --> |
| | | <el-form :label-position="labelPosition" :model="formData" label-width="120px"> |
| | | <el-form-item label="仪å¨åç§°:" required> |
| | | <el-input :disabled="isUp" v-model="formData.deviceName" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="仪å¨åç§°EN:" required> |
| | | <el-input :disabled="isUp" v-model="formData.enDeviceName" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="è§æ ¼åå·:" required> |
| | | <el-input :disabled="isUp" v-model="formData.specificationModel" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç产åå®¶:"> |
| | | <el-input :disabled="isUp" v-model="formData.manufacturer" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | </el-col> |
| | | <!-- ä¸é´å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-form :label-position="labelPosition" :model="formData" label-width="116px"> |
| | | <el-form-item label="æ ¡åæå¡æºæ:"> |
| | | <el-input :disabled="isUp" v-model="formData.calibrationServices" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="åºåç¼å·:"> |
| | | <el-input :disabled="isUp" v-model="formData.factoryNo" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="管çç¼å·:" required> |
| | | <el-input :disabled="isUp" v-model="formData.managementNumber" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="è´ç½®æ¥æ:"> |
| | | <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.acquisitionDate" |
| | | type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" |
| | | placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="æ ¡åæ¥æ:" required> |
| | | <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.activationDate" |
| | | type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" |
| | | placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="管ç人:"> |
| | | <el-select v-model="formData.equipmentManager" placeholder="è¯·éæ©" size="small" |
| | | style="width:100%"> |
| | | <el-option :disabled="isUp" v-for="item in responsiblePersonList" :key="item.value" |
| | | :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="åæ¾ç¹:"> |
| | | <el-input :disabled="isUp" v-model="formData.storagePoint" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ææ¯ææ :"> |
| | | <el-input :disabled="isUp" v-model="formData.technicalIndicators" :rows="7" type="textarea" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | <!-- å³è¾¹å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-form :label-position="labelPosition" :model="formData" label-width="140px" ref="ruleForm"> |
| | | <!-- å®éªå®¤å表 --> |
| | | <el-form-item label="æå±é¨é¨:"> |
| | | <el-select :disabled="isUp" v-model="formData.subordinateDepartmentsId" placeholder="è¯·éæ©" |
| | | size="small" style="width:100%"> |
| | | <el-option v-for="item in subordinateDepartmentsList" :key="item.value" |
| | | :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ£æµé¡¹ç®:"> |
| | | <el-cascader :disabled="isUp" v-model="formData.insProductIds" :options="options" |
| | | :show-all-levels="false" :props="props" placeholder="è¯·éæ©" size="small" |
| | | style="width:100%;" :collapse-tags="!isUp" separator="," filterable |
| | | clearable></el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="æè¿æ ¡åæ¥æ:" v-if="isUp"> |
| | | <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.latestTraceability" |
| | | format="yyyy-MM-dd" value-format="yyyy-MM-dd" type="date" size="small" |
| | | placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="䏿¬¡æ ¡åæ¥æ:" v-if="isUp"> |
| | | <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.latestTraceability" |
| | | format="yyyy-MM-dd" value-format="yyyy-MM-dd" type="date" size="small" |
| | | placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="设å¤ç±»å:"> |
| | | <el-select :disabled="isUp" v-model="formData.largeCategory" placeholder="è¯·éæ©" size="small" |
| | | style="width:100%"> |
| | | <el-option v-for="item in equipmentList" :key="item.value" :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="åä»·(ä¸å
):"> |
| | | <el-input :disabled="isUp" v-model="formData.unitPrice" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å½åç¶æ:" required> |
| | | <el-select :disabled="isUp" v-model="formData.deviceStatus" placeholder="è¯·éæ©" size="small" |
| | | style="width:100%"> |
| | | <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ ¡åå¨æï¼æï¼:" required> |
| | | <el-input :disabled="isUp" v-model="formData.calibrationDate" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å¾ç:"> |
| | | <div |
| | | style="border: 1px solid #DCDFE6;border-radius:4px;height:32px;lineHeight:32px;display:flex;justify-content: space-around;font-size: 13px;"> |
| | | <div v-show="formData.imageName" class="picName">{{ formData.imageName }}</div> |
| | | <el-upload :disabled="isUp" :action="action" :on-success="handleSuccessUpImg2" |
| | | :show-file-list="false" accept='image/jpg,image/jpeg,image/png' :headers="headers" |
| | | :on-change="beforeUpload" :on-error="onError" ref='upload'> |
| | | <el-button type="text" style="height:30px;padding-top:8px">ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </div> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | </el-row> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-row v-if="!isUp"> |
| | | <el-button @click="handleClose">å æ¶</el-button> |
| | | <el-button type="primary" @click="submitForm" :loading="upLoad">ç¡® å®</el-button> |
| | | </el-row> |
| | | </span> |
| | | </el-dialog> |
| | | <!-- æ°å¢--> |
| | | <el-dialog title="æ°å¢è®¾å¤" top="5vh" :visible.sync="dialogVisible2" width="70%" :before-close="handleClose2"> |
| | | <el-row style="display:flex;justify-content: space-around;"> |
| | | <!-- 左边å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-col> |
| | | <!-- å¾ç --> |
| | | <el-image class="img" style="width:100%;height: 320px;margin-bottom:16px" |
| | | :src="javaApi + '/img/' + formData2.imageUpload"> |
| | | <div slot="error" class="image-error" style="width: calc(100% -2px); |
| | | height: 318px; |
| | | border-radius: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border: 1px solid #EEEEEE;"> |
| | | <i class="el-icon-picture-outline" style="font-size:60px;color:#666666;"></i> |
| | | </div> |
| | | </el-image> |
| | | <!-- 表å --> |
| | | <el-form :label-position="labelPosition" :model="formData2" label-width="120px"> |
| | | <el-form-item label="仪å¨åç§°:" required> |
| | | <el-input v-model="formData2.deviceName" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="仪å¨åç§°EN:" required> |
| | | <el-input v-model="formData2.enDeviceName" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="è§æ ¼åå·:" required> |
| | | <el-input v-model="formData2.specificationModel" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç产åå®¶:"> |
| | | <el-input v-model="formData2.manufacturer" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | </el-col> |
| | | <!-- ä¸é´å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-form :label-position="labelPosition" :model="formData2" label-width="110px"> |
| | | <!-- <el-form-item label="ç产åå®¶EN:"> |
| | | <el-input v-model="formData2.factoryNo" size="small"></el-input> |
| | | </el-form-item> --> |
| | | <el-form-item label="æ ¡åæå¡æºæ:"> |
| | | <el-input v-model="formData2.calibrationServices" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="åºåç¼å·:"> |
| | | <el-input v-model="formData2.factoryNo" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="管çç¼å·:" required> |
| | | <el-input v-model="formData2.managementNumber" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="è´ç½®æ¥æ:"> |
| | | <el-date-picker style="width:100%" v-model="formData2.acquisitionDate" type="date" |
| | | format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="å¯ç¨æ¥æ:" required> |
| | | <el-date-picker style="width:100%" v-model="formData2.activationDate" type="date" |
| | | format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="éæ©æ¥æ"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="管ç人:"> |
| | | <el-select v-model="formData2.equipmentManager" placeholder="è¯·éæ©" size="small" |
| | | style="width:100%"> |
| | | <el-option v-for="item in responsiblePersonList" :key="item.value" :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="åæ¾ç¹:"> |
| | | <el-input v-model="formData2.storagePoint" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ææ¯ææ :"> |
| | | <el-input v-model="formData2.technicalIndicators" :rows="7" type="textarea" |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | <!-- å³è¾¹å¸å± --> |
| | | <el-col :span="7"> |
| | | <el-form :label-position="labelPosition" :model="formData2" label-width="120px" ref="ruleForm"> |
| | | <!-- å®éªå®¤å表 --> |
| | | <el-form-item label="æå±é¨é¨:"> |
| | | <el-select v-model="formData2.subordinateDepartmentsId" placeholder="è¯·éæ©" size="small" |
| | | style="width:100%"> |
| | | <el-option v-for="item in subordinateDepartmentsList" :key="item.value" |
| | | :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ£æµé¡¹ç®:"> |
| | | <el-cascader v-model="formData2.insProductIds" :options="options" :show-all-levels="false" |
| | | :props="props" placeholder="è¯·éæ©" size="small" style="width:100%" collapse-tags |
| | | separator="," filterable clearable></el-cascader> |
| | | </el-form-item> |
| | | <el-form-item label="设å¤ç±»å:"> |
| | | <el-select v-model="formData2.largeCategory" placeholder="è¯·éæ©" size="small" |
| | | style="width:100%"> |
| | | <el-option v-for="item in equipmentList" :key="item.value" :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="åä»·(ä¸å
):"> |
| | | <el-input v-model="formData2.unitPrice" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å½åç¶æ:" required> |
| | | <el-select v-model="formData2.deviceStatus" placeholder="è¯·éæ©" size="small" |
| | | style="width:100%"> |
| | | <el-option v-for="item in deviceStatusList" :key="item.id" :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æ ¡åå¨æï¼æï¼:" required> |
| | | <el-input v-model="formData2.calibrationDate" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å¾ç:"> |
| | | <div |
| | | style="border: 1px solid #DCDFE6;border-radius:4px;height:32px;line-height:32px;display:flex;justify-content: space-around;font-size: 13px;"> |
| | | <div v-show="formData2.imageName" class="picName">{{ formData2.imageName }}</div> |
| | | <el-upload :action="action" :on-success="handleSuccessUpImg2" :show-file-list="false" |
| | | accept='image/jpg,image/jpeg,image/png' :headers="headers" :on-change="beforeUpload" |
| | | :on-error="onError" ref='upload'> |
| | | <el-button type="text" style="height:30px;padding-top:8px">ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </div> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-col> |
| | | </el-row> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-row> |
| | | <el-button @click="handleClose2">å æ¶</el-button> |
| | | <el-button type="primary" @click="submitForm2" :loading="upLoad2">ç¡® å®</el-button> |
| | | </el-row> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="æ°éé
ç½®" :visible.sync="dialogVisible3" width="400px"> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>IPï¼</div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.ip"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>ééå°åï¼</div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.collectUrl"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>å¨åå°åï¼</div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.storageUrl"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>åç
§ï¼</div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.refer"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>Xï¼</div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.x"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>Yï¼</div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.y"></el-input> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">å
¬å¼ï¼</div> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="configForm.formula"></el-input> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-row> |
| | | <el-button @click="dialogVisible3 = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="submitForm3" :loading="upLoad3">ç¡® å®</el-button> |
| | | </el-row> |
| | | </span> |
| | | </el-dialog> |
| | | <dataAcquisitionConfig v-if="showData" :deviceId="deviceId" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | import dataAcquisitionConfig from './acquisition-config.vue' |
| | | export default { |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | components: { |
| | | ValueTable, |
| | | dataAcquisitionConfig, |
| | | }, |
| | | data() { |
| | | return { |
| | | dateFormat: 'yyyy-MM-dd', |
| | | deviceId: '', |
| | | fileTypeOptions: [ |
| | | { label: 'csv', value: '.csv' }, |
| | | { label: 'db', value: '.db' }, |
| | | { label: 'mdb', value: '.mdb' }, |
| | | { label: 'word', value: '.docx' }, |
| | | { label: 'excel', value: '.xlsx' }, |
| | | { label: 'txt', value: '.txt' }, |
| | | { label: 'png', value: '.png' }, |
| | | ], |
| | | //æ¯å¦æ¯æ¡£æ¡ä¿®è®¢ true䏿¯ falseæ¯ |
| | | isUp: true, |
| | | formData: { |
| | | }, |
| | | formData2: { |
| | | imageUpload: '', |
| | | imageName: '' |
| | | }, |
| | | value: '', |
| | | props: { multiple: true, emitPath: false, value: 'id', label: 'name' }, |
| | | options: [], |
| | | labelPosition: 'right', |
| | | dialogVisible: false, |
| | | dialogVisible2: false, |
| | | addPower: false, |
| | | showData: false, // æ°éé
ç½®é¡µé¢ |
| | | tableList: [], |
| | | componentData: { |
| | | entity: { |
| | | largeCategory: null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'asc' |
| | | } |
| | | }, |
| | | init: false, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | do: [{ |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy' |
| | | }, { |
| | | id: 'archives', |
| | | font: 'æ¡£æ¡ä¿®è®¢', |
| | | type: 'text', |
| | | method: 'isUpdate' |
| | | }, { |
| | | id: 'handleConfig', |
| | | font: 'æ°éé
ç½®', |
| | | type: 'text', |
| | | method: 'handleConfig', |
| | | disabFun: (row, index) => { |
| | | return row.insProductItem == null || row.insProductItem === '' |
| | | } |
| | | }], |
| | | headNoShow: ['enDeviceName'], |
| | | tagField: { |
| | | deviceStatus: { |
| | | select: [] |
| | | }, |
| | | equipmentManager: { |
| | | select: [] |
| | | }, |
| | | authorizedPerson: { |
| | | select: [] |
| | | }, |
| | | insProductIds: { |
| | | select: [] |
| | | } |
| | | }, |
| | | linkEvent: { |
| | | deviceName: { |
| | | method: 'selectAllByOne' |
| | | } |
| | | }, |
| | | selectField: { |
| | | authorizedPerson: { |
| | | select: [], |
| | | choose: true |
| | | }, |
| | | equipmentManager: { |
| | | select: [] |
| | | }, |
| | | insProductIds: { |
| | | select: [], |
| | | choose: true |
| | | }, |
| | | largeCategory: { |
| | | select: [] |
| | | }, |
| | | }, |
| | | requiredAdd: [], |
| | | requiredUp: [], |
| | | needSort: ['deviceName', 'acquisitionDate', 'activationDate', 'lastCalibrationDate', 'nextCalibrationDate', 'deviceStatus'], |
| | | }, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | addDia: true, |
| | | addPower: true, |
| | | //设å¤ç±»åå表 |
| | | equipmentList: [], |
| | | // è´è´£äººå表 |
| | | responsiblePersonList: [], |
| | | // ææäººå表 |
| | | authorizerList: [], |
| | | // å½åç¶æå表 |
| | | deviceStatusList: [], |
| | | // æå±é¨é¨ |
| | | subordinateDepartmentsList: [], |
| | | upLoad: false, |
| | | upLoad2: false, |
| | | dialogVisible3: false, |
| | | upLoad3: false, |
| | | configForm: {}, |
| | | laboratoryNameIsNull: false |
| | | } |
| | | }, |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | 'token': sessionStorage.getItem('token') |
| | | } |
| | | }, |
| | | action() { |
| | | return this.javaApi + this.$api.deviceScope.uploadFile |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.componentData.entity) |
| | | this.getPower() |
| | | this.selectEnumByCategory() |
| | | this.selectDevicePrincipal() |
| | | this.obtainItemParameterList() |
| | | this.getInsProductIds() |
| | | // this.$customEvents.$on('largeCategory', this.handleNotification); |
| | | // åå§å |
| | | this.clickSidebar(this.clickNodeVal) |
| | | }, |
| | | methods: { |
| | | //åç±» |
| | | handleNotification(cate) { |
| | | this.componentData.entity.largeCategory = cate |
| | | }, |
| | | obtainItemParameterList() { |
| | | this.$axios.get(this.$api.laboratoryScope.obtainItemParameterList).then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | data.push({ |
| | | label: a.laboratoryName, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.subordinateDepartmentsList = data |
| | | }) |
| | | }, |
| | | refreshTable(e) { |
| | | this.$refs['ValueTable'].selectList(e) |
| | | }, |
| | | refresh() { |
| | | this.componentData.entity.deviceStatus = null |
| | | this.componentData.entity.deviceName = null |
| | | this.componentData.entity.specificationModel = null |
| | | this.refreshTable() |
| | | // this.upIndex++ |
| | | }, |
| | | // å¯¼åº |
| | | handleDownOne() { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceCheck.exportEquipmentDetails, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤ä»ªå¨ä¸è§è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤ä»ªå¨ä¸è§è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // æéåé
|
| | | getPower(radio) { |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let up = false |
| | | let del = false |
| | | let add = false |
| | | let config = false |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'upDeviceParameter') { |
| | | up = true |
| | | } |
| | | if (power[i].menuMethod == 'delDeviceParameter') { |
| | | del = true |
| | | } |
| | | if (power[i].menuMethod == 'addDeviceParameter') { |
| | | add = true |
| | | } |
| | | if (power[i].menuMethod == 'saveDataAcquisitionConfiguration') { |
| | | config = true |
| | | } |
| | | } |
| | | if (!config) { |
| | | this.componentData.do.splice(2, 1) |
| | | } |
| | | if (!up) { |
| | | this.componentData.do.splice(1, 1) |
| | | } |
| | | if (!del) { |
| | | this.componentData.do.splice(0, 1) |
| | | } |
| | | this.addPower = add |
| | | }, |
| | | // è·ååå
¸ |
| | | selectEnumByCategory() { |
| | | this.$axios.post(this.$api.enums.selectEnumByCategory, { |
| | | category: "设å¤ç¶æ" |
| | | }).then(res => { |
| | | this.deviceStatusList = res.data |
| | | this.deviceStatusList.forEach(a => { |
| | | if (!isNaN(a.value)) { |
| | | a.value = parseInt(a.value) |
| | | } |
| | | }) |
| | | this.componentData.tagField.deviceStatus.select = res.data |
| | | }) |
| | | this.$axios.post(this.$api.enums.selectEnumByCategory, { |
| | | category: "设å¤åç±»" |
| | | }).then(res => { |
| | | this.equipmentList = res.data |
| | | }) |
| | | }, |
| | | // è·åè´è´£äººå表 |
| | | selectDevicePrincipal() { |
| | | this.$axios.get(this.$api.deviceScope.selectDevicePrincipal).then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.responsiblePersonList = data |
| | | this.authorizerList = data |
| | | this.componentData.tagField.equipmentManager = data |
| | | this.componentData.tagField.authorizedPerson = data |
| | | }) |
| | | }, |
| | | getInsProductIds() { |
| | | this.$axios.post(this.$api.capacityScope.getInsProduction).then(res => { |
| | | this.componentData.tagField.insProductIds.select = [] |
| | | this.componentData.selectField.insProductIds.select = [] |
| | | this.options = res.data.map((m, i) => { |
| | | m.id = m.name; |
| | | let children = m.children.map(n => { |
| | | n.label = n.name; |
| | | n.value = n.id; |
| | | return n |
| | | }) |
| | | this.componentData.tagField.insProductIds.select = [...this.componentData.tagField.insProductIds.select, ...children] |
| | | this.componentData.selectField.insProductIds.select = [...this.componentData.selectField.insProductIds.select, ...children] |
| | | return m |
| | | }) |
| | | this.options.forEach(item => { |
| | | if (item.children.length == 0) { |
| | | item.children = null; |
| | | } else { |
| | | item.children.forEach(m => { |
| | | if (m.children.length == 0) { |
| | | m.children = null; |
| | | } else { |
| | | m.children.forEach(n => { |
| | | if (n.children && n.children.length == 0) { |
| | | n.children = null; |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }) |
| | | }, |
| | | handleClose() { |
| | | this.formData = {} |
| | | this.formData2 = { |
| | | imageUpload: '', |
| | | imageName: '' |
| | | } |
| | | this.dialogVisible = false; |
| | | this.upLoad = false; |
| | | }, |
| | | handleClose2() { |
| | | this.formData = {} |
| | | this.formData2 = { |
| | | imageUpload: '', |
| | | imageName: '' |
| | | } |
| | | this.dialogVisible2 = false; |
| | | this.upLoad = false; |
| | | }, |
| | | selectAllByOne(row) { |
| | | this.isUp = true |
| | | //æå¼å¼¹æ¡ |
| | | this.dialogVisible = true; |
| | | //row = ç¹å»å¯¹åºè¡å¼ |
| | | //å¤å¶ç»formData |
| | | this.formData = this.HaveJson(row); |
| | | console.log(row.insProductIds + 'valll'); |
| | | this.formData.insProductIds = row.insProductIds ? row.insProductIds.split(',') : []; |
| | | }, |
| | | isUpdate(row) { |
| | | //ä¿®æ¹ isUp 为档æ¡ä¿®æ¹ |
| | | this.isUp = false |
| | | //æå¼å¼¹æ¡ |
| | | this.dialogVisible = true; |
| | | //row = ç¹å»å¯¹åºè¡å¼ä¸è¡å¼ |
| | | //å¤å¶ç»formData |
| | | this.formData = this.HaveJson(row); |
| | | if (typeof (row.insProductIds) === 'number') { |
| | | row.insProductIds = row.insProductIds + '' |
| | | } |
| | | this.formData.insProductIds = row.insProductIds ? row.insProductIds.split(',') : []; |
| | | // å°æ¶é´æ ¼å¼ä¸ºyyyy-MM-dd è¿è¡è½¬æ¢ |
| | | const dateRegex = /^\d{4}-\d{2}-\d{2}$/ |
| | | Object.keys(this.formData).forEach(key => { |
| | | if(dateRegex.test(this.formData[key])) { |
| | | this.formData[key] = `${this.formData[key]} 00:00:00` |
| | | } |
| | | }) |
| | | }, |
| | | beforeUpload(file) { |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload.clearFiles() |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }, |
| | | onError(err, file, fileList) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | // ä¸ä¼ å¾çæå |
| | | handleSuccessUpImg(response,) { |
| | | if (response.code == 200) { |
| | | this.formData.imageUpload = response.data.url; |
| | | this.formData.imageName = response.data.name; |
| | | } |
| | | }, |
| | | handleSuccessUpImg2(response) { |
| | | if (response.code == 200) { |
| | | this.$nextTick(() => { |
| | | this.formData.imageUpload = response.data.url; |
| | | this.formData.imageName = response.data.name; |
| | | this.formData2.imageUpload = response.data.url; |
| | | this.formData2.imageName = response.data.name; |
| | | }) |
| | | } |
| | | }, |
| | | submitForm() { |
| | | if (!this.formData.deviceName) { |
| | | this.$message.error('æªè¾å
¥ä»ªå¨åç§°') |
| | | return |
| | | } |
| | | if (!this.formData.enDeviceName) { |
| | | this.$message.error('æªè¾å
¥ä»ªå¨åç§°EN') |
| | | return |
| | | } |
| | | if (!this.formData.specificationModel) { |
| | | this.$message.error('æªè¾å
¥è§æ ¼åå·') |
| | | return |
| | | } |
| | | if (!this.formData.managementNumber) { |
| | | this.$message.error('æªè¾å
¥ç®¡çç¼å·') |
| | | return |
| | | } |
| | | if (!this.formData.activationDate) { |
| | | this.$message.error('æªè¾å
¥å¯ç¨æ¥æ') |
| | | return |
| | | } |
| | | if (this.formData.deviceStatus === '' || this.formData.deviceStatus === null) { |
| | | this.$message.error('æªéæ©å½åç¶æ') |
| | | return |
| | | } |
| | | if (!this.formData.calibrationDate) { |
| | | this.$message.error('æªè¾å
¥æ ¡åå¨æï¼æï¼') |
| | | return |
| | | } |
| | | delete this.formData.createTime |
| | | delete this.formData.updateTime |
| | | delete this.formData.createUser |
| | | delete this.formData.updateUser |
| | | this.formData.insProductIds = this.formData.insProductIds ? this.formData.insProductIds.join() : '' |
| | | this.upLoad = true; |
| | | this.formData.authorizedPerson = JSON.stringify(this.formData.authorizedPerson) |
| | | console.log('this.formData',this.formData); |
| | | this.$axios.post(this.$api.deviceScope.upDeviceParameter, this.formData, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | this.upLoad = false |
| | | return |
| | | } |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.upLoad = false |
| | | this.refreshTable('page') |
| | | this.dialogVisible = false |
| | | }).catch(e => { |
| | | this.$message.error('ä¿®æ¹å¤±è´¥') |
| | | this.dialogVisible = false |
| | | this.upLoad = false |
| | | }) |
| | | }, |
| | | submitForm2() { |
| | | if (!this.formData2.deviceName) { |
| | | this.$message.error('æªè¾å
¥ä»ªå¨åç§°') |
| | | return |
| | | } |
| | | if (!this.formData2.enDeviceName) { |
| | | this.$message.error('æªè¾å
¥ä»ªå¨åç§°EN') |
| | | return |
| | | } |
| | | if (!this.formData2.specificationModel) { |
| | | this.$message.error('æªè¾å
¥è§æ ¼åå·') |
| | | return |
| | | } |
| | | if (!this.formData2.managementNumber) { |
| | | this.$message.error('æªè¾å
¥ç®¡çç¼å·') |
| | | return |
| | | } |
| | | if (!this.formData2.activationDate) { |
| | | this.$message.error('æªè¾å
¥å¯ç¨æ¥æ') |
| | | return |
| | | } |
| | | if (!this.formData2.deviceStatus) { |
| | | this.$message.error('æªéæ©å½åç¶æ') |
| | | return |
| | | } |
| | | if (!this.formData2.calibrationDate) { |
| | | this.$message.error('è¾å
¥æ ¡åå¨æï¼æï¼') |
| | | return |
| | | } |
| | | this.upLoad2 = true; |
| | | this.formData2.insProductIds = this.formData2.insProductIds.join() |
| | | this.$axios.post(this.$api.deviceScope.addDeviceParameter, this.formData2, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | this.upLoad2 = false |
| | | return |
| | | } |
| | | this.$message.success('æäº¤æå') |
| | | this.upLoad2 = false |
| | | this.refreshTable('page') |
| | | this.dialogVisible2 = false |
| | | this.formData2 = { |
| | | imageUpload: '', |
| | | imageName: '' |
| | | } |
| | | }).catch(e => { |
| | | this.$message.error('æäº¤å¤±è´¥') |
| | | this.dialogVisible2 = false |
| | | this.upLoad2 = false |
| | | }) |
| | | }, |
| | | handleConfig(row) { |
| | | let list = [] |
| | | if(row.insProductItem){ |
| | | list = row.insProductItem.split(';') |
| | | } |
| | | let list2 = [] |
| | | list.map((item) => { |
| | | const obj = Object.assign({ |
| | | deviceId: row.id, |
| | | insProductItem: item, |
| | | }) |
| | | list2.push(obj) |
| | | }) |
| | | this.tableList = list2 |
| | | this.deviceId = row.id |
| | | this.$nextTick(()=>{ |
| | | this.showData = true |
| | | }) |
| | | }, |
| | | closeDataVue() { |
| | | this.clickSidebar(this.clickNodeVal) |
| | | this.showData = false |
| | | }, |
| | | submitForm3() { |
| | | if (!this.configForm.ip) { |
| | | this.$message.error('请填åIP'); |
| | | return |
| | | } |
| | | if (!this.configForm.collectUrl) { |
| | | this.$message.error('请填åééå°å'); |
| | | return |
| | | } |
| | | if (!this.configForm.storageUrl) { |
| | | this.$message.error('请填åå¨åå°å'); |
| | | return |
| | | } |
| | | if (!this.configForm.refer) { |
| | | this.$message.error('请填ååç
§'); |
| | | return |
| | | } |
| | | if (!this.configForm.x) { |
| | | this.$message.error('请填åX'); |
| | | return |
| | | } |
| | | if (!this.configForm.y) { |
| | | this.$message.error('请填åY'); |
| | | return |
| | | } |
| | | |
| | | this.upLoad3 = true |
| | | this.$axios.post(this.$api.deviceScope.numberCollect, this.configForm, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | this.upLoad3 = false |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('æä½æå') |
| | | this.refreshTable('page') |
| | | this.dialogVisible3 = false |
| | | }).catch(e => { |
| | | this.$message.error('æä½å¤±è´¥') |
| | | this.dialogVisible3 = false |
| | | this.upLoad3 = false |
| | | }) |
| | | }, |
| | | // ç¹å»ä¾§è¾¹æ å·æ° |
| | | clickSidebar(clickNodeVal) { |
| | | this.laboratoryNameIsNull = false |
| | | // æ¯å¦åå¨valueï¼åå¨value代表为ä¸çº§ |
| | | if (!clickNodeVal.value) { |
| | | this.list = []; |
| | | this.componentData.entity.laboratoryName = null |
| | | this.componentData.entity.storagePoint = null |
| | | // çäº1代表为æ çä¸çº§ï¼label为é¨é¨ |
| | | if (clickNodeVal.label == 'å
¶ä»') { |
| | | this.laboratoryNameIsNull = true |
| | | this.refreshTable('page') |
| | | return |
| | | } |
| | | if (clickNodeVal.level == 1) { |
| | | this.componentData.entity.laboratoryName = clickNodeVal.label |
| | | // çäºäºçº§ãlabel为åå¨å°ç¹ |
| | | } else if (clickNodeVal.level == 2) { |
| | | // å
¶ä»è¡¨ç¤ºæ²¡æé
ç½®å®éªå®¤ï¼åªé
ç½®äºå°ç¹ |
| | | if (clickNodeVal.parent.label == 'å
¶ä»') { |
| | | this.laboratoryNameIsNull = true |
| | | } else { |
| | | this.componentData.entity.laboratoryName = clickNodeVal.parent.label |
| | | } |
| | | this.componentData.entity.storagePoint = clickNodeVal.label |
| | | } |
| | | this.refreshTable('page') |
| | | } |
| | | } |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | this.clickSidebar(newVal) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .role_manage { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | |
| | | .title { |
| | | line-height: 15px; |
| | | } |
| | | |
| | | .search { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | .search_thing { |
| | | width: 17em; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 110px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 110px); |
| | | } |
| | | |
| | | .table { |
| | | margin-top: 12px; |
| | | background-color: #fff; |
| | | height: calc(100vh - 17em); |
| | | } |
| | | |
| | | .el-form-item { |
| | | margin-bottom: 16px; |
| | | } |
| | | |
| | | .picName { |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | word-break: break-all; |
| | | width: 120px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- ä½ä¸æå¯¼ä¹¦ --> |
| | | <template> |
| | | <div> |
| | | <div style="width:100%;height:30px;margin:5px 0px"> |
| | | <el-row> |
| | | <el-col :span="12" style="text-align: left;"> |
| | | <p style="line-height: 30px;">ä½ä¸æå¯¼ä¹¦</p> |
| | | </el-col> |
| | | <el-col :span="12" style="text-align: right;"> |
| | | <el-button size="small" type="primary" @click="getList">å·æ°</el-button> |
| | | <el-button size="small" type="primary" @click="dialogVisible = true">åæ§ç³è¯·</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <el-table :data="tableData" border height="calc(100vh - 18em)"> |
| | | <el-table-column type="index" label="åºå·" width="120"> |
| | | <template v-slot="scope"> |
| | | <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ç³è¯·ç¼å·" min-width="150" prop="applicationNumber"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" min-width="150" prop="deviceName"></el-table-column> |
| | | <el-table-column label="设å¤ç¼å·" min-width="150" prop="deviceNumber"></el-table-column> |
| | | <el-table-column label="设å¤åå·" min-width="150" prop="deviceModel"></el-table-column> |
| | | <el-table-column label="æä»¶ç¼å·" min-width="150" prop="documentNumber"></el-table-column> |
| | | <el-table-column label="æä»¶åå" min-width="150" prop="fileName"></el-table-column> |
| | | <el-table-column label="ææ¡£è¯´æ" min-width="150" prop="documentNote"></el-table-column> |
| | | <el-table-column label="ä¸ä¼ 人" min-width="150" prop="uploaderName"></el-table-column> |
| | | <el-table-column label="ä¸ä¼ æ¶é´" min-width="150" prop="updateTime"></el-table-column> |
| | | <el-table-column label="çææ¶é´" min-width="150" prop="entryIntoForceTime"></el-table-column> |
| | | <el-table-column label="审æ¹äºº" min-width="150" prop="approverName"></el-table-column> |
| | | <el-table-column label="审æ¹ç¶æ" min-width="150" prop="status"> |
| | | <template v-slot="scope"> |
| | | {{scope.row.status === true ? 'éè¿' : scope.row.status === false ? 'ä¸éè¿' : 'æªå®¡æ ¸'}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" min-width="180" fixed="right" prop="name"> |
| | | <template v-slot="scope"> |
| | | <el-button type="text" size="small" @click="downloadFile(scope.row.fileSystemName)">ä¸è½½</el-button> |
| | | <el-button type="text" size="small" style="color: red;" @click="deleteHomeworkGuidebook(scope.row)">å é¤</el-button> |
| | | <el-button type="text" size="small" @click="instructionEditFun(scope.row)">ç¼è¾</el-button> |
| | | <el-button type="text" size="small" @click="approval(scope.row)">审æ¹</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="1" |
| | | :page-sizes="[10, 20, 30, 50, 100]" :page-size="search.size" |
| | | layout="->,total, sizes, prev, pager, next, jumper" |
| | | :total="search.total"> |
| | | </el-pagination> |
| | | <el-dialog :visible.sync="dialogVisible" title="åæ§ç³è¯·" width="60%"> |
| | | <div style="height: 60vh; overflow-y: auto; overflow-x: hidden;"> |
| | | <el-form ref="form1" label-width="110px" :model="instructionForm"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç³è¯·ç¼å·:"> |
| | | <el-input v-model="instructionForm.applicationNumber" disabled size="small" clearable></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="éä»¶ï¼" style="float: left;"> |
| | | <el-upload ref="uploadFile" :action="action" :before-remove="beforeRemove" :file-list="fileList1" |
| | | :headers="headers" |
| | | :limit="1" :on-error="onError" :on-exceed="handleExceed" :on-remove="handleRemove1" |
| | | :on-success="onSuccess1" |
| | | class="upload-demo" multiple> |
| | | <el-button size="small" type="primary">ç¹å»ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç³è¯·é¨é¨:"> |
| | | <el-input v-model="instructionForm.applicationDepartment" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="责任人:"> |
| | | <el-input v-model="instructionForm.personLiable" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="åæ§ç³è¯·è¯´æ:" prop="controlledApplicationDescription" |
| | | :rules="[{required: true, message: '请è¾å
¥åæ§ç³è¯·è¯´æ', trigger: 'blur'}]"> |
| | | <el-input v-model="instructionForm.controlledApplicationDescription" type="textarea" |
| | | clearable></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <div style="text-align: right; margin-bottom: 10px"> |
| | | <el-button size="small" type="primary" @click="dialogVisible1 = true">æ·»å åæ§æä»¶</el-button> |
| | | <el-button size="small" @click="delFile">å é¤</el-button> |
| | | </div> |
| | | <el-table :data="documentTableData" border style="width: 100%;" |
| | | tooltip-effect="dark" |
| | | :row-key="getRowKey" |
| | | @selection-change="handleSelectionChange" height="30em"> |
| | | <el-table-column type="selection" width="55%"> |
| | | </el-table-column> |
| | | <el-table-column label="åºå·" prop="id" type="index" width="60"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" prop="deviceName" show-overflow-tooltip min-width="125"></el-table-column> |
| | | <el-table-column label="设å¤ç¼å·" prop="deviceNumber" show-overflow-tooltip min-width="125"></el-table-column> |
| | | <el-table-column label="设å¤åå·" prop="deviceModel" show-overflow-tooltip min-width="125"></el-table-column> |
| | | <el-table-column label="æä»¶ç¼å·" prop="documentNumber" show-overflow-tooltip |
| | | min-width="125"></el-table-column> |
| | | <el-table-column label="æä»¶åç§°" prop="fileName" show-overflow-tooltip min-width="125"></el-table-column> |
| | | <el-table-column label="ä¸ä¼ 人" prop="author" show-overflow-tooltip min-width="125"></el-table-column> |
| | | <el-table-column label="ä¸ä¼ æ¶é´" prop="updateTime" show-overflow-tooltip min-width="125"></el-table-column> |
| | | <el-table-column min-width="100" label="æä½" fixed="right"> |
| | | <template #default="{row, $index}"> |
| | | <el-button type="text" size="small" @click="downloadFile(row.fileSystemName)">ä¸è½½</el-button> |
| | | <el-button type="text" @click="editFun(row, $index)">ç¼è¾</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <span slot="footer"> |
| | | <el-button @click="dialogVisible = false" size="small">å æ¶</el-button> |
| | | <el-button size="small" type="primary" @click="submitFun">æäº¤</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="dialogVisible1" title="æ·»å 设å¤ä½ä¸æå¯¼ä¹¦" width="40%"> |
| | | <div style="height: 50vh;"> |
| | | <el-form ref="form" :model="form" label-width="90px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æä»¶ç±»å:" prop="documentType" |
| | | :rules="[{required: true, message: '请è¾å
¥æä»¶ç±»å', trigger: 'blur'}]"> |
| | | <el-input v-model="form.documentType" clearable size="small" placeholder="请è¾å
¥æä»¶ç±»å"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="设å¤åç§°:" prop="deviceName" |
| | | :rules="[{required: true, message: 'è¯·éæ©è®¾å¤', trigger: 'change'}]"> |
| | | <el-select v-model="form.deviceName" size="small" clearable style="width: 100%" |
| | | placeholder="è¯·éæ©è®¾å¤åç§°" |
| | | @change="onDeviceNameChange" filterable> |
| | | <el-option v-for="item in deviceNameOption" |
| | | :key="item.id" |
| | | :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ææ¡£ç¼å·:" prop="documentNumber" |
| | | :rules="[{required: true, message: '请è¾å
¥ææ¡£ç¼å·', trigger: 'blur'}]"> |
| | | <el-input v-model="form.documentNumber" size="small" clearable placeholder="请è¾å
¥ææ¡£ç¼å·"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="管çç¼å·:"> |
| | | <el-input v-model="form.deviceNumber" size="small" clearable disabled |
| | | placeholder="请è¾å
¥ç®¡çç¼å·"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æä»¶çæ¬:" prop="documentVersion" |
| | | :rules="[{required: true, message: '请è¾å
¥æä»¶çæ¬', trigger: 'blur'}]"> |
| | | <el-input v-model="form.documentVersion" size="small" placeholder="请è¾å
¥æä»¶çæ¬" clearable></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä½è
:" prop="author" |
| | | :rules="[{required: true, message: '请è¾å
¥ä½è
', trigger: 'blur'}]"> |
| | | <el-input v-model="form.author" size="small" clearable></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æäº¤æ¥æ:" prop="submitDate" |
| | | :rules="[{required: true, message: 'è¯·éæ©æäº¤æ¥æ', trigger: 'change'}]"> |
| | | <el-date-picker v-model="form.submitDate" format="yyyy-MM-dd" style="width: 100%" size="small" clearable |
| | | placeholder="éæ©æ¥æ" |
| | | type="date" value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ææ¡£è¯´æ:" prop="documentNote" |
| | | :rules="[{required: true, message: '请è¾å
¥ææ¡£è¯´æ', trigger: 'blur'}]"> |
| | | <el-input v-model="form.documentNote" placeholder="请è¾å
¥ææ¡£è¯´æ" type="textarea" clearable></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="éä»¶ï¼" style="float: left;"> |
| | | <el-upload ref="uploadFile" :action="action" :before-remove="beforeRemove" :file-list="fileList" |
| | | :headers="headers" |
| | | :limit="1" :on-error="onError" :on-exceed="handleExceed" :on-remove="handleRemove" |
| | | :on-success="onSuccess" |
| | | class="upload-demo" multiple> |
| | | <el-button size="small" type="primary">ç¹å»ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <span slot="footer"> |
| | | <el-button @click="dialogVisible1 = false" size="small">å æ¶</el-button> |
| | | <el-button type="primary" @click="addFile" size="small">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import fileDownload from "../../../util/file"; |
| | | |
| | | export default { |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | name: '', |
| | | components: {}, |
| | | data() { |
| | | return { |
| | | search: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0 |
| | | }, |
| | | dialogVisible: false, |
| | | dialogVisible1: false, |
| | | value: '', |
| | | selectRow: null, |
| | | device: null, |
| | | form: { |
| | | documentType: '', |
| | | documentNumber: '', |
| | | deviceName: '', |
| | | deviceModel: '', |
| | | deviceNumber: '', |
| | | fileName: '', |
| | | fileSystemName: '', |
| | | submitDate: '', |
| | | documentNote: '', |
| | | }, |
| | | tableData: [], |
| | | documentTableData: [], |
| | | formData: {}, |
| | | fileList: [], |
| | | fileList1: [], |
| | | laboratoryNameIsNull: false, |
| | | devices: [], //设å¤åè¡¨æ°æ® |
| | | deviceNameOption: [], //设å¤åç§°ä¸ææ¡æ°æ® |
| | | entity: { |
| | | deviceName: null, |
| | | laboratoryName: '', |
| | | storagePoint: '' |
| | | }, |
| | | selectedRow: [], |
| | | instructionForm: { |
| | | applicationNumber: '', // ç³è¯·ç¼å· |
| | | applicationDepartment: '', // ç³è¯·é¨é¨ |
| | | personLiable: '', // 责任人 |
| | | controlledApplicationDescription: '', // åæ§ç³è¯·è¯´æ |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getAllDevice(); |
| | | this.getList() |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal) { |
| | | this.getList() |
| | | this.clickSidebar(newVal) |
| | | } |
| | | }, |
| | | dialogVisible1(newVal) { |
| | | this.form.deviceName = this.clickNodeVal.label |
| | | this.onDeviceNameChange() |
| | | if (newVal === false) { |
| | | this.$refs.form.resetFields() |
| | | // this.form = {} |
| | | this.fileList = [] |
| | | } |
| | | }, |
| | | dialogVisible(newVal) { |
| | | if (newVal === false) { |
| | | this.instructionForm = {} |
| | | this.documentTableData = [] |
| | | this.fileList1 = [] |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | approval(row) { |
| | | this.$confirm('æ¯å¦å®¡æ¹éè¿ï¼', 'æç¤º', { |
| | | confirmButtonText: 'éè¿', |
| | | cancelButtonText: 'ä¸éè¿', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.approvalFun(row.id, true) |
| | | }).catch(() => { |
| | | this.approvalFun(row.id, false) |
| | | }); |
| | | }, |
| | | approvalFun(id, status) { |
| | | this.$axios.get(this.$api.deviceCheck.approvalOfHomeworkInstructionManual + "?id=" + id + "&status=" + status).then(res => { |
| | | this.getList() |
| | | }) |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'æä½æå!' |
| | | }); |
| | | }, |
| | | getRowKey (row) { |
| | | return row.index |
| | | }, |
| | | deleteHomeworkGuidebook(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceCheck.homeworkGuidebook + "?id=" + row.id + "&instructionId=" + row.instructionId).then(res => { |
| | | this.$message.success('å 餿åï¼') |
| | | this.getList() |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | downloadFile(fileName) { |
| | | let state = /\.(jpg|jpeg|png|gif)$/i.test(fileName) |
| | | if (state) { |
| | | let url = this.javaApi + '/img/' + fileName; |
| | | fileDownload.downloadIamge(url, fileName) |
| | | } else { |
| | | const url = this.javaApi+'/word/'+ fileName |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = fileName; |
| | | link.click(); |
| | | this.$message.success('ä¸è½½æå') |
| | | } |
| | | }, |
| | | instructionEditFun(row) { |
| | | this.dialogVisible = true |
| | | this.$axios.get(this.$api.deviceCheck.homeworkGuidebookEditor + "?instructionId=" + row.instructionId).then(res => { |
| | | if (res.code == 200) { |
| | | this.instructionForm = res.data.instruction; |
| | | if (this.instructionForm.fileSystemName) { |
| | | this.fileList1.push({name: this.instructionForm.fileName}) |
| | | } |
| | | this.documentTableData = res.data.list; |
| | | // å é¤ç¨ |
| | | this.documentTableData.forEach((v, k) => { |
| | | v.index = k |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | handleSizeChange(val) { |
| | | this.search.size = val |
| | | this.getList() |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.search.current = val |
| | | this.getList() |
| | | }, |
| | | submitFun() { |
| | | this.$refs.form1.validate((valid) => { |
| | | if (valid) { |
| | | this.instructionForm.feTempHumRecordList = this.documentTableData |
| | | this.$axios.post(this.$api.deviceCheck.newHomeworkGuidebookAdded, this.instructionForm, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æä½æåï¼') |
| | | this.dialogVisible = false |
| | | this.getList() |
| | | } |
| | | }) |
| | | } else { |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | clickSidebar(clickNodeVal) { |
| | | this.laboratoryNameIsNull = false |
| | | // æ¯å¦åå¨valueï¼åå¨value代表为ä¸çº§ |
| | | if (!clickNodeVal.value) { |
| | | this.list = []; |
| | | this.entity.laboratoryName = null |
| | | this.entity.storagePoint = null |
| | | // çäº1代表为æ çä¸çº§ï¼label为é¨é¨ |
| | | if (clickNodeVal.label === 'å
¶ä»') { |
| | | this.laboratoryNameIsNull = true |
| | | this.getAllDevice() |
| | | return |
| | | } |
| | | if (clickNodeVal.level === 1) { |
| | | this.entity.laboratoryName = clickNodeVal.label |
| | | // çäºäºçº§ãlabel为åå¨å°ç¹ |
| | | } else if (clickNodeVal.level === 2) { |
| | | // å
¶ä»è¡¨ç¤ºæ²¡æé
ç½®å®éªå®¤ï¼åªé
ç½®äºå°ç¹ |
| | | if (clickNodeVal.parent.label === 'å
¶ä»') { |
| | | this.laboratoryNameIsNull = true |
| | | } else { |
| | | this.entity.laboratoryName = clickNodeVal.parent.label |
| | | } |
| | | this.entity.storagePoint = clickNodeVal.label |
| | | } |
| | | this.getAllDevice() |
| | | } |
| | | }, |
| | | //æ°å¢ |
| | | addFile() { |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid) { |
| | | if (this.form.index !== undefined) { |
| | | this.$set(this.documentTableData, this.form.index, this.form) |
| | | this.dialogVisible1 = false; |
| | | this.$message.success('ä¿®æ¹æå'); |
| | | } else { |
| | | this.documentTableData.push(this.form); |
| | | // å é¤ç¨ |
| | | this.documentTableData.forEach((v, k) => { |
| | | v.index = k |
| | | }) |
| | | this.dialogVisible1 = false; |
| | | this.$message.success('æ·»å æå'); |
| | | } |
| | | } else { |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | editFun(row, index) { |
| | | this.form = {...row} |
| | | // æ´æ°ç¨ |
| | | this.form.index = index; |
| | | // åæ¾å表 |
| | | if (this.form.fileSystemName) { |
| | | this.fileList.push({name: this.form.fileName}) |
| | | } |
| | | this.dialogVisible1 = true |
| | | }, |
| | | handleSelectionChange(selected) { |
| | | this.selectedRow = selected |
| | | }, |
| | | async delFile() { |
| | | if (this.selectedRow.length === 0) { |
| | | this.$message.error('è¯·éæ©è¦å é¤çé项'); |
| | | return; |
| | | } |
| | | // å é¤ä¿åå¥½çæ°æ® |
| | | let ids = this.selectedRow |
| | | .filter(item => item.id!== undefined) |
| | | .map(item => item.id).join(','); |
| | | //æé误 |
| | | const res = await this.$axios.get(this.$api.deviceCheck.deleteHomeworkGuidebook + '?ids=' + ids); |
| | | if (res.code === 200) { |
| | | // å é¤è§å¾çæ°æ® |
| | | for (const resKey in this.selectedRow) { |
| | | this.documentTableData = this.documentTableData.filter(item => item.index === this.selectedRow[resKey].index) |
| | | } |
| | | this.$message.success({ |
| | | message: 'å 餿å', |
| | | type: 'success' |
| | | }); |
| | | } |
| | | }, |
| | | onSuccess(response, file, fileList) { |
| | | this.form.fileName = file.name; |
| | | this.form.fileSystemName = response.data; |
| | | }, |
| | | onSuccess1(response, file, fileList) { |
| | | this.instructionForm.fileName = file.name; |
| | | this.instructionForm.fileSystemName = response.data; |
| | | }, |
| | | onError(error, file, fileList) { |
| | | this.$message.error('ä¸ä¼ 失败:', error, file, fileList); |
| | | }, |
| | | handleRemove(file, fileList) { |
| | | this.form.fileName = '' |
| | | this.form.fileSystemName = '' |
| | | }, |
| | | handleRemove1(file, fileList) { |
| | | this.form.fileName = '' |
| | | this.form.fileSystemName = '' |
| | | }, |
| | | beforeRemove(file) { |
| | | return this.$confirm(`ç¡®å®ç§»é¤ ${file.name}ï¼`) |
| | | }, |
| | | handleExceed(files, fileList) { |
| | | this.$message.warning(`å½åéå¶éæ© 1 个æä»¶ï¼æ¬æ¬¡éæ©äº ${files.length} 个æä»¶ã`); |
| | | }, |
| | | getList() { |
| | | this.$axios.get(this.$api.deviceCheck.pageByPageQueryOfHomeworkInstructions + "?size=" + this.search.size + "¤t=" + this.search.current).then(res => { |
| | | if (res.code == 200) { |
| | | this.tableData = res.data.records; |
| | | this.search.total = res.data.total |
| | | } |
| | | }) |
| | | }, |
| | | getAllDevice() { |
| | | this.$axios.post(this.$api.deviceScope.selectDeviceParameter + "?laboratoryNameIsNull=" + this.laboratoryNameIsNull, { |
| | | page: { |
| | | current: 1, |
| | | size: -1 |
| | | }, |
| | | entity: this.entity |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.devices = res.data.body.records; |
| | | this.updateDeviceNameOptions(); |
| | | } |
| | | }) |
| | | }, |
| | | // æ´æ°è®¾å¤åç§°ä¸ææ¡çé项 |
| | | updateDeviceNameOptions() { |
| | | this.deviceNameOption = this.devices.map(device => ({ |
| | | value: device.deviceName, |
| | | label: device.deviceName |
| | | })); |
| | | }, |
| | | // 设å¤åç§°æ¹åæ¶è§¦å |
| | | onDeviceNameChange() { |
| | | // æ ¹æ®éä¸ç设å¤åç§°ï¼æ´æ°ç®¡çç¼å·ä¸ææ¡çé项 |
| | | const selectedDevice = this.devices.find(device => device.deviceName === this.form.deviceName); |
| | | if (selectedDevice) { |
| | | this.form.deviceNumber = selectedDevice.managementNumber; |
| | | this.form.deviceModel = selectedDevice.specificationModel; |
| | | this.form.deviceId = selectedDevice.id |
| | | } |
| | | }, |
| | | }, |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | 'token': sessionStorage.getItem('token') |
| | | } |
| | | }, |
| | | action() { |
| | | return this.javaApi + this.$api.personnel.saveCNASFile |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | h4 { |
| | | font-weight: 400; |
| | | font-size: 16px; |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | margin: 10px 0; |
| | | } |
| | | </style> |
| | |
| | | <!-- 设å¤è¿è¡æ»è§ --> |
| | | <template> |
| | | <div class="page"> |
| | | <echart-module :id="'page-left'" :config="chartConfig" :datas="chartData" class="page-left"></echart-module> |
| | | <div class="page-right"> |
| | | <div class="form-item"> |
| | | <label>æ
鿬¡æ°</label> |
| | | <span>0</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æè¿æ
鿥æ</label> |
| | | <el-date-picker |
| | | v-model="form.value1" |
| | | type="date" |
| | | size="small" |
| | | placeholder="éæ©æ¥æ" style="width: calc(100% - 200px);" readonly> |
| | | </el-date-picker> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æè¿æ ¡åæ¥æ</label> |
| | | <el-date-picker |
| | | v-model="form.value1" |
| | | type="date" |
| | | size="small" |
| | | placeholder="éæ©æ¥æ" style="width: calc(100% - 200px);" readonly> |
| | | </el-date-picker> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>䏿¬¡æ ¡åæ¥æ</label> |
| | | <el-date-picker |
| | | v-model="form.value1" |
| | | type="date" |
| | | size="small" |
| | | placeholder="éæ©æ¥æ" style="width: calc(100% - 200px);" readonly> |
| | | </el-date-picker> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ ¡åæ»ç»è®º</label> |
| | | <el-radio-group v-model="form.value1" disabled> |
| | | <el-radio :label="0">åæ ¼</el-radio> |
| | | <el-radio :label="1">ä¸åæ ¼</el-radio> |
| | | <el-radio :label="2">å
¶ä»</el-radio> |
| | | </el-radio-group> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æè¿æ ¸æ¥æ¥æ</label> |
| | | <el-date-picker |
| | | v-model="form.value1" |
| | | type="date" |
| | | size="small" |
| | | placeholder="éæ©æ¥æ" style="width: calc(100% - 200px);" readonly> |
| | | </el-date-picker> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>䏿¬¡æ ¸æ¥æ¥æ</label> |
| | | <el-date-picker |
| | | v-model="form.value1" |
| | | type="date" |
| | | size="small" |
| | | placeholder="éæ©æ¥æ" style="width: calc(100% - 200px);" readonly> |
| | | </el-date-picker> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ ¸æ¥æ»ç»è®º</label> |
| | | <el-radio-group v-model="form.value1" disabled> |
| | | <el-radio :label="0">åæ ¼</el-radio> |
| | | <el-radio :label="1">ä¸åæ ¼</el-radio> |
| | | <el-radio :label="2">å
¶ä»</el-radio> |
| | | </el-radio-group> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æè¿ç»´æ¤æ¥æ</label> |
| | | <el-date-picker |
| | | v-model="form.value1" |
| | | type="date" |
| | | size="small" |
| | | placeholder="éæ©æ¥æ" style="width: calc(100% - 200px);" readonly> |
| | | </el-date-picker> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>䏿¬¡ç»´æ¤æ¥æ</label> |
| | | <el-date-picker |
| | | v-model="form.value1" |
| | | type="date" |
| | | size="small" |
| | | placeholder="éæ©æ¥æ" style="width: calc(100% - 200px);" readonly> |
| | | </el-date-picker> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>ç»´æ¤ç±»å</label> |
| | | <el-radio-group v-model="form.value1" disabled> |
| | | <el-radio :label="0">使ç¨ååç»´æ¤</el-radio> |
| | | <el-radio :label="1">计åä¸ç»´æ¤</el-radio> |
| | | </el-radio-group> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æµé项ç®</label> |
| | | <span>1111111</span> |
| | | <div> |
| | | <div class="page"> |
| | | <echart-module id="'page-left'" :config="chartConfig" :datas="chartData" class="page-left"></echart-module> |
| | | <div class="page-right"> |
| | | <div class="form-item"> |
| | | <label>å¯ç¨æ¶é¿(å¹´)</label> |
| | | <span>{{deviceData.usedYears}}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ
鿬¡æ°</label> |
| | | <span>{{deviceData.faultCount}}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æè¿æ
鿥æ</label> |
| | | <span>{{ deviceData.faultDate }}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æè¿æ ¡åæ¥æ</label> |
| | | <span>{{deviceData.lastCalibrationDate }}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>䏿¬¡æ ¡åæ¥æ</label> |
| | | <span>{{deviceData.nextCalibrationDate}}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ ¡åæ»ç»è®º</label> |
| | | <span :class="formatColorStyle(deviceData.calibrateStatus)">{{ deviceData.calibrateStatus }}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æè¿æ ¸æ¥æ¥æ</label> |
| | | <span>{{deviceData.lastExamineDate}}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>䏿¬¡æ ¸æ¥æ¥æ</label> |
| | | <span>{{deviceData.nextExamineDate}}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æ ¸æ¥æ»ç»è®º</label> |
| | | <span :class="formatColorStyle(deviceData.examineStatus)">{{deviceData.examineStatus}}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>设å¤è¿è¡ç¶æ</label> |
| | | <span :class="formatColorStyle(deviceData.deviceStatus)">{{deviceData.deviceStatus}}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æè¿ç»´æ¤æ¥æ</label> |
| | | <span>{{ deviceData.maintenanceDate }}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>䏿¬¡ç»´æ¤æ¥æ</label> |
| | | <span>{{ deviceData.nextMaintenanceDate }}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>ç»´æ¤ç±»å</label> |
| | | <span>{{ deviceData.maintenanceType }}</span> |
| | | </div> |
| | | <div class="form-item"> |
| | | <label>æµé项ç®</label> |
| | | <span>{{ deviceData.insProduct }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | <script> |
| | | import EchartModule from '../../tool/echart.vue' |
| | | |
| | | export default { |
| | | components: {EchartModule}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | data(){ |
| | | return { |
| | | chartConfig:{ |
| | |
| | | type:'gauge' |
| | | }, |
| | | chartData:{ |
| | | xData:[], |
| | | yData:[ |
| | | { |
| | | title:'任塿¥æ¶é', |
| | | data:[] |
| | | } |
| | | ] |
| | | formatter: "å·²è¿æ ¡åæ¥æç¾åæ¯: {c}%", |
| | | color:[ |
| | | [0.3, '#21a700'], |
| | | [0.7, '#0066ff'], |
| | | [1, '#d80000'] |
| | | ], |
| | | value: 0, |
| | | }, |
| | | form:{ |
| | | value1:'' |
| | | }, |
| | | formData:{ |
| | | usedAge:12 |
| | | }, |
| | | //è®¾å¤æ°æ®æ¶é |
| | | deviceData:{ |
| | | |
| | | } |
| | | } |
| | | }, |
| | | mounted(){ |
| | | //è·åè®¾å¤æ
éçä¿¡æ¯ |
| | | this.getDeviceInfo(this.clickNodeVal.value); |
| | | }, |
| | | methods:{ |
| | | formatColorStyle(status){ |
| | | if(status==null || status=="" || status==undefined){ |
| | | return "" |
| | | } |
| | | let styleStr = '' |
| | | switch(status){ |
| | | case"åæ ¼": |
| | | styleStr = 'success' |
| | | break; |
| | | case"ä¸åæ ¼": |
| | | styleStr = 'failed' |
| | | break; |
| | | case"å
¶ä»": |
| | | styleStr = 'other' |
| | | break; |
| | | case"æ£å¸¸": |
| | | styleStr = 'success' |
| | | break; |
| | | case"ç»´ä¿®": |
| | | styleStr = 'other' |
| | | break; |
| | | case"åç¨": |
| | | styleStr = 'stop' |
| | | break; |
| | | case"æ¥åº": |
| | | styleStr = 'failed' |
| | | break; |
| | | } |
| | | return styleStr; |
| | | }, |
| | | //è·å设å¤è¿è¡æ»è§ä¿¡æ¯ |
| | | getDeviceInfo(deviceId){ |
| | | this.$axios.get(this.$api.deviceFault.getDevice+"/"+deviceId).then(res=>{ |
| | | if(res.code==200){ |
| | | this.deviceData=res.data |
| | | this.chartData.value = res.data.progress |
| | | } |
| | | }) |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | // æ¯å¦åå¨valueï¼åå¨value代表为ä¸çº§ |
| | | if (this.clickNodeVal.value) { |
| | | this.getDeviceInfo(newVal.value) |
| | | } |
| | | } |
| | | } |
| | |
| | | <style scoped> |
| | | .page{ |
| | | width: 100%; |
| | | height: 100%; |
| | | height: 100vh; |
| | | display: flex; |
| | | } |
| | | .page-left{ |
| | |
| | | } |
| | | .page-right{ |
| | | flex: 1; |
| | | height:calc(100% - 200px); |
| | | overflow: scroll; |
| | | /* background: red; */ |
| | | } |
| | | .form-item{ |
| | |
| | | text-align: right; |
| | | margin-right: 20px; |
| | | } |
| | | >>>.el-radio__input.is-disabled+span.el-radio__label{ |
| | | .el-radio__input.is-disabled+span.el-radio__label{ |
| | | color: #606266 !important; |
| | | } |
| | | .success{ |
| | | color:#21a700 |
| | | } |
| | | .failed{ |
| | | color:#d80000 |
| | | } |
| | | .other{ |
| | | color: #e8a849; |
| | | } |
| | | .stop{ |
| | | color: #909399; |
| | | } |
| | | </style> |
| | |
| | | <!-- 使ç¨è®°å½ --> |
| | | <template> |
| | | <div>设å¤è®°å½</div> |
| | | <div> |
| | | <div class="search"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æ ·åç¼å·ï¼</div> |
| | | <el-input v-model="search.sampleCode" clearable placeholder="请è¾å
¥" size="small" style="width: 70%;" |
| | | @keyup.enter.native="getTableList(clickNodeVal.value)"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="padding-left: 30px;"> |
| | | <el-button size="small" @click="resetSearch">é ç½®</el-button> |
| | | <el-button size="small" type="primary" @click="getTableList(clickNodeVal.value)">æ¥ è¯¢</el-button> |
| | | </div> |
| | | <div class="btns"> |
| | | <el-button size="small" type="primary" @click="dialogVisible = true, openAdd()">æ° å»º</el-button> |
| | | <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">导 åº</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="tables" style="margin-top: 10px;"> |
| | | <el-table ref="Recordtable" :data="formParamList" height="calc(100vh - 20em)"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column label="åºå·" type="index" width="120"> |
| | | <template v-slot="scope"> |
| | | <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ ·åç¼å·" min-width="180" prop="sampleCode" /> |
| | | <el-table-column label="设å¤åç§°" min-width="150" prop="deviceName" /> |
| | | <el-table-column label="管çç¼å·" min-width="150" prop="managementNumber" /> |
| | | <!-- <el-table-column label="温度(°C)" min-width="120" prop="temperature" />--> |
| | | <!-- <el-table-column label="湿度(%RH)" min-width="120" prop="humidity" />--> |
| | | <el-table-column label="使ç¨å" min-width="120" prop="useBefore"> |
| | | <template v-slot="scope"> |
| | | {{ scope.row.useBefore === 1 ? 'æ£å¸¸' : '䏿£å¸¸' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="使ç¨å" min-width="120" prop="useAfter"> |
| | | <template v-slot="scope"> |
| | | {{ scope.row.useAfter === 1 ? 'æ£å¸¸' : '䏿£å¸¸' }} |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column label="å¼å¸¸æ
åµ" min-width="120" prop="abnormal" />--> |
| | | <el-table-column label="使ç¨å¼å§æ¥æ" min-width="150" prop="useStartDate" /> |
| | | <el-table-column label="使ç¨ç»ææ¥æ" min-width="150" prop="useEndDate" /> |
| | | <el-table-column label="使ç¨äºº" min-width="120" prop="usePerson" /> |
| | | <el-table-column label="夿³¨" min-width="120" prop="remark" /> |
| | | <!-- æä½æé® --> |
| | | <el-table-column fixed="right" label="æä½" width="150" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="showDetailsDialog('edit',scope.row)">ç¼è¾</el-button> |
| | | <el-button size="small" type="text" @click="showDetailsDialog('view',scope.row)">æ¥ç</el-button> |
| | | <el-button size="small" type="text" @click="handleDeleteClick(scope.$index, scope.row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange"> |
| | | </el-pagination> |
| | | </div> |
| | | <el-dialog :visible.sync="dialogVisible" title="仪å¨è®¾å¤ä½¿ç¨è®°å½è¡¨" top="5vh" width="55%"> |
| | | <el-form ref="form" :model="form" label-width="130px"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: true, message: 'æ ·åç¼å·', trigger: 'blur' }]" label="æ ·åç¼å·:" prop="sampleCode"> |
| | | <el-input v-model="form.sampleCode" :disabled="operationType === 'view'" size="small" style="width: 100%;"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤åç§°:" required> |
| | | <el-input v-model="form.deviceName" :disabled="operationType === 'view'" size="small" style="width: 100%;"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="管çç¼å·:" required> |
| | | <el-input v-model="form.managementNumber" :disabled="operationType === 'view'" size="small" style="width: 100%;"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <!-- <el-col :span="12">--> |
| | | <!-- <el-form-item :rules="[{ required: true, message: '请è¾å
¥æ¸©åº¦(°C)', trigger: 'blur' }]" label="温度(°C):"--> |
| | | <!-- prop="temperature">--> |
| | | <!-- <el-input v-model="form.temperature" :disabled="isShow" size="small" style="width: 100%;"></el-input>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-col>--> |
| | | <!-- <el-col :span="12">--> |
| | | <!-- <el-form-item :rules="[{ required: true, message: '请è¾å
¥æ¹¿åº¦(%RH)', trigger: 'blur' }]" label="湿度(%RH):"--> |
| | | <!-- prop="humidity">--> |
| | | <!-- <el-input v-model="form.humidity" :disabled="isShow" size="small" style="width: 100%;"></el-input>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-col>--> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: 'è¯·éæ©ä½¿ç¨å', trigger: 'change' }]" label="使ç¨å:" |
| | | prop="useBefore"> |
| | | <el-radio-group v-model="form.useBefore" :disabled="operationType === 'view'"> |
| | | <el-radio :label="1">æ£å¸¸</el-radio> |
| | | <el-radio :label="0">䏿£å¸¸</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: 'è¯·éæ©ä½¿ç¨å', trigger: 'change' }]" label="使ç¨å:" |
| | | prop="useAfter"> |
| | | <el-radio-group v-model="form.useAfter" :disabled="operationType === 'view'"> |
| | | <el-radio :label="1">æ£å¸¸</el-radio> |
| | | <el-radio :label="0">䏿£å¸¸</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <!-- <el-col v-if="form.useAfter === 0" :span="24">--> |
| | | <!-- <el-form-item :rules="[{ required: form.useAfter === 0, message: '请è¾å
¥å¼å¸¸æ
åµ', trigger: 'blur' }]" label="å¼å¸¸æ
åµ:"--> |
| | | <!-- prop="abnormal">--> |
| | | <!-- <el-input v-model="form.abnormal" :disabled="operationType === 'view'" size="small" style="width: 100%;"--> |
| | | <!-- type="textarea"></el-input>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-col>--> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: '请è¾å
¥ä½¿ç¨æ¥æ', trigger: 'blur' }]" label="ä½¿ç¨æ¥æ:" |
| | | prop="useDateList"> |
| | | <el-date-picker |
| | | v-model="form.useDateList" :disabled="operationType === 'view'" end-placeholder="ç»ææ¥æ" format="yyyy-MM-dd HH:mm:ss" |
| | | size="small" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | style="width:100%" |
| | | type="datetimerange" |
| | | value-format="yyyy-MM-dd HH:mm:ss"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: '请è¾å
¥ä½¿ç¨äºº', trigger: 'change' }]" label="使ç¨äºº:" |
| | | prop="usePersonId"> |
| | | <el-select @change="usePersonName" v-model="form.usePersonId" :disabled="operationType === 'view'" placeholder="è¯·éæ©" size="small" style="width: 100%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="夿³¨:"> |
| | | <el-input v-model="form.remark" :disabled="operationType === 'view'" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="dialogVisible = false">å æ¶</el-button> |
| | | <el-button v-if="operationType !== 'view'" type="primary" @click="saveRecord">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | search: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | sampleCode: '' |
| | | }, |
| | | responsiblePersonList: {}, |
| | | isShow: false, |
| | | outLoading: false, |
| | | userList: [], |
| | | form: { |
| | | // deviceId:'', |
| | | processNumber: '', |
| | | deviceName: '', |
| | | managementNumber: '', |
| | | //温度 |
| | | temperature: '', |
| | | //湿度 |
| | | humidity: '', |
| | | //使ç¨å |
| | | useBefore: 1, |
| | | //使ç¨å |
| | | useAfter: 1, |
| | | //å¼å¸¸æ
åµ |
| | | abnormal: '', |
| | | useDateList: [], |
| | | //ä½¿ç¨æ¥æ |
| | | useStartDate: null, |
| | | useEndDate: null, |
| | | //使ç¨äºº |
| | | usePerson: '', |
| | | usePersonId: '', |
| | | //夿³¨ |
| | | remark: '', |
| | | }, |
| | | dialogVisible: false, |
| | | operationType: '', |
| | | formParamList: [], |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | methods: { |
| | | handleSizeChange(val) { |
| | | this.search.size = val |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.search.current = val |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | resetSearch() { |
| | | this.search = { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | sampleCode: '', |
| | | } |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | async getTableList(deviceId) { |
| | | await this.$axios.get(this.$api.deviceCheck.deviceRecordPage + "?deviceId=" + deviceId + "&size=" + this.search.size + "¤t=" + this.search.current + "&sampleCode=" + this.search.sampleCode).then(res => { |
| | | if (res.code == 200) { |
| | | this.formParamList = res.data.records |
| | | this.search.total = res.data.total |
| | | } |
| | | }) |
| | | }, |
| | | //å¯¼åº |
| | | handleDown() { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceCheck.exportUseRecord + "?deviceId=" + this.clickNodeVal.value, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤ä½¿ç¨è®°å½.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤ä½¿ç¨è®°å½.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | //æ°å»º |
| | | openAdd() { |
| | | this.operationType = 'add' |
| | | this.getUserList() |
| | | this.$axios.get(this.$api.deviceScope.selectDeviceByCode + '?id=' + this.clickNodeVal.value).then(res => { |
| | | this.form.deviceName = res.data.deviceName |
| | | this.form.managementNumber = res.data.managementNumber |
| | | this.$nextTick(() => { |
| | | this.$refs['form'].clearValidate() |
| | | }) |
| | | }); |
| | | }, |
| | | usePersonName (value) { |
| | | const index = this.userList.findIndex(item => item.id === value) |
| | | if (index > -1) { |
| | | this.form.usePerson = this.userList[index].name |
| | | } |
| | | }, |
| | | //确认添å è®°å½ |
| | | saveRecord() { |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid) { |
| | | this.form.useStartDate = this.form.useDateList[0] |
| | | this.form.useEndDate = this.form.useDateList[1] |
| | | this.form.deviceId = this.clickNodeVal.value |
| | | if (this.operationType === 'add') { |
| | | this.$axios.post(this.$api.deviceCheck.saveDeviceRecord, this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.getTableList(this.clickNodeVal.value) |
| | | this.dialogVisible = false |
| | | } |
| | | }) |
| | | this.dialogVisible = false; |
| | | } else { |
| | | this.$axios.post(this.$api.deviceCheck.updateDeviceRecord, this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.getTableList(this.clickNodeVal.value) |
| | | this.dialogVisible = false |
| | | } |
| | | }) |
| | | this.dialogVisible = false; |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | //æ¥ç详æ
|
| | | showDetailsDialog(type,row) { |
| | | this.operationType = type; |
| | | console.log(row) |
| | | this.dialogVisible = true; |
| | | this.getUserList() |
| | | this.form = row; |
| | | let list = [] |
| | | if (row.useStartDate === null) { |
| | | row.useStartDate = '' |
| | | } |
| | | if (row.useEndDate === null) { |
| | | row.useEndDate = '' |
| | | } |
| | | list.push(row.useStartDate) |
| | | list.push(row.useEndDate) |
| | | this.$set(this.form, 'useDateList', list) |
| | | }, |
| | | handleDeleteClick(index, row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteDeviceRecord + '?id=' + row.id).then(res => { |
| | | this.formParamList.splice(index, 1); |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'å 餿å!' |
| | | }); |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | getUserList(){ |
| | | this.$axios.post(this.$api.user.selectUserList, { |
| | | page: {current: -1, size: -1,}, |
| | | entity: {name: null} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.userList = res.data.body.records |
| | | }) |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getTableList(newVal.value); |
| | | } |
| | | }, |
| | | dialogVisible(newVal) { |
| | | if (newVal === false) { |
| | | this.form = { |
| | | // deviceId:'', |
| | | sampleCode: '', |
| | | deviceName: '', |
| | | managementNumber: '', |
| | | //温度 |
| | | temperature: '', |
| | | //湿度 |
| | | humidity: '', |
| | | //使ç¨å |
| | | useBefore: 1, |
| | | //使ç¨å |
| | | useAfter: 1, |
| | | //å¼å¸¸æ
åµ |
| | | abnormal: '', |
| | | //ä½¿ç¨æ¥æ |
| | | useDateList: [], |
| | | //使ç¨äºº |
| | | usePersonId: '', |
| | | //夿³¨ |
| | | remark: '', |
| | | } |
| | | this.$refs.form.clearValidate() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .tables { |
| | | width: 100%; |
| | | height: calc(100vh - 15em); |
| | | } |
| | | |
| | | .el-from { |
| | | max-width: 400px; |
| | | margin: 0 auto; |
| | | } |
| | | |
| | | .form-row { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .el-input { |
| | | width: calc(100% - 120px); |
| | | /* ç¡®ä¿è¾å
¥æ¡å®½åº¦ä¸è´ */ |
| | | } |
| | | |
| | | .form-row .el-form-item { |
| | | flex: 1; |
| | | /* æ¯ä¸ªè¡¨åé¡¹å æ®ç¸åæ¯ä¾çç©ºé´ */ |
| | | margin-right: 100px; |
| | | /* å¯éï¼ä¸ºå³ä¾§å
ç´ æ·»å é´è· */ |
| | | } |
| | | |
| | | /* ç§»é¤æåä¸ä¸ªå
ç´ çå³è¾¹è· */ |
| | | .form-row .el-form-item:last-child { |
| | | margin-right: 0; |
| | | |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | margin-top: 10px; |
| | | display: flex; |
| | | align-items: center; |
| | | position: relative; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 40px; |
| | | |
| | | } |
| | | |
| | | .search_label { |
| | | width: 80px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .btns { |
| | | position: absolute; |
| | | right: 0px; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- èµæºé¢å® --> |
| | | <template> |
| | | <div class=""> |
| | | <div style="margin-top: 10px"> |
| | | <el-row class="title"> |
| | | <el-col :span="12" style="text-align: left;">é¢å®æ»è§</el-col> |
| | | <el-col :span="12" style="text-align: left;padding-bottom:10px"> |
| | | <el-date-picker |
| | | v-model="startTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©èµ·å§æ¥æ" |
| | | size="mini" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"/> |
| | | è³ |
| | | <el-date-picker |
| | | v-model="endTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©ç»ææ¥æ" |
| | | size="mini" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"/> |
| | | <el-button size="mini" type="primary" @click="ValidateAndQuery">æ¥ è¯¢</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div class="table-container"> |
| | | <el-table :data="tableData" border class="scrollable-table" style="width: 100%"> |
| | | <el-table-column label="åºå·" |
| | | type="index" |
| | | width="60"> |
| | | </el-table-column> |
| | | <el-table-column label="设å¤" min-width="60" prop="deviceName"/> |
| | | <el-table-column label="æ¶é´" min-width="60" prop="time"/> |
| | | <el-table-column v-for="date in dates" :key="date" :label="date"> |
| | | <template #default="{ row }"> |
| | | <el-button v-if="!row[date]" size="mini" type="primary" @click="openModal(date, row)"> |
| | | {{ getDisplayText(row, date) }} |
| | | </el-button> |
| | | <span v-else></span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="showModal" title="é¢å®ä¿¡æ¯" |
| | | top="5vh" width="70%"> |
| | | <h4> |
| | | <el-button v-if="isBeforeDate()" size="small" @click="cancelReservation(selectedRow)">åæ¶é¢å®</el-button> |
| | | <el-button v-if="isBeforeDate()" size="small" type="primary" @click="openAdd()">æ°å»ºé¢å®</el-button> |
| | | </h4> |
| | | <el-table ref="table" :data="tableData2" style="width: 100%" tooltip-effect="dark" |
| | | @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55%"> |
| | | </el-table-column> |
| | | <el-table-column label="åºå·" width="120"> |
| | | <template #default="{ row, $index }"> |
| | | <!-- ä½¿ç¨ $index æ¥è·åè¡ç´¢å¼ï¼é常ä»0å¼å§ï¼æä»¥+1以符å常è§åºå·ä¹ æ¯ --> |
| | | {{ $index + 1 }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="é¢å®ç¼å·" prop="deviceNumber" width="120"> |
| | | </el-table-column> |
| | | <el-table-column label="客æ·åç§°" prop="customerName" show-overflow-tooltip> |
| | | </el-table-column> |
| | | <el-table-column label="è系人" prop="linkPerson" show-overflow-tooltip> |
| | | </el-table-column> |
| | | <el-table-column label="èç³»çµè¯" prop="phone" show-overflow-tooltip> |
| | | </el-table-column> |
| | | <el-table-column label="é¢å®è¯´æ" prop="reservationSpecification" show-overflow-tooltip> |
| | | </el-table-column> |
| | | <el-table-column label="å建人" prop="name" show-overflow-tooltip> |
| | | </el-table-column> |
| | | <el-table-column label="å建æ¶é´" prop="createDate" show-overflow-tooltip> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-dialog> |
| | | </div> |
| | | <el-dialog :visible.sync="addVisiable" title="æ°å»ºé¢å®" top="5vh" width="40%"> |
| | | <el-form ref="addReservationForm" :model="addReservation" :rules="rules" label-width="90px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="é¢å®è®¾å¤:"> |
| | | <el-input v-model="addReservation.deviceName"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="客æ·åç§°:"> |
| | | <el-input v-model="addReservation.customerName"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="é¢å®æ¶é´:"> |
| | | <el-input v-model="addReservation.reservationTime"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="æµç¨ç¼å·:"> |
| | | <el-input v-model="addReservation.deviceNumber"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è系人:"> |
| | | <el-input v-model="addReservation.linkPerson"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="èç³»çµè¯:" prop="phone"> |
| | | <el-input v-model="addReservation.phone"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="é¢å®è¯´æ:" required> |
| | | <el-input v-model="addReservation.reservationSpecification" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addVisiable = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="addRecord">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | |
| | | return { |
| | | // startDate: new Date(), |
| | | // endDate: new Date(new Date().setDate(new Date().getDate() + 3)), |
| | | // startDate:'', |
| | | // endDate:'', |
| | | timeSlots: ['09:00-12:00', '13:00-18:00', '18:00-22:00'], |
| | | dates: [], |
| | | showModal: false, |
| | | selectedDate: '', |
| | | selectedTime: '', |
| | | selectedDevice: '', |
| | | tableData: [ |
| | | { |
| | | id: '', |
| | | deviceName: '', |
| | | date: '' |
| | | } |
| | | ], |
| | | tableData2: [], |
| | | selectedReservationId: null, // ç¨äºåå¨éä¸çID |
| | | selectedRow: null, |
| | | addVisiable: false, |
| | | laboratoryNameIsNull: false, |
| | | currentPage: 1, // å½å页 |
| | | pageSize: 16, // ä¸é¡µ16æ¡ |
| | | startTime: '', |
| | | endTime: '', |
| | | entity: { |
| | | deviceName: null, |
| | | laboratoryName: '', |
| | | storagePoint: '', |
| | | }, |
| | | addReservation: { |
| | | deviceName: '', |
| | | reservationTime: '', |
| | | specificTime: '', |
| | | customerName: '', |
| | | deviceNumber: '', |
| | | linkPerson: '', |
| | | phone: '', |
| | | reservationSpecification: '' |
| | | }, |
| | | total: '', |
| | | // loading:true, |
| | | componentData: { |
| | | entity: { |
| | | largeCategory: null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'asc' |
| | | } |
| | | }, |
| | | }, |
| | | yuyue: null, |
| | | yuyuetime: '', |
| | | rules: { |
| | | phone: [ |
| | | {required: true, message: '请è¾å
¥èç³»çµè¯', |
| | | trigger: 'blur'}, |
| | | {pattern: /^1[3456789]\d{9}$/, |
| | | message: '请è¾å
¥æ£ç¡®çææºå·ç ', |
| | | trigger: ['blur', 'change'] |
| | | } |
| | | ] |
| | | }, |
| | | appointment: '' |
| | | } |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | this.clickSidebar(newVal) |
| | | } |
| | | }, |
| | | |
| | | created() { |
| | | this.clickSidebar(this.clickNodeVal) |
| | | this.initDate(); |
| | | }, |
| | | mounted() { |
| | | this.getAllDeviceParam(); |
| | | |
| | | }, |
| | | methods: { |
| | | isBeforeDate() { |
| | | let currentDate = this.$moment().format('YYYY-MM-DD') |
| | | let currentTime = this.$moment().format('HH') |
| | | const appointment = this.appointment && this.appointment.split('-') |
| | | let appointment0 = '' |
| | | let appointment1 = '' |
| | | if (appointment !== '') { |
| | | appointment0 = appointment[0].slice(0,2) |
| | | appointment1 = appointment[1].slice(0,2) |
| | | } |
| | | if (currentDate < this.yuyuetime) { |
| | | // æªæ¥çæ¥æï¼ä¸å®è½æ°å¢é¢çº¦ |
| | | return true |
| | | } else if (currentDate === this.yuyuetime) { |
| | | // å½å¤©çæ¥æï¼å·²ç»è¿äºçæ¶é´ä¸å¯åæ¶åæ°å¢ |
| | | if (currentTime < appointment1) { |
| | | return true |
| | | } else if (currentTime > appointment1) { |
| | | return false |
| | | } |
| | | } |
| | | }, |
| | | getDisplayText(row, date) { |
| | | if (!row || row.dateList === null || row.dateList === undefined || row.dateList === "") { |
| | | return 'é¢çº¦'; |
| | | } |
| | | var dateLst = row.dateList |
| | | for (const dateLstElement of dateLst) { |
| | | if (dateLstElement.date === date) { |
| | | if (dateLstElement.value === 0) { |
| | | return 'é¢çº¦'; |
| | | } else { |
| | | return dateLstElement.value; |
| | | } |
| | | } |
| | | } |
| | | return 'é¢çº¦'; |
| | | }, |
| | | |
| | | ValidateAndQuery() { |
| | | if (!this.startTime || !this.endTime) { |
| | | this.$message.error('è¯·éæ©æ¥æèå´'); |
| | | return; |
| | | } |
| | | if((new Date(this.endTime)-new Date(this.startTime))/(1000*60*60*24) >= 10) { |
| | | this.$message.error('åªè½é¢çº¦10天以å
'); |
| | | return; |
| | | } |
| | | if (new Date(this.startTime) > new Date(this.endTime)) { |
| | | this.$message.error('å¼å§æ¥æä¸è½å¤§äºç»ææ¥æ'); |
| | | return; |
| | | } |
| | | this.query(); |
| | | }, |
| | | initDate(){ |
| | | if(this.startTime=='' || this.endTime=='' ||this.startTime==null||this.endTime==null){ |
| | | const daysAdd = 3; |
| | | const now = new Date(); |
| | | this.startTime = now.getFullYear() + "-" + |
| | | String(now.getMonth() + 1).padStart(2, '0') + "-" + |
| | | String(now.getDate()).padStart(2, '0'); |
| | | let endTime = new Date(now); |
| | | endTime.setDate(now.getDate() + daysAdd); |
| | | this.endTime = endTime.getFullYear() + "-" + |
| | | String(endTime.getMonth() + 1).padStart(2, '0') + "-" + |
| | | String(endTime.getDate()).padStart(2, '0'); |
| | | const start = new Date(this.startTime); |
| | | const end = new Date(this.endTime); |
| | | const tempDates = []; |
| | | while (start<=end) { |
| | | const year = start.getFullYear(); |
| | | const month = String(start.getMonth() + 1).padStart(2, '0'); // æä»½ä»0å¼å§ï¼æä»¥å 1ï¼å¹¶ä½¿ç¨padStartè¡¥0 |
| | | const day = String(start.getDate()).padStart(2, '0'); // 使ç¨padStartè¡¥0 |
| | | tempDates.push(`${year}-${month}-${day}`); |
| | | start.setDate(start.getDate() + 1); |
| | | } |
| | | this.dates = tempDates; |
| | | this.getStartTimeAndEndTime(); |
| | | }}, |
| | | query() { |
| | | if (this.startTime && this.endTime) { |
| | | const start = new Date(this.startTime); |
| | | const end = new Date(this.endTime); |
| | | const tempDates = []; |
| | | while (start <= end) { |
| | | const year = start.getFullYear(); |
| | | const month = String(start.getMonth() + 1).padStart(2, '0'); // æä»½ä»0å¼å§ï¼æä»¥å 1ï¼å¹¶ä½¿ç¨padStartè¡¥0 |
| | | const day = String(start.getDate()).padStart(2, '0'); // 使ç¨padStartè¡¥0 |
| | | tempDates.push(`${year}-${month}-${day}`); |
| | | start.setDate(start.getDate() + 1); |
| | | } |
| | | this.dates = tempDates; |
| | | this.getStartTimeAndEndTime(); |
| | | } |
| | | }, |
| | | //æ¥è¯¢æ¶é´ |
| | | getStartTimeAndEndTime(){ |
| | | //æ¥è¯¢é»è¾ |
| | | this.$axios.post(this.$api.deviceReservate.get + "?laboratoryNameIsNull=" + this.laboratoryNameIsNull + "&starttime=" + this.startTime + "&endtime=" + this.endTime, { |
| | | page: { |
| | | current: this.currentPage, |
| | | size: this.pageSize |
| | | }, |
| | | entity: this.entity |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | const devices = res.data.body; |
| | | this.initTable(devices) |
| | | } |
| | | }) |
| | | }, |
| | | updateDates() { |
| | | if (this.startTime && this.endTime) { |
| | | const start = new Date(this.startDate); |
| | | const end = new Date(this.endDate); |
| | | const tempDates = []; |
| | | while (start <= end) { |
| | | const month = start.getMonth() + 1; |
| | | const day = start.getDate(); |
| | | tempDates.push(`${month}/${day}`); |
| | | start.setDate(start.getDate() + 1); |
| | | } |
| | | this.dates = tempDates; |
| | | this.initTableData(devices); |
| | | } |
| | | }, |
| | | getAllDeviceParam() { |
| | | this.$axios.post(this.$api.deviceReservate.get + "?laboratoryNameIsNull=" + this.laboratoryNameIsNull, { |
| | | page: { |
| | | current: this.currentPage, |
| | | size: this.pageSize |
| | | }, |
| | | entity: this.entity |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | const devices = res.data.body; |
| | | this.initTable(devices) |
| | | } |
| | | }) |
| | | }, |
| | | initTable(devices) { |
| | | this.tableData = devices; |
| | | }, |
| | | openModal(date, row) { |
| | | this.yuyue = row; |
| | | this.yuyuetime = date; |
| | | this.appointment = row.time |
| | | this.showModal = true; |
| | | this.getList(); |
| | | }, |
| | | openAdd() { |
| | | this.addVisiable = true; |
| | | this.addReservation.deviceId = this.yuyue.id; |
| | | // this.addReservation.deviceNumber = this.yuyue.deviceNumber; |
| | | this.addReservation.deviceName = this.yuyue.deviceName; |
| | | this.addReservation.reservationTime = this.yuyuetime + " " + this.yuyue.time; |
| | | this.addReservation.specificTime = this.yuyue.time; |
| | | this.addReservation.deviceNumber = 'TX-ABC-01'+Math.floor(Math.random() * 10 + 1); |
| | | }, |
| | | handleSelectionChange(selected) { |
| | | this.selectedRow = selected.length > 0 ? selected : null; |
| | | }, |
| | | async cancelReservation(selectedRow) { |
| | | if (!selectedRow || selectedRow.length == 0) { |
| | | this.$message.error('è¯·éæ©è¦å é¤çé¢çº¦'); |
| | | return; |
| | | } |
| | | let ids = selectedRow.map(item => item.id).join(','); |
| | | try { |
| | | const res = await this.$axios.delete(this.$api.deviceReservate.del + '/' + ids); |
| | | if (res.code === 200) { |
| | | this.$message.success({ |
| | | message: 'å 餿å', |
| | | type: 'success' |
| | | }); |
| | | this.getList(); |
| | | this.query(); |
| | | this.showModal = false; |
| | | } else { |
| | | this.$message.error({ |
| | | message: 'å é¤å¤±è´¥', |
| | | type: 'error' |
| | | }); |
| | | } |
| | | } catch (error) { |
| | | this.$message.error({ |
| | | message: 'å é¤è¿ç¨ä¸åçé误ï¼è¯·ç¨åéè¯', |
| | | type: 'error' |
| | | }); |
| | | } |
| | | }, |
| | | addRecord() { |
| | | this.$refs.addReservationForm.validate((valid) => { |
| | | if (valid) { |
| | | this.addReservation.reservationTime = this.yuyuetime; |
| | | this.$axios.post(this.$api.deviceReservate.save, this.addReservation).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('ä¿åæå') |
| | | this.addVisiable = false |
| | | this.getList(); |
| | | this.query(); |
| | | this.addReservation = {}; |
| | | } |
| | | }) |
| | | } else { |
| | | this.$message.error({message: 'è¯·æ£æ¥è¡¨å填忝妿£ç¡®', type: 'error'}); |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | getList() { |
| | | this.$axios.post(this.$api.deviceReservate.list + "?deviceId=" + this.yuyue.id + "&reservationTime=" + this.yuyuetime + "&specificTime=" + this.yuyue.time).then(res => { |
| | | if (res.code == 200) { |
| | | this.tableData2 = res.data; |
| | | } |
| | | }) |
| | | }, |
| | | // ç¹å»ä¾§è¾¹æ å·æ° |
| | | clickSidebar(clickNodeVal) { |
| | | this.laboratoryNameIsNull = false |
| | | // æ¯å¦åå¨valueï¼åå¨value代表为ä¸çº§ |
| | | if (!clickNodeVal.value) { |
| | | this.finishLoding = false; |
| | | this.keyMap = {}; |
| | | this.currentPage = 1; |
| | | this.list = []; |
| | | this.entity.laboratoryName = null |
| | | this.entity.storagePoint = null |
| | | // çäº1代表为æ çä¸çº§ï¼label为é¨é¨ |
| | | if (clickNodeVal.label == 'å
¶ä»') { |
| | | this.laboratoryNameIsNull = true |
| | | this.getAllDeviceParam(); |
| | | return |
| | | } |
| | | if (clickNodeVal.level == 1) { |
| | | this.entity.laboratoryName = clickNodeVal.label |
| | | // çäºäºçº§ãlabel为åå¨å°ç¹ |
| | | } else if (clickNodeVal.level == 2) { |
| | | // å
¶ä»è¡¨ç¤ºæ²¡æé
ç½®å®éªå®¤ï¼åªé
ç½®äºå°ç¹ |
| | | if (clickNodeVal.parent.label == 'å
¶ä»') { |
| | | this.laboratoryNameIsNull = true |
| | | } else { |
| | | this.entity.laboratoryName = clickNodeVal.parent.label |
| | | } |
| | | this.entity.storagePoint = clickNodeVal.label |
| | | } |
| | | this.getAllDeviceParam(); |
| | | } |
| | | } |
| | | }, |
| | | |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .table-container { |
| | | overflow: auto; |
| | | height: 500px; |
| | | /* å¯ä»¥æ ¹æ®éè¦è°æ´é«åº¦ */ |
| | | } |
| | | |
| | | .scrollable-table { |
| | | max-height: 100%; |
| | | overflow-y: auto; |
| | | /* overflow-x: auto; */ |
| | | } |
| | | |
| | | h4 { |
| | | font-weight: 400; |
| | | font-size: 16px; |
| | | display: flex; |
| | | justify-content: flex-end; |
| | | margin: 10px 0; |
| | | } |
| | | |
| | | .form-row { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | </style> |
| | |
| | | <!-- 设å¤åç¨å¯ç¨ --> |
| | | <template> |
| | | <div>设å¤åç¨/å¯ç¨</div> |
| | | <div> |
| | | <div class="search"> |
| | | <el-row :gutter="10" style="width: 100%;"> |
| | | <el-col :span="20" style="display: flex;flex-wrap: wrap;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æµç¨ç¼å·ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input v-model="search.processNumber" clearable placeholder="请è¾å
¥" size="small" style="width: 100%" |
| | | @keyup.enter.native="getDeviceStatePage(clickNodeVal.value)"></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" style="padding-left: 20px;"> |
| | | <el-button size="small" @click="resetSearch">é ç½®</el-button> |
| | | <el-button size="small" type="primary" @click="getDeviceStatePage(clickNodeVal.value)">æ¥ è¯¢</el-button> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <div class="btns"> |
| | | <el-button size="small" type="primary" @click="dialogVisible = true">æ°å»º</el-button> |
| | | <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">导åºExcel</el-button> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div> |
| | | <el-table :data="tableDatalist" height="calc(100vh - 20em)" style="width: 100% ;"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" |
| | | width="70"></el-table-column> |
| | | <el-table-column label="æµç¨ç¼å·" min-width="180" prop="processNumber"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" min-width="180" prop="deviceName"></el-table-column> |
| | | <el-table-column label="管çç¼å·" min-width="150" prop="managementNumber"></el-table-column> |
| | | <el-table-column label="设å¤ç¶æ" min-width="130" prop="deviceStatus"> |
| | | <template #default="{ row }"> |
| | | {{ row.deviceStatus === '0scrap' ? 'æ¥åº' : row.deviceStatus === '1startUsing' ? 'å¯ç¨' : 'åç¨' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="åç¨/å¯ç¨çç±" min-width="180" prop="reason"></el-table-column> |
| | | <el-table-column label="æäº¤äºº" min-width="130" prop="createUser"></el-table-column> |
| | | <el-table-column label="æäº¤æ¥æ" min-width="150" prop="createTime"></el-table-column> |
| | | <el-table-column label="å½åç¶æ" min-width="130" prop="currentState"></el-table-column> |
| | | <el-table-column label="å½å责任人" min-width="180" prop="currentResponsible"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column fixed="right" label="æä½" min-width="150"> |
| | | <template #default="{ row }"> |
| | | <el-button size="small" type="text" @click="handleViewClick(row)">æ¥ç</el-button> |
| | | <el-button size="small" type="text" @click="handleDownOne(row)">导åº</el-button> |
| | | <el-button size="small" type="text" @click="handleDeleteClick(row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange"> |
| | | </el-pagination> |
| | | </div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="è®¾å¤æ
åµ" top="5vh" |
| | | width="60%" @open="openRecordAcceptance"> |
| | | <el-steps :active="currentStep" align-center finish-status="success"> |
| | | <el-step v-for="(v, i) in steps" :key="i" :title="v" style="cursor:pointer" |
| | | @click.native="choiceStep(i)"></el-step> |
| | | </el-steps> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="130px"> |
| | | <div v-show="currentStepClick === 0"> |
| | | <el-card style="margin-top: 1em; height: 42vh; overflow-y: scroll;"> |
| | | <!-- å¡ç --> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æµç¨ç¼å·ï¼"> |
| | | <el-input v-model="form.processNumber" disabled size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="管çç¼å·ï¼"> |
| | | <el-input v-model="form.managementNumber" disabled size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤åç§°ï¼"> |
| | | <el-input v-model="form.deviceName" disabled size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è§æ ¼åå·ï¼"> |
| | | <el-input v-model="form.specificationModel" disabled size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: currentStep === 0, message: '请è¾å
¥é
ä»¶', trigger: 'blur' }]" label="é
ä»¶ï¼" |
| | | prop="accessoryPart"> |
| | | <el-input v-model="form.accessoryPart" :disabled="currentStep !== 0" size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: currentStep === 0, message: 'è¯·éæ©è®¾å¤ç¶æ', trigger: 'change' }]" label="è®¾å¤æ
åµï¼" |
| | | prop="deviceStatus"> |
| | | <el-select v-model="form.deviceStatus" :disabled="currentStep !== 0" placeholder="è¯·éæ©" size="small" |
| | | style="width:100%"> |
| | | <el-option label="æ¥åº" value="0scrap"></el-option> |
| | | <el-option label="å¯ç¨" value="1startUsing"></el-option> |
| | | <el-option label="åç¨" value="2stopUsing"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: currentStep === 0, message: '请è¾å
¥åç¨å¯ç¨çç±', trigger: 'blur' }]" label="åç¨å¯ç¨çç±ï¼" |
| | | prop="reason"> |
| | | <el-input v-model="form.reason" :disabled="currentStep !== 0" :rows="3" size="small" |
| | | type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: currentStep === 0, message: 'è¯·éæ©ä¸ç¯è责任人', trigger: 'change' }]" label="ä¸ç¯è责任人ï¼" |
| | | prop="submitNextPesponsible"> |
| | | <el-select v-model="form.submitNextPesponsible" :disabled="currentStep !== 0" clearable filterable |
| | | placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 100%"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.submitOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.submitDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div v-show="currentStepClick === 1"> |
| | | <el-card style="margin-top: 1em; height: 42vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="é¨é¨è´è´£äººæè§ï¼" prop="departmentReviewOpinion"> |
| | | <el-input v-model="form.departmentReviewOpinion" :disabled="currentStep !== 1" size="small" |
| | | type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: currentStep === 1, message: '请è¾å
¥ä¸ç¯è责任人', trigger: 'change' }]" label="ä¸ç¯è责任人ï¼" |
| | | prop="departmentNextPesponsible"> |
| | | <el-select v-model="form.departmentNextPesponsible" :disabled="currentStep !== 1" clearable filterable |
| | | placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 100%;"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.departmentOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.departmentDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div v-show="currentStepClick === 2"> |
| | | <el-card style="margin-top: 1em; height: 42vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: currentStep === 2, message: '请è¾å
¥è®¡é室æè§', trigger: 'blur' }]" label="计é室æè§ï¼" |
| | | prop="measuringRoomReviewOpinion"> |
| | | <el-input v-model="form.measuringRoomReviewOpinion" :disabled="currentStep !== 2" size="small" |
| | | type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: currentStep === 2, message: '请è¾å
¥ä¸ç¯è责任人', trigger: 'blur' }]" label="ä¸ç¯è责任人ï¼" |
| | | prop="measuringRoomNextPesponsible"> |
| | | <el-select v-model="form.measuringRoomNextPesponsible" :disabled="currentStep !== 2" clearable filterable |
| | | placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 100%;"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.measuringRoomOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.measuringRoomDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div v-show="currentStepClick === 3"> |
| | | <el-card style="margin-top: 1em; height: 42vh; overflow-y: scroll;"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item :rules="[{ required: currentStep === 3, message: '请è¾å
¥æ¹åæè§', trigger: 'blur' }]" label="æ¹åæè§ï¼" |
| | | prop="approvalOpinion"> |
| | | <el-input v-model="form.approvalOpinion" :disabled="currentStep !== 3" size="small" |
| | | type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: currentStep === 3, message: '请è¾å
¥ä¸ç¯èè´è´£äºº', trigger: 'change' }]" label="ä¸ç¯è责任人ï¼" |
| | | prop="approvalNextPesponsible"> |
| | | <el-select v-model="form.approvalNextPesponsible" :disabled="currentStep !== 3" clearable |
| | | filterable placeholder="è¯·éæ©ä¸ç¯èè´è´£äºº" size="small" style="width: 100%;"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.name"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <el-row style="margin-top: 1em;"> |
| | | <el-col :span="4"> |
| | | æä½äººï¼{{ form.approvalOperatingPersonnel }} |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | æ¥æï¼{{ form.approvalDate }} |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button v-if="currentStep !== 0 && currentStep !== 4" :loading="sumbitLoading1" |
| | | @click="submitForm('3reject')">驳å</el-button> |
| | | <el-button v-if="currentStep === 0" :loading="sumbitLoading2" @click="submitForm('2save')">ä¿å</el-button> |
| | | <el-button v-if="currentStep !== 4" :loading="sumbitLoading3" type="primary" @click="submitForm('1submit')"> |
| | | {{ currentStep === 0 ? 'æäº¤' : 'éè¿' }} |
| | | </el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { dateFormat } from '../../../util/date' |
| | | export default { |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | outLoading: false, // 导åºloading |
| | | dialogVisible: false, |
| | | form: {}, |
| | | currentStep: 0, // æ¥éª¤æ¡æ¾ç¤ºç¬¬å æ¥ |
| | | currentStepClick: 0, // ç¹å»æ¥éª¤æ¡åå |
| | | steps: ['æäº¤', 'é¨é¨è´è´£äºº', '计é室', 'æ¹å人'], |
| | | responsibleOptions: [], // ä¸ç¯èè´è´£äºº |
| | | tableDatalist: [], // tableè¡¨æ ¼ |
| | | rules: { |
| | | quantity: [{ required: true, message: '请è¾å
¥æ°é', trigger: 'blur' }], |
| | | }, |
| | | search: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | processNumber: '' |
| | | }, |
| | | sumbitLoading1: false, |
| | | sumbitLoading2: false, |
| | | sumbitLoading3: false, |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getDeviceStatePage(this.clickNodeVal.value) |
| | | }, |
| | | methods: { |
| | | // å页 |
| | | handleSizeChange(val) { |
| | | this.search.size = val |
| | | this.getDeviceStatePage(this.clickNodeVal.value) |
| | | }, |
| | | // å页 |
| | | handleCurrentChange(val) { |
| | | this.search.current = val |
| | | this.getDeviceStatePage(this.clickNodeVal.value) |
| | | }, |
| | | //æäº¤è¡¨å |
| | | async submitForm(saveState) { |
| | | let currentStepAction; |
| | | // 设置该æä½å¤ææ¯å¦ä¸ºæäº¤ï¼ä¿åï¼é©³åï¼éè¿ å¼å¯loding |
| | | switch (saveState) { |
| | | // æäº¤ï¼éè¿ |
| | | case '1submit': |
| | | currentStepAction = this.currentStep + 1 |
| | | this.sumbitLoading1 = true |
| | | break |
| | | // ä¿å |
| | | case '2save': |
| | | currentStepAction = this.currentStep |
| | | this.sumbitLoading2 = true |
| | | break |
| | | // 驳å |
| | | case '3reject': |
| | | currentStepAction = this.currentStep - 1 |
| | | this.sumbitLoading3 = true |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid === true || saveState !== '1submit') { |
| | | // ç»å½åç¯è设置åå»ºäººä¸æ¶é´ |
| | | let user = JSON.parse(localStorage.getItem('user')) |
| | | const dateTime = dateFormat(new Date()) |
| | | // è·åå½åç¯èæä½äººä¸æ¥æ |
| | | switch (this.currentStep) { |
| | | case 0: |
| | | this.form.createUser = user.name |
| | | this.form.submitOperatingPersonnel = user.name |
| | | this.form.submitDate = dateTime |
| | | break |
| | | case 1: |
| | | this.form.departmentOperatingPersonnel = user.name |
| | | this.form.departmentDate = dateTime |
| | | break |
| | | case 2: |
| | | this.form.measuringRoomOperatingPersonnel = user.name |
| | | this.form.measuringRoomDate = dateTime |
| | | break |
| | | case 3: |
| | | this.form.approvalOperatingPersonnel = user.name |
| | | this.form.approvalDate = dateTime |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | // è·åå½åç¯èè´è´£äºº |
| | | switch (saveState === '3reject' ? this.currentStep - 1 : this.currentStep) { |
| | | case 0: |
| | | this.form.currentResponsible = this.form.submitOperatingPersonnel |
| | | break |
| | | case 1: |
| | | this.form.currentResponsible = this.form.departmentOperatingPersonnel |
| | | break |
| | | case 2: |
| | | this.form.currentResponsible = this.form.measuringRoomOperatingPersonnel |
| | | break |
| | | case 3: |
| | | this.form.currentResponsible = this.form.approvalOperatingPersonnel |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | // è·åå½åç¶æ |
| | | this.form.currentState = currentStepAction === 4 ? 'å
³é' : this.steps[currentStepAction] |
| | | this.form.deviceId = this.clickNodeVal.value |
| | | this.$axios.post(this.$api.deviceCheck.saveDeviceState, this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æäº¤æå') |
| | | this.getDeviceStatePage(this.clickNodeVal.value) |
| | | this.dialogVisible = false |
| | | this.closeLoading() |
| | | } |
| | | this.closeLoading() |
| | | }) |
| | | } else { |
| | | let step = this.steps[this.currentStep] |
| | | this.$message.warning(step + ' æµç¨ä¸æå¿
填项æªå¡«ï¼'); |
| | | this.closeLoading() |
| | | } |
| | | }); |
| | | }, |
| | | closeLoading() { |
| | | this.sumbitLoading1 = false |
| | | this.sumbitLoading2 = false |
| | | this.sumbitLoading3 = false |
| | | }, |
| | | choiceStep(index) { |
| | | this.currentStepClick = index |
| | | }, |
| | | openRecordAcceptance() { |
| | | // è·å设å¤åºç¡ä¿¡æ¯ |
| | | this.$axios.get(this.$api.deviceScope.selectDeviceByCode + '?id=' + this.clickNodeVal.value).then(res => { |
| | | this.form.deviceName = res.data.deviceName |
| | | this.form.specificationModel = res.data.specificationModel |
| | | this.form.managementNumber = res.data.managementNumber |
| | | this.$nextTick(() => { |
| | | this.$refs['form'].clearValidate() |
| | | }) |
| | | }); |
| | | // è·åè´è´£äººä¿¡æ¯ |
| | | this.getUserList() |
| | | }, |
| | | // è·åè´è´£äººä¿¡æ¯æ¥å£ |
| | | getUserList() { |
| | | this.$axios.get(this.$api.deviceScope.selectUserList).then(res => { |
| | | if (res.code == 200) { |
| | | this.responsibleOptions = res.data |
| | | } |
| | | }) |
| | | }, |
| | | // æ¥ç |
| | | handleViewClick(row) { |
| | | this.form = { ...row } |
| | | // å¦æç´¢å¼ä¸º6表示å
¨é¨éè¿ |
| | | this.currentStep = this.steps.indexOf(this.form.currentState) === -1 ? 4 : this.steps.indexOf(this.form.currentState) |
| | | this.currentStepClick = this.currentStep === 4 ? 0 : this.currentStep |
| | | this.$nextTick(() => { |
| | | this.$refs['form'].clearValidate() |
| | | }) |
| | | this.dialogVisible = true |
| | | }, |
| | | // å¯¼åº |
| | | handleDownOne(row) { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceCheck.exportDeviceStatus + '?deviceId=' + row.deviceId + '&processNumber=' + row.processNumber, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤å/å¯ç¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤å/å¯ç¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | handleDeleteClick(row) { |
| | | this.$confirm('æ¤æä½å°å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.delete(this.$api.deviceCheck.deleteDeviceState + '?stateId=' + row.stateId).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å 餿å') |
| | | this.getDeviceStatePage(this.clickNodeVal.value) |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | |
| | | }, |
| | | //å¯¼åº |
| | | handleDown() { |
| | | this.outLoading = true |
| | | this.$axios.post(this.$api.deviceCheck.deviceStateExport, { |
| | | deviceId: this.clickNodeVal.value, |
| | | processNumber: this.search.processNumber |
| | | }, {responseType: "blob"}).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], {type: 'application/octet-stream'}); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤åç¨/å¯ç¨.xlsx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤åç¨/å¯ç¨.xlsx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }).finally(() => { |
| | | this.outLoading = false |
| | | }) |
| | | }, |
| | | resetSearch() { |
| | | this.search = { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | processNumber: '', |
| | | } |
| | | this.getDeviceStatePage(this.clickNodeVal.value); |
| | | }, |
| | | getDeviceStatePage(deviceId) { |
| | | this.$axios.get(this.$api.deviceCheck.getDeviceStatePage + '?deviceId=' + deviceId + "&size=" + this.search.size + "¤t=" + this.search.current + "&processNumber=" + this.search.processNumber).then(res => { |
| | | if (res.code == 200) { |
| | | this.tableDatalist = res.data.records |
| | | this.search.total = res.data.total |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.componentData.entity.deviceId = this.clickNodeVal.value |
| | | this.entityCopy = this.HaveJson(this.componentData.entity) |
| | | this.getDeviceStatePage(newVal.value) |
| | | } |
| | | }, |
| | | dialogVisible(newVal) { |
| | | if (!newVal) { |
| | | this.form = { |
| | | } |
| | | this.closeLoading() |
| | | this.currentStep = 0 // æ¥éª¤æ¡æ¾ç¤ºç¬¬å æ¥ |
| | | this.currentStepClick = 0 // ç¹å»æ¥éª¤æ¡åå |
| | | this.$refs['form'].clearValidate() |
| | | } |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .dialog-content { |
| | | max-height: 70vh; |
| | | /* 设置æå¤§é«åº¦ */ |
| | | overflow-y: auto; |
| | | /* å¯ç¨åç´æ»å¨ */ |
| | | } |
| | | |
| | | h4 { |
| | | font-weight: 400; |
| | | font-size: 16px; |
| | | margin: 10px 0; |
| | | } |
| | | |
| | | /* |
| | | ä¿åæäº¤æé®æ ·å¼ |
| | | */ |
| | | h4 .title { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | h4 .title .line { |
| | | display: inline-block; |
| | | width: 3px; |
| | | height: 16px; |
| | | background: #3A7BFA; |
| | | margin-right: 4px; |
| | | } |
| | | |
| | | .tables { |
| | | width: 100%; |
| | | height: calc(100vh - 15em); |
| | | } |
| | | |
| | | .el-from { |
| | | max-width: 400px; |
| | | margin: 0 auto; |
| | | } |
| | | |
| | | .form-row { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | |
| | | .form-row .el-form-item { |
| | | flex: 1; |
| | | /* æ¯ä¸ªè¡¨åé¡¹å æ®ç¸åæ¯ä¾çç©ºé´ */ |
| | | margin-right: 100px; |
| | | /* å¯éï¼ä¸ºå³ä¾§å
ç´ æ·»å é´è· */ |
| | | } |
| | | |
| | | /* ç§»é¤æåä¸ä¸ªå
ç´ çå³è¾¹è· */ |
| | | .form-row .el-form-item:last-child { |
| | | margin-right: 0; |
| | | |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | margin: 10px 0; |
| | | display: flex; |
| | | align-items: center; |
| | | position: relative; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 40px; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 70px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: 70%; |
| | | } |
| | | |
| | | .btns { |
| | | position: absolute; |
| | | right: 0; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | } |
| | | |
| | | .form .search_label { |
| | | width: 120px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="仪å¨è®¾å¤éªæ¶å" |
| | | width="80%" @close="resetForm"> |
| | | <el-form ref="modelForm" |
| | | :model="form" :rules="rules" label-width="180px"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å°è´§æ¥æï¼" prop="arrivalDate"> |
| | | <el-date-picker |
| | | v-model="form.arrivalDate" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | format="yyyy-MM-dd" |
| | | style="width: 100%" |
| | | value-format="yyyy-MM-dd" |
| | | :disabled="operationType === 'view'"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="éé¢ï¼" prop="goldAmount"> |
| | | <el-input v-model="form.goldAmount" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç»´ä¿®åä½ï¼" prop="maintenanceunit"> |
| | | <el-input v-model="form.maintenanceunit" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¶è®¾å¤ä¸»æºåå¤ä»¶æ
åµï¼" prop="spareParts"> |
| | | <el-input v-model="form.spareParts" :disabled="operationType === 'view'" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®è£
ãè°è¯æ
åµï¼" prop="installationDebugging"> |
| | | <el-input v-model="form.installationDebugging" :disabled="operationType === 'view'" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="éªæ¶æ
åµï¼" prop="checkSituation"> |
| | | <el-input v-model="form.checkSituation" :disabled="operationType === 'view'" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¥æ¶ç¾åï¼" prop="receivingSignature"> |
| | | <el-input v-model="form.receivingSignature" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å家代表ï¼" prop="producer"> |
| | | <el-input v-model="form.producer" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¥æ¶äººï¼" prop="recipient"> |
| | | <el-input v-model="form.recipient" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¥æ¶æ¥æï¼" prop="recipientDate"> |
| | | <el-date-picker |
| | | v-model="form.recipientDate" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | format="yyyy-MM-dd" |
| | | style="width: 100%" |
| | | value-format="yyyy-MM-dd" |
| | | :disabled="operationType === 'view'"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="resetForm">å æ¶</el-button> |
| | | <el-button v-if="operationType !== 'view'" :loading="submitFormLoading" type="primary" @click="submitForm">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "acceptance-form", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | dialogVisible: false, |
| | | submitFormLoading: false, |
| | | form: { |
| | | arrivalDate: '', |
| | | goldAmount: '', |
| | | maintenanceunit: '', |
| | | spareParts: '', |
| | | installationDebugging: '', |
| | | checkSituation: '', |
| | | receivingSignature: '', |
| | | producer: '', |
| | | recipient: '', |
| | | recipientDate: '', |
| | | deviceId: '', |
| | | }, |
| | | operationType: '', |
| | | rules: { |
| | | arrivalDate: [{required: true, message: 'è¯·éæ©å°è´§æ¥æ', trigger: 'change'}], |
| | | }, |
| | | userList: [], |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDialog(type, id, deviceId) { |
| | | this.dialogVisible = true |
| | | this.operationType = type |
| | | this.form.acceptanceId = id |
| | | this.form.deviceId = deviceId |
| | | this.getUserList() |
| | | if (this.form.acceptanceId) { |
| | | this.searchInfo() |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | searchInfo() { |
| | | this.$axios.get(this.$api.deviceAcceptance.getDeviceAcceptance + '?acceptanceId=' + this.form.acceptanceId).then(res => { |
| | | if (res.code === 200) { |
| | | this.form = {...res.data} |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | // æäº¤è¡¨å |
| | | submitForm() { |
| | | this.$refs.modelForm.validate((valid) => { |
| | | if (valid) { |
| | | if (this.operationType === 'add') { |
| | | this.$axios.post(this.$api.deviceAcceptance.addDeviceAcceptance, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } else { |
| | | this.$axios.post(this.$api.deviceAcceptance.updateDeviceAcceptance, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å
³éå¼¹æ¡ |
| | | resetForm() { |
| | | this.dialogVisible = false |
| | | this.$emit('closeDialog') |
| | | }, |
| | | getUserList() { |
| | | this.$axios.post(this.$api.user.selectUserList, { |
| | | page: {current: -1, size: -1,}, |
| | | entity: {name: null} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.userList = res.data.body.records |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .form-item { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-right: 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="dialogVisible" title="仪å¨è®¾å¤äºæ
æ¥åå" |
| | | width="80%" @close="resetForm"> |
| | | <el-steps :active="currentStep" align-center finish-status="success"> |
| | | <el-step title="填忥åå" @click.native="setStep(0)"></el-step> |
| | | <el-step title="äºæ
æå¤±æ
åµè¯ä¼°" @click.native="setStep(1)"></el-step> |
| | | <el-step title="é¨é¨è´è´£äººæè§" @click.native="setStep(2)"></el-step> |
| | | <el-step title="ææ¯è´è´£äººæè§" @click.native="setStep(3)"></el-step> |
| | | <el-step title="主任æè§" @click.native="setStep(4)"></el-step> |
| | | </el-steps> |
| | | <el-form ref="modelForm" |
| | | :model="form" :rules="rules" label-width="160px"> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="å°ç¹ï¼" prop="address"> |
| | | <el-input v-model="form.address" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="æ¥æï¼" prop="accidentDate"> |
| | | <el-date-picker |
| | | v-model="form.accidentDate" |
| | | :disabled="currentStep !== 0" |
| | | format="yyyy-MM-dd HH:mm:ss" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 100%" |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="24"> |
| | | <el-form-item label="äºæ
æ
åµæè¿°ï¼" prop="descriptionOfAccident"> |
| | | <el-input v-model="form.descriptionOfAccident" :disabled="currentStep !== 0" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="24"> |
| | | <el-form-item label="è¯·éæ©è¯ä¼°äººï¼" prop="assessorUserId"> |
| | | <el-select v-model="form.assessorUserId" :disabled="currentStep !== 0" placeholder="è¯·éæ©" size="small" style="width: 50%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 1" :span="24"> |
| | | <el-form-item label="äºæ
æå¤±æ
åµè¯ä¼°ï¼" prop="assessorOpinion"> |
| | | <el-input v-model="form.assessorOpinion" :disabled="currentStep !== 1" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 1" :span="24"> |
| | | <el-form-item label="è¯·éæ©é¨é¨è´è´£äººï¼" prop="departmentHeadUserId"> |
| | | <el-select v-model="form.departmentHeadUserId" :disabled="currentStep !== 1" placeholder="è¯·éæ©" size="small" style="width: 50%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 2" :span="24"> |
| | | <el-form-item label="é¨é¨è´è´£äººæè§ï¼" prop="departmentHeadOpinion"> |
| | | <el-input v-model="form.departmentHeadOpinion" :disabled="currentStep !== 2" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 2" :span="24"> |
| | | <el-form-item label="è¯·éæ©ææ¯è´è´£äººï¼" prop="technicalDirectorUserId"> |
| | | <el-select v-model="form.technicalDirectorUserId" :disabled="currentStep !== 2" placeholder="è¯·éæ©" size="small" style="width: 50%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 3" :span="24"> |
| | | <el-form-item label="ææ¯è´è´£äººæè§ï¼" prop="technicalDirectorOpinion"> |
| | | <el-input v-model="form.technicalDirectorOpinion" :disabled="currentStep !== 3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 3" :span="24"> |
| | | <el-form-item label="è¯·éæ©ä¸»ä»»ï¼" prop="directorHeadUserId"> |
| | | <el-select v-model="form.directorHeadUserId" :disabled="currentStep !== 3" placeholder="è¯·éæ©" size="small" style="width: 50%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 4" :span="24"> |
| | | <el-form-item label="主任æè§ï¼" prop="directorHeadOpinion"> |
| | | <el-input v-model="form.directorHeadOpinion" :disabled="currentStep !== 4" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="resetForm">å æ¶</el-button> |
| | | <el-button v-if="currentStep !== 5" :loading="submitFormLoading" type="primary" @click="submitForm">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "accident-form", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | dialogVisible: false, |
| | | submitFormLoading: false, |
| | | form: { |
| | | accidentReportId: '', |
| | | address: '', |
| | | accidentDate: '', |
| | | descriptionOfAccident: '', |
| | | assessorUserId: '', |
| | | assessorOpinion: '', |
| | | departmentHeadUserId: '', |
| | | departmentHeadOpinion: '', |
| | | technicalDirectorUserId: '', |
| | | technicalDirectorOpinion: '', |
| | | directorHeadUserId: '', |
| | | directorHeadOpinion: '', |
| | | flowType: '', |
| | | deviceId: '', |
| | | }, |
| | | currentStep: 0, |
| | | showStep: 0, |
| | | rules: { |
| | | assessorUserId: [{ required: true, message: 'è¯·éæ©è¯ä¼°äºº', trigger: 'change' }], |
| | | departmentHeadUserId: [{ required: true, message: 'è¯·éæ©é¨é¨è´è´£äºº', trigger: 'change' }], |
| | | technicalDirectorUserId: [{ required: true, message: 'è¯·éæ©ææ¯è´è´£äºº', trigger: 'change' }], |
| | | directorHeadUserId: [{ required: true, message: 'è¯·éæ©ä¸»ä»»', trigger: 'change' }], |
| | | directorHeadOpinion: [{ required: true, message: '请填åæè§', trigger: 'blur' }], |
| | | }, |
| | | userList: [], |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDialog (id, deviceId) { |
| | | this.dialogVisible = true |
| | | this.form.accidentReportId = id |
| | | this.form.deviceId = deviceId |
| | | this.getUserList() |
| | | if (this.form.accidentReportId) { |
| | | this.searchInfo() |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | searchInfo () { |
| | | this.$axios.get(this.$api.deviceAccidentReport.getDeviceAccidentReport+'?accidentReportId=' + this.form.accidentReportId).then(res => { |
| | | if (res.code === 200) { |
| | | this.form = {...res.data} |
| | | if (res.data.isFinish === 0) { |
| | | if (this.form.assessorUserId) { |
| | | this.currentStep = 1 |
| | | this.showStep = 1 |
| | | } |
| | | if (this.form.departmentHeadUserId) { |
| | | this.currentStep = 2 |
| | | this.showStep = 2 |
| | | } |
| | | if (this.form.technicalDirectorUserId) { |
| | | this.currentStep = 3 |
| | | this.showStep = 3 |
| | | } |
| | | if (this.form.directorHeadUserId) { |
| | | this.currentStep = 4 |
| | | this.showStep = 4 |
| | | } |
| | | } else { |
| | | this.currentStep = 5 |
| | | this.showStep = 4 |
| | | } |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | setStep (step) { |
| | | this.showStep = step |
| | | }, |
| | | // æäº¤è¡¨å |
| | | submitForm () { |
| | | this.form.flowType = this.currentStep |
| | | this.$refs.modelForm.validate((valid) => { |
| | | if (valid) { |
| | | this.$axios.post(this.$api.deviceAccidentReport.addDeviceAccidentReport, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | // å
³éå¼¹æ¡ |
| | | resetForm () { |
| | | this.dialogVisible = false |
| | | this.$emit('closeDialog') |
| | | }, |
| | | getUserList(){ |
| | | this.$axios.post(this.$api.user.selectUserList, { |
| | | page: {current: -1, size: -1,}, |
| | | entity: {name: null} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.userList = res.data.body.records |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .form-item { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-right: 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="applicationForm" title="æ·»å è®¾å¤æ ¸æ¥è®¡å" |
| | | width="80%" @close="closeDialog"> |
| | | <div style="display: flex;align-items: center;"> |
| | | <el-button style="margin-right: 10px" size="small" type="primary" @click="addTableRow">æ·»å </el-button> |
| | | <span style="width: 80px">计ååç§°ï¼</span> |
| | | <el-input style="width: 300px;margin-right: 10px" v-model="form.planName" clearable size="small"></el-input> |
| | | <span style="width: 60px">年份ï¼</span> |
| | | <el-date-picker |
| | | v-model="form.planYear" |
| | | type="year" |
| | | value-format="yyyy" |
| | | clearable |
| | | size="small" |
| | | format="yyyy" |
| | | placeholder="鿩年"> |
| | | </el-date-picker> |
| | | </div> |
| | | <div style="margin: 10px 0"> |
| | | <el-table ref="yearTable" :data="examinePlanDetailsList" |
| | | id="templateParamTable" row-key="deviceId" |
| | | height="300px" style="width: 100% ;"> |
| | | <el-table-column label="设å¤åç§°" min-width="190" prop="deviceName"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceName" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="设å¤ç¼å·" min-width="190" prop="deviceNumber"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceNumber" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ ¸æ¥æ¶é´" min-width="170" prop="checkTime"> |
| | | <template slot-scope="scope"> |
| | | <el-date-picker v-model="scope.row.checkTime" |
| | | clearable |
| | | format="yyyy-MM" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width:100%" |
| | | type="date" |
| | | value-format="yyyy-MM"> |
| | | </el-date-picker> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ ¸æ¥ææ " min-width="120" prop="checkIndex"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.checkIndex" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ ¸æ¥æ¹æ³" min-width="120" prop="checkMethod"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.checkMethod" clearable size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ç»æå¦ä½å¤å®" min-width="90" prop="howResults"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.howResults" clearable size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ ¸æ¥è´£ä»»äºº" min-width="170" prop="checkChargerUserId"> |
| | | <template slot-scope="scope"> |
| | | <el-select v-model="scope.row.checkChargerUserId" placeholder="è¯·éæ©" size="small" style="width: 100%" @change="setCheckChargerUser(scope.row.checkChargerUserId, scope.row)"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="夿³¨" min-width="170" prop="remark"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.remark" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="æä½" width="80" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button style="color: #f56c6c" type="text" @click="deleteRow(scope.$index)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeDialog">å æ¶</el-button> |
| | | <el-button :loading="submitFormLoading" type="primary" @click="submitForm">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="addEquipDia" title="æ°å¢å¹´åº¦è®¡å" width="50%"> |
| | | <el-table ref="multipleTable" :data="equipOptions" tooltip-effect="dark" height="500" |
| | | style="width: 100%" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" prop="label"></el-table-column> |
| | | <el-table-column prop="value" label="设å¤ç¼å·"></el-table-column> |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addEquipDia = false">å æ¶</el-button> |
| | | <el-button :loading="submitFormLoading" type="primary" @click="changeMachineName">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Sortable from "sortablejs"; |
| | | |
| | | export default { |
| | | name: "addVerificationYearPlanDia", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | applicationForm: false, |
| | | addEquipDia: false, |
| | | submitFormLoading: false, |
| | | equipOptions: [], |
| | | examinePlanDetailsList: [], |
| | | selectionRows: [], |
| | | userList: [], |
| | | form: { |
| | | planName: '', |
| | | planYear: '', |
| | | examinePlanDetailsList: [], |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDialog () { |
| | | this.form = { |
| | | planName: '', |
| | | planYear: '', |
| | | examinePlanDetailsList: [], |
| | | } |
| | | this.applicationForm = true |
| | | this.getUserList() |
| | | }, |
| | | // æ·»å è®¾å¤ |
| | | addTableRow () { |
| | | this.addEquipDia = true |
| | | this.getEquipOptions() |
| | | }, |
| | | handleSelectionChange (selection) { |
| | | this.selectionRows = selection |
| | | }, |
| | | setCheckChargerUser (id, row) { |
| | | const index = this.userList.findIndex(item => item.id === id) |
| | | if (index > -1) { |
| | | row.checkChargerUser = this.userList[index].name |
| | | } |
| | | }, |
| | | changeMachineName () { |
| | | this.examinePlanDetailsList = [] |
| | | this.selectionRows.map(val => { |
| | | this.examinePlanDetailsList.push({deviceId: val.id, deviceName: val.label, deviceNumber: val.value, specificationModel: val.specificationModel}) |
| | | }) |
| | | this.addEquipDia = false |
| | | this.rowDrop() |
| | | }, |
| | | rowDrop() { |
| | | const that = this |
| | | const tbody = document.querySelector( |
| | | '#templateParamTable .el-table__body-wrapper tbody' |
| | | ) |
| | | if (!this.sortTable) { |
| | | this.sortTable = Sortable.create(tbody, { |
| | | animation: 200, //å¨ç»æ¶é¿ |
| | | handle: ".el-table__row", //坿æ½åºåclass |
| | | //ææ½ä¸äºä»¶ |
| | | onMove: ({ dragged, related }) => { |
| | | const oldRow = that.examinePlanDetailsList[dragged.rowIndex] //æ§ä½ç½®æ°æ® |
| | | const newRow = that.examinePlanDetailsList[related.rowIndex] //è¢«ææ½çæ°æ°æ® |
| | | }, |
| | | //ææ½ç»æäºä»¶ |
| | | onEnd: evt => { |
| | | const curRow = that.examinePlanDetailsList.splice(evt.oldIndex, 1)[0]; |
| | | that.examinePlanDetailsList.splice(evt.newIndex, 0, curRow); |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | // å é¤è¡¨æ ¼è¡ |
| | | deleteRow (index) { |
| | | this.examinePlanDetailsList.splice(index, 1) |
| | | }, |
| | | // æäº¤æ°å¢ |
| | | submitForm() { |
| | | this.form.examinePlanDetailsList = this.HaveJson(this.examinePlanDetailsList) |
| | | this.submitFormLoading = true |
| | | this.$axios.post(this.$api.deviceExaminePlan.addDeviceExaminePlan, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.closeDialog() |
| | | this.$emit('closeDia') |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | }, |
| | | closeDialog () { |
| | | this.applicationForm = false |
| | | }, |
| | | // è·åææè®¾å¤ |
| | | getEquipOptions() { |
| | | this.equipOptions = [] |
| | | this.$axios.get(this.$api.deviceScope.deviceScopeSearch+'?status=0').then(res => { |
| | | if (res.code === 200 && res.data) { |
| | | this.equipOptions = res.data.map(m => { |
| | | m.value = m.managementNumber |
| | | m.label = m.deviceName |
| | | return m |
| | | }) |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | getUserList(){ |
| | | this.$axios.post(this.$api.user.selectUserList, { |
| | | page: {current: -1, size: -1,}, |
| | | entity: {name: null} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.userList = res.data.body.records |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="applicationForm" title="æ·»å è®¾å¤æ ¡å计å" |
| | | width="80%" @close="closeDialog"> |
| | | <div style="display: flex;align-items: center;"> |
| | | <el-button style="margin-right: 10px" size="small" type="primary" @click="addTableRow">æ·»å </el-button> |
| | | <span style="width: 80px">计ååç§°ï¼</span> |
| | | <el-input style="width: 300px;margin-right: 10px" v-model="form.planName" clearable size="small"></el-input> |
| | | <span style="width: 60px">年份ï¼</span> |
| | | <el-date-picker |
| | | v-model="form.planYear" |
| | | type="year" |
| | | value-format="yyyy" |
| | | clearable |
| | | size="small" |
| | | format="yyyy" |
| | | placeholder="鿩年"> |
| | | </el-date-picker> |
| | | </div> |
| | | <div style="margin: 10px 0"> |
| | | <el-table ref="yearTable" :data="calibrationPlanDetailList" |
| | | id="templateParamTable" row-key="deviceId" |
| | | height="300px" style="width: 100% ;"> |
| | | <el-table-column label="设å¤åç§°ååå·" min-width="190" prop="deviceName"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceName" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="仪å¨ç¼å·" min-width="190" prop="deviceNumber"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceNumber" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="è®¾å¤æ°é" min-width="120" prop="deviceAmount"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceAmount" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ£å®åä½" min-width="120" prop="verificationUnit"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.verificationUnit" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ£å®å¨æ" min-width="120" prop="verificationCycles"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.verificationCycles" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æè¿æ£å®æ¶é´" min-width="170" prop="lastDate"> |
| | | <template slot-scope="scope"> |
| | | <el-date-picker v-model="scope.row.lastDate" |
| | | clearable |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width:100%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ¬å¹´è®¡åæ ¡åæ¶é´" min-width="170" prop="planDate"> |
| | | <template slot-scope="scope"> |
| | | <el-date-picker v-model="scope.row.planDate" |
| | | clearable |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width:100%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="夿³¨" min-width="170" prop="remark"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.remark" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="æä½" width="80" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button style="color: #f56c6c" type="text" @click="deleteRow(scope.$index)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeDialog">å æ¶</el-button> |
| | | <el-button :loading="submitFormLoading" type="primary" @click="submitForm">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="addEquipDia" title="æ°å¢å¹´åº¦è®¡å" width="50%"> |
| | | <el-table ref="multipleTable" :data="equipOptions" tooltip-effect="dark" height="500" |
| | | style="width: 100%" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" prop="label"></el-table-column> |
| | | <el-table-column prop="value" label="设å¤ç¼å·"></el-table-column> |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addEquipDia = false">å æ¶</el-button> |
| | | <el-button :loading="submitFormLoading" type="primary" @click="changeMachineName">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Sortable from "sortablejs"; |
| | | |
| | | export default { |
| | | name: "addYearPlanDia", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | applicationForm: false, |
| | | addEquipDia: false, |
| | | submitFormLoading: false, |
| | | equipOptions: [], |
| | | calibrationPlanDetailList: [], |
| | | selectionRows: [], |
| | | form: { |
| | | planName: '', |
| | | planYear: '', |
| | | calibrationPlanDetailList: [], |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDialog () { |
| | | this.form = { |
| | | planName: '', |
| | | planYear: '', |
| | | examinePlanDetailsList: [], |
| | | } |
| | | this.applicationForm = true |
| | | }, |
| | | // æ·»å è®¾å¤ |
| | | addTableRow () { |
| | | this.addEquipDia = true |
| | | this.getEquipOptions() |
| | | }, |
| | | handleSelectionChange (selection) { |
| | | this.selectionRows = selection |
| | | }, |
| | | changeMachineName () { |
| | | this.calibrationPlanDetailList = [] |
| | | this.selectionRows.map(val => { |
| | | this.calibrationPlanDetailList.push({deviceId: val.id, deviceName: val.label, deviceNumber: val.value, specificationModel: val.specificationModel}) |
| | | }) |
| | | this.addEquipDia = false |
| | | this.rowDrop() |
| | | }, |
| | | rowDrop() { |
| | | const that = this |
| | | const tbody = document.querySelector( |
| | | '#templateParamTable .el-table__body-wrapper tbody' |
| | | ) |
| | | if (!this.sortTable) { |
| | | this.sortTable = Sortable.create(tbody, { |
| | | animation: 200, //å¨ç»æ¶é¿ |
| | | handle: ".el-table__row", //坿æ½åºåclass |
| | | //ææ½ä¸äºä»¶ |
| | | onMove: ({ dragged, related }) => { |
| | | const oldRow = that.calibrationPlanDetailList[dragged.rowIndex] //æ§ä½ç½®æ°æ® |
| | | const newRow = that.calibrationPlanDetailList[related.rowIndex] //è¢«ææ½çæ°æ°æ® |
| | | }, |
| | | //ææ½ç»æäºä»¶ |
| | | onEnd: evt => { |
| | | const curRow = that.calibrationPlanDetailList.splice(evt.oldIndex, 1)[0]; |
| | | that.calibrationPlanDetailList.splice(evt.newIndex, 0, curRow); |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | // å é¤è¡¨æ ¼è¡ |
| | | deleteRow (index) { |
| | | this.calibrationPlanDetailList.splice(index, 1) |
| | | }, |
| | | // æäº¤æ°å¢ |
| | | submitForm() { |
| | | this.form.calibrationPlanDetailList = this.HaveJson(this.calibrationPlanDetailList) |
| | | this.submitFormLoading = true |
| | | this.$axios.post(this.$api.deviceCalibrationPlan.addDeviceCalibrationPlan, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.closeDialog() |
| | | this.$emit('closeDia') |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | }, |
| | | closeDialog () { |
| | | this.applicationForm = false |
| | | }, |
| | | // è·åææè®¾å¤ |
| | | getEquipOptions() { |
| | | this.equipOptions = [] |
| | | this.$axios.get(this.$api.deviceScope.deviceScopeSearch+'?status=0').then(res => { |
| | | if (res.code === 200 && res.data) { |
| | | this.equipOptions = res.data.map(m => { |
| | | m.value = m.managementNumber |
| | | m.label = m.deviceName |
| | | return m |
| | | }) |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="å©ç¨å¤é¨ä»ªå¨è®¾å¤ç³è¯·è¡¨" |
| | | width="80%" @close="resetForm"> |
| | | <el-steps :active="currentStep" align-center finish-status="success"> |
| | | <el-step title="å¡«åç³è¯·è¡¨" @click.native="setStep(0)"></el-step> |
| | | <el-step title="ç³è¯·é¨é¨è´è´£äººæè§" @click.native="setStep(1)"></el-step> |
| | | <el-step title="计é室æè§" @click.native="setStep(2)"></el-step> |
| | | <el-step title="æ¹å人" @click.native="setStep(3)"></el-step> |
| | | </el-steps> |
| | | <el-form ref="modelForm" |
| | | :model="form" :rules="rules" label-width="160px"> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="åä½åç§°ï¼" prop="unitName"> |
| | | <el-input v-model="form.unitName" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="å°åï¼" prop="address"> |
| | | <el-input v-model="form.address" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="仪å¨åç§°ï¼" prop="deviceName"> |
| | | <el-input v-model="form.deviceName" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="åå·ï¼" prop="deviceModel"> |
| | | <el-input v-model="form.deviceModel" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="é
ä»¶ï¼" prop="parts"> |
| | | <el-input v-model="form.parts" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="对æ¹ä»ªå¨ç¼å·ï¼" prop="instrumentNumber"> |
| | | <el-input v-model="form.instrumentNumber" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="24"> |
| | | <el-form-item label="ä»ªå¨ææ¯ææ ï¼" prop="technicalIndex"> |
| | | <el-input v-model="form.technicalIndex" :disabled="currentStep !== 0" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="24"> |
| | | <el-form-item label="éæ±ææ¯è¦æ±ï¼" prop="technicalRequirements"> |
| | | <el-input v-model="form.technicalRequirements" :disabled="currentStep !== 0" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="24"> |
| | | <el-form-item label="å©ç¨åå ï¼" prop="useReason"> |
| | | <el-input v-model="form.useReason" :disabled="currentStep !== 0" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="24"> |
| | | <el-form-item label="ç³è¯·é¨é¨è´è´£äººï¼" prop="departmentHeadUserId"> |
| | | <el-select v-model="form.departmentHeadUserId" :disabled="currentStep !== 0" placeholder="è¯·éæ©" size="small" style="width: 50%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 1" :span="24"> |
| | | <el-form-item label="ç³è¯·é¨é¨è´è´£äººæè§ï¼" prop="departmentHeadOpinion"> |
| | | <el-input v-model="form.departmentHeadOpinion" :disabled="currentStep !== 1" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 1" :span="24"> |
| | | <el-form-item label="计é室è´è´£äººï¼" prop="meteringRoomUserId"> |
| | | <el-select v-model="form.meteringRoomUserId" :disabled="currentStep !== 1" placeholder="è¯·éæ©" size="small" style="width: 50%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 2" :span="24"> |
| | | <el-form-item label="计é室æè§ï¼" prop="meteringRoomOpinion"> |
| | | <el-input v-model="form.meteringRoomOpinion" :disabled="currentStep !== 2" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 2" :span="24"> |
| | | <el-form-item label="æ¹å人ï¼" prop="approverUserId"> |
| | | <el-select v-model="form.approverUserId" :disabled="currentStep !== 2" placeholder="è¯·éæ©" size="small" style="width: 50%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 3" :span="24"> |
| | | <el-form-item label="æ¹å人æè§ï¼" prop="approverOpinion"> |
| | | <el-input v-model="form.approverOpinion" :disabled="currentStep !== 3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="resetForm">å æ¶</el-button> |
| | | <el-button v-if="currentStep !== 4" :loading="submitFormLoading" type="primary" @click="submitForm">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "applicationForm", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | dialogVisible: false, |
| | | submitFormLoading: false, |
| | | form: { |
| | | externalApplyId: '', |
| | | unitName: '', |
| | | address: '', |
| | | deviceName: '', |
| | | deviceModel: '', |
| | | parts: '', |
| | | instrumentNumber: '', |
| | | technicalIndex: '', |
| | | technicalRequirements: '', |
| | | useReason: '', |
| | | departmentHeadUserId: '', |
| | | departmentHeadOpinion: '', |
| | | meteringRoomUserId: '', |
| | | meteringRoomOpinion: '', |
| | | approverUserId: '', |
| | | approverOpinion: '', |
| | | flowType: '' |
| | | }, |
| | | currentStep: 0, |
| | | showStep: 0, |
| | | rules: { |
| | | departmentHeadUserId: [{ required: true, message: 'è¯·éæ©ç³è¯·é¨é¨è´è´£äºº', trigger: 'change' }], |
| | | meteringRoomUserId: [{ required: true, message: 'è¯·éæ©è®¡é室è´è´£äºº', trigger: 'change' }], |
| | | approverUserId: [{ required: true, message: 'è¯·éæ©æ¹å人', trigger: 'change' }], |
| | | }, |
| | | userList: [], |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDialog (id) { |
| | | this.dialogVisible = true |
| | | this.form.externalApplyId = id |
| | | this.getUserList() |
| | | if (this.form.externalApplyId) { |
| | | this.searchInfo() |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | searchInfo () { |
| | | this.$axios.get(this.$api.deviceExternalApply.getDeviceExternalApply+'?externalApplyId=' + this.form.externalApplyId).then(res => { |
| | | if (res.code === 200) { |
| | | this.form = {...res.data} |
| | | if (res.data.isFinish === 0) { |
| | | if (this.form.departmentHeadUserId) { |
| | | this.currentStep = 1 |
| | | this.showStep = 1 |
| | | } |
| | | if (this.form.meteringRoomUserId) { |
| | | this.currentStep = 2 |
| | | this.showStep = 2 |
| | | } |
| | | if (this.form.approverUserId) { |
| | | this.currentStep = 3 |
| | | this.showStep = 3 |
| | | } |
| | | } else { |
| | | this.currentStep = 4 |
| | | this.showStep = 3 |
| | | } |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | setStep (step) { |
| | | this.showStep = step |
| | | }, |
| | | // æäº¤è¡¨å |
| | | submitForm () { |
| | | this.form.flowType = this.currentStep |
| | | this.$refs.modelForm.validate((valid) => { |
| | | if (valid) { |
| | | this.$axios.post(this.$api.deviceExternalApply.addDeviceExternalApply, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | // å
³éå¼¹æ¡ |
| | | resetForm () { |
| | | this.dialogVisible = false |
| | | this.$emit('closeDialog') |
| | | }, |
| | | getUserList(){ |
| | | this.$axios.post(this.$api.user.selectUserList, { |
| | | page: {current: -1, size: -1,}, |
| | | entity: {name: null} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.userList = res.data.body.records |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .form-item { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-right: 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="仪å¨è®¾å¤æé´æ ¸æ¥æ¯å¯¹è®°å½è¡¨" |
| | | width="80%" @close="resetForm"> |
| | | <el-steps :active="currentStep" align-center finish-status="success"> |
| | | <el-step title="å¡«åè®¾å¤æ ¸æ¥å¯¹æ¯è®°å½"></el-step> |
| | | <el-step title="å®¡æ ¸"></el-step> |
| | | </el-steps> |
| | | <el-row> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <span style="width: 110px">仪å¨åç§°ï¼</span> |
| | | <el-select v-model="form.deviceName" |
| | | :disabled="currentStep !== 0" |
| | | class="table_input" |
| | | clearable |
| | | filterable |
| | | placeholder="设å¤åç§°" |
| | | size="small" |
| | | style="width:200px" |
| | | @change="(val)=>changeMachineName(val)"> |
| | | <el-option v-for="item in equipOptions" :key="item.value" :label="item.label" :value="item.label"> |
| | | {{item.label + '-' + item.value}} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <span style="width: 130px">仪å¨ç¼å·ï¼</span> |
| | | <el-input v-model="form.deviceNumber" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <span style="width: 130px">精度ç级ï¼</span> |
| | | <el-input v-model="form.accuracyGrade" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <div style="margin: 10px">æ ¸æ¥ä½¿ç¨ç©è´¨</div> |
| | | <el-row> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <span style="width: 130px">åç§°ï¼</span> |
| | | <el-input v-model="form.materialName" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <span style="width: 130px">ç¼å·ï¼</span> |
| | | <el-input v-model="form.materialNumber" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <span style="width: 130px">精度/ä¸ç¡®å®åº¦ï¼</span> |
| | | <el-input v-model="form.materialAccuracyUncertainty" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <span style="width: 130px">åå·ï¼</span> |
| | | <el-input v-model="form.materialModel" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <span style="width: 130px">æ ¸æ¥æ¹å¼ï¼</span> |
| | | <el-input v-model="form.materialCheckMethod" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <span style="width: 130px">æ ¸æ¥é¡¹ç®ï¼</span> |
| | | <el-input v-model="form.materialCheckItems" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <span style="width: 130px">温度ï¼</span> |
| | | <el-input v-model="form.temperature" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="form-item"> |
| | | <span style="width: 130px">湿度ï¼</span> |
| | | <el-input v-model="form.humidity" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-button size="small" style="margin: 10px 0" type="primary" @click="addRow">æ·»å </el-button> |
| | | <el-table :data="recordDetailList" height="300" style="width: 100%"> |
| | | <el-table-column label="æµè¯ç¹" min-width="130" prop="testPoint"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.testPoint" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column min-width="180"> |
| | | <template slot="header" slot-scope="scope"> |
| | | <el-input v-model="form.dataValue1" :disabled="currentStep !== 0" size="small"/> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.dataValue1" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column min-width="180"> |
| | | <template slot="header" slot-scope="scope"> |
| | | <el-input v-model="form.dataValue2" :disabled="currentStep !== 0" size="small"/> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.dataValue2" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column min-width="180"> |
| | | <template slot="header" slot-scope="scope"> |
| | | <el-input v-model="form.dataValue3" :disabled="currentStep !== 0" size="small"/> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.dataValue3" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column min-width="180"> |
| | | <template slot="header" slot-scope="scope"> |
| | | <el-input v-model="form.dataValue4" :disabled="currentStep !== 0" size="small"/> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.dataValue4" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column min-width="180"> |
| | | <template slot="header" slot-scope="scope"> |
| | | <el-input v-model="form.dataValue5" :disabled="currentStep !== 0" size="small"/> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.dataValue5" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column min-width="180"> |
| | | <template slot="header" slot-scope="scope"> |
| | | <el-input v-model="form.dataValue6" :disabled="currentStep !== 0" size="small"/> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.dataValue6" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <table border="1" cellspacing="10" class="table"> |
| | | <tr> |
| | | <td>æå¤§åå·®</td> |
| | | <th> |
| | | <el-input v-model="form.maximun1" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="form.maximun2" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="form.maximun3" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="form.maximun4" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="form.maximun5" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="form.maximun6" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | </tr> |
| | | <tr> |
| | | <td>ç¸å¯¹åå·®</td> |
| | | <th> |
| | | <el-input v-model="form.relative1" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="form.relative2" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="form.relative3" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="form.relative4" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="form.relative5" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | <th> |
| | | <el-input v-model="form.relative6" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </th> |
| | | </tr> |
| | | </table> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <div class="form-item"> |
| | | <span style="width: 80px">å¤å®ï¼</span> |
| | | <el-input v-model="form.determine" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <div class="form-item"> |
| | | <span style="width: 80px">夿³¨ï¼</span> |
| | | <el-input v-model="form.remark" :disabled="currentStep !== 0" clearable size="small" type="textarea"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">å®¡æ ¸äººï¼</span> |
| | | <el-select v-model="form.reviewUserId" :disabled="currentStep !== 0" placeholder="è¯·éæ©" size="small" style="width: 100%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="resetForm">å æ¶</el-button> |
| | | <el-button v-if="currentStep === 0" :loading="submitFormLoading" type="primary" @click="submitCheck">ç¡® å®</el-button> |
| | | <el-button v-if="currentStep === 1" :loading="submitFormLoading" @click="examine(0)">ä¸éè¿</el-button> |
| | | <el-button v-if="currentStep === 1" :loading="submitFormLoading" type="primary" @click="examine(1)">é è¿</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "check-record", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | dialogVisible: false, |
| | | recordDetailList: [], |
| | | search: "", |
| | | form: { |
| | | deviceName: '', |
| | | deviceNumber: '', |
| | | accuracyGrade: '', |
| | | materialName: '', |
| | | materialNumber: '', |
| | | materialAccuracyUncertainty: '', |
| | | materialModel: '', |
| | | materialCheckMethod: '', |
| | | materialCheckItems: '', |
| | | temperature: '', |
| | | humidity: '', |
| | | recordDetailList: [], |
| | | dataValue1: '', |
| | | dataValue2: '', |
| | | dataValue3: '', |
| | | dataValue4: '', |
| | | dataValue5: '', |
| | | dataValue6: '', |
| | | maximun1: '', |
| | | maximun2: '', |
| | | maximun3: '', |
| | | maximun4: '', |
| | | maximun5: '', |
| | | maximun6: '', |
| | | relative1: '', |
| | | relative2: '', |
| | | relative3: '', |
| | | relative4: '', |
| | | relative5: '', |
| | | relative6: '', |
| | | determine: '', |
| | | remark: '', |
| | | planDetailsId: '', |
| | | checkerUserId: '', |
| | | }, |
| | | currentStep: 0, |
| | | distributionDetailList: [ |
| | | {label: 'æå¤§åå·®', value: 1}, |
| | | {label: 'ç¸å¯¹åå·®', value: 2}, |
| | | ], |
| | | equipOptions: [], |
| | | submitFormLoading: false, |
| | | userList: [], |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDialog (row) { |
| | | this.dialogVisible = true |
| | | this.form.planDetailsId = row.planDetailsId |
| | | this.getEquipOptions() |
| | | this.getUserList() |
| | | this.searchInfo() |
| | | }, |
| | | searchInfo () { |
| | | this.$axios.get(this.$api.deviceExaminePlan.getExamineRecord+'?planDetailsId=' + this.form.planDetailsId).then(res => { |
| | | if (res.code === 200) { |
| | | let planDetailsId = this.form.planDetailsId |
| | | this.form = {...res.data} |
| | | this.form.planDetailsId = planDetailsId |
| | | this.recordDetailList = this.form.recordDetailList || [] |
| | | if (!this.form.checkerUserId) { |
| | | this.currentStep = 0 |
| | | } else { |
| | | this.currentStep = 1 |
| | | } |
| | | if (this.form.reviewStatus === 1) { |
| | | this.currentStep = 2 |
| | | } |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | // èµå¼ä»ªå¨ç¼å· |
| | | changeMachineName (value) { |
| | | const index = this.equipOptions.findIndex(item => item.deviceName === value) |
| | | this.form.deviceNumber = this.equipOptions[index].managementNumber |
| | | }, |
| | | addRow () { |
| | | this.recordDetailList.push({testPoint: ''}) |
| | | }, |
| | | // æäº¤è¡¨å |
| | | submitCheck () { |
| | | console.log(333,this.form) |
| | | this.form.recordDetailList = this.HaveJson(this.recordDetailList) |
| | | this.submitFormLoading = true |
| | | this.$axios.post(this.$api.deviceExaminePlan.addExamineRecord, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | }, |
| | | // æäº¤å®¡æ ¸ |
| | | examine (statue) { |
| | | const params = { |
| | | planDetailsId: this.form.planDetailsId, |
| | | reviewStatus: statue, |
| | | } |
| | | this.$axios.post(this.$api.deviceExaminePlan.reviewExamineRecord, |
| | | params, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å®¡æ ¸æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | }, |
| | | resetForm () { |
| | | this.dialogVisible = false |
| | | this.$emit('closeDialog1') |
| | | }, |
| | | // è·åææè®¾å¤ |
| | | getEquipOptions() { |
| | | this.equipOptions = [] |
| | | this.$axios.get(this.$api.deviceScope.deviceScopeSearch+'?status=0').then(res => { |
| | | if (res.code === 200 && res.data) { |
| | | this.equipOptions = res.data.map(m => { |
| | | m.value = m.managementNumber |
| | | m.label = m.deviceName |
| | | m.id = m.id |
| | | return m |
| | | }) |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | getUserList(){ |
| | | this.$axios.post(this.$api.user.selectUserList, { |
| | | page: {current: -1, size: -1,}, |
| | | entity: {name: null} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.userList = res.data.body.records |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .table td { |
| | | padding: 10px; |
| | | } |
| | | .table th { |
| | | padding: 10px; |
| | | } |
| | | .form { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | .form-item { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-right: 10px; |
| | | margin-top: 10px; |
| | | } |
| | | >>>.el-dialog__body { |
| | | max-height: 650px; |
| | | overflow-y: auto; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div> |
| | | <div style="margin: 10px 0;text-align: right"> |
| | | <el-button size="small" type="primary" @click="handleForm('add')">æ°å¢</el-button> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTable" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData" |
| | | height="calc(100vh - 18em)" |
| | | style="width: 100% ;"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <el-table-column label="å°è´§æ¥æ" min-width="150" prop="arrivalDate"></el-table-column> |
| | | <el-table-column label="éé¢" min-width="100" prop="goldAmount"></el-table-column> |
| | | <el-table-column label="ç»´ä¿®åä½" min-width="150" prop="maintenanceunit"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" label="æä½" min-width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="handleForm('edit',scope.row.acceptanceId)">ç¼è¾</el-button> |
| | | <el-button size="small" type="text" @click="handleForm('view',scope.row.acceptanceId)">æ¥ç</el-button> |
| | | <el-button size="small" type="text" @click="record(scope.row)">éä»¶</el-button> |
| | | <el-button size="small" type="text" @click="handleDownOne(scope.row.acceptanceId)">导åº</el-button> |
| | | <el-button size="small" style="color: #f56c6c" type="text" @click="deleteFun(scope.row.acceptanceId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1" |
| | | @current-change="handleCurrentChange1"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <acceptance-form v-if="applicationForm" ref="applicationForm" @closeDialog="closeDialog"></acceptance-form> |
| | | <!--ä¸ä¼ æ¥å--> |
| | | <el-dialog :visible.sync="filesDialogVisible" title="éä»¶" width="80%" @closed="closeFilesLook"> |
| | | <div style="display: flex;justify-content: space-between;"> |
| | | <el-upload ref='upload' |
| | | :action="fileAction" |
| | | :auto-upload="true" |
| | | :before-upload="fileBeforeUpload" |
| | | :data="{acceptanceId: acceptanceId}" |
| | | :headers="headers" :on-error="onError" |
| | | :on-success="handleSuccessUp" |
| | | :show-file-list="false" |
| | | accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;"> |
| | | <el-button size="small" style="height: 38px" type="primary">éä»¶ä¸ä¼ </el-button> |
| | | </el-upload> |
| | | </div> |
| | | <div> |
| | | <ZTTable |
| | | ref="yearTable" |
| | | :column="columnData" |
| | | :height="'calc(100vh - 30em)'" |
| | | :highlightCurrentRow="true" |
| | | :table-data="tableData" |
| | | :table-loading="tableLoading" |
| | | style="margin-top: 0.5em;"> |
| | | </ZTTable> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog |
| | | :visible.sync="lookDialogVisible" |
| | | fullscreen |
| | | title="æ¥çéä»¶" top="5vh" width="800px"> |
| | | <filePreview v-if="lookDialogVisible" :currentFile="{}" |
| | | :fileUrl="fileUrl" style="height: 90vh;overflow-y: auto;"/> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import AcceptanceForm from "./acceptance-form.vue"; |
| | | import ZTTable from "../caorui/ZTTable/index.vue"; |
| | | import filePreview from "../tool/file-preview.vue"; |
| | | |
| | | export default { |
| | | name: "equipment-acceptance", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {filePreview, ZTTable, AcceptanceForm}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | pagination1: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | yearTableDetailDataLoading: false, |
| | | yearTableDetailData: [], |
| | | applicationForm: false, |
| | | filesDialogVisible: false, |
| | | columnData: [ |
| | | { |
| | | label: 'æä»¶åç§°', |
| | | prop: 'fileName', |
| | | minWidth: '150px' |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | minWidth: '100', |
| | | label: 'æä½', |
| | | fixed: 'right', |
| | | operation: [ |
| | | { |
| | | name: 'é¢è§', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleLook(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'ä¸è½½', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.upload(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | color: '#f56c6c', |
| | | clickFun: (row) => { |
| | | this.delete(row) |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | acceptanceId: '', // ä¸ä¼ éä»¶å½åè¡çid |
| | | currentInfo:{}, |
| | | lookDialogVisible: false, |
| | | fileUrl: '' |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢ |
| | | getYearTableDetailData(deviceId) { |
| | | this.yearTableDetailDataLoading = true |
| | | this.$axios.post(this.$api.deviceAcceptance.pageDeviceAcceptance, { |
| | | page: { |
| | | current: this.pagination1.current, |
| | | size: this.pagination1.size, |
| | | }, |
| | | entity: { |
| | | deviceId: deviceId, |
| | | } |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableDetailData = res.data.records |
| | | this.pagination1.total = res.data.total |
| | | } |
| | | this.yearTableDetailDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDetailDataLoading = false |
| | | }) |
| | | }, |
| | | handleForm(type, id) { |
| | | this.applicationForm = true |
| | | this.$nextTick(() => { |
| | | this.$refs.applicationForm.openDialog(type, id, this.clickNodeVal.value) |
| | | }) |
| | | }, |
| | | closeDialog() { |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // æå¼æ¥åå¼¹æ¡ |
| | | record (row) { |
| | | this.filesDialogVisible = true |
| | | this.acceptanceId = row.acceptanceId |
| | | this.searchTableList() |
| | | }, |
| | | // æ¥è¯¢éä»¶å表 |
| | | searchTableList () { |
| | | this.tableLoading = true |
| | | this.$axios.get(this.$api.deviceAcceptance.getDeviceAcceptanceFileList + '?acceptanceId=' + this.acceptanceId).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.tableData = res.data |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | console.log('err---', err); |
| | | }) |
| | | }, |
| | | // æ¥çæä»¶ |
| | | handleLook(row){ |
| | | this.currentInfo = row |
| | | this.lookDialogVisible = true |
| | | const state = /\.(jpg|jpeg|png|gif)$/i.test(this.currentInfo.fileUrl) |
| | | if (state) { |
| | | this.fileUrl = this.javaApi+'/img/'+ this.currentInfo.fileUrl |
| | | } else { |
| | | this.fileUrl = this.javaApi+'/word/'+ this.currentInfo.fileUrl |
| | | } |
| | | }, |
| | | // ä¸è½½ |
| | | upload (row) { |
| | | let url = ''; |
| | | if(row.type==1){ |
| | | url = this.javaApi+'/img/'+row.fileUrl |
| | | file.downloadIamge(url,row.fileName) |
| | | }else{ |
| | | url = this.javaApi+'/word/'+row.fileUrl |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = row.fileName; |
| | | link.click(); |
| | | } |
| | | }, |
| | | // å é¤ |
| | | delete (row) { |
| | | this.$confirm('æ¤æä½å°å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.tableLoading = true |
| | | this.$axios.get(this.$api.deviceAcceptance.delDeviceAcceptanceFileList + '?acceptanceFileId=' + row.acceptanceFileId).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('å 餿å') |
| | | this.searchTableList() |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | console.log('err---', err); |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // ä¸ä¼ éä»¶ |
| | | fileBeforeUpload(file) { |
| | | let flag = true |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload.clearFiles() |
| | | flag = false |
| | | } |
| | | if (!flag) { |
| | | return Promise.reject(flag); //æ£ç¡®çç»æ¢ |
| | | } |
| | | }, |
| | | onError(err, file, fileList,type) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | handleSuccessUp(response, ) { |
| | | this.upLoading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.searchTableList() |
| | | } |
| | | }, |
| | | closeFilesLook () { |
| | | this.filesDialogVisible = false |
| | | }, |
| | | // å页 |
| | | handleSizeChange1(val) { |
| | | this.pagination1.size = val |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å页 |
| | | handleCurrentChange1(val) { |
| | | this.pagination1.current = val |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å¯¼åº |
| | | handleDownOne(id) { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceAcceptance.exportDeviceAcceptance + '?acceptanceId=' + id, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], {type: 'application/octet-stream'}); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤éªæ¶.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤éªæ¶.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | deleteFun(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceAcceptance.delDeviceAcceptance + '?acceptanceId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableDetailData(this.clickNodeVal.value); |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getYearTableDetailData(newVal.value); |
| | | } |
| | | }, |
| | | }, |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | 'token': sessionStorage.getItem('token') |
| | | } |
| | | }, |
| | | fileAction() { |
| | | return this.javaApi + this.$api.deviceAcceptance.uploadDeviceAcceptanceFile |
| | | |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | |
| | | .title-search { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 10px 0; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div> |
| | | <div style="margin: 10px 0;text-align: right"> |
| | | <el-button size="small" type="primary" @click="getYearTableDetailData(clickNodeVal.value)">å·æ°</el-button> |
| | | <el-button size="small" type="primary" @click="handleForm('')">æ°å¢</el-button> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTable" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData" |
| | | height="calc(100vh - 18em)" |
| | | style="width: 100% ;"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <!-- <el-table-column label="仪å¨åç§°" min-width="150" prop="unitName"></el-table-column>--> |
| | | <!-- <el-table-column label="åå·" min-width="100" prop="model"></el-table-column>--> |
| | | <el-table-column label="å°ç¹" min-width="150" prop="address"></el-table-column> |
| | | <el-table-column label="æ¥æ" min-width="180" prop="accidentDate"></el-table-column> |
| | | <el-table-column label="äºæ
æ
åµ" min-width="180" prop="descriptionOfAccident" show-overflow-tooltip></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="120"> |
| | | <template slot-scope="scope"> |
| | | <el-button :disabled="scope.row.ratifyStatus === 1" size="small" type="text" @click="handleForm(scope.row.accidentReportId)">æä½</el-button> |
| | | <el-button size="small" type="text" @click="handleDownOne(scope.row.accidentReportId)">导åº</el-button> |
| | | <el-button :disabled="scope.row.isFinish === 1" size="small" style="color: #f56c6c" type="text" @click="deleteFun(scope.row.accidentReportId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1" |
| | | @current-change="handleCurrentChange1"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <accident-form v-if="applicationForm" ref="applicationForm" @closeDialog="closeDialog"></accident-form> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import AccidentForm from "./accident-form.vue"; |
| | | |
| | | export default { |
| | | name: "equipment-accident", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {AccidentForm}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | pagination1: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | yearTableDetailDataLoading: false, |
| | | yearTableDetailData: [], |
| | | applicationForm: false |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢ |
| | | getYearTableDetailData(deviceId) { |
| | | this.yearTableDetailDataLoading = true |
| | | this.$axios.post(this.$api.deviceAccidentReport.pageDeviceAccidentReport, { |
| | | page: { |
| | | current: this.pagination1.current, |
| | | size: this.pagination1.size, |
| | | }, |
| | | entity: { |
| | | deviceId: deviceId, |
| | | } |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableDetailData = res.data.records |
| | | this.pagination1.total = res.data.total |
| | | } |
| | | this.yearTableDetailDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDetailDataLoading = false |
| | | }) |
| | | }, |
| | | handleForm(id) { |
| | | this.applicationForm = true |
| | | this.$nextTick(() => { |
| | | this.$refs.applicationForm.openDialog(id, this.clickNodeVal.value) |
| | | }) |
| | | }, |
| | | closeDialog() { |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å页 |
| | | handleSizeChange1(val) { |
| | | this.pagination1.size = val |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å页 |
| | | handleCurrentChange1(val) { |
| | | this.pagination1.current = val |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å¯¼åº |
| | | handleDownOne(id) { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceAccidentReport.exportDeviceAccidentReport + '?accidentReportId=' + id, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤äºæ
æ¥åå.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤äºæ
æ¥åå.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | deleteFun(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceAccidentReport.delDeviceAccidentReport + '?accidentReportId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableDetailData(this.clickNodeVal.value); |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getYearTableDetailData(newVal.value); |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | |
| | | .title-search { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 10px 0; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- è®¾å¤æ ¡å计å--> |
| | | <div> |
| | | <div> |
| | | <div style="margin: 10px 0;display: flex;align-items: center;justify-content: space-between;"> |
| | | <span>年度计å表</span> |
| | | <div> |
| | | <el-button size="small" type="primary" @click="getYearTableData">å·æ°</el-button> |
| | | <el-button style="margin-right: 10px" size="small" type="primary" @click="addYearPlan">æ°å¢</el-button> |
| | | <!-- <el-button size="small" type="primary" @click="record">导å
¥</el-button>--> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTable" v-loading="yearTableDataLoading" :data="yearTableData" |
| | | height="calc(60vh - 20em)" |
| | | highlight-current-row |
| | | style="width: 100% ;" @current-change="currentChange"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <el-table-column label="年份" min-width="80" prop="planYear"></el-table-column> |
| | | <el-table-column label="计ååç§°" min-width="180" prop="planName"></el-table-column> |
| | | <el-table-column label="ç¼å¶äºº" min-width="100" prop="writeName"></el-table-column> |
| | | <el-table-column label="ç¼å¶æ¥æ" min-width="150" prop="writeTime"></el-table-column> |
| | | <el-table-column label="æ¹åç¶æ" min-width="100" prop="ratifyStatus"> |
| | | <template slot-scope="scope"> |
| | | <el-tag v-if="scope.row.ratifyStatus === 1" type="success">æ¹å</el-tag> |
| | | <el-tag v-if="scope.row.ratifyStatus === 0" type="danger">䏿¹å</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ¹åå
容" min-width="150" prop="ratifyRemark"></el-table-column> |
| | | <el-table-column label="æ¹å人" min-width="100" prop="ratifyName"></el-table-column> |
| | | <el-table-column label="æ¹åæ¶é´" min-width="150" prop="ratifyTime"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="140"> |
| | | <template slot-scope="scope"> |
| | | <el-button :disabled="scope.row.ratifyStatus === 1" size="small" type="text" @click="handleApprove(scope.row.planId)">æ¹å</el-button> |
| | | <el-button size="small" type="text" @click="downLoadPost(scope.row.planId)">导åº</el-button> |
| | | <el-button size="small" style="color: #f56c6c" type="text" @click="deleteFun(scope.row.planId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <span>年度计åæç»è¡¨</span> |
| | | <div class="title"> |
| | | <div class="title-search"> |
| | | <span style="width: 120px;font-size: 14px">设å¤åç§°ååå·ï¼</span> |
| | | <el-input v-model="searchForm.deviceName" clearable size="small" style="margin-right: 10px;width: 220px"></el-input> |
| | | <span style="width: 80px;font-size: 14px">仪å¨ç¼å·ï¼</span> |
| | | <el-input v-model="searchForm.deviceNumber" clearable size="small" style="margin-right: 10px;width: 220px"></el-input> |
| | | <el-button size="small" type="primary" @click="getYearTableDetailData(currentRow)">æ¥ è¯¢</el-button> |
| | | <el-button size="small" @click="reset">é ç½®</el-button> |
| | | </div> |
| | | <div> |
| | | <el-button size="small" type="primary" @click="handleForm('add')">æ°å¢</el-button> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTableDetailData" v-loading="yearTableDetailDataLoading" |
| | | :data="yearTableDetailData" |
| | | height="calc(60vh - 20em)" style="width: 100% ;"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <el-table-column label="设å¤åç§°ååå·" min-width="180" prop="deviceName"></el-table-column> |
| | | <el-table-column label="è®¾å¤æ°é" min-width="180" prop="deviceAmount"></el-table-column> |
| | | <el-table-column label="仪å¨ç¼å·" min-width="150" prop="deviceNumber"></el-table-column> |
| | | <el-table-column label="æ£å®åä½" min-width="150" prop="verificationUnit"> </el-table-column> |
| | | <el-table-column label="æ£å®å¨æ" min-width="150" prop="verificationCycles"></el-table-column> |
| | | <el-table-column label="æè¿æ£å®æ¶é´" min-width="150" prop="lastDate"></el-table-column> |
| | | <el-table-column label="æ¬å¹´è®¡åæ ¡åæ¶é´" min-width="150" prop="planDate"></el-table-column> |
| | | <el-table-column label="夿³¨" min-width="150" prop="remark"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="140"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="handleForm('edit', scope.row)">ç¼è¾</el-button> |
| | | <el-button size="small" type="text" @click="handleForm('view', scope.row)">æ¥ç</el-button> |
| | | <el-button size="small" style="color: #f56c6c" type="text" @click="deleteFun1(scope.row.planDetailId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1" |
| | | @current-change="handleCurrentChange1"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="è®¾å¤æ ¡å计å" |
| | | width="80%" @close="resetForm"> |
| | | <el-form ref="modelForm" :model="form" :rules="rules" label-width="150px"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤åç§°ååå·ï¼" prop="deviceName"> |
| | | <el-input v-model="form.deviceName" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è®¾å¤æ°éï¼" prop="deviceAmount"> |
| | | <el-input v-model="form.deviceAmount" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="仪å¨ç¼å·ï¼" prop="deviceNumber"> |
| | | <el-input v-model="form.deviceNumber" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ£å®åä½ï¼" prop="verificationUnit"> |
| | | <el-input v-model="form.verificationUnit" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ£å®å¨æï¼" prop="verificationCycles"> |
| | | <el-input v-model="form.verificationCycles" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æè¿æ£å®æ¶é´ï¼" prop="lastDate"> |
| | | <el-date-picker v-model="form.lastDate" |
| | | :disabled="operationType === 'view'" |
| | | clearable |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width:100%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¬å¹´è®¡åæ ¡åæ¶é´ï¼" prop="planDate"> |
| | | <el-date-picker v-model="form.planDate" |
| | | :disabled="operationType === 'view'" |
| | | clearable |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width:100%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="夿³¨ï¼" prop="remark"> |
| | | <el-input v-model="form.remark" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="resetForm">å æ¶</el-button> |
| | | <el-button :loading="submitFormLoading" type="primary" @click="submitForm">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="approvalDialog" title="æ¹å" width="30%" @close="approvalDialog = false"> |
| | | <span> |
| | | æ¹å夿³¨ï¼ |
| | | <el-input v-model="ratifyRemark" type="textarea"></el-input> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :loading="approvalLoading" @click="handleApproval(0)">䏿¹å</el-button> |
| | | <el-button :loading="approvalLoading" type="primary" @click="handleApproval(1)">æ¹ å</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <!--ä¸ä¼ æ¥å--> |
| | | <el-dialog :visible.sync="uploadDia" title="æ°æ®å¯¼å
¥" width="500px"> |
| | | å¹´ä»½ï¼ |
| | | <el-date-picker |
| | | v-model="planYear" |
| | | type="year" |
| | | value-format="yyyy" |
| | | clearable |
| | | format="yyyy" |
| | | placeholder="鿩年"> |
| | | </el-date-picker> |
| | | <div style="margin: 0 auto;"> |
| | | <el-upload ref="upload1" :action="action" :auto-upload="false" :file-list="fileList" :headers="headers" :limit="1" |
| | | accept='.doc,.docx' |
| | | :on-change="beforeUpload" :on-error="onError" :on-success="handleSuccessUp" drag |
| | | name="file"> |
| | | <i class="el-icon-upload"></i> |
| | | <div class="el-upload__text">å°æä»¶æå°æ¤å¤ï¼æ<em>ç¹å»ä¸ä¼ </em></div> |
| | | </el-upload> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="uploadDia = false">å æ¶</el-button> |
| | | <el-button :loading="uploading" type="primary" @click="submitUpload()">ä¸ ä¼ </el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <add-year-plan-dia v-if="addYearPlanDia" ref="addYearPlanDia" @closeDia="closeDia"></add-year-plan-dia> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import AddYearPlanDia from "./addYearPlanDia.vue"; |
| | | import AddVerificationYearPlanDia from "./addVerificationYearPlanDia.vue"; |
| | | |
| | | export default { |
| | | name: "equipment-calibration-plan", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {AddVerificationYearPlanDia, AddYearPlanDia}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | dialogVisible: false, |
| | | searchForm: { |
| | | deviceName: '', |
| | | deviceNumber: '', |
| | | }, |
| | | yearTableData: [], |
| | | yearTableDetailData: [], |
| | | pagination: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | pagination1: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | form: { |
| | | deviceName: '', |
| | | deviceAmount: '', |
| | | deviceNumber: '', |
| | | verificationUnit: '', |
| | | verificationCycles: '', |
| | | lastDate: '', |
| | | planDate: '', |
| | | remark: '', |
| | | planId: '', |
| | | planDetailId: '', |
| | | }, |
| | | operationType: '', |
| | | rules: { |
| | | deviceNumber: [{ required: true, message: '请填å仪å¨ç¼å·', trigger: 'blur' }], |
| | | planDate: [{ required: true, message: 'è¯·éæ©æ¥æ', trigger: 'change' }], |
| | | }, |
| | | yearTableDataLoading: false, |
| | | yearTableDetailDataLoading: false, |
| | | currentRow: {}, |
| | | approvalDialog: false, |
| | | approvalLoading: false, |
| | | submitFormLoading: false, |
| | | ratifyRemark: '', |
| | | currentRowId: '', |
| | | uploadDia: false, |
| | | uploading: false, |
| | | addYearPlanDia: false, |
| | | fileList: [], |
| | | planYear: '', |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getYearTableData() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å¹´åº¦è®¡å表 |
| | | getYearTableData () { |
| | | this.yearTableDataLoading = true |
| | | this.$axios.post(this.$api.deviceCalibrationPlan.pageDeviceCalibrationPlan,{ |
| | | page: { |
| | | current: 1, |
| | | size: 99, |
| | | }, |
| | | entity: {} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableData = res.data.records |
| | | this.pagination.total = res.data.total |
| | | if (this.yearTableData.length > 0) { |
| | | this.currentRow = this.yearTableData[0] |
| | | this.$refs.yearTable.setCurrentRow(this.currentRow) |
| | | } |
| | | } |
| | | this.yearTableDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDataLoading = false |
| | | }) |
| | | }, |
| | | // å页 |
| | | handleSizeChange(val) { |
| | | this.pagination.size = val |
| | | this.getYearTableData() |
| | | }, |
| | | // å页 |
| | | handleCurrentChange(val) { |
| | | this.pagination.current = val |
| | | this.getYearTableData() |
| | | }, |
| | | // 年度计å表-æ¹å |
| | | handleApprove(id) { |
| | | this.currentRowId = id |
| | | this.approvalDialog = true |
| | | }, |
| | | // 年度计å表-å¯¼åº |
| | | downLoadPost(planId) { |
| | | this.$axios.get(this.$api.deviceCalibrationPlan.exportDeviceCalibrationPlanDetail + '?planId=' + planId,{responseType: "blob"}).then(res => { |
| | | const blob = new Blob([res],{ type: 'application/msword' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'è®¾å¤æ ¡å计å.docx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'è®¾å¤æ ¡å计å.docx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // 年度计å表-å é¤ |
| | | deleteFun(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceCalibrationPlan.delQualitySupervise + '?planId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableData(); |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // 年度计å详æ
表-å é¤ |
| | | deleteFun1(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceCalibrationPlan.delDeviceCalibrationPlanDetail + '?planDetailsId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | currentChange (row) { |
| | | this.currentRow = row |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }, |
| | | getYearTableDetailData (row) { |
| | | this.yearTableDetailDataLoading = true |
| | | this.$axios.post(this.$api.deviceCalibrationPlan.pageDeviceCalibrationPlanDetail,{ |
| | | page: { |
| | | current: this.pagination1.current, |
| | | size: this.pagination1.size, |
| | | }, |
| | | entity: { |
| | | planId: row.planId, |
| | | deviceName: this.searchForm.deviceName, |
| | | deviceNumber: this.searchForm.deviceNumber, |
| | | } |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableDetailData = res.data.records |
| | | this.pagination1.total = res.data.total |
| | | } |
| | | this.yearTableDetailDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDetailDataLoading = false |
| | | }) |
| | | }, |
| | | reset () { |
| | | this.searchForm = { |
| | | deviceName: '', |
| | | deviceNumber: '', |
| | | } |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }, |
| | | // å页 |
| | | handleSizeChange1(val) { |
| | | this.pagination1.size = val |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }, |
| | | // å页 |
| | | handleCurrentChange1(val) { |
| | | this.pagination1.current = val |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }, |
| | | // æå¼å¼¹æ¡ |
| | | handleForm (type, row) { |
| | | this.operationType = type |
| | | this.dialogVisible = true |
| | | this.form.planId = this.currentRow.planId |
| | | if (this.operationType !== 'add') { |
| | | this.$nextTick(() => { |
| | | this.form = this.HaveJson(row) |
| | | }) |
| | | }else{ |
| | | this.form = { |
| | | deviceName: '', |
| | | deviceAmount: '', |
| | | deviceNumber: '', |
| | | verificationUnit: '', |
| | | verificationCycles: '', |
| | | lastDate: '', |
| | | planDate: '', |
| | | remark: '', |
| | | planId: this.currentRow.planId, |
| | | planDetailId: '', |
| | | } |
| | | } |
| | | }, |
| | | // æäº¤è¡¨å |
| | | submitForm () { |
| | | this.$refs.modelForm.validate(valid => { |
| | | if (valid) { |
| | | if (this.operationType === 'add') { |
| | | this.submitFormLoading = true |
| | | this.$axios.post(this.$api.deviceCalibrationPlan.addDeviceCalibrationPlanDetail, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.dialogVisible = false |
| | | this.getYearTableData() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } else { |
| | | this.submitFormLoading = true |
| | | this.$axios.post(this.$api.deviceCalibrationPlan.updateDeviceCalibrationPlanDetail, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.dialogVisible = false |
| | | this.getYearTableData() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // æå¼æ°å¢å¼¹æ¡ |
| | | addYearPlan () { |
| | | this.addYearPlanDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.addYearPlanDia.openDialog() |
| | | }) |
| | | }, |
| | | closeDia () { |
| | | this.addYearPlanDia = false |
| | | this.getYearTableData() |
| | | }, |
| | | submitUpload() { |
| | | if (!this.planYear) { |
| | | this.$message.warning('è¯·éæ©å¹´ä»½') |
| | | return; |
| | | } |
| | | if (this.$refs.upload1.uploadFiles.length === 0) { |
| | | this.$message.error('æªéæ©æä»¶') |
| | | return |
| | | } |
| | | this.uploading = true |
| | | this.$refs.upload1.submit(); |
| | | }, |
| | | // æäº¤æ¹å |
| | | handleApproval (status) { |
| | | const personTrainingUpdateDto = { |
| | | planId: this.currentRowId, |
| | | ratifyRemark: this.ratifyRemark, |
| | | ratifyStatus: status |
| | | } |
| | | this.approvalLoading = true |
| | | this.$axios.post(this.$api.deviceCalibrationPlan.ratifyDeviceCalibrationPlan, personTrainingUpdateDto, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('æäº¤æåï¼'); |
| | | this.approvalDialog = false |
| | | this.getYearTableData(); |
| | | } |
| | | this.approvalLoading = false |
| | | }).catch(() => { |
| | | this.approvalLoading = false |
| | | }) |
| | | }, |
| | | resetForm () { |
| | | this.$refs.modelForm.resetFields(); |
| | | this.dialogVisible = false |
| | | }, |
| | | // æå¼æ¥åå¼¹æ¡ |
| | | record (row) { |
| | | this.uploadDia = true |
| | | }, |
| | | // 导å
¥æµç¨ |
| | | beforeUpload(file) { |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload.clearFiles() |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }, |
| | | onError(err, file, fileList) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | handleSuccessUp(response) { |
| | | this.uploading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.getYearTableData() |
| | | } else { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | } |
| | | }, |
| | | }, |
| | | // ç¨äºä¸ä¼ æä»¶çä¿¡æ¯ |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | 'token': sessionStorage.getItem('token') |
| | | } |
| | | }, |
| | | action() { |
| | | return this.javaApi + this.$api.deviceCalibrationPlan.importDeviceCalibrationPlan + '?planYear=' + this.planYear |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | .title-search { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 10px 0; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="仪å¨è®¾å¤æé´æ ¸æ¥æ¯å¯¹è®°å½è¡¨" |
| | | width="80%" @close="resetForm"> |
| | | <el-steps :active="currentStep" align-center finish-status="success"> |
| | | <el-step title="å¡«åè®¾å¤æ ¸æ¥å¯¹æ¯è®°å½"></el-step> |
| | | <el-step title="å®¡æ ¸"></el-step> |
| | | </el-steps> |
| | | <div class="form"> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">æ ¸æ¥æ¹å¼ï¼</span> |
| | | <el-input v-model="form.checkMethod" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="form"> |
| | | <div class="form-item"> |
| | | <span style="width: 80px">A仪å¨åç§°ï¼</span> |
| | | <el-select v-model="form.adeviceId" |
| | | :disabled="currentStep !== 0" |
| | | class="table_input" |
| | | clearable |
| | | filterable |
| | | placeholder="设å¤åç§°" |
| | | size="small" |
| | | style="width:200px" |
| | | @change="(val)=>changeMachineName(val, 'A')"> |
| | | <el-option v-for="item in equipOptions" :key="item.value" :label="item.label" :value="item.id"> |
| | | {{item.label + '-' + item.value}} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">A仪å¨ç¼å·ï¼</span> |
| | | <el-input v-model="form.adeviceNumber" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | <div class="form-item"> |
| | | <span style="width: 150px">Aä»ªå¨æµå®èå´/ä¸ç¡®å®åº¦ï¼</span> |
| | | <el-input v-model="form.arangeUncertainty" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="form"> |
| | | <div class="form-item"> |
| | | <span style="width: 80px">B仪å¨åç§°ï¼</span> |
| | | <el-select v-model="form.bdeviceId" |
| | | :disabled="currentStep !== 0" |
| | | class="table_input" |
| | | clearable |
| | | filterable |
| | | placeholder="设å¤åç§°" |
| | | size="small" |
| | | style="width:200px" |
| | | @change="(val)=>changeMachineName(val, 'B')"> |
| | | <el-option v-for="item in equipOptions" :key="item.value" :label="item.label" :value="item.id"> |
| | | {{item.label + '-' + item.value}} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">B仪å¨ç¼å·ï¼</span> |
| | | <el-input v-model="form.bdeviceNumber" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | <div class="form-item"> |
| | | <span style="width: 150px">Bä»ªå¨æµå®èå´/ä¸ç¡®å®åº¦ï¼</span> |
| | | <el-input v-model="form.brangeUncertainty" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="form"> |
| | | <div class="form-item"> |
| | | <span style="width: 80px">C仪å¨åç§°ï¼</span> |
| | | <el-select v-model="form.cdeviceId" |
| | | :disabled="currentStep !== 0" |
| | | class="table_input" |
| | | clearable |
| | | filterable |
| | | placeholder="设å¤åç§°" |
| | | size="small" |
| | | style="width:200px" |
| | | @change="(val)=>changeMachineName(val, 'C')"> |
| | | <el-option v-for="item in equipOptions" :key="item.value" :label="item.label" :value="item.id"> |
| | | {{item.label + '-' + item.value}} |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">C仪å¨ç¼å·ï¼</span> |
| | | <el-input v-model="form.cdeviceNumber" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | <div class="form-item"> |
| | | <span style="width: 150px">Cä»ªå¨æµå®èå´/ä¸ç¡®å®åº¦ï¼</span> |
| | | <el-input v-model="form.crangeUncertainty" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <el-button v-if="currentStep === 0" size="small" type="primary" @click="addTableRow">æ·»å </el-button> |
| | | </div> |
| | | <div style="margin: 10px 0"> |
| | | <el-table ref="yearTable" :data="recordContrastDetailsList" |
| | | height="300px" |
| | | style="width: 100% ;"> |
| | | <el-table-column align="center" header-align="center" label="åºå·" type="index" width="60"></el-table-column> |
| | | <el-table-column label="æ ¸æ¥é¡¹ç®" min-width="170" prop="checkItems"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.checkItems" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="A仪å¨ç¤ºå¼" min-width="120" prop="indicationA"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.indicationA" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="B仪å¨ç¤ºå¼" min-width="120" prop="indicationB"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.indicationB" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="C仪å¨ç¤ºå¼" min-width="120" prop="indicationC"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.indicationC" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å·®å¼" min-width="90" prop="dvalue"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.dvalue" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ç¸å¯¹åå·®" min-width="90" prop="deviation"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviation" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¤å®" min-width="110" prop="determine"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.determine" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <div class="form"> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">综åå¤å®ï¼</span> |
| | | <el-input v-model="form.judgment" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </div> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">å®¡æ ¸äººï¼</span> |
| | | <el-select v-model="form.reviewUserId" :disabled="currentStep !== 0" placeholder="è¯·éæ©" size="small" style="width: 100%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="resetForm">å æ¶</el-button> |
| | | <el-button v-if="currentStep === 0" :loading="submitFormLoading" type="primary" @click="submitCheck">ç¡® å®</el-button> |
| | | <el-button v-if="currentStep === 1" :loading="submitFormLoading" @click="examine(0)">ä¸éè¿</el-button> |
| | | <el-button v-if="currentStep === 1" :loading="submitFormLoading" type="primary" @click="examine(1)">é è¿</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "equipment-check", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | dialogVisible: false, |
| | | submitFormLoading: false, |
| | | currentStep: 0, |
| | | showStep: 0, |
| | | form: { |
| | | checkerTime: '', |
| | | checkMethod: '', |
| | | adeviceId: '', |
| | | adeviceNumber: '', |
| | | arangeUncertainty: '', |
| | | bdeviceId: '', |
| | | bdeviceNumber: '', |
| | | brangeUncertainty: '', |
| | | cdeviceId: '', |
| | | cdeviceNumber: '', |
| | | crangeUncertainty: '', |
| | | recordContrastDetailsList: [], |
| | | judgment: '', |
| | | reviewUserId: '', |
| | | reviewStatus: '', |
| | | planDetailsId: '', |
| | | }, |
| | | equipOptions: [], |
| | | recordContrastDetailsList: [], |
| | | userList: [], |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDialog (row) { |
| | | this.dialogVisible = true |
| | | this.form.planDetailsId = row.planDetailsId |
| | | this.getEquipOptions() |
| | | this.getUserList() |
| | | this.searchInfo() |
| | | }, |
| | | searchInfo () { |
| | | this.$axios.get(this.$api.deviceExaminePlan.getExamineRecordContrast+'?planDetailsId=' + this.form.planDetailsId).then(res => { |
| | | if (res.code === 200) { |
| | | this.form = {...res.data} |
| | | this.recordContrastDetailsList = this.form.recordContrastDetailsList || [] |
| | | if (!this.form.reviewUserId) { |
| | | this.currentStep = 0 |
| | | } else { |
| | | this.currentStep = 1 |
| | | } |
| | | if (this.form.reviewStatus === 1) { |
| | | this.currentStep = 2 |
| | | } |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | // èµå¼ä»ªå¨ç¼å· |
| | | changeMachineName (value, type) { |
| | | const index = this.equipOptions.findIndex(item => item.id === value) |
| | | if (index > -1) { |
| | | if (type === 'A') { |
| | | this.$set(this.form, 'adeviceNumber', this.equipOptions[index].value) |
| | | } |
| | | if (type === 'B') { |
| | | this.$set(this.form, 'bdeviceNumber', this.equipOptions[index].value) |
| | | } |
| | | if (type === 'C') { |
| | | this.$set(this.form, 'cdeviceNumber', this.equipOptions[index].value) |
| | | } |
| | | } |
| | | }, |
| | | // æ·»å è¡¨æ ¼æ°æ® |
| | | addTableRow () { |
| | | this.recordContrastDetailsList.push({checkItems: ''}) |
| | | }, |
| | | submitCheck () { |
| | | this.form.recordContrastDetailsList = this.HaveJson(this.recordContrastDetailsList) |
| | | this.submitFormLoading = true |
| | | this.$axios.post(this.$api.deviceExaminePlan.addExamineRecordContrast, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | }, |
| | | examine (statue) { |
| | | const params = { |
| | | planDetailsId: this.form.planDetailsId, |
| | | reviewStatus: statue, |
| | | } |
| | | this.$axios.post(this.$api.deviceExaminePlan.reviewExamineRecordContrast, |
| | | params, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å®¡æ ¸æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | }, |
| | | resetForm () { |
| | | this.dialogVisible = false |
| | | this.$emit('closeDialog') |
| | | }, |
| | | // è·åææè®¾å¤ |
| | | getEquipOptions() { |
| | | this.equipOptions = [] |
| | | this.$axios.get(this.$api.deviceScope.deviceScopeSearch+'?status=0').then(res => { |
| | | if (res.code === 200 && res.data) { |
| | | this.equipOptions = res.data.map(m => { |
| | | m.value = m.managementNumber |
| | | m.label = m.deviceName |
| | | m.id = m.id |
| | | return m |
| | | }) |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | getUserList(){ |
| | | this.$axios.post(this.$api.user.selectUserList, { |
| | | page: {current: -1, size: -1,}, |
| | | entity: {name: null} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.userList = res.data.body.records |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .form { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | .form-item { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-right: 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div> |
| | | <div style="margin: 10px 0;text-align: right"> |
| | | <el-button size="small" type="primary" @click="getYearTableDetailData(clickNodeVal.value)">å·æ°</el-button> |
| | | <el-button size="small" type="primary" @click="handleForm('')">æ°å¢</el-button> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTable" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData" |
| | | height="calc(100vh - 18em)" |
| | | style="width: 100% ;"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <!-- <el-table-column label="仪å¨åç§°" min-width="150" prop="unitName"></el-table-column>--> |
| | | <!-- <el-table-column label="åå·" min-width="100" prop="address"></el-table-column>--> |
| | | <el-table-column label="å®è£
å°ç¹" min-width="150" prop="location"></el-table-column> |
| | | <el-table-column label="æåææ
éæ
åµ" min-width="180" prop="damageOrMalfunction"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="140"> |
| | | <template slot-scope="scope"> |
| | | <el-button :disabled="scope.row.ratifyStatus === 1" size="small" type="text" @click="handleForm(scope.row.maintenanceId)">æä½</el-button> |
| | | <el-button size="small" type="text" @click="handleDownOne(scope.row.maintenanceId)">导åº</el-button> |
| | | <el-button size="small" style="color: #f56c6c" type="text" @click="deleteFun(scope.row.maintenanceId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1" |
| | | @current-change="handleCurrentChange1"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <failure-form v-if="applicationForm" ref="applicationForm" @closeDialog="closeDialog"></failure-form> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import FailureForm from "./failure-form.vue"; |
| | | |
| | | export default { |
| | | name: "equipment-failure", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {FailureForm}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | pagination1: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | yearTableDetailDataLoading: false, |
| | | yearTableDetailData: [], |
| | | applicationForm: false |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢ |
| | | getYearTableDetailData(deviceId) { |
| | | this.yearTableDetailDataLoading = true |
| | | this.$axios.post(this.$api.deviceBreakdownMaintenance.pageDeviceBreakdownMaintenance, { |
| | | page: { |
| | | current: this.pagination1.current, |
| | | size: this.pagination1.size, |
| | | }, |
| | | entity: { |
| | | deviceId: deviceId, |
| | | } |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableDetailData = res.data.records |
| | | this.pagination1.total = res.data.total |
| | | } |
| | | this.yearTableDetailDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDetailDataLoading = false |
| | | }) |
| | | }, |
| | | handleForm(id) { |
| | | this.applicationForm = true |
| | | this.$nextTick(() => { |
| | | this.$refs.applicationForm.openDialog(id, this.clickNodeVal.value) |
| | | }) |
| | | }, |
| | | closeDialog() { |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å页 |
| | | handleSizeChange1(val) { |
| | | this.pagination1.size = val |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å页 |
| | | handleCurrentChange1(val) { |
| | | this.pagination1.current = val |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å¯¼åº |
| | | handleDownOne(id) { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceBreakdownMaintenance.exportDeviceBreakdownMaintenance + '?maintenanceId=' + id, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤ä¿®çç³è¯·è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤ä¿®çç³è¯·è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | deleteFun(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceBreakdownMaintenance.delDeviceBreakdownMaintenance + '?maintenanceId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableDetailData(this.clickNodeVal.value); |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getYearTableDetailData(newVal.value); |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | |
| | | .title-search { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 10px 0; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div> |
| | | <div style="margin: 10px 0;text-align: right"> |
| | | <el-button size="small" type="primary" @click="getYearTableDetailData">å·æ°</el-button> |
| | | <el-button size="small" type="primary" @click="handleForm('add')">æ°å¢</el-button> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTable" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData" |
| | | height="calc(100vh - 18em)" |
| | | style="width: 100% ;"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <el-table-column label="年份" min-width="80" prop="planYear"></el-table-column> |
| | | <el-table-column label="ç¼å¶äºº" min-width="120" prop="compiler"></el-table-column> |
| | | <el-table-column label="ç¼å¶æ¶é´" min-width="150" prop="datePreparation"></el-table-column> |
| | | <el-table-column label="å®¡æ ¸äºº" min-width="150" prop="audit"></el-table-column> |
| | | <el-table-column label="å®¡æ ¸æ¶é´" min-width="180" prop="auditDate"></el-table-column> |
| | | <el-table-column label="å®¡æ ¸ç¶æ" min-width="180" prop="status"> |
| | | <template slot-scope="scope"> |
| | | <el-tag v-if="scope.row.status === 1" type="success">é è¿</el-tag> |
| | | <el-tag v-if="scope.row.status === 0" type="danger">ä¸éè¿</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-button :disabled="scope.row.status === 1" size="small" type="text" @click="handleForm('edit', scope.row)">ç¼è¾</el-button> |
| | | <el-button :disabled="scope.row.status === 1" size="small" type="text" @click="handleForm('check', scope.row)">å®¡æ ¸</el-button> |
| | | <el-button size="small" type="text" @click="handleDownOne(scope.row.maintenancePlanId)">导åº</el-button> |
| | | <el-button :disabled="scope.row.status === 1" size="small" style="color: #f56c6c" type="text" @click="deleteFun(scope.row.maintenancePlanId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1" |
| | | @current-change="handleCurrentChange1"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="applicationForm" title="设å¤ä¿å
»è®¡å表" |
| | | width="80%" @close="closeDialog"> |
| | | <div style="display: flex;align-items: center;"> |
| | | <el-button v-if="operationType !== 'check'" size="small" type="primary" @click="addTableRow">æ·»å </el-button> |
| | | <span style="width: 60px">年份ï¼</span> |
| | | <el-date-picker |
| | | v-model="form.planYear" |
| | | type="year" |
| | | value-format="yyyy" |
| | | clearable |
| | | size="small" |
| | | format="yyyy" |
| | | placeholder="鿩年"> |
| | | </el-date-picker> |
| | | </div> |
| | | <div style="margin: 10px 0"> |
| | | <el-table ref="yearTable" :data="deviceMaintenancePlanDetails" |
| | | id="templateParamTable" row-key="deviceId" |
| | | height="300px" |
| | | style="width: 100% ;"> |
| | | <el-table-column align="center" header-align="center" label="åºå·" type="index" width="60"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" min-width="170" prop="deviceName"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceName" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="设å¤ç¼å·" min-width="140" prop="deviceNumber"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceNumber" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å½å±å®éªå®¤" min-width="120" prop="storagePoint"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.storagePoint" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ä¿å
Ȍ
³é®é¨ä½" min-width="120" prop="maintenanceSite"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.maintenanceSite" :disabled="operationType === 'check'" clearable size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ä¿å
Ȍ
容" min-width="120" prop="maintenanceContent"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.maintenanceContent" :disabled="operationType === 'check'" clearable size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ä¿å
»å¨æ" min-width="90" prop="maintenanceIntervals"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.maintenanceIntervals" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="æä½" width="80" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button style="color: #f56c6c" type="text" @click="deleteRow(scope.$index)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeDialog">å æ¶</el-button> |
| | | <el-button v-if="operationType !=='check'" :loading="submitFormLoading" type="primary" @click="submitForm">确 认</el-button> |
| | | <el-button v-if="operationType ==='check'" :loading="submitFormLoading" type="primary" @click="checkStatus(0)">ä¸éè¿</el-button> |
| | | <el-button v-if="operationType ==='check'" :loading="submitFormLoading" type="primary" @click="checkStatus(1)">é è¿</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="addEquipDia" title="æ·»å 设å¤" width="50%"> |
| | | <el-table ref="multipleTable" :data="equipOptions" tooltip-effect="dark" height="500" |
| | | style="width: 100%" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" prop="label" width="190"></el-table-column> |
| | | <el-table-column prop="value" label="设å¤ç¼å·" width="130"></el-table-column> |
| | | <el-table-column prop="managementNumber" label="å½å±å®éªå®¤"></el-table-column> |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addEquipDia = false">å æ¶</el-button> |
| | | <el-button v-if="operationType !=='check'" :loading="submitFormLoading" type="primary" @click="changeMachineName">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Sortable from "sortablejs"; |
| | | |
| | | export default { |
| | | name: "equipment-maintenance-plan", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | pagination1: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | yearTableDetailDataLoading: false, |
| | | yearTableDetailData: [], |
| | | deviceMaintenancePlanDetails: [], |
| | | selectionRows: [], |
| | | deviceIds: [], |
| | | applicationForm: false, |
| | | submitFormLoading: false, |
| | | operationType: '', |
| | | equipOptions: [], |
| | | form: { |
| | | planYear: '', |
| | | deviceMaintenancePlanDetails: [] |
| | | }, |
| | | addEquipDia: false, |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getYearTableDetailData() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢ |
| | | getYearTableDetailData() { |
| | | this.yearTableDetailDataLoading = true |
| | | this.$axios.post(this.$api.deviceMaintenancePlan.selectDeviceMaintenancePlanByPage, { |
| | | page: { |
| | | current: this.pagination1.current, |
| | | size: this.pagination1.size, |
| | | }, |
| | | entity: {} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableDetailData = res.data.records |
| | | this.pagination1.total = res.data.total |
| | | } |
| | | this.yearTableDetailDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDetailDataLoading = false |
| | | }) |
| | | }, |
| | | // æå¼æ°å¢åç¼è¾å¼¹æ¡ |
| | | handleForm(type, row) { |
| | | this.operationType = type |
| | | this.applicationForm = true |
| | | this.form = { |
| | | planYear: '', |
| | | deviceMaintenancePlanDetails: [], |
| | | } |
| | | this.deviceMaintenancePlanDetails = [] |
| | | if (row) { |
| | | this.maintenancePlanId = row.maintenancePlanId |
| | | this.$axios.get(this.$api.deviceMaintenancePlan.getMaintenancePlanDetail+'?maintenancePlanId=' + this.maintenancePlanId).then(res => { |
| | | if (res.code === 200) { |
| | | this.form = res.data |
| | | this.deviceMaintenancePlanDetails = this.form.deviceMaintenancePlanDetails |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | } |
| | | this.getEquipOptions() |
| | | }, |
| | | // æ·»å è®¾å¤ |
| | | addTableRow () { |
| | | this.addEquipDia = true |
| | | this.getEquipOptions() |
| | | }, |
| | | handleSelectionChange (selection) { |
| | | this.selectionRows = selection |
| | | }, |
| | | // èµå¼ä»ªå¨ç¼å· |
| | | changeMachineName () { |
| | | this.deviceMaintenancePlanDetails = [] |
| | | this.selectionRows.map(val => { |
| | | this.deviceMaintenancePlanDetails.push({deviceId: val.id, deviceName: val.label, deviceNumber: val.value, storagePoint: val.storagePoint}) |
| | | }) |
| | | this.addEquipDia = false |
| | | this.rowDrop() |
| | | }, |
| | | rowDrop() { |
| | | const that = this |
| | | const tbody = document.querySelector( |
| | | '#templateParamTable .el-table__body-wrapper tbody' |
| | | ) |
| | | if (!this.sortTable) { |
| | | this.sortTable = Sortable.create(tbody, { |
| | | animation: 200, //å¨ç»æ¶é¿ |
| | | handle: ".el-table__row", //坿æ½åºåclass |
| | | //ææ½ä¸äºä»¶ |
| | | onMove: ({ dragged, related }) => { |
| | | const oldRow = that.deviceMaintenancePlanDetails[dragged.rowIndex] //æ§ä½ç½®æ°æ® |
| | | const newRow = that.deviceMaintenancePlanDetails[related.rowIndex] //è¢«ææ½çæ°æ°æ® |
| | | }, |
| | | //ææ½ç»æäºä»¶ |
| | | onEnd: evt => { |
| | | const curRow = that.deviceMaintenancePlanDetails.splice(evt.oldIndex, 1)[0]; |
| | | that.deviceMaintenancePlanDetails.splice(evt.newIndex, 0, curRow); |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | // å é¤è¡¨æ ¼è¡ |
| | | deleteRow (index) { |
| | | this.deviceMaintenancePlanDetails.splice(index, 1) |
| | | }, |
| | | // æäº¤æ°å¢åä¿®æ¹ |
| | | submitForm () { |
| | | this.form.deviceMaintenancePlanDetails = this.HaveJson(this.deviceMaintenancePlanDetails) |
| | | this.submitFormLoading = true |
| | | if (this.operationType === 'add') { |
| | | this.$axios.post(this.$api.deviceMaintenancePlan.addMaintenancePlan, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } else { |
| | | this.$axios.post(this.$api.deviceMaintenancePlan.updateMaintenancePlan, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } |
| | | }, |
| | | // æäº¤å®¡æ ¸ |
| | | checkStatus (status) { |
| | | const params = { |
| | | status: status, |
| | | maintenancePlanId: this.maintenancePlanId |
| | | } |
| | | this.$axios.post(this.$api.deviceMaintenancePlan.addMaintenancePlan, |
| | | params, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å®¡æ ¸æå') |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | }, |
| | | closeDialog() { |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData() |
| | | }, |
| | | // å页 |
| | | handleSizeChange1(val) { |
| | | this.pagination1.size = val |
| | | this.getYearTableDetailData() |
| | | }, |
| | | // å页 |
| | | handleCurrentChange1(val) { |
| | | this.pagination1.current = val |
| | | this.getYearTableDetailData() |
| | | }, |
| | | handleDownOne(id) { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceMaintenancePlan.exportDeviceMaintenancePlan + '?maintenancePlanId=' + id, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤ç»´æ¤ä¿å
»è®°å½.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤ç»´æ¤ä¿å
»è®°å½.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | deleteFun(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceMaintenancePlan.deleteMaintenancePlan + '?maintenancePlanId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableDetailData(); |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // è·åææè®¾å¤ |
| | | getEquipOptions() { |
| | | this.equipOptions = [] |
| | | this.$axios.get(this.$api.deviceScope.deviceScopeSearch+'?status=0').then(res => { |
| | | if (res.code === 200 && res.data) { |
| | | this.equipOptions = res.data.map(m => { |
| | | m.value = m.managementNumber |
| | | m.label = m.deviceName |
| | | return m |
| | | }) |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getYearTableDetailData(); |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | |
| | | .title-search { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 10px 0; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div> |
| | | <div style="margin: 10px 0;text-align: right"> |
| | | <el-button size="small" type="primary" @click="getYearTableDetailData(clickNodeVal.value)">å·æ°</el-button> |
| | | <el-button size="small" type="primary" @click="handleForm('')">æ°å¢</el-button> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTable" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData" |
| | | height="calc(100vh - 18em)" |
| | | style="width: 100% ;"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <!-- <el-table-column label="仪å¨åç§°" min-width="150" prop="unitName"></el-table-column>--> |
| | | <!-- <el-table-column label="åå·" min-width="100" prop="address"></el-table-column>--> |
| | | <el-table-column label="é
ä»¶" min-width="150" prop="parts"></el-table-column> |
| | | <el-table-column label="ç¼å·" min-width="100" prop="number"></el-table-column> |
| | | <el-table-column label="æ¥åºçç±" min-width="150" prop="reasonsForScrap"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="120"> |
| | | <template slot-scope="scope"> |
| | | <el-button :disabled="scope.row.ratifyStatus === 1" size="small" type="text" @click="handleForm(scope.row.scrappedId)">æä½</el-button> |
| | | <el-button size="small" type="text" @click="handleDownOne(scope.row.scrappedId)">导åº</el-button> |
| | | <el-button size="small" style="color: #f56c6c" type="text" @click="deleteFun(scope.row.scrappedId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1" |
| | | @current-change="handleCurrentChange1"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <scrap-application-form v-if="applicationForm" ref="applicationForm" @closeDialog="closeDialog"></scrap-application-form> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import scrapApplicationForm from "./scrapApplicationForm.vue"; |
| | | |
| | | export default { |
| | | name: "equipment-scrap", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {scrapApplicationForm}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | pagination1: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | yearTableDetailDataLoading: false, |
| | | yearTableDetailData: [], |
| | | applicationForm: false |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢ |
| | | getYearTableDetailData (deviceId) { |
| | | this.yearTableDetailDataLoading = true |
| | | this.$axios.post(this.$api.deviceScrapped.pageDeviceScrapped,{ |
| | | page: { |
| | | current: this.pagination1.current, |
| | | size: this.pagination1.size, |
| | | }, |
| | | entity: { |
| | | deviceId: deviceId, |
| | | } |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableDetailData = res.data.records |
| | | this.pagination1.total = res.data.total |
| | | } |
| | | this.yearTableDetailDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDetailDataLoading = false |
| | | }) |
| | | }, |
| | | handleForm (id) { |
| | | this.applicationForm = true |
| | | this.$nextTick(() => { |
| | | this.$refs.applicationForm.openDialog(id, this.clickNodeVal.value) |
| | | }) |
| | | }, |
| | | closeDialog () { |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å页 |
| | | handleSizeChange1(val) { |
| | | this.pagination1.size = val |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å页 |
| | | handleCurrentChange1(val) { |
| | | this.pagination1.current = val |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å¯¼åº |
| | | handleDownOne(id) { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceScrapped.exportDeviceScrapped + '?scrappedId=' + id, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤æ¥åºç³è¯·è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤æ¥åºç³è¯·è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | deleteFun(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceScrapped.delDeviceScrapped + '?scrappedId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableDetailData(this.clickNodeVal.value); |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getYearTableDetailData(newVal.value); |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | .title-search { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 10px 0; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- è®¾å¤æ ¸æ¥è®¡å--> |
| | | <div> |
| | | <div> |
| | | <div style="margin: 10px 0;display: flex;align-items: center;justify-content: space-between;"> |
| | | <span>年度计å表</span> |
| | | <div style="display: flex;align-items: center;"> |
| | | <el-button style="margin-right: 10px" size="small" type="primary" @click="getYearTableData">å·æ°</el-button> |
| | | <el-button style="margin-right: 10px" size="small" type="primary" @click="addYearPlan">æ°å¢</el-button> |
| | | <!-- <el-upload ref="upload" :action="action"--> |
| | | <!-- :before-upload="beforeUpload" :headers="headers" :on-error="onError"--> |
| | | <!-- :on-success="handleSuccessUp" :show-file-list="false" accept='.xls,.xlsx'>--> |
| | | <!-- <el-button :loading="upLoading" size="small" type="primary">导å
¥</el-button>--> |
| | | <!-- </el-upload>--> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTable" v-loading="yearTableDataLoading" :data="yearTableData" |
| | | height="calc(60vh - 20em)" |
| | | highlight-current-row |
| | | style="width: 100% ;" @current-change="currentChange"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <el-table-column label="年份" min-width="80" prop="planYear"></el-table-column> |
| | | <el-table-column label="计ååç§°" min-width="180" prop="planName"></el-table-column> |
| | | <el-table-column label="ç¼å¶äºº" min-width="100" prop="writeName"></el-table-column> |
| | | <el-table-column label="ç¼å¶æ¥æ" min-width="150" prop="writeTime"></el-table-column> |
| | | <el-table-column label="æ¹åç¶æ" min-width="100" prop="ratifyStatus"> |
| | | <template slot-scope="scope"> |
| | | <el-tag v-if="scope.row.ratifyStatus === 1" type="success">æ¹å</el-tag> |
| | | <el-tag v-if="scope.row.ratifyStatus === 0" type="danger">䏿¹å</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ¹åå
容" min-width="150" prop="ratifyRemark"></el-table-column> |
| | | <el-table-column label="æ¹å人" min-width="100" prop="ratifyName"></el-table-column> |
| | | <el-table-column label="æ¹åæ¶é´" min-width="150" prop="ratifyTime"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="140"> |
| | | <template slot-scope="scope"> |
| | | <el-button :disabled="scope.row.ratifyStatus === 1" size="small" type="text" @click="handleApprove(scope.row.planId)">æ¹å</el-button> |
| | | <el-button size="small" type="text" @click="downLoadPost(scope.row.planId)">导åº</el-button> |
| | | <el-button size="small" style="color: #f56c6c" type="text" @click="deleteFun(scope.row.planId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange" |
| | | @current-change="handleCurrentChange"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <span>年度计åæç»è¡¨</span> |
| | | <div class="title"> |
| | | <div class="title-search"> |
| | | <span style="width: 120px;font-size: 14px">设å¤ç¼å·ï¼</span> |
| | | <el-input v-model="searchForm.deviceNumber" clearable size="small" style="margin-right: 10px;width: 220px"></el-input> |
| | | <span style="width: 80px;font-size: 14px">设å¤åç§°ï¼</span> |
| | | <el-input v-model="searchForm.deviceName" clearable size="small" style="margin-right: 10px;width: 220px"></el-input> |
| | | <el-button size="small" type="primary" @click="getYearTableDetailData(currentRow)">æ¥ è¯¢</el-button> |
| | | <el-button size="small" @click="reset">é ç½®</el-button> |
| | | </div> |
| | | <div> |
| | | <el-button size="small" type="primary" @click="handleForm('add')">æ°å¢</el-button> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTableDetailData" v-loading="yearTableDetailDataLoading" |
| | | :data="yearTableDetailData" |
| | | height="calc(60vh - 20em)" style="width: 100% ;"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <el-table-column label="设å¤ç¼å·" min-width="180" prop="deviceNumber"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" min-width="180" prop="deviceName"></el-table-column> |
| | | <el-table-column label="æ ¸æ¥æ¶é´" min-width="150" prop="checkTime"></el-table-column> |
| | | <el-table-column label="æ ¸æ¥ææ " min-width="150" prop="checkIndex"> </el-table-column> |
| | | <el-table-column label="æ ¸æ¥æ¹æ³" min-width="150" prop="checkMethod"></el-table-column> |
| | | <el-table-column label="ç»æå¦ä½å¤å®" min-width="150" prop="howResults"></el-table-column> |
| | | <el-table-column label="æ ¸æ¥è´è´£äºº" min-width="150" prop="checkChargerUser"></el-table-column> |
| | | <el-table-column label="夿³¨" min-width="150" prop="remark"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="260"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="handleForm('edit', scope.row)">ç¼è¾</el-button> |
| | | <el-button size="small" type="text" @click="handleForm('view', scope.row)">æ¥ç</el-button> |
| | | <el-button size="small" type="text" @click="handleRecord(scope.row)">è®°å½</el-button> |
| | | <el-button size="small" type="text" @click="handleCheck(scope.row)">对æ¯</el-button> |
| | | <el-button size="small" type="text" @click="handleDown(scope.row)">导åº</el-button> |
| | | <el-button size="small" style="color: #f56c6c" type="text" @click="deleteFun1(scope.row.planDetailsId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1" |
| | | @current-change="handleCurrentChange1"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="è®¾å¤æ ¸æ¥è®¡å" |
| | | width="80%" @close="resetForm"> |
| | | <el-form ref="modelForm" :model="form" :rules="rules" label-width="110px"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤ç¼å·ï¼" prop="deviceNumber"> |
| | | <el-input v-model="form.deviceNumber" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤åç§°ï¼" prop="deviceName"> |
| | | <el-input v-model="form.deviceName" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ ¸æ¥æ¶é´ï¼" prop="checkTime"> |
| | | <el-date-picker v-model="form.checkTime" |
| | | :disabled="operationType === 'view'" |
| | | clearable |
| | | format="yyyy-MM" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width:100%" |
| | | type="date" |
| | | value-format="yyyy-MM"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ ¸æ¥ææ ï¼" prop="checkIndex"> |
| | | <el-input v-model="form.checkIndex" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ ¸æ¥æ¹æ³ï¼" prop="checkMethod"> |
| | | <el-input v-model="form.checkMethod" :disabled="operationType === 'view'" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç»æå¦ä½å¤å®ï¼" prop="howResults"> |
| | | <el-input v-model="form.howResults" :disabled="operationType === 'view'" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ ¸æ¥è´£ä»»äººï¼" prop="checkChargerUserId"> |
| | | <el-select v-model="form.checkChargerUserId" @change="setCheckChargerUser" :disabled="operationType === 'view'" placeholder="è¯·éæ©" size="small" style="width: 100%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="夿³¨ï¼" prop="remark"> |
| | | <el-input v-model="form.remark" :disabled="operationType === 'view'" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="resetForm">å æ¶</el-button> |
| | | <el-button :loading="submitFormLoading" type="primary" @click="submitForm">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="approvalDialog" title="æ¹å" width="30%" @close="approvalDialog = false"> |
| | | <span> |
| | | æ¹å夿³¨ï¼ |
| | | <el-input v-model="ratifyRemark" type="textarea"></el-input> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :loading="approvalLoading" @click="handleApproval(0)">䏿¹å</el-button> |
| | | <el-button :loading="approvalLoading" type="primary" @click="handleApproval(1)">æ¹ å</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="downloadDialog" title="导åº" width="600px"> |
| | | <span> |
| | | <el-button :loading="outLoading" plain type="primary" @click="controlDown">æ ¸æ¥è®°å½</el-button> |
| | | <el-button :loading="outLoading" plain type="primary" @click="processingDown">æ ¸æ¥æ¯å¯¹è®°å½</el-button> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="downloadDialog = false">å æ¶</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <equipment-check v-if="equipmentCheck" ref="equipmentCheck" @closeDialog="closeDialog"></equipment-check> |
| | | <check-record v-if="checkRecord" ref="checkRecord" @closeDialog1="closeDialog1"></check-record> |
| | | <add-verification-year-plan-dia v-if="addYearPlanDia" ref="addYearPlanDia" @closeDia="closeDia"></add-verification-year-plan-dia> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import EquipmentCheck from "./equipment-check.vue"; |
| | | import CheckRecord from "./check-record.vue"; |
| | | import AddVerificationYearPlanDia from "./addVerificationYearPlanDia.vue"; |
| | | |
| | | export default { |
| | | name: "equipment-verification-plan", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {AddVerificationYearPlanDia, CheckRecord, EquipmentCheck}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | upLoading: false, |
| | | dialogVisible: false, |
| | | searchForm: { |
| | | deviceName: '', |
| | | deviceNumber: '', |
| | | }, |
| | | yearTableData: [], |
| | | yearTableDetailData: [], |
| | | pagination: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | pagination1: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | form: { |
| | | deviceNumber: '', |
| | | deviceName: '', |
| | | checkTime: '', |
| | | checkIndex: '', |
| | | checkMethod: '', |
| | | howResults: '', |
| | | checkChargerUserId: '', |
| | | checkChargerUser: '', |
| | | remark: '', |
| | | planId: '', |
| | | planDetailsId: '', |
| | | }, |
| | | operationType: '', |
| | | rules: { |
| | | deviceNumber: [{ required: true, message: '请填å设å¤ç¼å·', trigger: 'blur' }], |
| | | checkMethod: [{ required: true, message: 'è¯·å¡«åæ ¸æ¥æ¹æ³', trigger: 'blur' }], |
| | | }, |
| | | yearTableDataLoading: false, |
| | | yearTableDetailDataLoading: false, |
| | | currentRow: {}, |
| | | approvalDialog: false, |
| | | approvalLoading: false, |
| | | submitFormLoading: false, |
| | | ratifyRemark: '', |
| | | currentRowId: '', |
| | | userList: [], |
| | | equipmentCheck: false, |
| | | checkRecord: false, |
| | | addYearPlanDia: false, |
| | | downloadDialog: false, |
| | | outLoading: false, |
| | | downRow: {} |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getYearTableData() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å¹´åº¦è®¡å表 |
| | | getYearTableData () { |
| | | this.yearTableDataLoading = true |
| | | this.$axios.post(this.$api.deviceExaminePlan.pageDeviceExaminePlan,{ |
| | | page: { |
| | | current: 1, |
| | | size: 99, |
| | | }, |
| | | entity: {} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableData = res.data.records |
| | | this.pagination.total = res.data.total |
| | | if (this.yearTableData.length > 0) { |
| | | this.currentRow = this.yearTableData[0] |
| | | this.$refs.yearTable.setCurrentRow(this.currentRow) |
| | | } |
| | | } |
| | | this.yearTableDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDataLoading = false |
| | | }) |
| | | }, |
| | | // å页 |
| | | handleSizeChange(val) { |
| | | this.pagination.size = val |
| | | this.getYearTableData() |
| | | }, |
| | | // å页 |
| | | handleCurrentChange(val) { |
| | | this.pagination.current = val |
| | | this.getYearTableData() |
| | | }, |
| | | // æå¼æ°å¢å¼¹æ¡ |
| | | addYearPlan () { |
| | | this.addYearPlanDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.addYearPlanDia.openDialog() |
| | | }) |
| | | }, |
| | | closeDia () { |
| | | this.addYearPlanDia = false |
| | | this.getYearTableData() |
| | | }, |
| | | // 年度计å表-æ¹å |
| | | handleApprove(id) { |
| | | this.currentRowId = id |
| | | this.approvalDialog = true |
| | | }, |
| | | // 年度计å表-å¯¼åº |
| | | downLoadPost(planId) { |
| | | this.$axios.get(this.$api.deviceExaminePlan.exportDeviceExaminePlanDetail + '?planId=' + planId,{responseType: "blob"}).then(res => { |
| | | const blob = new Blob([res],{ type: 'application/msword' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤æé´æ ¸æ¥è®¡å表.docx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤æé´æ ¸æ¥è®¡å表.docx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // 年度计å表-å é¤ |
| | | deleteFun(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceExaminePlan.delQualitySupervise + '?planId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableData(); |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // 年度计å详æ
表-å é¤ |
| | | deleteFun1(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceExaminePlan.delDeviceExaminePlanDetail + '?planDetailsId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | currentChange (row) { |
| | | this.currentRow = row |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }, |
| | | getYearTableDetailData (row) { |
| | | this.yearTableDetailDataLoading = true |
| | | this.$axios.post(this.$api.deviceExaminePlan.pageDeviceExaminePlanDetail,{ |
| | | page: { |
| | | current: this.pagination1.current, |
| | | size: this.pagination1.size, |
| | | }, |
| | | entity: { |
| | | planId: row.planId, |
| | | deviceName: this.searchForm.deviceName, |
| | | deviceNumber: this.searchForm.deviceNumber, |
| | | } |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableDetailData = res.data.records |
| | | this.pagination1.total = res.data.total |
| | | } |
| | | this.yearTableDetailDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDetailDataLoading = false |
| | | }) |
| | | }, |
| | | reset () { |
| | | this.searchForm = { |
| | | deviceName: '', |
| | | deviceNumber: '', |
| | | } |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }, |
| | | // å页 |
| | | handleSizeChange1(val) { |
| | | this.pagination1.size = val |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }, |
| | | // å页 |
| | | handleCurrentChange1(val) { |
| | | this.pagination1.current = val |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }, |
| | | // æå¼å¼¹æ¡ |
| | | handleForm (type, row) { |
| | | this.getUserList() |
| | | this.operationType = type |
| | | this.dialogVisible = true |
| | | this.form.planId = this.currentRow.planId |
| | | if (this.operationType !== 'add') { |
| | | this.$nextTick(() => { |
| | | this.form = this.HaveJson(row) |
| | | }) |
| | | }else{ |
| | | this.form = { |
| | | deviceNumber: '', |
| | | deviceName: '', |
| | | checkTime: '', |
| | | checkIndex: '', |
| | | checkMethod: '', |
| | | howResults: '', |
| | | checkChargerUserId: '', |
| | | checkChargerUser: '', |
| | | remark: '', |
| | | planId: this.currentRow.planId, |
| | | planDetailsId: '', |
| | | } |
| | | } |
| | | }, |
| | | // æäº¤è¡¨å |
| | | submitForm () { |
| | | this.$refs.modelForm.validate(valid => { |
| | | if (valid) { |
| | | if (this.operationType === 'add') { |
| | | this.submitFormLoading = true |
| | | this.$axios.post(this.$api.deviceExaminePlan.addDeviceExaminePlanDetail, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.dialogVisible = false |
| | | this.getYearTableData() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } else { |
| | | this.submitFormLoading = true |
| | | this.$axios.post(this.$api.deviceExaminePlan.updateDeviceExaminePlanDetail, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.dialogVisible = false |
| | | this.getYearTableData() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // æäº¤æ¹å |
| | | handleApproval (status) { |
| | | const personTrainingUpdateDto = { |
| | | planId: this.currentRowId, |
| | | ratifyRemark: this.ratifyRemark, |
| | | ratifyStatus: status |
| | | } |
| | | this.approvalLoading = true |
| | | this.$axios.post(this.$api.deviceExaminePlan.ratifyDeviceExaminePlan, personTrainingUpdateDto, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('æäº¤æåï¼'); |
| | | this.approvalDialog = false |
| | | this.getYearTableData(); |
| | | } |
| | | this.approvalLoading = false |
| | | }).catch(() => { |
| | | this.approvalLoading = false |
| | | }) |
| | | }, |
| | | resetForm () { |
| | | this.$refs.modelForm.resetFields(); |
| | | this.dialogVisible = false |
| | | }, |
| | | // æå¼å¯¹æ¯æµç¨å¼¹æ¡ |
| | | handleCheck (row) { |
| | | this.equipmentCheck = true |
| | | this.$nextTick(() => { |
| | | this.$refs.equipmentCheck.openDialog(row) |
| | | }) |
| | | }, |
| | | // å
³é对æ¯å¼¹æ¡ |
| | | closeDialog () { |
| | | this.equipmentCheck = false |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }, |
| | | // æå¼è®°å½å¼¹æ¡ |
| | | handleRecord (row) { |
| | | this.checkRecord = true |
| | | this.$nextTick(() => { |
| | | this.$refs.checkRecord.openDialog(row) |
| | | }) |
| | | }, |
| | | // å
³éè®°å½å¼¹æ¡ |
| | | closeDialog1 () { |
| | | this.checkRecord = false |
| | | this.getYearTableDetailData(this.currentRow) |
| | | }, |
| | | // æå¼å¯¼åºå¼¹æ¡ |
| | | handleDown (row) { |
| | | this.downRow = row |
| | | this.downloadDialog = true |
| | | }, |
| | | // æ ¸æ¥è®°å½å¯¼åº |
| | | controlDown () { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceExaminePlan.exportReviewExamineRecordDetail + '?planDetailsId=' + this.downRow.planDetailsId, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤æé´æ ¸æ¥è®°å½è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤æé´æ ¸æ¥è®°å½è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // æ ¸æ¥å¯¹æ¯å¯¼åº |
| | | processingDown () { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceExaminePlan.exportReviewExamineRecordContrast + '?planDetailsId=' + this.downRow.planDetailsId, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤æé´æ ¸æ¥æ¯å¯¹è®°å½è¡¨.doc'; |
| | | link.click(); |
| | | }) |
| | | }, |
| | | // 导å
¥æµç¨ |
| | | beforeUpload(file) { |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload.clearFiles() |
| | | return false; |
| | | } else { |
| | | this.upLoading = true; |
| | | return true; |
| | | } |
| | | }, |
| | | onError(err, file, fileList) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | handleSuccessUp(response) { |
| | | this.upLoading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.getYearTableData() |
| | | } else if (response.code == 201) { |
| | | this.$message.error(response.message) |
| | | } |
| | | }, |
| | | getUserList(){ |
| | | this.$axios.post(this.$api.user.selectUserList, { |
| | | page: {current: -1, size: -1,}, |
| | | entity: {name: null} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.userList = res.data.body.records |
| | | }) |
| | | }, |
| | | setCheckChargerUser (val) { |
| | | const index = this.userList.findIndex(item => item.id === val) |
| | | if (index > -1) { |
| | | this.form.checkChargerUser = this.userList[index].name |
| | | } |
| | | }, |
| | | }, |
| | | // ç¨äºä¸ä¼ æä»¶çä¿¡æ¯ |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | 'token': sessionStorage.getItem('token') |
| | | } |
| | | }, |
| | | action() { |
| | | return this.javaApi + this.$api.deviceExaminePlan.importDeviceExaminePlan |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | .title-search { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 10px 0; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="仪å¨è®¾å¤ä¿®çç³è¯·è¡¨" |
| | | width="80%" @close="resetForm"> |
| | | <el-steps :active="currentStep" align-center finish-status="success"> |
| | | <el-step title="å¡«åç³è¯·è¡¨" @click.native="setStep(0)"></el-step> |
| | | <el-step title="ç³è¯·é¨é¨è´è´£äººæè§" @click.native="setStep(1)"></el-step> |
| | | <el-step title="维修记å½" @click.native="setStep(2)"></el-step> |
| | | </el-steps> |
| | | <el-form ref="modelForm" |
| | | :model="form" :rules="rules" label-width="160px"> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="å®è£
å°ç¹ï¼" prop="location"> |
| | | <el-input v-model="form.location" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="æåææ
éæ
åµï¼" prop="damageOrMalfunction"> |
| | | <el-input v-model="form.damageOrMalfunction" :disabled="currentStep !== 0" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="è¦æ±ä¿®å¤æ¥æï¼" prop="repairDate"> |
| | | <el-date-picker |
| | | v-model="form.repairDate" |
| | | :disabled="currentStep !== 0" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 100%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0 && currentStep !== 0" :span="12"> |
| | | <el-form-item label="ç³è¯·äººï¼" prop="applicantUser"> |
| | | <el-input v-model="form.applicantUser" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="12"> |
| | | <el-form-item label="ç³è¯·é¨é¨è´è´£äººï¼" prop="departmentHeadUserId"> |
| | | <el-select v-model="form.departmentHeadUserId" :disabled="currentStep !== 0" placeholder="è¯·éæ©" size="small" style="width: 50%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 1" :span="24"> |
| | | <el-form-item label="ç³è¯·é¨é¨è´è´£äººæè§ï¼" prop="departmentHeadOpinion"> |
| | | <el-input v-model="form.departmentHeadOpinion" :disabled="currentStep !== 1" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 2" :span="24"> |
| | | <el-form-item label="维修记äºï¼" prop="maintenanceRecord"> |
| | | <el-input v-model="form.maintenanceRecord" :disabled="currentStep !== 2" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 2" :span="24"> |
| | | <el-form-item label="维修人ï¼" prop="maintenanceUser"> |
| | | <el-input v-model="form.maintenanceUser" :disabled="currentStep !== 2" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="resetForm">å æ¶</el-button> |
| | | <el-button v-if="currentStep !== 3" :loading="submitFormLoading" type="primary" @click="submitForm">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "failure-form", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | dialogVisible: false, |
| | | submitFormLoading: false, |
| | | form: { |
| | | location: '', |
| | | damageOrMalfunction: '', |
| | | repairDate: '', |
| | | departmentHeadUserId: '', |
| | | departmentHeadOpinion: '', |
| | | maintenanceRecord: '', |
| | | maintenanceUser: '', |
| | | applicantUser: '', |
| | | flowType: '', |
| | | deviceId: '', |
| | | isFinish: '', |
| | | }, |
| | | currentStep: 0, |
| | | showStep: 0, |
| | | rules: { |
| | | departmentHeadUserId: [{required: true, message: 'è¯·éæ©ç³è¯·é¨é¨è´è´£äºº', trigger: 'change'}], |
| | | departmentHeadOpinion: [{required: true, message: '请填åæè§', trigger: 'blur'}], |
| | | }, |
| | | userList: [], |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDialog(id, deviceId) { |
| | | this.dialogVisible = true |
| | | this.form.maintenanceId = id |
| | | this.form.deviceId = deviceId |
| | | this.getUserList() |
| | | if (this.form.maintenanceId) { |
| | | this.searchInfo() |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | searchInfo() { |
| | | this.$axios.get(this.$api.deviceBreakdownMaintenance.getDeviceBreakdownMaintenance + '?maintenanceId=' + this.form.maintenanceId).then(res => { |
| | | if (res.code === 200) { |
| | | this.form = {...res.data} |
| | | if (this.form.isFinish === 0) { |
| | | if (this.form.departmentHeadUserId) { |
| | | this.currentStep = 1 |
| | | this.showStep = 1 |
| | | } |
| | | if (this.form.departmentHeadOpinion) { |
| | | this.currentStep = 2 |
| | | this.showStep = 2 |
| | | } |
| | | } else { |
| | | this.currentStep = 3 |
| | | this.showStep = 2 |
| | | } |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | setStep(step) { |
| | | this.showStep = step |
| | | }, |
| | | // æäº¤è¡¨å |
| | | submitForm() { |
| | | this.form.flowType = this.currentStep |
| | | this.$refs.modelForm.validate((valid) => { |
| | | if (valid) { |
| | | this.$axios.post(this.$api.deviceBreakdownMaintenance.addDeviceBreakdownMaintenance, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | // å
³éå¼¹æ¡ |
| | | resetForm() { |
| | | this.dialogVisible = false |
| | | this.$emit('closeDialog') |
| | | }, |
| | | getUserList() { |
| | | this.$axios.post(this.$api.user.selectUserList, { |
| | | page: {current: -1, size: -1,}, |
| | | entity: {name: null} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.userList = res.data.body.records |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .form-item { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-right: 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="设å¤ç¹æ£è®°å½è¡¨" |
| | | width="80%" @close="resetForm"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <div class="form-item"> |
| | | <span style="width: 103px">æµéèå´ï¼</span> |
| | | <el-input v-model="form.measurementScope" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24" style="text-align: center;margin-bottom: 10px">ç¹æ£ä½¿ç¨ç©è´¨</el-col> |
| | | <el-col :span="12"> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">åç§°ï¼</span> |
| | | <el-input v-model="form.materialName" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">è§æ ¼åå·ï¼</span> |
| | | <el-input v-model="form.materialModel" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">管çç¼å·ï¼</span> |
| | | <el-input v-model="form.materialManagementNumber" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">精度ç级ï¼</span> |
| | | <el-input v-model="form.materialAccuracyGrade" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24" style="text-align: center;margin-bottom: 10px">æµè¯ç¯å¢</el-col> |
| | | <el-col :span="12"> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">温度ï¼</span> |
| | | <el-input v-model="form.temperature" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">湿度ï¼</span> |
| | | <el-input v-model="form.humidity" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <div> |
| | | <el-button v-if="operationType === 'add'" size="small" type="primary" @click="addTableRow">æ·»å </el-button> |
| | | </div> |
| | | <div style="text-align: center">æµè¯æ°æ®è®°å½</div> |
| | | <div style="margin: 10px 0"> |
| | | <el-table ref="yearTable" :data="details" |
| | | height="300px" |
| | | style="width: 100% ;"> |
| | | <el-table-column align="center" header-align="center" label="åºå·" type="index" width="60"></el-table-column> |
| | | <el-table-column label="æµè¯é¡¹ç®" min-width="170" prop="testItems"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.testItems" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ åå¼" min-width="120" prop="standardValue"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.standardValue" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="宿µå¼" min-width="120" prop="measuredValue"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.measuredValue" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="示å¼è¯¯å·®" min-width="120" prop="indicationError"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.indicationError" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å
许误差" min-width="90" prop="allowableError"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.allowableError" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å项ç»è®º" min-width="90" prop="singleItemConclusion"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.singleItemConclusion" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <div class="form-item"> |
| | | <span style="width: 103px">æµè¯ç»è®ºï¼</span> |
| | | <el-input v-model="form.testConclusion" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">夿³¨ï¼</span> |
| | | <el-input v-model="form.remark" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="form-item"> |
| | | <span style="width: 116px">è¯·éæ©å¤æ ¸äººï¼</span> |
| | | <el-select v-model="form.reviewerId" :disabled="operationType === 'check'" placeholder="è¯·éæ©" size="small" style="width: 100%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="resetForm">å æ¶</el-button> |
| | | <el-button v-if="operationType !== 'check'" :loading="submitFormLoading" type="primary" @click="submitCheck">ç¡® å®</el-button> |
| | | <el-button v-if="operationType === 'check'" :loading="submitFormLoading" @click="examine(0)">ä¸éè¿</el-button> |
| | | <el-button v-if="operationType === 'check'" :loading="submitFormLoading" type="primary" @click="examine(1)">é è¿</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "inspection-form", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | dialogVisible: false, |
| | | submitFormLoading: false, |
| | | form: { |
| | | measurementScope: '', |
| | | materialName: '', |
| | | materialModel: '', |
| | | materialManagementNumber: '', |
| | | materialAccuracyGrade: '', |
| | | temperature: '', |
| | | humidity: '', |
| | | testConclusion: '', |
| | | remark: '', |
| | | reviewerId: '', |
| | | deviceId: '', |
| | | inspectionRecordId: '', |
| | | }, |
| | | operationType: '', |
| | | equipOptions: [], |
| | | details: [], |
| | | userList: [], |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDialog(id,deviceId, type) { |
| | | this.dialogVisible = true |
| | | this.operationType = type |
| | | this.form.deviceId = deviceId |
| | | this.form.inspectionRecordId = id |
| | | this.getUserList() |
| | | if (this.form.inspectionRecordId) { |
| | | this.searchInfo() |
| | | } |
| | | }, |
| | | searchInfo() { |
| | | this.$axios.get(this.$api.deviceInspectionRecord.getDeviceInspectionRecord + '?inspectionRecordId=' + this.form.inspectionRecordId).then(res => { |
| | | if (res.code === 200) { |
| | | this.form = {...res.data} |
| | | this.details = this.form.details || [] |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | // æ·»å è¡¨æ ¼æ°æ® |
| | | addTableRow() { |
| | | this.details.push({testItems: ''}) |
| | | }, |
| | | submitCheck() { |
| | | this.form.details = this.HaveJson(this.details) |
| | | this.submitFormLoading = true |
| | | if (this.operationType === 'add') { |
| | | this.$axios.post(this.$api.deviceInspectionRecord.addDeviceInspectionRecord, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } else { |
| | | this.$axios.post(this.$api.deviceInspectionRecord.updateDeviceInspectionRecord, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } |
| | | }, |
| | | examine(status) { |
| | | const params = { |
| | | inspectionRecordId: this.form.inspectionRecordId, |
| | | status: status, |
| | | } |
| | | this.$axios.post(this.$api.deviceInspectionRecord.reviewDeviceInspectionRecord, |
| | | params, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å®¡æ ¸æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | }, |
| | | resetForm() { |
| | | this.dialogVisible = false |
| | | this.$emit('closeDialog') |
| | | }, |
| | | getUserList() { |
| | | this.$axios.post(this.$api.user.selectUserList, { |
| | | page: {current: -1, size: -1,}, |
| | | entity: {name: null} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.userList = res.data.body.records |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .form { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .form-item { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-right: 20px; |
| | | margin-bottom: 10px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div> |
| | | <div style="margin: 10px 0;text-align: right"> |
| | | <el-button size="small" type="primary" @click="getYearTableDetailData(clickNodeVal.value)">å·æ°</el-button> |
| | | <el-button size="small" type="primary" @click="handleForm('', 'add')">æ°å¢</el-button> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTable" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData" |
| | | height="calc(100vh - 18em)" |
| | | style="width: 100% ;"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <el-table-column label="åç§°" min-width="150" prop="materialName"></el-table-column> |
| | | <el-table-column label="è§æ ¼åå·" min-width="100" prop="materialModel"></el-table-column> |
| | | <el-table-column label="管çç¼å·" min-width="150" prop="materialManagementNumber"></el-table-column> |
| | | <el-table-column label="精度ç级" min-width="180" prop="materialAccuracyGrade"></el-table-column> |
| | | <el-table-column label="温度" min-width="100" prop="temperature"></el-table-column> |
| | | <el-table-column label="湿度" min-width="100" prop="humidity"></el-table-column> |
| | | <el-table-column label="夿 ¸ç¶æ" min-width="180" prop="status"> |
| | | <template slot-scope="scope"> |
| | | <el-tag v-if="scope.row.status === 1" type="success">é è¿</el-tag> |
| | | <el-tag v-if="scope.row.status === 0" type="danger">ä¸éè¿</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-button :disabled="scope.row.status === 1" size="small" type="text" @click="handleForm(scope.row.inspectionRecordId, 'edit')">ç¼è¾</el-button> |
| | | <el-button :disabled="scope.row.status === 1" size="small" type="text" @click="handleForm(scope.row.inspectionRecordId, 'check')">å®¡æ ¸</el-button> |
| | | <el-button size="small" type="text" @click="handleDownOne(scope.row.inspectionRecordId)">导åº</el-button> |
| | | <el-button :disabled="scope.row.status === 1" size="small" style="color: #f56c6c" type="text" @click="deleteFun(scope.row.inspectionRecordId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1" |
| | | @current-change="handleCurrentChange1"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <inspection-form v-if="applicationForm" ref="applicationForm" @closeDialog="closeDialog"></inspection-form> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import InspectionForm from "./inspection-form.vue"; |
| | | |
| | | export default { |
| | | name: "inspection-of-equipment", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {InspectionForm}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | pagination1: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | yearTableDetailDataLoading: false, |
| | | yearTableDetailData: [], |
| | | applicationForm: false |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢ |
| | | getYearTableDetailData(deviceId) { |
| | | this.yearTableDetailDataLoading = true |
| | | this.$axios.post(this.$api.deviceInspectionRecord.getDeviceInspectionRecordByPage, { |
| | | page: { |
| | | current: this.pagination1.current, |
| | | size: this.pagination1.size, |
| | | }, |
| | | entity: { |
| | | deviceId: deviceId, |
| | | } |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableDetailData = res.data.records |
| | | this.pagination1.total = res.data.total |
| | | } |
| | | this.yearTableDetailDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDetailDataLoading = false |
| | | }) |
| | | }, |
| | | handleForm(id, type) { |
| | | this.applicationForm = true |
| | | this.$nextTick(() => { |
| | | this.$refs.applicationForm.openDialog(id, this.clickNodeVal.value, type) |
| | | }) |
| | | }, |
| | | closeDialog() { |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å页 |
| | | handleSizeChange1(val) { |
| | | this.pagination1.size = val |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å页 |
| | | handleCurrentChange1(val) { |
| | | this.pagination1.current = val |
| | | this.getYearTableDetailData(this.clickNodeVal.value) |
| | | }, |
| | | // å¯¼åº |
| | | handleDownOne(id) { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceInspectionRecord.exportDeviceInspectionRecord + '?inspectionRecordId=' + id, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤ç¹æ£è®°å½è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '设å¤ç¹æ£è®°å½è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | deleteFun(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceInspectionRecord.deleteDeviceInspectionRecord + '?inspectionRecordId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableDetailData(this.clickNodeVal.value); |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getYearTableDetailData(newVal.value); |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | |
| | | .title-search { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 10px 0; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div> |
| | | <div style="margin: 10px 0;text-align: right"> |
| | | <el-button size="small" type="primary" @click="getYearTableDetailData">å·æ°</el-button> |
| | | <el-button size="small" type="primary" @click="handleForm('add')">æ°å¢</el-button> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTable" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData" |
| | | height="calc(100vh - 18em)" |
| | | style="width: 100% ;"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <el-table-column label="年份" min-width="80" prop="planYear"></el-table-column> |
| | | <el-table-column label="æä»¶åç§°" min-width="120" prop="compiler"></el-table-column> |
| | | <el-table-column label="ç¼å¶äºº" min-width="150" prop="compiler"></el-table-column> |
| | | <el-table-column label="ç¼å¶æ¶é´" min-width="150" prop="datePreparation"></el-table-column> |
| | | <el-table-column label="æ¹å人" min-width="180" prop="audit"></el-table-column> |
| | | <el-table-column label="æ¹åç¶æ" min-width="180" prop="status"> |
| | | <template slot-scope="scope"> |
| | | <el-tag v-if="scope.row.status === 1" type="success">æ¹ å</el-tag> |
| | | <el-tag v-if="scope.row.status === 0" type="danger">䏿¹å</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ¹åæ¶é´" min-width="180" prop="auditDate"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="180"> |
| | | <template slot-scope="scope"> |
| | | <el-button :disabled="scope.row.status === 1" size="small" type="text" @click="handleForm('edit', scope.row)">ç¼è¾</el-button> |
| | | <el-button :disabled="scope.row.status === 1" size="small" type="text" @click="handleForm('check', scope.row)">æ¹å</el-button> |
| | | <el-button size="small" type="text" @click="handleDownOne(scope.row.traceabilityManagementId)">导åº</el-button> |
| | | <el-button :disabled="scope.row.status === 1" size="small" style="color: #f56c6c" type="text" @click="deleteFun(scope.row.traceabilityManagementId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1" |
| | | @current-change="handleCurrentChange1"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="applicationForm" title="仪å¨è®¾å¤é弿º¯æºç®¡çæ»ä½è®¡å" |
| | | width="80%" @close="closeDialog"> |
| | | <div style="display: flex;align-items: center;"> |
| | | <el-button v-if="operationType !== 'check'" size="small" type="primary" @click="addTableRow">æ·»å </el-button> |
| | | <span style="width: 60px">年份ï¼</span> |
| | | <el-date-picker |
| | | v-model="form.planYear" |
| | | type="year" |
| | | value-format="yyyy" |
| | | clearable |
| | | size="small" |
| | | format="yyyy" |
| | | placeholder="鿩年"> |
| | | </el-date-picker> |
| | | </div> |
| | | <div style="margin: 10px 0"> |
| | | <el-table ref="yearTable" :data="deviceTraceabilityManagementDetails" |
| | | height="300px" id="templateParamTable" row-key="deviceId" |
| | | style="width: 100% ;"> |
| | | <el-table-column align="center" header-align="center" label="åºå·" type="index" width="60"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" min-width="170" prop="deviceId"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceName" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="åå·" min-width="140" prop="specificationModel"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.specificationModel" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="设å¤ç¼å·" min-width="140" prop="managementNumber"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.managementNumber" :disabled="operationType === 'check'" clearable size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ææ¯ææ åæ°" min-width="120" prop="technicalIndexParameters"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.technicalIndexParameters" :disabled="operationType === 'check'" clearable size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ææ¯ææ è¦æ±" min-width="120" prop="technicalRequirements"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.technicalRequirements" :disabled="operationType === 'check'" clearable size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ£å®å¨æ" min-width="120" prop="verificationCycle"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.verificationCycle" :disabled="operationType === 'check'" clearable size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ£å®åä½" min-width="90" prop="verificationUnit"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.verificationUnit" :disabled="operationType === 'check'" clearable size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="夿³¨" min-width="90" prop="remark"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.remark" :disabled="operationType === 'check'" clearable size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="æä½" width="80" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button style="color: #f56c6c" type="text" @click="deleteRow(scope.$index)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeDialog">å æ¶</el-button> |
| | | <el-button v-if="operationType !=='check'" :loading="submitFormLoading" type="primary" @click="submitForm">确 认</el-button> |
| | | <el-button v-if="operationType ==='check'" :loading="submitFormLoading" type="primary" @click="checkStatus(0)">ä¸éè¿</el-button> |
| | | <el-button v-if="operationType ==='check'" :loading="submitFormLoading" type="primary" @click="checkStatus(1)">é è¿</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="addEquipDia" title="æ·»å 设å¤" width="50%"> |
| | | <el-table ref="multipleTable" :data="equipOptions" tooltip-effect="dark" height="500" |
| | | style="width: 100%" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" prop="label" width="190"></el-table-column> |
| | | <el-table-column prop="specificationModel" label="åå·" width="120"></el-table-column> |
| | | <el-table-column prop="managementNumber" label="设å¤ç¼å·"></el-table-column> |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addEquipDia = false">å æ¶</el-button> |
| | | <el-button v-if="operationType !=='check'" :loading="submitFormLoading" type="primary" @click="changeMachineName">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Sortable from "sortablejs"; |
| | | |
| | | export default { |
| | | name: "quantity-value-traceability-plan", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | pagination1: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | yearTableDetailDataLoading: false, |
| | | yearTableDetailData: [], |
| | | deviceTraceabilityManagementDetails: [], |
| | | selectionRows: [], |
| | | deviceIds: [], |
| | | applicationForm: false, |
| | | submitFormLoading: false, |
| | | operationType: '', |
| | | equipOptions: [], |
| | | form: { |
| | | planYear: '', |
| | | deviceTraceabilityManagementDetails: [] |
| | | }, |
| | | addEquipDia: false, |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getYearTableDetailData() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢ |
| | | getYearTableDetailData() { |
| | | this.yearTableDetailDataLoading = true |
| | | this.$axios.post(this.$api.deviceTraceabilityManagement.selectDeviceTraceabilityManagementByPage, { |
| | | page: { |
| | | current: this.pagination1.current, |
| | | size: this.pagination1.size, |
| | | }, |
| | | entity: {} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableDetailData = res.data.records |
| | | this.pagination1.total = res.data.total |
| | | } |
| | | this.yearTableDetailDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDetailDataLoading = false |
| | | }) |
| | | }, |
| | | // æå¼æ°å¢åç¼è¾å¼¹æ¡ |
| | | handleForm(type, row) { |
| | | this.operationType = type |
| | | this.applicationForm = true |
| | | this.form = { |
| | | planYear: '', |
| | | deviceTraceabilityManagementDetails: [] |
| | | }, |
| | | this.deviceTraceabilityManagementDetails = [] |
| | | if (row) { |
| | | this.traceabilityManagementId = row.traceabilityManagementId |
| | | this.$axios.get(this.$api.deviceTraceabilityManagement.getTraceabilityManagementDetail + '?traceabilityManagementId=' + this.traceabilityManagementId).then(res => { |
| | | if (res.code === 200) { |
| | | this.form = res.data |
| | | this.deviceTraceabilityManagementDetails = this.form.deviceTraceabilityManagementDetails |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | } |
| | | }, |
| | | // æ·»å è®¾å¤ |
| | | addTableRow () { |
| | | this.addEquipDia = true |
| | | this.getEquipOptions() |
| | | }, |
| | | handleSelectionChange (selection) { |
| | | this.selectionRows = selection |
| | | }, |
| | | // èµå¼ä»ªå¨ç¼å· |
| | | changeMachineName() { |
| | | this.deviceTraceabilityManagementDetails = [] |
| | | this.selectionRows.map(val => { |
| | | this.deviceTraceabilityManagementDetails.push({deviceId: val.id,managementNumber: val.value, deviceName: val.label, specificationModel: val.specificationModel}) |
| | | }) |
| | | this.addEquipDia = false |
| | | this.rowDrop() |
| | | }, |
| | | rowDrop() { |
| | | const that = this |
| | | const tbody = document.querySelector( |
| | | '#templateParamTable .el-table__body-wrapper tbody' |
| | | ) |
| | | if (!this.sortTable) { |
| | | this.sortTable = Sortable.create(tbody, { |
| | | animation: 200, //å¨ç»æ¶é¿ |
| | | handle: ".el-table__row", //坿æ½åºåclass |
| | | //ææ½ä¸äºä»¶ |
| | | onMove: ({ dragged, related }) => { |
| | | const oldRow = that.deviceTraceabilityManagementDetails[dragged.rowIndex] //æ§ä½ç½®æ°æ® |
| | | const newRow = that.deviceTraceabilityManagementDetails[related.rowIndex] //è¢«ææ½çæ°æ°æ® |
| | | }, |
| | | //ææ½ç»æäºä»¶ |
| | | onEnd: evt => { |
| | | const curRow = that.deviceTraceabilityManagementDetails.splice(evt.oldIndex, 1)[0]; |
| | | that.deviceTraceabilityManagementDetails.splice(evt.newIndex, 0, curRow); |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | // å é¤è¡¨æ ¼è¡ |
| | | deleteRow (index) { |
| | | this.deviceTraceabilityManagementDetails.splice(index, 1) |
| | | }, |
| | | // æäº¤æ°å¢åä¿®æ¹ |
| | | submitForm() { |
| | | this.form.deviceTraceabilityManagementDetails = this.HaveJson(this.deviceTraceabilityManagementDetails) |
| | | this.submitFormLoading = true |
| | | if (this.operationType === 'add') { |
| | | this.$axios.post(this.$api.deviceTraceabilityManagement.addTraceabilityManagement, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } else { |
| | | this.$axios.post(this.$api.deviceTraceabilityManagement.updateTraceabilityManagement, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } |
| | | }, |
| | | // æäº¤å®¡æ ¸ |
| | | checkStatus(status) { |
| | | const params = { |
| | | status: status, |
| | | traceabilityManagementId: this.traceabilityManagementId |
| | | } |
| | | this.$axios.post(this.$api.deviceTraceabilityManagement.reviewTraceabilityManagementStatus, |
| | | params, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å®¡æ ¸æå') |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | }, |
| | | closeDialog() { |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData() |
| | | }, |
| | | // å页 |
| | | handleSizeChange1(val) { |
| | | this.pagination1.size = val |
| | | this.getYearTableDetailData() |
| | | }, |
| | | // å页 |
| | | handleCurrentChange1(val) { |
| | | this.pagination1.current = val |
| | | this.getYearTableDetailData() |
| | | }, |
| | | handleDownOne(id) { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceTraceabilityManagement.exportDeviceTraceabilityManagement + '?traceabilityManagementId=' + id, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], {type: 'application/octet-stream'}); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤é弿º¯æºç®¡çæ»ä½è®¡å.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = '仪å¨è®¾å¤é弿º¯æºç®¡çæ»ä½è®¡å.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | deleteFun(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceTraceabilityManagement.deleteTraceabilityManagement + '?traceabilityManagementId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableDetailData(); |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // è·åææè®¾å¤ |
| | | getEquipOptions() { |
| | | this.equipOptions = [] |
| | | this.$axios.get(this.$api.deviceScope.deviceScopeSearch + '?status=0').then(res => { |
| | | if (res.code === 200 && res.data) { |
| | | this.equipOptions = res.data.map(m => { |
| | | m.value = m.managementNumber |
| | | m.label = m.deviceName |
| | | return m |
| | | }) |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getYearTableDetailData(); |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | |
| | | .title-search { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 10px 0; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="仪å¨è®¾å¤æ¥åºç³è¯·è¡¨" |
| | | width="80%" @close="resetForm"> |
| | | <el-steps :active="currentStep" align-center finish-status="success"> |
| | | <el-step title="å¡«åç³è¯·è¡¨" @click.native="setStep(0)"></el-step> |
| | | <el-step title="ç³è¯·é¨é¨è´è´£äººæè§" @click.native="setStep(1)"></el-step> |
| | | <el-step title="计é室æè§" @click.native="setStep(2)"></el-step> |
| | | <el-step title="æ¹å人" @click.native="setStep(3)"></el-step> |
| | | </el-steps> |
| | | <el-form ref="modelForm" |
| | | :model="form" :rules="rules" label-width="160px"> |
| | | <el-col v-if="showStep === 0" :span="24"> |
| | | <el-form-item label="é
ä»¶ï¼" prop="parts"> |
| | | <el-input v-model="form.parts" :disabled="currentStep !== 0" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="24"> |
| | | <el-form-item label="æ¥åºçç±ï¼" prop="reasonsForScrap"> |
| | | <el-input v-model="form.reasonsForScrap" :disabled="currentStep !== 0" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 0" :span="24"> |
| | | <el-form-item label="ç³è¯·é¨é¨è´è´£äººï¼" prop="departmentHeadUserId"> |
| | | <el-select v-model="form.departmentHeadUserId" :disabled="currentStep !== 0" placeholder="è¯·éæ©" size="small" style="width: 50%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 1" :span="24"> |
| | | <el-form-item label="ç³è¯·é¨é¨è´è´£äººæè§ï¼" prop="departmentHeadOpinion"> |
| | | <el-input v-model="form.departmentHeadOpinion" :disabled="currentStep !== 1" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 1" :span="24"> |
| | | <el-form-item label="计é室è´è´£äººï¼" prop="meteringRoomUserId"> |
| | | <el-select v-model="form.meteringRoomUserId" :disabled="currentStep !== 1" placeholder="è¯·éæ©" size="small" style="width: 50%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 2" :span="24"> |
| | | <el-form-item label="计é室æè§ï¼" prop="meteringRoomOpinion"> |
| | | <el-input v-model="form.meteringRoomOpinion" :disabled="currentStep !== 2" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 2" :span="24"> |
| | | <el-form-item label="æ¹å人ï¼" prop="approverUserId"> |
| | | <el-select v-model="form.approverUserId" :disabled="currentStep !== 2" placeholder="è¯·éæ©" size="small" style="width: 50%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="showStep === 3" :span="24"> |
| | | <el-form-item label="æ¹å人æè§ï¼" prop="approverOpinion"> |
| | | <el-input v-model="form.approverOpinion" :disabled="currentStep !== 3" clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="resetForm">å æ¶</el-button> |
| | | <el-button v-if="currentStep !== 4" :loading="submitFormLoading" type="primary" @click="submitForm">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "scrapApplicationForm", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | dialogVisible: false, |
| | | submitFormLoading: false, |
| | | form: { |
| | | parts: '', |
| | | reasonsForScrap: '', |
| | | departmentHeadUserId: '', |
| | | departmentHeadOpinion: '', |
| | | meteringRoomUserId: '', |
| | | meteringRoomOpinion: '', |
| | | approverUserId: '', |
| | | approverOpinion: '', |
| | | flowType: '', |
| | | deviceId: '', |
| | | isFinish: '', |
| | | }, |
| | | currentStep: 0, |
| | | showStep: 0, |
| | | rules: { |
| | | departmentHeadUserId: [{ required: true, message: 'è¯·éæ©ç³è¯·é¨é¨è´è´£äºº', trigger: 'change' }], |
| | | meteringRoomUserId: [{ required: true, message: 'è¯·éæ©è®¡é室è´è´£äºº', trigger: 'change' }], |
| | | approverUserId: [{ required: true, message: 'è¯·éæ©æ¹å人', trigger: 'change' }], |
| | | }, |
| | | userList: [], |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDialog (id, deviceId) { |
| | | this.dialogVisible = true |
| | | this.form.scrappedId = id |
| | | this.form.deviceId = deviceId |
| | | this.getUserList() |
| | | if (this.form.scrappedId) { |
| | | this.searchInfo() |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | searchInfo () { |
| | | this.$axios.get(this.$api.deviceScrapped.getDeviceScrapped+'?scrappedId=' + this.form.scrappedId).then(res => { |
| | | if (res.code === 200) { |
| | | this.form = {...res.data} |
| | | if (this.form.isFinish === 0) { |
| | | if (this.form.departmentHeadUserId) { |
| | | this.currentStep = 1 |
| | | this.showStep = 1 |
| | | } |
| | | if (this.form.meteringRoomUserId) { |
| | | this.currentStep = 2 |
| | | this.showStep = 2 |
| | | } |
| | | if (this.form.approverUserId) { |
| | | this.currentStep = 3 |
| | | this.showStep = 3 |
| | | } |
| | | } else { |
| | | this.currentStep = 4 |
| | | this.showStep = 3 |
| | | } |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | setStep (step) { |
| | | this.showStep = step |
| | | }, |
| | | // æäº¤è¡¨å |
| | | submitForm () { |
| | | this.form.flowType = this.currentStep |
| | | this.$refs.modelForm.validate((valid) => { |
| | | if (valid) { |
| | | this.$axios.post(this.$api.deviceScrapped.addDeviceScrapped, |
| | | this.form, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.resetForm() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | // å
³éå¼¹æ¡ |
| | | resetForm () { |
| | | this.dialogVisible = false |
| | | this.$emit('closeDialog') |
| | | }, |
| | | getUserList(){ |
| | | this.$axios.post(this.$api.user.selectUserList, { |
| | | page: {current: -1, size: -1,}, |
| | | entity: {name: null} |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.userList = res.data.body.records |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .form-item { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-right: 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div> |
| | | <div class="title"> |
| | | <div class="title-search"> |
| | | <span style="width: 80px;font-size: 14px">åä½åç§°ï¼</span> |
| | | <el-input v-model="searchForm.unitName" clearable size="small" style="margin-right: 10px;width: 220px"></el-input> |
| | | <el-button size="small" type="primary" @click="getYearTableDetailData">æ¥ è¯¢</el-button> |
| | | <el-button size="small" @click="reset">é ç½®</el-button> |
| | | </div> |
| | | <div> |
| | | <el-button size="small" type="primary" @click="handleForm('')">æ°å¢</el-button> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <el-table ref="yearTable" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData" |
| | | height="calc(100vh - 18em)" |
| | | style="width: 100% ;"> |
| | | <!-- è¡¨æ ¼å --> |
| | | <el-table-column align="center" header-align="center" label="åºå·" prop="prop" type="index" width="70"></el-table-column> |
| | | <el-table-column label="åä½åç§°" min-width="150" prop="unitName"></el-table-column> |
| | | <el-table-column label="å°å" min-width="100" prop="address"></el-table-column> |
| | | <el-table-column label="仪å¨åç§°" min-width="150" prop="deviceName"></el-table-column> |
| | | <el-table-column label="åå·" min-width="100" prop="deviceModel"></el-table-column> |
| | | <el-table-column label="é
ä»¶" min-width="150" prop="parts"></el-table-column> |
| | | <el-table-column label="对æ¹ä»ªå¨ç¼å·" min-width="150" prop="instrumentNumber"></el-table-column> |
| | | <el-table-column label="ä»ªå¨ææ¯ææ " min-width="150" prop="technicalIndex" show-overflow-tooltip></el-table-column> |
| | | <el-table-column label="éæ±ææ¯ææ " min-width="150" prop="technicalRequirements" show-overflow-tooltip></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="150"> |
| | | <template slot-scope="scope"> |
| | | <el-button :disabled="scope.row.ratifyStatus === 1" size="small" type="text" @click="handleForm(scope.row.externalApplyId)">æä½</el-button> |
| | | <el-button size="small" type="text" @click="handleDownOne(scope.row.externalApplyId)">导åº</el-button> |
| | | <el-button size="small" style="color: #f56c6c" type="text" @click="deleteFun(scope.row.externalApplyId)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]" |
| | | :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1" |
| | | @current-change="handleCurrentChange1"> |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <application-form v-if="applicationForm" ref="applicationForm" @closeDialog="closeDialog"></application-form> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ApplicationForm from "./applicationForm.vue"; |
| | | |
| | | export default { |
| | | name: "using-external-instruments", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {ApplicationForm}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | unitName: '', |
| | | }, |
| | | pagination1: { |
| | | size: 10, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | yearTableDetailDataLoading: false, |
| | | yearTableDetailData: [], |
| | | applicationForm: false |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getYearTableDetailData() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢ |
| | | getYearTableDetailData () { |
| | | this.yearTableDetailDataLoading = true |
| | | this.$axios.post(this.$api.deviceExternalApply.pageDeviceExternalApply,{ |
| | | page: { |
| | | current: this.pagination1.current, |
| | | size: this.pagination1.size, |
| | | }, |
| | | entity: { |
| | | unitName: this.searchForm.unitName, |
| | | } |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | }, |
| | | noQs: true |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.yearTableDetailData = res.data.records |
| | | this.pagination1.total = res.data.total |
| | | } |
| | | this.yearTableDetailDataLoading = false |
| | | }).catch(err => { |
| | | this.yearTableDetailDataLoading = false |
| | | }) |
| | | }, |
| | | handleForm (id) { |
| | | this.applicationForm = true |
| | | this.$nextTick(() => { |
| | | this.$refs.applicationForm.openDialog(id) |
| | | }) |
| | | }, |
| | | closeDialog () { |
| | | this.applicationForm = false |
| | | this.getYearTableDetailData() |
| | | }, |
| | | // éç½® |
| | | reset () { |
| | | this.searchForm = { |
| | | unitName: '', |
| | | } |
| | | this.getYearTableDetailData() |
| | | }, |
| | | // å页 |
| | | handleSizeChange1(val) { |
| | | this.pagination1.size = val |
| | | this.getYearTableDetailData() |
| | | }, |
| | | // å页 |
| | | handleCurrentChange1(val) { |
| | | this.pagination1.current = val |
| | | this.getYearTableDetailData() |
| | | }, |
| | | // å¯¼åº |
| | | handleDownOne(id) { |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.deviceExternalApply.exportDeviceExternalApply + '?externalApplyId=' + id, { |
| | | responseType: "blob" |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'å©ç¨å¤é¨ä»ªå¨è®¾å¤ç³è¯·è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'å©ç¨å¤é¨ä»ªå¨è®¾å¤ç³è¯·è¡¨.doc'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | deleteFun(id) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$axios.get(this.$api.deviceExternalApply.delDeviceExternalApply + '?externalApplyId=' + id).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.getYearTableDetailData(); |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .title { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | .title-search { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 10px 0; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="device-page"> |
| | | <div class="device-left"> |
| | | <el-input placeholder="è¾å
¥è®¾å¤åç§°" suffix-icon="el-icon-search" v-model="deviceName" size="small" |
| | | @keyup.enter="geList" |
| | | style="margin-bottom: 5px;" clearable @change="geList"></el-input> |
| | | <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'label' }" node-key="id" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen" |
| | | @node-collapse="nodeClose" v-loading="loading" :expand-on-click-node="false" |
| | | :default-expanded-keys="expandedKeys" |
| | | style="height:calc(100% - 46px);overflow-y: scroll;scrollbar-width: none;"> |
| | | <div class="custom-tree-node" slot-scope="{ node, data }"> |
| | | <el-input v-model="deviceName" class="div_left_input" clearable placeholder="è¾å
¥è®¾å¤åç§°" |
| | | size="small" suffix-icon="el-icon-search" @blur="searchFilter" @clear="searchFilter" |
| | | @keyup.enter.native="searchFilter"></el-input> |
| | | <el-tree ref="tree" v-loading="loading" :data="list" :expand-on-click-node="false" |
| | | :filter-node-method="filterNode" :props="{ children: 'children', label: 'label' }" highlight-current node-key="id" |
| | | style="height:calc(100% - 46px); |
| | | overflow-y: scroll; |
| | | scrollbar-width: none;" @node-click="handleNodeClick" @node-expand="nodeOpen" @node-collapse="nodeClose"> |
| | | <div slot-scope="{ node, data }" class="custom-tree-node"> |
| | | <el-row style="width: 100%;"> |
| | | <el-col :span="21" :title="data.label"> |
| | | <span class="single-line-ellipsis" style="width: 100%;display: inline-block;"> |
| | | <i :class="`node_i ${data.children != undefined ? (data.code==='[1]'?'el-icon-folder-opened':'el-icon-folder') : 'el-icon-tickets'}`"></i> |
| | | <i :class="`node_i ${data.children != undefined |
| | | ? data.code === '[1]' |
| | | ? 'el-icon-folder-opened' |
| | | : 'el-icon-folder' |
| | | : 'el-icon-tickets' |
| | | }` |
| | | "></i> |
| | | {{ data.label }} |
| | | </span> |
| | | </el-col> |
| | |
| | | </el-tree> |
| | | </div> |
| | | <div class="device-right"> |
| | | <el-radio-group v-model="currentPage" size="small"> |
| | | <el-radio-button :label="item.id" v-for="(item,index) in tabList" :key="index" |
| | | size="small">{{ item.title }}</el-radio-button> |
| | | </el-radio-group> |
| | | <div class="device-right-content"> |
| | | <component :is="currentPage"></component> |
| | | <div v-if="isShowAll"> |
| | | <el-tabs v-model="menuListActiveName" class="main_right" type="border-card"> |
| | | <el-tab-pane label="è®¾å¤æ»è§" name="è®¾å¤æ»è§"> |
| | | <overview v-if="menuListActiveName == 'è®¾å¤æ»è§'" :clickNodeVal="clickNodeVal" /> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="设å¤å·¥å
·æç»" name="设å¤å·¥å
·æç»"> |
| | | <management v-if="menuListActiveName == '设å¤å·¥å
·æç»'" :clickNodeVal="clickNodeVal" /> |
| | | </el-tab-pane> |
| | | <!-- <el-tab-pane label="èµæºé¢å®" name="èµæºé¢å®">--> |
| | | <!-- <resourceReservation v-if="menuListActiveName == 'èµæºé¢å®'" :clickNodeVal="clickNodeVal"/>--> |
| | | <!-- </el-tab-pane>--> |
| | | <el-tab-pane label="è®¾å¤æ ¡å计å" name="è®¾å¤æ ¡å计å"> |
| | | <equipment-calibration-plan v-if="menuListActiveName == 'è®¾å¤æ ¡å计å'" :clickNodeVal="clickNodeVal"></equipment-calibration-plan> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="è®¾å¤æ ¸æ¥è®¡å" name="è®¾å¤æ ¸æ¥è®¡å"> |
| | | <equipment-verification-plan v-if="menuListActiveName == 'è®¾å¤æ ¸æ¥è®¡å'" :clickNodeVal="clickNodeVal"></equipment-verification-plan> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="设å¤ä¿å
»è®¡å" name="设å¤ä¿å
»è®¡å"> |
| | | <equipment-maintenance-plan v-if="menuListActiveName == '设å¤ä¿å
»è®¡å'" :clickNodeVal="clickNodeVal"></equipment-maintenance-plan> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="é弿º¯æºè®¡å" name="é弿º¯æºè®¡å"> |
| | | <quantity-value-traceability-plan v-if="menuListActiveName == 'é弿º¯æºè®¡å'" :clickNodeVal="clickNodeVal"></quantity-value-traceability-plan> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="å©ç¨å¤é¨ä»ªå¨è®¾å¤" name="å©ç¨å¤é¨ä»ªå¨è®¾å¤"> |
| | | <using-external-instruments v-if="menuListActiveName == 'å©ç¨å¤é¨ä»ªå¨è®¾å¤'" :clickNodeVal="clickNodeVal"></using-external-instruments> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | <div v-if="!isShowAll"> |
| | | <el-tabs v-model="tabListActiveName" class="main_right" type="border-card" @tab-click="handleClick"> |
| | | <!-- <el-tab-pane label="设å¤è¿è¡æ»è§" name="设å¤è¿è¡æ»è§">--> |
| | | <!-- <operationOverview v-if="tabListActiveName == '设å¤è¿è¡æ»è§'" :clickNodeVal="clickNodeVal"/>--> |
| | | <!-- </el-tab-pane>--> |
| | | <el-tab-pane label="è®¾å¤æ¡£æ¡" name="è®¾å¤æ¡£æ¡"> |
| | | <files v-if="tabListActiveName == 'è®¾å¤æ¡£æ¡'" :clickNodeVal="clickNodeVal"/> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="设å¤éªæ¶" name="设å¤éªæ¶"> |
| | | <!-- <checkAndAccept v-if="tabListActiveName == '设å¤éªæ¶'" :clickNodeVal="clickNodeVal"/>--> |
| | | <equipment-acceptance v-if="tabListActiveName == '设å¤éªæ¶'" :clickNodeVal="clickNodeVal"></equipment-acceptance> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="è®¾å¤æ ¡å" name="è®¾å¤æ ¡å"> |
| | | <calibration v-if="tabListActiveName == 'è®¾å¤æ ¡å'" :clickNodeVal="clickNodeVal"/> |
| | | </el-tab-pane> |
| | | <!-- <el-tab-pane label="è®¾å¤æ ¸æ¥" name="è®¾å¤æ ¸æ¥">--> |
| | | <!-- <check v-if="tabListActiveName == 'è®¾å¤æ ¸æ¥'" :clickNodeVal="clickNodeVal"/>--> |
| | | <!-- </el-tab-pane>--> |
| | | <el-tab-pane label="设å¤ç»´æ¤" name="设å¤ç»´æ¤"> |
| | | <maintenance v-if="tabListActiveName == '设å¤ç»´æ¤'" :clickNodeVal="clickNodeVal"/> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="设å¤åç¨" name="设å¤åç¨"> |
| | | <borrow v-if="tabListActiveName == '设å¤åç¨'" :clickNodeVal="clickNodeVal" /> |
| | | </el-tab-pane> |
| | | <!-- <el-tab-pane label="è®¾å¤æ
é" name="è®¾å¤æ
é">--> |
| | | <!-- <fault v-if="tabListActiveName == 'è®¾å¤æ
é'" :clickNodeVal="clickNodeVal" />--> |
| | | <!-- </el-tab-pane>--> |
| | | <el-tab-pane label="使ç¨è®°å½" name="使ç¨è®°å½"> |
| | | <record v-if="tabListActiveName == '使ç¨è®°å½'" :clickNodeVal="clickNodeVal"/> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="设å¤åç¨/å¯ç¨" name="设å¤åç¨/å¯ç¨"> |
| | | <state v-if="tabListActiveName == '设å¤åç¨/å¯ç¨'" :clickNodeVal="clickNodeVal"/> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="è®¾å¤æ¥åº" name="è®¾å¤æ¥åº"> |
| | | <equipment-scrap v-if="tabListActiveName == 'è®¾å¤æ¥åº'" :clickNodeVal="clickNodeVal"/> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="è®¾å¤æ
éä¸ç»´ä¿®" name="è®¾å¤æ
éä¸ç»´ä¿®"> |
| | | <equipment-failure v-if="tabListActiveName == 'è®¾å¤æ
éä¸ç»´ä¿®'" :clickNodeVal="clickNodeVal"/> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="设å¤ç¹æ£" name="设å¤ç¹æ£"> |
| | | <inspection-of-equipment v-if="tabListActiveName == '设å¤ç¹æ£'" :clickNodeVal="clickNodeVal"/> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="设å¤äºæ
" name="设å¤äºæ
"> |
| | | <equipment-accident v-if="tabListActiveName == '设å¤äºæ
'" :clickNodeVal="clickNodeVal"/> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="ä½ä¸æå¯¼ä¹¦" name="ä½ä¸æå¯¼ä¹¦"> |
| | | <operationInstruction v-if="tabListActiveName == 'ä½ä¸æå¯¼ä¹¦'" :clickNodeVal="clickNodeVal"/> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import operationOverview from '../do/a6-device/operation-overview.vue'; |
| | | import files from '../do/a6-device/files.vue'; |
| | | import checkAndAccept from '../do/a6-device/check-and-accept.vue'; |
| | | import calibration from '../do/a6-device/calibration.vue'; |
| | | import check from '../do/a6-device/check.vue'; |
| | | import maintenance from '../do/a6-device/maintenance.vue'; |
| | | import operationOverview from "../do/a6-device/operation-overview.vue"; |
| | | import files from "../do/a6-device/files.vue"; |
| | | import checkAndAccept from "../do/a6-device/check-and-accept.vue"; |
| | | import calibration from "../do/a6-device/calibration.vue"; |
| | | import check from "../do/a6-device/check.vue"; |
| | | import maintenance from "../do/a6-device/maintenance.vue"; |
| | | import borrow from "../do/a6-device/borrow.vue"; |
| | | import fault from "../do/a6-device/fault.vue"; |
| | | import record from '../do/a6-device/record.vue'; |
| | | import state from '../do/a6-device/state.vue'; |
| | | import record from "../do/a6-device/record.vue"; |
| | | import state from "../do/a6-device/state.vue"; |
| | | import management from "../do/a6-device/management.vue"; |
| | | import overview from "../do/a6-device/device-overview.vue"; |
| | | import resourceReservation from "../do/a6-device/resource-reservation.vue"; |
| | | import operationInstruction from "../do/a6-device/operation-instruction.vue"; |
| | | import EquipmentCalibrationPlan from "../equipment/equipment-calibration-plan.vue"; |
| | | import EquipmentVerificationPlan from "../equipment/equipment-verification-plan.vue"; |
| | | import UsingExternalInstruments from "../equipment/using-external-instruments.vue"; |
| | | import EquipmentScrap from "../equipment/equipment-scrap.vue"; |
| | | import EquipmentFailure from "../equipment/equipment-failure.vue"; |
| | | import InspectionOfEquipment from "../equipment/inspection-of-equipment.vue"; |
| | | import EquipmentAccident from "../equipment/equipment-accident.vue"; |
| | | import EquipmentMaintenancePlan from "../equipment/equipment-maintenance-plan.vue"; |
| | | import EquipmentAcceptance from "../equipment/equipment-acceptance.vue"; |
| | | import QuantityValueTraceabilityPlan from "../equipment/quantity-value-traceability-plan.vue"; |
| | | export default { |
| | | components:{ |
| | | components: { |
| | | QuantityValueTraceabilityPlan, |
| | | EquipmentAcceptance, |
| | | EquipmentMaintenancePlan, |
| | | EquipmentAccident, |
| | | InspectionOfEquipment, |
| | | EquipmentFailure, |
| | | EquipmentScrap, |
| | | UsingExternalInstruments, |
| | | EquipmentVerificationPlan, |
| | | EquipmentCalibrationPlan, |
| | | operationOverview, |
| | | files, |
| | | checkAndAccept, |
| | |
| | | fault, |
| | | record, |
| | | state, |
| | | management, |
| | | overview, |
| | | resourceReservation, |
| | | operationInstruction |
| | | }, |
| | | data(){ |
| | | data() { |
| | | return { |
| | | deviceName:'', |
| | | loading:false, |
| | | tabList:[ |
| | | { |
| | | id:'operationOverview', |
| | | title:'设å¤è¿è¡æ»è§', |
| | | }, |
| | | { |
| | | id:'files', |
| | | title:'è®¾å¤æ¡£æ¡', |
| | | }, |
| | | { |
| | | id:'checkAndAccept', |
| | | title:'设å¤éªæ¶', |
| | | }, |
| | | { |
| | | id:'calibration', |
| | | title:'è®¾å¤æ ¡å', |
| | | }, |
| | | { |
| | | id:'check', |
| | | title:'è®¾å¤æ ¸æ¥', |
| | | }, |
| | | { |
| | | id:'maintenance', |
| | | title:'设å¤ç»´æ¤', |
| | | }, |
| | | { |
| | | id:'borrow', |
| | | title:'设å¤åç¨', |
| | | }, |
| | | { |
| | | id:'fault', |
| | | title:'è®¾å¤æ
é', |
| | | }, |
| | | { |
| | | id:'record', |
| | | title:'使ç¨è®°å½', |
| | | }, |
| | | { |
| | | id:'state', |
| | | title:'设å¤åç¨/å¯ç¨', |
| | | }, |
| | | ], |
| | | currentPage:'operationOverview', |
| | | expandedKeys:[], |
| | | selectTree:'', |
| | | list:[] |
| | | } |
| | | isShowAll: true, |
| | | deviceName: "", // ä¾§è¾¹æ æç´¢ |
| | | loading: false, |
| | | tabListActiveName: 'è®¾å¤æ¡£æ¡', |
| | | menuListActiveName: 'è®¾å¤æ»è§', |
| | | list: [], |
| | | clickNodeVal: {} |
| | | }; |
| | | }, |
| | | mounted(){ |
| | | this.geList() |
| | | mounted() { |
| | | // åå§åè°ç¨ |
| | | this.geList(); |
| | | }, |
| | | methods:{ |
| | | geList(){ |
| | | methods: { |
| | | handleClick(tab, event) { |
| | | }, |
| | | searchFilter() { |
| | | this.$refs.tree.filter(this.deviceName) |
| | | }, |
| | | filterNode(value, data) { |
| | | if (!value) return true; |
| | | return data.label.indexOf(value) !== -1; |
| | | }, |
| | | // ç¶çº§ |
| | | geList() { |
| | | this.loading = true; |
| | | this.$axios.get(this.$api.deviceScope.treeDevice+'?deviceName='+this.deviceName).then(res => { |
| | | this.loading = false; |
| | | let data = res.data |
| | | data.forEach((item,index) => { |
| | | item.id = index +1 |
| | | item.label = item.largeCategory |
| | | item.children.forEach((m,i)=>{ |
| | | m.label = m.deviceName |
| | | }) |
| | | }) |
| | | this.list = data |
| | | }) |
| | | this.$axios.get( |
| | | this.$api.deviceScope.treeDevice |
| | | ).then(res => { |
| | | let data = res.data; |
| | | this.list = data; |
| | | this.loading = false |
| | | }); |
| | | }, |
| | | handleNodeClick(val, node, el) { //æ çå¼ |
| | | this.selectTree = '' |
| | | this.getNodeParent(node) |
| | | this.selectTree = this.selectTree.replace(' - ', '') |
| | | let data = this.selectTree.split(' - ') |
| | | let data2 = '' |
| | | for (let index = data.length - 1; index >= 0; index--) { |
| | | data2 += " - " + data[index] |
| | | } |
| | | this.selectTree = data2.replace(' - ', '') |
| | | |
| | | this.currentPage = 'operationOverview'; |
| | | }, |
| | | getNodeParent(val) { |
| | | if (val.parent != null) { |
| | | if(val.data.children === null){ |
| | | this.selectTree += ' - ' + val.label + ' - ' + 'null' |
| | | }else{ |
| | | this.selectTree += ' - ' + val.label |
| | | } |
| | | this.getNodeParent(val.parent) |
| | | handleNodeClick(val, node, el) { |
| | | // ç¹å»ä¸´æ¶ç¼å |
| | | this.clickNodeVal = val; |
| | | // åå¨ç¶çº§èç¹çº§æ° |
| | | this.clickNodeVal.level = node.level |
| | | this.clickNodeVal.parent = node.parent.data |
| | | // æ¯å¦æ¾ç¤ºè®¾å¤è¯¦æ
|
| | | if (!val.value) { |
| | | this.isShowAll = true |
| | | } else { |
| | | this.isShowAll = false |
| | | } |
| | | }, |
| | | nodeOpen(data, node, el) { |
| | | $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened') |
| | | $($(el.$el).find(".node_i")[0]).attr( |
| | | "class", |
| | | "node_i el-icon-folder-opened" |
| | | ); |
| | | }, |
| | | nodeClose(data, node, el) { |
| | | $($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder') |
| | | $($(el.$el).find(".node_i")[0]).attr("class", "node_i el-icon-folder"); |
| | | }, |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .device-page{ |
| | | .device-page { |
| | | display: flex; |
| | | padding-top: 10px; |
| | | padding-bottom: 10px; |
| | | box-sizing: border-box; |
| | | width: 100%; |
| | | } |
| | | .device-left{ |
| | | width: 200px; |
| | | |
| | | .device-left { |
| | | width: 250px; |
| | | height: 100%; |
| | | background: #fff; |
| | | margin-right: 10px; |
| | | border-radius: 16px; |
| | | box-sizing: border-box; |
| | | padding: 10px 16px; |
| | | flex-shrink: 0; |
| | | } |
| | | .device-right{ |
| | | |
| | | .device-right { |
| | | background: #fff; |
| | | flex: 1; |
| | | width: calc(100% - 260px); |
| | | height: 100%; |
| | | border-radius: 16px; |
| | | box-sizing: border-box; |
| | | padding: 10px 16px; |
| | | } |
| | | .device-right-content{ |
| | | margin-top: 10px; |
| | | |
| | | .showLargeCategory { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | |
| | | .device-right-content { |
| | | /* margin-top: 10px; */ |
| | | height: calc(100% - 42px); |
| | | width: 100%; |
| | | } |
| | |
| | | color: orange; |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .main_right { |
| | | height: calc(100% - 5px); |
| | | overflow: hidden; |
| | | } |
| | | >>>.el-tabs__content { |
| | | padding-top: 0; |
| | | } |
| | | </style> |
| | |
| | | //æ¬å° |
| | | // Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80"; |
| | | // const javaApi = 'http://127.0.0.1:8001'; |
| | | // const javaApi = 'http://172.20.10.5:8001'; |
| | | // const javaApi = 'http://10.37.202.58:8001'; |
| | | |
| | | //éä¿¡æµè¯åº |
| | | // Vue.prototype.LOCATIONVUE = "http://10.1.13.77:8080"; |
| | |
| | | // éä¿¡æ£å¼åº |
| | | // Vue.prototype.LOCATIONVUE = "http://192.168.22.29:8080"; |
| | | // const javaApi = 'http://192.168.22.29:8001/lims/'; |
| | | const javaApi = 'https://ztwxlims.ztt.cn:7443/lims/'; |
| | | // const javaApi = 'https://ztwxlims.ztt.cn:7443/lims/'; |
| | | |
| | | // //äº |
| | | // Vue.prototype.LOCATIONVUE = "http://114.132.189.42:8080"; |
| | | // const javaApi = 'http://114.132.189.42:1234'; |
| | | Vue.prototype.LOCATIONVUE = "http://114.132.189.42:8080"; |
| | | const javaApi = 'http://114.132.189.42:1234'; |
| | | |
| | | // //æ£æµä¸å¿æ£å¼åº |
| | | // Vue.prototype.LOCATIONVUE = "http://10.1.200.86:8080"; |
¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * 夿å½åè§è²æ¯å¦æè¯¥æé |
| | | * @param {*} methodName |
| | | * @returns |
| | | */ |
| | | export function isPermission(methodName){ |
| | | if(undefined != methodName && '' != methodName && null!=methodName){ |
| | | //å½åè§è²ææéä¸çæé |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (methodName && power[i].menuMethod == methodName) { |
| | | return true |
| | | } |
| | | } |
| | | } |
| | | return false |
| | | } |
| | |
| | | // ] |
| | | // }, |
| | | { |
| | | v: "5 ç»æè¦æ±", |
| | | v: "ç»æè¦æ±", |
| | | i: "font icon-jiegouyaoqiu", |
| | | p: "", |
| | | c: [ |
| | |
| | | v: "å®éªå®¤èµè´¨", |
| | | i: "font icon-erjidaohang", |
| | | u: "a5-laboratory-qualifications", |
| | | g: "Cè½åèå´åèµè´¨", |
| | | g: "è½åèå´åèµè´¨", |
| | | p: "getCertificationDetail" |
| | | }, { |
| | | v: "è½åèå´", |
| | | i: "font icon-erjidaohang", |
| | | u: "a5-capacity-scope", |
| | | g: "Cè½åèå´åèµè´¨", |
| | | g: "è½åèå´åèµè´¨", |
| | | p: "selectItemParameterList selectTestObjectList" |
| | | }, { |
| | | v: "åºææè®¾æ½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a5-laboratory-management", |
| | | g: "Dåºææè®¾æ½", |
| | | g: "åºææè®¾æ½", |
| | | p: "selectItemParameter" |
| | | } |
| | | // , { |
| | |
| | | // } |
| | | ] |
| | | }, { |
| | | v: "6 èµæºè¦æ±", |
| | | v: "èµæºè¦æ±", |
| | | i: "font icon-ziyuanyaoqiu", |
| | | p: "", |
| | | c: [ |
| | |
| | | v: "äººåæ»è§", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-personnel-overview", |
| | | g: "6.2 人å", |
| | | g: "人å", |
| | | p: "selectPersonnelOverview" |
| | | }, |
| | | { |
| | | v: "人å", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-personnel", |
| | | g: "6.2 人å", |
| | | g: "人å", |
| | | p: "" |
| | | }, |
| | | { |
| | | v: "设æ½åç¯å¢æ¡ä»¶", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-facilities-environment", |
| | | g: "6.3 设æ½åç¯å¢æ¡ä»¶", |
| | | g: "设æ½åç¯å¢æ¡ä»¶", |
| | | p: "" |
| | | }, |
| | | { |
| | |
| | | i: "font icon-erjidaohang", |
| | | // u: "a6-device", |
| | | u:"a6-device-management", |
| | | g: "6.4 设å¤", |
| | | g: "设å¤", |
| | | p: "" |
| | | }, |
| | | { |
| | | v: "é弿º¯æºè®¡å", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-quantity-value-traceability-plan", |
| | | g: "6.5 è®¡éæº¯æºæ§", |
| | | g: "è®¡éæº¯æºæ§", |
| | | p: "" |
| | | }, { |
| | | v: "æ åç©è´¨æ¸
å", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-standard-material-list", |
| | | g: "6.5 è®¡éæº¯æºæ§", |
| | | g: "è®¡éæº¯æºæ§", |
| | | p: "" |
| | | }, { |
| | | v: "æ åç©è´¨éªæ¶", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-standard-material-accep", |
| | | g: "6.5 è®¡éæº¯æºæ§", |
| | | g: "è®¡éæº¯æºæ§", |
| | | p: "" |
| | | }, { |
| | | v: "æ åç©è´¨é¢ç¨", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-standard-material-requisition", |
| | | g: "6.5 è®¡éæº¯æºæ§", |
| | | g: "è®¡éæº¯æºæ§", |
| | | p: "" |
| | | }, |
| | | // { |
| | |
| | | v: "æå¡åä¾åºåéè´", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6.service-and-supply-purchase", |
| | | g: "6.6 å¤é¨æä¾ç产ååæå¡", |
| | | g: "å¤é¨æä¾ç产ååæå¡", |
| | | p: "" |
| | | },{ |
| | | v: "ä¾åºå管ç", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-supplier-manage", |
| | | g: "6.6 å¤é¨æä¾ç产ååæå¡", |
| | | g: "å¤é¨æä¾ç产ååæå¡", |
| | | p: "" |
| | | }, |
| | | // { |
| | |
| | | ] |
| | | }, |
| | | { |
| | | v: "7 è¿ç¨è¦æ±", |
| | | v: "è¿ç¨è¦æ±", |
| | | i: "font icon-guochengyaoqiu", |
| | | p: "", |
| | | c: [ |
| | |
| | | v: "æ£éªå§æå", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-contract-review", |
| | | g: "7.1 è¦æ±ãæ 书åååè¯å®¡", |
| | | g: "è¦æ±ãæ 书åååè¯å®¡", |
| | | p: "pageProcessOrder" |
| | | }, |
| | | // { |
| | |
| | | v: "å®éªå®¤çæ£æµè½åæ¡£æ¡", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-standard-method", |
| | | g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | g: "æ¹æ³çéæ©ãéªè¯å确认", |
| | | p: "selectStandardMethodList" |
| | | }, { |
| | | v: "æ 忥æ°", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-standard-novelty-retrieval", |
| | | g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | g: "æ¹æ³çéæ©ãéªè¯å确认", |
| | | p: "" |
| | | }, { |
| | | v: "æ åæ¹æ³çåæ´", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-changes-standard-methods", |
| | | g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | g: "æ¹æ³çéæ©ãéªè¯å确认", |
| | | p: "" |
| | | }, { |
| | | v: "æ¹æ³éªè¯", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-method-verification", |
| | | g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | g: "æ¹æ³çéæ©ãéªè¯å确认", |
| | | p: "" |
| | | }, |
| | | // { |
| | |
| | | v: "æ ·åæ¥æ¶", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-sample-registration", |
| | | g: "7.4 æ£æµææ ¡åç©åçå¤ç½®", |
| | | g: "æ£æµææ ¡åç©åçå¤ç½®", |
| | | p: "pageProcessTotaldeal" |
| | | },{ |
| | | v: "æ£æµææ ¡åç©åçå¤ç½®", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-sample-disposal", |
| | | g: "7.4 æ£æµææ ¡åç©åçå¤ç½®", |
| | | g: "æ£æµææ ¡åç©åçå¤ç½®", |
| | | p: "pageProcessTotaldeal" |
| | | }, |
| | | // { |
| | |
| | | v: "æµéä¸ç¡®å®åº¦çè¯å®", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-uncertainty-evaluation", |
| | | g: "7.6 æµéä¸ç¡®å®åº¦çè¯å®", |
| | | g: "æµéä¸ç¡®å®åº¦çè¯å®", |
| | | p: "pageProcessEvaluate" |
| | | }, { |
| | | v: "è´¨éçæ§è®¡å", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-Ensure-results-validity", |
| | | g: "7.7 ç¡®ä¿ç»ææææ§", |
| | | g: "ç¡®ä¿ç»ææææ§", |
| | | p: "" |
| | | }, { |
| | | v: "è´¨éçç£è®¡å", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-quality-control-plan", |
| | | g: "7.7 ç¡®ä¿ç»ææææ§", |
| | | g: "ç¡®ä¿ç»ææææ§", |
| | | p: "" |
| | | }, { |
| | | v: "æ¥åç»æ", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-report-results", |
| | | g: "7.8 æ¥åç»æ", |
| | | g: "æ¥åç»æ", |
| | | p: "pageProcessReport" |
| | | },{ |
| | | v: "æè¯æ
嵿±æ»è¡¨", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-complaint", |
| | | g: "7.9 æè¯", |
| | | g: "æè¯", |
| | | p: "pageProcessComplain" |
| | | }, { |
| | | v: "ä¸ç¬¦å项", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-nonconforming-item", |
| | | g: "7.10 ä¸ç¬¦åå·¥ä½", |
| | | g: "ä¸ç¬¦åå·¥ä½", |
| | | p: "" |
| | | }, { |
| | | v: "ä¸ç¬¦å项çåå¸", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-distribution-of-nonconforming", |
| | | g: "7.10 ä¸ç¬¦åå·¥ä½", |
| | | g: "ä¸ç¬¦åå·¥ä½", |
| | | p: "" |
| | | }, |
| | | // { |
| | |
| | | ] |
| | | }, |
| | | { |
| | | v: "8 ä½ç³»ç®¡çè¦æ±", |
| | | v: "ä½ç³»ç®¡çè¦æ±", |
| | | i: "font icon-guanlitixiyaoqiu", |
| | | p: "", |
| | | c: [ |
| | |
| | | v: "管çä½ç³»æä»¶çæ§å¶", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-file-handling", |
| | | g: "8.3 管çä½ç³»æä»¶çæ§å¶", |
| | | g: "管çä½ç³»æä»¶çæ§å¶", |
| | | p: "doManageDocumentList pageManageDocumentControlled" |
| | | },{ |
| | | v: "æä»¶å®¡æ¹è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-document-approval-records", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | g: "è®°å½çæ§å¶", |
| | | p: "pageManageRecordCheck" |
| | | },{ |
| | | v: "夿¥æä»¶ç¡®è®¤è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-external-document-confirmation-records", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | g: "è®°å½çæ§å¶", |
| | | p: "pageManageRecordTotal" |
| | | },{ |
| | | v: "æææä»¶ï¼å
ãå¤é¨æä»¶ï¼çåæ¾ä¸åæ¶è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-distribution-retrieval-records-all-documents", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | g: "è®°å½çæ§å¶", |
| | | p: "pageManageRecordIssueRecycle" |
| | | },{ |
| | | v: "æä»¶ä¿®è®¢ç³è¯·å®¡æ¹è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-document-revision-request-approval-records", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | g: "è®°å½çæ§å¶", |
| | | p: "pageManageRecordAudit" |
| | | },{ |
| | | v: "æä»¶å®æå®¡æ¥è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-periodic-document-review-records", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | g: "è®°å½çæ§å¶", |
| | | p: "pageManageRecordIntervals" |
| | | },{ |
| | | v: "ä½åºæä»¶éæ¯è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-obsolete-document-destruction-records", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | g: "è®°å½çæ§å¶", |
| | | p: "pageManageRecordCancel" |
| | | }, { |
| | | v: "åºå¯¹é£é©åæºéçæªæ½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-measures_deal_risks_opportunities", |
| | | g: "8.5 åºå¯¹é£é©åæºéçæªæ½", |
| | | g: "åºå¯¹é£é©åæºéçæªæ½", |
| | | p: "" |
| | | }, |
| | | // { |
| | |
| | | v: "å®¢æ·æ»¡æåº¦", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-customer-satisfaction", |
| | | g: "8.6 æ¹è¿", |
| | | g: "æ¹è¿", |
| | | p: "" |
| | | }, { |
| | | v: "çº æ£æªæ½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-corrective-action", |
| | | g: "8.7 çº æ£æªæ½", |
| | | g: "çº æ£æªæ½", |
| | | p: "" |
| | | }, { |
| | | v: "å
审管ç", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-internal-audit-management", |
| | | g: "8.8 å
审管ç", |
| | | g: "å
审管ç", |
| | | p: "" |
| | | }, { |
| | | v: "管çè¯å®¡", |
| | | i: "font icon-erjidaohang", |
| | | u: "a9-management-review", |
| | | g: "8.9 管çè¯å®¡", |
| | | g: "管çè¯å®¡", |
| | | p: "" |
| | | }] |
| | | } |