gaoluyang
2025-05-07 b4cc984336eaa33a48132397a9d71e024c5eeff1
1.监督管理评审-页面开发、联调
已添加2个文件
320 ■■■■■ 文件已修改
src/api/cnas/process/ensureResults/managementReview.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/ensureResults/managementReview/index.vue 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
  })
}
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>