From d4d34a9b730ac328068f936598d4138ac2635e57 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期四, 15 十月 2026 11:21:08 +0800
Subject: [PATCH] 质量监督计划:新增计划下发(列表下发状态列与下发按钮,仅已批准未下发的可下发),导出弹窗改卡片式并拦截导出错误响应避免下载损坏文件,日常监督检查记录单按纸质表重做(受监督人多选、监督员下拉、监督内容多选、监督记录、存在问题、整改意见),各表单人员列表改为全实验室不按部门筛选;方法验证:表单新增数据处理、质量控制方法、方法结果验证、验证结论及评审、审批意见字段并新增详情入口,迁移原标准方法变更的设备、检测记录、校准文件、工作证等查看组件,标准方法变更模块下线;设备档案、设备管理编辑弹窗改版为图片与基本信息左右布局、表单行式排列
---
src/views/CNAS/resourceDemand/device/component/management.vue | 679 +++++++++++++++++++++++++++++++++-----------------------
1 files changed, 398 insertions(+), 281 deletions(-)
diff --git a/src/views/CNAS/resourceDemand/device/component/management.vue b/src/views/CNAS/resourceDemand/device/component/management.vue
index eb3cbd2..b658874 100644
--- a/src/views/CNAS/resourceDemand/device/component/management.vue
+++ b/src/views/CNAS/resourceDemand/device/component/management.vue
@@ -37,173 +37,201 @@
</div>
<el-dialog :title="isUp ? '璁惧璇︽儏' : '妗f淇'" v-model="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">
- <template #error><div class="image-error" style="width: calc(100% -2px);
+ <div style="max-height: 75vh;overflow-y: auto;">
+ <!-- 椤堕儴锛氬浘鐗� + 鍩烘湰淇℃伅 -->
+ <el-row>
+ <el-col :span="7" style="padding-right: 20px;">
+ <!-- 鍥剧墖 -->
+ <el-image class="img" style="width:100%;height: 320px"
+ :src="javaApi + '/img/' + formData.imageUpload">
+ <template #error><div class="image-error" style="width: calc(100% -2px);
height: 318px;
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid var(--lims-divider);">
- <lims-icon name="el-icon-picture-outline" style="font-size:60px;color:var(--lims-text-2);"></lims-icon>
- </div></template>
- </el-image>
- <!-- 琛ㄥ崟 -->
- <el-form :label-position="labelPosition" :model="formData" label-width="120px">
+ <lims-icon name="el-icon-picture-outline" style="font-size:60px;color:var(--lims-text-2);"></lims-icon>
+ </div></template>
+ </el-image>
+ <!-- 鍥剧墖涓婁紶 -->
+ <div style="border: 1px solid var(--el-border-color);border-radius:4px;height:32px;lineHeight:32px;display:flex;justify-content: space-around;font-size: 13px;margin-top:12px;">
+ <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="uploadHeader" :on-change="beforeUpload"
+ :on-error="onError" ref='upload'>
+ <el-button link type="primary" style="height:30px;padding-top:8px">涓婁紶</el-button>
+ </el-upload>
+ </div>
+ </el-col>
+ <el-col :span="17">
+ <!-- 鍩烘湰淇℃伅 -->
+ <div class="section-title" style="margin-top: 0;">鍩烘湰淇℃伅</div>
+ <el-form :label-position="labelPosition" :model="formData" label-width="120px">
+ <div class="form-row">
<el-form-item label="浠櫒鍚嶇О:" required prop="deviceName">
<el-input :disabled="isUp" v-model="formData.deviceName" size="small"></el-input>
</el-form-item>
<el-form-item label="浠櫒鍚嶇ОEN:">
<el-input :disabled="isUp" v-model="formData.enDeviceName" size="small"></el-input>
</el-form-item>
+ </div>
+ <div class="form-row">
<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-select :disabled="isUp" v-model="formData.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="formData.assetCode" :disabled="isUp" size="small"></el-input>
- </el-form-item>
- <el-form-item label="浜у湴:">
- <el-input v-model="formData.origin" :disabled="isUp" 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" :disabled="isUp"
- 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 :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-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="鏈�杩戞牎鍑嗘棩鏈�:">
- <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.lastCalibrationDate" @change="calcNextDate(formData)"
- 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="formData.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 :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" @change="calcNextDate(formData)"></el-input>
- </el-form-item>
- <el-form-item label="鏈�杩戜繚鍏绘棩鏈�:">
- <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.lastMaintenanceDate" @change="calcNextDate(formData)"
- 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="formData.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 :disabled="isUp" v-model="formData.maintenanceCycle" size="small" @change="calcNextDate(formData)"></el-input>
- </el-form-item>
- <el-form-item label="鏈�杩戞牳鏌ユ棩鏈�:">
- <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.lastExamineDate" @change="calcNextDate(formData)"
- 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="formData.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 :disabled="isUp" v-model="formData.examineCycle" size="small" @change="calcNextDate(formData)"></el-input>
- </el-form-item>
- <el-form-item label="琚巿鏉冧汉:">
- <el-select v-model="formData.authorizedPerson" multiple :disabled="isUp" placeholder="璇烽�夋嫨" size="small"
- style="width:100%">
- <el-option v-for="item in inspectorList" :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 var(--el-border-color);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="uploadHeader" :on-change="beforeUpload"
- :on-error="onError" ref='upload'>
- <el-button link type="primary" style="height:30px;padding-top:8px">涓婁紶</el-button>
- </el-upload>
- </div>
- </el-form-item>
+ </div>
+ <div class="form-row">
+ <el-form-item label="浜у湴:">
+ <el-input v-model="formData.origin" :disabled="isUp" 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>
+ </div>
+ <div class="form-row">
+ <el-form-item label="璧勪骇缂栫爜:">
+ <el-input v-model="formData.assetCode" :disabled="isUp" 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>
+ </div>
+ <div class="form-row">
+ <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>
+ </div>
+ <div class="form-row">
+ <el-form-item label="鏍″噯鏈嶅姟鏈烘瀯:">
+ <el-select :disabled="isUp" v-model="formData.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>
+ <div style="flex: 1;"></div>
+ </div>
</el-form>
</el-col>
</el-row>
+ <!-- 璁惧绠$悊 -->
+ <div class="section-title">璁惧绠$悊</div>
+ <el-form :label-position="labelPosition" :model="formData" label-width="120px">
+ <div class="form-row">
+ <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="璁惧绫诲瀷:">
+ <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>
+ </div>
+ <div class="form-row">
+ <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="璐熻矗浜�:">
+ <el-select v-model="formData.equipmentManager" placeholder="璇烽�夋嫨" size="small" :disabled="isUp"
+ 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-select v-model="formData.authorizedPerson" multiple :disabled="isUp" placeholder="璇烽�夋嫨" size="small"
+ style="width:100%">
+ <el-option v-for="item in inspectorList" :key="item.value" :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </div>
+ <div class="form-row">
+ <el-form-item label="瀛樻斁鐐�:">
+ <el-input :disabled="isUp" v-model="formData.storagePoint" size="small"></el-input>
+ </el-form-item>
+ <div style="flex: 1;"></div>
+ </div>
+ </el-form>
+ <!-- 鏍″噯/淇濆吇/鏍告煡 鍛ㄦ湡淇℃伅 -->
+ <el-form :label-position="labelPosition" :model="formData" label-width="140px"
+ style="margin-top: 12px;border-top: 1px solid var(--lims-divider);padding-top: 4px;">
+ <div class="cycle-row">
+ <span class="cycle-title">鏍″噯淇℃伅</span>
+ <el-form-item label="鏈�杩戞牎鍑嗘棩鏈�:" class="cycle-item">
+ <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.lastCalibrationDate" @change="calcNextDate(formData)"
+ 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="涓嬫鏍″噯鏃ユ湡:" class="cycle-item">
+ <el-date-picker :disabled="true" style="width:100%" v-model="formData.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="鏍″噯鍛ㄦ湡锛堟湀锛�:" class="cycle-item" required>
+ <el-input :disabled="isUp" v-model="formData.calibrationDate" size="small" @change="calcNextDate(formData)"></el-input>
+ </el-form-item>
+ </div>
+ <div class="cycle-row">
+ <span class="cycle-title">淇濆吇淇℃伅</span>
+ <el-form-item label="鏈�杩戜繚鍏绘棩鏈�:" class="cycle-item">
+ <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.lastMaintenanceDate" @change="calcNextDate(formData)"
+ 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="涓嬫淇濆吇鏃ユ湡:" class="cycle-item">
+ <el-date-picker :disabled="true" style="width:100%" v-model="formData.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="淇濆吇鍛ㄦ湡锛堟湀锛�:" class="cycle-item">
+ <el-input :disabled="isUp" v-model="formData.maintenanceCycle" size="small" @change="calcNextDate(formData)"></el-input>
+ </el-form-item>
+ </div>
+ <div class="cycle-row">
+ <span class="cycle-title">鏍告煡淇℃伅</span>
+ <el-form-item label="鏈�杩戞牳鏌ユ棩鏈�:" class="cycle-item">
+ <el-date-picker :disabled="isUp" style="width:100%" v-model="formData.lastExamineDate" @change="calcNextDate(formData)"
+ 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="涓嬫鏍告煡鏃ユ湡:" class="cycle-item">
+ <el-date-picker :disabled="true" style="width:100%" v-model="formData.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="鏍告煡鍛ㄦ湡锛堟湀锛�:" class="cycle-item">
+ <el-input :disabled="isUp" v-model="formData.examineCycle" size="small" @change="calcNextDate(formData)"></el-input>
+ </el-form-item>
+ </div>
+ </el-form>
+ <!-- 鎶�鏈寚鏍� -->
+ <div class="section-title">鎶�鏈寚鏍�</div>
+ <el-input :disabled="isUp" v-model="formData.technicalIndicators" :rows="7" type="textarea"
+ size="small"></el-input>
+ </div>
<template #footer><span class="dialog-footer">
<el-row v-if="!isUp" justify="end">
<el-button @click="handleClose">鍙� 娑�</el-button>
@@ -213,146 +241,166 @@
</el-dialog>
<!-- 鏂板-->
<el-dialog title="鏂板璁惧" top="5vh" v-model="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">
- <template #error><div class="image-error" style="width: calc(100% -2px);
- height: 318px;
- border-radius: 16px;
- display: flex;
- align-items: center;
- justify-content: center;
- border: 1px solid var(--lims-divider);">
- <lims-icon name="el-icon-picture-outline" style="font-size:60px;color:var(--lims-text-2);"></lims-icon>
- </div></template>
- </el-image>
- <!-- 琛ㄥ崟 -->
- <el-form :label-position="labelPosition" :model="formData2" label-width="120px">
+ <div style="max-height: 75vh;overflow-y: auto;">
+ <!-- 椤堕儴锛氬浘鐗� + 鍩烘湰淇℃伅 -->
+ <el-row>
+ <el-col :span="7" style="padding-right: 20px;">
+ <!-- 鍥剧墖 -->
+ <el-image class="img" style="width:100%;height: 320px"
+ :src="javaApi + '/img/' + formData2.imageUpload">
+ <template #error><div class="image-error" style="width: calc(100% -2px);
+ height: 318px;
+ border-radius: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid var(--lims-divider);">
+ <lims-icon name="el-icon-picture-outline" style="font-size:60px;color:var(--lims-text-2);"></lims-icon>
+ </div></template>
+ </el-image>
+ <!-- 鍥剧墖涓婁紶 -->
+ <div style="border: 1px solid var(--el-border-color);border-radius:4px;height:32px;line-height:32px;display:flex;justify-content: space-around;font-size: 13px;margin-top:12px;">
+ <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="uploadHeader" :on-change="beforeUpload"
+ :on-error="onError" ref='upload'>
+ <el-button link type="primary" style="height:30px;padding-top:8px">涓婁紶</el-button>
+ </el-upload>
+ </div>
+ </el-col>
+ <el-col :span="17">
+ <!-- 鍩烘湰淇℃伅 -->
+ <div class="section-title" style="margin-top: 0;">鍩烘湰淇℃伅</div>
+ <el-form :label-position="labelPosition" :model="formData2" label-width="120px">
+ <div class="form-row">
<el-form-item label="浠櫒鍚嶇О:" required>
<el-input v-model="formData2.deviceName" size="small"></el-input>
</el-form-item>
<el-form-item label="浠櫒鍚嶇ОEN:">
<el-input v-model="formData2.enDeviceName" size="small"></el-input>
</el-form-item>
+ </div>
+ <div class="form-row">
<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-select v-model="formData2.calibrationServices" clearable filterable size="small" style="width: 100%">
- <el-option v-for="name in calibrationServiceOptions2" :key="name" :label="name" :value="name"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="璧勪骇缂栫爜:">
- <el-input v-model="formData2.assetCode" size="small"></el-input>
- </el-form-item>
- <el-form-item label="浜у湴:">
- <el-input v-model="formData2.origin" 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-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-date-picker style="width:100%" v-model="formData2.lastCalibrationDate" format="YYYY-MM-DD" @change="calcNextDate(formData2)"
- 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="formData2.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="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.value" :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" @change="calcNextDate(formData2)"></el-input>
- </el-form-item>
- <el-form-item label="琚巿鏉冧汉:">
- <el-select v-model="formData2.authorizedPerson" multiple placeholder="璇烽�夋嫨" size="small"
- style="width:100%">
- <el-option v-for="item in inspectorList" :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 var(--el-border-color);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="uploadHeader" :on-change="beforeUpload"
- :on-error="onError" ref='upload'>
- <el-button link type="primary" style="height:30px;padding-top:8px">涓婁紶</el-button>
- </el-upload>
- </div>
- </el-form-item>
+ </div>
+ <div class="form-row">
+ <el-form-item label="浜у湴:">
+ <el-input v-model="formData2.origin" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鍑哄巶缂栧彿:">
+ <el-input v-model="formData2.factoryNo" size="small"></el-input>
+ </el-form-item>
+ </div>
+ <div class="form-row">
+ <el-form-item label="璧勪骇缂栫爜:">
+ <el-input v-model="formData2.assetCode" 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>
+ </div>
+ <div class="form-row">
+ <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>
+ </div>
+ <div class="form-row">
+ <el-form-item label="鏍″噯鏈嶅姟鏈烘瀯:">
+ <el-select v-model="formData2.calibrationServices" clearable filterable size="small" style="width: 100%">
+ <el-option v-for="name in calibrationServiceOptions2" :key="name" :label="name" :value="name"></el-option>
+ </el-select>
+ </el-form-item>
+ <div style="flex: 1;"></div>
+ </div>
</el-form>
</el-col>
</el-row>
+ <!-- 璁惧绠$悊 -->
+ <div class="section-title">璁惧绠$悊</div>
+ <el-form :label-position="labelPosition" :model="formData2" label-width="120px">
+ <div class="form-row">
+ <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>
+ </div>
+ <div class="form-row">
+ <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.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </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-select v-model="formData2.authorizedPerson" multiple placeholder="璇烽�夋嫨" size="small"
+ style="width:100%">
+ <el-option v-for="item in inspectorList" :key="item.value" :label="item.label"
+ :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </div>
+ <div class="form-row">
+ <el-form-item label="瀛樻斁鐐�:">
+ <el-input v-model="formData2.storagePoint" size="small"></el-input>
+ </el-form-item>
+ <div style="flex: 1;"></div>
+ </div>
+ </el-form>
+ <!-- 鏍″噯淇℃伅 -->
+ <el-form :label-position="labelPosition" :model="formData2" label-width="140px"
+ style="margin-top: 12px;border-top: 1px solid var(--lims-divider);padding-top: 4px;">
+ <div class="cycle-row">
+ <span class="cycle-title">鏍″噯淇℃伅</span>
+ <el-form-item label="鏈�杩戞牎鍑嗘棩鏈�:" class="cycle-item">
+ <el-date-picker style="width:100%" v-model="formData2.lastCalibrationDate" format="YYYY-MM-DD" @change="calcNextDate(formData2)"
+ value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="涓嬫鏍″噯鏃ユ湡:" class="cycle-item">
+ <el-date-picker :disabled="true" style="width:100%" v-model="formData2.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="鏍″噯鍛ㄦ湡锛堟湀锛�:" class="cycle-item" required>
+ <el-input v-model="formData2.calibrationDate" size="small" @change="calcNextDate(formData2)"></el-input>
+ </el-form-item>
+ </div>
+ </el-form>
+ <!-- 鎶�鏈寚鏍� -->
+ <div class="section-title">鎶�鏈寚鏍�</div>
+ <el-input v-model="formData2.technicalIndicators" :rows="7" type="textarea"
+ size="small"></el-input>
+ </div>
<template #footer><span class="dialog-footer">
<el-row justify="end">
<el-button @click="handleClose2">鍙� 娑�</el-button>
@@ -613,6 +661,27 @@
handleNotification(cate) {
this.queryParams.largeCategory = cate
},
+ // 琚巿鏉冧汉鍘嗗彶鍊煎彲鑳芥槸琚弽澶嶈浆涔夌殑澶氬眰 JSON 瀛楃涓诧紝閫愬眰瑙f瀽杩樺師鎴愭暟缁�
+ normalizeAuthorizedPerson(val) {
+ let v = val
+ for (let i = 0; i < 10; i++) {
+ if (typeof v !== 'string') break
+ if (v === '') {
+ v = []
+ break
+ }
+ try {
+ v = JSON.parse(v)
+ } catch (e) {
+ v = []
+ break
+ }
+ }
+ if (!Array.isArray(v)) {
+ v = v === '' || v === null || v === undefined ? [] : [v]
+ }
+ return v.filter(x => x !== '' && x !== null && x !== undefined)
+ },
getList() {
this.tableLoading = true;
let param = { ...this.queryParams, ...this.page };
@@ -770,6 +839,7 @@
//row = 鐐瑰嚮瀵瑰簲琛屽��
//澶嶅埗缁檉ormData
this.formData = this.HaveJson(row);
+ this.formData.authorizedPerson = this.normalizeAuthorizedPerson(row.authorizedPerson);
console.log(row.insProductIds + 'valll');
this.formData.insProductIds = row.insProductIds ? row.insProductIds.split(',') : [];
},
@@ -781,6 +851,7 @@
//row = 鐐瑰嚮瀵瑰簲琛屽�间竴琛屽��
//澶嶅埗缁檉ormData
this.formData = this.HaveJson(row);
+ this.formData.authorizedPerson = this.normalizeAuthorizedPerson(row.authorizedPerson);
if (typeof (row.insProductIds) === 'number') {
row.insProductIds = row.insProductIds + ''
}
@@ -879,11 +950,9 @@
delete this.formData.updateUser
const formData = this.HaveJson(this.formData)
formData.insProductIds = formData.insProductIds ? formData.insProductIds.join() : ''
- if (formData.authorizedPerson && formData.authorizedPerson.length === 0) {
- formData.authorizedPerson = ''
- } else {
- formData.authorizedPerson = JSON.stringify(formData.authorizedPerson)
- }
+ formData.authorizedPerson = Array.isArray(formData.authorizedPerson) && formData.authorizedPerson.length
+ ? JSON.stringify(formData.authorizedPerson)
+ : ''
this.upLoad = true;
upDeviceParameter(formData).then(res => {
this.$message.success('淇敼鎴愬姛')
@@ -924,11 +993,9 @@
}
const formData = this.HaveJson(this.formData2)
formData.insProductIds = formData.insProductIds ? formData.insProductIds.join() : ''
- if (formData.authorizedPerson.length === 0) {
- formData.authorizedPerson = ''
- } else {
- formData.authorizedPerson = JSON.stringify(formData.authorizedPerson)
- }
+ formData.authorizedPerson = Array.isArray(formData.authorizedPerson) && formData.authorizedPerson.length
+ ? JSON.stringify(formData.authorizedPerson)
+ : ''
this.upLoad2 = true;
addDeviceParameter(formData).then(res => {
this.$message.success('鎻愪氦鎴愬姛')
@@ -1075,4 +1142,54 @@
.form-item :deep(.el-form-item__content) {
width: 120px;
}
+.cycle-row {
+ display: flex;
+ align-items: center;
+}
+
+.cycle-title {
+ width: 68px;
+ flex-shrink: 0;
+ font-size: 13px;
+ color: var(--lims-text-2, #909399);
+}
+
+.cycle-item {
+ flex: 1;
+ margin-bottom: 6px;
+ margin-right: 10px;
+}
+
+.cycle-item:last-child {
+ margin-right: 0;
+}
+
+.form-row {
+ display: flex;
+ gap: 16px;
+}
+
+.form-row > .el-form-item {
+ flex: 1;
+}
+
+.section-title {
+ position: relative;
+ padding-left: 10px;
+ margin: 14px 0 12px;
+ font-size: 13px;
+ font-weight: 600;
+ color: var(--lims-text-1, #303133);
+}
+
+.section-title::before {
+ content: "";
+ position: absolute;
+ left: 0;
+ top: 3px;
+ bottom: 3px;
+ width: 3px;
+ border-radius: 2px;
+ background: var(--el-color-primary, #409eff);
+}
</style>
--
Gitblit v1.9.3