From faa4081b1617f062738bfa0e83b689cbd63d74ec Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期五, 23 十月 2026 18:08:56 +0800
Subject: [PATCH] 设备模块:仪器名称EN字段改为仪器名称,隐藏未实现的数采配置按钮;设备核查计划编辑与新增弹窗改为单列排版并调整宽度;新增核查记录弹窗按编辑表单对齐字段、校验与附件;核查责任人下拉包含admin;新增按设备获取核查计划明细接口
---
src/api/cnas/resourceDemand/device.js | 9
src/views/CNAS/resourceDemand/device/component/files.vue | 2
src/views/CNAS/resourceDemand/device/component/management.vue | 6
src/views/CNAS/resourceDemand/device/component/checkRecord.vue | 568 +++++++++++++++++--------------------------
src/views/CNAS/resourceDemand/device/component/equipmentVerificationPlan.vue | 178 ++++++++-----
5 files changed, 342 insertions(+), 421 deletions(-)
diff --git a/src/api/cnas/resourceDemand/device.js b/src/api/cnas/resourceDemand/device.js
index f72c9df..2ed9d05 100644
--- a/src/api/cnas/resourceDemand/device.js
+++ b/src/api/cnas/resourceDemand/device.js
@@ -370,6 +370,15 @@
});
}
+// 鎸夎澶囪幏鍙栨湰杞牳鏌ヨ鍒掓槑缁嗭紙娌℃湁鍒欒嚜鍔ㄦ柊澧烇級
+export function resolveExaminePlanDetail(query) {
+ return request({
+ url: "/deviceExaminePlan/resolveExaminePlanDetail",
+ method: "get",
+ params: query,
+ });
+}
+
// 鏂板璁惧鏍告煡璁″垝璇︽儏
export function addDeviceExaminePlanDetail(data) {
return request({
diff --git a/src/views/CNAS/resourceDemand/device/component/checkRecord.vue b/src/views/CNAS/resourceDemand/device/component/checkRecord.vue
index c651824..d2ab78a 100644
--- a/src/views/CNAS/resourceDemand/device/component/checkRecord.vue
+++ b/src/views/CNAS/resourceDemand/device/component/checkRecord.vue
@@ -1,217 +1,66 @@
<template>
<div>
<el-dialog :close-on-click-modal="false" :close-on-press-escape="false" v-model="dialogVisible"
- title="浠櫒璁惧鏈熼棿鏍告煡璁板綍琛�" width="80%" @close="resetForm">
- <el-steps :active="currentStep" align-center finish-status="success">
- <el-step title="濉啓璁惧鏍告煡瀵规瘮璁板綍"></el-step>
+ :title="currentStep === 0 ? '鏂板鏍告煡璁板綍' : '璁惧鏍告煡璁板綍'" width="50%" @close="resetForm">
+ <el-steps v-if="currentStep === 1" :active="1" 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="selectedDeviceId" :disabled="currentStep !== 0" class="table_input" clearable filterable
- placeholder="璁惧鍚嶇О" size="small" style="width:200px" @change="changeMachineName">
- <el-option v-for="item in equipOptions" :key="item.id" :label="item.label" :value="item.id">
- {{ 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 v-if="currentStep === 0" size="small" style="margin: 10px 0" type="primary" @click="addRow">娣诲姞</el-button>
- <el-table :data="recordDetailList" height="300" style="width: 100%" border>
- <el-table-column label="娴嬭瘯鐐�" min-width="130" prop="testPoint">
- <template #default="scope">
- <el-input v-model="scope.row.testPoint" :disabled="currentStep !== 0" clearable size="small"></el-input>
- </template>
- </el-table-column>
- <el-table-column min-width="180">
- <template #header="scope">
- <el-input v-model="form.dataValue1" :disabled="currentStep !== 0" size="small" />
- </template>
- <template #default="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 #header="scope">
- <el-input v-model="form.dataValue2" :disabled="currentStep !== 0" size="small" />
- </template>
- <template #default="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 #header="scope">
- <el-input v-model="form.dataValue3" :disabled="currentStep !== 0" size="small" />
- </template>
- <template #default="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 #header="scope">
- <el-input v-model="form.dataValue4" :disabled="currentStep !== 0" size="small" />
- </template>
- <template #default="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 #header="scope">
- <el-input v-model="form.dataValue5" :disabled="currentStep !== 0" size="small" />
- </template>
- <template #default="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 #header="scope">
- <el-input v-model="form.dataValue6" :disabled="currentStep !== 0" size="small" />
- </template>
- <template #default="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>
- <template #footer><span class="dialog-footer">
+ <el-form ref="recordForm" :model="form" :rules="rules" label-width="110px">
+ <el-form-item label="璁惧缂栧彿锛�" prop="deviceNumber">
+ <el-input v-model="form.deviceNumber" disabled size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="璁惧鍚嶇О锛�" prop="deviceName">
+ <el-select v-if="currentStep === 0" v-model="selectedDeviceId" clearable filterable
+ placeholder="璇烽�夋嫨璁惧" size="small" style="width: 100%" @change="changeMachineName">
+ <el-option v-for="item in equipOptions" :key="item.id" :label="item.label + '-' + item.value"
+ :value="item.id"></el-option>
+ </el-select>
+ <el-input v-else v-model="form.deviceName" disabled size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鏍告煡鏃堕棿锛�" prop="checkTime">
+ <el-date-picker v-model="form.checkTime" :disabled="currentStep !== 0" clearable format="YYYY-MM"
+ placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="month" value-format="YYYY-MM">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="鏍告煡鎸囨爣锛�" prop="checkIndex">
+ <el-input v-model="form.checkIndex" :disabled="currentStep !== 0" clearable size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鏍告煡鏂规硶锛�" prop="checkMethod">
+ <el-input v-model="form.checkMethod" :disabled="currentStep !== 0" clearable size="small"
+ type="textarea"></el-input>
+ </el-form-item>
+ <el-form-item label="缁撴灉濡備綍鍒ゅ畾锛�" prop="howResults">
+ <el-input v-model="form.howResults" :disabled="currentStep !== 0" clearable size="small"
+ type="textarea"></el-input>
+ </el-form-item>
+ <el-form-item label="鏍告煡璐d换浜猴細" prop="checkChargerUserId">
+ <el-select v-if="currentStep === 0" v-model="form.checkChargerUserId" clearable filterable
+ placeholder="璇烽�夋嫨" size="small" style="width: 100%" @change="setCheckChargerUser">
+ <el-option v-for="item in chargerOptions" :key="item.id" :label="item.name"
+ :value="item.id"></el-option>
+ </el-select>
+ <el-input v-else v-model="form.checkChargerUser" disabled size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="澶囨敞锛�" prop="remark">
+ <el-input v-model="form.remark" :disabled="currentStep !== 0" clearable size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="闄勪欢锛�">
+ <el-upload v-if="currentStep === 0" :action="javaApi + '/deviceScope/uploadFile'" :headers="uploadHeader"
+ :limit="1" :on-exceed="handleUploadExceed" :before-upload="beforeAttachmentUpload"
+ :on-success="handleAttachmentSuccess" :on-remove="handleAttachmentRemove">
+ <el-button size="small" type="primary">閫夋嫨闄勪欢</el-button>
+ </el-upload>
+ <el-link v-if="form.fileUrl" type="primary" @click="openAttachment">
+ {{ form.fileName || '鏌ョ湅闄勪欢' }}
+ </el-link>
+ <span v-else-if="currentStep !== 0">鈥�</span>
+ </el-form-item>
+ </el-form>
+ <template #footer><span 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>
<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>
@@ -222,171 +71,185 @@
<script>
import {
- getExamineRecord,
addExamineRecord,
reviewExamineRecord,
deviceScopeSearch,
+ resolveExaminePlanDetail,
+ updateDeviceExaminePlanDetail,
} from '@/api/cnas/resourceDemand/device.js'
import { selectUserCondition } from "@/api/performance/class";
-import {mapGetters} from "@/utils/store-compat";
import draftSave from '@/mixins/draftSave'
+
+const createEmptyForm = () => ({
+ deviceId: '',
+ deviceName: '',
+ deviceNumber: '',
+ checkTime: '',
+ checkIndex: '',
+ checkMethod: '',
+ howResults: '',
+ checkChargerUserId: '',
+ checkChargerUser: '',
+ remark: '',
+ fileName: '',
+ fileUrl: '',
+ planDetailsId: '',
+})
export default {
name: "check-record",
- // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
- components: {},
mixins: [draftSave],
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: '',
- reviewUserId: '',
- },
+ form: createEmptyForm(),
currentStep: 0,
- distributionDetailList: [
- { label: '鏈�澶у亸宸�', value: 1 },
- { label: '鐩稿鍋忓樊', value: 2 },
- ],
equipOptions: [],
selectedDeviceId: '',
submitFormLoading: false,
userList: [],
- reviewUserId: '',
- checkChargerUserId: '',
+ rules: {
+ checkMethod: [{ required: true, message: '璇峰~鍐欐牳鏌ユ柟娉�', trigger: 'blur' }],
+ },
}
- },
- mounted() {
-
- },
- computed: {
- ...mapGetters(["userId"]),
},
// 鏂规硶闆嗗悎
methods: {
+ // 瀹℃牳宸叉彁浜ょ殑鏍告煡璁板綍
openDialog(row) {
this.dialogVisible = true
+ this.currentStep = 1
+ this.selectedDeviceId = row.deviceId || ''
+ this.form = {
+ deviceId: row.deviceId || '',
+ deviceName: row.deviceName || '',
+ deviceNumber: row.deviceNumber || '',
+ checkTime: (row.checkTime || '').substring(0, 7),
+ checkIndex: row.checkIndex || '',
+ checkMethod: row.checkMethod || '',
+ howResults: row.howResults || '',
+ checkChargerUserId: row.checkChargerUserId || '',
+ checkChargerUser: row.checkChargerUser || '',
+ remark: row.remark || '',
+ fileName: row.fileName || '',
+ fileUrl: row.fileUrl || '',
+ planDetailsId: row.planDetailsId,
+ }
+ },
+ // 鏂板鏍告煡璁板綍锛氳嚜閫夎澶囷紝鎻愪氦鏃惰嚜鍔ㄥ尮閰�/鍒涘缓鏈疆璁″垝鏄庣粏
+ openAddDialog() {
+ this.dialogVisible = true
+ this.currentStep = 0
+ this.form = createEmptyForm()
this.selectedDeviceId = ''
- this.form.planDetailsId = row.planDetailsId
- this.checkChargerUserId = row.checkChargerUserId
+ const now = new Date()
+ this.form.checkTime = now.getFullYear() + '-' + String(now.getMonth() + 1).padStart(2, '0')
this.getEquipOptions()
this.getUserList()
- this.searchInfo()
- },
- searchInfo() {
- 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.reviewUserId) {
- this.currentStep = 0
- } else {
- this.currentStep = 1
- }
- if (this.form.reviewStatus === 1) {
- this.currentStep = 2
- }
- this.reviewUserId = this.form.reviewUserId
- this.matchDeviceOption()
- this.$nextTick(() => {
- this.draftRestore('checkRecordForm', 'form', this.form.planDetailsId, 'dialogVisible')
- this.draftRestore('checkRecordRows', 'recordDetailList', this.form.planDetailsId, 'dialogVisible')
- // 鑽夌閲屽彲鑳芥敼杩囪澶囷紝鎭㈠鍚庨噸鏂板尮閰嶄笅鎷夐�変腑椤�
- this.matchDeviceOption()
- })
+ this.$nextTick(() => {
+ if (this.$refs.recordForm) {
+ this.$refs.recordForm.clearValidate()
}
- }).catch(error => {
- console.error(error)
+ this.draftRestore('checkRecordForm', 'form', 'new', 'dialogVisible')
+ if (this.form.deviceId) {
+ this.selectedDeviceId = this.form.deviceId
+ }
})
},
// 鎸夎澶� id 鍥炲~鍚嶇О鍜岀紪鍙凤紝閬垮厤鍚屽悕璁惧閫夐敊
changeMachineName(value) {
const item = this.equipOptions.find(device => device.id === value)
if (item) {
+ this.form.deviceId = item.id
this.form.deviceName = item.deviceName
this.form.deviceNumber = item.managementNumber
} else {
+ this.form.deviceId = ''
this.form.deviceName = ''
this.form.deviceNumber = ''
}
},
- // 鍘嗗彶璁板綍娌℃湁 deviceId锛屾寜鍚嶇О+缂栧彿鍙嶆煡涓嬫媺閫夐」
- matchDeviceOption() {
- if (!this.equipOptions.length || !this.form.deviceName) {
+ setCheckChargerUser(value) {
+ const item = this.userList.find(user => user.id === value)
+ this.form.checkChargerUser = item ? item.name : ''
+ },
+ // 鎻愪氦鏍告煡璁板綍
+ submitCheck() {
+ if (!this.selectedDeviceId) {
+ this.$message.error('璇烽�夋嫨璁惧')
return
}
- const match = this.form.deviceNumber
- ? this.equipOptions.find(item => item.deviceName === this.form.deviceName && item.managementNumber === this.form.deviceNumber)
- : this.equipOptions.find(item => item.deviceName === this.form.deviceName)
- this.selectedDeviceId = match ? match.id : ''
- },
- addRow() {
- this.recordDetailList.push({ testPoint: '' })
- },
- // 鎻愪氦琛ㄥ崟
- submitCheck() {
- console.log(333, this.form)
- this.form.recordDetailList = this.HaveJson(this.recordDetailList)
- this.submitFormLoading = true
- addExamineRecord(this.form).then(res => {
- if (res.code == 200) {
- this.$message.success('鏂板鎴愬姛')
- this.draftClear('checkRecordForm')
- this.draftClear('checkRecordRows')
- this.resetForm()
+ if (!this.form.checkTime) {
+ this.$message.error('璇烽�夋嫨鏍告煡鏃堕棿')
+ return
+ }
+ this.$refs.recordForm.validate(valid => {
+ if (!valid) {
+ return
}
- this.submitFormLoading = false
- }).catch(err => {
+ this.submitFormLoading = true
+ resolveExaminePlanDetail({ deviceId: this.selectedDeviceId, checkTime: this.form.checkTime }).then(res => {
+ if (res.code !== 200) {
+ this.$message.error(res.msg || '鑾峰彇鏍告煡璁″垝澶辫触')
+ this.submitFormLoading = false
+ return
+ }
+ this.saveRecord(res.data.planDetailsId)
+ }).catch(() => {
+ this.submitFormLoading = false
+ })
+ })
+ },
+ saveRecord(planDetailsId) {
+ this.form.planDetailsId = planDetailsId
+ const params = {
+ planDetailsId,
+ deviceId: this.form.deviceId,
+ deviceName: this.form.deviceName,
+ deviceNumber: this.form.deviceNumber,
+ checkTime: this.form.checkTime,
+ }
+ if (this.form.checkIndex) params.checkIndex = this.form.checkIndex
+ if (this.form.checkMethod) params.checkMethod = this.form.checkMethod
+ if (this.form.howResults) params.howResults = this.form.howResults
+ if (this.form.checkChargerUserId) params.checkChargerUserId = this.form.checkChargerUserId
+ if (this.form.checkChargerUser) params.checkChargerUser = this.form.checkChargerUser
+ if (this.form.remark) params.remark = this.form.remark
+ if (this.form.fileName) params.fileName = this.form.fileName
+ if (this.form.fileUrl) params.fileUrl = this.form.fileUrl
+ updateDeviceExaminePlanDetail(params).then(res => {
+ if (res.code !== 200) {
+ this.$message.error(res.msg || '淇濆瓨鏍告煡璁板綍澶辫触')
+ this.submitFormLoading = false
+ return
+ }
+ addExamineRecord({ planDetailsId }).then(recordRes => {
+ if (recordRes.code == 200) {
+ this.$message.success('鏍告煡璁板綍宸叉彁浜わ紝绛夊緟瀹℃牳')
+ this.draftClear('checkRecordForm')
+ this.resetForm()
+ } else {
+ this.$message.error(recordRes.msg || '鎻愪氦鏍告煡璁板綍澶辫触')
+ }
+ this.submitFormLoading = false
+ }).catch(() => {
+ this.submitFormLoading = false
+ })
+ }).catch(() => {
this.submitFormLoading = false
})
},
// 鎻愪氦瀹℃牳
examine(statue) {
+ this.submitFormLoading = true
const params = {
planDetailsId: this.form.planDetailsId,
reviewStatus: statue,
}
reviewExamineRecord(params).then(res => {
if (res.code == 200) {
- this.$message.success('瀹℃牳鎴愬姛')
+ this.$message.success(statue === 1 ? '瀹℃牳閫氳繃' : '宸查��鍥�')
this.draftClear('checkRecordForm')
- this.draftClear('checkRecordRows')
this.resetForm()
}
this.submitFormLoading = false
@@ -396,7 +259,6 @@
},
resetForm() {
this.draftStop('checkRecordForm')
- this.draftStop('checkRecordRows')
this.dialogVisible = false
this.$emit('closeDialog1')
},
@@ -411,44 +273,58 @@
m.id = m.id
return m
})
- this.matchDeviceOption()
}
}).catch(error => {
console.error(error)
})
},
getUserList() {
- selectUserCondition().then(res => {
+ selectUserCondition({ type: 4 }).then(res => {
this.userList = res.data
})
+ },
+ // 闄勪欢
+ beforeAttachmentUpload(file) {
+ if (file.size > 1024 * 1024 * 10) {
+ this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M')
+ return false
+ }
+ return true
+ },
+ handleUploadExceed() {
+ this.$message.warning('浠呮敮鎸佷竴涓檮浠讹紝璇峰厛绉婚櫎宸蹭笂浼犵殑闄勪欢')
+ },
+ handleAttachmentSuccess(response) {
+ if (response.code == 200) {
+ this.form.fileName = response.data.name
+ this.form.fileUrl = response.data.url
+ this.$message.success('闄勪欢涓婁紶鎴愬姛')
+ } else {
+ this.$message.error(response.msg || '闄勪欢涓婁紶澶辫触')
+ }
+ },
+ handleAttachmentRemove() {
+ this.form.fileName = ''
+ this.form.fileUrl = ''
+ },
+ openAttachment() {
+ if (!this.form.fileUrl) {
+ return
+ }
+ const isImage = /\.(jpg|jpeg|png|gif)$/i.test(this.form.fileUrl)
+ window.open(this.javaApi + (isImage ? '/img/' : '/word/') + this.form.fileUrl, '_blank')
+ },
+ },
+ computed: {
+ // 璐d换浜轰笅鎷夛細宸蹭繚瀛樼殑璐d换浜轰笉鍦ㄥ�欓�夊垪琛ㄦ椂琛ヤ竴鏉★紝閬垮厤鍥炴樉鎴愮敤鎴稩D
+ chargerOptions() {
+ const list = this.userList || []
+ const id = this.form.checkChargerUserId
+ if (id && !list.some(item => String(item.id) === String(id))) {
+ return [...list, { id, name: this.form.checkChargerUser || String(id) }]
+ }
+ return list
},
},
}
</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;
-}
-
-:deep(.el-dialog__body) {
- max-height: 650px;
- overflow-y: auto;
-}
-</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/equipmentVerificationPlan.vue b/src/views/CNAS/resourceDemand/device/component/equipmentVerificationPlan.vue
index 84a1130..26aceb1 100644
--- a/src/views/CNAS/resourceDemand/device/component/equipmentVerificationPlan.vue
+++ b/src/views/CNAS/resourceDemand/device/component/equipmentVerificationPlan.vue
@@ -10,6 +10,7 @@
</el-select>
</div>
<div>
+ <el-button size="small" type="primary" @click="handleAddRecord">鏂板鏍告煡璁板綍</el-button>
<el-button size="small" type="primary" @click="loadPlan">鍒锋柊</el-button>
<el-button size="small" type="primary" @click="downLoadPost">瀵煎嚭</el-button>
</div>
@@ -73,17 +74,31 @@
</template>
</el-table-column>
<el-table-column label="澶囨敞" min-width="130" prop="remark"></el-table-column>
+ <el-table-column label="闄勪欢" min-width="140">
+ <template #default="scope">
+ <el-link v-if="scope.row.fileUrl" type="primary" @click="openAttachment(scope.row)">
+ {{ scope.row.fileName || '鏌ョ湅闄勪欢' }}
+ </el-link>
+ <span v-else>鈥�</span>
+ </template>
+ </el-table-column>
<!-- 鎿嶄綔鎸夐挳 -->
- <el-table-column align="center" fixed="right" label="鎿嶄綔" min-width="260">
+ <el-table-column align="center" fixed="right" label="鎿嶄綔" min-width="320">
<template #default="scope">
<el-button size="small" link type="primary"
@click="handleForm('edit', scope.row)">缂栬緫</el-button>
<el-button size="small" link type="primary" @click="handleForm('view', scope.row)">鏌ョ湅</el-button>
- <el-button size="small" link type="primary" @click="handleRecord(scope.row)">璁板綍</el-button>
- <el-button size="small" link type="primary" @click="handleCheck(scope.row)">瀵规瘮</el-button>
+ <el-button v-if="scope.row.recordStatus === 1" size="small" link type="primary"
+ @click="handleRecord(scope.row)">瀹℃牳</el-button>
+ <el-upload class="row-upload" :action="javaApi + '/deviceScope/uploadFile'"
+ :headers="uploadHeader" :show-file-list="false" :before-upload="beforeAttachmentUpload"
+ :on-success="(res) => handleAttachmentSuccess(res, scope.row)"
+ :on-error="handleAttachmentError">
+ <el-button size="small" link type="primary">涓婁紶闄勪欢</el-button>
+ </el-upload>
<el-button size="small" link type="primary" @click="handleDown(scope.row)">瀵煎嚭</el-button>
- <el-button size="small" link type="danger"
- @click="deleteFun1(scope.row.planDetailsId)">鍒犻櫎</el-button>
+ <el-button v-if="scope.row.recordStatus === 0 && scope.row.recordContrastStatus === 0"
+ size="small" link type="danger" @click="deleteFun1(scope.row.planDetailsId)">鍒犻櫎</el-button>
</template>
</el-table-column>
</el-table>
@@ -94,56 +109,43 @@
</el-pagination>
</div>
<el-dialog :close-on-click-modal="false" :close-on-press-escape="false" v-model="dialogVisible" title="璁惧鏍告煡璁″垝"
- width="80%" @close="resetForm">
+ width="50%" @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="month" 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="鏍告煡璐d换浜猴細" 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 chargerOptions" :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-item label="璁惧缂栧彿锛�" prop="deviceNumber">
+ <el-input v-model="form.deviceNumber" :disabled="operationType === 'view'" clearable
+ size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="璁惧鍚嶇О锛�" prop="deviceName">
+ <el-input v-model="form.deviceName" :disabled="operationType === 'view'" clearable
+ size="small"></el-input>
+ </el-form-item>
+ <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="month" value-format="YYYY-MM">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="鏍告煡鎸囨爣锛�" prop="checkIndex">
+ <el-input v-model="form.checkIndex" :disabled="operationType === 'view'" clearable
+ size="small"></el-input>
+ </el-form-item>
+ <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-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-form-item label="鏍告煡璐d换浜猴細" 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 chargerOptions" :key="item.id" :label="item.name"
+ :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="澶囨敞锛�" prop="remark">
+ <el-input v-model="form.remark" :disabled="operationType === 'view'" clearable size="small"></el-input>
+ </el-form-item>
</el-form>
<template #footer><span class="dialog-footer">
<el-button @click="resetForm">鍙� 娑�</el-button>
@@ -162,13 +164,11 @@
<el-button @click="downloadDialog = false">鍙� 娑�</el-button>
</span></template>
</el-dialog>
- <equipment-check v-if="equipmentCheck" ref="equipmentCheck" @closeDialog="closeDialog"></equipment-check>
<check-record v-if="checkRecord" ref="checkRecord" @closeDialog1="closeDialog1"></check-record>
</div>
</template>
<script>
-import EquipmentCheck from "./equipmentCheck.vue";
import CheckRecord from "./checkRecord.vue";
import {
pageDeviceExaminePlan,
@@ -186,7 +186,7 @@
export default {
name: "equipment-verification-plan",
// import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
- components: { CheckRecord, EquipmentCheck },
+ components: { CheckRecord },
mixins: [draftSave],
props: {
clickNodeVal: {
@@ -234,7 +234,6 @@
yearTableDetailDataLoading: false,
submitFormLoading: false,
userList: [],
- equipmentCheck: false,
checkRecord: false,
downloadDialog: false,
outLoading: false,
@@ -408,24 +407,53 @@
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()
- },
- // 鎵撳紑璁板綍寮规
+ // 鎵撳紑鏍告煡璁板綍锛堝緟鎵瑰噯鏃剁敤浜庡鏍革級
handleRecord(row) {
this.checkRecord = true
this.$nextTick(() => {
this.$refs.checkRecord.openDialog(row)
})
+ },
+ // 鏂板鏍告煡璁板綍锛堝彲鑷�夎澶囷級
+ handleAddRecord() {
+ this.checkRecord = true
+ this.$nextTick(() => {
+ this.$refs.checkRecord.openAddDialog()
+ })
+ },
+ // 鎵撳紑闄勪欢
+ openAttachment(row) {
+ const isImage = /\.(jpg|jpeg|png|gif)$/i.test(row.fileUrl)
+ window.open(this.javaApi + (isImage ? '/img/' : '/word/') + row.fileUrl, '_blank')
+ },
+ beforeAttachmentUpload(file) {
+ if (file.size > 1024 * 1024 * 10) {
+ this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M')
+ return false
+ }
+ return true
+ },
+ // 闄勪欢涓婁紶鎴愬姛鍚庝繚瀛樺埌璁″垝鏄庣粏
+ handleAttachmentSuccess(response, row) {
+ if (response.code == 200) {
+ updateDeviceExaminePlanDetail({
+ planDetailsId: row.planDetailsId,
+ fileName: response.data.name,
+ fileUrl: response.data.url
+ }).then(res => {
+ if (res.code == 200) {
+ this.$message.success('闄勪欢涓婁紶鎴愬姛')
+ this.getYearTableDetailData()
+ } else {
+ this.$message.error(res.msg || '闄勪欢淇濆瓨澶辫触')
+ }
+ })
+ } else {
+ this.$message.error(response.msg || '闄勪欢涓婁紶澶辫触')
+ }
+ },
+ handleAttachmentError() {
+ this.$message.error('闄勪欢涓婁紶澶辫触')
},
// 鍏抽棴璁板綍寮规
closeDialog1() {
@@ -476,7 +504,7 @@
})
},
getUserList() {
- selectUserCondition().then(res => {
+ selectUserCondition({ type: 4 }).then(res => {
this.userList = res.data
})
},
@@ -560,4 +588,10 @@
:deep(.red-row td) {
background: #ffcccc !important;
}
+
+.row-upload {
+ display: inline-block;
+ margin-left: 10px;
+ vertical-align: middle;
+}
</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/files.vue b/src/views/CNAS/resourceDemand/device/component/files.vue
index 92270c4..3e7a136 100644
--- a/src/views/CNAS/resourceDemand/device/component/files.vue
+++ b/src/views/CNAS/resourceDemand/device/component/files.vue
@@ -203,7 +203,7 @@
<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-form-item label="浠櫒鍚嶇О:" prop="enDeviceName">
<el-input v-model="editData.enDeviceName" size="small"></el-input>
</el-form-item>
</div>
diff --git a/src/views/CNAS/resourceDemand/device/component/management.vue b/src/views/CNAS/resourceDemand/device/component/management.vue
index ba198ee..c7841f3 100644
--- a/src/views/CNAS/resourceDemand/device/component/management.vue
+++ b/src/views/CNAS/resourceDemand/device/component/management.vue
@@ -72,7 +72,7 @@
<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-form-item label="浠櫒鍚嶇О:">
<el-input :disabled="isUp" v-model="formData.enDeviceName" size="small"></el-input>
</el-form-item>
</div>
@@ -276,7 +276,7 @@
<el-form-item label="浠櫒鍚嶇О:" required>
<el-input v-model="formData2.deviceName" size="small"></el-input>
</el-form-item>
- <el-form-item label="浠櫒鍚嶇ОEN:">
+ <el-form-item label="浠櫒鍚嶇О:">
<el-input v-model="formData2.enDeviceName" size="small"></el-input>
</el-form-item>
</div>
@@ -560,6 +560,8 @@
{
name: "鏁伴噰閰嶇疆",
type: "text",
+ // 鏁伴噰鍔熻兘灏氭湭瀹炵幇锛屾殏鏃跺鎵�鏈夌敤鎴烽殣钘�
+ showHide: () => false,
clickFun: (row) => {
this.handleConfig(row);
},
--
Gitblit v1.9.3