From b4cc984336eaa33a48132397a9d71e024c5eeff1 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 07 五月 2025 14:44:25 +0800
Subject: [PATCH] 1.监督管理评审-页面开发、联调

---
 src/api/cnas/process/ensureResults/managementReview.js          |   36 ++++++
 src/views/CNAS/process/ensureResults/managementReview/index.vue |  284 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 320 insertions(+), 0 deletions(-)

diff --git a/src/api/cnas/process/ensureResults/managementReview.js b/src/api/cnas/process/ensureResults/managementReview.js
new file mode 100644
index 0000000..35449f4
--- /dev/null
+++ b/src/api/cnas/process/ensureResults/managementReview.js
@@ -0,0 +1,36 @@
+//璐ㄩ噺鐩戠潱绠$悊璇勫杈撳叆鏉愭枡鐩稿叧鎺ュ彛
+import request from '@/utils/request'
+
+// 鍒嗛〉鏌ヨ
+export function pageManagementReview(query) {
+  return request({
+    url: '/managementReview/pageManagementReview',
+    method: 'get',
+    params: query
+  })
+}
+// 瀵煎嚭
+export function exportManagementReview(query) {
+  return request({
+    url: '/managementReview/exportManagementReview',
+    method: 'get',
+    params: query,
+    responseType: 'blob'
+  })
+}
+// 鍒犻櫎
+export function deleteManagementReview(query) {
+  return request({
+    url: '/managementReview/deleteManagementReview',
+    method: 'delete',
+    params: query
+  })
+}
+// 鏂板淇敼鎻愪氦
+export function saveOrUpdateManagementReview(query) {
+  return request({
+    url: '/managementReview/saveOrUpdateManagementReview',
+    method: 'post',
+    data: query
+  })
+}
diff --git a/src/views/CNAS/process/ensureResults/managementReview/index.vue b/src/views/CNAS/process/ensureResults/managementReview/index.vue
new file mode 100644
index 0000000..9e7a2a9
--- /dev/null
+++ b/src/views/CNAS/process/ensureResults/managementReview/index.vue
@@ -0,0 +1,284 @@
+<template>
+  <div class="capacity-scope">
+    <div style="display: flex;justify-content: space-between">
+      <div style="display: flex;">
+        <div style="margin-bottom: 18px;margin-right: 10px;display: flex;align-items: center;line-height: 32px;">
+          <span style="width: 88px;font-size: 14px;font-weight: 700;color: #606266;">鏂囦欢鍚嶇О</span>
+          <el-input v-model="queryParams.fileName" clearable placeholder="璇疯緭鍏�" size="small"
+                    @keyup.enter.native="refreshTable()"></el-input>
+        </div>
+        <div style="line-height: 30px;">
+          <el-button type="primary" size="mini" @click="refreshTable">鏌ヨ</el-button>
+          <el-button size="mini" @click="refresh">閲嶇疆</el-button>
+        </div>
+      </div>
+      <div style="line-height: 30px;">
+        <el-button :loading="outLoading" size="small" type="primary" style="margin-right: 10px" @click="openForm('add')">鏂板</el-button>
+      </div>
+    </div>
+    <div class="table">
+      <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 270px)'"
+                  :page="page" @pagination="pagination"></lims-table>
+    </div>
+    <el-dialog :visible.sync="addDialogVisible" title="璇勪环" width="900px" @close="closeDia">
+      <el-form ref="form" :model="form" label-position="right" label-width="120px" :rules="formRules">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鏂囦欢鍚嶇О:" prop="fileName">
+              <el-input v-model="form.fileName" placeholder="璇疯緭鍏�" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="璁″垝鍐呭:" prop="implementationContent">
+              <el-input v-model="form.implementationContent" placeholder="璇疯緭鍏�"
+                        size="small"
+                        :rows="6"
+                        type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="鍔ㄦ�佸唴瀹�:" prop="dynamicContent">
+              <el-input v-model="form.dynamicContent" placeholder="璇疯緭鍏�"
+                        size="small"
+                        :rows="6"
+                        type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鐩戠潱浜�:" prop="supervisor">
+              <el-select v-model="form.supervisor"
+                         clearable filterable
+                         placeholder="璇烽�夋嫨" size="small" style="width: 100%;">
+                <el-option v-for="item in responsibleOptions" :key="item.name" :label="item.name" :value="item.name">
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璐ㄩ噺璇勫鏃ユ湡:" prop="superviseDate">
+              <el-date-picker v-model="form.superviseDate" format="yyyy-MM-dd"
+                              placeholder="閫夋嫨鏃ユ湡" size="small" value-format="yyyy-MM-dd"
+                              type="date" style="width: 100%"></el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="closeDia">鍙� 娑�</el-button>
+        <el-button :loading="addLoading" type="primary" @click="handleAdd">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import limsTable from "@/components/Table/lims-table.vue";
+import filePreview from "@/components/Preview/filePreview.vue";
+import {
+  exportProcessEvaluate,
+  doProcessEvaluate,
+  delProcessEvaluate,
+  pageProcessEvaluate,
+} from '@/api/cnas/process/uncertainty.js'
+import { mapGetters } from "vuex";
+import {
+  deleteManagementReview,
+  exportManagementReview,
+  pageManagementReview, saveOrUpdateManagementReview
+} from "@/api/cnas/process/ensureResults/managementReview";
+import {selectUserCondition} from "@/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment";
+export default {
+  name: 'Uncertainty',
+  components: {
+    limsTable,
+    filePreview
+  },
+  data() {
+    return {
+      addPower: false,
+      outPower: false,
+      outLoading: false,
+      addDialogVisible: false,
+      operationType: '',
+      addInfo: {},
+      addLoading: false,
+      queryParams: {},
+      tableData: [],
+      column: [
+        { label: "鏂囦欢鍚嶇О", prop: "fileName" },
+        { label: "鐩戠潱浜�", prop: "supervisor" },
+        { label: "璐ㄩ噺璇勫鏃ユ湡", prop: "superviseDate" },
+        {
+          dataType: "action",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "缂栬緫",
+              type: "text",
+              clickFun: (row) => {
+                this.openForm('edit', row);
+              },
+            },
+            {
+              name: "鍒犻櫎",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDelete(row);
+              },
+            },
+            {
+              name: "瀵煎嚭",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDown0(row);
+              },
+            },
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading: false,
+      form: {
+        fileName: '',
+        implementationContent: '',
+        dynamicContent: '',
+        supervisor: '',
+        superviseDate: '',
+      },
+      formRules: {
+        fileName: [{required: true, message: '璇峰~鍐欐枃浠跺悕绉�',trigger: 'blur'}],
+        implementationContent: [{required: true, message: '璇峰~鍐欒鍒掑唴瀹�',trigger: 'blur'}],
+        dynamicContent: [{required: true, message: '璇峰~鍔ㄦ�佸唴瀹�',trigger: 'blur'}],
+        supervisor: [{required: true, message: '璇烽�夋嫨鐩戠潱浜�',trigger: 'change'}],
+        superviseDate: [{required: true, message: '璇烽�夋嫨鏃ユ湡',trigger: 'change'}],
+      },
+      responsibleOptions: [],
+    }
+  },
+  // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭�
+  computed: {
+    ...mapGetters(["userId"]),
+  },
+  mounted() {
+    this.getList()
+  },
+  methods: {
+    getList() {
+      this.tableLoading = true;
+      let param = { ...this.queryParams, ...this.page };
+      delete param.total;
+      pageManagementReview({ ...param })
+        .then((res) => {
+          this.tableLoading = false;
+          if (res.code === 200) {
+            this.tableData = res.data.records;
+            this.page.total = res.data.total;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading = false;
+        });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.getList();
+    },
+    refresh() {
+      this.queryParams = {};
+      this.page.current = 1;
+      this.getList();
+    },
+    refreshTable() {
+      this.page.current = 1;
+      this.getList();
+    },
+    handleDown0(row) {
+      exportManagementReview({managementReviewId: row.managementReviewId}).then(res => {
+        const blob = new Blob([res], { type: 'application/msword' });
+        this.$download.saveAs(blob, row.fileName + '.docx');
+      })
+    },
+    // 鎵撳紑鏂板缂栬緫寮规
+    openForm (type, row) {
+      this.addDialogVisible = true;
+      this.$nextTick(() => {
+        this.form = {}
+        this.$refs['form'].resetFields();
+        if (type === 'edit') {
+          this.form = {...row}
+        }
+        this.operationType = type;
+        this.getUserList()
+      })
+    },
+    // 鎻愪氦琛ㄥ崟
+    handleAdd() {
+      this.addLoading = true;
+      saveOrUpdateManagementReview(this.form).then((res) => {
+        this.addLoading = false;
+        this.$message.success('璇勪环鎴愬姛');
+        this.closeDia();
+        this.refreshTable()
+      })
+    },
+    closeDia() {
+      this.$refs['form'].resetFields();
+      this.addDialogVisible = false;
+    },
+    handleDelete(row) {
+      this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      }).then(() => {
+        deleteManagementReview({ managementReviewId: row.managementReviewId }).then((res) => {
+          this.$message.success("鍒犻櫎鎴愬姛");
+          this.refresh();
+        });
+      }).catch(() => { });
+    },
+    getUserList(){
+      selectUserCondition({type: 2}).then(res => {
+        if (res.code == 200) {
+          this.responsibleOptions = res.data
+        }
+      })
+    },
+  }
+}
+</script>
+
+<style scoped>
+.search {
+  height: 46px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.search_thing {
+  width: 350px;
+  display: flex;
+  align-items: center;
+}
+
+.search_label {
+  width: 80px;
+  font-size: 14px;
+  text-align: right;
+}
+
+.search_input {
+  width: calc(100% - 80px);
+}
+</style>

--
Gitblit v1.9.3