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/files.vue | 411 +++++++----
src/views/CNAS/resourceDemand/device/component/management.vue | 679 ++++++++++++--------
src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue | 5
src/views/CNAS/process/method/methodVerification/index.vue | 7
src/views/CNAS/process/method/methodVerification/component/calibrationsFileDia.vue | 0
src/api/cnas/process/method/methodVerification.js | 36 +
src/views/CNAS/process/method/methodVerification/component/formDIa.vue | 131 +++
src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue | 5
src/api/cnas/process/ensureResults/qualitySupervise.js | 8
/dev/null | 193 ------
src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue | 186 +++++
src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue | 242 ++----
src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue | 5
src/views/CNAS/process/method/methodVerification/component/ViewDeviceDialog.vue | 2
src/views/CNAS/process/method/methodVerification/component/viewWorkPermitDia.vue | 0
src/views/CNAS/process/method/methodVerification/component/ViewTestRecord.vue | 2
16 files changed, 1,088 insertions(+), 824 deletions(-)
diff --git a/src/api/cnas/process/ensureResults/qualitySupervise.js b/src/api/cnas/process/ensureResults/qualitySupervise.js
index 8ab0823..7d767ed 100644
--- a/src/api/cnas/process/ensureResults/qualitySupervise.js
+++ b/src/api/cnas/process/ensureResults/qualitySupervise.js
@@ -17,6 +17,14 @@
data: query
})
}
+// 鐩戠潱璁″垝涓嬪彂
+export function issueQualitySupervise(query) {
+ return request({
+ url: '/qualitySupervise/issueQualitySupervise',
+ method: 'post',
+ data: query
+ })
+}
// 璐ㄩ噺鐩戠潱骞磋鍒掑垪琛�
export function exportQualitySupervise(query) {
return request({
diff --git a/src/api/cnas/process/method/methodVerification.js b/src/api/cnas/process/method/methodVerification.js
index 671363e..250aafe 100644
--- a/src/api/cnas/process/method/methodVerification.js
+++ b/src/api/cnas/process/method/methodVerification.js
@@ -64,3 +64,39 @@
params: query
})
}
+
+//鑾峰彇鐢ㄦ埛鍒楄〃
+export function selectUserCondition(query) {
+ return request({
+ url: "/system/newUser/selectUserCondition",
+ method: "get",
+ params: query,
+ });
+}
+
+// 閫氳繃璁惧鍒嗙被鑾峰彇璁惧鍒楄〃
+export function deviceScopeSearch(query) {
+ return request({
+ url: '/deviceScope/search',
+ method: 'get',
+ params: query
+ })
+}
+
+// 鍘熷璁板綍鍒楄〃
+export function getVerifyMethodFileList(query) {
+ return request({
+ url: '/processMethodVerify/getVerifyMethodFileList',
+ method: 'get',
+ params: query
+ })
+}
+
+// 鍒犻櫎楠岃瘉鍘熷璁板綍鍒楄〃
+export function delVerifyMethodFileList(query) {
+ return request({
+ url: '/processMethodVerify/delVerifyMethodFileList',
+ method: 'delete',
+ params: query
+ })
+}
diff --git a/src/api/cnas/process/method/standardMethodsChange.js b/src/api/cnas/process/method/standardMethodsChange.js
deleted file mode 100644
index e4579aa..0000000
--- a/src/api/cnas/process/method/standardMethodsChange.js
+++ /dev/null
@@ -1,102 +0,0 @@
-// 瀹為獙瀹ょ殑妫�娴嬭兘鍔涙。妗堢浉鍏虫帴鍙�
-import request from "@/utils/request";
-
-//鏍囧噯鏂规硶鏇存柊楠岃瘉鍒楄〃
-export function pagesMethodVerify(query) {
- return request({
- url: "/processMethodVerify/pagesMethodVerify",
- method: "get",
- params: query,
- });
-}
-
-//鑾峰彇鐢ㄦ埛鍒楄〃
-export function selectUserCondition(query) {
- return request({
- url: "/system/newUser/selectUserCondition",
- method: "get",
- params: query,
- });
-}
-
-//鏌ヨ鏍囧噯鏂规硶楠岃瘉璇︽儏
-export function getMethodVerifyOne(query) {
- return request({
- url: "/processMethodVerify/getMethodVerifyOne",
- method: "get",
- params: query,
- });
-}
-
-// 閫氳繃璁惧鍒嗙被鑾峰彇璁惧鍒楄〃
-export function deviceScopeSearch(query) {
- return request({
- url: '/deviceScope/search',
- method: 'get',
- params: query
- })
-}
-
-// 鏂板鏍囧噯鏂规硶楠岃瘉
-export function addMethodVerify(data) {
- return request({
- url: "/processMethodVerify/addMethodVerify",
- method: "post",
- data: data,
- });
-}
-
-// 淇敼鏍囧噯鏂规硶楠岃瘉
-export function updateMethodVerify(data) {
- return request({
- url: "/processMethodVerify/updateMethodVerify",
- method: "post",
- data: data,
- });
-}
-
-// 瀵煎嚭鏍囧噯鏂规硶鏇存柊楠岃瘉
-export function exportMethodVerify(query) {
- return request({
- url: '/processMethodVerify/exportMethodVerify',
- method: "get",
- responseType: "blob",
- params: query,
- })
-}
-
-// 楠岃瘉纭
-export function methodVerifyAffirm(query) {
- return request({
- url: '/processMethodVerify/methodVerifyAffirm',
- method: 'get',
- params: query
- })
-}
-
-// 鍒犻櫎鏍囧噯鏂规硶鏇存柊楠岃瘉
-export function delMethodVerify(query) {
- return request({
- url: '/processMethodVerify/delMethodVerify',
- method: 'delete',
- params: query
- })
-}
-
-// 鍘熷璁板綍鍒楄〃
-export function getVerifyMethodFileList(query) {
- return request({
- url: '/processMethodVerify/getVerifyMethodFileList',
- method: 'get',
- params: query
- })
-}
-
-// 鍒犻櫎楠岃瘉鍘熷璁板綍鍒楄〃
-export function delVerifyMethodFileList(query) {
- return request({
- url: '/processMethodVerify/delVerifyMethodFileList',
- method: 'delete',
- params: query
- })
-}
diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue
index 6df339c..0cafc96 100644
--- a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue
+++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/detailFormDialog.vue
@@ -162,8 +162,9 @@
this.$emit('closeDia')
},
getUserList(){
- selectUserCondition({ type: 2 }).then((res) => {
- this.userList = res.data;
+ // 璐ㄩ噺鐩戠潱闈㈠悜鍏ㄥ疄楠屽, 浜哄憳鍒楄〃涓嶆寜閮ㄩ棬绛涢��
+ selectUserCondition({ type: 1 }).then((res) => {
+ this.userList = res.data || [];
})
},
}
diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue
index 4f3ae1d..f3624d5 100644
--- a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue
+++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue
@@ -450,9 +450,10 @@
this.$emit('closeProcessingDia')
},
getAuthorizedPerson() {
- selectUserCondition({ type: 2 }).then((res) => {
+ // 璐ㄩ噺鐩戠潱闈㈠悜鍏ㄥ疄楠屽, 浜哄憳鍒楄〃涓嶆寜閮ㄩ棬绛涢��
+ selectUserCondition({ type: 1 }).then((res) => {
let data = [];
- res.data.forEach((a) => {
+ (res.data || []).forEach((a) => {
data.push({
label: a.name,
value: a.id,
diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue
index e24000f..39e3be1 100644
--- a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue
+++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/recordsDialog.vue
@@ -2,7 +2,7 @@
<div>
<el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
v-model="formDia"
- title="妫�娴嬪伐浣滅洃鐫h褰曡〃"
+ title="鏃ュ父鐩戠潱妫�鏌ヨ褰曡〃"
width="70%" @close="closeRecordsDia">
<el-steps :active="currentStep" align-center finish-status="success">
<el-step title="瀹炴柦"></el-step>
@@ -12,30 +12,9 @@
<table border="1" cellspacing="10" class="tables">
<tr>
<td class="td-title">
- <p><span class="required-span">* </span>妫�娴嬩汉鍛橈細</p>
+ <p><span class="required-span">* </span>鐩戠潱妫�娴嬮」鐩細</p>
</td>
<td colspan="2">
- <el-input v-if="currentStep === 0" v-model="form.testMember"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small">
- </el-input>
- <span v-else class="td-info"> {{ form.testMember }}</span>
- </td>
- <td class="td-title">
- <p><span class="required-span">* </span>鐩戠潱鍛橈細</p>
- </td>
- <td colspan="2">
- <el-select v-if="currentStep === 0" @change="usePersonName" v-model="form.supervisor" placeholder="璇烽�夋嫨" size="small" style="width: 100%">
- <el-option v-for="item in recordUserList" :key="item.userName" :label="item.userName" :value="item.userName"></el-option>
- </el-select>
- <span v-else class="td-info"> {{ form.supervisor }}</span>
- </td>
- </tr>
- <tr>
- <td class="td-title">
- <p><span class="required-span">* </span>妫�娴嬮」鐩細</p>
- </td>
- <td>
<el-input v-if="currentStep === 0" v-model="form.testItem"
placeholder="璇疯緭鍏ュ唴瀹�"
size="small">
@@ -43,19 +22,9 @@
<span v-else class="td-info"> {{ form.testItem }}</span>
</td>
<td class="td-title">
- <p><span class="required-span">* </span>鏍峰搧缂栧彿锛�</p>
+ <p><span class="required-span">* </span>鐩戠潱妫�娴嬫棩鏈燂細</p>
</td>
- <td>
- <el-input v-if="currentStep === 0" v-model="form.sampleNumber"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small">
- </el-input>
- <span v-else class="td-info"> {{ form.sampleNumber }}</span>
- </td>
- <td class="td-title">
- <p><span class="required-span">* </span>妫�娴嬫棩鏈燂細</p>
- </td>
- <td>
+ <td colspan="2">
<el-input v-if="currentStep === 0" v-model="form.testDate"
placeholder="璇疯緭鍏ュ唴瀹�"
size="small">
@@ -65,126 +34,80 @@
</tr>
<tr>
<td class="td-title">
- <p><span class="required-span">* </span>浜哄憳锛�</p>
+ <p><span class="required-span">* </span>鍙楃洃鐫d汉锛�</p>
</td>
- <td colspan="5">
- <el-input v-if="currentStep === 0" v-model="form.personnel"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small">
- </el-input>
- <span v-else class="td-info"> {{ form.personnel }}</span>
+ <td colspan="2">
+ <el-select v-if="currentStep === 0" v-model="superviseeList" multiple filterable collapse-tags
+ placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+ <el-option v-for="item in personList" :key="item.value" :label="item.label"
+ :value="item.label"></el-option>
+ </el-select>
+ <span v-else class="td-info"> {{ form.testMember }}</span>
+ </td>
+ <td class="td-title">
+ <p><span class="required-span">* </span>鐩戠潱鍛橈細</p>
+ </td>
+ <td colspan="2">
+ <el-select v-if="currentStep === 0" v-model="form.supervisor" placeholder="璇烽�夋嫨" size="small" style="width: 100%">
+ <el-option v-for="item in recordUserList" :key="item.userId" :label="item.userName" :value="item.userName"></el-option>
+ </el-select>
+ <span v-else class="td-info"> {{ form.supervisor }}</span>
</td>
</tr>
<tr>
<td class="td-title">
- <p><span class="required-span">* </span>浠櫒璁惧锛�</p>
+ <p>鐩戠潱鍐呭锛�</p>
</td>
<td colspan="5">
- <el-input v-if="currentStep === 0" v-model="form.device"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small">
- </el-input>
- <span v-else class="td-info"> {{ form.device }}</span>
+ <template v-if="currentStep === 0">
+ <div v-for="(rowItems, rowIndex) in contentRows" :key="rowIndex" style="display: flex;">
+ <el-checkbox v-for="item in rowItems" :key="item" v-model="superviseContentList"
+ :value="item" style="flex: 1;">{{ item }}</el-checkbox>
+ </div>
+ </template>
+ <span v-else class="td-info"> {{ form.superviseContent }}</span>
</td>
</tr>
<tr>
<td class="td-title">
- <p><span class="required-span">* </span>宸ヤ綔鐜锛�</p>
+ <p><span class="required-span">* </span>鐩戠潱璁板綍锛�</p>
</td>
<td colspan="5">
- <el-input v-if="currentStep === 0" v-model="form.environment"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small">
- </el-input>
- <span v-else class="td-info"> {{ form.environment }}</span>
- </td>
- </tr>
- <tr>
- <td class="td-title">
- <p><span class="required-span">* </span>鏍峰搧閲囬泦锛�</p>
- </td>
- <td colspan="5">
- <el-input v-if="currentStep === 0" v-model="form.sampleCollection"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small">
- </el-input>
- <span v-else class="td-info"> {{ form.sampleCollection }}</span>
- </td>
- </tr>
- <tr>
- <td class="td-title">
- <p><span class="required-span">* </span>鏍峰搧鐨勫噯澶囷細</p>
- </td>
- <td colspan="5">
- <el-input v-if="currentStep === 0" v-model="form.samplePreparation"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small">
- </el-input>
- <span v-else class="td-info"> {{ form.samplePreparation }}</span>
- </td>
- </tr>
- <tr>
- <td class="td-title">
- <p><span class="required-span">* </span>妫�娴嬫柟娉曪細</p>
- </td>
- <td colspan="5">
- <el-input v-if="currentStep === 0" v-model="form.detectionMethod"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small">
- </el-input>
- <span v-else class="td-info"> {{ form.detectionMethod }}</span>
- </td>
- </tr>
- <tr>
- <td class="td-title">
- <p><span class="required-span">* </span>妫�娴嬭褰曪細</p>
- </td>
- <td colspan="5">
- <el-input v-if="currentStep === 0" v-model="form.inspectionRecord"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small">
- </el-input>
- <span v-else class="td-info"> {{ form.inspectionRecord }}</span>
- </td>
- </tr>
- <tr>
- <td class="td-title">
- <p><span class="required-span">* </span>妫�娴嬫姤鍛婏細</p>
- </td>
- <td colspan="5">
- <el-input v-if="currentStep === 0" v-model="form.examiningReport"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small">
- </el-input>
- <span v-else class="td-info"> {{ form.examiningReport }}</span>
- </td>
- </tr>
- <tr>
- <td class="td-title">
- <p><span class="required-span">* </span>鐩戠潱鎯呭喌璇勪环锛�</p>
- </td>
- <td colspan="5">
- <el-input v-if="currentStep === 0" v-model="form.supervisionEvaluation"
+ <el-input v-if="currentStep === 0" v-model="form.superviseRecord"
:rows="4"
placeholder="璇疯緭鍏ュ唴瀹�"
size="small"
type="textarea">
</el-input>
- <span v-else class="td-info"> {{ form.supervisionEvaluation }}</span>
+ <span v-else class="td-info"> {{ form.superviseRecord }}</span>
</td>
</tr>
<tr>
<td class="td-title">
- <p><span class="required-span">* </span>涓嶇鍚堝鐞嗘剰瑙侊細</p>
+ <p>瀛樺湪闂锛�</p>
</td>
<td colspan="5">
- <el-input v-if="currentStep === 0" v-model="form.handlingAdvice"
- :rows="4"
+ <el-input v-if="currentStep === 0" v-model="form.problemDesc"
+ :rows="3"
+ placeholder="涓嶇鍚堥棶棰樻弿杩帮紝鏃犲垯濉�滄棤鈥�"
+ size="small"
+ type="textarea">
+ </el-input>
+ <span v-else class="td-info"> {{ form.problemDesc }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>鏁存敼鎰忚锛�</p>
+ </td>
+ <td colspan="5">
+ <el-input v-if="currentStep === 0" v-model="form.rectifyAdvice"
+ :rows="3"
placeholder="璇疯緭鍏ュ唴瀹�"
size="small"
type="textarea">
</el-input>
- <span v-else class="td-info"> {{ form.handlingAdvice }}</span>
+ <span v-else class="td-info"> {{ form.rectifyAdvice }}</span>
</td>
</tr>
<tr>
@@ -235,7 +158,7 @@
</div>
<template #footer><span class="dialog-footer">
<el-button @click="closeRecordsDia">鍙� 娑�</el-button>
- <el-button v-if="currentStep === 0 && userId == supervisedUserId" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+ <el-button v-if="currentStep === 0 && canSubmitRecord" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
<el-button v-if="currentStep === 1 && userId == ratifyUserId" :loading="editLoad" @click="handleEdit(0)">涓嶉�氳繃</el-button>
<el-button v-if="currentStep === 1 && userId == ratifyUserId" :loading="editLoad" type="primary" @click="handleEdit(1)">閫�
杩�</el-button>
@@ -266,24 +189,17 @@
superviseDetailsRecordId: '',
testMember: '',
supervisor: '',
- supervisorId: '',
+ superviseContent: '',
+ superviseRecord: '',
+ problemDesc: '',
+ rectifyAdvice: '',
testItem: '',
- sampleNumber: '',
testDate: '',
- personnel: '',
- device: '',
- environment: '',
- sampleCollection: '',
- samplePreparation: '',
- detectionMethod: '',
- inspectionRecord: '',
- examiningReport: '',
- supervisionEvaluation: '',
- handlingAdvice: '',
ratifyUserId: '',
ratifyUserName: '',
ratifyOpinion: '',
isAccording: '',
+ isFinish: '',
},
currentStep: 0,
editLoad: false,
@@ -291,10 +207,26 @@
recordUserList: [],
supervisedUserId: '',
ratifyUserId: '',
+ superviseeList: [],
+ superviseContentList: [],
+ superviseContentItems: ['浜哄憳鎸佽瘉鍙婂煿璁�', '璁炬柦鍙婄幆澧冩潯浠�', '妫�娴嬫柟娉�', '浠櫒璁惧绠$悊', '娴嬮噺婧簮鎬�', '鏍囧噯鐗╄川绠$悊', '鏍峰搧鍒跺鍜屽缃�', '妫�娴嬫暟鎹鐞�', '缁撴灉鎶ュ憡缁撴灉'],
};
},
computed: {
...mapGetters(["userId"]),
+ contentRows() {
+ const rows = []
+ for (let i = 0; i < this.superviseContentItems.length; i += 3) {
+ rows.push(this.superviseContentItems.slice(i, i + 3))
+ }
+ return rows
+ },
+ canSubmitRecord() {
+ if (this.userId == this.supervisedUserId) {
+ return true
+ }
+ return this.recordUserList.some(item => item.userId == this.userId)
+ },
},
// 鏂规硶闆嗗悎
methods: {
@@ -303,12 +235,6 @@
this.supervisedUserId = row.supervisedUserId
this.searchInfo(row)
this.getAuthorizedPerson()
- },
- usePersonName (value) {
- const index = this.recordUserList.findIndex(item => item.userId === value)
- if (index > -1) {
- this.form.supervisor = this.recordUserList[index].userName
- }
},
// 鏌ヨ鐩戠潱璁″垝璇︽儏璁板綍娴佺▼淇℃伅
searchInfo (row) {
@@ -327,6 +253,8 @@
this.form = res.data
this.form.superviseDetailsId = row.superviseDetailsId
this.ratifyUserId = res.data.ratifyUserId
+ this.superviseeList = this.form.testMember ? this.form.testMember.split('銆�').filter(i => i) : []
+ this.superviseContentList = this.form.superviseContent ? this.form.superviseContent.split('銆�').filter(i => i) : []
this.getRecordUser()
}).catch(err => {
console.log('err---', err);
@@ -334,12 +262,17 @@
},
// 鎻愪氦娴佺▼
handleEdit (isFinish) {
- if (!this.form.testMember || !this.form.supervisor || !this.form.testItem || !this.form.sampleNumber
- || !this.form.testDate) {
- this.$message.warning('璇峰~鍐欏畬鏁�')
- return
- }
if (this.currentStep === 0) {
+ if (!this.form.testItem || !this.form.testDate || this.superviseeList.length === 0 || !this.form.supervisor) {
+ this.$message.warning('璇峰~鍐欏畬鏁�')
+ return
+ }
+ if (!this.form.superviseRecord) {
+ this.$message.warning('璇峰~鍐欑洃鐫h褰�')
+ return
+ }
+ this.form.testMember = this.superviseeList.join('銆�')
+ this.form.superviseContent = this.superviseContentList.join('銆�')
this.addInfo()
} else {
this.editInfo(isFinish)
@@ -363,7 +296,7 @@
this.$message.warning('璇峰~鍐欏鎵规剰瑙�')
return
}
- if (this.form.isAccording === null) {
+ if (this.form.isAccording !== 0 && this.form.isAccording !== 1) {
this.$message.warning('璇烽�夋嫨鏄惁绗﹀悎')
return
}
@@ -384,9 +317,10 @@
this.$emit('closeRecordsDia')
},
getAuthorizedPerson() {
- selectUserCondition({ type: 2 }).then((res) => {
+ // 璐ㄩ噺鐩戠潱闈㈠悜鍏ㄥ疄楠屽, 浜哄憳鍒楄〃涓嶆寜閮ㄩ棬绛涢��
+ selectUserCondition({ type: 1 }).then((res) => {
let data = [];
- res.data.forEach((a) => {
+ (res.data || []).forEach((a) => {
data.push({
label: a.name,
value: a.id,
diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue
index d4402a5..24a7076 100644
--- a/src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue
+++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/components/rectifyDialogNew.vue
@@ -389,9 +389,10 @@
this.showStep = step
},
getAuthorizedPerson() {
- selectUserCondition({ type: 2 }).then((res) => {
+ // 璐ㄩ噺鐩戠潱闈㈠悜鍏ㄥ疄楠屽, 浜哄憳鍒楄〃涓嶆寜閮ㄩ棬绛涢��
+ selectUserCondition({ type: 1 }).then((res) => {
let data = [];
- res.data.forEach((a) => {
+ (res.data || []).forEach((a) => {
data.push({
label: a.name,
value: a.id,
diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue
index 41565fe..6df53e6 100644
--- a/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue
+++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue
@@ -74,12 +74,43 @@
<el-button :loading="ratifyLoading" type="primary" @click="handleRatify(1)">鎵� 鍑�</el-button>
</span></template>
</el-dialog>
- <el-dialog v-model="downloadDialog" title="瀵煎嚭" width="600px">
- <span>
- <el-button plain type="primary" :disabled="download.recordStatus !== 3" @click="controlDown">璁板綍鍗曞鍑�</el-button>
- <el-button plain type="primary" :disabled="download.accordingStatus !== 3" @click="processingDown">澶勭悊鍗曞鍑�</el-button>
- <el-button plain type="primary" :disabled="download.correctStatus !== 3" @click="supervisoryDown">绾犳鍗曞鍑�</el-button>
- </span>
+ <el-dialog v-model="downloadDialog" title="瀵煎嚭" width="640px">
+ <div class="doc-card">
+ <div class="doc-card-head">
+ <span class="doc-card-name">鏃ュ父鐩戠潱妫�鏌ヨ褰曡〃锛堣褰曞崟锛�</span>
+ <el-tag :type="download.recordStatus === 3 ? 'success' : 'info'" size="small">
+ {{ download.recordStatus === 3 ? '宸叉壒鍑�' : '鏈壒鍑�' }}
+ </el-tag>
+ </div>
+ <div class="doc-card-foot">
+ <el-button type="primary" :disabled="download.recordStatus !== 3" @click="controlDown">瀵� 鍑�</el-button>
+ </div>
+ </div>
+ <div class="doc-card">
+ <div class="doc-card-head">
+ <span class="doc-card-name">涓嶇鍚堝伐浣滄帶鍒跺崟锛堝鐞嗗崟锛�</span>
+ <el-tag :type="download.accordingStatus === 3 ? 'success' : 'info'" size="small">
+ {{ download.accordingStatus === 3 ? '宸叉壒鍑�' : '鏈壒鍑�' }}
+ </el-tag>
+ </div>
+ <div class="doc-card-foot">
+ <el-button type="primary" :disabled="download.accordingStatus !== 3" @click="processingDown">瀵� 鍑�</el-button>
+ </div>
+ </div>
+ <div class="doc-card">
+ <div class="doc-card-head">
+ <span class="doc-card-name">绾犳鎺柦澶勭悊鍗曪紙绾犳鍗曪級</span>
+ <el-tag :type="download.correctStatus === 3 ? 'success' : 'info'" size="small">
+ {{ download.correctStatus === 3 ? '宸叉壒鍑�' : '鏈壒鍑�' }}
+ </el-tag>
+ </div>
+ <div class="doc-card-foot">
+ <el-button type="primary" :disabled="download.correctStatus !== 3" @click="supervisoryDown">瀵� 鍑�</el-button>
+ </div>
+ </div>
+ <div class="down-tip">
+ 浠�"宸叉壒鍑�"鐨勮〃鍗曞彲瀵煎嚭锛岀伆鑹茶〃绀哄搴旇〃鍗曞皻鏈壒鍑嗘垨鏆傛棤鏁版嵁
+ </div>
<template #footer><span class="dialog-footer">
<el-button @click="downloadDialog = false">鍙� 娑�</el-button>
</span></template>
@@ -131,7 +162,7 @@
import limsTable from "@/components/Table/lims-table.vue";
import {
delQualitySupervise, delQualitySuperviseDetail,
- exportQualitySupervise, exportSuperviseDetailRecord,
+ exportQualitySupervise, exportSuperviseDetailRecord, issueQualitySupervise,
pageQualitySupervise, pageQualitySuperviseDetail,
ratifyQualitySupervise, superviseDetailAccordingExport,
exportSuperviseDetaillCorrect
@@ -200,6 +231,25 @@
prop: 'ratifyTime',
width: '160'
}, {
+ dataType: 'tag',
+ label: '涓嬪彂鐘舵��',
+ prop: 'issueStatus',
+ width: '100',
+ formatData: (params) => {
+ if (params === 1) {
+ return '宸蹭笅鍙�';
+ } else {
+ return '鏈笅鍙�';
+ }
+ },
+ formatType: (params) => {
+ if (params === 1) {
+ return 'success';
+ } else {
+ return 'info';
+ }
+ }
+ }, {
dataType: 'action',
label: '鎿嶄綔',
operation: [
@@ -215,6 +265,20 @@
},
clickFun: (row) => {
this.approvalPlan(row)
+ }
+ },
+ {
+ name: '涓嬪彂',
+ type: 'text',
+ disabled: (row) => {
+ if (row.ratifyStatus !== 1 || row.issueStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ clickFun: (row) => {
+ this.issuePlan(row)
}
},
{
@@ -389,6 +453,13 @@
type: 'text',
clickFun: (row) => {
this.records(row)
+ },
+ disabled: () => {
+ if (this.currentPlan.issueStatus !== 1) {
+ return true
+ } else {
+ return false
+ }
}
},
{
@@ -446,6 +517,7 @@
},
currentScrollPosition: 0,
superviseId: '',
+ currentPlan: {},
formDia: false,
recordsDia: false,
processingDia: false,
@@ -562,8 +634,9 @@
this.getUserList()
},
getUserList() {
- selectUserCondition({ type: 2 }).then((res) => {
- this.userList = res.data;
+ // 璐ㄩ噺鐩戠潱闈㈠悜鍏ㄥ疄楠屽, 浜哄憳鍒楄〃涓嶆寜閮ㄩ棬绛涢��
+ selectUserCondition({ type: 1 }).then((res) => {
+ this.userList = res.data || [];
})
},
// 鎵瑰噯
@@ -592,14 +665,29 @@
// 瀵煎嚭
handleDown(row) {
exportQualitySupervise({ superviseId: row.superviseId }).then(res => {
- try {
- this.outLoading = false
- const blob = new Blob([res], { type: 'application/msword' });
- this.$download.saveAs(blob, row.superviseName + '.docx')
- } catch (error) {
- console.error('鍒涘缓Blob瀵硅薄鏃跺嚭閿�:', error);
- }
+ this.outLoading = false
+ this.saveDocx(res, row.superviseName + '.docx')
+ }).catch(err => {
+ console.log('err---', err);
})
+ },
+ // 淇濆瓨瀵煎嚭鏂囦欢: 鍚庣瀵煎嚭澶辫触鏃朵細杩斿洖閿欒JSON, 姝ゆ椂寮规彁绀鸿�屼笉鏄瓨鎴愭崯鍧忕殑docx
+ saveDocx(res, filename) {
+ const reader = new FileReader();
+ reader.readAsText(res, 'utf-8');
+ reader.onload = () => {
+ const text = (reader.result || '').trim();
+ if (text.startsWith('{') || text.startsWith('[')) {
+ let msg = '瀵煎嚭澶辫触';
+ try { msg = JSON.parse(text).msg || msg; } catch (e) { }
+ this.$message.error(msg);
+ } else {
+ this.$download.saveAs(new Blob([res], { type: 'application/msword' }), filename);
+ }
+ };
+ reader.onerror = () => {
+ this.$download.saveAs(new Blob([res], { type: 'application/msword' }), filename);
+ };
},
// 鍒犻櫎杩涘害璁″垝琛�
delPlan(row) {
@@ -627,7 +715,31 @@
// 骞村害璁″垝琛ㄦ牸锛岀偣鍑昏鏁版嵁鍚庡埛鏂拌鎯�
rowClick(row) {
this.superviseId = row.superviseId
+ this.currentPlan = row
this.getYearDetailPlan()
+ },
+ // 涓嬪彂璁″垝
+ issuePlan(row) {
+ this.$confirm('涓嬪彂鍚庣洃鐫e憳涓庣浉鍏虫娴嬩汉鍛樺皢鏀跺埌閫氱煡, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.yearLoading = true
+ issueQualitySupervise({ superviseId: row.superviseId }).then(res => {
+ this.yearLoading = false
+ this.$message.success('涓嬪彂鎴愬姛')
+ this.getYearPlanList()
+ }).catch(err => {
+ this.yearLoading = false
+ console.log('err---', err);
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堜笅鍙�'
+ });
+ });
},
getYearDetailPlan () {
this.yearDetailPage.current = 1
@@ -715,8 +827,7 @@
// 瀵煎嚭璁板綍
controlDown() {
exportSuperviseDetailRecord({ superviseDetailsId: this.download.superviseDetailsId }).then(res => {
- const blob = new Blob([res], { type: 'application/msword' });
- this.$download.saveAs(blob, '璁板綍瀵煎嚭.docx')
+ this.saveDocx(res, '璁板綍瀵煎嚭.docx')
}).catch(err => {
console.log('err---', err);
})
@@ -724,8 +835,7 @@
// 澶勭悊鍗曞鍑�
processingDown() {
superviseDetailAccordingExport({ superviseDetailsId: this.download.superviseDetailsId }).then(res => {
- const blob = new Blob([res], { type: 'application/msword' });
- this.$download.saveAs(blob, '涓嶇鍚堥」瀵煎嚭.docx')
+ this.saveDocx(res, '涓嶇鍚堥」瀵煎嚭.docx')
}).catch(err => {
console.log('err---', err);
})
@@ -733,8 +843,9 @@
// 绾犳鍗曞鍑�
supervisoryDown() {
exportSuperviseDetaillCorrect({ superviseDetailsCorrectId: this.download.superviseDetailsCorrectId }).then(res => {
- const blob = new Blob([res], { type: 'application/msword' });
- this.$download.saveAs(blob, '鐩戠潱绾犳鎺柦.docx')
+ this.saveDocx(res, '鐩戠潱绾犳鎺柦.docx')
+ }).catch(err => {
+ console.log('err---', err);
})
},
// 鍒犻櫎骞村害璇︽儏鍒楄〃
@@ -793,6 +904,37 @@
margin: 0 5px;
}
+.doc-card {
+ padding: 12px 16px;
+ margin-bottom: 12px;
+ background-color: #f7f8fa;
+ border: 1px solid #ebeef5;
+ border-radius: 6px;
+}
+
+.doc-card-head {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+
+.doc-card-name {
+ font-size: 14px;
+ color: var(--lims-text-2, #303133);
+}
+
+.doc-card-foot {
+ display: flex;
+ justify-content: flex-end;
+ margin-top: 10px;
+}
+
+.down-tip {
+ margin-top: 10px;
+ color: #909399;
+ font-size: 12px;
+}
+
.search {
width: 150px;
padding: 0 16px;
diff --git a/src/views/CNAS/process/method/standardMethodsChange/component/ViewDeviceDialog.vue b/src/views/CNAS/process/method/methodVerification/component/ViewDeviceDialog.vue
similarity index 97%
rename from src/views/CNAS/process/method/standardMethodsChange/component/ViewDeviceDialog.vue
rename to src/views/CNAS/process/method/methodVerification/component/ViewDeviceDialog.vue
index b0faeeb..e92c63b 100644
--- a/src/views/CNAS/process/method/standardMethodsChange/component/ViewDeviceDialog.vue
+++ b/src/views/CNAS/process/method/methodVerification/component/ViewDeviceDialog.vue
@@ -60,7 +60,7 @@
</template>
<script>
-import { deviceScopeSearch } from '@/api/cnas/process/method/standardMethodsChange'
+import { deviceScopeSearch } from '@/api/cnas/process/method/methodVerification'
export default {
name: 'ViewDeviceDialog',
diff --git a/src/views/CNAS/process/method/standardMethodsChange/component/ViewTestRecord.vue b/src/views/CNAS/process/method/methodVerification/component/ViewTestRecord.vue
similarity index 98%
rename from src/views/CNAS/process/method/standardMethodsChange/component/ViewTestRecord.vue
rename to src/views/CNAS/process/method/methodVerification/component/ViewTestRecord.vue
index 752f3e2..309eba1 100644
--- a/src/views/CNAS/process/method/standardMethodsChange/component/ViewTestRecord.vue
+++ b/src/views/CNAS/process/method/methodVerification/component/ViewTestRecord.vue
@@ -32,7 +32,7 @@
<script>
import limsTable from '@/components/Table/lims-table.vue'
import file from "@/utils/file";
-import { delVerifyMethodFileList, getVerifyMethodFileList } from '@/api/cnas/process/method/standardMethodsChange'
+import { delVerifyMethodFileList, getVerifyMethodFileList } from '@/api/cnas/process/method/methodVerification'
export default {
name: 'ViewTestRecord',
diff --git a/src/views/CNAS/process/method/standardMethodsChange/component/calibrationsFileDia.vue b/src/views/CNAS/process/method/methodVerification/component/calibrationsFileDia.vue
similarity index 100%
rename from src/views/CNAS/process/method/standardMethodsChange/component/calibrationsFileDia.vue
rename to src/views/CNAS/process/method/methodVerification/component/calibrationsFileDia.vue
diff --git a/src/views/CNAS/process/method/methodVerification/component/formDIa.vue b/src/views/CNAS/process/method/methodVerification/component/formDIa.vue
index 5323b46..5b8d568 100644
--- a/src/views/CNAS/process/method/methodVerification/component/formDIa.vue
+++ b/src/views/CNAS/process/method/methodVerification/component/formDIa.vue
@@ -1,12 +1,13 @@
<template>
<div>
<el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
- :title="operationType === 'edit' ? '缂栬緫' : '鏂板'"
+ :title="operationType === 'edit' ? '缂栬緫' : operationType === 'view' ? '璇︽儏' : '鏂板'"
v-model="formDia"
width="90%" @close="closeDia">
<div v-if="operationType === 'edit'" style="text-align: right">
<el-button :disabled="form.confirmDate" size="small" type="primary" @click="validation">楠岃瘉纭</el-button>
</div>
+ <fieldset :disabled="operationType === 'view'" class="view-fieldset">
<table border="1" cellspacing="10" class="tables">
<tr>
<td>
@@ -202,6 +203,72 @@
</td>
</tr>
<tr>
+ <td>鏁版嵁澶勭悊</td>
+ <td colspan="7">
+ <el-input v-model="form.dataProcessing" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea"></el-input>
+ </td>
+ </tr>
+ <tr>
+ <td>璐ㄩ噺鎺у埗鏂规硶</td>
+ <td colspan="7">
+ <el-input v-model="form.qualityControlMethod" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea"></el-input>
+ </td>
+ </tr>
+ <tr>
+ <td>鏂规硶缁撴灉楠岃瘉</td>
+ <td colspan="7">
+ <el-input v-model="form.methodResultVerification" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea"></el-input>
+ </td>
+ </tr>
+ <tr>
+ <td>楠岃瘉缁撹</td>
+ <td colspan="7">
+ <el-input v-model="form.verificationConclusion" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea"></el-input>
+ </td>
+ </tr>
+ <tr>
+ <td>璇勫鎰忚</td>
+ <td colspan="7">
+ <div class="opinion-box">
+ <div class="opinion-checks">
+ <el-checkbox :model-value="form.reviewResult === '鍚屾剰浣跨敤'"
+ @change="toggleReview('鍚屾剰浣跨敤', $event)">鍚屾剰浣跨敤</el-checkbox>
+ <el-checkbox :model-value="form.reviewResult === '涓嶈兘浣跨敤'"
+ @change="toggleReview('涓嶈兘浣跨敤', $event)">涓嶈兘浣跨敤</el-checkbox>
+ <el-checkbox :model-value="form.reviewResult === '闄愬埗浣跨敤'"
+ @change="toggleReview('闄愬埗浣跨敤', $event)">闄愬埗浣跨敤</el-checkbox>
+ </div>
+ <div class="opinion-sign">
+ <span>璇勫浜哄憳锛�</span>
+ <el-input v-model="form.reviewPerson" placeholder="璇疯緭鍏�" size="small" style="width: 160px"></el-input>
+ <el-date-picker v-model="form.reviewDate" format="YYYY骞碝M鏈圖D鏃�" placeholder="閫夋嫨鏃ユ湡" size="small"
+ type="date" value-format="YYYY-MM-DD" style="width: 170px"></el-date-picker>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>瀹℃壒鎰忚</td>
+ <td colspan="7">
+ <div class="opinion-box">
+ <div class="opinion-checks">
+ <el-checkbox :model-value="form.approvalResult === '鍚屾剰浣跨敤'"
+ @change="toggleApproval('鍚屾剰浣跨敤', $event)">鍚屾剰浣跨敤</el-checkbox>
+ <el-checkbox :model-value="form.approvalResult === '涓嶈兘浣跨敤'"
+ @change="toggleApproval('涓嶈兘浣跨敤', $event)">涓嶈兘浣跨敤</el-checkbox>
+ <el-checkbox :model-value="form.approvalResult === '闄愬埗浣跨敤'"
+ @change="toggleApproval('闄愬埗浣跨敤', $event)">闄愬埗浣跨敤</el-checkbox>
+ </div>
+ <div class="opinion-sign">
+ <span>鎶�鏈礋璐d汉锛�</span>
+ <el-input v-model="form.approvalPerson" placeholder="璇疯緭鍏�" size="small" style="width: 160px"></el-input>
+ <el-date-picker v-model="form.approvalDate" format="YYYY骞碝M鏈圖D鏃�" placeholder="閫夋嫨鏃ユ湡" size="small"
+ type="date" value-format="YYYY-MM-DD" style="width: 170px"></el-date-picker>
+ </div>
+ </div>
+ </td>
+ </tr>
+ <tr>
<td colspan="3">
<p>鏄惁寮曠敤姝ゆ爣鍑嗗紑灞曟娴�:</p>
</td>
@@ -216,15 +283,16 @@
<p>鍙傚姞纭浜虹鍚�:</p>
</td>
<td colspan="5">
- <el-select v-model="form.confirmUser" multiple placeholder="璇烽�夋嫨" size="small" style="width: 100%" :multiple-limit="5">
+ <el-select v-model="form.confirmUser" :disabled="operationType === 'view'" multiple placeholder="璇烽�夋嫨" size="small" style="width: 100%" :multiple-limit="5">
<el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</td>
</tr>
</table>
+ </fieldset>
<template #footer><span class="dialog-footer">
<el-button @click="closeDia">鍙� 娑�</el-button>
- <el-button :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+ <el-button v-if="operationType !== 'view'" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
</span></template>
</el-dialog>
<ViewDeviceDialog v-if="viewDeviceDialog" ref="viewDeviceDialog" @closDeviceDia="closDeviceDia" @handleDeviceInfo="handleDeviceInfo"></ViewDeviceDialog>
@@ -236,17 +304,17 @@
<script>
import { dateFormat } from '@/utils/date'
-import ViewDeviceDialog from '../../standardMethodsChange/component/ViewDeviceDialog.vue';
-import ViewTestRecord from '../../standardMethodsChange/component/ViewTestRecord.vue';
-import ViewWorkPermitDia from '../../standardMethodsChange/component/viewWorkPermitDia.vue';
-import CalibrationsFileDia from '../../standardMethodsChange/component/calibrationsFileDia.vue';
+import ViewDeviceDialog from './ViewDeviceDialog.vue';
+import ViewTestRecord from './ViewTestRecord.vue';
+import ViewWorkPermitDia from './viewWorkPermitDia.vue';
+import CalibrationsFileDia from './calibrationsFileDia.vue';
import {
addMethodVerify,
getMethodVerifyOne,
methodVerifyAffirm,
updateMethodVerify
} from '@/api/cnas/process/method/methodVerification'
-import { selectUserCondition } from '@/api/cnas/process/method/standardMethodsChange'
+import { selectUserCondition } from '@/api/cnas/process/method/methodVerification'
export default {
name: 'formDIa',
// import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
@@ -294,6 +362,16 @@
otherReadiness: '',
otherIsSatisfied: '',
otherRemark: '',
+ dataProcessing: '',
+ qualityControlMethod: '',
+ methodResultVerification: '',
+ verificationConclusion: '',
+ reviewResult: '',
+ reviewPerson: '',
+ reviewDate: '',
+ approvalResult: '',
+ approvalPerson: '',
+ approvalDate: '',
machineAttachmentList: []
},
editLoad: false,
@@ -313,7 +391,7 @@
this.formDia = true
this.info = row
this.getUserList()
- if (this.operationType === 'edit') {
+ if (this.operationType === 'edit' || this.operationType === 'view') {
this.searchInfo(row)
}
},
@@ -341,6 +419,14 @@
} else {
this.addInfo(processMethodSearchNews)
}
+ },
+ // 璇勫鎰忚鍕鹃�夛紙涓夐�変竴锛屽啀鐐逛竴娆″彇娑堬級
+ toggleReview (value, checked) {
+ this.form.reviewResult = checked ? value : ''
+ },
+ // 瀹℃壒鎰忚鍕鹃�夛紙涓夐�変竴锛屽啀鐐逛竴娆″彇娑堬級
+ toggleApproval (value, checked) {
+ this.form.approvalResult = checked ? value : ''
},
// 鏌ョ湅涓婂矖璇�
viewWorkPermit () {
@@ -445,6 +531,12 @@
width: 100%;
margin-top: 10px;
}
+.view-fieldset {
+ border: none;
+ margin: 0;
+ padding: 0;
+ min-width: 0;
+}
.tables td {
height: 34px;
width: 100px;
@@ -454,4 +546,25 @@
white-space: normal;
padding: 4px;
}
+.opinion-box {
+ border: 1px solid var(--el-border-color);
+ border-radius: 4px;
+ min-height: 72px;
+ padding: 8px 10px;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ gap: 8px;
+}
+.opinion-checks {
+ display: flex;
+ justify-content: flex-start;
+}
+.opinion-sign {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ gap: 8px;
+ font-size: 14px;
+}
</style>
diff --git a/src/views/CNAS/process/method/standardMethodsChange/component/viewWorkPermitDia.vue b/src/views/CNAS/process/method/methodVerification/component/viewWorkPermitDia.vue
similarity index 100%
rename from src/views/CNAS/process/method/standardMethodsChange/component/viewWorkPermitDia.vue
rename to src/views/CNAS/process/method/methodVerification/component/viewWorkPermitDia.vue
diff --git a/src/views/CNAS/process/method/methodVerification/index.vue b/src/views/CNAS/process/method/methodVerification/index.vue
index 2349b16..dd77321 100644
--- a/src/views/CNAS/process/method/methodVerification/index.vue
+++ b/src/views/CNAS/process/method/methodVerification/index.vue
@@ -68,6 +68,13 @@
label: '鎿嶄綔',
operation: [
{
+ name: '璇︽儏',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('view', row);
+ },
+ },
+ {
name: '缂栬緫',
type: 'text',
clickFun: (row) => {
diff --git a/src/views/CNAS/process/method/standardMethodsChange/component/formDIaChange.vue b/src/views/CNAS/process/method/standardMethodsChange/component/formDIaChange.vue
deleted file mode 100644
index 8a64cd7..0000000
--- a/src/views/CNAS/process/method/standardMethodsChange/component/formDIaChange.vue
+++ /dev/null
@@ -1,456 +0,0 @@
-<template>
- <div>
- <el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
- :title="operationType === 'edit' ? '缂栬緫' : '鏂板'"
- v-model="formDia"
- width="90%" @close="closeDia">
- <div v-if="operationType === 'edit'" style="text-align: right">
- <el-button :disabled="form.confirmDate !== '' && form.confirmDate !== null && form.confirmDate !== undefined" size="small" type="primary" @click="validation">楠岃瘉纭</el-button>
- </div>
- <table border="1" cellspacing="10" class="tables">
- <tr>
- <td>
- <p>鏍囧噯鏂规硶</p>
- </td>
- <td>
- <p>楠岃瘉鍘熷洜</p>
- </td>
- <td>
- <p>涓昏鎶�鏈彉鍖�</p>
- </td>
- <td>
- <p>娑夊強鏂归潰</p>
- </td>
- <td>
- <p>鏍囧噯瑕佹眰</p>
- </td>
- <td>
- <p>鍑嗗鎯呭喌</p>
- </td>
- <td>
- <p>鏄惁婊¤冻</p>
- </td>
- <td>
- <p>澶囨敞</p>
- </td>
- </tr>
- <tr>
- <td rowspan="9">
- <el-input v-model="form.methodName" :rows="6"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small"
- type="textarea">
- </el-input>
- </td>
- <td rowspan="9">
- <el-input v-model="form.verifyReason" :rows="6"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small"
- type="textarea">
- </el-input>
- </td>
- <td rowspan="9">
- <el-input v-model="form.technologyChange" :rows="6"
- placeholder="璇疯緭鍏ュ唴瀹�"
- size="small"
- type="textarea">
- </el-input>
- </td>
- </tr>
- <tr>
- <td>浜猴細</td>
- <td>
- <el-input v-model="form.personRequirements" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-input v-model="form.personReadiness" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-radio-group v-model="form.personIsSatisfied">
- <el-radio :value="0">鍚�</el-radio>
- <el-radio :value="1">鏄�</el-radio>
- </el-radio-group>
- </td>
- <td>
- <el-link type="primary" @click="viewWorkPermit">鏌ョ湅涓婂矖璇�</el-link>
- </td>
- </tr>
- <tr>
- <td>鏈猴細</td>
- <td>
- <el-input v-model="form.machineRequirements" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-input v-model="form.machineReadiness" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-radio-group v-model="form.machineIsSatisfied">
- <el-radio :value="0">鍚�</el-radio>
- <el-radio :value="1">鏄�</el-radio>
- </el-radio-group>
- </td>
- <td>
- <el-link type="primary" @click="viewDevice">鏌ョ湅璁惧</el-link>
- </td>
- </tr>
- <tr>
- <td>鏂欙細</td>
- <td>
- <el-input v-model="form.materialRequirements" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-input v-model="form.materialReadiness" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-radio-group v-model="form.materialIsSatisfied">
- <el-radio :value="0">鍚�</el-radio>
- <el-radio :value="1">鏄�</el-radio>
- </el-radio-group>
- </td>
- <td>
- <el-input v-model="form.materialRemark" size="small"></el-input>
- </td>
- </tr>
- <tr>
- <td>娉曪細</td>
- <td>
- <el-input v-model="form.methodRequirements" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-input v-model="form.methodReadiness" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-radio-group v-model="form.methodIsSatisfied">
- <el-radio :value="0">鍚�</el-radio>
- <el-radio :value="1">鏄�</el-radio>
- </el-radio-group>
- </td>
- <td>
- <el-link type="primary" @click="viewTestRecord">鏌ョ湅妫�娴嬭褰�</el-link>
- </td>
- </tr>
- <tr>
- <td>鐜細</td>
- <td>
- <el-input v-model="form.environmentRequirements" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-input v-model="form.environmentReadiness" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-radio-group v-model="form.environmentIsSatisfied">
- <el-radio :value="0">鍚�</el-radio>
- <el-radio :value="1">鏄�</el-radio>
- </el-radio-group>
- </td>
- <td>
- <el-input v-model="form.traceabilityRemark" size="small"></el-input>
- </td>
- </tr>
- <tr>
- <td>娴嬮噺婧簮鎬э細</td>
- <td>
- <el-input v-model="form.traceabilityRequirements" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-input v-model="form.traceabilityReadiness" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-radio-group v-model="form.traceabilityIsSatisfied">
- <el-radio :value="0">鍚�</el-radio>
- <el-radio :value="1">鏄�</el-radio>
- </el-radio-group>
- </td>
- <td>
- <el-link type="primary" @click="viewCalibrationsFileDia">鏌ョ湅鏍″噯璇佷功</el-link>
- </td>
- </tr>
- <tr>
- <td>鏍峰搧绠$悊闇�姹傦細</td>
- <td>
- <el-input v-model="form.managementRequirements" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-input v-model="form.managementReadiness" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-radio-group v-model="form.managementIsSatisfied">
- <el-radio :value="0">鍚�</el-radio>
- <el-radio :value="1">鏄�</el-radio>
- </el-radio-group>
- </td>
- <td>
- <el-input v-model="form.managementRemark" size="small"></el-input>
- </td>
- </tr>
- <tr>
- <td>鍏朵粬锛�</td>
- <td>
- <el-input v-model="form.otherRequirements" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-input v-model="form.otherReadiness" size="small" type="textarea"></el-input>
- </td>
- <td>
- <el-radio-group v-model="form.otherIsSatisfied">
- <el-radio :value="0">鍚�</el-radio>
- <el-radio :value="1">鏄�</el-radio>
- </el-radio-group>
- </td>
- <td>
- <el-input v-model="form.otherRemark" size="small"></el-input>
- </td>
- </tr>
- <tr>
- <td colspan="3">
- <p>鏄惁寮曠敤姝ゆ爣鍑嗗紑灞曟娴�:</p>
- </td>
- <td colspan="3">鍙互寮曠敤姝ゆ爣鍑嗗紑灞曟娴�</td>
- <td>
- <p>纭鏃堕棿:</p>
- </td>
- <td>{{form.confirmDate}}</td>
- </tr>
- <tr>
- <td colspan="3">
- <p>鍙傚姞纭浜虹鍚�:</p>
- </td>
- <td colspan="5">
- <el-select v-model="form.confirmUser" multiple placeholder="璇烽�夋嫨" size="small" style="width: 100%" :multiple-limit="5">
- <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
- </el-select>
- </td>
- </tr>
- </table>
- <template #footer><span class="dialog-footer">
- <el-button @click="closeDia">鍙� 娑�</el-button>
- <el-button :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
- </span></template>
- </el-dialog>
- <ViewDeviceDialog v-if="viewDeviceDialog" ref="viewDeviceDialog" @closDeviceDia="closDeviceDia" @handleDeviceInfo="handleDeviceInfo"></ViewDeviceDialog>
- <ViewTestRecord v-if="viewTestRecordDialog" ref="viewTestRecordDialog"></ViewTestRecord>
- <ViewWorkPermitDia v-if="viewWorkPermitDia" ref="viewWorkPermitDia"></ViewWorkPermitDia>
- <calibrations-file-dia v-if="calibrationsFileDia" ref="calibrationsFileDia"></calibrations-file-dia>
- </div>
-</template>
-
-<script>
-import { dateFormat } from '@/utils/date'
-import ViewTestRecord from '../component/ViewTestRecord.vue';
-import ViewDeviceDialog from '../component/ViewDeviceDialog.vue';
-import ViewWorkPermitDia from '../component/viewWorkPermitDia.vue';
-import CalibrationsFileDia from '../component/calibrationsFileDia.vue';
-import {
- addMethodVerify, deviceScopeSearch,
- getMethodVerifyOne,
- selectUserCondition,
- updateMethodVerify
-} from '@/api/cnas/process/method/standardMethodsChange'
-
-export default {
- name: 'formDIaChange',
- // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
- components: { CalibrationsFileDia, ViewWorkPermitDia, ViewDeviceDialog, ViewTestRecord },
- props: {
- operationType: {
- type: String,
- default: () => ''
- }
- },
- data() {
- // 杩欓噷瀛樻斁鏁版嵁
- return {
- formDia: false,
- form: {
- methodName: '',
- verifyReason: '',
- technologyChange: '',
- personRequirements: '',
- personReadiness: '',
- personIsSatisfied: '',
- personRemark: '',
- machineRequirements: '',
- machineReadiness: '',
- machineIsSatisfied: '',
- materialRequirements: '',
- materialReadiness: '',
- materialIsSatisfied: '',
- materialRemark: '',
- methodRequirements: '',
- methodReadiness: '',
- methodIsSatisfied: '',
- environmentRequirements: '',
- environmentReadiness: '',
- environmentIsSatisfied: '',
- traceabilityRequirements: '',
- traceabilityReadiness: '',
- traceabilityIsSatisfied: '',
- traceabilityRemark: '',
- managementRequirements: '',
- managementReadiness: '',
- managementIsSatisfied: '',
- managementRemark: '',
- otherRequirements: '',
- otherReadiness: '',
- otherIsSatisfied: '',
- otherRemark: '',
- machineAttachmentList: []
- },
- editLoad: false,
- info: {
- methodVerifyId: ''
- },
- userList: [],
- viewDeviceDialog: false,
- viewTestRecordDialog: false,
- viewWorkPermitDia: false,
- calibrationsFileDia: false,
- };
- },
- // 鏂规硶闆嗗悎
- methods: {
- openDia(row) {
- this.formDia = true
- this.info = row
- this.getUserList()
- if (this.operationType === 'edit') {
- this.searchInfo(row)
- }
- },
- // 鏌ヨ璇︽儏淇℃伅
- searchInfo (row) {
- getMethodVerifyOne({methodVerifyId:row.methodVerifyId}).then(res => {
- if (res.code === 200) {
- this.form = {...res.data}
- if (this.form.confirmUser) {
- this.form.confirmUser = this.form.confirmUser.split(',').map(Number)
- }
- }
- }).catch(err => {
- console.log('err---', err);
- })
- },
- // 鎻愪氦
- handleEdit() {
- this.editLoad = true
- const processMethodSearchNews = this.HaveJson(this.form)
- processMethodSearchNews.confirmUser = processMethodSearchNews.confirmUser && processMethodSearchNews.confirmUser.join(',')
- processMethodSearchNews.operationType = 0
- if (this.operationType === 'edit') {
- this.editInfo(processMethodSearchNews)
- } else {
- this.addInfo(processMethodSearchNews)
- }
- },
- // 鏌ョ湅涓婂矖璇�
- viewWorkPermit () {
- this.viewWorkPermitDia = true
- this.$nextTick(() => {
- this.$refs.viewWorkPermitDia.openDia(this.form)
- })
- },
- // 鏌ョ湅鏍″噯璇佷功
- viewCalibrationsFileDia () {
- this.calibrationsFileDia = true
- this.$nextTick(() => {
- this.$refs.calibrationsFileDia.openDia(this.form)
- })
- },
- // 鏌ョ湅璁惧
- viewDevice () {
- this.viewDeviceDialog = true
- this.$nextTick(() => {
- this.$refs.viewDeviceDialog.openDia(this.form)
- })
- },
- // 鍏抽棴璁惧寮规
- closDeviceDia () {
- this.viewDeviceDialog = false
- },
- // 鎻愪氦璁惧淇℃伅
- handleDeviceInfo (machineAttachmentList) {
- this.viewDeviceDialog = false
- this.form.machineAttachmentList = machineAttachmentList
- },
- // 鏌ョ湅妫�娴嬭褰�
- viewTestRecord () {
- this.viewTestRecordDialog = true
- this.$nextTick(() => {
- this.$refs.viewTestRecordDialog.openDia(this.info)
- })
- },
- // 鎻愪氦缂栬緫
- editInfo (processMethodSearchNews) {
- updateMethodVerify(processMethodSearchNews).then(res => {
- this.editLoad = false
- if (res.code === 200){
- this.$message.success('鎿嶄綔鎴愬姛')
- this.closeDia()
- }
- }).catch(err => {
- console.log('err---', err);
- this.editLoad = false
- })
- },
- // 鎻愪氦鏂板
- addInfo (processMethodSearchNews) {
- addMethodVerify(processMethodSearchNews).then(res => {
- this.editLoad = false
- if (res.code === 200) {
- this.$message.success('鎿嶄綔鎴愬姛')
- this.closeDia()
- }
- }).catch(err => {
- console.log('err---', err);
- this.editLoad = false
- })
- },
- // 楠岃瘉纭
- validation () {
- deviceScopeSearch({methodVerifyId:this.info.methodVerifyId}).then(res => {
- if (res.code === 200){
- this.form.confirmDate = dateFormat(new Date())
- }
- }).catch(err => {
- console.log('err---', err);
- })
- },
- // 鍏抽棴寮规
- closeDia() {
- this.formDia = false
- this.$emit('closeDia');
- },
- getUserList(){
- selectUserCondition().then(res => {
- if (res.code === 200) {
- this.userList = res.data
- }
- })
- },
- }
-};
-</script>
-
-<style scoped>
-:deep(.el-dialog) {
- margin-top: 2vh !important;
-}
-:deep(.el-dialog__body) {
- max-height: 720px;
- overflow-y: auto;
-}
-.tables {
- table-layout: fixed;
- width: 100%;
- margin-top: 10px;
-}
-.tables td {
- height: 34px;
- width: 100px;
- text-align: center;
- font-size: 14px;
- word-wrap: break-word;
- white-space: normal;
- padding: 4px;
-}
-</style>
diff --git a/src/views/CNAS/process/method/standardMethodsChange/index.vue b/src/views/CNAS/process/method/standardMethodsChange/index.vue
deleted file mode 100644
index a372307..0000000
--- a/src/views/CNAS/process/method/standardMethodsChange/index.vue
+++ /dev/null
@@ -1,193 +0,0 @@
-<template>
- <div class="capacity-scope">
- <div style="display: flex;justify-content: space-between">
- <div style="display: flex;">
- <div style="margin-bottom: 18px;margin-right: 10px;display: flex;align-items: center;line-height: 32px;">
- <span style="width: 88px;font-size: 14px;font-weight: 700;color: var(--lims-text-2);">鏍囧噯鏂规硶</span>
- <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="searchForm.methodName"
- @keyup.enter="searchList"></el-input>
- </div>
- <div style="line-height: 30px;">
- <el-button type="primary" size="small" @click="searchList">鏌ヨ</el-button>
- <el-button size="small" @click="resetSearchForm">閲嶇疆</el-button>
- </div>
- </div>
- <div style="line-height: 30px;">
- <el-button size="small" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
- </div>
- </div>
- <div class="table">
- <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 250px)'"
- @pagination="pagination" :page="page" :tableLoading="tableLoading"></lims-table>
- </div>
- <formDIaChange v-if="formDIa" ref="formDIa" :operationType="operationType" @closeDia="closeDia"></formDIaChange>
- </div>
-</template>
-
-<script>
-import formDIaChange from './component/formDIaChange.vue';
-import limsTable from '@/components/Table/lims-table.vue'
-import {
- delMethodVerify,
- exportMethodVerify,
- pagesMethodVerify
-} from '@/api/cnas/process/method/standardMethodsChange'
-
-export default {
- name: 'StandardMethodschange',
- // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
- components: { limsTable, formDIaChange },
- data() {
- // 杩欓噷瀛樻斁鏁版嵁
- return {
- searchForm: {
- methodName: '',
- operationType: 0,
- },
- options: [
- { label: '涓婂崐骞�', value: '1' },
- { label: '涓嬪崐骞�', value: '2' },
- ],
- tableColumn: [
- {
- label: '鏍囧噯鏂规硶',
- prop: 'methodName',
- minWidth: '100'
- },
- {
- label: '楠岃瘉鍘熷洜',
- prop: 'verifyReason',
- minWidth: '100'
- },
- {
- label: '涓昏鎶�鏈彉鍖�',
- prop: 'technologyChange',
- minWidth: '100'
- },
- {
- dataType: 'action',
- minWidth: '60',
- label: '鎿嶄綔',
- operation: [
- {
- name: '缂栬緫',
- type: 'text',
- clickFun: (row) => {
- this.openFormDia('edit', row);
- },
- },
- {
- name: '瀵煎嚭',
- type: 'text',
- clickFun: (row) => {
- this.downLoadPost(row);
- },
- },
- {
- name: '鍒犻櫎',
- type: 'text',
- color: 'var(--el-color-danger)',
- clickFun: (row) => {
- this.deleteRow(row);
- },
- }
-
- ]
- }
- ],
- tableData: [],
- tableLoading: false,
- page: {
- size: 10,
- current: 1,
- total: 0,
- },
- formDIa: false,
- operationType: '',
- };
- },
- mounted() {
- this.searchList()
- },
- // 鏂规硶闆嗗悎
- methods: {
- // 鏌ヨ鍒楄〃
- searchList() {
- const entity = {
- methodName: this.searchForm.methodName,
- operationType: this.searchForm.operationType,
- }
- this.tableLoading = true
- pagesMethodVerify({ ... this.page, ...entity }).then(res => {
- this.tableLoading = false
- if (res.code === 200) {
- this.tableData = res.data.records
- this.page.total = res.data.total
- }
- }).catch(err => {
- console.log('err---', err);
- this.tableLoading = false
- })
- },
- // 鍒犻櫎
- deleteRow(row) {
- this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
- confirmButtonText: '纭畾',
- cancelButtonText: '鍙栨秷',
- type: 'warning'
- }).then(() => {
- this.tableLoading = true
- delMethodVerify({ methodVerifyId: row.methodVerifyId }).then(res => {
- this.tableLoading = false
- if (res.code === 200) {
- this.$message.success('鍒犻櫎鎴愬姛')
- this.searchList()
- }
- }).catch(err => {
- this.tableLoading = false
- console.log('err---', err);
- })
- })
- },
- // 閲嶇疆鏌ヨ鏉′欢
- resetSearchForm() {
- this.searchForm.methodName = '';
- this.searchList()
- },
- openFormDia(type, row) {
- this.formDIa = true
- this.operationType = type
- this.$nextTick(() => {
- this.$refs.formDIa.openDia(row)
- })
- },
- // 鍏抽棴寮规
- closeDia() {
- this.formDIa = false
- this.searchList()
- },
- // 瀵煎嚭
- downLoadPost(row) {
- this.outLoading = true
- exportMethodVerify({ methodVerifyId: row.methodVerifyId }).then(res => {
- this.outLoading = false
- const blob = new Blob([res], { type: 'application/msword' });
- this.$download.saveAs(blob, '鏍囧噯锛堟柟娉曪級纭璁板綍.docx')
- })
- },
- // 鍒嗛〉鍒囨崲
- pagination(page) {
- this.page.size = page.limit
- this.searchList();
- },
- }
-};
-</script>
-
-<style scoped>
-.search {
- height: 46px;
- display: flex;
- justify-content: space-between;
-}
-</style>
diff --git a/src/views/CNAS/resourceDemand/device/component/files.vue b/src/views/CNAS/resourceDemand/device/component/files.vue
index e2ce9f1..4228c5f 100644
--- a/src/views/CNAS/resourceDemand/device/component/files.vue
+++ b/src/views/CNAS/resourceDemand/device/component/files.vue
@@ -180,176 +180,199 @@
<!-- 淇 -->
<el-dialog title="妗f淇" top="5vh" v-model="dialogVisible" width="70%" @open="openFileRevisionDialog"
: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;margin-bottom:16px"
- :src="javaApi + '/img/' + editData.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/' + editData.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 :model="editData" label-width="120px" ref="rules1" :rules="rules1">
+ <lims-icon name="el-icon-picture-outline" style="font-size:60px;color:var(--lims-text-2);"></lims-icon>
+ </div></template>
+ </el-image>
+ <!-- 鍥剧墖涓婁紶 -->
+ <div style="margin-top: 12px;text-align: center;">
+ <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="uploadHeader" :on-change="beforeUpload"
+ :on-error="onError" ref='upload' class="avatar-uploader">
+ <img v-if="editData.imageUpload" :src="javaApi + '/img/' + editData.imageUpload" class="avatar">
+ <lims-icon name="el-icon-plus" v-else class="avatar-uploader-icon"></lims-icon>
+ </el-upload>
+ </div>
+ </el-col>
+ <el-col :span="17">
+ <!-- 鍩烘湰淇℃伅 -->
+ <div class="section-title" style="margin-top: 0;">鍩烘湰淇℃伅</div>
+ <el-form :model="editData" label-width="120px" ref="rules1" :rules="rules1">
+ <div class="form-row">
<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>
+ </div>
+ <div class="form-row">
<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-select v-model="editData.calibrationServices" clearable filterable size="small" style="width: 100%">
- <el-option v-for="name in calibrationServiceOptions" :key="name" :label="name" :value="name"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="璧勪骇缂栫爜:">
- <el-input v-model="editData.assetCode" size="small"></el-input>
- </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-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="editData.lastCalibrationDate" 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 style="width:100%" v-model="editData.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-date-picker style="width:100%" v-model="editData.lastMaintenanceDate" @change="calcNextDate(editData)"
- format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
- </el-date-picker>
- </el-form-item>
- <el-form-item label="涓嬫淇濆吇鏃ユ湡:">
- <el-date-picker :disabled="true" style="width:100%" v-model="editData.nextMaintenanceDate"
- format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
- </el-date-picker>
- </el-form-item>
- <el-form-item label="淇濆吇鍛ㄦ湡锛堟湀锛�:">
- <el-input v-model="editData.maintenanceCycle" size="small" @change="calcNextDate(editData)"></el-input>
- </el-form-item>
- <el-form-item label="鏈�杩戞牳鏌ユ棩鏈�:">
- <el-date-picker style="width:100%" v-model="editData.lastExamineDate" @change="calcNextDate(editData)"
- format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
- </el-date-picker>
- </el-form-item>
- <el-form-item label="涓嬫鏍告煡鏃ユ湡:">
- <el-date-picker :disabled="true" style="width:100%" v-model="editData.nextExamineDate"
- format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
- </el-date-picker>
- </el-form-item>
- <el-form-item label="鏍告煡鍛ㄦ湡锛堟湀锛�:">
- <el-input v-model="editData.examineCycle" size="small" @change="calcNextDate(editData)"></el-input>
- </el-form-item>
- <el-form-item label="琚巿鏉冧汉:">
- <el-select v-model="editData.authorizedPerson" multiple placeholder="璇烽�夋嫨" size="small" style="width:100%">
- <el-option v-for="item in inspectorList" :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 var(--el-border-color);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="uploadHeader" :on-change="beforeUpload"
- :on-error="onError" ref='upload' class="avatar-uploader">
- <img v-if="editData.imageUpload" :src="javaApi + '/img/' + editData.imageUpload" class="avatar">
- <lims-icon name="el-icon-plus" v-else class="avatar-uploader-icon"></lims-icon>
- </el-upload>
- </div>
- </el-form-item>
+ </div>
+ <div class="form-row">
+ <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>
+ </div>
+ <div class="form-row">
+ <el-form-item label="璧勪骇缂栫爜:">
+ <el-input v-model="editData.assetCode" 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>
+ </div>
+ <div class="form-row">
+ <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>
+ </div>
+ <div class="form-row">
+ <el-form-item label="鏍″噯鏈嶅姟鏈烘瀯:">
+ <el-select v-model="editData.calibrationServices" clearable filterable size="small" style="width: 100%">
+ <el-option v-for="name in calibrationServiceOptions" :key="name" :label="name" :value="name"></el-option>
+ </el-select>
+ </el-form-item>
+ <div style="flex: 1;"></div>
+ </div>
</el-form>
</el-col>
</el-row>
+ <!-- 璁惧绠$悊 -->
+ <div class="section-title">璁惧绠$悊</div>
+ <el-form :model="editData" label-width="120px" ref="rules2" :rules="rules1">
+ <div class="form-row">
+ <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-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>
+ </div>
+ <div class="form-row">
+ <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="璐熻矗浜�:">
+ <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-select v-model="editData.authorizedPerson" multiple placeholder="璇烽�夋嫨" size="small" style="width:100%">
+ <el-option v-for="item in inspectorList" :key="item.name" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </div>
+ <div class="form-row">
+ <el-form-item label="瀛樻斁鐐�:">
+ <el-input v-model="editData.storagePoint" size="small"></el-input>
+ </el-form-item>
+ <div style="flex: 1;"></div>
+ </div>
+ </el-form>
+ <!-- 鏍″噯/淇濆吇/鏍告煡 鍛ㄦ湡淇℃伅 -->
+ <el-form :model="editData" :rules="rules1" ref="cycleForm" 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="editData.lastCalibrationDate" 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 style="width:100%" v-model="editData.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="鏍″噯鍛ㄦ湡锛堟湀锛�:" prop="calibrationDate" class="cycle-item">
+ <el-input v-model="editData.calibrationDate" size="small"></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 style="width:100%" v-model="editData.lastMaintenanceDate" @change="calcNextDate(editData)"
+ format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="涓嬫淇濆吇鏃ユ湡:" class="cycle-item">
+ <el-date-picker :disabled="true" style="width:100%" v-model="editData.nextMaintenanceDate"
+ format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="淇濆吇鍛ㄦ湡锛堟湀锛�:" class="cycle-item">
+ <el-input v-model="editData.maintenanceCycle" size="small" @change="calcNextDate(editData)"></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 style="width:100%" v-model="editData.lastExamineDate" @change="calcNextDate(editData)"
+ format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="涓嬫鏍告煡鏃ユ湡:" class="cycle-item">
+ <el-date-picker :disabled="true" style="width:100%" v-model="editData.nextExamineDate"
+ format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="閫夋嫨鏃ユ湡">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="鏍告煡鍛ㄦ湡锛堟湀锛�:" class="cycle-item">
+ <el-input v-model="editData.examineCycle" size="small" @change="calcNextDate(editData)"></el-input>
+ </el-form-item>
+ </div>
+ </el-form>
+ <!-- 鎶�鏈寚鏍� -->
+ <div class="section-title">鎶�鏈寚鏍�</div>
+ <el-form :model="editData" ref="ruleForm" :rules="rules1">
+ <el-form-item>
+ <el-input v-model="editData.technicalIndicators" :rows="7" type="textarea" size="small"></el-input>
+ </el-form-item>
+ </el-form>
+ </div>
<template #footer><span class="dialog-footer">
<el-row>
<el-button @click="handleClose">鍙� 娑�</el-button>
@@ -734,6 +757,27 @@
this.tableDataA = res.data
})
},
+ // 琚巿鏉冧汉鍘嗗彶鍊煎彲鑳芥槸琚弽澶嶈浆涔夌殑澶氬眰 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(id) {
selectDeviceByCode({ id }).then(res => {
@@ -741,9 +785,7 @@
if (res.code == 200) {
this.Mdata = res.data;
this.Mdata.insProductIds = this.Mdata.insProductIds.split(',')
- if (this.Mdata.authorizedPerson) {
- this.Mdata.authorizedPerson = JSON.parse(this.Mdata.authorizedPerson)
- }
+ this.Mdata.authorizedPerson = this.normalizeAuthorizedPerson(this.Mdata.authorizedPerson)
}
});
},
@@ -809,6 +851,12 @@
return false;
}
});
+ this.$refs['cycleForm'].validate((valid) => {
+ if (!valid) {
+ flag = false;
+ return false;
+ }
+ });
if (!flag) {
return;
}
@@ -820,11 +868,9 @@
const formData = this.HaveJson(this.editData)
formData.userAllow = this.equipmentManager.toString();
formData.insProductIds = Array.isArray(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.upLoad = true;
upDeviceParameter(formData).then(res => {
this.$message.success('淇敼鎴愬姛')
@@ -974,6 +1020,57 @@
width: 100%;
}
+.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);
+}
+
.el-image {
position: relative;
}
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