吴羡
13 小时以前 c6e96cdb8b1cfb51e9a45bf86c38d1353e983127
src/views/CNAS/resourceDemand/device/component/equipmentCalibrationPlan.vue
@@ -1,114 +1,84 @@
<template>
  <!--  设备校准计划-->
  <div>
    <div>
      <div style="margin: 10px 0;display: flex;align-items: center;justify-content: space-between;">
        <div class="title">
          <span style="font-weight: bold">年度计划表</span>
    <div style="margin: 10px 0 14px;">
      <div class="plan-top">
        <div class="plan-top-left">
          <span class="title" style="margin-bottom: 0;">{{ planInfo.planName || (planYear + '年度设备校准计划') }}</span>
          <el-select v-model="planYear" size="small" style="width: 110px; margin-left: 16px;" @change="handleYearChange">
            <el-option v-for="y in yearOptions" :key="y" :label="y" :value="y"></el-option>
          </el-select>
        </div>
        <div>
          <el-button size="small" type="primary" @click="getYearTableData">刷新</el-button>
          <el-button size="small" type="primary" @click="addYearPlan('add')">新增</el-button>
          <!--          <el-button size="small" type="primary" @click="record">导入</el-button>-->
          <el-button size="small" type="primary" @click="loadPlan">刷新</el-button>
          <el-button size="small" type="primary" :disabled="planInfo.ratifyStatus === 1"
            @click="tellApprove">批准通知</el-button>
          <el-button size="small" type="primary"
            :disabled="planInfo.ratifyStatus === 1 || userId != planInfo.ratifyUserId" @click="handleApprove">批准</el-button>
          <el-button size="small" type="primary" @click="downLoadPost">导出</el-button>
        </div>
      </div>
      <div class="plan-info-bar">
        <span>编制人:{{ planInfo.writeName || '—' }}</span>
        <span>编制日期:{{ planInfo.writeTimeStr || '—' }}</span>
        <span v-if="planInfo.ratifyStatus === 1">批准状态:<el-tag type="success">批准</el-tag></span>
        <span v-else-if="planInfo.ratifyStatus === 0">批准状态:<el-tag type="danger">不批准</el-tag></span>
        <span v-if="planInfo.ratifyRemark">批准内容:{{ planInfo.ratifyRemark }}</span>
        <span v-if="isRatified && planInfo.ratifyName">批准人:{{ planInfo.ratifyName }}</span>
        <span v-if="isRatified && planInfo.ratifyTimeStr">批准时间:{{ planInfo.ratifyTimeStr }}</span>
      </div>
    </div>
    <div class="search">
      <div>
        <el-table ref="yearTable" v-loading="yearTableDataLoading"
                  :data="yearTableData" height="calc(60vh - 16em)"
 border
                  highlight-current-row @current-change="currentChange">
          <!-- 表格列 -->
          <el-table-column align="center" header-align="center" label="序号" prop="prop" type="index"
            width="70"></el-table-column>
          <el-table-column label="年份" min-width="80" prop="planYear"></el-table-column>
          <el-table-column label="计划名称" min-width="180" prop="planName" show-overflow-tooltip></el-table-column>
          <el-table-column label="编制人" min-width="100" prop="writeName"></el-table-column>
          <el-table-column label="编制日期" min-width="160" prop="writeTime"></el-table-column>
          <el-table-column label="批准状态" min-width="100" prop="ratifyStatus">
            <template #default="scope">
              <el-tag v-if="scope.row.ratifyStatus === 1" type="success">批准</el-tag>
              <el-tag v-if="scope.row.ratifyStatus === 0" type="danger">不批准</el-tag>
            </template>
          </el-table-column>
          <el-table-column label="批准内容" min-width="150" prop="ratifyRemark"></el-table-column>
          <el-table-column label="批准人" min-width="100" prop="ratifyName"></el-table-column>
          <el-table-column label="批准时间" min-width="150" prop="ratifyTime"></el-table-column>
          <!-- 操作按钮 -->
          <el-table-column align="center" fixed="right" label="操作" min-width="240">
            <template #default="scope">
              <el-button :disabled="scope.row.ratifyStatus === 1" size="small" link type="primary"
                @click="addYearPlan('edit', scope.row)">编辑</el-button>
              <el-button :disabled="scope.row.ratifyStatus === 1" size="small" link type="primary"
                @click="tellApprove(scope.row.planId)">批准通知</el-button>
              <el-button :disabled="scope.row.ratifyStatus === 1 || userId != scope.row.ratifyUserId" size="small"
                link type="primary" @click="handleApprove(scope.row.planId)">批准</el-button>
              <el-button size="small" link type="primary" @click="downLoadPost(scope.row.planId)">导出</el-button>
              <el-button :disabled="scope.row.ratifyStatus === 1" size="small" link type="danger"
                @click="deleteFun(scope.row.planId)">删除</el-button>
            </template>
          </el-table-column>
        </el-table>
        <el-pagination :current-page="1" :page-size="pagination.size" :page-sizes="[10, 20, 30, 50, 100]"
                       background :total="pagination.total" layout="->,total, sizes, prev, pager, next, jumper"
                       @size-change="handleSizeChange" @current-change="handleCurrentChange">
        </el-pagination>
        <el-form :model="searchForm" ref="searchForm" size="small" :inline="true">
          <el-form-item label="设备名称及型号" prop="deviceName">
            <el-input v-model="searchForm.deviceName" clearable @keyup.enter="handleQuery"
              size="small"></el-input>
          </el-form-item>
          <el-form-item label="仪器编号" prop="deviceNumber">
            <el-input v-model="searchForm.deviceNumber" @keyup.enter="handleQuery" clearable
              size="small"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" size="small" @click="handleQuery">查询</el-button>
            <el-button size="small" @click="reset">重置</el-button>
          </el-form-item>
        </el-form>
      </div>
    </div>
    <div>
      <div class="title">
        <span style="font-weight: bold">年度计划明细表</span>
      </div>
      <div class="search">
        <div>
          <el-form :model="searchForm" ref="searchForm" size="small" :inline="true">
            <el-form-item label="设备名称及型号" prop="deviceName">
              <el-input v-model="searchForm.deviceName" clearable
                        @keyup.enter="getYearTableDetailData(currentRow)" size="small"></el-input>
            </el-form-item>
            <el-form-item label="仪器编号" prop="deviceNumber">
              <el-input v-model="searchForm.deviceNumber"
                        @keyup.enter="getYearTableDetailData(currentRow)" clearable size="small"></el-input>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" size="small" @click="getYearTableDetailData(currentRow)">查询</el-button>
              <el-button size="small" @click="reset">重置</el-button>
            </el-form-item>
          </el-form>
        </div>
        <div>
          <el-button size="small" type="primary" @click="handleForm('add')">新增</el-button>
        </div>
      </div>
      <div>
        <el-table ref="yearTableDetailData" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData"
 border
                  :height="'calc(100vh - 34em)'" style="width: 100% ;">
          <!-- 表格列 -->
          <el-table-column align="center" header-align="center" label="序号" prop="prop" type="index"
            width="70"></el-table-column>
          <el-table-column label="设备名称及型号" min-width="180" prop="deviceName" show-overflow-tooltip></el-table-column>
          <el-table-column label="设备数量" min-width="180" prop="deviceAmount"></el-table-column>
          <el-table-column label="仪器编号" min-width="150" prop="deviceNumber"></el-table-column>
          <el-table-column label="检定单位" min-width="150" prop="verificationUnit"> </el-table-column>
          <el-table-column label="检定周期" min-width="150" prop="verificationCycles"></el-table-column>
          <el-table-column label="最近检定时间" min-width="150" prop="lastDate"></el-table-column>
          <el-table-column label="本年计划校准时间" min-width="150" prop="planDate"></el-table-column>
          <el-table-column label="备注" min-width="150" prop="remark"></el-table-column>
          <!-- 操作按钮 -->
          <el-table-column align="center" fixed="right" label="操作" min-width="140">
            <template #default="scope">
              <el-button size="small" link type="primary" @click="handleForm('edit', scope.row)">编辑</el-button>
              <el-button size="small" link type="primary" @click="handleForm('view', scope.row)">查看</el-button>
              <el-button size="small" link type="danger"
                @click="deleteFun1(scope.row.planDetailId)">删除</el-button>
            </template>
          </el-table-column>
        </el-table>
        <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]"
                       background :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper"
                       @size-change="handleSizeChange1" @current-change="handleCurrentChange1">
        </el-pagination>
      </div>
      <el-table ref="yearTableDetailData" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData" border
        :row-class-name="tableRowClassName" :height="'calc(100vh - 29em)'" style="width: 100% ;">
        <!-- 表格列 -->
        <el-table-column align="center" header-align="center" label="序号" prop="prop" type="index"
          width="70"></el-table-column>
        <el-table-column label="设备名称及型号" min-width="180" prop="deviceName" show-overflow-tooltip></el-table-column>
        <el-table-column label="设备数量" min-width="90" prop="deviceAmount"></el-table-column>
        <el-table-column label="仪器编号" min-width="150" prop="deviceNumber"></el-table-column>
        <el-table-column label="检定单位" min-width="150" prop="verificationUnit"> </el-table-column>
        <el-table-column label="检定周期" min-width="100" prop="verificationCycles"></el-table-column>
        <el-table-column label="最近检定时间" min-width="130" prop="lastDate"
          :formatter="formatDateCell"></el-table-column>
        <el-table-column label="本年计划校准时间" min-width="130" prop="planDate"
          :formatter="formatDateCell"></el-table-column>
        <el-table-column label="备注" min-width="130" prop="remark"></el-table-column>
        <!-- 操作按钮 -->
        <el-table-column align="center" fixed="right" label="操作" min-width="210">
          <template #default="scope">
            <el-button size="small" link type="primary" :disabled="!scope.row.deviceId"
              @click="handleExecute(scope.row)">执行</el-button>
            <el-button size="small" link type="primary" :disabled="planInfo.ratifyStatus === 1"
              @click="handleForm('edit', scope.row)">编辑</el-button>
            <el-button size="small" link type="primary" @click="handleForm('view', scope.row)">查看</el-button>
            <el-button size="small" link type="danger" :disabled="planInfo.ratifyStatus === 1"
              @click="deleteFun1(scope.row.planDetailId)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <el-pagination :current-page="pagination1.current" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]"
        background :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper"
        @size-change="handleSizeChange1" @current-change="handleCurrentChange1">
      </el-pagination>
    </div>
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" v-model="dialogVisible" title="设备校准计划"
      width="80%" @close="resetForm">
@@ -162,7 +132,7 @@
          </el-form-item>
        </el-col>
      </el-form>
      <template #footer><span  class="dialog-footer">
      <template #footer><span class="dialog-footer">
        <el-button @click="resetForm">取 消</el-button>
        <el-button :loading="submitFormLoading" type="primary" @click="submitForm" v-if="operationType !== 'view'">确
          认</el-button>
@@ -173,7 +143,7 @@
        批准备注:
        <el-input v-model="ratifyRemark" type="textarea"></el-input>
      </span>
      <template #footer><span  class="dialog-footer">
      <template #footer><span class="dialog-footer">
        <el-button :loading="approvalLoading" @click="handleApproval(0)">不批准</el-button>
        <el-button :loading="approvalLoading" type="primary" @click="handleApproval(1)">批 准</el-button>
      </span></template>
@@ -186,53 +156,36 @@
          </el-option>
        </el-select>
      </span>
      <template #footer><span  class="dialog-footer">
      <template #footer><span class="dialog-footer">
        <el-button :loading="notificationLoading" @click="closeNotificationDia">取 消</el-button>
        <el-button :loading="notificationLoading" type="primary" @click="notification">提 交</el-button>
      </span></template>
    </el-dialog>
    <!--上传报告-->
    <el-dialog v-model="uploadDia" title="数据导入" width="500px">
      年份:
      <el-date-picker v-model="planYear" type="year" value-format="YYYY" clearable format="YYYY" placeholder="选择年">
      </el-date-picker>
      <div style="margin: 0 auto;">
        <el-upload ref="upload1" :action="action" :auto-upload="false" :file-list="fileList" :headers="uploadHeader"
          :limit="1" accept='.doc,.docx' :on-change="beforeUpload" :on-error="onError" :on-success="handleSuccessUp"
          drag name="file">
          <lims-icon name="el-icon-upload"></lims-icon>
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        </el-upload>
      </div>
      <template #footer><span  class="dialog-footer">
        <el-button @click="uploadDia = false">取 消</el-button>
        <el-button :loading="uploading" type="primary" @click="submitUpload()">上 传</el-button>
      </span></template>
    </el-dialog>
    <add-year-plan-dia v-if="addYearPlanDia" ref="addYearPlanDia" @closeDia="closeDia"></add-year-plan-dia>
    <!-- 添加/查看校准记录弹窗 -->
    <calibration-record-dia ref="calibrationRecordDia" @success="getYearTableDetailData"></calibration-record-dia>
  </div>
</template>
<script>
import AddYearPlanDia from "./addYearPlanDia.vue";
import AddVerificationYearPlanDia from "./addVerificationYearPlanDia.vue";
import CalibrationRecordDia from "./calibrationRecordDia.vue";
import {
  pageDeviceCalibrationPlan,
  getCalibrationPlanByYear,
  submiatRatifyDeviceCalibrationPlan,
  exportDeviceCalibrationPlanDetail,
  delDeviceCalibrationPlan,
  delDeviceCalibrationPlanDetail,
  pageDeviceCalibrationPlanDetail,
  addDeviceCalibrationPlanDetail,
  updateDeviceCalibrationPlanDetail,
  ratifyDeviceCalibrationPlan,
} from '@/api/cnas/resourceDemand/device.js'
import { selectUserCondition } from "@/api/performance/class";
import { mapGetters } from "@/utils/store-compat";
import { formatDateOnly } from './dateFormat'
import { saveBlobOrShowError } from '@/utils/saveBlob'
export default {
  name: "equipment-calibration-plan",
  // import 引入的组件需要注入到对象中才能使用
  components: { AddVerificationYearPlanDia, AddYearPlanDia },
  components: { CalibrationRecordDia },
  props: {
    clickNodeVal: {
      type: Object,
@@ -244,18 +197,15 @@
  data() {
    // 这里存放数据
    return {
      planYear: '',
      yearOptions: [],
      planInfo: {},
      dialogVisible: false,
      searchForm: {
        deviceName: '',
        deviceNumber: '',
      },
      yearTableData: [],
      yearTableDetailData: [],
      pagination: {
        size: 10,
        current: 1,
        total: 0,
      },
      pagination1: {
        size: 10,
        current: 1,
@@ -278,66 +228,165 @@
        deviceNumber: [{ required: true, message: '请填写仪器编号', trigger: 'blur' }],
        planDate: [{ required: true, message: '请选择日期', trigger: 'change' }],
      },
      yearTableDataLoading: false,
      yearTableDetailDataLoading: false,
      currentRow: {},
      approvalDialog: false,
      approvalLoading: false,
      submitFormLoading: false,
      ratifyRemark: '',
      currentRowId: '',
      uploadDia: false,
      uploading: false,
      addYearPlanDia: false,
      fileList: [],
      planYear: '',
      responsibleOptions: [],
      notificationDia: false,
      notificationLoading: false,
      ratifyUserId: '',
      planId: ''
    }
  },
  mounted() {
    this.getYearTableData()
    this.loadYearOptions()
  },
  // 方法集合
  methods: {
    // 查询年度计划表
    getYearTableData() {
      this.yearTableDataLoading = true
    // 年份下拉选项:已有计划年份 + 当前年份
    loadYearOptions() {
      pageDeviceCalibrationPlan({
        current: 1,
        size: 99,
      }).then(res => {
        let years = []
        if (res.code == 200) {
          this.yearTableData = res.data.records
          this.pagination.total = res.data.total
          if (this.yearTableData.length > 0) {
            this.currentRow = this.yearTableData[0]
            this.$refs.yearTable.setCurrentRow(this.currentRow)
          }
          years = (res.data.records || []).map(r => r.planYear).filter(Boolean)
        }
        this.yearTableDataLoading = false
      }).catch(err => {
        this.yearTableDataLoading = false
        const currentYear = String(new Date().getFullYear())
        if (years.indexOf(currentYear) === -1) {
          years.push(currentYear)
        }
        this.yearOptions = [...new Set(years)].sort((a, b) => b.localeCompare(a))
        this.planYear = currentYear
        this.loadPlan()
      })
    },
    // 分页
    handleSizeChange(val) {
      this.pagination.size = val
      this.getYearTableData()
    // 切换年份
    handleYearChange() {
      this.pagination1.current = 1
      this.loadPlan()
    },
    // 查询年份计划(不存在自动创建并补全到点明细),随后刷新明细
    loadPlan() {
      getCalibrationPlanByYear({ planYear: this.planYear }).then(res => {
        if (res.code == 200) {
          this.planInfo = res.data || {}
        }
        this.getYearTableDetailData()
      }).catch(() => {
        this.planInfo = {}
        this.yearTableDetailData = []
        this.pagination1.total = 0
        this.yearTableDetailDataLoading = false
      })
    },
    // 查询条件变化后从第一页开始查
    handleQuery() {
      this.pagination1.current = 1
      this.getYearTableDetailData()
    },
    // 明细-查询
    getYearTableDetailData() {
      if (!this.planInfo.planId) {
        return
      }
      this.yearTableDetailDataLoading = true
      pageDeviceCalibrationPlanDetail({
        current: this.pagination1.current,
        size: this.pagination1.size,
        planId: this.planInfo.planId,
        deviceName: this.searchForm.deviceName,
        deviceNumber: this.searchForm.deviceNumber,
      }).then(res => {
        if (res.code == 200) {
          this.yearTableDetailData = res.data.records
          this.pagination1.total = res.data.total
        }
        this.yearTableDetailDataLoading = false
      }).catch(err => {
        this.yearTableDetailDataLoading = false
      })
    },
    formatDateCell(row, column, cellValue) {
      return formatDateOnly(cellValue)
    },
    // 到点需校准的行标红
    tableRowClassName({ row }) {
      return row.redFlag === 1 ? 'red-row' : ''
    },
    reset() {
      this.searchForm = {
        deviceName: '',
        deviceNumber: '',
      }
      this.pagination1.current = 1
      this.getYearTableDetailData()
    },
    // 分页
    handleCurrentChange(val) {
      this.pagination.current = val
      this.getYearTableData()
    handleSizeChange1(val) {
      this.pagination1.size = val
      this.getYearTableDetailData()
    },
    // 分页
    handleCurrentChange1(val) {
      this.pagination1.current = val
      this.getYearTableDetailData()
    },
    // 执行:打开校准记录弹窗录入
    handleExecute(row) {
      this.$refs.calibrationRecordDia.open(row.deviceId, 'add')
    },
    // 打开明细弹框
    handleForm(type, row) {
      this.operationType = type
      this.dialogVisible = true
      this.$nextTick(() => {
        this.form = this.HaveJson(row)
      })
    },
    // 提交表单
    submitForm() {
      this.$refs.modelForm.validate(valid => {
        if (valid) {
          this.submitFormLoading = true
          updateDeviceCalibrationPlanDetail(this.form).then(res => {
            if (res.code == 200) {
              this.$message.success('修改成功')
              this.dialogVisible = false
              this.getYearTableDetailData()
            }
            this.submitFormLoading = false
          }).catch(err => {
            this.submitFormLoading = false
          })
        }
      })
    },
    // 明细-删除
    deleteFun1(id) {
      this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delDeviceCalibrationPlanDetail({ planDetailsId: id }).then(res => {
          this.$message.success('删除成功!');
          this.getYearTableDetailData()
        });
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    // 打开提交批准弹框
    tellApprove(planId) {
    tellApprove() {
      this.getUserList()
      this.notificationDia = true
      this.planId = planId
    },
    // 关闭提交批准弹框
    closeNotificationDia() {
@@ -353,184 +402,23 @@
      this.notificationLoading = true
      submiatRatifyDeviceCalibrationPlan({
        ratifyUserId: this.ratifyUserId,
        planId: this.planId,
        planId: this.planInfo.planId,
      }).then(res => {
        this.notificationLoading = false
        if (res.code == 200) {
          this.closeNotificationDia()
          this.getYearTableData()
          this.loadPlan()
        }
      }).catch(err => {
        this.notificationLoading = false
      })
    },
    // 年度计划表-批准
    handleApprove(id) {
      this.currentRowId = id
    // 批准
    handleApprove() {
      this.currentRowId = this.planInfo.planId
      this.approvalDialog = true
    },
    // 年度计划表-导出
    downLoadPost(planId) {
      exportDeviceCalibrationPlanDetail({ planId }).then(res => {
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '设备校准计划.docx')
      })
    },
    // 年度计划表-删除
    deleteFun(id) {
      this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delDeviceCalibrationPlan({ planId: id }).then(res => {
          this.$message.success('删除成功!');
          this.getYearTableData();
        });
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    // 年度计划详情表-删除
    deleteFun1(id) {
      this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delDeviceCalibrationPlanDetail({ planDetailsId: id }).then(res => {
          this.$message.success('删除成功!');
          this.getYearTableDetailData(this.currentRow)
        });
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    currentChange(row) {
      this.currentRow = row
      this.getYearTableDetailData(this.currentRow)
    },
    getYearTableDetailData(row) {
      this.yearTableDetailDataLoading = true
      pageDeviceCalibrationPlanDetail({
        current: this.pagination1.current,
        size: this.pagination1.size,
        planId: row.planId,
        deviceName: this.searchForm.deviceName,
        deviceNumber: this.searchForm.deviceNumber,
      }).then(res => {
        if (res.code == 200) {
          this.yearTableDetailData = res.data.records
          this.pagination1.total = res.data.total
        }
        this.yearTableDetailDataLoading = false
      }).catch(err => {
        this.yearTableDetailDataLoading = false
      })
    },
    reset() {
      this.searchForm = {
        deviceName: '',
        deviceNumber: '',
      }
      this.getYearTableDetailData(this.currentRow)
    },
    // 分页
    handleSizeChange1(val) {
      this.pagination1.size = val
      this.getYearTableDetailData(this.currentRow)
    },
    // 分页
    handleCurrentChange1(val) {
      this.pagination1.current = val
      this.getYearTableDetailData(this.currentRow)
    },
    // 打开弹框
    handleForm(type, row) {
      this.operationType = type
      this.dialogVisible = true
      this.form.planId = this.currentRow.planId
      if (this.operationType !== 'add') {
        this.$nextTick(() => {
          this.form = this.HaveJson(row)
        })
      } else {
        this.form = {
          deviceName: '',
          deviceAmount: '',
          deviceNumber: '',
          verificationUnit: '',
          verificationCycles: '',
          lastDate: '',
          planDate: '',
          remark: '',
          planId: this.currentRow.planId,
          planDetailId: '',
        }
      }
    },
    // 提交表单
    submitForm() {
      this.$refs.modelForm.validate(valid => {
        if (valid) {
          if (this.operationType === 'add') {
            this.submitFormLoading = true
            addDeviceCalibrationPlanDetail(this.form).then(res => {
              if (res.code == 200) {
                this.$message.success('新增成功')
                this.dialogVisible = false
                this.getYearTableData()
              }
              this.submitFormLoading = false
            }).catch(err => {
              this.submitFormLoading = false
            })
          } else {
            this.submitFormLoading = true
            updateDeviceCalibrationPlanDetail(this.form).then(res => {
              if (res.code == 200) {
                this.$message.success('新增成功')
                this.dialogVisible = false
                this.getYearTableData()
              }
              this.submitFormLoading = false
            }).catch(err => {
              this.submitFormLoading = false
            })
          }
        }
      })
    },
    // 打开新增弹框
    addYearPlan(type, row) {
      this.addYearPlanDia = true
      this.$nextTick(() => {
        this.$refs.addYearPlanDia.openDialog(type, row)
      })
    },
    closeDia() {
      this.addYearPlanDia = false
      this.getYearTableData()
    },
    submitUpload() {
      if (!this.planYear) {
        this.$message.warning('请选择年份')
        return;
      }
      if (this.$refs.upload1.uploadFiles.length === 0) {
        this.$message.error('未选择文件')
        return
      }
      this.uploading = true
      this.$refs.upload1.submit();
    },
    // 提交批准
    // 提交批准结果
    handleApproval(status) {
      const personTrainingUpdateDto = {
        planId: this.currentRowId,
@@ -542,43 +430,22 @@
        if (res.code === 200) {
          this.$message.success('提交成功!');
          this.approvalDialog = false
          this.getYearTableData();
          this.loadPlan()
        }
        this.approvalLoading = false
      }).catch(() => {
        this.approvalLoading = false
      })
    },
    // 导出
    downLoadPost() {
      exportDeviceCalibrationPlanDetail({ planId: this.planInfo.planId }).then(res => {
        saveBlobOrShowError(res, '设备校准计划.docx', 'application/msword')
      }).catch(() => { })
    },
    resetForm() {
      this.$refs.modelForm.resetFields();
      this.dialogVisible = false
    },
    // 打开报告弹框
    record(row) {
      this.uploadDia = true
    },
    // 导入流程
    beforeUpload(file) {
      if (file.size > 1024 * 1024 * 10) {
        this.$message.error('上传文件不超过10M');
        this.$refs.upload.clearFiles()
        return false;
      } else {
        return true;
      }
    },
    onError(err, file, fileList) {
      this.$message.error('上传失败')
      this.$refs.upload.clearFiles()
    },
    handleSuccessUp(response) {
      this.uploading = false;
      if (response.code == 200) {
        this.$message.success('上传成功');
        this.getYearTableData()
      } else {
        this.$message.error('上传失败')
      }
    },
    // 获取负责人信息接口
    getUserList() {
@@ -596,12 +463,12 @@
      });
    }
  },
  // 用于上传文件的信息
  computed: {
    action() {
      return this.javaApi + '/deviceCalibrationPlan/importDeviceCalibrationPlan' + '?planYear=' + this.planYear
    },
    ...mapGetters(["userId"]),
    // 是否已完成审批(批准/不批准)
    isRatified() {
      return this.planInfo.ratifyStatus === 0 || this.planInfo.ratifyStatus === 1;
    },
  },
}
</script>
@@ -610,7 +477,7 @@
.title {
  position: relative;
  font-size: 16px;
  color: #333;
  color: var(--lims-text);
  font-weight: 400;
  padding-left: 10px;
  margin-bottom: 10px;
@@ -626,9 +493,39 @@
  background-color: var(--el-color-primary);
  border-radius: 2px;
}
.plan-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
}
.plan-top-left {
  display: flex;
  align-items: center;
}
.plan-info-bar {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 32px;
  background: #f5f7fa;
  border-radius: 4px;
  padding: 10px 16px;
  margin-top: 14px;
  font-size: 14px;
  color: #606266;
}
.search {
  height: 46px;
  display: flex;
  justify-content: space-between;
  margin-bottom: 10px;
}
:deep(.red-row td) {
  background: #ffcccc !important;
}
</style>