From 7b6cad3a3fc3a4dcfc7944be62220e931491c268 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 04 三月 2025 16:43:48 +0800
Subject: [PATCH] 监控计划搬迁80%
---
src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue | 670 +++++++
src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue | 334 +++
src/api/cnas/process/ensureResults/ensureResultsValidity.js | 176 ++
src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue | 324 +++
src/api/cnas/process/reportResults.js | 47
src/views/CNAS/process/nonconformingWork/nonconformingDistribution/components/formDia.vue | 232 ++
src/views/CNAS/process/nonconformingWork/nonconformingItem/index.vue | 196 ++
src/api/cnas/process/ensureResults/qualityControlPlan.js | 0
src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue | 0
src/views/CNAS/process/uncertainty/index.vue | 328 +++
src/api/cnas/process/sampleDisposal.js | 74
src/views/CNAS/process/nonconformingWork/nonconformingDistribution/index.vue | 237 ++
src/components/Table/lims-table.vue | 2
src/api/system/user.js | 8
src/views/CNAS/process/sampleDisposal/index.vue | 609 +++++++
public/index.html | 1
src/api/cnas/process/complaint.js | 57
src/api/cnas/process/nonconformingWork.js | 85
src/views/CNAS/process/reportResults/index.vue | 409 ++++
src/views/CNAS/process/complaint/index.vue | 629 +++++++
src/main.js | 1
src/views/CNAS/process/nonconformingWork/nonconformingItem/components/qualityInfo.vue | 322 +++
src/api/cnas/process/uncertainty.js | 39
src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue | 150 +
src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue | 171 +
25 files changed, 5,100 insertions(+), 1 deletions(-)
diff --git a/public/index.html b/public/index.html
index 7a42a58..0a54df5 100644
--- a/public/index.html
+++ b/public/index.html
@@ -227,4 +227,5 @@
</body>
<script src="<%= BASE_URL %>luckysheet/plugins/js/plugin.js"></script>
<script src="<%= BASE_URL %>luckysheet/luckysheet.umd.js"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.16.105/pdf.min.js"></script>
</html>
diff --git a/src/api/cnas/process/complaint.js b/src/api/cnas/process/complaint.js
new file mode 100644
index 0000000..cd93e8d
--- /dev/null
+++ b/src/api/cnas/process/complaint.js
@@ -0,0 +1,57 @@
+// 鎶曡瘔姹囨�昏〃鐩稿叧鎺ュ彛
+import request from "@/utils/request";
+
+// 鎶曡瘔澶勭悊鏂板
+export function addProcessComplain(data) {
+ return request({
+ url: "/processComplain/addProcessComplain",
+ method: "post",
+ data: data,
+ });
+}
+
+//鎶曡瘔澶勭悊璇︽儏
+export function getProcessComplain(query) {
+ return request({
+ url: "/processComplain/getProcessComplain",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鎶曡瘔澶勭悊淇敼
+export function doProcessComplain(data) {
+ return request({
+ url: "/processComplain/doProcessComplain",
+ method: "post",
+ data: data,
+ });
+}
+
+//鎶曡瘔澶勭悊瀵煎嚭
+export function exportProcessComplain(query) {
+ return request({
+ url: "/processComplain/exportProcessComplain",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鎶曡瘔澶勭悊鍒嗛〉
+export function pageProcessComplain(query) {
+ return request({
+ url: "/processComplain/pageProcessComplain",
+ method: "get",
+ params: query,
+ });
+}
+
+//鎶曡瘔澶勭悊鍒犻櫎
+export function delProcessComplain(query) {
+ return request({
+ url: "/processComplain/delProcessComplain",
+ method: "delete",
+ params: query,
+ });
+}
diff --git a/src/api/cnas/process/ensureResults/ensureResultsValidity.js b/src/api/cnas/process/ensureResults/ensureResultsValidity.js
new file mode 100644
index 0000000..76d3052
--- /dev/null
+++ b/src/api/cnas/process/ensureResults/ensureResultsValidity.js
@@ -0,0 +1,176 @@
+// 璐ㄩ噺鐩戞帶璁″垝椤甸潰鐩稿叧鎺ュ彛
+import request from "@/utils/request";
+
+//鐩戞帶骞村害璁″垝鍒楄〃
+export function pageQualityMonitor(query) {
+ return request({
+ url: "/qualityMonitor/pageQualityMonitor",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鐩戞帶璁″垝瀹℃牳
+export function examineQualityMonitor(data) {
+ return request({
+ url: "/qualityMonitor/examineQualityMonitor",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鐩戞帶璁″垝鎵瑰噯
+export function ratifyQualityMonitor(data) {
+ return request({
+ url: "/qualityMonitor/ratifyQualityMonitor",
+ method: "post",
+ data: data,
+ });
+}
+
+//瀵煎嚭鐩戞帶璁″垝
+export function exportQualityMonitorDetail(query) {
+ return request({
+ url: "/qualityMonitor/exportQualityMonitorDetail",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鐩戞帶璁″垝鍒犻櫎
+export function delQualitySupervise(query) {
+ return request({
+ url: "/qualityMonitor/delQualitySupervise",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鐩戞帶璁″垝璇︽儏鍒楄〃
+export function pageQualityMonitorDetail(query) {
+ return request({
+ url: "/qualityMonitor/pageQualityMonitorDetail",
+ method: "get",
+ params: query,
+ });
+}
+
+//璐ㄩ噺鐩戞帶瀹炴柦璁″垝瀵煎嚭
+export function exportQualityMonitorRatify(query) {
+ return request({
+ url: "/qualityMonitor/exportQualityMonitorRatify",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//璐ㄩ噺鐩戞帶璇勪环瀵煎嚭
+export function exportQualityMonitorEvaluate(query) {
+ return request({
+ url: "/qualityMonitor/exportQualityMonitorEvaluate",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鍒犻櫎鐩戞帶璁″垝璇︽儏
+export function delQualityMonitorDetail(query) {
+ return request({
+ url: "/qualityMonitor/delQualityMonitorDetail",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+export function getQualityMonitorRatify(query) {
+ return request({
+ url: "/qualityMonitor/getQualityMonitorRatify",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+export function addQualityMonitorRatify(data) {
+ return request({
+ url: "/qualityMonitor/addQualityMonitorRatify",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鎻愪氦鐩戞帶璁″垝璇︽儏鎵瑰噯鎰忚
+export function addQualityMonitorRatifyOpinion(data) {
+ return request({
+ url: "/qualityMonitor/addQualityMonitorRatifyOpinion",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鏂板鐩戞帶璁″垝璇︽儏
+export function addQualityMonitorDetail(data) {
+ return request({
+ url: "/qualityMonitor/addQualityMonitorDetail",
+ method: "post",
+ data: data,
+ });
+}
+
+// 淇敼鐩戞帶璁″垝璇︽儏
+export function updateQualityMonitorDetail(data) {
+ return request({
+ url: "/qualityMonitor/updateQualityMonitorDetail",
+ method: "post",
+ data: data,
+ });
+}
+
+//鏌ヨ鐩戞帶璇勪环
+export function getQualityMonitorEvaluate(query) {
+ return request({
+ url: "/qualityMonitor/getQualityMonitorEvaluate",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板鐩戞帶璇勪环鎵瑰噯
+export function addMonitorEvaluateOpinion(data) {
+ return request({
+ url: "/qualityMonitor/addMonitorEvaluateOpinion",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鏂板鐩戞帶璇勪环
+export function addQualityMonitorEvaluate(data) {
+ return request({
+ url: "/qualityMonitor/addQualityMonitorEvaluate",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍒犻櫎鐩戞帶璇勪环闄勪欢鍒楄〃
+export function delVerifyEvaluateFileList(query) {
+ return request({
+ url: "/qualityMonitor/delVerifyEvaluateFileList",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鏌ヨ鐩戞帶璇勪环闄勪欢鍒楄〃
+export function getEvaluateFileList(query) {
+ return request({
+ url: "/qualityMonitor/getEvaluateFileList",
+ method: "get",
+ params: query,
+ });
+}
diff --git a/src/api/cnas/process/ensureResults/qualityControlPlan.js b/src/api/cnas/process/ensureResults/qualityControlPlan.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/api/cnas/process/ensureResults/qualityControlPlan.js
diff --git a/src/api/cnas/process/nonconformingWork.js b/src/api/cnas/process/nonconformingWork.js
new file mode 100644
index 0000000..ff6b2a4
--- /dev/null
+++ b/src/api/cnas/process/nonconformingWork.js
@@ -0,0 +1,85 @@
+// 涓嶇鍚堝伐浣滅浉鍏虫帴鍙�
+import request from "@/utils/request";
+
+//鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭垪琛�
+export function pageSuperviseDetailAccording(query) {
+ return request({
+ url: "/qualitySupervise/pageSuperviseDetailAccording",
+ method: "get",
+ params: query,
+ });
+}
+
+//瀵煎嚭涓嶇鍚堥」
+export function superviseDetailAccordingExport(query) {
+ return request({
+ url: "/qualitySupervise/superviseDetailAccordingExport",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//鏌ヨ鐩戠潱璁板綍涓嶇鍚堟帶鍒朵俊鎭�
+export function getSuperviseDetailAccording(query) {
+ return request({
+ url: "/qualitySupervise/getSuperviseDetailAccording",
+ method: "get",
+ params: query,
+ });
+}
+
+//涓嶇鍚堥」鐨勫垎甯冨垎椤垫煡璇�
+export function pageInconsistentDistribution(query) {
+ return request({
+ url: "/inconsistentDistribution/pageInconsistentDistribution",
+ method: "get",
+ params: query,
+ });
+}
+
+//涓嶇鍚堥」鐨勫垎甯冨垹闄�
+export function delInconsistentDistribution(query) {
+ return request({
+ url: "/inconsistentDistribution/delInconsistentDistribution",
+ method: "delete",
+ params: query,
+ });
+}
+
+//瀵煎嚭涓嶇鍚堥」鐨勫垎甯�
+export function exportInconsistentDistribution(query) {
+ return request({
+ url: "/inconsistentDistribution/exportInconsistentDistribution",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+//涓嶇鍚堥」鐨勫垎甯冭鎯�
+export function getInconsistentDistributionOne(query) {
+ return request({
+ url: "/inconsistentDistribution/getInconsistentDistributionOne",
+ method: "get",
+ params: query,
+ });
+}
+
+// 涓嶇鍚堥」鐨勫垎甯冩柊澧�
+export function addInconsistentDistribution(data) {
+ return request({
+ url: "/inconsistentDistribution/addInconsistentDistribution",
+ method: "post",
+ data: data,
+ });
+}
+
+// 涓嶇鍚堥」鐨勫垎甯冧慨鏀�
+export function updateInconsistentDistribution(data) {
+ return request({
+ url: "/inconsistentDistribution/updateInconsistentDistribution",
+ method: "post",
+ data: data,
+ });
+}
diff --git a/src/api/cnas/process/reportResults.js b/src/api/cnas/process/reportResults.js
new file mode 100644
index 0000000..a7f25d6
--- /dev/null
+++ b/src/api/cnas/process/reportResults.js
@@ -0,0 +1,47 @@
+// 鎶ュ憡缁撴灉鐩稿叧鎺ュ彛
+import request from "@/utils/request";
+
+//8鎶ュ憡缁撴灉-瀵煎嚭
+export function exportProcessReport(data) {
+ return request({
+ url: "/processReport/exportProcessReport",
+ method: "post",
+ data: data,
+ });
+}
+
+// 8鎶ュ憡缁撴灉-鏂板
+export function addProcessReport(data) {
+ return request({
+ url: "/processReport/addProcessReport",
+ method: "post",
+ data: data,
+ });
+}
+
+// 8鎶ュ憡缁撴灉-淇敼
+export function doProcessReport(data) {
+ return request({
+ url: "/processReport/doProcessReport",
+ method: "post",
+ data: data,
+ });
+}
+
+//8鎶ュ憡缁撴灉-鍒犻櫎
+export function delProcessReport(query) {
+ return request({
+ url: "/processReport/delProcessReport",
+ method: "delete",
+ params: query,
+ });
+}
+
+//8鎶ュ憡缁撴灉-鍒楄〃
+export function pageProcessReport(query) {
+ return request({
+ url: "/processReport/pageProcessReport",
+ method: "get",
+ params: query,
+ });
+}
diff --git a/src/api/cnas/process/sampleDisposal.js b/src/api/cnas/process/sampleDisposal.js
new file mode 100644
index 0000000..a763edd
--- /dev/null
+++ b/src/api/cnas/process/sampleDisposal.js
@@ -0,0 +1,74 @@
+// 妫�娴嬫垨鏍″噯鐗╁搧鐨勫缃�
+import request from "@/utils/request";
+
+// 淇敼
+export function doProcessDeal(data) {
+ return request({
+ url: "/processDeal/doProcessDeal",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鏂板
+export function addProcessDeal(data) {
+ return request({
+ url: "/processDeal/addProcessDeal",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鎻愪氦鍘嗗彶 浼犲弬id
+export function submitProcessTotaldeal(data) {
+ return request({
+ url: "/processTotaldeal/submitProcessTotaldeal",
+ method: "post",
+ data: data,
+ });
+}
+
+//鏌ヨ璇︽儏 鍒嗛〉鏌ヨ閲岄潰totaldealId 浼犲弬鍘嗗彶鐨刬d
+export function pageProcessDeal(query) {
+ return request({
+ url: "/processDeal/pageProcessDeal",
+ method: "get",
+ params: query,
+ });
+}
+
+// 瀹℃牳 浼犲弬id鍜岄�氳繃涓嶉�氳繃state(涓枃)
+export function checkProcessTotaldeal(data) {
+ return request({
+ url: "/processTotaldeal/checkProcessTotaldeal",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鎵瑰噯 浼犲弬id鍜岄�氳繃涓嶉�氳繃state(涓枃)
+export function ratifyProcessTotaldeal(data) {
+ return request({
+ url: "/processTotaldeal/ratifyProcessTotaldeal",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍒犻櫎
+export function delProcessDeal(query) {
+ return request({
+ url: "/processDeal/delProcessDeal",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鏌ョ湅鍘嗗彶
+export function pageProcessTotaldeal(query) {
+ return request({
+ url: "/processTotaldeal/pageProcessTotaldeal",
+ method: "get",
+ params: query,
+ });
+}
diff --git a/src/api/cnas/process/uncertainty.js b/src/api/cnas/process/uncertainty.js
new file mode 100644
index 0000000..7223cc1
--- /dev/null
+++ b/src/api/cnas/process/uncertainty.js
@@ -0,0 +1,39 @@
+// 涓嶇‘瀹氬害璇勫畾鐩稿叧鎺ュ彛
+import request from "@/utils/request";
+
+//瀵煎嚭
+export function exportProcessEvaluate(query) {
+ return request({
+ url: "/processEvaluate/exportProcessEvaluate",
+ method: "get",
+ responseType: "blob",
+ params: query,
+ });
+}
+
+// 濉啓 (涓昏涓婁紶id鍜屽娉╪ote灏卞ソ浜�)
+export function doProcessEvaluate(data) {
+ return request({
+ url: "/processEvaluate/doProcessEvaluate",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍒犻櫎
+export function delProcessEvaluate(query) {
+ return request({
+ url: "/processEvaluate/delProcessEvaluate",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鍒嗛〉
+export function pageProcessEvaluate(query) {
+ return request({
+ url: "/processEvaluate/pageProcessEvaluate",
+ method: "get",
+ params: query,
+ });
+}
diff --git a/src/api/system/user.js b/src/api/system/user.js
index bd2c924..57ed6d5 100644
--- a/src/api/system/user.js
+++ b/src/api/system/user.js
@@ -189,3 +189,11 @@
params: query,
});
}
+
+// 鑾峰彇褰撳墠鐧诲綍浜哄憳閮ㄩ棬
+export function selectUserDepartmentLimsName(query) {
+ return request({
+ url: "/system/newUser/selectUserDepartmentLimsName",
+ method: "get",
+ });
+}
diff --git a/src/components/Table/lims-table.vue b/src/components/Table/lims-table.vue
index f111ab2..0a2f204 100644
--- a/src/components/Table/lims-table.vue
+++ b/src/components/Table/lims-table.vue
@@ -110,7 +110,7 @@
</template>
</el-table-column>
</el-table>
- <pagination v-show="page.total > 0" :total="page.total" :layout="page.layout" :page.sync="page.current"
+ <pagination v-if="page" v-show="page.total > 0" :total="page.total" :layout="page.layout" :page.sync="page.current"
:limit.sync="page.size" @pagination="pagination" />
</div>
</template>
diff --git a/src/main.js b/src/main.js
index 870a586..49208a3 100644
--- a/src/main.js
+++ b/src/main.js
@@ -71,6 +71,7 @@
Vue.prototype.uploadHeader = {
Authorization: "Bearer " + getToken(),
};
+
// 瑙e喅el-radio-group鍗曢�夋鑷韩鐨刡ug
Vue.directive("removeAriaHidden", {
bind(el, binding) {
diff --git a/src/views/CNAS/process/complaint/index.vue b/src/views/CNAS/process/complaint/index.vue
new file mode 100644
index 0000000..5a998b3
--- /dev/null
+++ b/src/views/CNAS/process/complaint/index.vue
@@ -0,0 +1,629 @@
+<template>
+ <div class="Complaint">
+ <div class="search">
+ <div class="search_thing">
+ <div class="search_label">鏍峰搧缂栧彿锛�</div>
+ <div class="search_input"><el-input v-model="queryParams.sampleCode" clearable placeholder="璇疯緭鍏�" size="small"
+ @keyup.enter.native="refreshTable()"></el-input></div>
+ </div>
+ <div class="search_thing">
+ <div class="search_label">鎶曡瘔鍚嶇О锛�</div>
+ <div class="search_input">
+ <el-input v-model="queryParams.complainName" clearable placeholder="璇疯緭鍏�" size="small"
+ @keyup.enter.native="refreshTable()"></el-input>
+ </div>
+ </div>
+ <div class="search_thing" style="padding-left: 30px;">
+ <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+ <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+ </div>
+ <div class="btn">
+ <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">瀵煎嚭</el-button>
+ <el-button size="small" type="primary" @click="openAdd">鏂板</el-button>
+ </div>
+ </div>
+ <div class="table">
+ <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 290px)'"
+ :page="page" @pagination="pagination"></lims-table>
+ </div>
+ <el-dialog :visible.sync="addDialogVisible" title="鏂板" width="400px">
+ <el-row>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鎶曡瘔鏂瑰悕绉帮細</div>
+ <div class="search_input"><el-input v-model="addInfo.complainName" clearable placeholder="璇疯緭鍏�"
+ size="small"></el-input></div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">妫�楠屾姤鍛婄紪鍙凤細</div>
+ <div class="search_input">
+ <el-input v-model="addInfo.code" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鏍峰搧缂栧彿锛�</div>
+ <div class="search_input"><el-input v-model="addInfo.sampleCode" clearable placeholder="璇疯緭鍏�"
+ size="small"></el-input></div>
+ </div>
+ </el-col>
+ <el-col :span="24">
+ <div class="search_thing">
+ <div class="search_label">鎶曡瘔鏂瑰紡锛�</div>
+ <div class="search_input"><el-input v-model="addInfo.complainMethod" clearable placeholder="璇疯緭鍏�"
+ size="small"></el-input></div>
+ </div>
+ </el-col>
+ </el-row>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="addDialogVisible = false">鍙� 娑�</el-button>
+ <el-button :loading="addLoading" type="primary" @click="handleAdd">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :class="{ downPdf: title == '瀵煎嚭' }" :modal="title != '瀵煎嚭'" :title="title"
+ :visible.sync="handleDialogVisible" width="800px">
+ <div class="dialog-body">
+ <div id="dialogBody">
+ <h4 style="display: flex;align-items: center;flex-direction: column;justify-content: center;">
+ <span style="font-size: 20px;">瀹㈡埛鎶曡瘔鍙楃悊鍗�</span>
+ <span>Customer complaint receipts</span>
+ </h4>
+ <p style="display: flex;justify-content: space-between;margin-top: 16px;">
+ <span>{{ currentInfo0.complainNo }}</span>
+ <span>NO:</span>
+ </p>
+ <table border="1" cellpadding="10" class="tables">
+ <tr>
+ <td colspan="3">
+ <p>鎶曡瘔鏂瑰悕绉�</p>
+ <p class="en">Name of the complaining party</p>
+ </td>
+ <td colspan="3">{{ currentInfo0.complainName }}</td>
+ </tr>
+ <tr>
+ <td>
+ <p>妫�娴嬫姤鍛婄紪鍙�</p>
+ <p class="en">Test report number</p>
+ </td>
+ <td colspan="3">{{ currentInfo0.code }}</td>
+ <td>
+ <p>鏍峰搧缂栧彿</p>
+ <p class="en">Sample number</p>
+ </td>
+ <td>{{ currentInfo0.sampleCode }}</td>
+ </tr>
+ <tr>
+ <td>
+ <p>鎶曡瘔浜�</p>
+ <p class="en">Complainant</p>
+ </td>
+ <td>{{ currentInfo0.createUser }}</td>
+ <td>
+ <p>鐢佃瘽</p>
+ <p class="en">Phone</p>
+ </td>
+ <td>{{ currentInfo0.phone }}</td>
+ <td>
+ <p>E-Mail</p>
+ <p class="en">E-mail</p>
+ </td>
+ <td>{{ currentInfo0.email }}</td>
+ </tr>
+ <tr>
+ <td>
+ <p>鎶曡瘔鏂瑰紡</p>
+ <p class="en">Complaint method</p>
+ </td>
+ <td colspan="3">{{ currentInfo0.complainMethod }}</td>
+ <td>
+ <p>鎶曡瘔鏃ユ湡</p>
+ <p class="en">Date of complaint</p>
+ </td>
+ <td>{{ currentInfo0.createTime ? currentInfo0.createTime.split(' ')[0] : '' }}</td>
+ </tr>
+ <tr>
+ <td>
+ <p>闂璁板綍</p>
+ <p class="en">Problem logging</p>
+ </td>
+ <td colspan="5">
+ <div class="user-content">
+ <el-input v-if="title == '澶勭悊鎶曡瘔'" v-model="currentInfo0.problemRecords" :rows="3" placeholder="璇疯緭鍏ュ唴瀹�"
+ type="textarea">
+ </el-input>
+ <p v-else style="text-align: left;line-height: 26px;">{{ currentInfo0.problemRecords }}</p>
+ </div>
+ <div v-if="title != '澶勭悊鎶曡瘔'" class="user-info">
+ <div style="width: 200px;margin-right: 10px;">
+ <p style="text-align: end;">璐ㄩ噺璐熻矗浜�:</p>
+ <p class="en" style="text-align: end;">Quality Manager:</p>
+ </div>
+ <span>{{ currentInfo0.problemRecordsUserName }}</span>
+ <div style="width: 70px;">
+ <p>鏃ユ湡:</p>
+ <p class="en">Date:</p>
+ </div>
+ <span style="margin-right: 16px;">{{ currentInfo0.problemRecordsTime }}</span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>璐d换褰掑睘鍙婃姇璇夋槸鍚︽垚绔�</p>
+ <p class="en">Attribution of responsibility and whether the complaint is established</p>
+ </td>
+ <td colspan="5">
+ <div class="user-content">
+ <el-input v-if="title == '澶勭悊鎶曡瘔'" v-model="currentInfo0.dutyOwnership" :rows="3" placeholder="璇疯緭鍏ュ唴瀹�"
+ type="textarea">
+ </el-input>
+ <p v-else style="text-align: left;line-height: 26px;">{{ currentInfo0.dutyOwnership }}</p>
+ </div>
+ <div v-if="title != '澶勭悊鎶曡瘔'" class="user-info">
+ <div style="width: 200px;margin-right: 10px;">
+ <p style="text-align: end;">璐ㄩ噺璐熻矗浜�:</p>
+ <p class="en" style="text-align: end;">Quality Manager:</p>
+ </div>
+ <span>{{ currentInfo0.dutyOwnershipUserName }}</span>
+ <div style="width: 70px;">
+ <p>鏃ユ湡:</p>
+ <p class="en">Date:</p>
+ </div>
+ <span style="margin-right: 16px;">{{ currentInfo0.dutyOwnershipTime }}</span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>鍘熷洜鍒嗘瀽</p>
+ <p class="en">Cause analysis</p>
+ </td>
+ <td colspan="5">
+ <div class="user-content">
+ <el-input v-if="title == '澶勭悊鎶曡瘔'" v-model="currentInfo0.causeAnalysis" :rows="3" placeholder="璇疯緭鍏ュ唴瀹�"
+ type="textarea">
+ </el-input>
+ <p v-else style="text-align: left;line-height: 26px;">{{ currentInfo0.causeAnalysis }}</p>
+ </div>
+ <div v-if="title != '澶勭悊鎶曡瘔'" class="user-info">
+ <div style="width: 200px;margin-right: 10px;">
+ <p style="text-align: end;">璐d换閮ㄩ棬璐熻矗浜�:</p>
+ <p class="en" style="text-align: end;">Head of Responsible Department:</p>
+ </div>
+ <span>{{ currentInfo0.causeAnalysisUserName }}</span>
+ <div style="width: 70px;">
+ <p>鏃ユ湡:</p>
+ <p class="en">Date:</p>
+ </div>
+ <span style="margin-right: 16px;">{{ currentInfo0.causeAnalysisTime }}</span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>绾犳鎺柦</p>
+ <p class="en">Corrective actions</p>
+ </td>
+ <td colspan="5">
+ <div class="user-content">
+ <el-input v-if="title == '澶勭悊鎶曡瘔'" v-model="currentInfo0.correctiveAction" :rows="3" placeholder="璇疯緭鍏ュ唴瀹�"
+ type="textarea">
+ </el-input>
+ <p v-else style="text-align: left;line-height: 26px;">{{ currentInfo0.correctiveAction }}</p>
+ </div>
+ <div v-if="title != '澶勭悊鎶曡瘔'" class="user-info">
+ <div style="width: 200px;margin-right: 10px;">
+ <p style="text-align: end;">璐d换閮ㄩ棬璐熻矗浜�:</p>
+ <p class="en" style="text-align: end;">Head of Responsible Department:</p>
+ </div>
+ <span>{{ currentInfo0.correctiveActionUserName }}</span>
+ <div style="width: 70px;">
+ <p>鏃ユ湡:</p>
+ <p class="en">Date:</p>
+ </div>
+ <span style="margin-right: 16px;">{{ currentInfo0.correctiveActionTime }}</span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>绾犳鎺柦纭</p>
+ <p class="en">Corrective actions confirmation</p>
+ </td>
+ <td colspan="5">
+ <div class="user-content">
+ <el-input v-if="title == '澶勭悊鎶曡瘔'" v-model="currentInfo0.correctiveActionConfirmation" :rows="3"
+ placeholder="璇疯緭鍏ュ唴瀹�" type="textarea">
+ </el-input>
+ <p v-else style="text-align: left;line-height: 26px;">{{ currentInfo0.correctiveActionConfirmation }}
+ </p>
+ </div>
+ <div v-if="title != '澶勭悊鎶曡瘔'" class="user-info">
+ <div style="width: 200px;margin-right: 10px;">
+ <p style="text-align: end;">璐ㄩ噺璐熻矗浜�:</p>
+ <p class="en" style="text-align: end;">Quality Manager:</p>
+ </div>
+ <span>{{ currentInfo0.correctiveActionConfirmationUserName }}</span>
+ <div style="width: 70px;">
+ <p>鏃ユ湡:</p>
+ <p class="en">Date:</p>
+ </div>
+ <span style="margin-right: 16px;">{{ currentInfo0.correctiveActionConfirmationTime }}</span>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <span v-if="title == '澶勭悊鎶曡瘔'" slot="footer" class="dialog-footer">
+ <el-button @click="handleDialogVisible = false">鍙� 娑�</el-button>
+ <el-button :loading="addLoading" type="primary" @click="submit">鎻� 浜�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import { getYearAndMonthAndDays } from '@/utils/date'
+import { exportHtmlToPDF } from '@/utils/downHtmlToPDF'
+import {
+ addProcessComplain,
+ getProcessComplain,
+ doProcessComplain,
+ exportProcessComplain,
+ pageProcessComplain,
+ delProcessComplain
+} from '@/api/cnas/process/complaint.js'
+import { mapGetters } from "vuex";
+export default {
+ components: {
+ limsTable
+ },
+ data() {
+ return {
+ addPower: false,
+ outLoading: false,
+ addDialogVisible: false,
+ addLoading: false,
+ handleDialogVisible: false,
+ title: '澶勭悊鎶曡瘔',
+ addInfo: {},//鏂板淇℃伅
+ currentInfo: null,//鎺ュ彛璇锋眰鍥炴潵鐨勪俊鎭�
+ currentInfo0: {},//鐢ㄦ埛缂栬緫杩囧悗鐨勪俊鎭�
+ outPower: false,
+ queryParams: {},
+ tableData: [],
+ column: [
+ { label: "鎶曡瘔鍚嶇О", prop: "complainName" },
+ { label: "鎶曡瘔浜�", prop: "complainant" },
+ { label: "鎶曡瘔鏃ユ湡", prop: "createTime" },
+ {
+ dataType: "action",
+ fixed: "right",
+ label: "鎿嶄綔",
+ operation: [
+ {
+ name: "鏌ョ湅",
+ type: "text",
+ clickFun: (row) => {
+ this.handleLook(row);
+ },
+ },
+ {
+ name: "澶勭悊",
+ type: "text",
+ clickFun: (row) => {
+ this.handleWork(row);
+ },
+ },
+ {
+ name: "瀵煎嚭",
+ type: "text",
+ clickFun: (row) => {
+ this.handleOut(row);
+ },
+ },
+ {
+ name: "鍒犻櫎",
+ type: "text",
+ clickFun: (row) => {
+ this.handleDelete(row);
+ },
+ },
+ ],
+ },
+ ],
+ page: {
+ total: 0,
+ size: 10,
+ current: 0,
+ },
+ };
+ },
+ computed: {
+ ...mapGetters(["userId"]),
+ },
+ mounted() {
+ // this.entityCopy = this.HaveJson(this.componentData.entity);
+ this.getList()
+ },
+ methods: {
+ // 鏉冮檺鍒嗛厤
+ getPower() {
+ let power = JSON.parse(sessionStorage.getItem('power'))
+ let up = false
+ let del = false
+ let add = false
+ let out = false
+ for (var i = 0; i < power.length; i++) {
+ if (power[i].menuMethod == 'doProcessComplain') {
+ up = true
+ }
+ if (power[i].menuMethod == 'addProcessComplain') {
+ add = true
+ }
+ if (power[i].menuMethod == 'delProcessComplain') {
+ del = true
+ }
+ if (power[i].menuMethod == 'exportProcessComplain') {
+ out = true
+ }
+ }
+ if (!up) {
+ this.componentData.do.splice(2, 1)
+ }
+ if (!del) {
+ this.componentData.do.splice(1, 1)
+ }
+ this.outPower = out
+ this.addPower = add
+ },
+ openAdd() {
+ this.addInfo = {}
+ this.addDialogVisible = true
+ },
+ handleAdd() {
+ this.addLoading = true
+ addProcessComplain(this.addInfo).then((res) => {
+ this.addLoading = false
+ if (res.code == 201) {
+ this.$message({
+ type: 'error',
+ message: '鏂板澶辫触'
+ })
+ return
+ }
+ this.$message({
+ type: 'success',
+ message: '鏂板鎴愬姛'
+ })
+ this.addDialogVisible = false
+ this.refresh()
+ })
+ },
+ // 澶勭悊鎶曡瘔
+ handleWork(row) {
+ getProcessComplain({ id: row.id }).then((res) => {
+ this.currentInfo = res.data
+ this.currentInfo0 = this.HaveJson(res.data)
+ this.title = '澶勭悊鎶曡瘔'
+ this.handleDialogVisible = true
+ })
+ },
+ submit() {
+ this.handleParam('problemRecords')
+ this.handleParam('dutyOwnership')
+ this.handleParam('causeAnalysis')
+ this.handleParam('correctiveAction')
+ this.handleParam('correctiveActionConfirmation')
+ this.addLoading = true
+ for (let i in this.currentInfo0) {
+ if (!this.currentInfo0[i]) {
+ delete this.currentInfo0[i]
+ }
+ }
+ doProcessComplain(this.currentInfo0).then((res) => {
+ this.addLoading = false
+ if (res.code == 201) {
+ this.$message({
+ type: 'error',
+ message: '鎻愪氦澶辫触'
+ })
+ return
+ }
+ this.$message({
+ type: 'success',
+ message: '鎻愪氦鎴愬姛'
+ })
+ this.handleDialogVisible = false
+ this.refresh()
+ })
+ },
+ /**
+ * 澶勭悊鍙傛暟
+ *
+ * @param {string} type - 闇�瑕佸鐞嗙殑鍙傛暟绫诲瀷
+ */
+ handleParam(type) {
+ if (this.currentInfo0[type] != this.currentInfo[type]) {
+ this.currentInfo0[type + 'User'] = this.userId
+ this.currentInfo0[type + 'Time'] = getYearAndMonthAndDays()
+ }
+ },
+ // 鏌ョ湅鎶曡瘔
+ handleLook(row) {
+ addProcessComplain({ id: row.id }).then((res) => {
+ this.currentInfo = res.data
+ this.currentInfo0 = this.HaveJson(res.data)
+ this.title = '鏌ョ湅鎶曡瘔'
+ this.handleDialogVisible = true
+ })
+ },
+ getList() {
+ this.tableLoading = true;
+ let param = { ...this.queryParams, ...this.page };
+ delete param.total;
+ pageProcessComplain({ ...param })
+ .then((res) => {
+ this.tableLoading = false;
+ if (res.code === 200) {
+ this.tableData = res.data.records;
+ this.page.total = res.data.total;
+ }
+ })
+ .catch((err) => {
+ this.tableLoading = false;
+ });
+ },
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.getList();
+ },
+ refresh() {
+ this.queryParams = {};
+ this.page.current = 1;
+ this.getList();
+ },
+ refreshTable() {
+ this.page.current = 1;
+ this.getList();
+ },
+ handleDown() {
+ this.outLoading = true
+ exportProcessComplain(this.queryParams).then(res => {
+ this.outLoading = false
+ if (res.code == 201) {
+ return
+ }
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '鎶曡瘔鎯呭喌姹囨�昏〃.xlsx');
+ })
+ },
+ handleOut(row) {
+ getProcessComplain({ id: row.id }).then((res) => {
+ if (res.code == 201) {
+ return
+ }
+ this.currentInfo = res.data
+ this.currentInfo0 = this.HaveJson(res.data)
+ this.title = '瀵煎嚭'
+ this.handleDialogVisible = true
+ setTimeout(() => {
+ this.$nextTick(() => {
+ const element = document.getElementById("dialogBody");
+ exportHtmlToPDF(element, '鎶曡瘔璇︽儏').then(res => {
+ this.handleDialogVisible = false
+ })
+ })
+ }, 500);
+ })
+ },
+ handleDelete(row) {
+ this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ delProcessComplain({ id: row.id }).then((res) => {
+ if (res.code == 201) return;
+ this.$message.success("鍒犻櫎鎴愬姛");
+ this.refresh();
+ });
+ })
+ .catch(() => { });
+ },
+ },
+}
+</script>
+
+<style scoped>
+.title {
+ height: 60px;
+ line-height: 60px;
+}
+
+.search {
+ background-color: #fff;
+ height: 80px;
+ display: flex;
+ align-items: center;
+ position: relative;
+}
+
+.search_thing {
+ width: 350px;
+ display: flex;
+ align-items: center;
+}
+
+.search_label {
+ width: 110px;
+ font-size: 14px;
+ text-align: right;
+}
+
+.search_input {
+ width: calc(100% - 110px);
+}
+
+.table {
+ background-color: #fff;
+ height: calc(100% - 60px - 80px - 10px - 40px);
+ padding: 20px;
+}
+
+.dialog-body {
+ max-height: 75vh;
+ overflow-y: auto;
+}
+
+.tables {
+ table-layout: fixed;
+ width: 100%;
+}
+
+.tables td {
+ height: 40px;
+ width: 100px;
+ text-align: center;
+ font-size: 14px;
+ word-wrap: break-word;
+ white-space: normal;
+}
+
+.en {
+ font-size: 12px;
+ word-break: break-word;
+ /* 鑷姩鏂 */
+ overflow-wrap: break-word;
+ /* 闃叉婧㈠嚭 */
+ white-space: normal;
+ /* 榛樿鎹㈣ */
+}
+
+.user-info {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+}
+
+.user-content {
+ min-height: 60px;
+}
+
+.downPdf {
+ opacity: 0 !important;
+}
+
+.btn {
+ position: absolute;
+ top: 16px;
+ right: 20px;
+}
+</style>
diff --git a/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue
new file mode 100644
index 0000000..0db2c44
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue
@@ -0,0 +1,171 @@
+<template>
+ <div>
+ <el-dialog :visible.sync="filesDialogVisible" title="闄勪欢涓婁紶" width="80%" @closed="closeFilesLook">
+ <div style="display: flex;justify-content: space-between;">
+ <el-upload ref='upload' :action="fileAction" :auto-upload="true" :before-upload="fileBeforeUpload"
+ :data="{ detailsEvaluateId: info.detailsEvaluateId }" :headers="uploadHeader" :on-error="onError"
+ :on-success="handleSuccessUp" :show-file-list="false"
+ accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;">
+ <el-button size="small" style="height: 38px" type="primary">闄勪欢涓婁紶</el-button>
+ </el-upload>
+ </div>
+ <div>
+ <limsTable ref="yearTable" :column="columnData" :height="'calc(100vh - 47em)'" :highlightCurrentRow="true"
+ :table-data="tableData" :table-loading="tableLoading" style="margin-top: 0.5em;">
+ </limsTable>
+ </div>
+ </el-dialog>
+ <el-dialog :visible.sync="lookDialogVisible" fullscreen title="鏌ョ湅闄勪欢" width="800px">
+ <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="javaApi + '/word/' + currentInfo.fileUrl"
+ style="height: 90vh;overflow-y: auto;top: 0" />
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import filePreview from "@/components/Preview/filePreview.vue";
+import {
+ delVerifyEvaluateFileList,
+ getEvaluateFileList,
+} from '@/api/cnas/process/ensureResults/ensureResultsValidity.js'
+export default {
+ name: 'ViewRecord',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { filePreview, limsTable },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ filesDialogVisible: false,
+ tableLoading: false,
+ filesLookInfo: {},
+ columnData: [
+ {
+ label: '鏂囦欢鍚嶇О',
+ prop: 'fileName',
+ minWidth: '150px'
+ },
+ {
+ dataType: 'action',
+ minWidth: '100',
+ label: '鎿嶄綔',
+ fixed: 'right',
+ operation: [
+ {
+ name: '棰勮',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleLook(row)
+ }
+ },
+ {
+ name: '涓嬭浇',
+ type: 'text',
+ clickFun: (row) => {
+ this.upload(row)
+ }
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.delete(row)
+ }
+ }
+ ]
+ }
+ ],
+ tableData: [],
+ info: {},
+ currentInfo: {},
+ lookDialogVisible: false,
+ };
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ openDia(row) {
+ this.filesDialogVisible = true
+ console.log(1111, row)
+ this.info = row
+ this.searchTableList()
+ },
+ // 鏌ヨ闄勪欢鍒楄〃
+ searchTableList() {
+ this.tableLoading = true
+ getEvaluateFileList({ detailsEvaluateId: this.info.detailsEvaluateId }).then(res => {
+ this.tableLoading = false
+ if (res.code === 201) return
+ this.tableData = res.data
+ }).catch(err => {
+ this.tableLoading = false
+ console.log('err---', err);
+ })
+ },
+ closeFilesLook() {
+ this.filesDialogVisible = false
+ },
+ // 涓嬭浇
+ upload(row) {
+ let url = '';
+ if (row.type == 1) {
+ url = this.javaApi + '/img/' + row.fileUrl
+ this.$download.saveAs(url, row.fileName)
+ } else {
+ url = this.javaApi + '/word/' + row.fileUrlrow.fileName;
+ link.click();
+ this.$download.saveAs(url, row.fileName)
+ }
+ },
+ // 鍒犻櫎
+ delete(row) {
+ this.tableLoading = true
+ delVerifyEvaluateFileList({ evaluateFileId: row.evaluateFileId }).then(res => {
+ this.tableLoading = false
+ if (res.code === 201) return
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.searchTableList()
+ }).catch(err => {
+ this.tableLoading = false
+ console.log('err---', err);
+ })
+ },
+ // 涓婁紶楠岃瘉
+ fileBeforeUpload(file) {
+ let flag = true
+ if (file.size > 1024 * 1024 * 10) {
+ this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+ this.$refs.upload.clearFiles()
+ flag = false
+ }
+ if (!flag) {
+ return Promise.reject(flag); //姝g‘鐨勭粓姝�
+ }
+ },
+ onError(err, file, fileList, type) {
+ this.$message.error('涓婁紶澶辫触')
+ this.$refs.upload.clearFiles()
+ },
+ handleSuccessUp(response,) {
+ this.upLoading = false;
+ if (response.code == 200) {
+ this.$message.success('涓婁紶鎴愬姛');
+ this.searchTableList()
+ }
+ },
+ // 鏌ョ湅鏂囦欢
+ handleLook(row) {
+ this.currentInfo = row
+ this.lookDialogVisible = true
+ },
+ },
+ computed: {
+ fileAction() {
+ return this.javaApi + '/qualityMonitor/uploadEvaluateFile'
+
+ }
+ },
+};
+</script>
+
+<style scoped></style>
diff --git a/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue
new file mode 100644
index 0000000..d3911c7
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/carryOutDialog.vue
@@ -0,0 +1,324 @@
+<template>
+ <div>
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="formDia" title="瀹炴柦"
+ width="60%" @close="closeCarryOutDia">
+ <el-steps :active="currentStep" align-center finish-status="success">
+ <el-step title="瀹炴柦"></el-step>
+ <el-step title="鎵瑰噯"></el-step>
+ </el-steps>
+ <div style="height: 620px;overflow-y: auto">
+ <table border="1" cellspacing="10" class="tables">
+ <tr>
+ <td class="td-title">
+ <p>鐩戞帶椤圭洰锛�</p>
+ </td>
+ <td colspan="3">
+ <el-input v-if="currentStep == 0" v-model="form.monitorProject" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+ </el-input>
+ <span v-else class="td-info"> {{ form.monitorProject }}</span>
+ </td>
+ <td class="td-title">
+ <p>鐩戞帶鏃堕棿锛�</p>
+ </td>
+ <td colspan="3">
+ <el-input v-if="currentStep == 0" v-model="form.monitorData" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+ </el-input>
+ <span v-else class="td-info"> {{ form.monitorData }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="8">
+ <div>
+ <p>鐩戞帶鐩殑锛�</p>
+ </div>
+ <div>
+ <el-input v-if="currentStep == 0" v-model="form.monitorPurpose" :rows="3" placeholder="璇疯緭鍏ュ唴瀹�"
+ size="small" type="textarea">
+ </el-input>
+ <span v-else class="td-info2"> {{ form.monitorPurpose }}</span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="8">
+ <div>
+ <p>鐩戞帶鏂规硶锛�</p>
+ </div>
+ <div>
+ <el-input v-if="currentStep == 0" v-model="form.monitorMethod" :rows="4" placeholder="璇疯緭鍏ュ唴瀹�"
+ size="small" type="textarea">
+ </el-input>
+ <span v-else class="td-info2"> {{ form.monitorMethod }}</span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="8">
+ <div>
+ <p>鍙傚姞浜哄憳锛�</p>
+ </div>
+ <div>
+ <el-input v-if="currentStep == 0" v-model="form.participant" :rows="3" placeholder="璇疯緭鍏ュ唴瀹�" size="small"
+ type="textarea">
+ </el-input>
+ <span v-else class="td-info2"> {{ form.participant }}</span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="8">
+ <div>
+ <p>杩囩▼鎺у埗锛�</p>
+ </div>
+ <div>
+ <el-input v-if="currentStep == 0" v-model="form.processControl" :rows="3" placeholder="璇疯緭鍏ュ唴瀹�"
+ size="small" type="textarea">
+ </el-input>
+ <span v-else class="td-info2"> {{ form.processControl }}</span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="8">
+ <div>
+ <p>缁撴灉璇勪环鏍囧噯锛堝浣曡瘎浠凤級锛�</p>
+ </div>
+ <div>
+ <el-input v-if="currentStep == 0" v-model="form.howEvaluate" :rows="3" placeholder="璇疯緭鍏ュ唴瀹�" size="small"
+ type="textarea">
+ </el-input>
+ <span v-else class="td-info2"> {{ form.howEvaluate }}</span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="8">
+ <div>
+ <p>缁忚垂棰勭畻锛�</p>
+ </div>
+ <div>
+ <el-input v-if="currentStep == 0" v-model="form.budget" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+ </el-input>
+ <span v-else class="td-info2"> {{ form.budget }}</span>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <div>
+ <p>妫�娴嬮儴闂細</p>
+ </div>
+ <div>
+ <el-input v-if="currentStep == 0" v-model="form.inspectionDepartment" placeholder="璇疯緭鍏ュ唴瀹�" size="small">
+ </el-input>
+ <span v-else class="td-info2"> {{ form.inspectionDepartment }}</span>
+ </div>
+ </td>
+ <td colspan="4">
+ <div v-if="currentStep == 0">
+ <div>閫夋嫨鎵瑰噯浜猴細</div>
+ <div>
+ <el-select v-if="currentStep == 0" v-model="form.ratifyUserId" clearable filterable placeholder="璇烽�夋嫨"
+ size="small">
+ <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ <span v-else class="td-info2"> {{ form.ratifyName }}</span>
+ </div>
+ </div>
+ <div v-else>
+ <div>
+ <p>鎵瑰噯鎰忚锛�</p>
+ </div>
+ <div>
+ <el-input v-if="currentStep == 1" v-model="form.ratifyOpinion" :rows="3" placeholder="璇疯緭鍏ュ唴瀹�"
+ size="small" type="textarea">
+ </el-input>
+ <span v-if="currentStep == 2" class="td-info2"> {{ form.ratifyOpinion }}</span>
+ <span v-if="currentStep == 2" class="td-info3"> {{ '鎵瑰噯浜猴細' + form.ratifyName }}</span>
+ </div>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeCarryOutDia">鍙� 娑�</el-button>
+ <el-button v-if="currentStep != 2" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ getQualityMonitorRatify,
+ addQualityMonitorRatify,
+ addQualityMonitorRatifyOpinion,
+} from '@/api/cnas/process/ensureResults/ensureResultsValidity.js'
+import { selectUserCondition } from "@/api/system/user";
+export default {
+ name: 'carryOutDialog',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ currentStep: 0,
+ form: {
+ monitorProject: '',
+ monitorData: '',
+ monitorPurpose: '',
+ monitorMethod: '',
+ participant: '',
+ processControl: '',
+ howEvaluate: '',
+ budget: '',
+ inspectionDepartment: '',
+ ratifyUserId: '',
+ ratifyOpinion: '',
+ qualityMonitorDetailsId: '',
+ ratifyName: '',
+ },
+ personList: [],
+ editLoad: false,
+ isCarryOut: false, // 鏄惁涓哄疄鏂�
+ };
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ openDia(row) {
+ this.formDia = true
+ this.searchInfo(row)
+ this.getAuthorizedPerson()
+ },
+ // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+ searchInfo(row) {
+ getQualityMonitorRatify({ qualityMonitorDetailsId: row.qualityMonitorDetailsId }).then(res => {
+ if (res.code === 201) return
+ // 鏈塪etailsRatifyId鍒欒鏄庢彁浜よ繃瀹炴柦淇℃伅
+ if (res.data.detailsRatifyId) {
+ // 鏄惁缁撴潫0:鏈粨鏉�, 1:宸茬粨鏉�
+ if (res.data.isFinish == 0) {
+ this.currentStep = 1
+ } else if (res.data.isFinish == 1) {
+ this.currentStep = 2
+ }
+ } else {
+ this.currentStep = 0
+ }
+ this.form = res.data
+ }).catch(err => {
+ console.log('err---', err);
+ })
+ },
+ // 鎻愪氦
+ handleEdit() {
+ this.editLoad = true
+ if (this.currentStep == 0) {
+ this.addInfo()
+ } else {
+ this.editInfo()
+ }
+ },
+ // 鎻愪氦瀹炴柦
+ addInfo() {
+ addQualityMonitorRatify(this.form).then(res => {
+ this.editLoad = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeCarryOutDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.editLoad = false
+ })
+ },
+ // 鎻愪氦鎵瑰噯
+ editInfo() {
+ addQualityMonitorRatifyOpinion(this.form).then(res => {
+ this.editLoad = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeCarryOutDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.editLoad = false
+ })
+ },
+ // 鍏抽棴寮规
+ closeCarryOutDia() {
+ this.formDia = false
+ this.$emit('closeCarryOutDia')
+ },
+ getAuthorizedPerson() {
+ selectUserCondition().then(res => {
+ let data = []
+ res.data.forEach(a => {
+ data.push({
+ label: a.name,
+ value: a.id
+ })
+ })
+ this.personList = data
+ })
+ },
+ }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+ margin: 20px auto 50px !important;
+}
+
+.tables {
+ table-layout: fixed;
+ width: 100%;
+ margin-top: 10px;
+}
+
+.td-title {
+ height: 40px;
+ width: 100px;
+ text-align: center;
+ font-size: 14px;
+ word-wrap: break-word;
+ white-space: normal;
+ padding: 6px;
+}
+
+.td-info {
+ display: inline-block;
+ width: 100%;
+ text-align: center;
+ font-size: 14px;
+ word-wrap: break-word;
+ white-space: normal;
+}
+
+.td-info2 {
+ display: inline-block;
+ width: 90%;
+ text-align: left;
+ font-size: 16px;
+ word-wrap: break-word;
+ white-space: normal;
+ margin-left: 20px;
+}
+
+.tables td {
+ height: 40px;
+ width: 100px;
+ font-size: 14px;
+ word-wrap: break-word;
+ white-space: normal;
+ padding: 6px;
+}
+
+.td-info3 {
+ width: 90%;
+ display: inline-block;
+ text-align: right;
+}
+</style>
diff --git a/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue
new file mode 100644
index 0000000..9d99c93
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/detailFormDialog.vue
@@ -0,0 +1,150 @@
+<template>
+ <div>
+ <el-dialog title="缂栬緫" :visible.sync="formDia" :close-on-click-modal="false" :close-on-press-escape="false"
+ width="80%" @close="closeDia">
+ <el-form :model="form" :rules="rules" ref="form" label-width="140px">
+ <el-col :span="12">
+ <el-form-item label="鐩戞帶鐩殑" prop="monitorPurpose">
+ <el-input v-model="form.monitorPurpose" size="small" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璁″垝寮�灞曟椂闂�" prop="plannedTime">
+ <el-input v-model="form.plannedTime" size="small" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐩戞帶椤圭洰" prop="monitorProject">
+ <el-input v-model="form.monitorProject" size="small" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍙傚姞鍗曚綅锛堜汉鍛橈級" prop="participant">
+ <el-input v-model="form.participant" size="small" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="棰勭畻锛堝厓锛�" prop="budget">
+ <el-input v-model="form.budget" size="small" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="缁勭粐浜哄憳" prop="organization">
+ <el-input v-model="form.organization" size="small" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鐩戞帶鏂瑰紡" prop="monitorWay">
+ <el-input v-model="form.monitorWay" size="small" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeDia">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitForm" :loading="upLoad">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ addQualityMonitorDetail,
+ updateQualityMonitorDetail,
+} from '@/api/cnas/process/ensureResults/ensureResultsValidity.js'
+export default {
+ name: 'detailFormDialog',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ props: ['qualityMonitorId'],
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ form: {
+ qualityMonitorDetailsId: '',
+ monitorPurpose: '',
+ plannedTime: '',
+ monitorProject: '',
+ participant: '',
+ budget: '',
+ organization: '',
+ monitorWay: '',
+ },
+ rules: {
+ monitorPurpose: [{ required: true, message: '璇疯緭鍏ョ洃鎺х洰鐨�', trigger: 'blur' }],
+ monitorProject: [{ required: true, message: '璇疯緭鍏ョ洃鎺ч」鐩�', trigger: 'blur' }],
+ },
+ upLoad: false,
+ operationType: '',
+ };
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ openDia(type, row) {
+ this.formDia = true
+ this.operationType = type
+ if (type === 'edit') {
+ this.searchInfo(row)
+ }
+ },
+ searchInfo(row) {
+ this.form = { ...row }
+ },
+ // 鎻愪氦琛ㄥ崟
+ submitForm() {
+ this.$refs['form'].validate((valid) => {
+ if (valid) {
+ if (this.operationType === 'add') {
+ this.handleAdd()
+ } else {
+ this.handleEdit()
+ }
+ }
+ })
+ },
+ // 鎻愪氦鏂板
+ handleAdd() {
+ let entity = this.HaveJson(this.form)
+ entity.qualityMonitorId = this.qualityMonitorId
+ this.upLoad = true
+ addQualityMonitorDetail(entity).then(res => {
+ this.upLoad = false
+ if (res.code === 201) return
+ this.$message.success('鏂板鎴愬姛')
+ this.closeDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.upLoad = false
+ })
+ },
+ // 鎻愪氦淇敼
+ handleEdit() {
+ const entity = this.HaveJson(this.form)
+ this.upLoad = true
+ updateQualityMonitorDetail(entity).then(res => {
+ this.upLoad = false
+ if (res.code === 201) return
+ this.$message.success('淇敼鎴愬姛')
+ this.closeDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.upLoad = false
+ })
+ },
+ // 鍏抽棴寮规
+ closeDia() {
+ this.$refs.form.resetFields();
+ this.formDia = false
+ this.$emit('closeDia')
+ },
+ }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog__body {
+ max-height: 720px;
+ overflow-y: auto;
+}
+</style>
diff --git a/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue
new file mode 100644
index 0000000..aae2b99
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/components/evaluateDialog.vue
@@ -0,0 +1,334 @@
+<template>
+ <div>
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="formDia" title="璐ㄩ噺鐩戞帶璇勪环"
+ width="60%" @close="closeEvaDia">
+ <div style="text-align: right">
+ <el-button size="small" type="primary" @click="viewTestRecord">闄勪欢涓婁紶</el-button>
+ </div>
+ <el-steps :active="currentStep" align-center finish-status="success">
+ <el-step title="鐩戞帶璁″垝瀹炴柦鎯呭喌" @click.native="setStep(0)"></el-step>
+ <el-step title="鐩戞帶缁撴灉璇勪环" @click.native="setStep(1)"></el-step>
+ <el-step title="璇勫缁撹锛堟槸鍚﹂噰鍙栨帾鏂斤級" @click.native="setStep(2)"></el-step>
+ </el-steps>
+ <div>
+ <table border="1" cellspacing="10" class="tables">
+ <tr v-if="showStep === 0">
+ <td class="td-title">
+ <p><span class="required-span">* </span>璇勫鐩殑锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-input v-if="showStep === 0 && currentStep === 0" v-model="form.reviewPurpose" placeholder="璇疯緭鍏ュ唴瀹�"
+ size="small">
+ </el-input>
+ <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.reviewPurpose }}</span>
+ </td>
+ </tr>
+ <tr v-if="showStep === 0">
+ <td class="td-title">
+ <p><span class="required-span">* </span>璇勫浜哄憳锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-input v-if="showStep === 0 && currentStep === 0" v-model="form.reviewUser" placeholder="璇疯緭鍏ュ唴瀹�"
+ size="small">
+ </el-input>
+ <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.reviewUser }}</span>
+ </td>
+ </tr>
+ <tr v-if="showStep === 0">
+ <td class="td-title">
+ <p><span class="required-span">* </span>璇勫鏃ユ湡锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-input v-if="showStep === 0 && currentStep === 0" v-model="form.reviewTime" placeholder="璇疯緭鍏ュ唴瀹�"
+ size="small">
+ </el-input>
+ <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.reviewTime }}</span>
+ </td>
+ </tr>
+ <tr v-if="showStep === 0">
+ <td class="td-title">
+ <p><span class="required-span">* </span>鐩戞帶璁″垝瀹炴柦鎯呭喌锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-input v-if="showStep === 0 && currentStep === 0" v-model="form.implementCondition" :rows="5"
+ placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+ </el-input>
+ <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.implementCondition }}</span>
+ </td>
+ </tr>
+ <tr v-if="showStep === 0">
+ <td class="td-title">
+ <p>瀹炴柦閮ㄩ棬锛�</p>
+ </td>
+ <td class="td-info">
+ <span> {{ form.implementDepartment }}</span>
+ </td>
+ <td v-if="currentStep === 0" class="td-title">
+ <p>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p>
+ </td>
+ <td v-if="currentStep === 0" class="td-info">
+ <el-select v-model="form.implementUserId" clearable filterable placeholder="璇烽�夋嫨" size="small">
+ <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </td>
+ </tr>
+ <tr v-if="showStep === 1">
+ <td class="td-title">
+ <p>鐩戞帶缁撴灉璇勪环锛�</p>
+ </td>
+ <td class="td-info" colspan="4">
+ <el-input v-if="showStep === 1 && currentStep === 1" v-model="form.implementResult" :rows="5"
+ placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+ </el-input>
+ <span v-if="showStep === 1 && currentStep !== 1" class="td-info1"> {{ form.implementResult }}</span>
+ </td>
+ </tr>
+ <tr v-if="showStep === 1">
+ <td class="td-title">
+ <p>褰撳墠璐熻矗浜猴細</p>
+ </td>
+ <td class="td-info" colspan="4">
+ {{ form.implementName }}
+ </td>
+ </tr>
+ <tr v-if="showStep === 1">
+ <td v-if="currentStep === 1" class="td-title">
+ <p>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p>
+ </td>
+ <td v-if="currentStep === 1" class="td-info" colspan="4">
+ <el-select v-model="form.ratifyUserId" clearable filterable placeholder="璇烽�夋嫨" size="small">
+ <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </td>
+ </tr>
+ <tr v-if="showStep === 2">
+ <td class="td-title">
+ <p>璇勫缁撹锛堟槸鍚﹂噰鍙栨帾鏂斤級锛�</p>
+ </td>
+ <td class="td-info" colspan="4">
+ <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.ratifyOpinion" :rows="5"
+ placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+ </el-input>
+ <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.ratifyOpinion }}</span>
+ </td>
+ </tr>
+ <tr v-if="showStep === 2">
+ <td class="td-title">
+ <p>褰撳墠璐熻矗浜猴細</p>
+ </td>
+ <td class="td-info" colspan="4">
+ {{ form.ratifyUserName }}
+ </td>
+ </tr>
+ <tr v-if="showStep === 2">
+ <td class="td-title">
+ <p>瀹℃壒鏃ユ湡锛�</p>
+ </td>
+ <td class="td-info" colspan="4">
+ {{ form.ratifyTime }}
+ </td>
+ </tr>
+ </table>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeEvaDia">鍙� 娑�</el-button>
+ <el-button v-if="currentStep !== 3" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+ </span>
+ </el-dialog>
+ <view-record v-if="ViewRecord" ref="ViewRecord"></view-record>
+ </div>
+</template>
+
+<script>
+import ViewRecord from './ViewRecord.vue';
+import {
+ getQualityMonitorEvaluate,
+ addMonitorEvaluateOpinion,
+ addQualityMonitorEvaluate,
+} from '@/api/cnas/process/ensureResults/ensureResultsValidity.js'
+import { selectUserCondition } from "@/api/system/user";
+import { selectUserDepartmentLimsName } from "@/api/system/user";
+export default {
+ name: 'evaluateDialog',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { ViewRecord },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ currentStep: 0,
+ showStep: 0,
+ form: {
+ implementDepartment: '',
+ reviewPurpose: '',
+ reviewUser: '',
+ reviewTime: '',
+ implementCondition: '',
+ implementName: '',
+ implementUserId: '',
+ implementResult: '',
+ ratifyUserName: '',
+ ratifyUserId: '',
+ ratifyOpinion: '',
+ qualityMonitorDetailsId: '',
+ ratifyTime: '',
+ detailsEvaluateId: '',
+ },
+ editLoad: false,
+ personList: [],
+ ViewRecord: false,
+ };
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ openDia(row) {
+ this.formDia = true
+ this.searchInfo(row)
+ this.getAuthorizedPerson()
+ this.getDepartment()
+ },
+ // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+ searchInfo(row) {
+ this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId
+ getQualityMonitorEvaluate({ qualityMonitorDetailsId: row.qualityMonitorDetailsId }).then(res => {
+ if (res.code === 201) return
+ if (res.data === null) {
+ this.showStep = 0
+ this.currentStep = 0
+ } else {
+ this.form = res.data
+ if (res.data.isFinish === 0) {
+ if (res.data.implementUserId && !res.data.ratifyUserId) {
+ this.showStep = 1
+ this.currentStep = 1
+ } else if (res.data.implementUserId && res.data.ratifyUserId) {
+ this.showStep = 2
+ this.currentStep = 2
+ }
+ } else {
+ this.currentStep = 3
+ this.showStep = 2
+ }
+ }
+ }).catch(err => {
+ console.log('err---', err);
+ })
+ },
+ // 鎻愪氦
+ handleEdit() {
+ if (this.currentStep === 2) {
+ addMonitorEvaluateOpinion(this.form).then(res => {
+ this.editLoad = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeEvaDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.editLoad = false
+ })
+ } else {
+ if (!this.form.reviewPurpose) {
+ this.$message.warning('璇峰~鍐欒瘎瀹$洰鐨�')
+ return
+ }
+ if (!this.form.reviewUser) {
+ this.$message.warning('璇峰~鍐欒瘎瀹′汉鍛�')
+ return
+ }
+ if (!this.form.reviewTime) {
+ this.$message.warning('璇峰~鍐欒瘎瀹℃棩鏈�')
+ return
+ }
+ if (!this.form.implementCondition) {
+ this.$message.warning('璇峰~鍐欑洃鎺ц鍒掑疄鏂芥儏鍐�')
+ return
+ }
+ if (!this.form.implementUserId) {
+ this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉')
+ return
+ }
+ if (this.currentStep === 1) {
+ if (!this.form.ratifyUserId) {
+ this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉')
+ return
+ }
+ }
+ addQualityMonitorEvaluate(this.form).then(res => {
+ this.editLoad = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeEvaDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.editLoad = false
+ })
+ }
+ },
+ // 鍏抽棴寮规
+ closeEvaDia() {
+ this.formDia = false
+ this.$emit('closeEvaDia')
+ },
+ setStep(step) {
+ this.showStep = step
+ },
+ viewTestRecord() {
+ this.ViewRecord = true
+ this.$nextTick(() => {
+ this.$refs.ViewRecord.openDia(this.form)
+ })
+ },
+ getAuthorizedPerson() {
+ selectUserCondition().then(res => {
+ let data = []
+ res.data.forEach(a => {
+ data.push({
+ label: a.name,
+ value: a.id
+ })
+ })
+ this.personList = data
+ })
+ },
+ getDepartment() {
+ selectUserDepartmentLimsName().then(res => {
+ if (res.code === 201) return
+ this.form.implementDepartment = res.data
+ })
+ },
+ }
+};
+</script>
+
+<style scoped>
+.tables {
+ table-layout: fixed;
+ width: 100%;
+ margin-top: 10px;
+}
+
+.td-title {
+ height: 40px;
+ width: 170px;
+ text-align: center;
+ font-size: 14px;
+ word-wrap: break-word;
+ white-space: normal;
+ padding: 6px;
+}
+
+.td-info {
+ padding: 6px;
+}
+
+.td-info1 {
+ display: inline-block;
+ width: 100%;
+ text-align: left;
+ font-size: 14px;
+ word-wrap: break-word;
+ white-space: normal;
+}
+</style>
diff --git a/src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue
new file mode 100644
index 0000000..98fafe1
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue
@@ -0,0 +1,670 @@
+<template>
+ <!-- 7.7璐ㄩ噺鐩戞帶璁″垝-->
+ <div>
+ <div class="table-card">
+ <TableCard title="骞村害璁″垝琛�" style="margin-top: 10px;">
+ <template v-slot:form>
+ <div class="items_center">
+ <span>璁″垝鍚嶇О锛�</span>
+ <el-input v-model="yearForm.monitorName" class="search" placeholder="璇疯緭鍏�" size="small"></el-input>
+ <el-button size="small" type="primary" @click="getYearPlanList">鏌ヨ</el-button>
+ <el-button size="small" @click="clearYear">閲嶇疆</el-button>
+ </div>
+ <div>
+ <el-upload ref='upload' :action="action" :before-upload="beforeUpload" :headers="uploadHeader"
+ :on-error="onError" :data="uploadData" :on-success="handleSuccessUp" :show-file-list="false"
+ accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'>
+ <el-button :loading="upLoading" size="small" type="primary">瀵煎叆</el-button>
+ </el-upload>
+ </div>
+ </template>
+ <template v-slot:table>
+ <limsTable ref="yearTable" :column="yearColumnData" :height="'28vh'" :highlightCurrentRow="true"
+ :rowClick="rowClick" :table-data="yearTableData" :table-loading="yearLoading"
+ style="margin-top: 0.5em;padding: 0 15px;" :page="yearPage">
+ </limsTable>
+ </template>
+ </TableCard>
+ </div>
+ <div class="table-card">
+ <TableCard title="骞村害璁″垝鏄庣粏琛�" style="margin-top: 10px;">
+ <template v-slot:form>
+ <div class="items_center">
+ <span>鐩戞帶鐩殑锛�</span>
+ <el-input v-model="yearDetailForm.monitorPurpose" class="search" placeholder="璇疯緭鍏�" size="small"></el-input>
+ <span>鐩戞帶椤圭洰锛�</span>
+ <el-input v-model="yearDetailForm.monitorProject" class="search" placeholder="璇疯緭鍏�" size="small"></el-input>
+ <el-button size="small" type="primary" @click="getYearDetailPlanList">鏌ヨ</el-button>
+ <el-button size="small" @click="clearDetail">閲嶇疆</el-button>
+ </div>
+ <div>
+ <el-button size="small" type="primary" @click="showDialog('add')">鏂板</el-button>
+ </div>
+ </template>
+ <template v-slot:table>
+ <limsTable :column="yearDetailColumnData" :height="'28vh'" :table-data="yearDetailTableData"
+ :table-loading="yearDetailLoading" style="margin-top: 18px; padding: 0 15px;" :page="yearDetailPage">
+ </limsTable>
+ </template>
+ </TableCard>
+ </div>
+ <!--鏂板淇敼寮规-->
+ <detail-form-dialog v-if="formDia" ref="formDia" :qualityMonitorId="qualityMonitorId"
+ @closeDia="closeDia"></detail-form-dialog>
+ <!--瀹炴柦娴佺▼寮规-->
+ <carry-out-dialog v-if="carryOutDia" ref="carryOutDia" :qualityMonitorId="qualityMonitorId"
+ @closeDia="closeCarryOutDia"></carry-out-dialog>
+ <!--璇勪环娴佺▼寮规-->
+ <evaluate-dialog v-if="evaluateDialog" ref="evaluateDialog" @closeEvaDia="closeEvaDia"></evaluate-dialog>
+ <el-dialog :visible.sync="examineDialog" title="瀹℃牳" width="30%" @close="closeExamineDia">
+ <span>
+ 瀹℃牳澶囨敞锛�
+ <el-input v-model="examineInfo.examineRemark" type="textarea"></el-input>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button :loading="examineLoading" @click="handleReview(0)">涓嶉�氳繃</el-button>
+ <el-button :loading="examineLoading" type="primary" @click="handleReview(1)">閫� 杩�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="ratifyDialog" title="鎵瑰噯" width="30%" @close="closeRatifyDia">
+ <span>
+ 鎵瑰噯澶囨敞锛�
+ <el-input v-model="ratifyInfo.ratifyRemark" type="textarea"></el-input>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button :loading="ratifyLoading" @click="handleRatify(0)">涓嶆壒鍑�</el-button>
+ <el-button :loading="ratifyLoading" type="primary" @click="handleRatify(1)">鎵� 鍑�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="downloadDialog" title="瀵煎嚭" width="600px">
+ <span>
+ <el-button plain type="primary" @click="controlDown">瀹炴柦璁″垝瀵煎嚭</el-button>
+ <el-button plain type="primary" @click="processingDown">璇勪环瀵煎嚭</el-button>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="downloadDialog = false">鍙� 娑�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import TableCard from '@/components/TableCard/index.vue';
+import limsTable from "@/components/Table/lims-table.vue";
+import DetailFormDialog from './components/detailFormDialog.vue';
+import CarryOutDialog from './components/carryOutDialog.vue';
+import EvaluateDialog from './components/evaluateDialog.vue';
+import {
+ pageQualityMonitor,
+ examineQualityMonitor,
+ ratifyQualityMonitor,
+ exportQualityMonitorDetail,
+ delQualitySupervise,
+ pageQualityMonitorDetail,
+ exportQualityMonitorRatify,
+ exportQualityMonitorEvaluate,
+ delQualityMonitorDetail,
+} from '@/api/cnas/process/ensureResults/ensureResultsValidity.js'
+
+export default {
+ name: 'a7-Ensure-results-validity',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { EvaluateDialog, CarryOutDialog, DetailFormDialog, limsTable, TableCard },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ uploadData: {},
+ yearForm: {
+ monitorName: '',
+ },
+ yearPage: {
+ current: 1,
+ size: 20,
+ total: 0
+ },
+ yearColumnData: [
+ {
+ label: '璁″垝鍚嶇О',
+ prop: 'monitorName',
+ minWidth: '150px'
+ }, {
+ label: '缂栧埗浜�',
+ prop: 'writeName',
+ minWidth: '100'
+ }, {
+ label: '缂栧埗鏃ユ湡',
+ prop: 'writeTime',
+ minWidth: '160'
+ }, {
+ dataType: 'tag',
+ label: '瀹℃牳鐘舵��',
+ prop: 'examineStatus',
+ minWidth: '100',
+ formatData: (params) => {
+ if (params === 0) {
+ return '涓嶉�氳繃';
+ } else if (params === 1) {
+ return '閫氳繃';
+ } else {
+ return null;
+ }
+ },
+ formatType: (params) => {
+ if (params === 0) {
+ return 'danger';
+ } else if (params === 1) {
+ return 'success';
+ } else {
+ return null;
+ }
+ }
+ }, {
+ label: '瀹℃牳鍐呭',
+ prop: 'examineRemark',
+ minWidth: '100'
+ }, {
+ label: '瀹℃牳浜�',
+ prop: 'examineName',
+ minWidth: '100'
+ }, {
+ label: '瀹℃牳鏃ユ湡',
+ prop: 'examineTime',
+ minWidth: '160'
+ }, {
+ dataType: 'tag',
+ label: '鎵瑰噯鐘舵��',
+ prop: 'ratifyStatus',
+ minWidth: '100',
+ formatData: (params) => {
+ if (params === 0) {
+ return '涓嶆壒鍑�';
+ } else if (params === 1) {
+ return '鎵瑰噯';
+ } else {
+ return null;
+ }
+ },
+ formatType: (params) => {
+ if (params === 0) {
+ return 'danger';
+ } else if (params === 1) {
+ return 'success';
+ } else {
+ return null;
+ }
+ }
+ }, {
+ label: '鎵瑰噯鍐呭',
+ prop: 'ratifyRemark',
+ minWidth: '100'
+ }, {
+ label: '鎵瑰噯浜�',
+ prop: 'ratifyName',
+ minWidth: '100'
+ }, {
+ label: '鎵瑰噯鏃ユ湡',
+ prop: 'ratifyTime',
+ minWidth: '160'
+ }, {
+ label: '鍒涘缓鏃ユ湡',
+ prop: 'createTime',
+ minWidth: '160'
+ }, {
+ label: '鍒涘缓浜�',
+ prop: 'createUser',
+ minWidth: '100'
+ }, {
+ dataType: 'action',
+ minWidth: '170',
+ label: '鎿嶄綔',
+ fixed: 'right',
+ operation: [
+ {
+ name: '瀹℃牳',
+ type: 'text',
+ disabled: (row) => {
+ if (row.examineStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ clickFun: (row) => {
+ this.examinePlan(row)
+ }
+ },
+ {
+ name: '鎵瑰噯',
+ type: 'text',
+ disabled: (row) => {
+ if (row.ratifyStatus === 1 || row.examineStatus !== 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ clickFun: (row) => {
+ this.approvalPlan(row)
+ }
+ },
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDown(row)
+ }
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.delPlan(row)
+ }
+ }
+ ]
+ }],
+ yearTableData: [], // 骞磋〃
+ yearLoading: false,
+ yearDetailForm: {
+ monitorPurpose: '',
+ monitorProject: ''
+ },
+ yearDetailColumnData: [
+ {
+ label: '鐩戞帶鐩殑',
+ prop: 'monitorPurpose',
+ width: '150px',
+ showOverflowTooltip: true,
+ }, {
+ label: '璁″垝寮�灞曟椂闂�',
+ prop: 'plannedTime',
+ minWidth: '150px'
+ }, {
+ label: '鐩戞帶椤圭洰',
+ prop: 'monitorProject',
+ minWidth: '150px'
+ }, {
+ label: '鍙傚姞鍗曚綅锛堜汉鍛橈級',
+ prop: 'participant',
+ minWidth: '150px'
+ }, {
+ label: '棰勭畻锛堝厓锛�',
+ prop: 'budget',
+ minWidth: '150px'
+ }, {
+ label: '缁勭粐浜哄憳',
+ prop: 'organization',
+ minWidth: '150px'
+ }, {
+ label: '鐩戞帶鏂瑰紡',
+ prop: 'monitorWay',
+ minWidth: '150px'
+ }, {
+ dataType: 'action',
+ width: '180',
+ label: '鎿嶄綔',
+ fixed: 'right',
+ operation: [
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.showDialog('edit', row)
+ }
+ },
+ {
+ name: '瀹炴柦',
+ type: 'text',
+ clickFun: (row) => {
+ this.carryOut(row)
+ }
+ },
+ {
+ name: '璇勪环',
+ type: 'text',
+ clickFun: (row) => {
+ this.evaluate(row)
+ }
+ },
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.downLoadPost(row);
+ },
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.delYearPlanDetail(row)
+ }
+ }
+ ]
+ }
+ ],
+ yearDetailTableData: [], // 骞存槑缁嗚〃
+ yearDetailLoading: false,
+ yearDetailPage: {
+ current: 1,
+ size: 20,
+ total: 0
+ },
+ formDia: false,
+ qualityMonitorId: '',
+ carryOutDia: false,
+ evaluateDialog: false,
+ examineDialog: false,
+ examineLoading: false,
+ ratifyDialog: false,
+ ratifyLoading: false,
+ examineInfo: {},
+ ratifyInfo: {},
+ upLoading: false,
+ downloadDialog: false,
+ download: {},
+ };
+ },
+ mounted() {
+ this.getYearPlanList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ骞村害璁″垝琛�
+ getYearPlanList() {
+ const entity = {
+ monitorName: this.yearForm.monitorName,
+ }
+ const page = this.yearPage
+ this.yearLoading = true
+ pageQualityMonitor({ ...entity, ...page }).then(res => {
+ this.yearLoading = false
+ if (res.code === 201) return
+ this.yearTableData = res.data.records
+ this.yearPage.total = res.data.total
+ if (this.yearTableData.length > 0) {
+ this.rowClick(this.yearTableData[0])
+ }
+ }).catch(err => {
+ console.log('err---', err);
+ this.yearLoading = false
+ })
+ },
+ clearYear() {
+ this.yearForm.monitorName = ''
+ this.getYearPlanList()
+ },
+ // 瀵煎叆娴佺▼
+ beforeUpload(file) {
+ if (file.size > 1024 * 1024 * 10) {
+ this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+ this.$refs.upload.clearFiles()
+ return false;
+ } else {
+ this.upLoading = true;
+ let list = file.name.split(".")
+ let suffix = list[list.length - 1]
+ this.$set(this.uploadData, 'suffix', suffix)
+ return true;
+ }
+ },
+ onError(err, file, fileList) {
+ this.$message.error('涓婁紶澶辫触')
+ this.$refs.upload.clearFiles()
+ },
+ handleSuccessUp(response) {
+ this.upLoading = false;
+ if (response.code == 200) {
+ this.$message.success('涓婁紶鎴愬姛');
+ this.getYearPlanList()
+ }
+ },
+ // 瀹℃牳
+ examinePlan(row) {
+ this.examineDialog = true
+ this.examineInfo = row
+ },
+ handleReview(examineStatus) {
+ // 瀹℃牳鐘舵�� , 0 涓嶉�氳繃, 1閫氳繃
+ this.examineInfo.examineStatus = examineStatus
+ this.examineLoading = true
+ examineQualityMonitor(this.examineInfo).then(res => {
+ this.examineLoading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeExamineDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.examineLoading = false
+ })
+ },
+ closeExamineDia() {
+ this.examineDialog = false
+ this.examineInfo.examineRemark = ''
+ this.getYearPlanList()
+ },
+ // 鎵瑰噯
+ approvalPlan(row) {
+ this.ratifyDialog = true
+ this.ratifyInfo = row
+ },
+ handleRatify(ratifyStatus) {
+ // 鎵瑰噯鐘舵�� , 0 涓嶉�氳繃, 1閫氳繃
+ this.ratifyInfo.ratifyStatus = ratifyStatus
+ this.ratifyLoading = true
+ ratifyQualityMonitor(this.ratifyInfo).then(res => {
+ this.ratifyLoading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeRatifyDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.ratifyLoading = false
+ })
+ },
+ closeRatifyDia() {
+ this.ratifyDialog = false
+ this.ratifyInfo.ratifyRemark = ''
+ this.getYearPlanList()
+ },
+ // 瀵煎嚭
+ handleDown(row) {
+ exportQualityMonitorDetail({ qualityMonitorId: row.qualityMonitorId }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, row.monitorName + '.docx')
+ })
+ },
+ // 鍒犻櫎杩涘害璁″垝琛�
+ delPlan(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.yearLoading = true
+ delQualitySupervise({ qualityMonitorId: row.qualityMonitorId }).then(res => {
+ this.yearLoading = false
+ if (res.code === 201) return
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.getYearPlanList();
+
+ }).catch(err => {
+ this.yearLoading = false
+ console.log('err---', err);
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 骞村害璁″垝琛ㄦ牸锛岀偣鍑昏鏁版嵁鍚庡埛鏂拌鎯�
+ rowClick(row) {
+ this.qualityMonitorId = row.qualityMonitorId
+ this.getYearDetailPlanList()
+ },
+ // 鑾峰彇骞村害鏄庣粏琛�
+ getYearDetailPlanList() {
+ const entity = {
+ qualityMonitorId: this.qualityMonitorId,
+ monitorPurpose: this.yearDetailForm.monitorPurpose,
+ monitorProject: this.yearDetailForm.monitorProject,
+ }
+ const page = this.yearDetailPage
+ this.yearDetailLoading = true
+ pageQualityMonitorDetail({ ...entity, ...page }).then(res => {
+ this.yearDetailLoading = false
+ if (res.code === 201) return
+ this.yearDetailTableData = res.data.records
+ this.yearDetailPage.total = res.data.total
+ }).catch(err => {
+ console.log('err---', err);
+ this.yearDetailLoading = false
+ })
+ },
+ // 閲嶇疆鏄庣粏琛�
+ clearDetail() {
+ this.yearDetailForm = {
+ monitorPurpose: '',
+ monitorProject: ''
+ }
+ this.getYearDetailPlanList()
+ },
+ // 鏄庣粏琛ㄥ疄鏂�
+ carryOut(row) {
+ this.carryOutDia = true
+ this.$nextTick(() => {
+ this.$refs.carryOutDia.openDia(row)
+ })
+ },
+ closeCarryOutDia() {
+ this.carryOutDia = false
+ this.getYearDetailPlanList()
+ },
+ // 鎵撳紑璇勪环寮规
+ evaluate(row) {
+ this.evaluateDialog = true
+ this.$nextTick(() => {
+ this.$refs.evaluateDialog.openDia(row)
+ })
+ },
+ closeEvaDia() {
+ this.evaluateDialog = false
+ this.getYearDetailPlanList()
+ },
+ // 鎵撳紑瀵煎嚭寮规
+ downLoadPost(row) {
+ this.downloadDialog = true
+ this.download = row
+ },
+ // 鎵撳紑骞村害鏄庣粏鏂板銆佷慨鏀瑰脊妗�
+ showDialog(type, row) {
+ this.formDia = true
+ this.$nextTick(() => {
+ this.$refs.formDia.openDia(type, row)
+ })
+ },
+ closeDia() {
+ this.formDia = false
+ this.getYearDetailPlanList()
+ },
+ // 鎺у埗鍗曞鍑�
+ controlDown() {
+ exportQualityMonitorRatify({
+ qualityMonitorDetailsId: this.download.qualityMonitorDetailsId
+ }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '璐ㄩ噺鐩戞帶瀹炴柦璁″垝.docx')
+ })
+ },
+ // 澶勭悊鍗曞鍑�
+ processingDown() {
+ exportQualityMonitorEvaluate({ qualityMonitorDetailsId: this.download.qualityMonitorDetailsId }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '璐ㄩ噺鐩戞帶璇勪环.docx')
+ })
+ },
+ delYearPlanDetail(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.yearDetailLoading = true
+ delQualityMonitorDetail({ qualityMonitorDetailsId: row.qualityMonitorDetailsId }).then(res => {
+ this.yearDetailLoading = false
+ if (res.code === 201) return
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.getYearDetailPlanList()
+ }).catch(err => {
+ this.yearDetailLoading = false
+ console.log('err---', err);
+ })
+ })
+ },
+ // 骞磋鍒掑垎椤�
+ handleYearCurrent(page) {
+ this.yearPage.current = page
+ this.getYearPlanList()
+ },
+ handleYearSizeChange(size) {
+ this.yearPage.size = size
+ this.getYearPlanList()
+ },
+ // 骞存槑缁嗚鍒掑垎椤�
+ handleYearDetailCurrent(page) {
+ this.yearDetailPage.current = page
+ this.getYearDetailPlanList()
+ },
+ handleYearDetailSizeChange(size) {
+ this.yearDetailPage.size = size
+ this.getYearDetailPlanList()
+ },
+ },
+ // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
+ computed: {
+ action() {
+ return this.javaApi + '/qualityMonitor/importQualityMonitor'
+ }
+ },
+};
+</script>
+
+<style scoped>
+.table-card {
+ background-color: #ffffff;
+}
+
+.flex_column {
+ display: flex;
+ height: 80vh;
+ flex-direction: column;
+ overflow: auto;
+ justify-content: space-between;
+}
+
+.pagination {
+ display: flex;
+ justify-content: space-between
+}
+
+.items_center {
+ display: flex;
+ align-items: center;
+}
+
+.date_box {
+ margin: 0 5px;
+}
+
+.search {
+ width: 150px;
+ padding: 0 16px;
+}
+</style>
diff --git a/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue b/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue
diff --git a/src/views/CNAS/process/nonconformingWork/nonconformingDistribution/components/formDia.vue b/src/views/CNAS/process/nonconformingWork/nonconformingDistribution/components/formDia.vue
new file mode 100644
index 0000000..84509e0
--- /dev/null
+++ b/src/views/CNAS/process/nonconformingWork/nonconformingDistribution/components/formDia.vue
@@ -0,0 +1,232 @@
+<template>
+ <div>
+ <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+ :visible.sync="formDia" title="涓嶇鍚堥」鐨勫垎甯�" width="90%" @close="closeDia">
+ <table border="1" cellspacing="10" class="table">
+ <tr>
+ <td>绔犺妭鍙�</td>
+ <th class="div-with-line">
+ <span style="float: left;">瑕佺礌</span>
+ <span style="float: right;">閮ㄩ棬</span>
+ </th>
+ <th>涓讳换</th>
+ <th>鎶�鏈礋璐d汉</th>
+ <th>璐ㄩ噺璐熻矗浜�</th>
+ <th>缁煎悎瀹�</th>
+ <th>璇曢獙瀹�</th>
+ <th>鍚堣</th>
+ <th>鍗�%</th>
+ </tr>
+ <tr v-for="(item, index) in distributionDetailList" :key="item.value">
+ <td>{{ item.chapterNumber }}</td>
+ <th>{{ item.essentials }}</th>
+ <th>
+ <el-input-number v-model="item.director" :precision="0" clearable size="small"></el-input-number>
+ </th>
+ <th>
+ <el-input-number v-model="item.technology" :precision="0" clearable size="small"></el-input-number>
+ </th>
+ <th>
+ <el-input-number v-model="item.quality" :precision="0" clearable size="small"></el-input-number>
+ </th>
+ <th>
+ <el-input-number v-model="item.comprehensive" :precision="0" clearable size="small"></el-input-number>
+ </th>
+ <th>
+ <el-input-number v-model="item.testing" :precision="0" clearable size="small"></el-input-number>
+ </th>
+ <th>
+ {{ item.total }}
+ </th>
+ <th>
+ {{ (item.proportion ? item.proportion : 0) + '%' }}
+ </th>
+ </tr>
+ <tr>
+ <td> </td>
+ <th>
+ 鍗犳瘮
+ </th>
+ <th>
+ {{ (distributionProportion.director ? distributionProportion.director : 0) + '%' }}
+ </th>
+ <th>
+ {{ (distributionProportion.technology ? distributionProportion.technology : 0) + '%' }}
+ </th>
+ <th>
+ {{ (distributionProportion.quality ? distributionProportion.quality : 0) + '%' }}
+ </th>
+ <th>
+ {{ (distributionProportion.comprehensive ? distributionProportion.comprehensive : 0) + '%' }}
+ </th>
+ <th>
+ {{ (distributionProportion.testing ? distributionProportion.testing : 0) + '%' }}
+ </th>
+ <th>
+ {{ distributionProportion.total ? distributionProportion.total : 0 }}
+ </th>
+ <th> </th>
+ </tr>
+ </table>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeDia">鍙� 娑�</el-button>
+ <el-button :loading="loading" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ getInconsistentDistributionOne,
+ addInconsistentDistribution,
+ updateInconsistentDistribution
+} from '@/api/cnas/process/nonconformingWork.js'
+export default {
+ name: 'formDia',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ diaLoading: false,
+ loading: false,
+ distributionDetailList: [],
+ form: {
+
+ },
+ distributionProportion: {}
+ };
+ },
+ mounted() {
+
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鎵撳紑寮规
+ openDia(type, row) {
+ this.formDia = true
+ this.operationType = type
+ if (type !== 'add') {
+ this.searchInfo(row)
+ } else {
+ this.selectEnumByCategory()
+ }
+ },
+ // 鏌ヨ璇︽儏
+ searchInfo(row) {
+ this.diaLoading = true
+ getInconsistentDistributionOne({ distributionId: row.distributionId }).then(res => {
+ this.diaLoading = false
+ if (res.code === 201) return
+ this.form = res.data
+ this.distributionDetailList = this.form.distributionDetailList
+ this.distributionProportion = this.form.distributionProportion
+ }).catch(err => {
+ console.log(err)
+ this.diaLoading = false
+ })
+ },
+ // 鎻愪氦寮规鏁版嵁
+ handleEdit() {
+ const date = new Date();
+ const year = date.getFullYear();
+ this.loading = true
+ const internalPlan = this.HaveJson(this.form)
+ internalPlan.distributionYear = year
+ internalPlan.distributionDetailList = this.HaveJson(this.distributionDetailList)
+ if (this.operationType === 'add') {
+ addInconsistentDistribution(internalPlan).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ } else if (this.operationType === 'edit') {
+ updateInconsistentDistribution(internalPlan).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ }
+ },
+ closeDia() {
+ this.formDia = false
+ this.$emit('closeDia')
+ },
+ selectEnumByCategory() {
+ this.distributionDetailList = []
+ // 瑕佺礌
+ this.getDicts("essential").then((response) => {
+ let arr = this.dictToValue(response.data)
+ arr.map((item) => {
+ const obj = Object.assign({
+ essentials: item.label,
+ chapterNumber: item.value,
+ })
+ this.distributionDetailList.push(obj)
+ })
+ });
+ },
+ }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+ margin: 6vh auto 50px !important;
+}
+
+>>>.el-dialog__body {
+ max-height: 68vh;
+ overflow-y: auto;
+}
+
+>>>.is-required {
+ margin-bottom: 6px;
+}
+
+.table {
+ width: 100%;
+ margin-top: 20px;
+}
+
+.table td {
+ width: 30px;
+ text-align: center;
+}
+
+.table th {
+ width: 70px;
+ height: 70px;
+ text-align: center;
+}
+
+.div-with-line {
+ width: 70px;
+ height: 70px;
+ position: relative;
+ /*overflow: hidden; /* 闅愯棌婧㈠嚭鍐呭 */
+}
+
+.div-with-line::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ height: 1px;
+ background-color: #000000;
+ left: 50%;
+ transform: translateX(-50%) rotate(45deg);
+ transform-origin: center 50%;
+ top: 50%;
+ width: 100px;
+}
+</style>
diff --git a/src/views/CNAS/process/nonconformingWork/nonconformingDistribution/index.vue b/src/views/CNAS/process/nonconformingWork/nonconformingDistribution/index.vue
new file mode 100644
index 0000000..8a39ebc
--- /dev/null
+++ b/src/views/CNAS/process/nonconformingWork/nonconformingDistribution/index.vue
@@ -0,0 +1,237 @@
+<template>
+ <div>
+ <div>
+ <!-- <div class="view-title">
+ <span>涓嶇鍚堥」鐨勫垎甯�</span>
+ <span>
+ <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+ </span>
+ </div> -->
+ <div class="search-background">
+ <span class="search-group">
+ <span style="width: 120px">骞翠唤锛�</span>
+ <el-input v-model="searchForm.distributionYear" clearable size="small"></el-input>
+ </span>
+ <span class="search-group">
+ <el-button size="medium" @click="resetSearchForm">閲� 缃�</el-button>
+ <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+ </span>
+ <div class="btn">
+ <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+ </div>
+ </div>
+ <div class="table">
+ <div>
+ <TableCard :showForm="false" :showTitle="false">
+ <template v-slot:table>
+ <limsTable :column="tableColumn" :height="'calc(100vh - 19em)'" :table-data="tableData"
+ :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" :page="page"
+ @pagination="pagination">
+ </limsTable>
+ </template>
+ </TableCard>
+ </div>
+ </div>
+ </div>
+ <form-dia v-if="formDia" ref="formDia" @closeDia="closeDia"></form-dia>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import TableCard from '@/components/TableCard/index.vue';
+import FormDia from './components/formDia.vue';
+import {
+ pageInconsistentDistribution,
+ delInconsistentDistribution,
+ exportInconsistentDistribution,
+} from '@/api/cnas/process/nonconformingWork.js'
+
+export default {
+ name: 'a7-distribution-of-nonconforming',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { FormDia, TableCard, limsTable },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ searchForm: {
+ distributionYear: '',
+ },
+ tableColumn: [
+ {
+ label: '骞翠唤',
+ prop: 'distributionYear',
+ minWidth: '100'
+ },
+ {
+ label: '鍒涘缓浜�',
+ prop: 'createUserName',
+ minWidth: '100'
+ },
+ {
+ label: '鍒涘缓鏃堕棿',
+ prop: 'createTime',
+ minWidth: '100'
+ },
+ {
+ label: '淇敼浜�',
+ prop: 'updateUserName',
+ minWidth: '100'
+ },
+ {
+ label: '淇敼鏃堕棿',
+ prop: 'updateTime',
+ minWidth: '100'
+ },
+ {
+ dataType: 'action',
+ minWidth: '220',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('edit', row);
+ },
+ },
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDown(row)
+ }
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.delPlan(row)
+ },
+ }
+ ]
+ }
+ ],
+ tableData: [],
+ tableLoading: false,
+ page: {
+ size: 20,
+ current: 1,
+ total: 0,
+ },
+ formDia: false,
+ };
+ },
+ mounted() {
+ this.searchList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ鍒楄〃
+ searchList() {
+ const entity = this.searchForm
+ const page = this.page
+ this.tableLoading = true
+ pageInconsistentDistribution({ ...entity, ...page }).then(res => {
+ this.tableLoading = false
+ if (res.code === 201) return
+ this.tableData = res.data.records
+ this.page.total = res.data.total
+ }).catch(err => {
+ console.log('err---', err);
+ this.tableLoading = false
+ })
+ },
+ // 鍒犻櫎
+ delPlan(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.tableLoading = true
+ delInconsistentDistribution({ distributionId: row.distributionId }).then(res => {
+ this.tableLoading = false
+ if (res.code === 201) return
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.searchList()
+ }).catch(err => {
+ this.tableLoading = false
+ console.log('err---', err);
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+ openFormDia(type, row) {
+ this.formDia = true
+ this.$nextTick(() => {
+ this.$refs.formDia.openDia(type, row)
+ })
+ },
+ // 瀵煎嚭
+ handleDown(row) {
+ exportInconsistentDistribution({ distributionId: row.distributionId }).then(res => {
+ this.outLoading = false
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '涓嶇鍚堥」鐨勫垎甯�' + '.docx');
+ })
+ },
+ closeDia() {
+ this.formDia = false
+ this.searchList()
+ },
+ // 閲嶇疆鏌ヨ鏉′欢
+ resetSearchForm() {
+ this.searchForm.distributionYear = '';
+ this.searchList()
+ },
+ // 鍒嗛〉
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.searchList();
+ },
+ }
+};
+</script>
+
+<style scoped>
+.view-title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 60px;
+ padding-left: 20px;
+}
+
+.search-background {
+ width: 100%;
+ height: 80px;
+ line-height: 80px;
+ background-color: #ffffff;
+ display: flex;
+ position: relative;
+}
+
+.search-group {
+ display: flex;
+ align-items: center;
+ margin: 0 20px;
+}
+
+.table {
+ background-color: #ffffff;
+}
+
+.btn {
+ position: absolute;
+ right: 20px;
+ top: 16px;
+}
+</style>
diff --git a/src/views/CNAS/process/nonconformingWork/nonconformingItem/components/qualityInfo.vue b/src/views/CNAS/process/nonconformingWork/nonconformingItem/components/qualityInfo.vue
new file mode 100644
index 0000000..7ef970d
--- /dev/null
+++ b/src/views/CNAS/process/nonconformingWork/nonconformingItem/components/qualityInfo.vue
@@ -0,0 +1,322 @@
+<template>
+ <div>
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="formDia" title="涓嶇鍚堝伐浣滄帶鍒跺崟"
+ width="80%" @close="closeProcessingDia">
+ <div style="height: 660px; overflow-y: auto">
+ <table border="1" cellspacing="10" class="tables">
+ <tr>
+ <td class="first-title" rowspan="8">
+ <p>涓嶇鍚堝伐浣滄儏鍐佃褰�</p>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>鍙戠敓閮ㄩ棬锛�</p>
+ </td>
+ <td class="td-info">
+ <span class="td-info1"> {{ form.occurrenceDepartment }}</span>
+ </td>
+ <td class="td-title">
+ <p>閮ㄩ棬璐熻矗浜猴細</p>
+ </td>
+ <td class="td-info">
+ <span class="td-info1"> {{ form.headDepartment }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>涓嶇鍚堝伐浣滃彂鐜伴�斿緞锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-radio-group v-model="form.findWay" v-removeAriaHidden disabled>
+ <el-radio :label="0">绠$悊璇勫</el-radio>
+ <el-radio :label="1">鍐呴儴瀹℃牳</el-radio>
+ <el-radio :label="2">妫�娴嬭繃绋嬫帶鍒�</el-radio>
+ <el-radio :label="3">鍐呴儴璐ㄩ噺鎺у埗</el-radio>
+ <el-radio :label="4">鍐呴儴鐩戠潱</el-radio>
+ <el-radio :label="5">澶栭儴璇勫</el-radio>
+ <el-radio :label="6">澶栭儴鎶曡瘔</el-radio>
+ <el-radio :label="7">鍏朵粬</el-radio>
+ </el-radio-group>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>涓嶇鍚堝伐浣滅殑璇︾粏璁板綍锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <span class="td-info1"> {{ form.recordDetail }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>涓嶇鍚堝伐浣滅殑浠ュ強鍙婃潯娆惧彿锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <span class="td-info1"> {{ form.recordAccording }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>琚洃鐫d汉锛�</p>
+ </td>
+ <td class="td-info">
+ <span class="td-info1"> {{ form.supervisedUserName }}</span>
+ </td>
+ <td class="td-title">
+ <p>琚洃鐫f棩鏈燂細</p>
+ </td>
+ <td class="td-info">
+ <span class="td-info1"> {{ form.supervisedTime }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>鍙戠幇閮ㄩ棬锛�</p>
+ </td>
+ <td class="td-info">
+ {{ form.foundDepartment }}
+ </td>
+ <td class="td-title">
+ <p>鏃堕棿锛�</p>
+ </td>
+ <td class="td-info">
+ {{ form.recordTime }}
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>璁板綍浜猴細</p>
+ </td>
+ <td class="td-info">
+ {{ form.recordUserName }}
+ </td>
+ <td class="td-title">
+ <p>璁板綍鏃堕棿锛�</p>
+ </td>
+ <td class="td-info">
+ {{ form.recordTime }}
+ </td>
+ </tr>
+ <tr>
+ <td class="first-title" rowspan="3">
+ <p>澶勭悊鎺柦</p>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>娑堥櫎涓嶇鍚堝伐浣滄墍閲囧彇鐨勬帾鏂斤細</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <span class="td-info1"> {{ form.eliminateMeasure }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>璐熻矗浜猴細</p>
+ </td>
+ <td class="td-info">
+ {{ form.actionsUserName }}
+ </td>
+ <td class="td-title">
+ <p>澶勭悊鏃堕棿锛�</p>
+ </td>
+ <td class="td-info">
+ {{ form.actionsTime }}
+ </td>
+ </tr>
+ <tr>
+ <td class="first-title" rowspan="4">
+ <p>绾犳鎺柦</p>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>鏄惁闇�瑕侀噰鍙栫籂姝f帾鏂斤細</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-radio-group v-model="form.isCorrect" v-removeAriaHidden disabled>
+ <el-radio :label="0">鍚�</el-radio>
+ <el-radio :label="1">鏄�</el-radio>
+ </el-radio-group>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>绾犳鎺柦澶勭悊鍗曡窡韪細</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <span class="td-info1"> {{ form.correctContent }}</span>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>璐熻矗浜猴細</p>
+ </td>
+ <td class="td-info">
+ {{ form.correctUserName }}
+ </td>
+ <td class="td-title">
+ <p>澶勭悊鏃堕棿锛�</p>
+ </td>
+ <td class="td-info">
+ {{ form.correctTime }}
+ </td>
+ </tr>
+ <tr>
+ <td class="first-title" rowspan="4">
+ <p>鏄惁閫氱煡瀹㈡埛鍙婂彲鎭㈠宸ヤ綔</p>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>閫氱煡瀹㈡埛锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-radio-group v-model="form.notifyCustomer" v-removeAriaHidden disabled>
+ <el-radio :label="0">鍚�</el-radio>
+ <el-radio :label="1">鏄�</el-radio>
+ </el-radio-group>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>鎭㈠宸ヤ綔锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-radio-group v-model="form.backToWork" v-removeAriaHidden disabled>
+ <el-radio :label="0">鍚�</el-radio>
+ <el-radio :label="1">鏄�</el-radio>
+ </el-radio-group>
+ </td>
+ </tr>
+ <tr>
+ <td class="td-title">
+ <p>璐熻矗浜猴細</p>
+ </td>
+ <td class="td-info">
+ {{ form.qualityManagerUserName }}
+ </td>
+ <td class="td-title">
+ <p>澶勭悊鏃堕棿锛�</p>
+ </td>
+ <td class="td-info">
+ {{ form.qualityManagerTime }}
+ </td>
+ </tr>
+ </table>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ getSuperviseDetailAccording
+} from '@/api/cnas/process/nonconformingWork.js'
+export default {
+ name: 'qualityInfo',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ form: {
+ occurrenceDepartment: '',
+ headDepartment: '',
+ findWay: '',
+ recordDetail: '',
+ recordAccording: '',
+ supervisedUserName: '',
+ supervisedTime: '',
+ actionsUserName: '',
+ eliminateMeasure: '',
+ correctUserName: '',
+ isCorrect: '',
+ correctContent: '',
+ recordUserName: '',
+ recordTime: '',
+ foundDepartment: '',
+ actionsTime: '',
+ correctTime: '',
+ notifyCustomer: '',
+ backToWork: '',
+ qualityManagerUserName: '',
+ qualityManagerTime: '',
+ },
+ };
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ openDia(row) {
+ this.formDia = true
+ this.searchInfo(row)
+ },
+ // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+ searchInfo(row) {
+ this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId
+ getSuperviseDetailAccording({ superviseDetailsId: row.superviseDetailsId }).then(res => {
+ if (res.code === 201) return
+ this.form = res.data
+ }).catch(err => {
+ console.log('err---', err);
+ })
+ },
+ // 鍏抽棴寮规
+ closeProcessingDia() {
+ this.formDia = false
+ },
+ }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+ margin: 5vh auto 50px !important;
+}
+
+.tables {
+ table-layout: fixed;
+ width: 100%;
+ margin-top: 10px;
+}
+
+.first-title {
+ display: table-cell;
+ width: 100px;
+ /* 璁剧疆涓�涓浐瀹氬搴� */
+ height: 200px;
+ /* 璁剧疆涓�涓浐瀹氶珮搴� */
+ text-align: center;
+ /* 姘村钩灞呬腑 */
+ vertical-align: middle;
+ /* 鍨傜洿灞呬腑 */
+ writing-mode: vertical-rl;
+ /* 鏂囧瓧绔栫洿鎺掑垪 */
+ padding: 10px 0;
+}
+
+.td-title {
+ height: 40px;
+ width: 170px;
+ text-align: center;
+ font-size: 14px;
+ word-wrap: break-word;
+ white-space: normal;
+ padding: 6px;
+}
+
+.td-info {
+ padding: 10px;
+}
+
+.td-info1 {
+ display: inline-block;
+ width: 100%;
+ text-align: left;
+ font-size: 14px;
+ word-wrap: break-word;
+ white-space: normal;
+}
+</style>
diff --git a/src/views/CNAS/process/nonconformingWork/nonconformingItem/index.vue b/src/views/CNAS/process/nonconformingWork/nonconformingItem/index.vue
new file mode 100644
index 0000000..4c0e60b
--- /dev/null
+++ b/src/views/CNAS/process/nonconformingWork/nonconformingItem/index.vue
@@ -0,0 +1,196 @@
+<template>
+ <div>
+ <div>
+ <div class="search-background">
+ <span class="search-group">
+ <span style="width: 120px">鍙戠敓閮ㄩ棬锛�</span>
+ <el-input v-model="searchForm.occurrenceDepartment" clearable size="small"></el-input>
+ </span>
+ <span class="search-group">
+ <el-button size="medium" @click="resetSearchForm">閲� 缃�</el-button>
+ <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+ </span>
+ </div>
+ <div class="table">
+ <div>
+ <TableCard :showForm="false" :showTitle="false">
+ <template v-slot:table>
+ <limsTable :column="tableColumn" :height="'calc(100vh - 19em)'" :table-data="tableData"
+ :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" :page="page"
+ @pagination="pagination">
+ </limsTable>
+ </template>
+ </TableCard>
+ </div>
+ </div>
+ </div>
+ <quality-info v-if="qualityInfo" ref="qualityInfo"></quality-info>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import TableCard from '@/components/TableCard/index.vue';
+import QualityInfo from './components/qualityInfo.vue';
+import {
+ pageSuperviseDetailAccording,
+ superviseDetailAccordingExport
+} from '@/api/cnas/process/nonconformingWork.js'
+
+export default {
+ name: 'a7-nonconforming-item',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { QualityInfo, TableCard, limsTable },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ searchForm: {
+ occurrenceDepartment: '',
+ },
+ tableColumn: [
+ {
+ label: '鍙戠敓閮ㄩ棬',
+ prop: 'occurrenceDepartment',
+ minWidth: '100'
+ },
+ {
+ label: '閮ㄩ棬璐熻矗浜�',
+ prop: 'headDepartment',
+ minWidth: '100'
+ },
+ {
+ label: '鍙戠幇閫斿緞',
+ prop: 'findWay',
+ minWidth: '100'
+ },
+ {
+ label: '璇︾粏璁板綍',
+ prop: 'recordDetail',
+ minWidth: '100'
+ },
+ {
+ label: '渚濇嵁鍜屾潯娆惧彿',
+ prop: 'recordAccording',
+ minWidth: '100'
+ },
+ {
+ label: '鍙戠幇閮ㄩ棬',
+ prop: 'foundDepartment',
+ minWidth: '100'
+ },
+ {
+ label: '琚洃鐫d汉',
+ prop: 'supervisedUserName',
+ minWidth: '100'
+ },
+ {
+ dataType: 'action',
+ minWidth: '60',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '鏌ョ湅',
+ type: 'text',
+ clickFun: (row) => {
+ this.viewInfo(row);
+ },
+ },
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.openDownloadDia(row);
+ },
+ },
+ ]
+ }
+ ],
+ tableData: [],
+ tableLoading: false,
+ page: {
+ size: 20,
+ current: 1,
+ total: 0,
+ },
+ qualityInfo: false,
+ };
+ },
+ mounted() {
+ this.searchList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ鍒楄〃
+ searchList() {
+ const entity = {
+ occurrenceDepartment: this.searchForm.occurrenceDepartment,
+ }
+ const page = this.page
+ this.tableLoading = true
+ pageSuperviseDetailAccording({ ...entity, ...page }).then(res => {
+ this.tableLoading = false
+ if (res.code === 201) return
+ this.tableData = res.data.records
+ this.page.total = res.data.total
+ }).catch(err => {
+ console.log('err---', err);
+ this.tableLoading = false
+ })
+ },
+ // 閲嶇疆鏌ヨ鏉′欢
+ resetSearchForm() {
+ this.searchForm.occurrenceDepartment = '';
+ this.searchList()
+ },
+ viewInfo(row) {
+ this.qualityInfo = true
+ this.$nextTick(() => {
+ this.$refs.qualityInfo.openDia(row)
+ })
+ },
+ // 瀵煎嚭
+ openDownloadDia(row) {
+ superviseDetailAccordingExport({ superviseDetailsId: row.superviseDetailsId }).then(res => {
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '涓嶇鍚堥」瀵煎嚭' + '.docx');
+ }).catch(err => {
+ console.log('err---', err);
+ })
+ },
+ // 鍒嗛〉
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.searchList();
+ },
+ }
+};
+</script>
+
+<style scoped>
+.view-title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ height: 60px;
+ padding-left: 20px;
+}
+
+.search-background {
+ width: 100%;
+ height: 80px;
+ line-height: 80px;
+ background-color: #ffffff;
+ display: flex;
+}
+
+.search-group {
+ display: flex;
+ align-items: center;
+ margin: 0 20px;
+}
+
+.table {
+ background-color: #ffffff;
+}
+</style>
diff --git a/src/views/CNAS/process/reportResults/index.vue b/src/views/CNAS/process/reportResults/index.vue
new file mode 100644
index 0000000..66ae2ea
--- /dev/null
+++ b/src/views/CNAS/process/reportResults/index.vue
@@ -0,0 +1,409 @@
+<template>
+ <div class="report-results">
+ <div class="search">
+ <div class="search_thing">
+ <div class="search_label">妫�楠屾姤鍛婄紪鍙凤細</div>
+ <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.insReportCode"
+ @keyup.enter.native="refreshTable()"></el-input></div>
+ </div>
+ <div class="search_thing" style="padding-left: 30px;">
+ <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+ <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+ </div>
+ <div class="btn">
+ <el-button size="medium" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower">瀵煎嚭</el-button>
+ <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button>
+ </div>
+ </div>
+ <div class="table">
+ <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 270px)'"
+ :page="page" @pagination="pagination" :isSelection="true"
+ :handleSelectionChange="handleSelectionChange"></lims-table>
+ </div>
+ <el-dialog :title="title" :visible.sync="addDialogVisible" width="400px" top="6vh">
+ <el-row>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">妫�楠屾姤鍛婄紪鍙凤細</div>
+ <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+ v-model="addInfo.insReportCode"></el-input></div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">椤垫暟锛�</div>
+ <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+ v-model="addInfo.pages"></el-input></div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鍙戦�佷唤鏁帮細</div>
+ <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+ v-model="addInfo.number"></el-input></div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鍙戝線浣曞锛�</div>
+ <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+ v-model="addInfo.send"></el-input></div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鍙戦�佹柟寮忥細</div>
+ <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+ v-model="addInfo.method"></el-input></div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鍙戦�佹棩鏈燂細</div>
+ <div class="search_input">
+ <el-date-picker v-model="addInfo.sendTime" type="date" size="small" placeholder="閫夋嫨鏃ユ湡" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd" style="width: 100%;">
+ </el-date-picker>
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鍙戦�佷汉锛�</div>
+ <div class="search_input">
+ <el-select v-model="addInfo.sendUser" placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+ <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">绛炬敹浜猴細</div>
+ <div class="search_input">
+ <el-select v-model="addInfo.signatory" placeholder="璇烽�夋嫨" size="small" style="width: 100%;" multiple>
+ <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">澶囨敞锛�</div>
+ <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.remark"
+ type="textarea" :rows="2"></el-input></div>
+ </div>
+ </el-col>
+ </el-row>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="addDialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="handleAdd" :loading="addLoading">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import {
+ exportProcessReport,
+ doProcessReport,
+ addProcessReport,
+ pageProcessReport,
+ delProcessReport
+} from '@/api/cnas/process/reportResults.js'
+import {
+ selectUserCondition,
+} from "@/api/system/user.js";
+export default {
+ components: {
+ limsTable
+ },
+ data() {
+ return {
+ outLoading: false,
+ addPower: true,
+ outPower: true,
+ personList: [],
+ title: '鏂板',
+ addDialogVisible: false,
+ addInfo: {
+ signatory: []
+ },
+ addLoading: false,
+ mutilSelect: [],
+ queryParams: {},
+ tableData: [],
+ column: [
+ { label: "妫�楠屾姤鍛婄紪鍙�", prop: "insReportCode" },
+ { label: "椤垫暟", prop: "pages", width: "120px" },
+ {
+ label: "鍙戦�佷唤鏁�",
+ prop: "number",
+ },
+ { label: "鍙戝線浣曞", prop: "send" },
+ { label: "鍙戦�佹柟寮�", prop: "method" },
+ { label: "鍙戦�佹棩鏈�", prop: "sendTime" },
+ { label: "鍙戦�佷汉", prop: "sendUserName" },
+ { label: "绛炬敹浜�", prop: "signatoryName" },
+ { label: "澶囨敞", prop: "remark" },
+ {
+ dataType: "action",
+ fixed: "right",
+ label: "鎿嶄綔",
+ operation: [
+ {
+ name: "缂栬緫",
+ type: "text",
+ clickFun: (row) => {
+ this.handleWork(row);
+ },
+ },
+ {
+ name: "鍒犻櫎",
+ type: "text",
+ clickFun: (row) => {
+ this.handleDelete(row);
+ },
+ },
+ ],
+ },
+ ],
+ page: {
+ total: 0,
+ size: 10,
+ current: 0,
+ },
+ tableLoading: false,
+ }
+ },
+ mounted() {
+ // this.entityCopy = this.HaveJson(this.componentData.entity);
+ this.getList()
+ this.getAuthorizedPerson()
+ },
+ methods: {
+ getPower() {
+ let power = JSON.parse(sessionStorage.getItem('power'))
+ let up = false
+ let del = false
+ let add = false
+ let out = false
+ for (var i = 0; i < power.length; i++) {
+ if (power[i].menuMethod == 'doProcessReport') {
+ up = true
+ }
+ if (power[i].menuMethod == 'addProcessReport') {
+ add = true
+ }
+ if (power[i].menuMethod == 'delProcessReport') {
+ del = true
+ }
+ if (power[i].menuMethod == 'exportProcessReport') {
+ out = true
+ }
+ }
+ if (!up) {
+ this.componentData.do.splice(1, 1)
+ }
+ if (!del) {
+ this.componentData.do.splice(0, 1)
+ }
+ this.outPower = out
+ this.addPower = add
+ },
+ handleDown() {
+ if (this.mutilSelect.length == 0) {
+ this.$message.warning('璇烽�夋嫨瑕佸鍑虹殑鏁版嵁')
+ return
+ }
+ this.outLoading = true
+ exportProcessReport({ ids: this.mutilSelect.map(m => m.id) }).then(res => {
+ this.outLoading = false
+ if (res.code === 201) return
+ const url = this.javaApi + '/word/' + res.data;
+ this.$download.saveAs(url, "鎶ュ憡缁撴灉");
+ })
+ },
+ openAdd() {
+ this.title = '鏂板'
+ this.addInfo = {
+ signatory: []
+ }
+ this.addDialogVisible = true;
+ },
+ getList() {
+ this.tableLoading = true;
+ let param = { ...this.queryParams, ...this.page };
+ delete param.total;
+ pageProcessReport({ ...param })
+ .then((res) => {
+ this.tableLoading = false;
+ if (res.code === 200) {
+ this.tableData = res.data.records;
+ this.page.total = res.data.total;
+ }
+ })
+ .catch((err) => {
+ this.tableLoading = false;
+ });
+ },
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.getList();
+ },
+ refresh() {
+ this.queryParams = {};
+ this.page.current = 1;
+ this.getList();
+ },
+ refreshTable() {
+ this.page.current = 1;
+ this.getList();
+ },
+ handleSelectionChange(val) {
+ this.mutilSelect = val
+ },
+ getAuthorizedPerson() {
+ selectUserCondition().then(res => {
+ let data = []
+ res.data.forEach(a => {
+ data.push({
+ label: a.name,
+ value: a.id
+ })
+ })
+ this.personList = data
+ })
+ },
+ handleAdd() {
+ this.addLoading = true
+ delete this.addInfo.createTime
+ delete this.addInfo.createUser
+ delete this.addInfo.updateTime
+ delete this.addInfo.signatoryUrl
+ delete this.addInfo.updateUserer
+ delete this.addInfo.sendUserName
+ let addInfo = this.HaveJson(this.addInfo)
+ addInfo.signatory = addInfo.signatory.join(',')
+ if (this.title == '鏂板') {
+ addProcessReport(addInfo).then(res => {
+ this.addLoading = false
+ if (res.code == 201) {
+ return
+ }
+ this.addDialogVisible = false
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ this.refreshTable()
+ }).catch(err => { })
+ } else {
+ doProcessReport(addInfo).then(res => {
+ this.addLoading = false
+ if (res.code == 201) {
+ return
+ }
+ this.addDialogVisible = false
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ this.refreshTable()
+ }).catch(err => { })
+ }
+ },
+ handleWork(row) {
+ this.title = '淇敼'
+ this.addInfo = row
+ console.log(this.addInfo)
+ this.addInfo.signatory = this.addInfo.signatory ? this.addInfo.signatory.split(',').map(m => Number(m)) : []
+ this.addDialogVisible = true;
+ },
+ handleChangeTask(list) {
+ this.mutilSelect = list
+ },
+ handleDelete(row) {
+ this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ delProcessReport({ id: row.id }).then((res) => {
+ if (res.code == 201) return;
+ this.$message.success("鍒犻櫎鎴愬姛");
+ this.refresh();
+ });
+ })
+ .catch(() => { });
+ },
+ }
+}
+</script>
+
+<style scoped>
+.search {
+ background-color: #fff;
+ height: 80px;
+ display: flex;
+ align-items: center;
+ position: relative;
+}
+
+.search_thing {
+ width: 350px;
+ display: flex;
+ align-items: center;
+}
+
+.search_label {
+ width: 110px;
+ font-size: 14px;
+ text-align: right;
+}
+
+.search_input {
+ width: calc(100% - 110px);
+}
+
+.table {
+ background-color: #fff;
+ height: calc(100% - 60px - 80px - 10px - 40px);
+ padding: 20px;
+}
+
+.tables {
+ table-layout: fixed;
+ width: 100%;
+}
+
+.tables td {
+ height: 40px;
+ width: 100px;
+ text-align: center;
+ font-size: 14px;
+ word-wrap: break-word;
+ white-space: normal;
+}
+
+.en {
+ font-size: 12px;
+ word-break: break-word;
+ /* 鑷姩鏂 */
+ overflow-wrap: break-word;
+ /* 闃叉婧㈠嚭 */
+ white-space: normal;
+ /* 榛樿鎹㈣ */
+}
+
+.btn {
+ position: absolute;
+ top: 16px;
+ right: 20px;
+}
+</style>
diff --git a/src/views/CNAS/process/sampleDisposal/index.vue b/src/views/CNAS/process/sampleDisposal/index.vue
new file mode 100644
index 0000000..f56ae44
--- /dev/null
+++ b/src/views/CNAS/process/sampleDisposal/index.vue
@@ -0,0 +1,609 @@
+<template>
+ <div class="sample-disposal">
+ <el-tabs type="border-card" v-model="activeName" style="height: 100%;" @tab-click="queryParams.totaldealId = ''">
+ <el-tab-pane label="濉啓" name="濉啓" style="height: 100%;" :key="1">
+ <el-button size="small" type="primary" @click="handleAdd0" style="margin-left: 20px;">鏂板</el-button>
+ <div class="table" style="height: calc(100% - 200px)" v-if="activeName == '濉啓'">
+ <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading"
+ :height="'calc(100vh - 290px)'" :page="page" @pagination="pagination"></lims-table>
+ </div>
+ </el-tab-pane>
+ <el-tab-pane label="鍘嗗彶璁板綍" name="鍘嗗彶璁板綍" style="height: 100%;" :key="2">
+ <div class="search">
+ <div class="search_thing">
+ <div class="search_label">骞存湀锛�</div>
+ <div class="search_input">
+ <el-date-picker v-model="queryParams0.month" type="month" placeholder="閫夋嫨鏈�" format="yyyy-MM"
+ value-format="yyyy-MM" size="small" @change="refreshTable()">
+ </el-date-picker>
+ </div>
+ </div>
+ <div class="search_thing" style="padding-left: 30px;">
+ <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+ <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+ </div>
+ </div>
+ <div class="table">
+ <lims-table :tableData="tableData0" :column="column0" :tableLoading="tableLoading"
+ :height="'calc(100vh - 300px)'" :page="page0" @pagination="pagination0"></lims-table>
+ </div>
+ </el-tab-pane>
+ </el-tabs>
+ <!-- 鏂板鏍峰搧 -->
+ <el-dialog :title="title" :visible.sync="addDialogVisible" width="400px">
+ <el-row>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鏍峰搧鍚嶇О锛�</div>
+ <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+ v-model="addInfo.sampleName"></el-input></div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鏍峰搧缂栧彿锛�</div>
+ <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+ v-model="addInfo.sampleCode"></el-input></div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">渚涙牱鍗曚綅锛�</div>
+ <div class="search_input">
+ <el-select v-model="addInfo.sampleSupplier" size="small">
+ <el-option :label="item.company" :value="item.company" v-for="(item, index) in customPageList"
+ :key="item.id"></el-option>
+ </el-select>
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鏁伴噺锛�</div>
+ <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+ v-model="addInfo.num"></el-input>
+ </div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">澶勭悊鏂瑰紡锛�</div>
+ <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
+ v-model="addInfo.dealMethod"></el-input></div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鏃堕棿锛�</div>
+ <div class="search_input">
+ <el-date-picker v-model="addInfo.dealTime" type="date" size="small" placeholder="閫夋嫨鏃ユ湡" format="yyyy-MM-dd"
+ value-format="yyyy-MM-dd" style="width: 100%;">
+ </el-date-picker>
+ </div>
+ </div>
+ </el-col>
+ </el-row>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="addDialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="submitAdd" :loading="addLoading">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <!-- 璇︽儏/涓嬭浇/瀹℃牳/鎵瑰噯 -->
+ <el-dialog :title="title0" :visible.sync="lookDialogVisible" width="800px" :class="{ downPdf: title0 == '涓嬭浇' }"
+ :modal="title0 != '涓嬭浇'" top="5vh">
+ <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.url" :currentFile="{}"
+ style="max-height: 70vh;overflow-y: auto;" />
+ <span slot="footer" class="dialog-footer" v-if="title0 == '瀹℃牳' || title0 == '鎵瑰噯'">
+ <el-button @click="submitCheck('涓嶉�氳繃')" :loading="noCheckLoading">涓嶉�氳繃</el-button>
+ <el-button type="primary" @click="submitCheck('閫氳繃')" :loading="checkLoading">閫� 杩�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import filePreview from "@/components/Preview/filePreview.vue";
+import { selectCustomPageList } from "@/api/system/customer";
+import {
+ doProcessDeal,
+ addProcessDeal,
+ submitProcessTotaldeal,
+ pageProcessDeal,
+ checkProcessTotaldeal,
+ ratifyProcessTotaldeal,
+ delProcessDeal,
+ pageProcessTotaldeal,
+} from "@/api/cnas/process/sampleDisposal";
+export default {
+ components: {
+ limsTable,
+ filePreview,
+ },
+ name: "SampleDisposal",
+ data() {
+ return {
+ activeName: '濉啓',
+ title: '鏂板',
+ addDialogVisible: false,
+ addLoading: false,
+ outLoading: false,
+ editDialogVisible: false,
+ lookDialogVisible: false,
+ title0: '鏌ョ湅',
+ noCheckLoading: false,
+ checkLoading: false,
+ // 鍘嗗彶鍒楄〃
+ addInfo: {},//鏂板鏍峰搧
+ customPageList: [],
+ currentInfo: {
+ arr: []
+ },//鏌ョ湅鐨勮鎯�
+ outPower: false,
+ addPower: false,
+ queryParams: {},
+ tableData: [],
+ column: [
+ { label: "鏍峰搧鍚嶇О", prop: "sampleName" },
+ { label: "鏍峰搧缂栧彿", prop: "sampleCode" },
+ { label: "渚涙牱鍗曚綅", prop: "sampleSupplier" },
+ { label: "鏁伴噺", prop: "num" },
+ { label: "澶勭悊鏂瑰紡", prop: "dealMethod" },
+ { label: "鏃堕棿", prop: "dealTime" },
+ {
+ dataType: "action",
+ fixed: "right",
+ label: "鎿嶄綔",
+ operation: [
+ {
+ name: "缂栬緫",
+ type: "text",
+ clickFun: (row) => {
+ this.handleAdd0(row);
+ },
+ },
+ {
+ name: "鍒犻櫎",
+ type: "text",
+ clickFun: (row) => {
+ this.handleDelete(row);
+ },
+ },
+ ],
+ },
+ ],
+ page: {
+ total: 0,
+ size: 10,
+ current: 0,
+ },
+ tableLoading: false,
+ queryParams0: {},
+ tableData0: [],
+ column0: [
+ { label: "鏈堜唤", prop: "month" },
+ { label: "鎬绘暟閲�", prop: "totalNum" },
+ { label: "鎻愪氦浜�", prop: "submitUserName" },
+ { label: "瀹℃牳浜�", prop: "examineUserName" },
+ { label: "鎵瑰噯浜�", prop: "ratifyUserName" },
+ {
+ dataType: "action",
+ fixed: "right",
+ label: "鎿嶄綔",
+ operation: [
+ {
+ name: "鏌ョ湅",
+ type: "text",
+ clickFun: (row) => {
+ this.handleLook(row);
+ },
+ },
+ {
+ name: "涓嬭浇",
+ type: "text",
+ clickFun: (row) => {
+ this.handleDown0(row);
+ },
+ disabled: (row) => {
+ return !row.url
+ }
+ },
+ {
+ name: "鎻愪氦",
+ type: "text",
+ clickFun: (row) => {
+ this.handleSubmit(row);
+ },
+ disabled: (row) => {
+ return !!row.submitState && row.submitState != '寰呮彁浜�'
+ }
+ },
+ {
+ name: "瀹℃牳",
+ type: "text",
+ clickFun: (row) => {
+ this.handleCheck(row);
+ },
+ disabled: (row) => {
+ return row.examineState == '閫氳繃' || row.submitState == '寰呮彁浜�'
+ }
+ },
+ {
+ name: "鎵瑰噯",
+ type: "text",
+ clickFun: (row) => {
+ this.handleApproval(row);
+ },
+ disabled: (row) => {
+ return row.ratifyState == '閫氳繃' || row.submitState == '寰呮彁浜�'
+ }
+ },
+ ],
+ },
+ ],
+ page0: {
+ total: 0,
+ size: 10,
+ current: 0,
+ },
+ };
+ },
+ mounted() {
+ // this.entityCopy = this.HaveJson(this.componentData.entity);
+ this.getCustomPageList()
+ this.getList()
+ this.getList0()
+ },
+ methods: {
+ getPower() {
+ let power = JSON.parse(sessionStorage.getItem('power'))
+ let add = false
+ let out = false
+ let submitProcessTotaldeal = false
+ let checkProcessTotaldeal = false
+ let ratifyProcessTotaldeal = false
+ for (var i = 0; i < power.length; i++) {
+ if (power[i].menuMethod == 'addProcessDeal') {
+ add = true
+ }
+ // if (power[i].menuMethod == 'exportProcessEvaluate') {
+ // out = true
+ // }
+ if (power[i].menuMethod == 'submitProcessTotaldeal') {
+ submitProcessTotaldeal = true
+ }
+ if (power[i].menuMethod == 'checkProcessTotaldeal') {
+ checkProcessTotaldeal = true
+ }
+ if (power[i].menuMethod == 'ratifyProcessTotaldeal') {
+ ratifyProcessTotaldeal = true
+ }
+ }
+ if (!ratifyProcessTotaldeal) {
+ this.componentData.do.splice(4, 1)
+ }
+ if (!checkProcessTotaldeal) {
+ this.componentData.do.splice(3, 1)
+ }
+ if (!submitProcessTotaldeal) {
+ this.componentData.do.splice(2, 1)
+ }
+ if (!add) {
+ this.componentData0.do.splice(1, 1)
+ this.componentData0.do.splice(0, 1)
+ }
+ this.addPower = add
+ },
+ // 鑾峰彇閫佹牱鍗曚綅鍒楄〃
+ getCustomPageList() {
+ selectCustomPageList({
+ current: -1,
+ size: -1
+ }).then(res => {
+ this.customPageList = res.data.records
+ }).catch(err => { });
+ },
+ handleDown() { },
+ getList() {
+ this.tableLoading = true;
+ let param = { ...this.queryParams, ...this.page };
+ delete param.total;
+ pageProcessDeal({ ...param })
+ .then((res) => {
+ this.tableLoading = false;
+ if (res.code === 200) {
+ this.tableData = res.data.records;
+ this.page.total = res.data.total;
+ }
+ })
+ .catch((err) => {
+ this.tableLoading = false;
+ });
+ },
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.getList();
+ },
+ refresh() {
+ this.queryParams0 = {};
+ this.page0.current = 1;
+ this.getList0();
+ },
+ refreshTable() {
+ this.page0.current = 1;
+ this.getList0();
+ },
+ getList0() {
+ this.tableLoading = true;
+ let param = { ...this.queryParams0, ...this.page };
+ delete param.total;
+ pageProcessTotaldeal({ ...param })
+ .then((res) => {
+ this.tableLoading = false;
+ if (res.code === 200) {
+ this.tableData0 = res.data.records;
+ this.page0.total = res.data.total;
+ }
+ })
+ .catch((err) => {
+ this.tableLoading = false;
+ });
+ },
+ pagination0({ page, limit }) {
+ this.page0.current = page;
+ this.page0.size = limit;
+ this.getList0();
+ },
+ // 濉啓
+ // handleAdd(row){
+ // this.componentData0.entity.totaldealId = row.id
+ // this.editDialogVisible = true
+ // },
+ // 鎵撳紑鏂板鐣岄潰
+ handleAdd0(row) {
+ if (row) {
+ this.addInfo = this.HaveJson(row)
+ this.title = '缂栬緫'
+ } else {
+ this.title = '鏂板'
+ this.addInfo = {}
+ }
+ this.addDialogVisible = true
+ },
+ // 鎻愪氦鏂板
+ submitAdd() {
+ if (this.addInfo.id) {
+ // 缂栬緫
+ this.addLoading = true
+ doProcessDeal({
+ totaldealId: this.queryParams.totaldealId,
+ ...this.addInfo
+ }).then(res => {
+ this.addLoading = false
+ if (res.code === 201) return
+ this.addDialogVisible = false
+ this.$message({
+ type: 'success',
+ message: '缂栬緫鎴愬姛!'
+ });
+ this.page.current = 0;
+ this.getList();
+ }).catch(err => { });
+ } else {
+ // 鏂板
+ this.addLoading = true
+ addProcessDeal({
+ totaldealId: this.queryParams.totaldealId,
+ ...this.addInfo
+ }).then(res => {
+ this.addLoading = false
+ if (res.code === 201) return
+ this.addDialogVisible = false
+ this.$message({
+ type: 'success',
+ message: '鏂板鎴愬姛!'
+ });
+ this.page.current = 0;
+ this.getList();
+ }).catch(err => { });
+ }
+ },
+ // 鎻愪氦
+ handleSubmit(row) {
+ this.$confirm('鏄惁鎻愪氦 ' + row.month + ' 鏈堜唤鐨勬暟鎹�', '鎻愪氦', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ submitProcessTotaldeal({
+ id: row.id
+ }).then(res => {
+ if (res.code === 201) return
+ this.$message({
+ type: 'success',
+ message: '鎻愪氦鎴愬姛!'
+ });
+ this.refreshTable()
+ }).catch(err => { });
+ })
+ },
+ // 鏌ョ湅
+ handleLook(row) {
+ // console.log(row)
+ // this.title0 = '鏌ョ湅'
+ // this.commonFun(row)
+ this.activeName = '濉啓'
+ this.queryParams.totaldealId = row.id
+ this.$nextTick(() => {
+ this.page.current = 0;
+ this.getList();
+ })
+ },
+ commonFun(row, callbanck) {
+ this.currentInfo = row
+ this.queryParams.totaldealId = row.id
+ pageProcessDeal({
+ current: -1,
+ size: -1, ...this.queryParams
+ }).then(res => {
+ this.lookDialogVisible = true
+ this.currentInfo.arr = res.data.records
+ if (callbanck) {
+ callbanck()
+ }
+ }).catch(err => { });
+ },
+ // 瀹℃牳
+ handleCheck(row) {
+ this.title0 = '瀹℃牳'
+ this.commonFun(row)
+ },
+ // 鎵瑰噯
+ handleApproval(row) {
+ this.title0 = '鎵瑰噯'
+ this.commonFun(row)
+ },
+ // 鎻愪氦瀹℃牳/鎵瑰噯
+ submitCheck(state) {
+ if (state == '閫氳繃') {
+ this.checkLoading = true
+ } else {
+ this.noCheckLoading = true
+ }
+ if (this.title0 == '瀹℃牳') {
+ checkProcessTotaldeal({
+ id: this.currentInfo.id,
+ state: state
+ }).then(res => {
+ this.checkLoading = false
+ this.noCheckLoading = false
+ if (res.code === 201) return
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ this.refreshTable()
+ this.lookDialogVisible = false
+ }).catch(err => { });
+ } else if (this.title0 == '鎵瑰噯') {
+ ratifyProcessTotaldeal({
+ id: this.currentInfo.id,
+ state: state
+ }).then(res => {
+ this.checkLoading = false
+ this.noCheckLoading = false
+ if (res.code === 201) return
+ this.$message({
+ type: 'success',
+ message: '鎿嶄綔鎴愬姛!'
+ });
+ this.refreshTable()
+ this.lookDialogVisible = false
+ }).catch(err => { });
+ }
+ },
+ // 瀵煎嚭璇︽儏
+ handleDown0(row) {
+ // 鍚庣涓嬭浇
+ let url = this.javaApi + '/word/' + row.url
+ this.$download.saveAs(url, row.month + ' 鏍峰搧澶勭悊鐢宠琛�');
+ },
+ handleDelete(row) {
+ this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ delProcessDeal({ id: row.id }).then((res) => {
+ if (res.code == 201) return;
+ this.$message.success("鍒犻櫎鎴愬姛");
+ this.refresh();
+ });
+ })
+ .catch(() => { });
+ },
+ },
+}
+</script>
+
+<style scoped>
+.title {
+ height: 60px;
+ line-height: 60px;
+}
+
+.search {
+ background-color: #fff;
+ height: 40px;
+ display: flex;
+ align-items: center;
+ position: relative;
+}
+
+.search_thing {
+ width: 350px;
+ display: flex;
+ align-items: center;
+}
+
+.search_label {
+ width: 110px;
+ font-size: 14px;
+ text-align: right;
+}
+
+.search_input {
+ width: calc(100% - 110px);
+}
+
+.table {
+ background-color: #fff;
+ height: calc(100% - 60px - 140px);
+ padding: 20px;
+}
+
+.downPdf {
+ opacity: 0 !important;
+}
+
+.tables {
+ table-layout: fixed;
+ width: 100%;
+}
+
+.tables td {
+ height: 40px;
+ width: 100px;
+ text-align: center;
+ font-size: 14px;
+ word-wrap: break-word;
+ white-space: normal;
+}
+
+.en {
+ font-size: 12px;
+ word-break: break-word;
+ /* 鑷姩鏂 */
+ overflow-wrap: break-word;
+ /* 闃叉婧㈠嚭 */
+ white-space: normal;
+ /* 榛樿鎹㈣ */
+}
+
+.user-info {
+ display: flex;
+ align-items: center;
+ justify-content: space-evenly;
+ margin-top: 20px;
+}
+
+.user-info .el-button {
+ margin: 0;
+}
+
+>>>.el-tabs__content {
+ height: 100%;
+}
+</style>
diff --git a/src/views/CNAS/process/uncertainty/index.vue b/src/views/CNAS/process/uncertainty/index.vue
new file mode 100644
index 0000000..053008b
--- /dev/null
+++ b/src/views/CNAS/process/uncertainty/index.vue
@@ -0,0 +1,328 @@
+<template>
+ <div class="uncertainty-evaluation">
+ <div class="search">
+ <div class="search_thing">
+ <div class="search_label">鎶ュ憡鍚嶇О锛�</div>
+ <div class="search_input"><el-input v-model="queryParams.reportName" clearable placeholder="璇疯緭鍏�" size="small"
+ @keyup.enter.native="refreshTable()"></el-input></div>
+ </div>
+ <div class="search_thing" style="padding-left: 30px;">
+ <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+ <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+ </div>
+ <div class="btn">
+ <el-button :loading="outLoading" size="small" style="margin-right: 16px;margin-top: 3px;" type="primary"
+ @click="handleDown0">瀵煎嚭</el-button>
+ <el-upload ref='upload' :action="action" :headers="uploadHeader" :on-change="beforeUpload" :on-error="onError"
+ :on-success="handleSuccessUp" :show-file-list="false"
+ accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'>
+ <el-button :loading="upLoading" size="small" type="primary">瀵煎叆</el-button></el-upload>
+ </div>
+ </div>
+ <div class="table">
+ <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 270px)'"
+ :page="page" @pagination="pagination"></lims-table>
+ </div>
+ <el-dialog :visible.sync="addDialogVisible" title="璇勪环" width="400px">
+ <el-row>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">璇勪环锛�</div>
+ <div class="search_input"><el-input v-model="addInfo.note" clearable placeholder="璇疯緭鍏�"
+ size="small"></el-input></div>
+ </div>
+ </el-col>
+ <el-col :span="24" style="margin-bottom: 16px;">
+ <div class="search_thing">
+ <div class="search_label">鏃ユ湡锛�</div>
+ <div class="search_input">
+ <el-date-picker v-model="addInfo.evaluateTime" format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small"
+ style="width: 100%;" type="date" value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </div>
+ </div>
+ </el-col>
+ </el-row>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="addDialogVisible = false">鍙� 娑�</el-button>
+ <el-button :loading="addLoading" type="primary" @click="handleAdd">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="lookDialogVisible" fullscreen title="鏌ョ湅闄勪欢" top="5vh" width="800px">
+ <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="javaApi + '/word/' + currentInfo.reportUrl"
+ style="max-height: 90vh;overflow-y: auto;" />
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import filePreview from "@/components/Preview/filePreview.vue";
+import {
+ exportProcessEvaluate,
+ doProcessEvaluate,
+ delProcessEvaluate,
+ pageProcessEvaluate,
+} from '@/api/cnas/process/uncertainty.js'
+import { mapGetters } from "vuex";
+export default {
+ components: {
+ limsTable,
+ filePreview
+ },
+ data() {
+ return {
+ addPower: false,
+ outPower: false,
+ outLoading: false,
+ upLoading: false,
+ addDialogVisible: false,
+ addInfo: {},
+ addLoading: false,
+ currentInfo: {},
+ lookDialogVisible: false,
+ queryParams: {},
+ tableData: [],
+ column: [
+ { label: "鎶ュ憡鍚嶇О", prop: "reportName" },
+ { label: "璇勪环浜�", prop: "evaluateUserName" },
+ { label: "璇勪环鏃ユ湡", prop: "evaluateTime" },
+ { label: "澶囨敞", prop: "note" },
+ {
+ dataType: "action",
+ fixed: "right",
+ label: "鎿嶄綔",
+ operation: [
+ {
+ name: "璇勪环",
+ type: "text",
+ clickFun: (row) => {
+ this.handleTell(row);
+ },
+ },
+ {
+ name: "鍒犻櫎",
+ type: "text",
+ clickFun: (row) => {
+ this.handleDelete(row);
+ },
+ },
+ {
+ name: "涓嬭浇",
+ type: "text",
+ clickFun: (row) => {
+ this.handleDown(row);
+ },
+ },
+ {
+ name: "鏌ョ湅闄勪欢",
+ type: "text",
+ clickFun: (row) => {
+ this.handleLook(row);
+ },
+ },
+ ],
+ },
+ ],
+ page: {
+ total: 0,
+ size: 10,
+ current: 0,
+ },
+ tableLoading: false,
+ }
+ },
+ // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
+ computed: {
+ ...mapGetters(["userId"]),
+ action() {
+ return this.javaApi + '/processEvaluate/addProcessEvaluate'
+ }
+ },
+ mounted() {
+ // this.entityCopy = this.HaveJson(this.componentData.entity);
+ this.getList()
+ },
+ methods: {
+ getPower() {
+ let power = JSON.parse(sessionStorage.getItem('power'))
+ let up = false
+ let del = false
+ let add = false
+ let out = false
+ for (var i = 0; i < power.length; i++) {
+ if (power[i].menuMethod == 'doProcessEvaluate') {
+ up = true
+ }
+ if (power[i].menuMethod == 'addProcessEvaluate') {
+ add = true
+ }
+ if (power[i].menuMethod == 'delProcessEvaluate') {
+ del = true
+ }
+ if (power[i].menuMethod == 'exportProcessEvaluate') {
+ out = true
+ }
+ }
+ if (!del) {
+ this.componentData.do.splice(1, 1)
+ }
+ if (!up) {
+ this.componentData.do.splice(0, 1)
+ }
+ this.outPower = out
+ this.addPower = add
+ },
+ handleDown0() {
+ this.outLoading = true
+ exportProcessEvaluate(this.queryParams).then(res => {
+ this.outLoading = false
+ if (res.code === 201) return
+ const blob = new Blob([res], { type: 'application/octet-stream' });
+ this.$download.saveAs(blob, '娴嬮噺涓嶇‘瀹氬害鐨勮瘎瀹�.xlsx');
+ })
+ },
+ handleDown(row) {
+ let url = this.javaApi + '/word/' + row.reportUrl
+ this.$download.saveAs(url, row.reportName);
+ },
+ beforeUpload(file) {
+ if (file.size > 1024 * 1024 * 10) {
+ this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+ this.$refs.upload.clearFiles()
+ return false;
+ } else {
+ // this.upLoading = true;
+ return true;
+ }
+ },
+ onError(err, file, fileList) {
+ this.$message.error('涓婁紶澶辫触')
+ this.$refs.upload.clearFiles()
+ },
+ handleSuccessUp(response) {
+ this.upLoading = false;
+ if (response.code == 200) {
+ this.$message.success('涓婁紶鎴愬姛');
+ this.refreshTable()
+ }
+ },
+ handleTell(row) {
+ this.addInfo = row;
+ this.addDialogVisible = true;
+ },
+ handleAdd() {
+ this.addLoading = true;
+ doProcessEvaluate({
+ id: this.addInfo.id,
+ note: this.addInfo.note,
+ evaluateTime: this.addInfo.evaluateTime,
+ evaluateUser: this.userId
+ }).then((res) => {
+ this.addLoading = false;
+ if (res.code == 201) {
+ this.$message.error('璇勪环澶辫触');
+ return;
+ }
+ this.$message.success('璇勪环鎴愬姛');
+ this.addDialogVisible = false;
+ this.refreshTable()
+ })
+ },
+ getList() {
+ this.tableLoading = true;
+ let param = { ...this.queryParams, ...this.page };
+ delete param.total;
+ pageProcessEvaluate({ ...param })
+ .then((res) => {
+ this.tableLoading = false;
+ if (res.code === 200) {
+ this.tableData = res.data.records;
+ this.page.total = res.data.total;
+ }
+ })
+ .catch((err) => {
+ this.tableLoading = false;
+ });
+ },
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.getList();
+ },
+ refresh() {
+ this.queryParams = {};
+ this.page.current = 1;
+ this.getList();
+ },
+ refreshTable() {
+ this.page.current = 1;
+ this.getList();
+ },
+ handleLook(row) {
+ this.currentInfo = row;
+ this.lookDialogVisible = true;
+ },
+ handleDelete(row) {
+ this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ delProcessEvaluate({ id: row.id }).then((res) => {
+ if (res.code == 201) return;
+ this.$message.success("鍒犻櫎鎴愬姛");
+ this.refresh();
+ });
+ })
+ .catch(() => { });
+ },
+ }
+}
+</script>
+
+<style scoped>
+.title {
+ height: 60px;
+ line-height: 60px;
+}
+
+.search {
+ background-color: #fff;
+ height: 80px;
+ display: flex;
+ align-items: center;
+ position: relative;
+}
+
+.search_thing {
+ width: 350px;
+ display: flex;
+ align-items: center;
+}
+
+.search_label {
+ width: 80px;
+ font-size: 14px;
+ text-align: right;
+}
+
+.search_input {
+ width: calc(100% - 80px);
+}
+
+.table {
+ background-color: #fff;
+ height: calc(100% - 60px - 80px - 10px - 40px);
+ padding: 20px;
+}
+
+.btn {
+ position: absolute;
+ top: 16px;
+ right: 20px;
+ display: flex;
+ align-items: center;
+}
+</style>
--
Gitblit v1.9.3