From 951b0558a6c3990e1c0ca792aed332914228508d Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期二, 13 十月 2026 17:45:08 +0800
Subject: [PATCH] 设备模块调整:档案修订新增保养、核查日期与周期并自动计算下次日期,列表新增核查、保养相关列且到期前一个月标红;设备校准的服务机构改为合格供应商下拉,使用授权的被授权人改为检测员下拉;设备树改为全部/设备/计量器具分类;保养计划明细新增计划保养时间;移除量值溯源计划页签
---
src/views/CNAS/resourceDemand/device/component/files.vue | 112 +++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 78 insertions(+), 34 deletions(-)
diff --git a/src/views/CNAS/resourceDemand/device/component/files.vue b/src/views/CNAS/resourceDemand/device/component/files.vue
index acaad4e..e2ce9f1 100644
--- a/src/views/CNAS/resourceDemand/device/component/files.vue
+++ b/src/views/CNAS/resourceDemand/device/component/files.vue
@@ -40,10 +40,6 @@
<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">
@@ -222,7 +218,9 @@
<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" size="small"></el-input>
+ <el-select v-model="editData.calibrationServices" clearable filterable size="small" style="width: 100%">
+ <el-option v-for="name in calibrationServiceOptions" :key="name" :label="name" :value="name"></el-option>
+ </el-select>
</el-form-item>
<el-form-item label="璧勪骇缂栫爜:">
<el-input v-model="editData.assetCode" size="small"></el-input>
@@ -263,14 +261,6 @@
<!-- 鍙宠竟甯冨眬 -->
<el-col :span="7">
<el-form :model="editData" label-width="140px" ref="ruleForm" :rules="rules1">
- <!-- 瀹為獙瀹ゅ垪琛� -->
- <el-form-item label="鎵�灞為儴闂�:" prop="subordinateDepartmentsId">
- <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="editData.insProductIds" :options="options" :show-all-levels="false" :props="props"
placeholder="璇烽�夋嫨" size="small" style="width:100%;" :collapse-tags="true" separator="," filterable
@@ -304,9 +294,35 @@
<el-form-item label="鏍″噯鍛ㄦ湡锛堟湀锛�:" prop="calibrationDate">
<el-input v-model="editData.calibrationDate" size="small"></el-input>
</el-form-item>
+ <el-form-item label="鏈�杩戜繚鍏绘棩鏈�:">
+ <el-date-picker style="width:100%" v-model="editData.lastMaintenanceDate" @change="calcNextDate(editData)"
+ 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-date-picker :disabled="true" style="width:100%" v-model="editData.nextMaintenanceDate"
+ 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-input v-model="editData.maintenanceCycle" size="small" @change="calcNextDate(editData)"></el-input>
+ </el-form-item>
+ <el-form-item label="鏈�杩戞牳鏌ユ棩鏈�:">
+ <el-date-picker style="width:100%" v-model="editData.lastExamineDate" @change="calcNextDate(editData)"
+ 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-date-picker :disabled="true" style="width:100%" v-model="editData.nextExamineDate"
+ 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-input v-model="editData.examineCycle" size="small" @change="calcNextDate(editData)"></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 v-for="item in inspectorList" :key="item.name" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
@@ -446,6 +462,7 @@
<script>
import { ElMessageBox } from 'element-plus'
+import dayjs from 'dayjs'
import fileDownload from '@/utils/file'
// vue-qr 鍙敮鎸� Vue2锛屾崲鎴愬悓 props 鐨勬湰鍦扮粍浠讹紙鍐呴儴鐢� Vue3 鐨� qrcode.vue锛�
import vueQr from '@/components/QrCode'
@@ -463,9 +480,7 @@
getInsProduction,
} from '@/api/cnas/resourceDemand/device.js'
import { selectUserCondition } from "@/api/business/inspectionTask";
-import {
- obtainItemParameterList,
-} from '@/api/cnas/resourceDemand/device.js'
+import { selectQualifiedSupplierManagementPage } from '@/api/cnas/externalService/supplierManage/supplierManage'
export default {
props: {
clickNodeVal: {
@@ -499,9 +514,6 @@
],
calibrationDate: [
{ required: true, message: '璇疯緭鍏ユ牎鍑嗗懆鏈�(鏈�)', trigger: 'blur' },
- ],
- subordinateDepartmentsId: [
- { required: true, message: '璇烽�夋嫨鎵�灞為儴闂�', trigger: 'change' },
]
},
// dateForm: {
@@ -540,7 +552,7 @@
dialogVisible: false,
upLoad: false,
responsiblePersonList: [],
- subordinateDepartmentsList: [],
+ inspectorList: [],
options: [],
equipmentList: [],
deviceStatusList: [],
@@ -553,9 +565,17 @@
editData: {
authorizedPerson: [],
},
+ qualifiedSupplierNames: [],
}
},
computed: {
+ // 鏍″噯鏈嶅姟鏈烘瀯涓嬫媺閫夐」锛堝悎鏍间緵搴斿晢 + 褰撳墠鍊煎厹搴曪級
+ calibrationServiceOptions() {
+ const list = this.qualifiedSupplierNames.slice();
+ const value = this.editData.calibrationServices;
+ if (value && list.indexOf(value) === -1) list.push(value);
+ return list;
+ },
action() {
return this.javaApi + '/deviceScope/uploadFile'
}
@@ -566,8 +586,18 @@
// 鑾峰彇鐩稿叧鏂囨。鐨勬暟鎹�
this.getPage()
this.timeStamp = Date.now()
+ this.obtainQualifiedSupplierList()
},
methods: {
+ // 鎷夊彇鍚堟牸渚涘簲鍟嗗垪琛紙鏍″噯鏈嶅姟鏈烘瀯涓嬫媺閫夐」锛�
+ obtainQualifiedSupplierList() {
+ selectQualifiedSupplierManagementPage({ current: 1, size: 999 }).then(res => {
+ if (res.code === 200) {
+ const rows = (res.data && res.data.records) || [];
+ this.qualifiedSupplierNames = [...new Set(rows.map(r => r.supplierName).filter(Boolean))];
+ }
+ });
+ },
// 鍘熷厛鐨� Vue2 filter锛孷ue3 宸茬Щ闄� filters 閫夐」锛屾敼涓烘柟娉曡皟鐢�
formaterDateTime(dateTime) {
if (dateTime === undefined || dateTime === null || dateTime === '') {
@@ -602,8 +632,6 @@
openFileRevisionDialog() {
// 鑾峰彇妗f淇璐熻矗浜轰笅鎷夋鏁版嵁
this.selectDevicePrincipal()
- // 鑾峰彇妗f淇鎵�灞為儴闂ㄤ笅鎷夋鏁版嵁
- this.obtainItemParameterList()
// 鑾峰彇妗f淇璁惧鐘舵�佷笅鎷夋鏁版嵁
this.selectEnumByCategory()
// 鑾峰彇妗f淇妫�楠岄」鐩骇鑱斿脊妗嗘暟鎹�
@@ -736,6 +764,30 @@
this.dialogVisible = true
})
},
+ // 涓嬫鏃ユ湡 = 鏈�杩戞棩鏈� + 鍛ㄦ湡锛堟湀锛夛紝鑷姩璁$畻
+ calcNextDate(data) {
+ const calc = (lastDate, cycle) => {
+ const period = parseInt(cycle)
+ if (!lastDate || !period || period <= 0) {
+ return null
+ }
+ return dayjs(String(lastDate).replace(' ', 'T'))
+ .add(period, 'month')
+ .format('YYYY-MM-DD HH:mm:ss')
+ }
+ const nextCalibrationDate = calc(data.lastCalibrationDate, data.calibrationDate)
+ if (nextCalibrationDate) {
+ data.nextCalibrationDate = nextCalibrationDate
+ }
+ const nextMaintenanceDate = calc(data.lastMaintenanceDate, data.maintenanceCycle)
+ if (nextMaintenanceDate) {
+ data.nextMaintenanceDate = nextMaintenanceDate
+ }
+ const nextExamineDate = calc(data.lastExamineDate, data.examineCycle)
+ if (nextExamineDate) {
+ data.nextExamineDate = nextExamineDate
+ }
+ },
//淇妗f
submitForm() {
let flag = true
@@ -822,17 +874,9 @@
selectUserCondition().then(res => {
this.responsiblePersonList = res.data;
})
- },
- obtainItemParameterList() {
- obtainItemParameterList().then(res => {
- let data = []
- res.data.forEach(a => {
- data.push({
- label: a.laboratoryName,
- value: a.id
- })
- })
- this.subordinateDepartmentsList = data
+ // 琚巿鏉冧汉涓嬫媺鍙彇妫�娴嬪憳瑙掕壊浜哄憳
+ selectUserCondition({ type: 3 }).then(res => {
+ this.inspectorList = res.data;
})
},
getInsProductIds() {
--
Gitblit v1.9.3