From 5205fd013d3f89f2d8085f8f62b1f32567632a21 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 24 二月 2025 17:32:40 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev
---
src/views/standard/standardLibrary/index.vue | 91
src/views/CNAS/systemManagement/internalAuditManagement/components/ViewTestRecord.vue | 176 +
src/views/CNAS/systemManagement/internalAuditManagement/components/auditReportDia.vue | 333 +++
src/views/business/inspectionReview/index.vue | 82
src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveActionDIa.vue | 409 ++++
src/views/CNAS/systemManagement/internalAuditManagement/components/implementationPlan.vue | 292 +++
src/api/cnas/systemManagement/internalAuditManagement.js | 398 ++++
src/views/CNAS/systemManagement/customerSatisfaction/index.vue | 3
src/views/CNAS/systemManagement/internalAuditManagement/components/implementPlanDia.vue | 307 +++
src/views/CNAS/systemManagement/internalAuditManagement/components/auditReport.vue | 312 +++
src/views/CNAS/systemManagement/internalAuditManagement/index.vue | 57
src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspection.vue | 254 ++
src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveAction.vue | 182 +
src/components/Table/lims-table.vue | 2
public/index.html | 1
src/views/business/reportPreparation/index.vue | 1221 +++++++++++++
src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSignDia.vue | 183 +
src/views/business/inspectionTask/inspection.vue | 16
src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlanDia.vue | 342 +++
src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlan.vue | 314 +++
src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSign.vue | 202 ++
src/api/standard/standardLibrary.js | 35
src/api/business/inspectionTask.js | 2
src/views/business/unpass/components/PurchaseVerification.vue | 31
src/views/CNAS/systemManagement/correctiveAction/index.vue | 3
src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspectionDia.vue | 231 ++
26 files changed, 5,296 insertions(+), 183 deletions(-)
diff --git a/public/index.html b/public/index.html
index 0a54df5..aba4f3e 100644
--- a/public/index.html
+++ b/public/index.html
@@ -225,6 +225,7 @@
</div>
</div>
</body>
+ <script type='text/javascript' src='http://192.168.21.53:9001/web-apps/apps/api/documents/api.js'></script>
<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>
diff --git a/src/api/business/inspectionTask.js b/src/api/business/inspectionTask.js
index 5e50039..4187ad6 100644
--- a/src/api/business/inspectionTask.js
+++ b/src/api/business/inspectionTask.js
@@ -213,7 +213,7 @@
return request({
url: "/insOrderPlan/verifyPlan",
method: "post",
- data: data,
+ params: data,
});
}
diff --git a/src/api/cnas/systemManagement/internalAuditManagement.js b/src/api/cnas/systemManagement/internalAuditManagement.js
new file mode 100644
index 0000000..e7ae621
--- /dev/null
+++ b/src/api/cnas/systemManagement/internalAuditManagement.js
@@ -0,0 +1,398 @@
+// 鍐呭绠$悊鐩稿叧鎺ュ彛
+import request from "@/utils/request";
+
+//骞村害璁″垝-鍒嗛〉
+export function pageInternalPlan(query) {
+ return request({
+ url: "/internalPlan/pageInternalPlan",
+ method: "get",
+ params: query,
+ });
+}
+
+//骞村害璁″垝-鍒犻櫎
+export function delInternalPlan(query) {
+ return request({
+ url: "/internalPlan/delInternalPlan",
+ method: "delete",
+ params: query,
+ });
+}
+
+//骞村害璁″垝-瀵煎嚭
+export function exportInternalPlan(query) {
+ return request({
+ url: "/internalPlan/exportInternalPlan",
+ method: "get",
+ headers: {
+ responseType: "blob",
+ },
+ params: query,
+ });
+}
+
+//骞村害璁″垝璇︽儏
+export function getInternalPlanOne(query) {
+ return request({
+ url: "/internalPlan/getInternalPlanOne",
+ method: "get",
+ params: query,
+ });
+}
+
+// 骞村害璁″垝-鏂板
+export function addInternalPlan(data) {
+ return request({
+ url: "/internalPlan/addInternalPlan",
+ method: "post",
+ data: data,
+ });
+}
+
+// 骞村害璁″垝-淇敼
+export function updateInternalPlan(data) {
+ return request({
+ url: "/internalPlan/updateInternalPlan",
+ method: "post",
+ data: data,
+ });
+}
+
+// 骞村害璁″垝-瀹℃牳
+export function examineInternalPlan(data) {
+ return request({
+ url: "/internalPlan/examineInternalPlan",
+ method: "post",
+ data: data,
+ });
+}
+
+// 骞村害璁″垝-鎵瑰噯
+export function ratifyInternalPlan(data) {
+ return request({
+ url: "/internalPlan/ratifyInternalPlan",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍐呭瀹炴柦璁″垝鍒嗛〉鏌ヨ
+export function pageInternalImplement(query) {
+ return request({
+ url: "/internalImplement/pageInternalImplement",
+ method: "get",
+ params: query,
+ });
+}
+
+//鍐呭瀹炴柦璁″垝鍒犻櫎
+export function delInternalImplement(query) {
+ return request({
+ url: "/internalImplement/delInternalImplement",
+ method: "delete",
+ params: query,
+ });
+}
+
+//瀵煎嚭鍐呭瀹炴柦璁″垝
+export function exportInternalImplement(query) {
+ return request({
+ url: "/internalImplement/exportInternalImplement",
+ method: "get",
+ headers: {
+ responseType: "blob",
+ },
+ params: query,
+ });
+}
+
+//鍐呭瀹炴柦璁″垝璇︽儏
+export function getInternalImplementOne(query) {
+ return request({
+ url: "/internalImplement/getInternalImplementOne",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鍐呭瀹炴柦璁″垝鏂板
+export function addInternalImplement(data) {
+ return request({
+ url: "/internalImplement/addInternalImplement",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鍐呭瀹炴柦璁″垝淇敼
+export function updateInternalImplement(data) {
+ return request({
+ url: "/internalImplement/updateInternalImplement",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鍐呭瀹炴柦璁″垝淇敼
+export function ratifyInternalImplement(data) {
+ return request({
+ url: "/internalImplement/ratifyInternalImplement",
+ method: "post",
+ data: data,
+ });
+}
+
+//浼氳绛惧埌鏌ヨ
+export function pageInternalMeeting(query) {
+ return request({
+ url: "/internalMeeting/pageInternalMeeting",
+ method: "get",
+ params: query,
+ });
+}
+
+// 浼氳绛惧埌鍒犻櫎
+export function delInternalMeeting(query) {
+ return request({
+ url: "/internalMeeting/delInternalMeeting",
+ method: "delete",
+ params: query,
+ });
+}
+
+//瀵煎嚭鍐呭浼氳
+export function exportInternalMeeting(query) {
+ return request({
+ url: "/internalMeeting/exportInternalMeeting",
+ method: "get",
+ headers: {
+ responseType: "blob",
+ },
+ params: query,
+ });
+}
+
+//浼氳绛惧埌鏌ヨ璇︽儏
+export function getInternalMeetingOne(query) {
+ return request({
+ url: "/internalMeeting/getInternalMeetingOne",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板浼氳绛惧埌
+export function addInternalMeeting(data) {
+ return request({
+ url: "/internalMeeting/addInternalMeeting",
+ method: "post",
+ data: data,
+ });
+}
+
+// 浼氳绛惧埌淇敼
+export function updateInternalMeeting(data) {
+ return request({
+ url: "/internalMeeting/updateInternalMeeting",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍐呭妫�鏌ュ垎椤垫煡璇�
+export function pageInternalCheck(query) {
+ return request({
+ url: "/internalCheck/pageInternalCheck",
+ method: "get",
+ params: query,
+ });
+}
+
+//鍐呭妫�鏌ュ垹闄�
+export function delInternalCheck(query) {
+ return request({
+ url: "/internalCheck/delInternalCheck",
+ method: "delete",
+ params: query,
+ });
+}
+
+//瀵煎嚭鍐呭妫�鏌�
+export function exportInternalCheck(query) {
+ return request({
+ url: "/internalCheck/exportInternalCheck",
+ method: "get",
+ headers: {
+ responseType: "blob",
+ },
+ params: query,
+ });
+}
+
+//鍐呭妫�鏌ヨ鎯�
+export function getInternalCheckOne(query) {
+ return request({
+ url: "/internalCheck/getInternalCheckOne",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鍐呭妫�鏌ユ柊澧�
+export function addInternalCheck(data) {
+ return request({
+ url: "/internalCheck/addInternalCheck",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鍐呭妫�鏌ヤ慨鏀�
+export function updateInternalCheck(data) {
+ return request({
+ url: "/internalCheck/updateInternalCheck",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鍐呭妫�鏌ユ壒鍑�
+export function ratifyInternalCheck(data) {
+ return request({
+ url: "/internalCheck/ratifyInternalCheck",
+ method: "post",
+ data: data,
+ });
+}
+
+//鏌ヨ鍐呭绠$悊绾犳鎺柦鍒楄〃
+export function pageInternalCorrect(query) {
+ return request({
+ url: "/internalCorrect/pageInternalCorrect",
+ method: "get",
+ params: query,
+ });
+}
+
+//瀵煎嚭鍐呭绠$悊绾犳鎺柦闄勪欢
+export function exportInternalCorrect(query) {
+ return request({
+ url: "/internalCorrect/exportInternalCorrect",
+ method: "get",
+ headers: {
+ responseType: "blob",
+ },
+ params: query,
+ });
+}
+
+//鏌ヨ鍐呭绠$悊绾犳澶勭悊璇︽儏
+export function getInternalCorrect(query) {
+ return request({
+ url: "/internalCorrect/getInternalCorrect",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鎻愪氦鍐呭绠$悊绾犳鎺柦鍒楄〃
+export function addInternalCorrect(data) {
+ return request({
+ url: "/internalCorrect/addInternalCorrect",
+ method: "post",
+ data: data,
+ });
+}
+
+//鍐呭鎶ュ憡鍒犻櫎
+export function delInternalReport(query) {
+ return request({
+ url: "/internalReport/delInternalReport",
+ method: "delete",
+ params: query,
+ });
+}
+
+//鍐呭鎶ュ憡鍒嗛〉鏌ヨ
+export function pageInternalReport(query) {
+ return request({
+ url: "/internalReport/pageInternalReport",
+ method: "get",
+ params: query,
+ });
+}
+
+//瀵煎嚭鍐呭鎶ュ憡
+export function exportInternalReport(query) {
+ return request({
+ url: "/internalReport/exportInternalReport",
+ method: "get",
+ headers: {
+ responseType: "blob",
+ },
+ params: query,
+ });
+}
+
+//鍐呭鎶ュ憡璇︽儏
+export function getInternalReportOne(query) {
+ return request({
+ url: "/internalReport/getInternalReportOne",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鍐呭鎶ュ憡鏂板
+export function addInternalReport(data) {
+ return request({
+ url: "/internalReport/addInternalReport",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鍐呭鎶ュ憡淇敼
+export function updateInternalReport(data) {
+ return request({
+ url: "/internalReport/updateInternalReport",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鍐呭鎶ュ憡瀹℃牳
+export function examineInternalReport(data) {
+ return request({
+ url: "/internalReport/examineInternalReport",
+ method: "post",
+ data: data,
+ });
+}
+
+// 鍐呭鎶ュ憡璐熻矗浜哄~鍐�
+export function qualityInternalReport(data) {
+ return request({
+ url: "/internalReport/qualityInternalReport",
+ method: "post",
+ data: data,
+ });
+}
+
+//鏌ヨ鍐呭绠$悊绾犳鎺柦闄勪欢
+export function getInternalCorrectFileList(query) {
+ return request({
+ url: "/internalCorrect/getInternalCorrectFileList",
+ method: "get",
+ params: query,
+ });
+}
+
+//鍒犻櫎鍐呭绠$悊绾犳鎺柦闄勪欢
+export function delInternalCorrectFile(query) {
+ return request({
+ url: "/internalCorrect/delInternalCorrectFile",
+ method: "delete",
+ params: query,
+ });
+}
diff --git a/src/api/standard/standardLibrary.js b/src/api/standard/standardLibrary.js
index ad374ed..785c6fb 100644
--- a/src/api/standard/standardLibrary.js
+++ b/src/api/standard/standardLibrary.js
@@ -56,15 +56,6 @@
});
}
-// 缁欐爣鍑嗘爲娣诲姞妫�楠屾爣鍑�
-export function addStandardMethodList(data) {
- return request({
- url: "/standardTree/addStandardMethodList",
- method: "post",
- data: data,
- });
-}
-
// 娣诲姞鏍囧噯鏍�
export function addStandardTree(data) {
return request({
@@ -101,32 +92,6 @@
});
}
-// 鍒犻櫎鏍囧噯鏍戜笅鐨勬楠屾爣鍑�
-export function delStandardMethodByFLSSM(data) {
- return request({
- url: "/standardTree/delStandardMethodByFLSSM",
- method: "post",
- data: data,
- });
-}
-
-// 鍒犻櫎鏍囧噯鏍戜笅鐨勬楠屾爣鍑�
-export function delStandardProductByIds(data) {
- return request({
- url: "/standardTree/delStandardProductByIds",
- method: "post",
- data: data,
- });
-}
-
-// 鏂板鏍囧噯鏍戜笅鐨勬楠岄」鐩�
-export function addStandardProduct(data) {
- return request({
- url: "/standardTree/addStandardProduct",
- method: "post",
- data: data,
- });
-}
// 閫氳繃妫�楠屾爣鍑嗘煡璇㈡楠岄」鐩�
export function selectStandardProductListByMethodId(query) {
diff --git a/src/components/Table/lims-table.vue b/src/components/Table/lims-table.vue
index fb86ea4..339a50f 100644
--- a/src/components/Table/lims-table.vue
+++ b/src/components/Table/lims-table.vue
@@ -268,7 +268,7 @@
row.forEach((a) => {
count += a.name.length;
});
- return count * 15 + 60 + "px";
+ return count * 15 + 70 + "px";
},
iconFn(row) {
if (row.name === "缂栬緫" || row.name === "淇敼") {
diff --git a/src/views/CNAS/systemManagement/correctiveAction/index.vue b/src/views/CNAS/systemManagement/correctiveAction/index.vue
index 85c46e0..6e92fbd 100644
--- a/src/views/CNAS/systemManagement/correctiveAction/index.vue
+++ b/src/views/CNAS/systemManagement/correctiveAction/index.vue
@@ -15,7 +15,8 @@
<TableCard :showForm="false" :showTitle="false">
<template v-slot:table>
<limsTable :column="tableColumn" :height="'calc(100vh - 17em)'" :table-data="tableData"
- :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination">
+ :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination"
+ :page="page">
</limsTable>
</template>
</TableCard>
diff --git a/src/views/CNAS/systemManagement/customerSatisfaction/index.vue b/src/views/CNAS/systemManagement/customerSatisfaction/index.vue
index 7b76b7c..414a023 100644
--- a/src/views/CNAS/systemManagement/customerSatisfaction/index.vue
+++ b/src/views/CNAS/systemManagement/customerSatisfaction/index.vue
@@ -34,7 +34,8 @@
<TableCard :showForm="false" :showTitle="false">
<template v-slot:table>
<limsTable :column="tableColumn" :height="'calc(100vh - 22em)'" :table-data="tableData"
- :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination">
+ :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" @pagination="pagination"
+ :page="page">
</limsTable>
</template>
</TableCard>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/ViewTestRecord.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/ViewTestRecord.vue
new file mode 100644
index 0000000..fac2da1
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/ViewTestRecord.vue
@@ -0,0 +1,176 @@
+<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="{ correctId: info.correctId }" :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 - 30em)'" :highlightCurrentRow="true"
+ :table-data="tableData" :table-loading="tableLoading" style="margin-top: 0.5em;" :page="page">
+ </limsTable>
+ </div>
+ </el-dialog>
+ <el-dialog :visible.sync="lookDialogVisible" fullscreen title="鏌ョ湅闄勪欢" top="5vh" width="800px">
+ <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="javaApi + '/word/' + currentInfo.fileUrl"
+ style="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 {
+ getInternalCorrectFileList,
+ delInternalCorrectFile,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+ name: 'ViewTestRecord',
+ // 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,
+ page: {
+ total: 0,
+ size: -1,
+ current: -1,
+ },
+ };
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ openDia(row) {
+ this.filesDialogVisible = true
+ this.info = row
+ this.searchTableList()
+ },
+ // 鏌ヨ闄勪欢鍒楄〃
+ searchTableList() {
+ this.tableLoading = true
+ getInternalCorrectFileList({ correctId: this.info.correctId }).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
+ },
+ // 鏌ョ湅鏂囦欢
+ handleLook(row) {
+ this.currentInfo = row
+ this.lookDialogVisible = true
+ },
+ // 涓嬭浇
+ 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.fileUrl
+ this.$download.saveAs(url, row.fileName)
+ }
+ },
+ // 鍒犻櫎
+ delete(row) {
+ this.tableLoading = true
+ delInternalCorrectFile({ correctFileId: row.correctFileId }).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()
+ } else {
+ this.$message.error(response.message);
+ }
+ },
+ },
+ computed: {
+ fileAction() {
+ return this.javaApi + '/internalCorrect/uploadInternalCorrectFile'
+
+ }
+ },
+};
+</script>
+
+<style scoped></style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspection.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspection.vue
new file mode 100644
index 0000000..ecbc0cf
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspection.vue
@@ -0,0 +1,254 @@
+<template>
+ <div>
+ <div class="search-background">
+ <span class="search-group">
+ <span style="width: 160px">鍙楀閮ㄩ棬锛�</span>
+ <el-input v-model="searchForm.department" clearable size="small"></el-input>
+ <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+ <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+ </span>
+ <span class="search-group">
+ <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+ </span>
+ </div>
+ <div class="table">
+ <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+ :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
+ </limsTable>
+ </div>
+ <audit-inspection-dia v-if="auditInspectionDia" ref="auditInspectionDia"
+ @closeImplementDia="closeImplementDia"></audit-inspection-dia>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import AuditInspectionDia from './auditInspectionDia.vue';
+import {
+ pageInternalCheck,
+ delInternalCheck,
+ exportInternalCheck
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+
+export default {
+ name: 'auditInspection',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { AuditInspectionDia, limsTable },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ searchForm: {
+ department: '',
+ },
+ tableColumn: [
+ {
+ label: '鍙楀閮ㄩ棬',
+ prop: 'department',
+ },
+ {
+ label: '閮ㄩ棬璐熻矗浜�',
+ prop: 'departmentHead',
+ },
+ {
+ label: '瀹℃牳鍛�',
+ prop: 'auditor',
+ },
+ {
+ label: '瀹℃牳鏃ユ湡',
+ prop: 'reviewDate',
+ }, {
+ 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: '140'
+ },
+ {
+ dataType: 'action',
+ minWidth: '220',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDown(row)
+ },
+ disabled: (row) => {
+ if (row.ratifyStatus === 1) {
+ return false
+ } else {
+ return true
+ }
+ },
+ },
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('edit', row);
+ },
+ disabled: (row) => {
+ if (row.ratifyStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ },
+ {
+ name: '鎵瑰噯',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('ratify', row);
+ },
+ disabled: (row) => {
+ if (row.ratifyStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.delPlan(row)
+ },
+ disabled: (row) => {
+ if (row.ratifyStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ }
+ ]
+ }
+ ],
+ tableData: [],
+ tableLoading: false,
+ page: {
+ size: 20,
+ current: 1,
+ total: 0,
+ },
+ auditInspectionDia: false
+ };
+ },
+ mounted() {
+ this.searchList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ鍒楄〃
+ searchList() {
+ const entity = this.searchForm
+ const page = this.page
+ this.tableLoading = true
+ pageInternalCheck({ ...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
+ })
+ },
+ // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+ openFormDia(type, row) {
+ this.auditInspectionDia = true
+ this.$nextTick(() => {
+ this.$refs.auditInspectionDia.openDia(type, row)
+ })
+ },
+ closeImplementDia() {
+ this.auditInspectionDia = false
+ this.searchList()
+ },
+ // 閲嶇疆鏌ヨ鏉′欢
+ resetSearchForm() {
+ this.searchForm.department = '';
+ this.searchList()
+ },
+ // 鍒犻櫎
+ delPlan(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.tableLoading = true
+ delInternalCheck({ checkId: row.checkId }).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: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 瀵煎嚭
+ handleDown(row) {
+ exportInternalCheck({ checkId: row.checkId }).then(res => {
+ this.outLoading = false
+ this.$message.success('瀵煎嚭鎴愬姛')
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '鍐呭妫�鏌�' + '.docx');
+ })
+ },
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.searchList();
+ },
+ }
+};
+</script>
+
+<style scoped>
+.search-background {
+ width: 100%;
+ height: 60px;
+ line-height: 60px;
+ display: flex;
+ justify-content: space-between;
+}
+
+.search-group {
+ display: flex;
+ align-items: center;
+ margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspectionDia.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspectionDia.vue
new file mode 100644
index 0000000..a1f1e58
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspectionDia.vue
@@ -0,0 +1,231 @@
+<template>
+ <div>
+ <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+ :visible.sync="formDia" title="鍐呴儴瀹℃牳瀹炴柦璁″垝" width="80%" @close="closeImplementDia">
+ <el-form ref="form" :model="form" :rules="rules" label-width="auto">
+ <el-col :span="12">
+ <el-form-item label="鍙楀閮ㄩ棬" prop="department">
+ <el-input v-model="form.department" :disabled="operationType === 'ratify'" clearable
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="閮ㄩ棬璐熻矗浜�" prop="departmentHead">
+ <el-input v-model="form.departmentHead" :disabled="operationType === 'ratify'" clearable
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳鍛�" prop="auditor">
+ <el-input v-model="form.auditor" :disabled="operationType === 'ratify'" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳鏃ユ湡" prop="reviewDate">
+ <el-date-picker v-model="form.reviewDate" :disabled="operationType === 'ratify'" clearable
+ format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ </el-form>
+ <div v-if="operationType !== 'ratify'" style="text-align: right;margin-bottom: 10px">
+ <el-button size="small" type="primary" @click="addRow">娣诲姞</el-button>
+ <el-button size="small" type="danger" @click="clearTable">娓呯┖</el-button>
+ </div>
+ <el-table :data="checkDetailList" border height="300" style="width: 100%">
+ <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+ <el-table-column header-align="center" label="娑夊強瑕佺礌鍜岃川閲忎綋绯绘枃浠舵潯娆�" prop="element">
+ <template slot-scope="{row}">
+ <el-input v-model="row.element" :disabled="operationType === 'ratify'" size="small" />
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="瀹℃牳鍐呭" prop="content">
+ <template slot-scope="{row}">
+ <el-input v-model="row.content" :disabled="operationType === 'ratify'" size="small" />
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="瀹℃牳鏂瑰紡" prop="method">
+ <template slot-scope="{row}">
+ <el-input v-model="row.method" :disabled="operationType === 'ratify'" size="small" />
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="瀹℃牳缁撴灉璁板綍" prop="resultRecords" width="180">
+ <template slot-scope="{row}">
+ <el-input v-model="row.resultRecords" :disabled="operationType === 'ratify'" size="small" />
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="涓嶇鍚堟�ц川" prop="nonNature" width="180">
+ <template slot-scope="{row}">
+ <el-input v-model="row.nonNature" :disabled="operationType === 'ratify'" size="small" />
+ </template>
+ </el-table-column>
+ </el-table>
+ <span slot="footer" class="dialog-footer">
+ <el-button v-if="operationType === 'ratify'" :loading="loading" @click="ratify(0)">涓嶆壒鍑�</el-button>
+ <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="ratify(1)">鎵�
+ 鍑�</el-button>
+ <el-button v-if="operationType !== 'ratify'" @click="closeImplementDia">鍙� 娑�</el-button>
+ <el-button v-if="operationType !== 'ratify'" :loading="loading" type="primary" @click="handleEdit">鎻�
+ 浜�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="approvalDialog" title="鎵瑰噯" width="30%" @close="approvalDialog = false">
+ <span>
+ 鎵瑰噯澶囨敞锛�
+ <el-input v-model="ratifyRemark" type="textarea"></el-input>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button :loading="approvalLoading" @click="approvalDialog = false">鍙� 娑�</el-button>
+ <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ getInternalCheckOne,
+ addInternalCheck,
+ updateInternalCheck,
+ ratifyInternalCheck,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+ name: 'auditInspectionDia',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ diaLoading: false,
+ loading: false,
+ form: {
+ department: '',
+ departmentHead: '',
+ auditor: '',
+ reviewDate: '',
+ },
+ rules: {
+ department: [{ required: true, message: '璇峰~鍐欏彈瀹¢儴闂�', trigger: 'blur' }],
+ departmentHead: [{ required: true, message: '璇峰~鍐欓儴闂ㄨ礋璐d汉', trigger: 'blur' }],
+ auditor: [{ required: true, message: '璇峰~鍐欏鏍稿憳', trigger: 'blur' }],
+ reviewDate: [{ required: true, message: '璇峰~鍐欏鏍告棩鏈�', trigger: 'blur' }],
+ },
+ checkDetailList: [],
+ operationType: '',
+ approvalDialog: false,
+ approvalLoading: false,
+ ratifyRemark: '',
+ };
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鎵撳紑寮规
+ openDia(type, row) {
+ this.formDia = true
+ this.operationType = type
+ if (type !== 'add') {
+ this.searchInfo(row)
+ }
+ },
+ // 鏌ヨ璇︽儏
+ searchInfo(row) {
+ this.diaLoading = true
+ getInternalCheckOne({ checkId: row.checkId }).then(res => {
+ this.diaLoading = false
+ if (res.code === 201) return
+ this.form = res.data
+ this.checkDetailList = this.form.checkDetailList
+ }).catch(err => {
+ console.log(err)
+ this.diaLoading = false
+ })
+ },
+ // 鎻愪氦寮规鏁版嵁
+ handleEdit() {
+ this.$refs['form'].validate((valid) => {
+ if (valid) {
+ if (this.checkDetailList.length === 0) {
+ this.$message.warning('璇锋坊鍔犺〃鏍兼暟鎹�')
+ return
+ }
+ this.loading = true
+ const internalCheckDto = this.HaveJson(this.form)
+ internalCheckDto.checkDetailList = this.HaveJson(this.checkDetailList)
+ if (this.operationType === 'add') {
+ addInternalCheck(internalCheckDto).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeImplementDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ } else if (this.operationType === 'edit') {
+ updateInternalCheck(internalCheckDto).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeImplementDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ }
+ } else {
+ console.log('error submit!!');
+ return false;
+ }
+ });
+ },
+ ratify(ratifyStatus) {
+ // 涓嶆壒鍑嗛渶瑕佸~鍐欐壒鍑嗗唴瀹�
+ if (ratifyStatus === 0) {
+ this.approvalDialog = true
+ } else {
+ this.handleApproval(ratifyStatus)
+ }
+ },
+ // 鎻愪氦鎵瑰噯淇℃伅
+ handleApproval(ratifyStatus) {
+ this.approvalLoading = true
+ const internalCheckDto = this.HaveJson(this.form)
+ internalCheckDto.ratifyStatus = ratifyStatus
+ internalCheckDto.ratifyRemark = ratifyStatus === 0 ? this.ratifyRemark : ''
+ ratifyInternalCheck(internalCheckDto).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鎻愪氦鎴愬姛锛�');
+ this.approvalDialog = false
+ this.closeImplementDia(this.departId);
+ }
+ this.approvalLoading = false
+ }).catch(() => {
+ this.approvalLoading = false
+ })
+ },
+ // 澧炲姞琛ㄦ牸琛屾暟鎹�
+ addRow() {
+ this.checkDetailList.push({
+ element: '',
+ content: '',
+ method: '',
+ resultRecords: '',
+ nonNature: '',
+ })
+ },
+ // 娓呯┖琛ㄦ牸鏁版嵁
+ clearTable() {
+ this.checkDetailList = []
+ },
+ closeImplementDia() {
+ this.$refs.form.resetFields();
+ this.formDia = false
+ this.$emit('closeImplementDia')
+ },
+ }
+};
+</script>
+
+<style scoped></style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSign.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSign.vue
new file mode 100644
index 0000000..1ea5e3a
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSign.vue
@@ -0,0 +1,202 @@
+<template>
+ <div>
+ <div class="search-background">
+ <span class="search-group">
+ <span style="width: 160px">鏃堕棿锛�</span>
+ <el-input v-model="searchForm.meetingDate" clearable size="small"></el-input>
+ <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+ <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+ </span>
+ <span class="search-group">
+ <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+ </span>
+ </div>
+ <div class="table">
+ <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+ :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
+ </limsTable>
+ </div>
+ <audit-meeting-sign-dia v-if="auditMeetingSignDia" ref="auditMeetingSignDia"
+ @closeYearDia="closeYearDia"></audit-meeting-sign-dia>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import AuditMeetingSignDia from './auditMeetingSignDia.vue';
+import {
+ pageInternalMeeting,
+ delInternalMeeting,
+ exportInternalMeeting,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+
+export default {
+ name: 'auditMeetingSign',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { AuditMeetingSignDia, limsTable },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ searchForm: {
+ meetingDate: '',
+ },
+ tableColumn: [
+ {
+ label: '鏃堕棿',
+ prop: 'meetingDate',
+ minWidth: '100'
+ },
+ {
+ label: '涓绘寔浜�',
+ prop: 'compere',
+ minWidth: '100'
+ },
+ {
+ label: '鍦扮偣',
+ prop: 'place',
+ minWidth: '100'
+ },
+ {
+ label: '浼氳涓婚',
+ prop: 'subject',
+ minWidth: '100'
+ },
+ {
+ label: '鍙備細浜哄憳',
+ prop: 'participantName',
+ minWidth: '120'
+ },
+ {
+ dataType: 'action',
+ fixed: 'right',
+ minWidth: '220',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDown(row)
+ }
+ },
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('edit', row);
+ },
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.delPlan(row)
+ }
+ }
+ ]
+ }
+ ],
+ tableData: [],
+ tableLoading: false,
+ page: {
+ size: 20,
+ current: 1,
+ total: 0,
+ },
+ auditMeetingSignDia: false,
+ };
+ },
+ mounted() {
+ this.searchList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ鍒楄〃
+ searchList() {
+ const entity = this.searchForm
+ const page = this.page
+ this.tableLoading = true
+ pageInternalMeeting({ ...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
+ })
+ },
+ // 鏂板锛岀紪杈戝脊妗�
+ openFormDia(type, row) {
+ this.auditMeetingSignDia = true
+ this.$nextTick(() => {
+ this.$refs.auditMeetingSignDia.openDia(type, row)
+ })
+ },
+ closeYearDia() {
+ this.auditMeetingSignDia = false
+ this.searchList()
+ },
+ // 閲嶇疆鏌ヨ鏉′欢
+ resetSearchForm() {
+ this.searchForm.meetingDate = '';
+ this.searchList()
+ },
+ // 鍒犻櫎
+ delPlan(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.tableLoading = true
+ delInternalMeeting({ meetingId: row.meetingId }).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: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 瀵煎嚭
+ handleDown(row) {
+ exportInternalMeeting({ meetingId: row.meetingId }).then(res => {
+ this.outLoading = false
+ this.$message.success('瀵煎嚭鎴愬姛')
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '鍐呭浼氳绛惧埌' + '.docx');
+ })
+ },
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.searchList();
+ },
+ }
+};
+</script>
+
+<style scoped>
+.search-background {
+ width: 100%;
+ height: 60px;
+ line-height: 60px;
+ display: flex;
+ justify-content: space-between;
+}
+
+.search-group {
+ display: flex;
+ align-items: center;
+ margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSignDia.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSignDia.vue
new file mode 100644
index 0000000..e648ee2
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSignDia.vue
@@ -0,0 +1,183 @@
+<template>
+ <div>
+ <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+ :visible.sync="formDia" title="鍐呭浼氳绛惧埌琛�" width="1000px" @close="closeYearDia">
+ <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto">
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="鏃堕棿" prop="meetingDate">
+ <el-date-picker v-model="form.meetingDate" clearable format="yyyy-MM-dd HH:mm:ss" placeholder="璇烽�夋嫨"
+ size="small" style="width: 100%" type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="涓绘寔浜�" prop="compere">
+ <el-input v-model="form.compere" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍦扮偣" prop="place">
+ <el-input v-model="form.place" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="浼氳涓婚" prop="subject">
+ <el-input v-model="form.subject" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鍙備細浜哄憳" prop="participant">
+ <el-select v-model="form.participant" clearable filterable multiple placeholder="璇烽�夋嫨" size="small"
+ style="width: 100%;">
+ <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeYearDia">鍙� 娑�</el-button>
+ <el-button :loading="loading" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ selectUserCondition,
+} from "@/api/business/inspectionTask.js";
+import {
+ getInternalMeetingOne,
+ addInternalMeeting,
+ updateInternalMeeting,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+ name: 'auditMeetingSignDia',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ diaLoading: false,
+ loading: false,
+ form: {
+ meetingDate: '',
+ compere: '',
+ place: '',
+ subject: '',
+ participant: [],
+ },
+ rules: {
+ meetingDate: [{ required: true, message: '璇峰~鍐欎細璁椂闂�', trigger: 'blur' }],
+ compere: [{ required: true, message: '璇峰~鍐欎富鎸佷汉', trigger: 'blur' }],
+ place: [{ required: true, message: '璇峰~鍐欏湴鐐�', trigger: 'blur' }],
+ subject: [{ required: true, message: '璇峰~鍐欎細璁富棰�', trigger: 'blur' }],
+ participant: [{ required: true, message: '璇烽�夋嫨鍙傚姞浜哄憳', trigger: 'change' }],
+ },
+ operationType: '',
+ personList: []
+ };
+ },
+ mounted() {
+
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鎵撳紑寮规
+ openDia(type, row) {
+ this.formDia = true
+ this.operationType = type
+ this.getAuthorizedPerson()
+ if (type !== 'add') {
+ this.searchInfo(row)
+ }
+ },
+ // 鏌ヨ璇︽儏
+ searchInfo(row) {
+ this.diaLoading = true
+ getInternalMeetingOne({ meetingId: row.meetingId }).then(res => {
+ this.diaLoading = false
+ if (res.code === 201) return
+ this.form = res.data
+ this.form.participant = this.form.participant.split(',').map(Number)
+ }).catch(err => {
+ console.log(err)
+ this.diaLoading = false
+ })
+ },
+ // 鎻愪氦寮规鏁版嵁
+ handleEdit() {
+ this.$refs['form'].validate((valid) => {
+ if (valid) {
+ this.loading = true
+ const internalMeeting = this.HaveJson(this.form)
+ internalMeeting.participant = internalMeeting.participant.join(',')
+ if (this.operationType === 'add') {
+ addInternalMeeting(internalMeeting).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeYearDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ } else if (this.operationType === 'edit') {
+ updateInternalMeeting(internalMeeting).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeYearDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ }
+ } else {
+ console.log('error submit!!');
+ return false;
+ }
+ });
+ },
+ closeYearDia() {
+ this.$refs.form.resetFields();
+ this.formDia = false
+ this.$emit('closeYearDia')
+ },
+ getAuthorizedPerson() {
+ selectUserCondition().then(res => {
+ let data = []
+ res.data.forEach(a => {
+ data.push({
+ label: a.name,
+ value: a.id
+ })
+ })
+ this.personList = data
+ })
+ },
+ }
+};
+</script>
+
+<style scoped>
+.table {
+ table-layout: fixed;
+ width: 100%;
+ margin-top: 10px;
+}
+
+.table td {
+ height: 34px;
+ width: 100px;
+ text-align: center;
+ font-size: 14px;
+ word-wrap: break-word;
+ white-space: normal;
+ padding: 4px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReport.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReport.vue
new file mode 100644
index 0000000..1eb6332
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReport.vue
@@ -0,0 +1,312 @@
+<template>
+ <div>
+ <div class="search-background">
+ <span class="search-group">
+ <span style="width: 160px">瀹℃牳鐩殑锛�</span>
+ <el-input v-model="searchForm.purposes" clearable size="small"></el-input>
+ <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+ <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+ </span>
+ <span class="search-group">
+ <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+ </span>
+ </div>
+ <div class="table">
+ <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+ :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
+ </limsTable>
+ </div>
+ <audit-report-dia v-if="auditReportDia" ref="auditReportDia"
+ @closeImplementDia="closeImplementDia"></audit-report-dia>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import AuditReportDia from './auditReportDia.vue';
+import {
+ delInternalReport,
+ pageInternalReport,
+ exportInternalReport,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+ name: 'auditReport',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { AuditReportDia, limsTable },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ searchForm: {
+ purposes: '',
+ },
+ tableColumn: [
+ {
+ label: '瀹℃牳鐩殑',
+ prop: 'purposes',
+ },
+ {
+ label: '瀹℃牳渚濇嵁',
+ prop: 'basis',
+ },
+ {
+ label: '瀹℃牳鏃ユ湡',
+ prop: 'reviewDate',
+ },
+ {
+ label: '瀹℃牳鏂规硶',
+ prop: 'method',
+ },
+ {
+ label: '瀹℃牳鑼冨洿',
+ prop: 'scope',
+ },
+ {
+ label: '瀹℃牳璐d换鑰�',
+ prop: 'responsible',
+ },
+ {
+ label: '瀹℃牳缁勯暱',
+ prop: 'leader',
+ },
+ {
+ label: '瀹℃牳鍛�',
+ prop: 'auditor',
+ },
+ {
+ label: '瀹℃牳缁勫垎宸ユ儏鍐�',
+ prop: 'division',
+ },
+ {
+ 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: '140'
+ },
+ {
+ dataType: 'tag',
+ label: '璐ㄩ噺璐熻矗浜虹姸鎬�',
+ prop: 'qualityStatus',
+ 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: 'qualityRemark',
+ minWidth: '140'
+ },
+ {
+ dataType: 'action',
+ minWidth: '220',
+ fixed: 'right',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDown(row)
+ }
+ },
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('edit', row);
+ },
+ disabled: (row) => {
+ if (row.examineStatus === 1 || row.examineStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ },
+ {
+ name: '瀹℃牳',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('examine', row);
+ },
+ disabled: (row) => {
+ if (row.examineStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ },
+ {
+ name: '鎰忚',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('ratify', row);
+ },
+ disabled: (row) => {
+ if (row.qualityStatus === 1 || row.examineStatus === 0 || row.examineStatus === null) {
+ return true
+ } else {
+ return false
+ }
+ },
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.delPlan(row)
+ },
+ disabled: (row) => {
+ if (row.qualityStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ }
+ ]
+ }
+ ],
+ tableData: [],
+ tableLoading: false,
+ page: {
+ size: 20,
+ current: 1,
+ total: 0,
+ },
+ auditReportDia: false
+ };
+ },
+ mounted() {
+ this.searchList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ鍒楄〃
+ searchList() {
+ const entity = this.searchForm
+ const page = this.page
+ this.tableLoading = true
+ pageInternalReport({ ...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
+ })
+ },
+ // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+ openFormDia(type, row) {
+ this.auditReportDia = true
+ this.$nextTick(() => {
+ this.$refs.auditReportDia.openDia(type, row)
+ })
+ },
+ closeImplementDia() {
+ this.auditReportDia = false
+ this.searchList()
+ },
+ // 閲嶇疆鏌ヨ鏉′欢
+ resetSearchForm() {
+ this.searchForm.purposes = '';
+ this.searchList()
+ },
+ // 鍒犻櫎
+ delPlan(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.tableLoading = true
+ delInternalReport({ reportId: row.reportId }).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: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 瀵煎嚭
+ handleDown(row) {
+ exportInternalReport({ reportId: row.reportId }).then(res => {
+ this.outLoading = false
+ this.$message.success('瀵煎嚭鎴愬姛')
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '鍐呭鎶ュ憡' + '.docx');
+ })
+ },
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.searchList();
+ },
+ }
+};
+</script>
+
+<style scoped>
+.search-background {
+ width: 100%;
+ height: 60px;
+ line-height: 60px;
+ display: flex;
+ justify-content: space-between;
+}
+
+.search-group {
+ display: flex;
+ align-items: center;
+ margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReportDia.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReportDia.vue
new file mode 100644
index 0000000..b2dd1fa
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/auditReportDia.vue
@@ -0,0 +1,333 @@
+<template>
+ <div>
+ <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+ :visible.sync="formDia" title="鍐呴儴瀹℃牳鎶ュ憡" width="80%" @close="closeImplementDia">
+ <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto">
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳鐩殑" prop="purposes">
+ <el-input v-model="form.purposes" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳渚濇嵁" prop="basis">
+ <el-input v-model="form.basis" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳鏃ユ湡" prop="reviewDate">
+ <el-date-picker v-model="form.reviewDate"
+ :disabled="operationType === 'examine' || operationType === 'ratify'" clearable format="yyyy-MM-dd"
+ placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date" value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳鏂规硶" prop="method">
+ <el-input v-model="form.method" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳鑼冨洿" prop="scope">
+ <el-input v-model="form.scope" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳璐d换鑰�" prop="responsible">
+ <el-input v-model="form.responsible" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳缁勯暱" prop="leader">
+ <el-input v-model="form.leader" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳鍛�" prop="auditor">
+ <el-input v-model="form.auditor" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳缁勫垎宸ユ儏鍐�" prop="division">
+ <el-input v-model="form.division" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳姒傚喌" prop="overview">
+ <el-input v-model="form.overview" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ :rows="3" clearable size="small" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鍐呭缁勫涓績绠$悊浣撶郴鐨勭粨璁烘�ц瘎浠�" prop="conclusion">
+ <el-input v-model="form.conclusion" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ :rows="3" clearable size="small" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鏀硅繘鎰忚" prop="suggest">
+ <el-input v-model="form.suggest" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ :rows="3" clearable size="small" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="棰勮鍙楀鏍搁儴闂ㄥ畬鎴愮籂姝f帾鏂芥墍闇�鏃堕棿" prop="actionDate">
+ <el-input v-model="form.actionDate" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ :rows="3" clearable size="small" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="涓嶇鍚堟儏鍐垫暣鏀规�讳綋璺熻繘纭浜�" prop="followUser">
+ <el-input v-model="form.followUser" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ :rows="3" clearable size="small" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="涓嶇鍚堟儏鍐垫暣鏀规�讳綋璺熻繘纭璁板綍" prop="followRecord">
+ <el-input v-model="form.followRecord"
+ :disabled="operationType === 'examine' || operationType === 'ratify'" :rows="3" clearable size="small"
+ type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鏈姤鍛婂彂鏀捐寖鍥�" prop="reportScope">
+ <el-input v-model="form.reportScope" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ :rows="3" clearable size="small" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col v-if="operationType === 'ratify'" :span="24">
+ <el-form-item label="璐ㄩ噺璐熻矗浜烘剰瑙�" prop="qualityRemark">
+ <el-input v-model="form.qualityRemark" :rows="3" clearable size="small" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button v-if="operationType === 'examine'" :loading="loading" @click="examine(0)">涓嶉�氳繃</el-button>
+ <el-button v-if="operationType === 'examine'" :loading="loading" type="primary" @click="examine(1)">閫�
+ 杩�</el-button>
+ <el-button v-if="operationType === 'ratify'" :loading="loading" @click="handleApproval(0)">涓嶆壒鍑�</el-button>
+ <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="handleApproval(1)">鎵�
+ 鍑�</el-button>
+ <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" @click="closeImplementDia">鍙�
+ 娑�</el-button>
+ <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" :loading="loading" type="primary"
+ @click="handleEdit">鎻� 浜�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="examineDialog" title="瀹℃牳" width="30%" @close="examineDialog = false">
+ <span>
+ 瀹℃牳澶囨敞锛�
+ <el-input v-model="examineRemark" type="textarea"></el-input>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button :loading="examineLoading" @click="examineDialog = false">鍙� 娑�</el-button>
+ <el-button :loading="examineLoading" type="primary" @click="handleExamine(0)">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="approvalDialog" title="鎵瑰噯" width="30%" @close="approvalDialog = false">
+ <span>
+ 鎵瑰噯澶囨敞锛�
+ <el-input v-model="qualityRemark" type="textarea"></el-input>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button :loading="approvalLoading" @click="approvalDialog = false">鍙� 娑�</el-button>
+ <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ getInternalReportOne,
+ addInternalReport,
+ updateInternalReport,
+ examineInternalReport,
+ qualityInternalReport,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+ name: 'auditReportDia',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ diaLoading: false,
+ loading: false,
+ form: {
+ purposes: '',
+ basis: '',
+ reviewDate: '',
+ method: '',
+ scope: '',
+ responsible: '',
+ leader: '',
+ auditor: '',
+ division: '',
+ overview: '',
+ conclusion: '',
+ suggest: '',
+ actionDate: '',
+ followUser: '',
+ followRecord: '',
+ reportScope: '',
+ qualityRemark: '',
+ },
+ rules: {
+ purposes: [{ required: true, message: '璇峰~鍐欏鏍哥洰鐨�', trigger: 'blur' }],
+ basis: [{ required: true, message: '璇峰~鍐欏鏍镐緷鎹�', trigger: 'blur' }],
+ reviewDate: [{ required: true, message: '璇峰~鍐欏鏍告棩鏈�', trigger: 'change' }],
+ method: [{ required: true, message: '璇峰~鍐欏鏍告柟娉�', trigger: 'blur' }],
+ scope: [{ required: true, message: '璇峰~鍐欏鏍歌寖鍥�', trigger: 'blur' }],
+ responsible: [{ required: true, message: '璇峰~鍐欏鏍歌矗浠昏��', trigger: 'blur' }],
+ leader: [{ required: true, message: '璇峰~鍐欏鏍哥粍闀�', trigger: 'blur' }],
+ auditor: [{ required: true, message: '璇峰~鍐欏鏍稿憳', trigger: 'blur' }],
+ division: [{ required: true, message: '璇峰~鍐欏鏍哥粍鍒嗗伐鎯呭喌', trigger: 'blur' }],
+ overview: [{ required: true, message: '璇峰~鍐欏鏍告鍐�', trigger: 'blur' }],
+ conclusion: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+ suggest: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+ actionDate: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+ followUser: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+ followRecord: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+ reportScope: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+ qualityRemark: [{ required: true, message: '璇峰~鍐�', trigger: 'blur' }],
+ },
+ operationType: '',
+ approvalDialog: false,
+ approvalLoading: false,
+ examineDialog: false,
+ examineLoading: false,
+ qualityRemark: '',
+ examineRemark: '',
+ };
+ },
+ mounted() {
+
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鎵撳紑寮规
+ openDia(type, row) {
+ this.formDia = true
+ this.operationType = type
+ if (type !== 'add') {
+ this.searchInfo(row)
+ }
+ },
+ // 鏌ヨ璇︽儏
+ searchInfo(row) {
+ this.diaLoading = true
+ getInternalReportOne({ reportId: row.reportId }).then(res => {
+ this.diaLoading = false
+ if (res.code === 201) return
+ this.form = res.data
+ }).catch(err => {
+ console.log(err)
+ this.diaLoading = false
+ })
+ },
+ // 鎻愪氦寮规鏁版嵁
+ handleEdit() {
+ this.$refs['form'].validate((valid) => {
+ if (valid) {
+ this.loading = true
+ const internalReport = this.HaveJson(this.form)
+ if (this.operationType === 'add') {
+ addInternalReport(internalReport).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeImplementDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ } else if (this.operationType === 'edit') {
+ updateInternalReport(internalReport).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeImplementDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ }
+ } else {
+ console.log('error submit!!');
+ return false;
+ }
+ });
+ },
+ // 瀹℃牳娴佺▼
+ examine(examineStatus) {
+ if (examineStatus === 0) {
+ this.examineDialog = true
+ } else {
+ this.handleExamine(examineStatus)
+ }
+ },
+ handleExamine(examineStatus) {
+ this.examineLoading = true
+ const internalReport = this.HaveJson(this.form)
+ internalReport.examineStatus = examineStatus
+ examineInternalReport(internalReport).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鎻愪氦鎴愬姛锛�');
+ this.approvalDialog = false
+ this.closeImplementDia(this.departId);
+ }
+ this.examineLoading = false
+ }).catch(() => {
+ this.examineLoading = false
+ })
+ },
+ // 鎻愪氦瀹℃牳淇℃伅
+ handleApproval(qualityStatus) {
+ this.approvalLoading = true
+ const internalReport = this.HaveJson(this.form)
+ internalReport.qualityStatus = qualityStatus
+ qualityInternalReport(internalReport).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鎻愪氦鎴愬姛锛�');
+ this.approvalDialog = false
+ this.closeImplementDia(this.departId);
+ }
+ this.approvalLoading = false
+ }).catch(() => {
+ this.approvalLoading = false
+ })
+ },
+ closeImplementDia() {
+ this.$refs.form.resetFields();
+ this.formDia = false
+ this.$emit('closeImplementDia')
+ },
+ }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+ margin: 6vh auto 50px !important;
+}
+
+>>>.el-dialog__body {
+ max-height: 42em;
+ overflow-y: auto;
+}
+
+>>>.is-required {
+ margin-bottom: 6px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveAction.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveAction.vue
new file mode 100644
index 0000000..86acfd3
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveAction.vue
@@ -0,0 +1,182 @@
+<template>
+ <div>
+ <div class="search-background">
+ <span class="search-group">
+ <span style="width: 200px">涓嶅悎鏍兼弿杩帮細</span>
+ <el-input v-model="searchForm.raiseResult" clearable size="small"></el-input>
+ <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+ <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+ </span>
+ <span class="search-group">
+ <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+ </span>
+ </div>
+ <div class="table">
+ <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+ :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
+ </limsTable>
+ </div>
+ <corrective-action-d-ia v-if="correctiveActionDIa" ref="correctiveActionDIa"
+ @closeRectifyDia="closeRectifyDia"></corrective-action-d-ia>
+ <view-test-record v-if="viewTestRecordDialog" ref="viewTestRecordDialog"></view-test-record>
+ </div>
+</template>
+
+<script>
+import TableCard from '@/components/TableCard/index.vue';
+import limsTable from "@/components/Table/lims-table.vue";
+import CorrectiveActionDIa from './correctiveActionDIa.vue';
+import ViewTestRecord from './ViewTestRecord.vue';
+import {
+ pageInternalCorrect,
+ exportInternalCorrect,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+
+export default {
+ name: 'correctiveAction',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { CorrectiveActionDIa, limsTable, TableCard, ViewTestRecord },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ searchForm: {
+ raiseResult: '',
+ },
+ tableColumn: [
+ {
+ label: '涓嶅悎鏍兼垨鍋忕浜嬪疄鐨勬弿杩�',
+ prop: 'raiseResult',
+ minWidth: '100'
+ },
+ {
+ label: '鍘熷洜鍒嗘瀽',
+ prop: 'causeResult',
+ minWidth: '100'
+ },
+ {
+ label: '绾犳鎺柦',
+ prop: 'correctResult',
+ minWidth: '100'
+ },
+ {
+ label: '瀹炴柦楠岃瘉缁撴灉',
+ prop: 'validationResult',
+ minWidth: '100'
+ },
+ {
+ dataType: 'action',
+ minWidth: '220',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDown(row)
+ }
+ },
+ {
+ name: '绾犳',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('rectify', row);
+ },
+ },
+ {
+ name: '鏌ョ湅闄勪欢',
+ type: 'text',
+ clickFun: (row) => {
+ this.viewFiles(row);
+ },
+ },
+ ]
+ }
+ ],
+ tableData: [],
+ tableLoading: false,
+ page: {
+ size: 20,
+ current: 1,
+ total: 0,
+ },
+ correctiveActionDIa: false,
+ viewTestRecordDialog: false,
+ };
+ },
+ mounted() {
+ this.searchList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ鍒楄〃
+ searchList() {
+ const entity = {
+ raiseResult: this.searchForm.raiseResult,
+ }
+ const page = this.page
+ this.tableLoading = true
+ pageInternalCorrect({ ...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.raiseResult = '';
+ this.searchList()
+ },
+ // 鏌ョ湅闄勪欢
+ viewFiles(row) {
+ this.viewTestRecordDialog = true
+ this.$nextTick(() => {
+ this.$refs.viewTestRecordDialog.openDia(row)
+ })
+ },
+ openFormDia(type, row) {
+ this.correctiveActionDIa = true
+ this.$nextTick(() => {
+ this.$refs.correctiveActionDIa.openDia(type, row)
+ })
+ },
+ // 瀵煎嚭
+ handleDown(row) {
+ exportInternalCorrect({ correctId: row.correctId }).then(res => {
+ this.outLoading = false
+ this.$message.success('瀵煎嚭鎴愬姛')
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '鍐呭绾犳鎺柦' + '.docx');
+ })
+ },
+ closeRectifyDia() {
+ this.correctiveActionDIa = false
+ this.searchList()
+ },
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.searchList();
+ },
+ }
+};
+</script>
+
+<style scoped>
+.search-background {
+ width: 100%;
+ height: 60px;
+ line-height: 60px;
+ display: flex;
+ justify-content: space-between;
+}
+
+.search-group {
+ display: flex;
+ align-items: center;
+ margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveActionDIa.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveActionDIa.vue
new file mode 100644
index 0000000..267fa52
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveActionDIa.vue
@@ -0,0 +1,409 @@
+<template>
+ <div>
+ <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="formDia" title="绾犳鎺柦澶勭悊鍗�"
+ width="60%" @close="closeRectifyDia">
+ <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-step title="瀹炴柦楠岃瘉缁撴灉" @click.native="setStep(3)"></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.raiseResult" :rows="4"
+ placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+ </el-input>
+ <span v-if="showStep === 0 && currentStep !== 0" class="td-info1"> {{ form.raiseResult }}</span>
+ </td>
+ </tr>
+ <tr v-if="showStep === 0">
+ <td v-if="currentStep === 0" class="td-title">
+ <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p>
+ </td>
+ <td v-if="currentStep === 0" class="td-info" colspan="3">
+ <el-select v-model="form.causeUserId" 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 === 0 && currentStep !== 0">
+ <td class="td-title">
+ <p>鎻愬嚭浜猴細</p>
+ </td>
+ <td class="td-info">
+ {{ form.raiseUserName }}
+ </td>
+ <td class="td-title">
+ <p>鎻愬嚭閮ㄩ棬锛�</p>
+ </td>
+ <td class="td-info">
+ {{ form.raiseDepartment }}
+ </td>
+ </tr>
+ <tr v-if="showStep === 0 && currentStep !== 0">
+ <td class="td-title">
+ <p>鏃ユ湡锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ {{ form.raiseTime }}
+ </td>
+ </tr>
+ <tr v-if="showStep === 1">
+ <td class="td-title">
+ <p><span class="required-span">* </span>鍘熷洜鍒嗘瀽锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-input v-if="showStep === 1 && currentStep === 1" v-model="form.causeResult" :rows="5"
+ placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+ </el-input>
+ <span v-if="showStep === 1 && currentStep !== 1" class="td-info1"> {{ form.causeResult }}</span>
+ </td>
+ </tr>
+ <tr v-if="showStep === 1 && currentStep !== 1">
+ <td class="td-title">
+ <p>鍘熷洜鍒嗘瀽浜猴細</p>
+ </td>
+ <td class="td-info">
+ {{ form.causeUserName }}
+ </td>
+ <td class="td-title">
+ <p>璐d换閮ㄩ棬锛�</p>
+ </td>
+ <td class="td-info">
+ {{ form.causeDepartment }}
+ </td>
+ </tr>
+ <tr v-if="showStep === 1 && currentStep !== 1">
+ <td class="td-title">
+ <p>鍘熷洜鍒嗘瀽鏃ユ湡锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ {{ form.causeTime }}
+ </td>
+ </tr>
+ <tr v-if="showStep === 1">
+ <td v-if="currentStep === 1" class="td-title">
+ <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p>
+ </td>
+ <td v-if="currentStep === 1" class="td-info" colspan="3">
+ <el-select v-model="form.correctUserId" 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><span class="required-span">* </span>绾犳鎺柦锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.correctResult" :rows="5"
+ placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+ </el-input>
+ <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.correctResult }}</span>
+ </td>
+ </tr>
+ <tr v-if="showStep === 2">
+ <td class="td-title">
+ <p>鎻愬嚭瑕佹眰閮ㄩ棬纭锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-input v-if="showStep === 2 && currentStep === 2" v-model="form.raiseDepartmentAffirm" :rows="5"
+ placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+ </el-input>
+ <span v-if="showStep === 2 && currentStep !== 2" class="td-info1"> {{ form.raiseDepartmentAffirm }}</span>
+ </td>
+ </tr>
+ <tr v-if="showStep === 2 && currentStep !== 2">
+ <td class="td-title">
+ <p>绾犳浜猴細</p>
+ </td>
+ <td class="td-info">
+ {{ form.correctUserName }}
+ </td>
+ <td class="td-title">
+ <p>璐d换閮ㄩ棬锛�</p>
+ </td>
+ <td class="td-info">
+ {{ form.correctDepartment }}
+ </td>
+ </tr>
+ <tr v-if="showStep === 2 && currentStep !== 2">
+ <td class="td-title">
+ <p>绾犳鏃ユ湡锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ {{ form.correctTime }}
+ </td>
+ </tr>
+ <tr v-if="showStep === 2">
+ <td v-if="currentStep === 2" class="td-title">
+ <p><span class="required-span">* </span>璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉锛�</p>
+ </td>
+ <td v-if="currentStep === 2" class="td-info" colspan="3">
+ <el-select v-model="form.validationUserId" 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 === 3">
+ <td class="td-title">
+ <p><span class="required-span">* </span>瀹炴柦楠岃瘉缁撴灉锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ <el-input v-if="showStep === 3 && currentStep === 3" v-model="form.validationResult" :rows="5"
+ placeholder="璇疯緭鍏ュ唴瀹�" size="small" type="textarea">
+ </el-input>
+ <span v-if="showStep === 3 && currentStep !== 3" class="td-info1"> {{ form.validationResult }}</span>
+ </td>
+ </tr>
+ <tr v-if="showStep === 3 && currentStep !== 3">
+ <td class="td-title">
+ <p>楠岃瘉浜猴細</p>
+ </td>
+ <td class="td-info">
+ {{ form.validationUserName }}
+ </td>
+ <td class="td-title">
+ <p>璐d换閮ㄩ棬锛�</p>
+ </td>
+ <td class="td-info">
+ {{ form.validationDepartment }}
+ </td>
+ </tr>
+ <tr v-if="showStep === 3 && currentStep !== 3">
+ <td class="td-title">
+ <p>楠岃瘉鏃ユ湡锛�</p>
+ </td>
+ <td class="td-info" colspan="3">
+ {{ form.validationTime }}
+ </td>
+ </tr>
+ </table>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeRectifyDia">鍙� 娑�</el-button>
+ <el-button v-if="currentStep !== 4" :loading="editLoad" type="primary" @click="handleEdit">鎻� 浜�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ getInternalCorrect,
+ addInternalCorrect,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+import {
+ selectUserCondition,
+} from "@/api/business/inspectionTask.js";
+export default {
+ name: 'correctiveActionDIa',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ currentStep: 0,
+ showStep: 0,
+ form: {
+ superviseDetailsId: '',
+ raiseResult: '',
+ vdeRaiseResult: '',
+ causeUserId: '',
+ raiseUserName: '',
+ raiseDepartment: '',
+ raiseTime: '',
+ causeResult: '',
+ causeUserName: '',
+ causeDepartment: '',
+ causeTime: '',
+ correctUserId: '',
+ correctResult: '',
+ raiseDepartmentAffirm: '',
+ correctUserName: '',
+ correctDepartment: '',
+ correctTime: '',
+ validationUserId: '',
+ validationResult: '',
+ validationUserName: '',
+ validationDepartment: '',
+ validationTime: '',
+ },
+ editLoad: false,
+ personList: [],
+ supervisedUserList: [],
+ };
+ },
+ mounted() {
+
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ openDia(type, row) {
+ this.formDia = true
+ if (type !== 'add') {
+ this.searchInfo(row)
+ this.form.superviseDetailsId = row.superviseDetailsId
+ }
+ this.getAuthorizedPerson() // 鑾峰彇浜哄憳鍒楄〃
+ this.getSupervisedUserList() // 鑾峰彇褰撳墠閮ㄩ棬浜哄憳
+ },
+ // 鏌ヨ鐩戞帶璁″垝璇︽儏瀹炴柦淇℃伅
+ searchInfo(row) {
+ this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId
+ getInternalCorrect({ correctId: row.correctId }).then(res => {
+ if (res.code === 201) return
+ if (res.data.superviseDetailsCorrectId === null) {
+ this.showStep = 0
+ this.currentStep = 0
+ } else {
+ this.form = res.data
+ if (res.data.isFinish === 0) {
+ if (res.data.causeUserId) {
+ this.showStep = 1
+ this.currentStep = 1
+ }
+ if (res.data.correctUserId) {
+ this.showStep = 2
+ this.currentStep = 2
+ }
+ if (res.data.validationUserId) {
+ this.showStep = 3
+ this.currentStep = 3
+ }
+ } else {
+ this.currentStep = 4
+ this.showStep = 3
+ }
+ }
+ }).catch(err => {
+ console.log('err---', err);
+ })
+ },
+ // 鎻愪氦
+ handleEdit() {
+ if (this.currentStep === 0) {
+ if (!this.form.raiseResult) {
+ this.$message.warning('璇峰~鍐欎笉鍚堟牸鎻忚堪')
+ return
+ }
+ if (!this.form.causeUserId) {
+ this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉')
+ return
+ }
+ } else if (this.currentStep === 1) {
+ if (!this.form.causeResult) {
+ this.$message.warning('璇峰~鍐欏師鍥犲垎鏋�')
+ return
+ }
+ if (!this.form.correctUserId) {
+ this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉')
+ return
+ }
+ } else if (this.currentStep === 2) {
+ if (!this.form.correctResult) {
+ this.$message.warning('璇峰~鍐欑籂姝f帾鏂�')
+ return
+ }
+ if (!this.form.validationUserId) {
+ this.$message.warning('璇烽�夋嫨涓嬩竴姝ヨ礋璐d汉')
+ return
+ }
+ } else if (this.currentStep === 3) {
+ if (!this.form.validationResult) {
+ this.$message.warning('璇峰~鍐欏疄鏂介獙璇佺粨鏋�')
+ return
+ }
+ }
+ this.editLoad = true
+ this.form.supervisedTime = ''
+ this.form.flowType = this.currentStep
+ addInternalCorrect(this.form).then(res => {
+ this.editLoad = false
+ if (res.code === 201) return
+ this.$message.success('鎻愪氦鎴愬姛')
+ this.closeRectifyDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.editLoad = false
+ })
+ },
+ // 鍏抽棴寮规
+ closeRectifyDia() {
+ this.formDia = false
+ this.$emit('closeRectifyDia')
+ },
+ setStep(step) {
+ this.showStep = step
+ },
+ getAuthorizedPerson() {
+ selectUserCondition().then(res => {
+ let data = []
+ res.data.forEach(a => {
+ data.push({
+ label: a.name,
+ value: a.id
+ })
+ })
+ this.personList = data
+ })
+ },
+ getSupervisedUserList() {
+ selectUserCondition({ type: 2 }).then(res => {
+ let data = []
+ res.data.forEach(a => {
+ data.push({
+ label: a.name,
+ value: a.id
+ })
+ })
+ this.supervisedUserList = data
+ })
+ },
+ }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+ margin: 10vh auto 50px !important;
+}
+
+.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/systemManagement/internalAuditManagement/components/implementPlanDia.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/implementPlanDia.vue
new file mode 100644
index 0000000..5a94ebe
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/implementPlanDia.vue
@@ -0,0 +1,307 @@
+<template>
+ <div>
+ <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+ :visible.sync="formDia" title="鍐呴儴瀹℃牳瀹炴柦璁″垝" width="80%" @close="closeImplementDia">
+ <el-form ref="form" :model="form" :rules="rules" label-width="auto">
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳鐩殑" prop="purposes">
+ <el-input v-model="form.purposes" :disabled="operationType === 'ratify'" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳鎬ц川" prop="nature">
+ <el-input v-model="form.nature" :disabled="operationType === 'ratify'" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳鑼冨洿" prop="scope">
+ <el-input v-model="form.scope" :disabled="operationType === 'ratify'" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="瀹℃牳渚濇嵁" prop="basis">
+ <el-input v-model="form.basis" :disabled="operationType === 'ratify'" clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳缁勯暱" prop="teamLeader">
+ <el-input v-model="form.teamLeader" :disabled="operationType === 'ratify'" clearable
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍐呭鍛�" prop="internalAuditor">
+ <el-input v-model="form.internalAuditor" :disabled="operationType === 'ratify'" clearable
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳鏃ユ湡" prop="reviewDate">
+ <el-date-picker v-model="form.reviewDate" :disabled="operationType === 'ratify'" clearable
+ format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳鏂规硶" prop="auditMethod">
+ <el-input v-model="form.auditMethod" :disabled="operationType === 'ratify'" clearable
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="棣栨浼氳鏃堕棿" prop="firstMeetingTime">
+ <el-date-picker v-model="form.firstMeetingTime" :disabled="operationType === 'ratify'" clearable
+ format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏈浼氳鏃堕棿" prop="lastMeetingTime">
+ <el-date-picker v-model="form.lastMeetingTime" :disabled="operationType === 'ratify'" clearable
+ format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳鎶ュ憡鎻愪氦鏃ユ湡" prop="submitTime">
+ <el-date-picker v-model="form.submitTime" :disabled="operationType === 'ratify'" clearable
+ format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 100%" type="date"
+ value-format="yyyy-MM-dd">
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="瀹℃牳鎶ュ憡鍙戞斁鑼冨洿" prop="submitScope">
+ <el-input v-model="form.submitScope" :disabled="operationType === 'ratify'" clearable
+ size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-form>
+ <div v-if="operationType !== 'ratify'" style="text-align: right;margin-bottom: 10px">
+ <el-button size="small" type="primary" @click="addRow">娣诲姞</el-button>
+ <el-button size="small" type="danger" @click="clearTable">娓呯┖</el-button>
+ </div>
+ <el-table :data="implementDetailList" border height="300" style="width: 100%">
+ <el-table-column align="center" label="搴忓彿" type="index" width="60" />
+ <el-table-column header-align="center" label="鏃堕棿" prop="implement">
+ <template slot-scope="{row}">
+ <el-input v-model="row.implement" :disabled="operationType === 'ratify'" size="small" />
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="鍙楀鏍搁儴闂�" prop="department">
+ <template slot-scope="{row}">
+ <el-input v-model="row.department" :disabled="operationType === 'ratify'" size="small" />
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="璐d换浜�" prop="responsible">
+ <template slot-scope="{row}">
+ <el-input v-model="row.responsible" :disabled="operationType === 'ratify'" size="small" />
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="瀹℃牳鍛�" prop="auditor" width="180">
+ <template slot-scope="{row}">
+ <el-input v-model="row.auditor" :disabled="operationType === 'ratify'" size="small" />
+ </template>
+ </el-table-column>
+ <el-table-column header-align="center" label="瀹℃牳鍐呭" prop="reviewContent" width="180">
+ <template slot-scope="{row}">
+ <el-input v-model="row.reviewContent" :disabled="operationType === 'ratify'" size="small" />
+ </template>
+ </el-table-column>
+ </el-table>
+ <span slot="footer" class="dialog-footer">
+ <el-button v-if="operationType === 'ratify'" :loading="loading" @click="ratify(0)">涓嶆壒鍑�</el-button>
+ <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="ratify(1)">鎵�
+ 鍑�</el-button>
+ <el-button v-if="operationType !== 'ratify'" @click="closeImplementDia">鍙� 娑�</el-button>
+ <el-button v-if="operationType !== 'ratify'" :loading="loading" type="primary" @click="handleEdit">鎻�
+ 浜�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="approvalDialog" title="鎵瑰噯" width="30%" @close="approvalDialog = false">
+ <span>
+ 鎵瑰噯澶囨敞锛�
+ <el-input v-model="ratifyRemark" type="textarea"></el-input>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button :loading="approvalLoading" @click="approvalDialog = false">鍙� 娑�</el-button>
+ <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ getInternalImplementOne,
+ addInternalImplement,
+ updateInternalImplement,
+ ratifyInternalImplement,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+ name: 'implementPlanDia',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ diaLoading: false,
+ loading: false,
+ form: {
+ purposes: '',
+ nature: '',
+ scope: '',
+ basis: '',
+ teamLeader: '',
+ internalAuditor: '',
+ reviewDate: '',
+ auditMethod: '',
+ firstMeetingTime: '',
+ lastMeetingTime: '',
+ submitTime: '',
+ submitScope: '',
+ },
+ rules: {
+ purposes: [{ required: true, message: '璇峰~鍐欏鏍哥洰鐨�', trigger: 'blur' }],
+ nature: [{ required: true, message: '璇峰~鍐欏鏍告�ц川', trigger: 'blur' }],
+ scope: [{ required: true, message: '璇峰~鍐欏鏍歌寖鍥�', trigger: 'blur' }],
+ basis: [{ required: true, message: '璇峰~鍐欏鏍镐緷鎹�', trigger: 'blur' }],
+ teamLeader: [{ required: true, message: '璇峰~鍐欏鏍哥粍闀�', trigger: 'blur' }],
+ internalAuditor: [{ required: true, message: '璇峰~鍐欏唴瀹″憳', trigger: 'blur' }],
+ reviewDate: [{ required: true, message: '璇峰~鍐欏鏍告椂闂�', trigger: 'blur' }],
+ auditMethod: [{ required: true, message: '璇峰~鍐欏鏍告柟娉�', trigger: 'blur' }],
+ firstMeetingTime: [{ required: true, message: '璇峰~鍐欓娆′細璁椂闂�', trigger: 'blur' }],
+ lastMeetingTime: [{ required: true, message: '璇峰~鍐欐湯娆′細璁椂闂�', trigger: 'blur' }],
+ submitTime: [{ required: true, message: '璇峰~鍐欏鏍告姤鍛婃彁浜ゆ棩鏈�', trigger: 'blur' }],
+ submitScope: [{ required: true, message: '璇峰~鍐欏鏍告姤鍛婂彂鏀捐寖鍥�', trigger: 'blur' }],
+ },
+ implementDetailList: [],
+ operationType: '',
+ approvalDialog: false,
+ approvalLoading: false,
+ ratifyRemark: '',
+ };
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鎵撳紑寮规
+ openDia(type, row) {
+ this.formDia = true
+ this.operationType = type
+ if (type !== 'add') {
+ this.searchInfo(row)
+ }
+ },
+ // 鏌ヨ璇︽儏
+ searchInfo(row) {
+ this.diaLoading = true
+ getInternalImplementOne({ implementId: row.implementId }).then(res => {
+ this.diaLoading = false
+ if (res.code === 201) return
+ this.form = res.data
+ this.implementDetailList = this.form.implementDetailList
+ }).catch(err => {
+ console.log(err)
+ this.diaLoading = false
+ })
+ },
+ // 鎻愪氦寮规鏁版嵁
+ handleEdit() {
+ this.$refs['form'].validate((valid) => {
+ if (valid) {
+ if (this.implementDetailList.length === 0) {
+ this.$message.warning('璇锋坊鍔犺〃鏍兼暟鎹�')
+ return
+ }
+ this.loading = true
+ const internalImplementDto = this.HaveJson(this.form)
+ internalImplementDto.implementDetailList = this.HaveJson(this.implementDetailList)
+ if (this.operationType === 'add') {
+ addInternalImplement(internalImplementDto).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeImplementDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ } else if (this.operationType === 'edit') {
+ updateInternalImplement(internalImplementDto).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeImplementDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ }
+ } else {
+ console.log('error submit!!');
+ return false;
+ }
+ });
+ },
+ ratify(ratifyStatus) {
+ // 涓嶆壒鍑嗛渶瑕佸~鍐欐壒鍑嗗唴瀹�
+ if (ratifyStatus === 0) {
+ this.approvalDialog = true
+ } else {
+ this.handleApproval(ratifyStatus)
+ }
+ },
+ // 鎻愪氦鎵瑰噯淇℃伅
+ handleApproval(ratifyStatus) {
+ this.approvalLoading = true
+ const internalImplementDto = this.HaveJson(this.form)
+ internalImplementDto.ratifyStatus = ratifyStatus
+ internalImplementDto.ratifyRemark = ratifyStatus === 0 ? this.ratifyRemark : ''
+ ratifyInternalImplement(internalImplementDto).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鎻愪氦鎴愬姛锛�');
+ this.approvalDialog = false
+ this.closeImplementDia(this.departId);
+ }
+ this.approvalLoading = false
+ }).catch(() => {
+ this.approvalLoading = false
+ })
+ },
+ // 澧炲姞琛ㄦ牸琛屾暟鎹�
+ addRow() {
+ this.implementDetailList.push({
+ implement: '',
+ department: '',
+ responsible: '',
+ auditor: '',
+ reviewContent: '',
+ })
+ },
+ // 娓呯┖琛ㄦ牸鏁版嵁
+ clearTable() {
+ this.implementDetailList = []
+ },
+ closeImplementDia() {
+ this.$refs.form.resetFields();
+ this.formDia = false
+ this.$emit('closeImplementDia')
+ },
+ }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+ margin: 10vh auto 50px !important;
+}
+
+>>>.el-dialog__body {
+ max-height: 38em;
+ overflow-y: auto;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/implementationPlan.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/implementationPlan.vue
new file mode 100644
index 0000000..92f721f
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/implementationPlan.vue
@@ -0,0 +1,292 @@
+<template>
+ <div>
+ <div class="search-background">
+ <span class="search-group">
+ <span style="width: 160px">瀹℃牳鐩殑锛�</span>
+ <el-input v-model="searchForm.purposes" clearable size="small"></el-input>
+ <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+ <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+ </span>
+ <span class="search-group">
+ <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+ </span>
+ </div>
+ <div class="table">
+ <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+ :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" @pagination="pagination" :page="page">
+ </limsTable>
+ </div>
+ <implement-plan-dia v-if="implementPlanDia" ref="implementPlanDia"
+ @closeImplementDia="closeImplementDia"></implement-plan-dia>
+ </div>
+</template>
+
+<script>
+import {
+ pageInternalImplement,
+ delInternalImplement,
+ exportInternalImplement,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+import limsTable from "@/components/Table/lims-table.vue";
+import ImplementPlanDia from './implementPlanDia.vue';
+
+export default {
+ name: 'implementationPlan',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { ImplementPlanDia, limsTable },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ searchForm: {
+ purposes: '',
+ },
+ tableColumn: [
+ {
+ label: '瀹℃牳鐩殑',
+ prop: 'purposes',
+ minWidth: '100'
+ },
+ {
+ label: '瀹℃牳鎬ц川',
+ prop: 'nature',
+ minWidth: '100'
+ },
+ {
+ label: '瀹℃牳鑼冨洿',
+ prop: 'scope',
+ minWidth: '100'
+ },
+ {
+ label: '瀹℃牳渚濇嵁',
+ prop: 'basis',
+ minWidth: '100'
+ },
+ {
+ label: '瀹℃牳缁勯暱',
+ prop: 'teamLeader',
+ minWidth: '100'
+ },
+ {
+ label: '鍐呭鍛�',
+ prop: 'internalAuditor',
+ minWidth: '100',
+ },
+ {
+ label: '瀹℃牳鏃ユ湡',
+ prop: 'reviewDate',
+ minWidth: '100',
+ },
+ {
+ label: '瀹℃牳鏂规硶',
+ prop: 'auditMethod',
+ minWidth: '100',
+ },
+ {
+ label: '棣栨浼氳鏃堕棿',
+ prop: 'firstMeetingTime',
+ minWidth: '100',
+ },
+ {
+ label: '鏈浼氳鏃堕棿',
+ prop: 'lastMeetingTime',
+ minWidth: '100',
+ },
+ {
+ label: '瀹℃牳鎶ュ憡鎻愪氦鏃ユ湡',
+ prop: 'submitTime',
+ minWidth: '100',
+ },
+ {
+ label: '瀹℃牳鎶ュ憡鍙戞斁鑼冨洿',
+ prop: 'submitScope',
+ minWidth: '100',
+ }, {
+ 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'
+ },
+ {
+ dataType: 'action',
+ minWidth: '220',
+ fixed: 'right',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDown(row)
+ }
+ },
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('edit', row);
+ },
+ disabled: (row) => {
+ if (row.ratifyStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ },
+ {
+ name: '鎵瑰噯',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('ratify', row);
+ },
+ disabled: (row) => {
+ if (row.ratifyStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.delPlan(row)
+ },
+ disabled: (row) => {
+ if (row.ratifyStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ }
+ ]
+ }
+ ],
+ tableData: [],
+ tableLoading: false,
+ page: {
+ size: 20,
+ current: 1,
+ total: 0,
+ },
+ implementPlanDia: false,
+ };
+ },
+ mounted() {
+ this.searchList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ鍒楄〃
+ searchList() {
+ const entity = this.searchForm
+ const page = this.page
+ this.tableLoading = true
+ pageInternalImplement({ ...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
+ })
+ },
+ // 鏂板锛岀紪杈戯紝鎵瑰噯寮规
+ openFormDia(type, row) {
+ this.implementPlanDia = true
+ this.$nextTick(() => {
+ this.$refs.implementPlanDia.openDia(type, row)
+ })
+ },
+ closeImplementDia() {
+ this.implementPlanDia = false
+ this.searchList()
+ },
+ // 閲嶇疆鏌ヨ鏉′欢
+ resetSearchForm() {
+ this.searchForm.purposes = '';
+ this.searchList()
+ },
+ // 鍒犻櫎
+ delPlan(row) {
+ this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ暟鎹�, 鏄惁缁х画?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.tableLoading = true
+ delInternalImplement({ implementId: row.implementId }).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: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 瀵煎嚭
+ handleDown(row) {
+ exportInternalImplement({ implementId: row.implementId }).then(res => {
+ this.outLoading = false
+ this.$message.success('瀵煎嚭鎴愬姛')
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '鍐呭瀹炴柦璁″垝' + '.docx');
+ })
+ },
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.searchList();
+ },
+ }
+};
+</script>
+
+<style scoped>
+.search-background {
+ width: 100%;
+ height: 60px;
+ line-height: 60px;
+ display: flex;
+ justify-content: space-between;
+}
+
+.search-group {
+ display: flex;
+ align-items: center;
+ margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlan.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlan.vue
new file mode 100644
index 0000000..77b898f
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlan.vue
@@ -0,0 +1,314 @@
+<template>
+ <div>
+ <div class="search-background">
+ <span class="search-group">
+ <span style="width: 160px">鍐呭鐩殑锛�</span>
+ <el-input v-model="searchForm.purpose" clearable size="small"></el-input>
+ <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">閲� 缃�</el-button>
+ <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+ </span>
+ <span class="search-group">
+ <el-button size="medium" type="primary" @click="openFormDia('add')">鏂� 澧�</el-button>
+ </span>
+ </div>
+ <div class="table">
+ <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
+ :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" @pagination="pagination" :page="page">
+ </limsTable>
+ </div>
+ <year-plan-dia v-if="yearPlanDia" ref="yearPlanDia" @closeYearDia="closeYearDia"></year-plan-dia>
+ </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import YearPlanDia from './yearPlanDia.vue';
+import {
+ pageInternalPlan,
+ delInternalPlan,
+ exportInternalPlan,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+
+export default {
+ name: 'yearPlan',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { YearPlanDia, limsTable },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ searchForm: {
+ purpose: '',
+ },
+ tableColumn: [
+ {
+ label: '鍐呭鐩殑',
+ prop: 'purpose',
+ minWidth: '100'
+ },
+ {
+ label: '鍐呭鑼冨洿',
+ prop: 'scope',
+ minWidth: '100'
+ },
+ {
+ label: '鍐呭渚濇嵁',
+ prop: 'basis',
+ minWidth: '100'
+ },
+ {
+ label: '缁勯暱',
+ prop: 'leader',
+ minWidth: '100'
+ },
+ {
+ label: '缁勫憳',
+ prop: 'crew',
+ minWidth: '100'
+ },
+ {
+ 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: 'examineUserName',
+ 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: 'ratifyUserName',
+ minWidth: '100'
+ }, {
+ label: '鎵瑰噯鏃ユ湡',
+ prop: 'ratifyTime',
+ minWidth: '160'
+ },
+ {
+ dataType: 'action',
+ fixed: 'right',
+ minWidth: '220',
+ label: '鎿嶄綔',
+ operation: [
+ {
+ name: '瀵煎嚭',
+ type: 'text',
+ clickFun: (row) => {
+ this.handleDown(row)
+ }
+ },
+ {
+ name: '缂栬緫',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('edit', row);
+ },
+ disabled: (row) => {
+ if (row.ratifyStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ },
+ {
+ name: '瀹℃牳',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('examine', row);
+ },
+ disabled: (row) => {
+ if (row.examineStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ },
+ {
+ name: '鎵瑰噯',
+ type: 'text',
+ clickFun: (row) => {
+ this.openFormDia('ratify', row);
+ },
+ disabled: (row) => {
+ if (row.ratifyStatus === 1 || row.examineStatus === 0 || row.examineStatus === null) {
+ return true
+ } else {
+ return false
+ }
+ },
+ },
+ {
+ name: '鍒犻櫎',
+ type: 'text',
+ color: '#f56c6c',
+ clickFun: (row) => {
+ this.delPlan(row)
+ },
+ disabled: (row) => {
+ if (row.ratifyStatus === 1) {
+ return true
+ } else {
+ return false
+ }
+ },
+ }
+ ]
+ }
+ ],
+ tableData: [],
+ tableLoading: false,
+ page: {
+ size: 20,
+ current: 1,
+ total: 0,
+ },
+ yearPlanDia: false,
+ };
+ },
+ mounted() {
+ this.searchList()
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鏌ヨ鍒楄〃
+ searchList() {
+ const entity = this.searchForm
+ const page = this.page
+ this.tableLoading = true
+ pageInternalPlan({ ...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
+ delInternalPlan({ planId: row.planId }).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.yearPlanDia = true
+ this.$nextTick(() => {
+ this.$refs.yearPlanDia.openDia(type, row)
+ })
+ },
+ // 瀵煎嚭
+ handleDown(row) {
+ exportInternalPlan({ planId: row.planId }).then(res => {
+ this.outLoading = false
+ this.$message.success('瀵煎嚭鎴愬姛')
+ const blob = new Blob([res], { type: 'application/msword' });
+ this.$download.saveAs(blob, '鍐呭骞村害璁″垝' + '.docx');
+ })
+ },
+ closeYearDia() {
+ this.yearPlanDia = false
+ this.searchList()
+ },
+ // 閲嶇疆鏌ヨ鏉′欢
+ resetSearchForm() {
+ this.searchForm.purpose = '';
+ this.searchList()
+ },
+ pagination({ page, limit }) {
+ this.page.current = page;
+ this.page.size = limit;
+ this.searchList();
+ },
+ }
+};
+</script>
+
+<style scoped>
+.search-background {
+ width: 100%;
+ height: 60px;
+ line-height: 60px;
+ display: flex;
+ justify-content: space-between;
+}
+
+.search-group {
+ display: flex;
+ align-items: center;
+ margin: 0 20px;
+}
+</style>
diff --git a/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlanDia.vue b/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlanDia.vue
new file mode 100644
index 0000000..0c1eba1
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlanDia.vue
@@ -0,0 +1,342 @@
+<template>
+ <div>
+ <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false"
+ :visible.sync="formDia" title="鍐呴儴瀹℃牳骞村害璁″垝" width="1000px" @close="closeYearDia">
+ <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto">
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="鍐呭鐩殑" prop="purpose">
+ <el-input v-model="form.purpose" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ :rows="3" clearable size="small" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鍐呭鑼冨洿" prop="scope">
+ <el-input v-model="form.scope" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ :rows="3" clearable size="small" type="textarea"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="鍐呭渚濇嵁" prop="basis">
+ <el-input v-model="form.basis" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="缁勯暱" prop="leader">
+ <el-input v-model="form.leader" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="缁勫憳" prop="crew">
+ <el-input v-model="form.crew" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <table border="1" cellspacing="10" class="table">
+ <tr>
+ <td class="div-with-line">
+ <span style="float: left;">閮ㄩ棬</span>
+ <span style="float: right;">鏈堜唤</span>
+ </td>
+ <th v-for="(item, index) in dic1" :key="index">{{ item }}</th>
+ </tr>
+ <tr v-for="(item, index) in planDetailList" :key="index">
+ <td>{{ item.department }}</td>
+ <th>
+ <el-input v-model="item.january" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </th>
+ <th>
+ <el-input v-model="item.february" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </th>
+ <th>
+ <el-input v-model="item.march" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </th>
+ <th>
+ <el-input v-model="item.april" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </th>
+ <th>
+ <el-input v-model="item.may" :disabled="operationType === 'examine' || operationType === 'ratify'" clearable
+ size="small"></el-input>
+ </th>
+ <th>
+ <el-input v-model="item.june" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </th>
+ <th>
+ <el-input v-model="item.july" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </th>
+ <th>
+ <el-input v-model="item.august" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </th>
+ <th>
+ <el-input v-model="item.september" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </th>
+ <th>
+ <el-input v-model="item.october" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </th>
+ <th>
+ <el-input v-model="item.november" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </th>
+ <th>
+ <el-input v-model="item.december" :disabled="operationType === 'examine' || operationType === 'ratify'"
+ clearable size="small"></el-input>
+ </th>
+ </tr>
+ </table>
+ <span slot="footer" class="dialog-footer">
+ <el-button v-if="operationType === 'examine'" :loading="loading" @click="examine(0)">涓嶉�氳繃</el-button>
+ <el-button v-if="operationType === 'examine'" :loading="loading" type="primary" @click="examine(1)">閫�
+ 杩�</el-button>
+ <el-button v-if="operationType === 'ratify'" :loading="loading" @click="approval(0)">涓嶆壒鍑�</el-button>
+ <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="handleApproval(1)">鎵�
+ 鍑�</el-button>
+ <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" @click="closeYearDia">鍙�
+ 娑�</el-button>
+ <el-button v-if="operationType !== 'ratify' && operationType !== 'examine'" :loading="loading" type="primary"
+ @click="handleEdit">鎻� 浜�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="examineDialog" title="瀹℃牳" width="30%" @close="examineDialog = false">
+ <span>
+ 瀹℃牳澶囨敞锛�
+ <el-input v-model="examineRemark" type="textarea"></el-input>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button :loading="examineLoading" @click="examineDialog = false">鍙� 娑�</el-button>
+ <el-button :loading="examineLoading" type="primary" @click="handleExamine(0)">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :visible.sync="approvalDialog" title="鎵瑰噯" width="30%" @close="approvalDialog = false">
+ <span>
+ 鎵瑰噯澶囨敞锛�
+ <el-input v-model="ratifyRemark" type="textarea"></el-input>
+ </span>
+ <span slot="footer" class="dialog-footer">
+ <el-button :loading="approvalLoading" @click="approvalDialog = false">鍙� 娑�</el-button>
+ <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import {
+ getInternalPlanOne,
+ addInternalPlan,
+ updateInternalPlan,
+ examineInternalPlan,
+ ratifyInternalPlan,
+} from '@/api/cnas/systemManagement/internalAuditManagement.js'
+export default {
+ name: 'yearPlanDia',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: {},
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ formDia: false,
+ diaLoading: false,
+ loading: false,
+ form: {
+ purpose: '',
+ scope: '',
+ basis: '',
+ leader: '',
+ crew: '',
+ },
+ rules: {
+ purpose: [{ required: true, message: '璇峰~鍐欏唴瀹$洰鐨�', trigger: 'blur' }],
+ scope: [{ required: true, message: '璇峰~鍐欏唴瀹¤寖鍥�', trigger: 'blur' }],
+ basis: [{ required: true, message: '璇峰~鍐欏唴瀹′緷鎹�', trigger: 'blur' }],
+ leader: [{ required: true, message: '璇峰~鍐欑粍闀�', trigger: 'blur' }],
+ crew: [{ required: true, message: '璇峰~鍐欑粍鍛�', trigger: 'blur' }],
+ },
+ operationType: '',
+ approvalDialog: false,
+ approvalLoading: false,
+ examineDialog: false,
+ examineLoading: false,
+ ratifyRemark: '',
+ examineRemark: '',
+ dic1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
+ planDetailList: [{ department: '瑁呭鐢电紗瀹為獙瀹�' }, { department: '閫氫俊浜у搧瀹為獙瀹�' }, { department: '鐢靛姏浜у搧瀹為獙瀹�' }, { department: '鍌ㄨ兘浜у搧瀹為獙瀹�' }, { department: '灏勯绾跨紗瀹為獙瀹�' }],
+ };
+ },
+ mounted() {
+ },
+ // 鏂规硶闆嗗悎
+ methods: {
+ // 鎵撳紑寮规
+ openDia(type, row) {
+ this.formDia = true
+ this.operationType = type
+ if (type !== 'add') {
+ this.searchInfo(row)
+ }
+ },
+ // 鏌ヨ璇︽儏
+ searchInfo(row) {
+ this.diaLoading = true
+ getInternalPlanOne({ planId: row.planId }).then(res => {
+ this.diaLoading = false
+ if (res.code === 201) return
+ this.form = res.data
+ this.planDetailList = this.form.planDetailList
+ }).catch(err => {
+ console.log(err)
+ this.diaLoading = false
+ })
+ },
+ // 鎻愪氦寮规鏁版嵁
+ handleEdit() {
+ this.$refs['form'].validate((valid) => {
+ if (valid) {
+ this.loading = true
+ const internalPlan = this.HaveJson(this.form)
+ internalPlan.planDetailList = this.HaveJson(this.planDetailList)
+ if (this.operationType === 'add') {
+ addInternalPlan(internalPlan).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeYearDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ } else if (this.operationType === 'edit') {
+ updateInternalPlan(internalPlan).then(res => {
+ this.loading = false
+ if (res.code === 201) return
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.closeYearDia()
+ }).catch(err => {
+ console.log('err---', err);
+ this.loading = false
+ })
+ }
+ } else {
+ console.log('error submit!!');
+ return false;
+ }
+ });
+ },
+ // 瀹℃牳娴佺▼
+ examine(examineStatus) {
+ if (examineStatus === 0) {
+ this.examineDialog = true
+ } else {
+ this.handleExamine(examineStatus)
+ }
+ },
+ handleExamine(examineStatus) {
+ this.examineLoading = true
+ const internalReport = this.HaveJson(this.form)
+ internalReport.examineStatus = examineStatus
+ internalReport.examineRemark = this.examineRemark
+ examineInternalPlan(internalReport).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鎻愪氦鎴愬姛锛�');
+ this.approvalDialog = false
+ this.closeYearDia(this.departId);
+ }
+ this.examineLoading = false
+ }).catch(() => {
+ this.examineLoading = false
+ })
+ },
+ // 鎻愪氦鎵瑰噯淇℃伅
+ approval(ratifyStatus) {
+ if (ratifyStatus === 0) {
+ this.approvalDialog = true
+ } else {
+ this.handleApproval(ratifyStatus)
+ }
+ },
+ handleApproval(ratifyStatus) {
+ this.approvalLoading = true
+ const internalReport = this.HaveJson(this.form)
+ internalReport.ratifyStatus = ratifyStatus
+ internalReport.ratifyRemark = this.ratifyRemark
+ ratifyInternalPlan(internalReport).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鎻愪氦鎴愬姛锛�');
+ this.approvalDialog = false
+ this.closeYearDia(this.departId);
+ }
+ this.approvalLoading = false
+ }).catch(() => {
+ this.approvalLoading = false
+ })
+ },
+ closeYearDia() {
+ this.$refs.form.resetFields();
+ this.formDia = false
+ this.$emit('closeYearDia')
+ },
+ }
+};
+</script>
+
+<style scoped>
+>>>.el-dialog {
+ margin: 6vh auto 50px !important;
+}
+
+>>>.el-dialog__body {
+ max-height: 42em;
+ overflow-y: auto;
+}
+
+>>>.is-required {
+ margin-bottom: 6px;
+}
+
+.table {
+ width: 100%;
+ margin-top: 20px;
+}
+
+.table th {
+ width: 70px;
+}
+
+.table td {
+ 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/systemManagement/internalAuditManagement/index.vue b/src/views/CNAS/systemManagement/internalAuditManagement/index.vue
new file mode 100644
index 0000000..4b61b39
--- /dev/null
+++ b/src/views/CNAS/systemManagement/internalAuditManagement/index.vue
@@ -0,0 +1,57 @@
+<template>
+ <div class="main">
+ <el-tabs v-model="activeName" class="tab-panel" type="border-card">
+ <el-tab-pane label="骞村害璁″垝" name="yearPlan">
+ <year-plan></year-plan>
+ </el-tab-pane>
+ <el-tab-pane label="鍐呴儴瀹炴柦璁″垝" name="implementationPlan">
+ <implementation-plan></implementation-plan>
+ </el-tab-pane>
+ <el-tab-pane label="鍐呭浼氳绛惧埌" name="meetingSignIn">
+ <audit-meeting-sign></audit-meeting-sign>
+ </el-tab-pane>
+ <el-tab-pane label="鍐呭妫�鏌�" name="auditInspection">
+ <audit-inspection></audit-inspection>
+ </el-tab-pane>
+ <el-tab-pane label="绾犳鎺柦" name="correctiveAction">
+ <corrective-action></corrective-action>
+ </el-tab-pane>
+ <el-tab-pane label="鍐呭鎶ュ憡" name="auditReport">
+ <audit-report></audit-report>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+</template>
+
+<script>
+import YearPlan from './components/yearPlan.vue';
+import implementationPlan from './components/implementationPlan.vue';
+import AuditInspection from './components/auditInspection.vue';
+import AuditReport from './components/auditReport.vue';
+import AuditMeetingSign from './components/auditMeetingSign.vue';
+import CorrectiveAction from './components/correctiveAction.vue';
+
+export default {
+ name: 'InternalAuditManagement',
+ // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
+ components: { CorrectiveAction, AuditMeetingSign, AuditReport, AuditInspection, YearPlan, implementationPlan },
+ data() {
+ // 杩欓噷瀛樻斁鏁版嵁
+ return {
+ activeName: 'yearPlan',
+ };
+ },
+ // 鏂规硶闆嗗悎
+ methods: {}
+};
+</script>
+
+<style scoped>
+.main {
+ padding: 15px 0;
+}
+
+.tab-panel {
+ background: #fff;
+}
+</style>
diff --git a/src/views/business/inspectionReview/index.vue b/src/views/business/inspectionReview/index.vue
index 15d685a..fcebf1b 100644
--- a/src/views/business/inspectionReview/index.vue
+++ b/src/views/business/inspectionReview/index.vue
@@ -24,7 +24,7 @@
</div>
<div>
<lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
- :rowClassName="rowClassName" :height="'calc(100vh - 250px)'" @pagination="pagination"
+ :rowClassName="rowClassName" :height="'calc(100vh - 270px)'" @pagination="pagination"
key="tableData0"></lims-table>
</div>
<!-- <div style="width: 100%;height: 100%;" v-if="activeFace >0 && isCopper == null">-->
@@ -50,6 +50,10 @@
<onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
</div>
</el-dialog>
+ <el-dialog title="鏌ョ湅闄勪欢" :visible.sync="lookDialogVisible" width="800px" top="5vh" fullscreen>
+ <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.tempUrlPdf" :currentFile="{}"
+ style="max-height: 90vh;overflow-y: auto;" />
+ </el-dialog>
</div>
</template>
@@ -61,9 +65,12 @@
import {selectInsOrderPlanList, selectUserCondition} from "@/api/business/inspectionTask";
import {mapGetters} from "vuex";
import {upReportUrl} from "@/api/business/insReport";
+import {delfile} from "@/api/business/rawMaterialOrder";
+import filePreview from "@/components/Preview/filePreview.vue";
export default {
components: {
+ filePreview,
onlyoffice,
limsTable,
// ShowInfo,
@@ -74,6 +81,7 @@
},
data() {
return {
+ lookDialogVisible: false,
alone: false,
tabList: [],
active: 1,
@@ -232,6 +240,14 @@
issuedVisible: false,
fullscreen: false,
option:null,
+ orderTypeList: [
+ {label: '濮旀墭璇曢獙', value: 'Customer-ordered test'},
+ {label: '鎶芥', value: '鎶芥'},
+ {label: '杩涘巶妫�楠�', value: '杩涘巶妫�楠�'},
+ {label: '瀛e害妫�楠�', value: 'Quarterly inspection'},
+ ],
+ urgencyLevel: [],
+ inspectionTaskState: [],
}
},
created() {
@@ -353,36 +369,46 @@
},
// 杩樺師鎿嶄綔
handleRestore(row) {
- upReportUrl({id: row.insReportId}).then(res => {
- if (res.code === 200) {
- this.$message.success('鎿嶄綔鎴愬姛')
- this.refreshTable('page')
- }
- })
+ this.$confirm('鏄惁杩樺師褰撳墠鎶ュ憡?', "璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }).then(() => {
+ upReportUrl({id: row.insReportId}).then(res => {
+ if (res.code === 200) {
+ this.$message.success('杩樺師鎴愬姛')
+ this.refreshTable()
+ }
+ })
+ }).catch(() => { })
+
},
// 鏌ョ湅鎶ュ憡
handleIssued(row) {
- this.currentInfo = row;
- let fileName = row.url
- let fileType = "docx"
- if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
- fileName = row.tempUrlPdf
- fileType = "pdf"
- }
- fileName = fileName.replace('/word/','')
- const userName = JSON.parse(localStorage.getItem("user")).name;
- this.option = {
- url: this.javaApi + "/word/" + fileName,
- isEdit: false,
- fileType: fileType,
- title: fileName,
- lang: 'zh-CN',
- isPrint: false,
- user_id: 1,
- user_name: userName,
- editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
- }
- this.issuedVisible = true;
+ if (!row.tempUrlPdf) return this.$message.warning('鏂囦欢鏈笂浼�')
+ this.currentInfo = row
+ this.lookDialogVisible = true
+ // this.currentInfo = row;
+ // let fileName = row.url
+ // let fileType = "docx"
+ // if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+ // fileName = row.tempUrlPdf
+ // fileType = "pdf"
+ // }
+ // fileName = fileName.replace('/word/','')
+ // const userName = this.nickName
+ // this.option = {
+ // url: this.javaApi + "/word/" + fileName,
+ // isEdit: false,
+ // fileType: fileType,
+ // title: fileName,
+ // lang: 'zh-CN',
+ // isPrint: false,
+ // user_id: 1,
+ // user_name: userName,
+ // editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+ // }
+ // this.issuedVisible = true;
},
getAuthorizedPerson() {
selectUserCondition({ type: 1 }).then((res) => {
diff --git a/src/views/business/inspectionTask/inspection.vue b/src/views/business/inspectionTask/inspection.vue
index bf4b3d9..58accdd 100644
--- a/src/views/business/inspectionTask/inspection.vue
+++ b/src/views/business/inspectionTask/inspection.vue
@@ -18,13 +18,9 @@
</el-col>
<el-col :span="16" style="text-align: right">
<el-button size="small" type="primary" @click="refreshView">鍒锋柊</el-button>
- <el-button v-if="typeSource === 1" size="small" type="primary" @click="openPurchase">杩涜揣楠岃瘉</el-button>
- <el-button v-if="state === 1 && typeSource === 1" size="small" type="primary"
- @click="openUnPassDialog('add')">涓嶅悎鏍煎鐞�</el-button>
- <el-button size="small" type="primary" @click="
- sampleVisible = true;
- uploadSample();
- ">鏍峰搧鍒囨崲</el-button>
+ <el-button v-if="typeSource == 1" size="small" type="primary" @click="openPurchase">杩涜揣楠岃瘉</el-button>
+ <el-button v-if="state == 1 && typeSource == 1" size="small" type="primary" @click="openUnPassDialog('add')">涓嶅悎鏍煎鐞�</el-button>
+ <el-button size="small" type="primary" @click="sampleVisible = true;uploadSample();">鏍峰搧鍒囨崲</el-button>
<el-button v-if="state == 1" size="small" type="primary" @click="taskVisible = true">浠诲姟鍒囨崲</el-button>
<el-button v-if="state == 1" size="small" type="primary" @click="addVerifyDia = true">鎻愪氦</el-button>
<!-- 澶嶆牳 -->
@@ -73,7 +69,7 @@
</el-form-item>
<el-form-item label="澶囨敞:">
<!-- <span style="color:red">{{ insOrder.remark?insOrder.remark:'-' }}</span>-->
- <el-input v-model="insOrder.remark" :disabled="state !== 1" clearable placeholder="璇疯緭鍏�" size="small"
+ <el-input v-model="insOrder.remark" :disabled="state != 1" clearable placeholder="璇疯緭鍏�" size="small"
@blur="subOtherForm(insOrder.remark, 'remark')"></el-input>
<!-- <el-tag v-if="currentKey">{{ insOrder.remark }}</el-tag> -->
</el-form-item>
@@ -1065,7 +1061,7 @@
},
// 鎵撳紑杩涜揣楠岃瘉寮规
openPurchase() {
- const operationType = this.state === 1 ? "add" : "view";
+ const operationType = this.state == 1 ? "add" : "view";
this.purchaseDialog = true;
const item = {
id: this.currentSample.id,
@@ -3112,7 +3108,7 @@
align-items: center;
}
</style>
-<style>
+<style scoped>
/* .inspection .el-form-item__label {
color: #000;
} */
diff --git a/src/views/business/reportPreparation/index.vue b/src/views/business/reportPreparation/index.vue
new file mode 100644
index 0000000..3d9209a
--- /dev/null
+++ b/src/views/business/reportPreparation/index.vue
@@ -0,0 +1,1221 @@
+<template>
+ <div class="inspection_order">
+ <div v-show="activeFace === 0 && state===0" style="width: 100%;height: 100%;">
+ <div>
+ <el-row class="title">
+ <el-col :span="12" style="padding-left: 20px;text-align: left;">鎶ュ憡缂栧埗</el-col>
+ </el-row>
+ </div>
+ <div class="search" style="position: relative;">
+ <div class="search_thing">
+ <div class="search_label">鎶ュ憡缂栧彿锛�</div>
+ <div class="search_input"><el-input v-model="componentData.entity.code" 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-select v-model="componentData.entity.queryStatus" clearable size="small" style="width: 100%;" @change="refreshTable()">
+ <el-option v-for="(a, i) in queryStatusList" :key="i" :label="a.label" :value="a.value"></el-option>
+ </el-select>
+ </div>
+ </div>
+ <div class="search_thing">
+ <div class="search_label">涓嬪崟绫诲埆锛�</div>
+ <div class="search_input">
+ <el-select v-model="componentData.entity.typeSource" clearable size="small" style="width: 100%;" @change="refreshTable()">
+ <el-option v-for="(a, i) in typeSourceList" :key="i" :label="a.label" :value="a.value"></el-option>
+ </el-select>
+ </div>
+ </div>
+ <div class="search_thing">
+ <div class="search_label">妫�楠岀被鍒細</div>
+ <div class="search_input">
+ <el-select v-model="componentData.entity.orderType" clearable size="small" style="width: 100%;" @change="refreshTable()">
+ <el-option v-for="(a, i) in orderTypeList" :key="i" :label="a.label" :value="a.value"></el-option>
+ </el-select>
+ </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>
+ <el-button :loading="outLoading" size="small" style="margin-right: 16px;" type="primary" @click="handleDowns">鎵归噺涓嬭浇</el-button>
+ </div>
+ </div>
+ <!-- <input id="input" type="file" accept=".doc,.docx"></input> -->
+ <div class="table">
+ <el-table @selection-change="handleChange" :data="valueTableData" style="width: 100%" height="calc(100vh - 21em)" v-loading="tableLoading">
+ <!-- 琛ㄦ牸鍒� -->
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column header-align="center" align="center" width="70" prop="prop" label="搴忓彿" type="index"></el-table-column>
+ <el-table-column prop="code" label="鎶ュ憡缂栧彿" min-width="180">
+ <template slot-scope="scope">
+ <el-button type="text" @click="selectAllByOne(scope.row)">{{scope.row.code}}</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column prop="typeSource" label="涓嬪崟绫诲埆" min-width="120">
+ <template slot-scope="scope">
+ <el-tag type="info" v-if="scope.row.typeSource === 1" disable-transitions>鍘熸潗鏂欎笅鍗�</el-tag>
+ <el-tag type="info" v-if="scope.row.typeSource === 0" disable-transitions>鎴愬搧涓嬪崟</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop="orderType" label="妫�楠岀被鍒�" min-width="150">
+ <template slot-scope="scope">
+ <el-tag type="success" v-if="scope.row.orderType === 'Customer-ordered test'" disable-transitions>濮旀墭璇曢獙</el-tag>
+ <el-tag v-if="scope.row.orderType === '鎶芥'" disable-transitions>鎶芥</el-tag>
+ <el-tag type="info" v-if="scope.row.orderType === '杩涘巶妫�楠�'" disable-transitions>杩涘巶妫�楠�</el-tag>
+ <el-tag type="warning" v-if="scope.row.orderType === 'Quarterly inspection'" disable-transitions>瀛e害妫�楠�</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="150"></el-table-column>
+ <el-table-column prop="writeUserName" label="鎻愪氦浜�" min-width="110"></el-table-column>
+ <el-table-column prop="writeTime" label="鎻愪氦鏃堕棿" min-width="150"></el-table-column>
+ <el-table-column prop="state" label="鎻愪氦鐘舵��" min-width="110">
+ <template slot-scope="scope">
+ <el-tag type="danger" v-if="scope.row.state === 0" disable-transitions>寰呮彁浜�</el-tag>
+ <el-tag type="success" v-if="scope.row.state === 1" disable-transitions>宸叉彁浜�</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop="examineUser" label="瀹℃牳浜�" width="110"></el-table-column>
+ <el-table-column prop="examineTime" label="瀹℃牳鏃堕棿" width="180"></el-table-column>
+ <el-table-column prop="isExamine" label="瀹℃牳鐘舵��" width="110">
+ <template slot-scope="scope">
+ <el-tag type="danger" v-if="scope.row.isExamine === 0" disable-transitions>涓嶉�氳繃</el-tag>
+ <el-tag type="success" v-if="scope.row.isExamine === 1" disable-transitions>閫氳繃</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop="examineTell" label="瀹℃牳澶囨敞" width="180"></el-table-column>
+ <el-table-column prop="ratifyUser" label="鎵瑰噯浜�" width="110"></el-table-column>
+ <el-table-column prop="ratifyTime" label="鎵瑰噯鏃堕棿" width="180"></el-table-column>
+ <el-table-column prop="isRatify" label="鎵瑰噯鐘舵��" width="110">
+ <template slot-scope="scope">
+ <el-tag type="danger" v-if="scope.row.isRatify === 0" disable-transitions>涓嶆壒鍑�</el-tag>
+ <el-tag type="success" v-if="scope.row.isRatify === 1" disable-transitions>鎵瑰噯</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column prop="ratifyTell" label="鎵瑰噯澶囨敞" width="180"></el-table-column>
+ <!-- 鎿嶄綔鎸夐挳 -->
+ <el-table-column label="鎿嶄綔" fixed="right" min-width="360" align="center">
+ <template slot-scope="scope">
+ <el-button size="small" type="text" @click="viewIssued(scope.row)">鏌ョ湅鎶ュ憡</el-button>
+ <el-upload ref='upload1'
+ style="display: inline"
+ :action="fileAction1 +'?id='+ scope.row.id"
+ :auto-upload="true"
+ :before-upload="fileBeforeUpload1"
+ :headers="headers" :on-error="onError1"
+ :on-success="handleSuccessUp1"
+ :show-file-list="false"
+ accept='.doc,.docx'>
+ <el-button size="small" type="text" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName">涓婁紶</el-button>
+ <!-- <span>涓婁紶</span>-->
+ </el-upload>
+ <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handleRestore(scope.row)">杩樺師</el-button>
+ <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="sendBackTask(scope.row)">閫�鍥炰换鍔�</el-button>
+ <el-button type="text" size="small" :disabled="scope.row.state != 0 || userName !== scope.row.writeUserName" @click="handle(scope.row)">鎻愪氦</el-button>
+ <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 ||scope.row.isExamine == 1 || userName !== scope.row.examineUser" @click="handleIssued(scope.row)">瀹℃牳</el-button>
+ <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || userName !== scope.row.ratifyUser" @click="handleApprove(scope.row)">鎵瑰噯</el-button>
+ <el-popover placement="bottom" :width="170" trigger="hover">
+ <template #reference>
+ <el-button link type="text" size="small">鏇村</el-button>
+ </template>
+ <div>
+ <el-button style="margin-left: 10px" type="text" size="small" @click="download(scope.row)">涓嬭浇</el-button>
+ <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">鍘熷璁板綍</el-button>
+ <el-button type="text" size="small" @click="handleFileLook(scope.row)">闄勪欢涓婁紶</el-button>
+ </div>
+ </el-popover>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current"
+ style="margin-right: 5%;" :page-sizes="[10, 20, 30, 50, 100]" :page-size="page.size"
+ layout="->,total, sizes, prev, pager, next, jumper" :total="total">
+ </el-pagination>
+ </div>
+ </div>
+ <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="claimVisible" title="鍦ㄧ嚎缂栧埗"
+ width="22cm">
+ <div class="full-screen">
+ <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px"
+ @click="fullscreen=true;"></i>
+ <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;">
+ </div>
+ <Word v-if="claimVisible" ref="Word" :class="{fullscreen:fullscreen}" :value="value" style="height:70vh" />
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="claimVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="confirmClaim">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="issuedVisible" title="鎶ュ憡瀹℃牳"
+ width="80vw">
+ <div class="full-screen">
+ <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
+ <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
+ </div>
+ <div v-if="issuedVisible" style="height: 80vh;">
+ <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button :disabled="loadingIssued" @click="issuedReasonVisible=true">涓嶉�氳繃</el-button>
+ <el-button type="primary" @click="subIssued">閫� 杩�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :modal-append-to-body="false" :visible.sync="issuedReasonVisible" title="涓嶉�氳繃鍘熷洜" width="400px">
+ <div class="search_thing">
+ <div class="search_label">涓嶉�氳繃鍘熷洜锛�</div>
+ <div class="search_input"><el-input v-model="reason" clearable placeholder="璇疯緭鍏�" size="small"></el-input></div>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button :disabled="loadingIssuedReason" @click="issuedReasonVisible=false">鍙栨秷</el-button>
+ <el-button :loading="loadingIssuedReason" type="primary" @click="handleIssuedReason">纭畾</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="approveVisible" title="鎶ュ憡鎵瑰噯" width="80vw">
+ <div class="full-screen">
+ <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
+ <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
+ </div>
+ <div v-if="approveVisible" style="height: 80vh;">
+ <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button :disabled="loadingApprove" @click="approveReasonVisible=true">涓嶆壒鍑�</el-button>
+ <el-button :loading="loadingApprove" type="primary" @click="subApprove">鎵� 鍑�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :modal-append-to-body="false" :visible.sync="approveReasonVisible" title="涓嶆壒鍑嗗師鍥�" width="400px">
+ <div class="search_thing">
+ <div class="search_label">涓嶆壒鍑嗗師鍥狅細</div>
+ <div class="search_input"><el-input v-model="reason" clearable placeholder="璇疯緭鍏�" size="small"></el-input></div>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button :disabled="loadingApproveReason" @click="approveReasonVisible=false">鍙栨秷</el-button>
+ <el-button :loading="loadingApproveReason" type="primary" @click="handleApproveReason">纭畾</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :close-on-click-modal="false" :visible.sync="addApproverDia" title="鎸囧畾鎵瑰噯浜哄憳"
+ width="400px"
+ @close="closeAddApproverDia">
+ <div class="body" style="display: flex;padding: 10px;align-items: center;">
+ <div class="search_label" style="width: 150px;"><span class="required-span">*</span>鎵瑰噯浜猴細</div>
+ <div class="search_input" style="width: 100%;">
+ <el-select v-model="approver" clearable filterable placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+ <el-option v-for="(item,i) in approverList" :key="i" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </div>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeAddApproverDia">鍙� 娑�</el-button>
+ <el-button :loading="loadingIssued" type="primary" @click="submitAddApprover">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog :close-on-click-modal="false" :visible.sync="addVerifyDia"
+ title="鎸囧畾瀹℃牳浜哄憳"
+ width="400px"
+ @close="closeAddVerifyDia">
+ <div class="body" style="display: flex;padding: 10px;align-items: center;">
+ <div class="search_label" style="width: 150px;"><span class="required-span">*</span>瀹℃牳浜猴細</div>
+ <div class="search_input" style="width: 100%;">
+ <el-select v-model="verifyUser" clearable filterable placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+ <el-option v-for="(item,i) in approverList" :key="i" :label="item.label" :value="item.value">
+ </el-option>
+ </el-select>
+ </div>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="closeAddVerifyDia">鍙� 娑�</el-button>
+ <el-button :loading="loadingVerify" type="primary" @click="handleSubmit">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <div v-if="activeFace >0 && isCopper === null" style="width: 100%;height: 100%;">
+ <Add :active="activeFace" :currentId="currentId" :examine="examine"/>
+ </div>
+ <div v-if="activeFace >0 && isCopper === 0" style="width: 100%;height: 100%;">
+ <CustomsInspection :active="activeFace" :currentId="currentId" :customsInspection="customsInspection" :isReport="isReport"/>
+ </div>
+ <div v-if="activeFace >0 && isCopper === 1" style="width: 100%;height: 100%;">
+ <CopperOrder :active="activeFace" :currentId="currentId"></CopperOrder>
+ </div>
+ <!--浜т笟閾句俊鎭煡鐪�-->
+ <ShowInfo v-if="showInfoDialog" ref="showInfoDialog" :showInfoDialog="showInfoDialog"></ShowInfo>
+ <!--鎶ュ憡鏌ョ湅-->
+ <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="viewIssuedVisible" title="鎶ュ憡鏌ョ湅"
+ width="80vw">
+ <div class="full-screen">
+ <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
+ <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
+ </div>
+ <div v-if="viewIssuedVisible" style="height: 80vh;">
+ <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" />
+ </div>
+ </el-dialog>
+ <!--妫�楠屼换鍔′俊鎭煡鐪�-->
+ <Inspection v-if="state>0" :key="InspectionKey" :inspectorList="inspectorList" :orderId="orderId"
+ :sonLaboratory="sonLaboratory" :state="state"
+ :typeSource="typeSource"
+ @goback="goback" @refreshView="refreshView"/>
+ <!--闄勪欢鏌ョ湅-->
+ <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="{orderId: filesLookInfo.insOrderId}"
+ :headers="headers" :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 v-if="filesDialogVisible" style="height: 70vh;overflow-y: auto;">-->
+<!-- <ValueTable :key="upIndex"-->
+<!-- ref="fileList"-->
+<!-- :componentData="fileComponentData"-->
+<!-- :delUrl="$api.insOrderPlan.delfile"-->
+<!-- :url="$api.insOrderPlan.getFileList"-->
+<!-- class="value-table"/>-->
+<!-- </div>-->
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue";
+// import ShowInfo from "../do/b1-material-ins-order/showInfo.vue";
+import file from "@/utils/file";
+export default {
+ components: {onlyoffice},
+ data() {
+ return {
+ componentData: {
+ entity: {
+ queryStatus: null,
+ code: null,
+ typeSource: null,
+ orderBy: {
+ field: 'id',
+ order: 'desc'
+ }
+ },
+ isIndex: true,
+ showSelect: true,
+ select: true,
+ selectMethod: 'handleChange',
+ do: [
+ {
+ id: '',
+ font: '鏌ョ湅鎶ュ憡',
+ type: 'text',
+ method: 'viewIssued',
+ },
+ {
+ id: 'download',
+ font: '涓嬭浇',
+ type: 'text',
+ method: 'download'
+ }, {
+ id: 'handleUpload',
+ font: '涓婁紶',
+ type: 'upload',
+ uploadConfig: {
+ url: this.$api.insReport.inReport,
+ accept: '.docx'
+ },
+ method: 'handleUpload',
+ disabFun: (row, index) => {
+ return row.state != 0 || userName != row.writeUserName
+ }
+ },
+ {
+ id: 'handleRestore',
+ font: '杩樺師',
+ type: 'text',
+ method: 'handleRestore',
+ disabFun: (row, index) => {
+ return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
+ }
+ },
+ {
+ id: 'sendBackTask',
+ font: '閫�鍥炰换鍔�',
+ type: 'text',
+ method: 'sendBackTask',
+ disabFun: (row, index) => {
+ return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
+ }
+ },
+ {
+ id: 'handle',
+ font: '鎻愪氦',
+ type: 'text',
+ method: 'handle',
+ disabFun: (row, index) => {
+ return row.state != 0 || JSON.parse(localStorage.getItem("user")).name != row.writeUserName
+ }
+ },
+ {
+ id: 'handleIssued',
+ font: '瀹℃牳',
+ type: 'text',
+ method: 'handleIssued',
+ disabFun: (row, index) => {
+ return row.state == null || row.state == 0 || row.isExamine == 1 || JSON.parse(localStorage.getItem("user")).name != row.examineUser
+ }
+ }, {
+ id: 'handleApprove',
+ font: '鎵瑰噯',
+ type: 'text',
+ method: 'handleApprove',
+ disabFun: (row, index) => {
+ return row.state == null || row.state == 0 || row.isExamine == 0 || row.isExamine == null || row.isRatify == 1 || JSON.parse(localStorage.getItem("user")).name != row.ratifyUser
+ }
+ },
+ {
+ id: '',
+ font: '鍘熷璁板綍',
+ type: 'text',
+ method: 'viewInspectInfo',
+ },
+ {
+ id: '',
+ font: '闄勪欢涓婁紶',
+ type: 'text',
+ method: 'handleFileLook',
+ }
+ ],
+ linkEvent: {
+ code: {
+ method: 'selectAllByOne'
+ }
+ },
+ tagField: {
+ isRatify: {
+ select: [{
+ value: 0,
+ type: 'danger',
+ label: '涓嶆壒鍑�'
+ }, {
+ value: 1,
+ type: 'success',
+ label: '鎵瑰噯'
+ }]
+ },
+ isExamine: {
+ select: [{
+ value: 0,
+ type: 'danger',
+ label: '涓嶉�氳繃'
+ }, {
+ value: 1,
+ type: 'success',
+ label: '閫氳繃'
+ }]
+ },
+ state: {
+ select: [{
+ value: 0,
+ type: 'danger',
+ label: '寰呮彁浜�'
+ }, {
+ value: 1,
+ type: 'success',
+ label: '宸叉彁浜�'
+ }]
+ },
+ typeSource: {
+ select: [{
+ value: 0,
+ label: '鎴愬搧涓嬪崟',
+ type: 'info'
+ },{
+ value: 1,
+ label: '鍘熸潗鏂欎笅鍗�',
+ type: 'info'
+ }]
+ },
+ queryStatus: {
+ select: [{
+ value: 0,
+ label: '寰呮彁浜�',
+ type: 'info'
+ },{
+ value: 1,
+ label: '寰呭鏍�',
+ type: 'info'
+ },{
+ value: 2,
+ label: '寰呮壒鍑�',
+ type: 'info'
+ }]
+ },
+ orderType: {
+ select: [{
+ value: 'Customer-ordered test',
+ label: '濮旀墭璇曢獙',
+ type: 'success',
+ effect: 'plain'
+ },{
+ value: '鎶芥',
+ label: '鎶芥',
+ type: '',
+ effect: 'plain'
+ },{
+ value: '杩涘巶妫�楠�',
+ label: '杩涘巶妫�楠�',
+ type: 'info',
+ effect: 'plain'
+ },{
+ value: 'Quarterly inspection',
+ label: '瀛e害妫�楠�',
+ type: 'warning',
+ effect: 'plain'
+ }]
+ }
+ },
+ selectField: {},
+ requiredAdd: [],
+ needSort: ['createTime', 'state', 'writeTime', 'isExamine', 'examineTime', 'ratifyTime'],
+ requiredUp: []
+ },
+ page: {
+ current: 1,
+ size: 20,
+ },
+ total: null,
+ entityCopy: {},
+ upIndex: 0,
+ statusList: [],
+ claimVisible: false,
+ issuedVisible: false,
+ issuedReasonVisible: false,
+ approveVisible: false,
+ approveReasonVisible: false,
+ fullscreen: false,
+ loadingApproveReason: false,
+ loadingApprove: false,
+ loadingIssuedReason: false,
+ loadingIssued: false,
+ value: ``,
+ reason: '',
+ currentInfo: null,
+ option:null,
+ mutiList:[],
+ outLoading:false,
+ inLoading:false,
+ addApproverDia: false, // 鎸囧畾瀹℃壒浜哄憳寮规
+ approver: '', // 瀹℃壒浜哄憳
+ approverId: '', // 瀹℃壒浜哄憳
+ approverList: [],
+ addVerifyDia: false, // 鎸囧畾瀹℃牳浜哄憳寮规
+ verifyUser: null, // 瀹℃牳浜哄憳
+ loadingVerify: false, // 瀹℃牳浜哄憳
+ typeSourceList: [
+ {label: '鎴愬搧涓嬪崟', value: 0},
+ {label: '鍘熸潗鏂欎笅鍗�', value: 1},
+ ],
+ orderTypeList: [
+ {label: '濮旀墭璇曢獙', value: 'Customer-ordered test'},
+ {label: '鎶芥', value: '鎶芥'},
+ {label: '杩涘巶妫�楠�', value: '杩涘巶妫�楠�'},
+ {label: '瀛e害妫�楠�', value: 'Quarterly inspection'},
+ ],
+ showInfoDialog: false, // 浜т笟閾句俊鎭煡鐪�
+ isReport: 1,
+ activeFace: 0, // 1锛氫笅鍗曪紝2锛氭煡鐪嬶紝3锛氬鏍革紝榛樿涓�0
+ customsInspection: {},
+ currentId: null,
+ examine: null,
+ viewIssuedVisible: false,
+ queryStatusList: [
+ {label: '寰呮彁浜�', value: 0},
+ {label: '寰呭鏍�', value: 1},
+ {label: '寰呮壒鍑�', value: 2},
+ ],
+ state: 0,
+ orderId: 0,
+ inspectorList: [],//妫�楠屼汉鍛樺垪琛�
+ InspectionKey: 1,
+ typeSource: null,// 0:鎴愬搧涓嬪崟锛�1锛氬師鏉愭枡涓嬪崟
+ sonLaboratory: '', // 璇曢獙瀹�
+ filesDialogVisible: false,
+ filesLookInfo: {},
+ fileComponentData: {
+ entity: {
+ insOrderId:''
+ },
+ isIndex: true,
+ showSelect: false,
+ select: false,
+ sort: false,
+ init:false,
+ do: [
+ {
+ id: 'parent',
+ font: '涓嬭浇',
+ type: 'text',
+ method: 'handleDown'
+ },{
+ id: 'delete',
+ font: '鍒犻櫎',
+ type: 'text',
+ method: 'doDiy',
+ }
+ ],
+ isPage: false,
+ linkEvent: {},
+ tagField: {
+ type:{
+ select:[
+ {
+ value: 1,
+ label: '鍥剧墖'
+ },
+ {
+ value: 2,
+ label: '鏂囦欢'
+ }
+ ]
+ }
+ },
+ currentId: '',
+ selectField: {},
+ requiredAdd: [],
+ requiredUp: []
+ },
+ isCopper: null,
+ tableLoading: false,
+ valueTableData: [],
+ userName: ''
+ }
+ },
+ computed: {
+ headers() {
+ return {
+ 'token': sessionStorage.getItem('token')
+ }
+ },
+ action() {
+ return this.javaApi + this.$api.insReport.upAll
+ },
+ fileAction() {
+ return this.javaApi + this.$api.insOrderPlan.uploadFile
+ },
+ fileAction1() {
+ return this.javaApi + this.$api.insReport.inReport
+ }
+ },
+ mounted() {
+ this.entityCopy = this.HaveJson(this.componentData.entity)
+ this.userName = JSON.parse(localStorage.getItem("user")).name
+ this.getPower()
+ this.refreshTable()
+ },
+ methods: {
+ handleChange(arr){
+ this.mutiList = arr
+ },
+ // 鏌ョ湅妫�楠屾暟鎹�
+ viewInspectInfo (row) {
+ //褰撳墠妫�楠屼换鍔$殑妫�楠屼汉鍒楄〃
+ let inspectorList = []
+ if(row.userName){
+ inspectorList = row.userName.split(',')
+ }
+ let user = JSON.parse(localStorage.getItem('user'))
+ if(user){
+ inspectorList.push(user.name)
+ }
+ this.inspectorList = inspectorList
+ this.state = 3;
+ this.typeSource = row.typeSource
+ this.orderId = row.insOrderId
+ this.sonLaboratory = row.sonLaboratory
+ },
+ goback() {
+ this.state = 0
+ this.refreshTable('page')
+ },
+ handleFileLook (row) {
+ this.filesLookInfo = row
+ this.filesDialogVisible = true
+ this.fileComponentData.entity.insOrderId = row.insOrderId
+ this.$nextTick(() => {
+ this.$refs['fileList'].selectList()
+ })
+ },
+ closeFilesLook () {
+ this.filesDialogVisible = false
+ },
+ handleSuccessUp(response, ) {
+ this.upLoading = false;
+ if (response.code == 200) {
+ this.$message.success('涓婁紶鎴愬姛');
+ this.$refs.fileList.selectList()
+ }
+ },
+ handleSuccessUp1(response, ) {
+ if (response.code == 200) {
+ this.$message.success('涓婁紶鎴愬姛');
+ }
+ },
+ handleDown(row){
+ this.$axios.post(this.$api.insOrderPlan.downFile, {
+ id: row.id,
+ }).then(res => {
+ if (res.code === 200) {
+ let url = '';
+ if(res.data.type==1){
+ url = this.javaApi+'/img/'+res.data.fileUrl
+ file.downloadIamge(url,row.fileName)
+ }else{
+ url = this.javaApi+'/word/'+res.data.fileUrl
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = row.fileName;
+ link.click();
+ }
+ }
+ }).catch(error => {
+
+ })
+ },
+ // 鍒锋柊椤甸潰
+ refreshView () {
+ this.InspectionKey++
+ },
+ // 鏌ョ湅浜т笟閾句俊鎭�
+ openInfoDialog (row) {
+ this.showInfoDialog = true
+ this.$nextTick(() => {
+ this.$refs.showInfoDialog.getInfo(row.ifsInventoryId)
+ })
+ },
+ handleDowns(){
+ if(this.mutiList.length==0){
+ this.$message.error('璇烽�夋嫨鎶ュ憡')
+ return
+ }
+ let str = this.mutiList.map(m=>m.id).join(',')
+ this.outLoading = true
+ this.$axios.get(this.$api.insReport.downAll+'?ids='+str).then(res => {
+ this.outLoading = false
+ this.$message.success('瀵煎嚭鎴愬姛')
+ // const blob = new Blob([res],{ type: 'application/octet-stream' });
+ // const url = URL.createObjectURL(blob);
+ // const link = document.createElement('a');
+ // link.href = url;
+ // link.download = '鎶ュ憡.zip';
+ // link.click();
+ const link = document.createElement('a');
+ link.href = this.javaApi + res.message;
+ link.target = '_blank';
+ document.body.appendChild(link);
+ link.click();
+ })
+ },
+ beforeUpload(file){
+ const isZip = file.type === 'application/zip' || file.name.endsWith('.zip');
+ if (!isZip) {
+ this.$message.error('涓婁紶鏂囦欢鍙兘鏄� ZIP 鏍煎紡!');
+ }
+ if(isZip){
+ this.inLoading = true;
+ }
+ return isZip;
+ },
+ 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‘鐨勭粓姝�
+ }
+ },
+ fileBeforeUpload1(file) {
+ let flag = true
+ if (file.size > 1024 * 1024 * 10) {
+ this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M');
+ this.$refs.upload1.clearFiles()
+ flag = false
+ }
+ if (!flag) {
+ return Promise.reject(flag); //姝g‘鐨勭粓姝�
+ }
+ },
+ handleSuccess(response,){
+ this.inLoading = false;
+ if (response.code == 200) {
+ this.$message.success('瀵煎叆鎴愬姛')
+ this.refreshTable()
+ }else{
+ this.$message.error(response.message)
+ }
+ },
+ onError(err, file, fileList,type) {
+ this.$message.error('涓婁紶澶辫触')
+ this.$refs.upload.clearFiles()
+ },
+ onError1(err, file, fileList,type) {
+ this.$message.error('涓婁紶澶辫触')
+ this.$refs.upload1.clearFiles()
+ },
+ refreshTable(e) {
+ this.tableLoading = false
+ this.$axios.post(this.$api.insReport.pageInsReport, {
+ page: this.page,
+ entity: this.componentData.entity
+ }, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }).then(res => {
+ this.tableLoading = false
+ if (res.code === 201) {
+ return
+ }
+ this.total = res.data.body.total
+ this.valueTableData = res.data.body.records
+ })
+ },
+ handleSizeChange(val) {
+ this.page.size = val
+ this.refreshTable();
+ },
+ handleCurrentChange(val) {
+ this.page.current = val
+ this.refreshTable();
+ },
+ refresh() {
+ this.componentData.entity = this.HaveJson(this.entityCopy)
+ this.refreshTable();
+ },
+ async handleWeave(row) {
+ let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+ fileName = fileName.replace('/word/','')
+ const userName = JSON.parse(localStorage.getItem("user")).name;
+ //鍙傝�僾abOnlyOffice缁勪欢鍙傛暟閰嶇疆
+ const { href } = this.$router.resolve({
+ path: `/wordEdit`,
+ query: {
+ url: this.javaApi + "/word/" + fileName,
+ isEdit: true,
+ fileType: "docx",
+ title: fileName,
+ lang: 'zh-CN',
+ isPrint: true,
+ user_id: 1,
+ user_name: userName,
+ editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+ }
+ })
+ window.open(href, '_blank');
+ },
+ // 鏉冮檺鍒嗛厤
+ getPower(radio) {
+ let power = JSON.parse(sessionStorage.getItem('power'))
+ let edit = false
+ let up = false
+ let res = false
+ let sub = false
+ let issued = true
+ let approve = true
+ for (var i = 0; i < power.length; i++) {
+ if (power[i].menuMethod == 'upReportFile') {
+ edit = true
+ }
+ if (power[i].menuMethod == 'inReport') {
+ up = true
+ }
+ if (power[i].menuMethod == 'upReportUrl') {
+ res = true
+ }
+ if (power[i].menuMethod == 'writeReport') {
+ sub = true
+ }
+ if (power[i].menuMethod == 'ratifyReport') {
+ approve = true
+ }
+ if (power[i].menuMethod == 'examineReport') {
+ issued = true
+ }
+ }
+ if (!approve) {
+ this.componentData.do.splice(6, 1)
+ }
+ if (!issued) {
+ this.componentData.do.splice(5, 1)
+ }
+ if (!sub) {
+ this.componentData.do.splice(4, 1)
+ }
+ if (!res) {
+ this.componentData.do.splice(3, 1)
+ }
+ if (!up) {
+ this.componentData.do.splice(2, 1)
+ }
+ if (!edit) {
+ this.componentData.do.splice(0, 1)
+ }
+ },
+ confirmClaim() {
+ // console.log(this.$refs.Word.getValue())
+ },
+ playOrder(num) {
+ this.activeFace = num
+ },
+ async selectAllByOne(row) {
+ this.isCopper = row.isCopper
+ this.customsInspection = row
+ this.activeFace = 2;
+ this.examine = 1;
+ this.isReport = 1
+ this.currentId = parseInt(row.insOrderId)
+ },
+ download(row) {
+ let url = row.urlS ? row.urlS : row.url;
+ const link = document.createElement('a');
+ link.href = this.javaApi + url;
+ link.target = '_blank';
+ document.body.appendChild(link);
+ link.click();
+ },
+ // 杩樺師鎿嶄綔
+ handleRestore(row) {
+ this.$axios.post(this.$api.insReport.upReportUrl, {
+ id: row.id
+ }).then(res => {
+ if (res.code === 200) {
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.refreshTable('page')
+ }
+ })
+ },
+ // 瀹℃牳鎸夐挳
+ handleIssued(row) {
+ this.currentInfo = row;
+ let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+ let fileType = "docx"
+ if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+ fileName = row.tempUrlPdf
+ fileType = "pdf"
+ }
+ fileName = fileName.replace('/word/','')
+ const userName = JSON.parse(localStorage.getItem("user")).name;
+ this.option = {
+ url: this.javaApi + "/word/" + fileName,
+ isEdit: false,
+ fileType: fileType,
+ title: fileName,
+ lang: 'zh-CN',
+ isPrint: false,
+ user_id: 1,
+ user_name: userName,
+ editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+ }
+ this.issuedVisible = true;
+ },
+ // 鏌ョ湅pdf鎶ュ憡
+ viewIssuedPdf(row) {
+ this.currentInfo = row;
+ let url = row.tempUrlPdf
+ if(url){
+ url = url.split('.')[0]+'.pdf'
+ const link = document.createElement('a');
+ link.href = this.javaApi + url;
+ link.target = '_blank';
+ document.body.appendChild(link);
+ link.click();
+ }
+ },
+ // 鏌ョ湅鎶ュ憡
+ viewIssued(row) {
+ this.currentInfo = row;
+ let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+ let fileType = "docx"
+ if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+ fileName = row.tempUrlPdf
+ fileType = "pdf"
+ }
+ fileName = fileName.replace('/word/','')
+ const userName = JSON.parse(localStorage.getItem("user")).name;
+ this.option = {
+ url: this.javaApi + "/word/" + fileName,
+ isEdit: false,
+ fileType: fileType,
+ title: fileName,
+ lang: 'zh-CN',
+ isPrint: false,
+ user_id: 1,
+ user_name: userName,
+ editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+ }
+ this.viewIssuedVisible = true;
+ },
+ // 閫�鍥炲埌浠诲姟
+ sendBackTask(row) {
+ this.$confirm('纭閫�鍥炲埌妫�楠屼换鍔�?閫�鍥炲悗闇�閲嶆柊鎻愪氦澶嶆牳', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ this.upLoad = true
+ this.$axios.post(this.$api.insReport.sendBackTask+'?id='+row.id).then(res => {
+ this.upLoad = false
+ if (res.code === 201) {
+ return
+ }
+ this.$message.success('閫�鍥炴垚鍔燂紒')
+ this.refreshTable('page')
+ }).catch(err => {
+ this.upLoad = false
+ })
+ }).catch(() => {
+ this.$message({
+ type: 'info',
+ message: '宸插彇娑堝垹闄�'
+ });
+ });
+ },
+ // 瀹℃牳閫氳繃
+ submitAddApprover () {
+ if (!this.approver) {
+ this.$message.error('璇烽�夋嫨瀹℃壒浜�')
+ return
+ }
+ this.loadingIssued = true;
+ this.$axios.post(this.$api.insReport.examineReport, {
+ id: this.currentInfo.id,
+ userId: this.approver,
+ isExamine: 1
+ }).then(res => {
+ this.loadingIssued = false;
+ if (res.code === 201) {
+ return
+ }
+ this.$message.success('鎻愪氦鎴愬姛')
+ this.refreshTable('page')
+ this.currentInfo = null;
+ this.addApproverDia = false
+ this.issuedVisible = false;
+ }).catch(e => {
+ this.$message.error('鎻愪氦澶辫触')
+ this.loadingIssued = false;
+ })
+ },
+ closeAddApproverDia () {
+ this.addApproverDia = false
+ this.approver = ''
+ },
+ // 鐐瑰嚮閫氳繃锛岄渶瑕侀�夋嫨鎵瑰噯浜哄憳
+ subIssued() {
+ this.getAuthorizedPerson()
+ this.addApproverDia = true
+ },
+ // 鑾峰彇浜哄憳鍒楄〃
+ getAuthorizedPerson() {
+ this.$axios.get(this.$api.user.selectQualityUserList).then(res => {
+ let data = []
+ let userName = JSON.parse(localStorage.getItem("user")).name;
+ res.data.forEach(a => {
+ // if(a.name !== userName) {
+ data.push({
+ label: a.name,
+ value: a.id
+ })
+ // }
+ })
+ this.approverList = data
+ })
+ },
+ // 鎵瑰噯鎸夐挳
+ handleApprove(row) {
+ this.currentInfo = row;
+ let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS
+ let fileType = "docx"
+ if (row.tempUrlPdf != null || row.tempUrlPdf === '') {
+ fileName = row.tempUrlPdf
+ fileType = "pdf"
+ }
+ fileName = fileName.replace('/word/','')
+ const userName = JSON.parse(localStorage.getItem("user")).name;
+ this.option = {
+ url: this.javaApi + "/word/" + fileName,
+ isEdit: false,
+ fileType: fileType,
+ title: fileName,
+ lang: 'zh-CN',
+ isPrint: false,
+ user_id: 1,
+ user_name: userName,
+ editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName
+ }
+ this.approveVisible = true;
+ },
+ // 鎵瑰噯閫氳繃
+ subApprove() {
+ this.loadingApprove = true;
+ this.$axios.post(this.$api.insReport.ratifyReport, {
+ id: this.currentInfo.id,
+ isRatify: 1
+ }).then(res => {
+ this.loadingApprove = false;
+ if (res.code == 201) {
+ this.$message.error('鎵瑰噯澶辫触')
+ return
+ }
+ this.$message.success('宸叉壒鍑�')
+ this.refreshTable('page')
+ this.currentInfo = null;
+ this.approveVisible = false;
+ })
+ },
+ handle (row) {
+ this.getAuthorizedPerson()
+ this.currentInfo = row;
+ this.addVerifyDia = true
+ },
+ // 鎻愪氦瀹℃牳浜烘搷浣�
+ handleSubmit(row) {
+ this.loadingVerify = true
+ this.$axios.post(this.$api.insReport.writeReport, {
+ id: this.currentInfo.id,
+ userId: this.verifyUser,
+ }).then(res => {
+ this.loadingVerify = false
+ if (res.code === 201) {
+ return
+ }
+ this.addVerifyDia = false
+ this.$message.success('鎻愪氦鎴愬姛')
+ this.refreshTable('page')
+ }).catch(e => {
+ this.loadingVerify = false
+ this.$message.error('鎻愪氦澶辫触')
+ })
+ },
+ closeAddVerifyDia () {
+ this.addVerifyDia = false
+ this.verifyUser = ''
+ },
+ // 瀹℃牳涓嶉�氳繃鍘熷洜鎻愪氦
+ handleIssuedReason() {
+ if (!this.reason) {
+ return this.$message.error('璇疯緭鍏ュ師鍥�')
+ }
+ this.loadingIssuedReason = true;
+ this.$axios.post(this.$api.insReport.examineReport, {
+ id: this.currentInfo.id,
+ isExamine: 0,
+ examineTell: this.reason
+ }).then(res => {
+ this.loadingIssuedReason = false;
+ if (res.code === 201) {
+ return
+ }
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.refreshTable('page')
+ this.currentInfo = null;
+ this.reason = '';
+ this.issuedVisible = false;
+ this.issuedReasonVisible = false;
+ }).catch(e => {
+ this.$message.error('鎿嶄綔澶辫触')
+ this.loadingIssuedReason = false;
+ })
+ },
+ // 涓嶆壒鍑嗗師鍥犳彁浜�
+ handleApproveReason() {
+ if (!this.reason) {
+ return this.$message.error('璇疯緭鍏ュ師鍥�')
+ }
+ this.loadingApproveReason = true
+ this.$axios.post(this.$api.insReport.ratifyReport, {
+ id: this.currentInfo.id,
+ isRatify: 0,
+ examineTell: this.reason
+ }).then(res => {
+ this.loadingApproveReason = false
+ if (res.code === 201) {
+ return
+ }
+ this.$message.success('鎿嶄綔鎴愬姛')
+ this.refreshTable('page')
+ this.currentInfo = null;
+ this.reason = '';
+ this.approveVisible = false;
+ this.approveReasonVisible = false;
+ }).catch(e => {
+ this.$message.error('鎿嶄綔澶辫触')
+ this.loadingIssuedReason = false;
+ })
+ }
+ }
+}
+</script>
+<style scoped>
+.title {
+ height: 60px;
+ line-height: 60px;
+}
+
+.search {
+ background-color: #fff;
+ height: 80px;
+ display: flex;
+ align-items: center;
+}
+
+.search_thing {
+ display: flex;
+ align-items: center;
+ height: 50px;
+}
+
+.search_label {
+ width: 120px;
+ font-size: 14px;
+ text-align: right;
+}
+
+.search_input {
+ width: calc(100% - 120px);
+}
+
+.table {
+ margin-top: 10px;
+ background-color: #fff;
+ width: calc(100% - 40px);
+ height: calc(100% - 60px - 80px - 10px - 40px);
+ padding: 20px;
+}
+
+.el-form-item {
+ margin-bottom: 16px;
+}
+
+.full-screen {
+ position: absolute;
+ right: 52px;
+ top: 22px;
+}
+
+.btns {
+ position: absolute;
+ right: 40px;
+ top: 50%;
+ transform: translate(0, -50%);
+ display: flex;
+ align-items: center;
+}
+
+.fullscreen {
+ height: 82vh
+}
+</style>
diff --git a/src/views/business/unpass/components/PurchaseVerification.vue b/src/views/business/unpass/components/PurchaseVerification.vue
index 2e66c74..1071830 100644
--- a/src/views/business/unpass/components/PurchaseVerification.vue
+++ b/src/views/business/unpass/components/PurchaseVerification.vue
@@ -1,10 +1,10 @@
<template>
<div>
- <el-dialog title="杩涜揣楠岃瘉鍘熷璁板綍" :visible.sync="isShow" width="1000px" :show-close="false" :close-on-click-modal="false"
- style="max-height: 96vh; margin-top: 2vh" :modal-append-to-body="false" :close-on-press-escape="false">
+ <el-dialog title="杩涜揣楠岃瘉鍘熷璁板綍" :visible.sync="isShow" width="70%" :show-close="false" :close-on-click-modal="false"
+ :modal-append-to-body="false" :close-on-press-escape="false">
<div class="search">
<el-form :inline="true" :model="purchaseForm" label-position="right" :rules="purchaseFormRules"
- ref="purchaseForm" class="form-inline" label-width="130px">
+ ref="purchaseForm" class="form-inline" label-width="120px">
<el-row>
<el-col :span="8">
<el-form-item label="妫�楠岀紪鍙�:">
@@ -55,50 +55,49 @@
</h4>
<div class="title">涓�銆佷緵鏂逛骇鍝佹娴嬫姤鍛婄殑鍩烘湰淇℃伅纭</div>
<el-form-item label="鏉愭枡鍚嶇О:" prop="basicName">
- <el-radio-group v-model="purchaseForm.basicName" :disabled="operationType === 'view'" v-removeAriaHidden>
+ <el-radio-group v-model="purchaseForm.basicName" :disabled="operationType === 'view'">
<el-radio label="1">绗﹀悎</el-radio>
<el-radio label="2">涓嶇鍚�</el-radio>
<el-radio label="3">涓嶉�傜敤</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="瑙勬牸鍨嬪彿:" prop="basicModel">
- <el-radio-group v-model="purchaseForm.basicModel" :disabled="operationType === 'view'" v-removeAriaHidden>
+ <el-radio-group v-model="purchaseForm.basicModel" :disabled="operationType === 'view'">
<el-radio label="1">绗﹀悎</el-radio>
<el-radio label="2">涓嶇鍚�</el-radio>
<el-radio label="3">涓嶉�傜敤</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="鏉愭枡鎵瑰彿:" prop="basicBatchNo">
- <el-radio-group v-model="purchaseForm.basicBatchNo" :disabled="operationType === 'view'" v-removeAriaHidden>
+ <el-radio-group v-model="purchaseForm.basicBatchNo" :disabled="operationType === 'view'">
<el-radio label="1">绗﹀悎</el-radio>
<el-radio label="2">涓嶇鍚�</el-radio>
<el-radio label="3">涓嶉�傜敤</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="鎵ц鏍囧噯:" prop="basicStandard">
- <el-radio-group v-model="purchaseForm.basicStandard" :disabled="operationType === 'view'"
- v-removeAriaHidden>
+ <el-radio-group v-model="purchaseForm.basicStandard" :disabled="operationType === 'view'">
<el-radio label="1">绗﹀悎</el-radio>
<el-radio label="2">涓嶇鍚�</el-radio>
<el-radio label="3">涓嶉�傜敤</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="鐢熶骇鏃ユ湡:" prop="basicDate">
- <el-radio-group v-model="purchaseForm.basicDate" :disabled="operationType === 'view'" v-removeAriaHidden>
+ <el-radio-group v-model="purchaseForm.basicDate" :disabled="operationType === 'view'">
<el-radio label="1">绗﹀悎</el-radio>
<el-radio label="2">涓嶇鍚�</el-radio>
<el-radio label="3">涓嶉�傜敤</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="渚涜揣鏁伴噺:" prop="basicNumber">
- <el-radio-group v-model="purchaseForm.basicNumber" :disabled="operationType === 'view'" v-removeAriaHidden>
+ <el-radio-group v-model="purchaseForm.basicNumber" :disabled="operationType === 'view'">
<el-radio label="1">绗﹀悎</el-radio>
<el-radio label="2">涓嶇鍚�</el-radio>
<el-radio label="3">涓嶉�傜敤</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="鏉愭枡棰滆壊:" prop="basicColor">
- <el-radio-group v-model="purchaseForm.basicColor" :disabled="operationType === 'view'" v-removeAriaHidden>
+ <el-radio-group v-model="purchaseForm.basicColor" :disabled="operationType === 'view'">
<el-radio label="1">绗﹀悎</el-radio>
<el-radio label="2">涓嶇鍚�</el-radio>
<el-radio label="3">涓嶉�傜敤</el-radio>
@@ -130,7 +129,7 @@
<el-table-column prop="inspectionItem" label="楠岃瘉椤圭洰" width="300"></el-table-column>
<el-table-column prop="result" label="楠岃瘉缁撴灉">
<template slot-scope="scope">
- <el-radio-group v-model="scope.row.result" v-removeAriaHidden :disabled="operationType === 'view'">
+ <el-radio-group v-model="scope.row.result" :disabled="operationType === 'view'">
<el-radio label="1">绗﹀悎</el-radio>
<el-radio label="2">涓嶇鍚�</el-radio>
<el-radio label="3">涓嶉�傜敤</el-radio>
@@ -149,9 +148,7 @@
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="$emit('resetPurchaseDialog')">鍙� 娑�</el-button>
- <el-button type="primary" @click="handlePurchase" :loading="handlePurchaseLoading"
- v-if="operationType === 'add'">纭�
- 瀹�</el-button>
+ <el-button type="primary" @click="handlePurchase" :loading="handlePurchaseLoading" v-if="operationType === 'add'">纭畾</el-button>
</span>
</el-dialog>
<el-dialog title="寰呴獙璇侀」鐩�" :visible.sync="factoryVerifyItemDia" width="1000px"
@@ -247,6 +244,7 @@
// 鏂规硶闆嗗悎
methods: {
async getInsOrder(operationType, item) {
+ console.log('operationType----', operationType)
this.operationType = operationType
this.info = item
// 鏌ヨ宸叉彁浜ょ殑鏁版嵁
@@ -346,7 +344,6 @@
.headLine>>>.el-form-item__content {
width: 68%;
}
-
>>>.el-form-item__content {
display: inline-block;
}
@@ -370,7 +367,7 @@
}
>>>.el-dialog__body {
- max-height: 700px;
+ max-height: 600px;
overflow-y: auto;
}
</style>
diff --git a/src/views/standard/standardLibrary/index.vue b/src/views/standard/standardLibrary/index.vue
index 21eeeb8..4ead05c 100644
--- a/src/views/standard/standardLibrary/index.vue
+++ b/src/views/standard/standardLibrary/index.vue
@@ -488,14 +488,10 @@
obtainItemParameterList,
selectTestObjectByName,
selectStandardMethods,
- addStandardMethodList,
addStandardTree,
updateStandardTree,
selectsStandardMethodByFLSSM,
upStandardProductList,
- delStandardMethodByFLSSM,
- delStandardProductByIds,
- addStandardProduct,
selectStandardProductListByMethodId,
updateSection,
upStandardProducts,
@@ -592,6 +588,7 @@
this.selectTestObjectByName();
this.selectStandardMethods();
this.selectEnumByCategoryForSonLaboratory();
+ this.selectEnumByCategoryForsampleType();
this.getStandardTemplate();
this.selectStandardMethodsSec();
this.token = {
@@ -845,22 +842,6 @@
this.standardEnum = data;
});
},
- addStandardMethodList() {
- if (this.standardId == null || this.standardId == "") {
- this.$message.error("鏍囧噯鏂规硶鏈�夋嫨");
- return;
- }
- this.addLoad2 = true;
- addStandardMethodList({
- standardId: this.standardId,
- tree: this.selectTree,
- }).then((res) => {
- this.addLoad2 = false;
- this.addStandardDia = false;
- this.$message.success("娣诲姞鎴愬姛");
- this.selectsStandardMethodByFLSSM();
- });
- },
// 鎻愪氦鍒嗙被娣诲姞
addStandardTree() {
if (this.addOb.sampleType == null || this.addOb.sampleType == "") {
@@ -1040,81 +1021,13 @@
this.$message.success("宸蹭繚瀛�");
});
},
- delStandardMethodByFLSSM(id) {
- this.$confirm("鏄惁鍒犻櫎褰撳墠鏁版嵁?", "璀﹀憡", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- this.tableLoad = true;
- delStandardMethodByFLSSM({ id: id }).then((res) => {
- if (res.code == 201) {
- return;
- }
- this.$message.success("宸插垹闄�");
- this.selectsStandardMethodByFLSSM();
- });
- })
- .catch(() => { });
- },
handleSelectionChange(val) {
this.selects = [];
val.forEach((a) => {
this.selects.push(a.id);
});
},
- delStandardProductByIds() {
- if (this.selects.length == 0) {
- this.$message.error("鏈�変腑鏁版嵁");
- return;
- }
- this.$confirm(
- "鏄惁鍒犻櫎褰撳墠閫変腑 " + this.selects.length + " 鏉℃暟鎹�?",
- "璀﹀憡",
- {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- }
- )
- .then(() => {
- this.tableLoad = true;
- delStandardProductByIds({
- ids: JSON.stringify(this.selects),
- }).then((res) => {
- if (res.code == 201) {
- return;
- }
- this.$message.success("宸插垹闄�");
- this.selectsStandardMethodByFLSSM();
- });
- })
- .catch(() => { });
- },
- addStandardProductDo() {
- let selects = this.$refs.ValueTable.multipleSelection;
- if (selects.length == 0) {
- this.$message.error("鏈�夋嫨鏁版嵁");
- return;
- }
- let select = [];
- selects.forEach((a) => {
- select.push(a.id);
- });
- this.tableLoad = true;
- addStandardProduct({
- ids: JSON.stringify(select),
- tree: this.selectTree,
- }).then((res) => {
- if (res.code == 201) {
- return;
- }
- this.$message.success("娣诲姞鎴愬姛");
- this.selectsStandardMethodByFLSSM();
- });
- this.addProductDia = false;
- },
+
refreshList() {
this.batchCopyDia = false;
const index = this.standardList.findIndex(
--
Gitblit v1.9.3