From c6e96cdb8b1cfb51e9a45bf86c38d1353e983127 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期一, 19 十月 2026 15:19:48 +0800
Subject: [PATCH] 设备模块业务完善及前序页面优化
---
src/views/CNAS/resourceDemand/device/component/calibration.vue | 369 ++++------------------------------------------------
1 files changed, 31 insertions(+), 338 deletions(-)
diff --git a/src/views/CNAS/resourceDemand/device/component/calibration.vue b/src/views/CNAS/resourceDemand/device/component/calibration.vue
index cf49a8d..36a3061 100644
--- a/src/views/CNAS/resourceDemand/device/component/calibration.vue
+++ b/src/views/CNAS/resourceDemand/device/component/calibration.vue
@@ -3,8 +3,7 @@
<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> -->
+ <el-button size="small" type="primary" @click="add()">娣诲姞鏍″噯璁板綍</el-button>
</div>
<div class="tables" style="margin-top: 10px;">
<el-table :data="tableData" height="calc(100vh - 20em)" border>
@@ -22,11 +21,15 @@
</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="calibrationDate"
+ :formatter="formatDateCell"></el-table-column>
+ <el-table-column label="涓嬫鏍″噯鏃ユ湡" min-width="150" prop="nextCalibrationDate"
+ :formatter="formatDateCell"></el-table-column>
+ <el-table-column label="纭鏃ユ湡" min-width="150" prop="confirmDate"
+ :formatter="formatDateCell"></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 label="鐧昏鏃ユ湡" min-width="150" prop="createTime"
+ :formatter="formatDateCell"></el-table-column>
<el-table-column fixed="right" label="鎿嶄綔" min-width="180" align="center">
<template #default="{ row }">
<el-button size="small" link type="primary" @click="handleAttachmentClick(row)">涓嬭浇闄勪欢</el-button>
@@ -35,7 +38,7 @@
</template>
</el-table-column>
</el-table>
- <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]"
+ <el-pagination :current-page="search.current" :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" background>
</el-pagination>
@@ -86,7 +89,7 @@
<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 label="鍒涘缓鏃堕棿" prop="creationTime" :formatter="formatDateCell"></el-table-column>
<el-table-column fixed="right" label="鎿嶄綔">
<template #default="scope">
<el-button size="small" link type="primary" @click="handleDelete(scope.row)">鍒犻櫎</el-button>
@@ -95,176 +98,25 @@
</el-table>
</el-dialog>
- <!-- 娣诲姞鏍″噯璁板綍 -->
- <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" v-model="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 value="0yes">鍚堟牸</el-radio>
- <el-radio value="1no">涓嶅悎鏍�</el-radio>
- <el-radio value="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">
- <template #append><el-button v-if="operationType === 'add'" :icon="$icon('el-icon-delete-solid')"
- @click="deleteFile"></el-button></template>
- </el-input>
- <el-upload v-if="operationType === 'add'" ref="upload" :action="action" :before-upload="beforeUpload"
- :headers="uploadHeader" :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 #header="scope">
- <span class="required-span">* </span>鏄惁鏍″噯
- </template>
- <template #default="scope">
- <el-radio-group v-model="scope.row.isCalibration" :disabled="operationType === 'view'">
- <el-radio value="0yes">鏄�</el-radio>
- <el-radio value="1no">鍚�</el-radio>
- </el-radio-group>
- </template>
- </el-table-column>
- <el-table-column label="鍒ゅ畾缁撴灉" min-width="140" prop="result">
- <template #header="scope">
- <span class="required-span">* </span>鍒ゅ畾缁撴灉
- </template>
- <template #default="scope">
- <el-radio-group v-model="scope.row.result" :disabled="operationType === 'view'" @change="checkRadio()">
- <el-radio value="0yes">鍚堟牸</el-radio>
- <el-radio value="1no">涓嶅悎鏍�</el-radio>
- <el-radio value="2other">鍏朵粬</el-radio>
- </el-radio-group>
- </template>
- </el-table-column>
- <el-table-column label="鍗曢」缁撴灉璇存槑" prop="singleResultStatement">
- <template #default="scope">
- <el-input v-model="scope.row.singleResultStatement" :disabled="operationType === 'view'"
- size="small"></el-input>
- </template>
- </el-table-column>
- </el-table>
- </div>
- <template #footer><span class="dialog-footer">
- <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></template>
- </el-dialog>
+ <!-- 娣诲姞/鏌ョ湅鏍″噯璁板綍寮圭獥 -->
+ <calibration-record-dia ref="calibrationRecordDia"
+ @success="getTableList(clickNodeVal.value)"></calibration-record-dia>
</div>
</template>
<script>
import {
deviceMetricRecordPage,
- showDeviceMetricsCopy,
deleteDeviceMetricRecord,
- deviceMetricRecordExport,
- deleteCNASFile,
selectDeviceMetric,
deleteDeviceMetrics,
- addOrUpdateDeviceMetricRecord,
saveOrUpdateDeviceMetric
} from '@/api/cnas/resourceDemand/device.js'
+import CalibrationRecordDia from './calibrationRecordDia.vue'
+import { formatListDate } from './dateFormat'
import { mapGetters } from "@/utils/store-compat";
export default {
+ components: { CalibrationRecordDia },
props: {
clickNodeVal: {
type: Object,
@@ -279,33 +131,8 @@
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: '',
@@ -329,9 +156,6 @@
{ required: true, message: '璇疯緭鍏ュ垽瀹氭爣鍑�', trigger: 'blur' }
],
},
- addRecordLoading: false,
- upLoading: false,
- operationType: '',
search: {
size: 20,
current: 1,
@@ -342,32 +166,14 @@
// 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
computed: {
...mapGetters(["nickName"]),
- action() {
- return this.javaApi + '/personBasicInfo/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'
- }
- },
- 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
+ formatDateCell(row, column, cellValue) {
+ return formatListDate(cellValue)
},
handleSizeChange(val) {
this.search.size = val
@@ -383,20 +189,13 @@
this.search.total = res.data.total
})
},
- // 娣诲姞鏍告煡璁板綍
- add(type) {
- this.operationType = type
- this.dialogVisible1 = true
- this.getXmsg()
+ // 娣诲姞鏍″噯璁板綍
+ add() {
+ this.$refs.calibrationRecordDia.open(this.clickNodeVal.value, 'add')
},
// 鏌ョ湅璇︽儏
handleViewClick(type, row) {
- showDeviceMetricsCopy({ id: row.id, type: 'calibrate' }).then(res => {
- this.calibrateParams = res.data
- })
- this.calibrationRecord = { ...row }
- this.operationType = type
- this.dialogVisible1 = true
+ this.$refs.calibrationRecordDia.open(this.clickNodeVal.value, type, row)
},
// 琛ㄦ牸鍒犻櫎鎿嶄綔
handleDeleteClick(row) {
@@ -417,40 +216,14 @@
})
},
handleAttachmentClick(row) {
- this.$download.saveAs(row.systemFileName, row.systemFileName)
- },
- //瀵煎嚭
- handleDown() {
- this.outLoading = true
- deviceMetricRecordExport({
- deviceId: this.clickNodeVal.value,
- type: 'calibrate'
- }).then(res => {
- this.outLoading = false
- const blob = new Blob([res], { type: 'application/octet-stream' });
- this.$download.saveAs(blob, '璁惧鏍″噯.xlsx')
- })
- },
- deleteFile() {
- this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎鏂囦欢, 鏄惁缁х画?', '鎻愮ず', {
- confirmButtonText: '纭畾',
- cancelButtonText: '鍙栨秷',
- type: 'warning'
- }).then(() => {
- 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: '宸插彇娑堝垹闄�'
- });
- });
+ if (!row.systemFileName) {
+ this.$message.warning('鏈笂浼犳枃浠讹紒')
+ return
+ }
+ // 鍥剧墖瀛� /img/锛屽叾浠栨枃妗e瓨 /word/
+ const isImage = /\.(jpg|jpeg|png|gif|bmp|webp)$/i.test(row.systemFileName)
+ const url = this.javaApi + (isImage ? '/img/' : '/word/') + row.systemFileName
+ this.$download.saveAs(url, row.fileName || row.systemFileName)
},
// 鏍″噯椤圭洰缁存姢
calibrationMaintenance() {
@@ -513,69 +286,6 @@
}
})
},
- 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;
- this.calibrationRecord.createUser = this.nickName
- this.calibrationRecord.type = 'calibrate'
- this.calibrationRecord.deviceMetricsCopyList = this.calibrateParams
- addOrUpdateDeviceMetricRecord(this.calibrationRecord).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: {
@@ -583,23 +293,6 @@
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: '', // 澶囨敞
- }
}
}
}
--
Gitblit v1.9.3