From efad6058c9c9ee6ba754dc9cc61c8d744cd199b8 Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期一, 06 一月 2025 10:30:31 +0800
Subject: [PATCH] 完成设备模块搬迁
---
src/components/do/a6-device/files.vue | 1187 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 1,179 insertions(+), 8 deletions(-)
diff --git a/src/components/do/a6-device/files.vue b/src/components/do/a6-device/files.vue
index 96e1efa..bd95c1b 100644
--- a/src/components/do/a6-device/files.vue
+++ b/src/components/do/a6-device/files.vue
@@ -1,8 +1,1179 @@
-<!--
- * @Author: licp lichunping@guanfang.com.cn
- * @Date: 2024-07-29 15:43:42
- * @LastEditors: licp lichunping@guanfang.com.cn
- * @LastEditTime: 2024-07-29 15:43:48
- * @FilePath: \center-lims-before\src\components\do\a6-device\files.vue
- * @Description: 杩欐槸榛樿璁剧疆,璇疯缃甡customMade`, 鎵撳紑koroFileHeader鏌ョ湅閰嶇疆 杩涜璁剧疆: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
--->
+<!-- 璁惧妗f -->
+<template>
+ <div class="page">
+ <div class="page-header">
+ <h4><span class="line"></span><span>璁惧妗f</span></h4>
+ <div class="btns">
+ <el-button type="primary" size="small" @click="openEditForm"
+ style="">淇妗f</el-button>
+ <el-button type="primary" size="small" @click="dialogVisible1 = true"
+ style="">娣诲姞闄勪欢</el-button>
+ <el-button type="primary" v-if="isPermission('showDeviceQrCodeButton')" size="small" @click="deviceDialog = true"
+ style="">鏌ョ湅璁惧浜岀淮鐮�</el-button>
+ <el-button type="primary" size="small" @click="handleDownOne"
+ style="">瀵煎嚭</el-button>
+ </div>
+ </div>
+ <el-divider></el-divider>
+ <div class="main_div">
+ <el-row :gutter="20">
+ <el-col :span="6">
+ <!-- 鍔犳椂闂存埑閬垮厤娴忚鍣ㄧ紦瀛橀棶棰� -->
+ <el-image :src="`${javaApi}/img/${Mdata.imageUpload}`" fit="fill" :key="'personalPicture' + timeStamp"
+ style="width: 200px;height: 300px;border: 1px solid #000;border-radius: 10px;margin-left: 30px;margin-top: 20px;">
+ <div slot="error" class="image-slot">
+ <i class="el-icon-picture-outline" style="font-size: 40px;"></i>
+ </div>
+ </el-image>
+ </el-col>
+ <el-col :span="8">
+ <div class="form-item">
+ <label>璁惧鍚嶇О</label>
+ <!-- <p>{{ Mdata.deviceName }}</p> -->
+ <el-tooltip
+ class="item"
+ :content="Mdata.deviceName"
+ >
+ <span class="text-ellipsis" >{{ Mdata.deviceName }}</span>
+ </el-tooltip>
+ </div>
+ <div class="form-item">
+ <label>璁惧绫诲瀷</label>
+ <p>{{ Mdata.largeCategory }}</p>
+ </div>
+
+ <div class="form-item">
+ <label>绠$悊缂栧彿</label>
+ <p>{{ Mdata.managementNumber }}</p>
+ </div>
+ <div class="form-item">
+ <label>鎵�灞為儴闂�</label>
+ <p>{{ Mdata.laboratoryName }}</p>
+ </div>
+ <div class="form-item">
+ <label>鐢熶骇鍘傚</label>
+ <!-- <p>{{ Mdata.manufacturer }}</p> -->
+ <el-tooltip
+ class="item"
+ :content="Mdata.manufacturer"
+ >
+ <span class="text-ellipsis" >{{ Mdata.manufacturer }}</span>
+ </el-tooltip>
+ </div>
+ <div class="form-item">
+ <label>璧勪骇缂栫爜</label>
+ <p class="text-ellipsis">{{ Mdata.assetCode }}</p>
+ </div>
+
+ <div class="form-item">
+ <label>鍑哄巶鏃ユ湡</label>
+ <p>{{ Mdata.acquisitionDate | formaterDateTime }}</p>
+ </div>
+ <div class="form-item">
+ <label>鍚敤鏃ユ湡</label>
+ <p>{{ Mdata.activationDate | formaterDateTime }}</p>
+ </div>
+ <div class="form-item">
+ <label>鏍稿噯鍛ㄦ湡(鏈�)</label>
+ <p>{{ Mdata.calibrationDate }}</p>
+ </div>
+
+ <div class="form-item">
+ <label>鎶ュ簾鏃堕棿</label>
+ <p>{{ handleData() }}</p>
+ </div>
+ <div class="form-item">
+ <label>鍑嗙‘搴﹂噺鍊�</label>
+ <el-tooltip
+ class="item"
+ :content="Mdata.technicalIndicators"
+ >
+ <span class="text-ellipsis">{{ Mdata.technicalIndicators }}</span>
+ </el-tooltip>
+ <!-- <p>{{ Mdata.technicalIndicators }}</p> -->
+ </div>
+ <div class="form-item">
+ <label>缁翠慨璁板綍</label>
+ <p>{{ handleData() }}</p>
+ </div>
+ <div class="form-item">
+ <label>琚巿鏉冧汉</label>
+ <p>{{ Mdata.authorizedPersonName }}</p>
+ </div>
+
+ </el-col>
+ <el-col :span="10">
+ <div class="form-item">
+ <label>瑙勬牸鍨嬪彿</label>
+ <p>{{ Mdata.specificationModel }}</p>
+ </div>
+ <!-- <div class="form-item">
+ <label>缁嗙被</label>
+ <p>{{ handleData() }}</p>
+ </div> -->
+ <div class="form-item">
+ <label>鍑哄巶缂栧彿</label>
+ <p>{{ Mdata.factoryNo }}</p>
+ </div>
+ <div class="form-items">
+ <label>璁惧鐘舵��</label>
+ <el-radio-group v-model="Mdata.deviceStatus" style="margin-left: 10px;">
+ <el-radio :label="0" :disabled="Mdata.deviceStatus != 0">姝e父</el-radio>
+ <el-radio :label="1" :disabled="Mdata.deviceStatus != 1">缁翠慨</el-radio>
+ <el-radio :label="2" :disabled="Mdata.deviceStatus != 2">鍋滅敤</el-radio>
+ <el-radio :label="3" :disabled="Mdata.deviceStatus != 3">鎶ュ簾</el-radio>
+ </el-radio-group>
+ </div>
+ <div class="form-item">
+ <label>瀛樻斁鐐�</label>
+ <p>{{ Mdata.storagePoint }}</p>
+ </div>
+ <div class="form-item">
+ <label>浜у湴</label>
+ <p>{{ Mdata.origin }}</p>
+ </div>
+ <div class="form-item">
+ <label>妫�楠岄」</label>
+ <el-tooltip
+ class="item"
+ effect="dark"
+ :content="Mdata.insProductItem"
+ placement="top"
+ >
+ <span class="text-ellipsis" >{{ Mdata.insProductItem }}</span>
+ </el-tooltip>
+ </div>
+ <div class="form-item">
+ <label>璐疆鏃ユ湡</label>
+ <p>{{ Mdata.acquisitionDate | formaterDateTime }}</p>
+ </div>
+
+ <div class="form-item">
+ <label>鏈�杩戞函婧愭棩鏈�</label>
+ <p>{{ Mdata.lastCalibrationDate | formaterDateTime }}</p>
+ </div>
+ <div class="form-item">
+ <label>閲囪喘璐圭敤(鍏�)</label>
+ <p>{{ Mdata.unitPrice }}</p>
+ </div>
+ <div class="form-item">
+ <label>鍋滅敤鏃堕棿</label>
+ <p>{{ Mdata.nextCalibrationDate | formaterDateTime }}</p>
+ </div>
+ <div class="form-item">
+ <label>璁惧璐熻矗浜�</label>
+ <p>{{ Mdata.equipmentManagerName }}</p>
+ </div>
+ <div class="form-item">
+ <label>楠屾敹璁板綍</label>
+ <p>{{ handleData() }}</p>
+ </div>
+ <div class="form-item">
+ <label>鏍稿噯璇佷功</label>
+ <p>{{ Mdata.calibrateNo }}</p>
+ </div>
+ </el-col>
+ </el-row>
+ <h4 style="margin-bottom: 10px;margin-top: 10px;"><span class="line"></span><span>闄勪欢鍜岀浉鍏虫枃妗�</span></h4>
+ <el-table height="200px" :data="tableDataA">
+ <el-table-column header-align="center" align="center" prop="prop" label="搴忓彿" type="index" width="60" />
+ <el-table-column prop="documentType" label="绫诲瀷" min-width="100">
+ <template v-slot="scope">
+ {{ scope.row.documentType === '0' ? '闄勪欢' : scope.row.documentType === '1' ? '鏂囨。' : '' }}
+ </template>
+ </el-table-column>
+ <el-table-column prop="name" label="鍚嶇О" min-width="150" />
+ <el-table-column prop="number" label="缂栧彿" min-width="150" />
+ <el-table-column prop="version" label="鐗堟湰" min-width="80" />
+ <el-table-column prop="quantity" label="浠芥暟" min-width="80" />
+ <el-table-column prop="pageCount" label="椤电爜" min-width="80" />
+ <el-table-column prop="provider" label="鎻愪緵鑰�" min-width="150" />
+ <el-table-column prop="provideDate" label="鎻愪緵鏃ユ湡" min-width="150" />
+ <el-table-column prop="comments" label="澶囨敞" min-width="150" />
+ <el-table-column fixed="right" label="鎿嶄綔" min-width="180">
+ <template slot-scope="scope">
+ <el-button type="text" size="small" @click="handleAttachmentClick(scope.row)">涓嬭浇闄勪欢</el-button>
+ <el-button type="text" size="small" @click="handleViewClick(scope.row)">鏌ョ湅</el-button>
+ <el-button type="text" size="small" @click="handleDeleteClick(scope.row)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <!-- 淇 -->
+ <el-dialog title="淇妗f" top="5vh" :visible.sync="dialogVisible" width="70%" @open="openFileRevisionDialog"
+ :before-close="handleClose">
+ <el-row style="display:flex;justify-content: space-around;">
+ <!-- 宸﹁竟甯冨眬 -->
+ <el-col :span="7">
+ <el-col>
+ <!-- 鍥剧墖 -->
+ <el-image class="img" style="width:100%;height: 320px;margin-bottom:16px"
+ :src="javaApi + '/img/' + editData.imageUpload">
+ <div slot="error" class="image-error" style="width: calc(100% -2px);
+ height: 318px;
+ border-radius: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid #EEEEEE;">
+ <i class="el-icon-picture-outline" style="font-size:60px;color:#666666;"></i>
+ </div>
+ </el-image>
+ <!-- 琛ㄥ崟 -->
+ <el-form :model="editData" label-width="120px" ref="rules1" :rules="rules1">
+ <el-form-item label="浠櫒鍚嶇О:" prop="deviceName">
+ <el-input v-model="editData.deviceName" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="浠櫒鍚嶇ОEN:" prop="enDeviceName">
+ <el-input v-model="editData.enDeviceName" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="瑙勬牸鍨嬪彿:" prop="specificationModel">
+ <el-input v-model="editData.specificationModel" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鐢熶骇鍘傚:">
+ <el-input v-model="editData.manufacturer" size="small"></el-input>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ </el-col>
+ <!-- 涓棿甯冨眬 -->
+ <el-col :span="7">
+ <el-form :model="editData" label-width="116px" ref="rules2" :rules="rules1">
+ <el-form-item label="鏍″噯鏈嶅姟鏈烘瀯:">
+ <el-input v-model="editData.calibrationServices" disabled size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="璧勪骇缂栫爜:">
+ <el-input v-model="editData.assetCode" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="浜у湴:">
+ <el-input v-model="editData.origin" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鍑哄巶缂栧彿:">
+ <el-input v-model="editData.factoryNo" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="绠$悊缂栧彿:" prop="managementNumber">
+ <el-input v-model="editData.managementNumber" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="璐疆鏃ユ湡:">
+ <el-date-picker style="width:100%" v-model="editData.acquisitionDate" type="date" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="鍚敤鏃ユ湡:" prop="activationDate">
+ <el-date-picker style="width:100%" v-model="editData.activationDate" type="date" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="璐熻矗浜�:">
+ <el-select v-model="editData.equipmentManager" placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in responsiblePersonList" :key="item.name" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="瀛樻斁鐐�:">
+ <el-input v-model="editData.storagePoint" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="鎶�鏈寚鏍�:">
+ <el-input v-model="editData.technicalIndicators" :rows="7" type="textarea" size="small"></el-input>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ <!-- 鍙宠竟甯冨眬 -->
+ <el-col :span="7">
+ <el-form :model="editData" label-width="140px" ref="ruleForm" :rules="rules1">
+ <!-- 瀹為獙瀹ゅ垪琛� -->
+ <el-form-item label="鎵�灞為儴闂�:">
+ <el-select v-model="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
+ clearable></el-cascader>
+ </el-form-item>
+ <!-- <el-form-item label="鏈�杩戞牎鍑嗘棩鏈�:">
+ <el-date-picker style="width:100%" v-model="Mdata.latestTraceability" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item> -->
+ <!-- <el-form-item label="涓嬫鏍″噯鏃ユ湡:">
+ <el-date-picker style="width:100%" v-model="Mdata.nextCalibrationDate" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item> -->
+ <el-form-item label="璁惧绫诲瀷:">
+ <el-select v-model="editData.largeCategory" placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in equipmentList" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍗曚环(涓囧厓):">
+ <el-input v-model="editData.unitPrice" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="褰撳墠鐘舵��:" prop="deviceStatus">
+ <el-select v-model="editData.deviceStatus" placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in deviceStatusList" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鏍″噯鍛ㄦ湡锛堟湀锛�:" prop="calibrationDate">
+ <el-input v-model="editData.calibrationDate" size="small"></el-input>
+ </el-form-item>
+ <el-form-item label="琚巿鏉冧汉:">
+ <el-select v-model="editData.authorizedPerson" multiple placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in responsiblePersonList" :key="item.name" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍥剧墖:">
+ <!-- <div
+ style="border: 1px solid #DCDFE6;border-radius:4px;height:32px;lineHeight:32px;display:flex;justify-content: space-around;font-size: 13px;">
+ <div v-show="Mdata.imageName" class="picName">{{ Mdata.imageName }}</div>
+ <el-upload :action="action" :on-success="handleSuccessUpImg2" :show-file-list="false"
+ accept='image/jpg,image/jpeg,image/png' :headers="headers" :on-change="beforeUpload"
+ :on-error="onError" ref='upload'>
+ <el-button type="text" style="height:30px;padding-top:8px"><span v-if="Mdata.imageName"></span></el-button>
+ </el-upload>
+ </div> -->
+
+ <div>
+ <div v-show="editData.imageName" class="picName">{{ editData.imageName }}</div>
+ <el-upload :action="action" :on-success="handleSuccessUpImg2" :show-file-list="false"
+ accept='image/jpg,image/jpeg,image/png' :headers="headers" :on-change="beforeUpload"
+ :on-error="onError" ref='upload' class="avatar-uploader"
+ >
+ <img v-if="editData.imageUpload" :src="javaApi + '/img/' + editData.imageUpload" class="avatar">
+ <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+ </el-upload>
+ </div>
+ </el-form-item>
+ </el-form>
+ </el-col>
+ </el-row>
+ <span slot="footer" class="dialog-footer">
+ <el-row>
+ <el-button @click="handleClose">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitForm" :loading="upLoad">纭� 瀹�</el-button>
+ </el-row>
+ </span>
+ </el-dialog>
+ <el-dialog title="娣诲姞璁惧闄勪欢" top="5vh" v-if="dialogVisible1" :visible.sync="dialogVisible1" width="40%">
+ <el-form ref="form" :model="addFile" label-width="120px">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="缁存姢绫诲瀷锛�">
+ <el-radio-group v-model="addFile.documentType">
+ <el-radio :label="0">闄勪欢</el-radio>
+ <el-radio :label="1">鏂囨。</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="妗f鍚嶇О锛�">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addFile.name"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="搴撳彿/璧勪骇缂栧彿:">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addFile.number"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐗堟湰锛�">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addFile.version"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浠芥暟锛�">
+ <el-input-number v-model="addFile.quantity" controls-position="right" style="width: 100%;" size="small"
+ :min="0" :max="10"></el-input-number>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="椤电爜锛�">
+ <el-input-number v-model="addFile.pageCount" controls-position="right" style="width: 100%;" size="small"
+ :min="0" :max="10"></el-input-number>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎻愪緵鑰咃細">
+ <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addFile.provider"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="褰掓。鏃ユ湡锛�">
+ <el-date-picker type="date" style="width:100%" placeholder="璇烽�夋嫨鏃ユ湡" size="small" v-model="addFile.archiveDate"
+ format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="澶囨敞锛�">
+ <el-input type="textarea" :rows="2" size="small" v-model="addFile.comments"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="闄勪欢锛�" style="float: left;">
+ <el-upload class="upload-demo" :action="action" :headers="headers" ref="uploadFile" :on-error="onError"
+ :on-remove="handleRemove" :on-success="onSuccess" :before-remove="beforeRemove" multiple :limit="1"
+ :on-exceed="handleExceed" :file-list="fileList">
+ <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-row>
+ <el-button @click="dialogVisible1 = false" size="small">鍙� 娑�</el-button>
+ <el-button type="primary" @click="saveRecord" size="small" :loading="isLoading">{{ isAddFileUpdate == true ?
+ '鏇存柊' :
+ '纭� 瀹�' }}</el-button>
+ </el-row>
+ </span>
+ </el-dialog>
+ <el-dialog
+ title="璁惧浜岀淮鐮�"
+ :visible.sync="deviceDialog"
+ top="5vh"
+ width="30%">
+ <div style="width:90%;text-align: right;">
+ <el-button type="primary" size="mini" @click="clickGeneratePicture">涓嬭浇鍥剧墖</el-button>
+ <el-button type="primary" size="mini" @click="labelPrint">鏍囩鎵撳嵃</el-button>
+ </div>
+ <div class="device-main" ref="deviceQrCode" id="deviceCode">
+ <div class="device-center" >
+ <p class="device-title">{{Mdata.deviceName}}</p>
+ <div class="device-footer">
+ <div>
+ <vueQr class="qr-code" :text="'https://zttx-lims.ztt.cn:8021/lims/qr/qrScan?code='+Mdata.managementNumber+'&type=device'" :size="200" :margin="10"></vueQr>
+ </div>
+ <div class="device-number">
+ <span class="device-text">璁惧缂栫爜:</span>
+ <span class="device-text">{{Mdata.managementNumber}}</span>
+ </div>
+ <div class="device-name">
+ <span class="device-text">璁惧鍨嬪彿:</span>
+ <span class="device-text">{{Mdata.specificationModel}}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import { MessageBox } from 'element-ui'
+import ValueTable from '../../tool/value-table.vue'
+import fileDownload from '../../../util/file'
+import vueQr from 'vue-qr'
+import PrintJS from 'print-js'
+import domtoimage from 'dom-to-image';
+import {isPermission} from '../../../util/auth'
+export default {
+ filters:{
+ formaterDateTime(dateTime){
+ if(dateTime === undefined || dateTime === null || dateTime === ''){
+ return dateTime
+ }
+ return dateTime.split(" ")[0]
+ }
+ },
+ props: {
+ clickNodeVal: {
+ type: Object,
+ default: () => {
+ return {};
+ }
+ }
+ },
+ components: {
+ ValueTable,
+ vueQr
+ },
+ data() {
+ return {
+ isPermission:isPermission,
+ deviceDialog: false,//鏌ョ湅璁惧浜岀淮鐮佸脊妗�
+ rules1: {
+ deviceName: [
+ { required: true, message: '璇疯緭鍏ヤ华鍣ㄥ悕绉�', trigger: 'blur' },
+ ],
+ enDeviceName: [
+ { required: true, message: '璇疯緭鍏ヤ华鍣ㄥ悕绉癊N', trigger: 'blur' },
+ ],
+ specificationModel: [
+ { required: true, message: '璇疯緭鍏ヨ鏍煎瀷鍙�', trigger: 'blur' },
+ ],
+ managementNumber: [
+ { required: true, message: '璇疯緭鍏ョ鐞嗙紪鍙�', trigger: 'blur' },
+ ],
+ activationDate: [
+ { required: true, message: '璇疯緭鍏ュ惎鐢ㄦ棩鏈�', trigger: 'blur' },
+ ],
+ deviceStatus: [
+ { required: true, message: '璇疯緭鍏ュ綋鍓嶇姸鎬�', trigger: 'blur' },
+ ],
+ calibrationDate: [
+ { required: true, message: '璇疯緭鍏ユ牎鍑嗗懆鏈�(鏈�)', trigger: 'blur' },
+ ],
+ },
+ // dateForm: {
+
+ // },
+ fileList: [], // 娣诲姞闄勪欢涓婁紶鏂囦欢鍒楄〃
+ timeStamp: '', // 缁欏浘鐗囨坊鍔爇ey锛屽湪姣忔鍔犺浇椤甸潰鐨勬椂鍊欐柊寤烘椂闂存埑
+ equipmentManager: [],
+ formLabelWidth: '100px',
+ dialogVisible1: false,
+ recordNumber: '',
+ inLoading: false, // 鎺у埗涓婁紶鎸夐挳鍔犺浇鐘舵��
+ isLoading: false, // 鎺у埗纭畾鎸夐挳鍔犺浇鐘舵��
+ formData: {},
+ tableDataA: [],
+ num: 1,
+ //娣诲姞闄勪欢鏁版嵁鏀堕泦
+ addFile: {
+ documentType: '', // 缁存姢绫诲瀷
+ archiveDate: null, // 褰掓。鏃ユ湡
+ name: '', // 妗f鍚嶇О
+ number: '', // 搴撳彿/璧勪骇缂栧彿
+ version: '', // 鐗堟湰
+ quantity: 1, // 浠芥暟
+ pageCount: 1, // 椤电爜
+ provider: '', // 鎻愪緵鑰�
+ comments: "", // 澶囨敞
+ fileName: "", // 鏂囦欢鍘熷悕绉�
+ systemFileName: "", // 绯荤粺鐢熸垚鍚嶇О
+ },
+ componentData: {
+ entity: { name: "", orderBy: { field: "id", order: "asc" } },
+ page: { current: "1", size: "80" }
+ },
+ upIndex: 0,
+ dialogVisible: false,
+ dialogVisible1: false,
+ inLoading: false,
+ upLoad: false,
+ responsiblePersonList: [],
+ subordinateDepartmentsList: [],
+ options: [],
+ equipmentList: [],
+ deviceStatusList: [],
+ props: { multiple: true, emitPath: false, value: 'id', label: 'name' },
+ // 鏀堕泦璁惧妗f鏁版嵁
+ Mdata: {
+ deviceName: null
+ },
+ isAddFileUpdate: false,
+ editData: {
+ authorizedPerson: [],
+ },
+ }
+ },
+ computed: {
+ headers() {
+ return {
+ 'token': sessionStorage.getItem('token')
+ }
+ },
+ action() {
+ return this.javaApi + this.$api.deviceScope.uploadFile
+ }
+ },
+ mounted() {
+ // 鏀堕泦鏁版嵁
+ this.getList(this.clickNodeVal.value)
+ // 鑾峰彇鐩稿叧鏂囨。鐨勬暟鎹�
+ this.getPage()
+ this.timeStamp = Date.now()
+ },
+ methods: {
+ /**
+ * 灏嗛〉闈㈡寚瀹氳妭鐐瑰唴瀹硅浆涓哄浘鐗�
+ * 1.鎷垮埌鎯宠杞崲涓哄浘鐗囩殑鍐呭鑺傜偣DOM锛�
+ * 2.杞崲锛屾嬁鍒拌浆鎹㈠悗鐨刢anvas
+ * 3.杞崲涓哄浘鐗�
+ */
+ clickGeneratePicture() {
+ const _than = this
+ domtoimage.toPng(_than.$refs.deviceQrCode,{ quality: 1,width:440,}).then(function (dataUrl) {
+ // 灏嗚浆鎹㈠悗鐨勫浘鍍忔暟鎹瓨鍌ㄤ负 data URL
+ fileDownload.downloadIamge(dataUrl,_than.Mdata.deviceName)
+ });
+ },
+ //鎵撳嵃璁惧浜岀淮鐮�
+ labelPrint(){
+ PrintJS({
+ printable: 'deviceCode',//椤甸潰
+ type: "html",//鏂囨。绫诲瀷
+ maxWidth:360,
+ css: ['/static/css/device-print.css'],
+ style: '@page { size: auto; margin: 0mm;}',
+ targetStyles: ["*"], // 浣跨敤dom鐨勬墍鏈夋牱寮忥紝寰堥噸瑕�
+ });
+ },
+ openFileRevisionDialog() {
+ // 鑾峰彇妗f淇璐熻矗浜轰笅鎷夋鏁版嵁
+ this.selectDevicePrincipal()
+ // 鑾峰彇妗f淇鎵�灞為儴闂ㄤ笅鎷夋鏁版嵁
+ this.obtainItemParameterList()
+ // 鑾峰彇妗f淇璁惧鐘舵�佷笅鎷夋鏁版嵁
+ this.selectEnumByCategory()
+ // 鑾峰彇妗f淇妫�楠岄」鐩骇鑱斿脊妗嗘暟鎹�
+ this.getInsProductIds()
+ },
+ //闄勪欢鍜岀浉鍏虫枃妗d簨浠�
+ handleAttachmentClick(row) {
+ console.log(row)
+ if (row.fileName && row.documentType == 0) {
+ const fileUrl = this.javaApi + '/img/' + row.fileName;
+ fileDownload.downloadIamge(fileUrl, row.systemFileName)
+ } else if (row.fileName && row.documentType == 1) {
+ const url = this.javaApi+'/word/'+ row.fileName
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = row.fileName;
+ link.click();
+ this.$message.success('涓嬭浇鎴愬姛')
+ } else {
+ this.$message.warning('鏈笂浼犳枃浠讹紒')
+ }
+ },
+ handleViewClick(row) {
+ this.isAddFileUpdate = true
+ this.addFile = { ...row }
+ this.dialogVisible1 = true
+ if (row.fileName) {
+ const obj = Object.assign({
+ name: row.fileName,
+ url: row.fileName,
+ status: 'success',
+ uid: Date.now(),
+ })
+ this.fileList.push(obj)
+ }
+ },
+ handleDeleteClick(row) {
+ // 鍒犻櫎閫昏緫
+ MessageBox.confirm('纭畾瑕佸垹闄よ璁板綍鍚楋紵', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning',
+ }).then(() => {
+ this.$axios.delete(this.$api.getDocuments.list + "/" + row.id).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.getPage()
+ }
+ })
+ }).catch(() => {
+ this.$message.info('宸插彇娑堝垹闄�')
+ })
+ },
+ saveRecord() {
+ //杞崲鏁版嵁
+ this.addFile.deviceId = this.clickNodeVal.value
+ let obj= this.addFile.systemFileName
+ this.addFile.systemFileName = obj.name
+ this.addFile.fileName = obj.url
+
+ // 鏇存柊
+ if (this.isAddFileUpdate) {
+ this.$axios.put(this.$api.getDocuments.updateDocument, this.addFile, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ if (res.code == 200) {
+ this.$message.success('鏇存柊鎴愬姛')
+ this.dialogVisible1 = false;
+ this.getPage()
+ }
+ })
+ } else {
+ // 鏂板
+ this.$axios.post(this.$api.getDocuments.list, this.addFile).then(res => {
+ if (res.code == 200) {
+ this.$message.success('淇濆瓨鎴愬姛')
+ this.dialogVisible1 = false;
+ this.getPage()
+ }
+ })
+ }
+ },
+ onSuccess(response, file, fileList) {
+ if (response.code == 200) {
+ this.addFile.systemFileName = response.data
+ this.addFile.fileName = file.name
+ } else {
+ this.$refs.uploadFile.clearFiles()
+ this.$message.error('涓婁紶澶辫触锛�' + response.message)
+ }
+ },
+ handleRemove(file, fileList) {
+ this.deleteFile(this.addFile.systemFileName)
+ },
+ deleteFile(fileName) {
+ this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + fileName).then(res => {
+ this.$message.success('鍒犻櫎鎴愬姛锛�')
+ })
+ },
+ handleExceed(files, fileList) {
+ this.$message.warning(`褰撳墠闄愬埗閫夋嫨 1 涓枃浠讹紝鏈閫夋嫨浜� ${files.length} 涓枃浠讹紝鍏遍�夋嫨浜� ${files.length + fileList.length} 涓枃浠禶);
+ },
+ beforeRemove(file, fileList) {
+ return this.$confirm(`纭畾绉婚櫎 ${file.name}锛焋);
+ },
+ // 鑾峰彇鐩稿叧鏂囨。鏁版嵁鐨刟pi
+ getPage() {
+ this.$axios.get(this.$api.getDocuments.get + "/" + this.clickNodeVal.value).then(res => {
+ if (res.code == 200)
+ this.tableDataA = res.data
+ })
+ },
+ // 鏀堕泦鏁版嵁
+ getList(id) {
+ this.$axios
+ .get(
+ this.$api.deviceScope.selectDeviceByCode + "?id=" + id)
+ .then(res => {
+ // 灏嗗垎绫诲垪琛ㄧ殑淇℃伅瀛樿捣鏉�
+ if (res.code == 200) {
+ this.Mdata = res.data;
+ this.Mdata.insProductIds = this.Mdata.insProductIds.split(',')
+ this.Mdata.authorizedPerson = JSON.parse(this.Mdata.authorizedPerson)
+ }
+ });
+ },
+ handleData(m) {
+ if (m) {
+ return m
+ } else {
+ return '-'
+ }
+ },
+ handleClose() {
+ this.dialogVisible = false
+ },
+ //鎵撳紑淇妗f寮规
+ openEditForm(){
+ this.editData = JSON.parse(JSON.stringify(this.Mdata))
+ this.$nextTick(()=>{
+ this.dialogVisible = true
+ })
+ },
+ //淇妗f
+ submitForm() {
+ let flag = true
+ this.$refs['rules1'].validate((valid) => {
+ if (!valid) {
+ flag = false;
+ return false;
+ }
+ });
+ this.$refs['rules2'].validate((valid) => {
+ if (!valid) {
+ flag = false;
+ return false;
+ }
+ });
+ this.$refs['ruleForm'].validate((valid) => {
+ if (!valid) {
+ flag = false;
+ return false;
+ }
+ });
+ if(!flag) {
+ return;
+ }
+ delete this.editData.nextCalibrationDate
+ delete this.editData.createTime
+ delete this.editData.updateTime
+ delete this.editData.createUser
+ delete this.editData.updateUser
+ delete this.editData.orderBy
+ // this.Mdata.equipmentManager = 1;
+
+ this.editData.userAllow = this.equipmentManager.toString();
+ this.editData.insProductIds = Array.isArray(this.editData.insProductIds)
+ ? this.editData.insProductIds.join(',')
+ : '';
+ this.upLoad = true;
+ this.editData.authorizedPerson = JSON.stringify(this.editData.authorizedPerson)
+ this.$axios.post(this.$api.deviceScope.upDeviceParameter, this.editData, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ if (res.code === 201) {
+ this.upLoad = false
+ return
+ }
+ this.$message.success('淇敼鎴愬姛')
+ this.upLoad = false
+ this.getList(this.clickNodeVal.value)
+ this.dialogVisible = false
+ }).catch(e => {
+ this.$message.error('淇敼澶辫触')
+ this.dialogVisible = false
+ this.upLoad = false
+ })
+ },
+ // 瀵煎嚭
+ handleDownOne(row) {
+ this.outLoading = true
+ this.$axios.get(this.$api.deviceCheck.exportDeviceFile + '?deviceId=' + this.clickNodeVal.value, {
+ responseType: "blob"
+ }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
+ let reader = new FileReader();
+ reader.readAsText(blob, 'utf-8');
+ reader.onload = () => {
+ try {
+ let result = JSON.parse(reader.result);
+ if (result.message) {
+ this.$message.error(result.message);
+ } else {
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '璁惧妗f鍗�.doc';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ } catch (err) {
+ console.log(err);
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = '璁惧妗f鍗�.doc';
+ link.click();
+ this.$message.success('瀵煎嚭鎴愬姛')
+ }
+ }
+ })
+ },
+ handleSuccessUpImg2(response) {
+ if (response.code == 200) {
+ this.$nextTick(() => {
+ this.editData.imageUpload = response.data.url;
+ this.editData.imageName = response.data.name;
+ console.log(this.javaApi + 'img/' + this.editData.imageUpload);
+
+ })
+ }
+ },
+ beforeUpload(file) {
+ if (file.size > 1024 * 1024 * 10) {
+ this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+ this.$refs.upload.clearFiles()
+ return false;
+ } else {
+ return true;
+ }
+ },
+ onError(err, file, fileList) {
+ this.$message.error('涓婁紶澶辫触')
+ this.$refs.upload.clearFiles()
+ },
+ // 鑾峰彇璐熻矗浜哄垪琛�
+ selectDevicePrincipal() {
+ this.$axios.post(this.$api.user.selectUserList, this.componentData, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ this.responsiblePersonList = res.data.body.records;
+ })
+ },
+ obtainItemParameterList() {
+ this.$axios.get(this.$api.laboratoryScope.obtainItemParameterList).then(res => {
+ let data = []
+ res.data.forEach(a => {
+ data.push({
+ label: a.laboratoryName,
+ value: a.id
+ })
+ })
+ this.subordinateDepartmentsList = data
+ })
+ },
+ getInsProductIds() {
+ this.$axios.post(this.$api.capacityScope.getInsProduction).then(res => {
+ this.options = res.data.map((m, i) => {
+ m.id = m.name;
+ return m
+ })
+ this.options.forEach(item => {
+ if (item.children.length == 0) {
+ item.children = null;
+ } else {
+ item.children.forEach(m => {
+ if (m.children.length == 0) {
+ m.children = null;
+ } else {
+ m.children.forEach(n => {
+ if (n.children && n.children.length == 0) {
+ n.children = null;
+ }
+ })
+ }
+ })
+ }
+ })
+ })
+ },
+ // 鑾峰彇瀛楀吀
+ selectEnumByCategory() {
+ this.$axios.post(this.$api.enums.selectEnumByCategory, {
+ category: "璁惧鐘舵��"
+ }).then(res => {
+ this.deviceStatusList = res.data
+ this.deviceStatusList.forEach(a => {
+ if (!isNaN(a.value)) {
+ a.value = parseInt(a.value)
+ }
+ })
+ })
+ this.$axios.post(this.$api.enums.selectEnumByCategory, {
+ category: "璁惧鍒嗙被"
+ }).then(res => {
+ this.equipmentList = res.data
+ })
+ },
+ },
+ watch: {
+ // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+ clickNodeVal(newVal) {
+ if (newVal.value) {
+ this.getList(newVal.value)
+ this.getPage()
+ }
+ },
+ dialogVisible1(newVal) {
+ if (newVal == false) {
+ this.isAddFileUpdate = false
+ this.addFile = {}
+ this.fileList = []
+ }
+ }
+ }
+}
+</script>
+
+<style scoped>
+.main_div {
+ height: calc(100vh - 15em);
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.page {
+ width: 100%;
+ height: 100%;
+}
+
+.page-header {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 10px;
+}
+
+h4 {
+ display: flex;
+ align-items: center;
+}
+
+h4 .line {
+ display: inline-block;
+ width: 3px;
+ height: 16px;
+ background: #3A7BFA;
+ margin-right: 4px;
+}
+
+.tables {
+ width: 100%;
+}
+
+.el-image {
+ position: relative;
+}
+
+.el-icon-picture-outline {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ transform: translate(-50%, -50%);
+}
+
+.form-item {
+ line-height: 34px;
+ display: flex;
+ align-items: center;
+ font-size: 14px;
+}
+
+.text-ellipsis {
+ display: inline-block;
+ width: 200px; /* 鎴栬�呮偍鍙互璁剧疆涓�涓叿浣撶殑瀹藉害鍊� */
+ box-sizing: border-box; /* 纭繚padding鍜宐order涓嶅奖鍝嶅厓绱犵殑鎬诲搴� */
+ white-space: nowrap; /* 绂佹鏂囨湰鎹㈣ */
+ text-overflow: ellipsis; /* 浣跨敤鐪佺暐鍙疯〃绀鸿鎴柇鐨勬枃鏈� */
+ overflow: hidden; /* 闅愯棌瓒呭嚭瀹瑰櫒鐨勫唴瀹� */
+}
+
+.form-items {
+ line-height: 34px;
+ /* display: flex; */
+ /* align-items: center; */
+ margin-left: 15%;
+ font-size: 14px;
+}
+
+
+.form-item label {
+ min-width: 130px;
+ display: inline-block;
+ text-align: right;
+ margin-right: 20px;
+ color: #999;
+}
+
+.form-item p {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-line-clamp: 3;
+ /* 杩欓噷璁剧疆浣犳兂瑕佺殑琛屾暟 */
+ -webkit-box-orient: vertical;
+}
+
+.btns {
+ display: flex;
+ align-items: center;
+}
+
+.search_thing,
+.check_thing {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ gap: 1rem;
+}
+
+.search_label,
+.check_label {
+ width: 120px;
+}
+
+.search_input,
+.check_data,
+.check_input {
+ flex-grow: 1;
+}
+
+.avatar-uploader .el-upload {
+ border: 1px dashed #190505;
+ border-radius: 6px;
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+ }
+ .avatar-uploader .el-upload:hover {
+ border-color: #409EFF;
+ }
+ .avatar-uploader-icon {
+ font-size: 28px;
+ color: #8c939d;
+ width: 178px;
+ height: 178px;
+ line-height: 178px;
+ text-align: center;
+ }
+ .avatar {
+ width: 178px;
+ height: 178px;
+ display: block;
+ }
+
+.device-main{
+ width:90%;
+ margin:0px 5%;
+ height:460px;
+ padding:25px 0px;
+ background-color: #fff;
+}
+.device-center{
+ width:90%;
+ height:460px;
+ margin:0px 5%;
+ border-radius: 15px;
+ background-color: #fff;
+ overflow: hidden;
+ /* box-shadow: 3px 3px 8px 0 rgba(0, 0, 0, 0.3); */
+ filter: drop-shadow(0px 5px 5px rgba(0,0,0,0.3))
+}
+.device-title{
+ position: relative;
+ top:20px;
+ z-index: 2;
+ font-size: clamp(1rem, 0.582rem + 1.59vw, 1.475rem);
+ font-weight: bold;
+ color: #4f6ab2;
+ width: 100%;
+ height:90px;
+ line-height: 100px;
+ text-align: center;
+}
+.device-footer{
+ width:100%;
+ height:420px;
+ background-color: #3361d0;
+ position: relative
+}
+.device-footer::after{
+ content: "";
+ width: 100%;
+ height: 70px;
+ position: absolute;
+ top:-30px;
+ border-radius: 0 0 50% 50%;
+ background-color: #fff;
+}
+.device-footer .qr-code{
+ width: 55%;
+ height: 200px;
+ position: relative;
+ top: 60px;
+ left:22.5%;
+ background-color: #fff;
+ border-radius: 15px;
+ overflow: hidden;
+}
+.device-number{
+ width:80%;
+ height: 20px;
+ margin-left:20%;
+ position: relative;
+ top: 80px;
+}
+.device-text{
+ color:#fff;
+ font-weight: bold;
+ font-size:100%;
+}
+.device-name{
+ width:80%;
+ margin-left:20%;
+ height: 20px;
+ position: relative;
+ top: 90px;
+}
+</style>
--
Gitblit v1.9.3