src/views/CNAS/resourceDemand/device/component/files.vue
@@ -40,10 +40,6 @@
            <p>{{ Mdata.managementNumber }}</p>
          </div>
          <div class="form-item">
            <label>所属部门</label>
            <p>{{ Mdata.laboratoryName }}</p>
          </div>
          <div class="form-item">
            <label>生产厂家</label>
            <!-- <p>{{ Mdata.manufacturer }}</p> -->
            <el-tooltip class="item" :content="Mdata.manufacturer">
@@ -222,7 +218,9 @@
        <el-col :span="7">
          <el-form :model="editData" label-width="116px" ref="rules2" :rules="rules1">
            <el-form-item label="校准服务机构:">
              <el-input v-model="editData.calibrationServices" size="small"></el-input>
              <el-select v-model="editData.calibrationServices" clearable filterable size="small" style="width: 100%">
                <el-option v-for="name in calibrationServiceOptions" :key="name" :label="name" :value="name"></el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="资产编码:">
              <el-input v-model="editData.assetCode" size="small"></el-input>
@@ -263,14 +261,6 @@
        <!-- 右边布局 -->
        <el-col :span="7">
          <el-form :model="editData" label-width="140px" ref="ruleForm" :rules="rules1">
            <!-- 实验室列表 -->
            <el-form-item label="所属部门:" prop="subordinateDepartmentsId">
              <el-select v-model="editData.subordinateDepartmentsId" placeholder="请选择" size="small" style="width:100%">
                <el-option v-for="item in subordinateDepartmentsList" :key="item.value" :label="item.label"
                  :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="检测项目:">
              <el-cascader v-model="editData.insProductIds" :options="options" :show-all-levels="false" :props="props"
                placeholder="请选择" size="small" style="width:100%;" :collapse-tags="true" separator="," filterable
@@ -304,9 +294,35 @@
            <el-form-item label="校准周期(月):" prop="calibrationDate">
              <el-input v-model="editData.calibrationDate" size="small"></el-input>
            </el-form-item>
            <el-form-item label="最近保养日期:">
              <el-date-picker style="width:100%" v-model="editData.lastMaintenanceDate" @change="calcNextDate(editData)"
                format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="选择日期">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="下次保养日期:">
              <el-date-picker :disabled="true" style="width:100%" v-model="editData.nextMaintenanceDate"
                format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="选择日期">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="保养周期(月):">
              <el-input v-model="editData.maintenanceCycle" size="small" @change="calcNextDate(editData)"></el-input>
            </el-form-item>
            <el-form-item label="最近核查日期:">
              <el-date-picker style="width:100%" v-model="editData.lastExamineDate" @change="calcNextDate(editData)"
                format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="选择日期">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="下次核查日期:">
              <el-date-picker :disabled="true" style="width:100%" v-model="editData.nextExamineDate"
                format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" type="date" size="small" placeholder="选择日期">
              </el-date-picker>
            </el-form-item>
            <el-form-item label="核查周期(月):">
              <el-input v-model="editData.examineCycle" size="small" @change="calcNextDate(editData)"></el-input>
            </el-form-item>
            <el-form-item label="被授权人:">
              <el-select v-model="editData.authorizedPerson" multiple placeholder="请选择" size="small" style="width:100%">
                <el-option v-for="item in responsiblePersonList" :key="item.name" :label="item.name" :value="item.id">
                <el-option v-for="item in inspectorList" :key="item.name" :label="item.name" :value="item.id">
                </el-option>
              </el-select>
            </el-form-item>
@@ -446,6 +462,7 @@
<script>
import { ElMessageBox } from 'element-plus'
import dayjs from 'dayjs'
import fileDownload from '@/utils/file'
// vue-qr 只支持 Vue2,换成同 props 的本地组件(内部用 Vue3 的 qrcode.vue)
import vueQr from '@/components/QrCode'
@@ -463,9 +480,7 @@
  getInsProduction,
} from '@/api/cnas/resourceDemand/device.js'
import { selectUserCondition } from "@/api/business/inspectionTask";
import {
  obtainItemParameterList,
} from '@/api/cnas/resourceDemand/device.js'
import { selectQualifiedSupplierManagementPage } from '@/api/cnas/externalService/supplierManage/supplierManage'
export default {
  props: {
    clickNodeVal: {
@@ -499,9 +514,6 @@
        ],
        calibrationDate: [
          { required: true, message: '请输入校准周期(月)', trigger: 'blur' },
        ],
        subordinateDepartmentsId: [
          { required: true, message: '请选择所属部门', trigger: 'change' },
        ]
      },
      // dateForm: {
@@ -540,7 +552,7 @@
      dialogVisible: false,
      upLoad: false,
      responsiblePersonList: [],
      subordinateDepartmentsList: [],
      inspectorList: [],
      options: [],
      equipmentList: [],
      deviceStatusList: [],
@@ -553,9 +565,17 @@
      editData: {
        authorizedPerson: [],
      },
      qualifiedSupplierNames: [],
    }
  },
  computed: {
    // 校准服务机构下拉选项(合格供应商 + 当前值兜底)
    calibrationServiceOptions() {
      const list = this.qualifiedSupplierNames.slice();
      const value = this.editData.calibrationServices;
      if (value && list.indexOf(value) === -1) list.push(value);
      return list;
    },
    action() {
      return this.javaApi + '/deviceScope/uploadFile'
    }
@@ -566,8 +586,18 @@
    // 获取相关文档的数据
    this.getPage()
    this.timeStamp = Date.now()
    this.obtainQualifiedSupplierList()
  },
  methods: {
    // 拉取合格供应商列表(校准服务机构下拉选项)
    obtainQualifiedSupplierList() {
      selectQualifiedSupplierManagementPage({ current: 1, size: 999 }).then(res => {
        if (res.code === 200) {
          const rows = (res.data && res.data.records) || [];
          this.qualifiedSupplierNames = [...new Set(rows.map(r => r.supplierName).filter(Boolean))];
        }
      });
    },
    // 原先的 Vue2 filter,Vue3 已移除 filters 选项,改为方法调用
    formaterDateTime(dateTime) {
      if (dateTime === undefined || dateTime === null || dateTime === '') {
@@ -602,8 +632,6 @@
    openFileRevisionDialog() {
      // 获取档案修订负责人下拉框数据
      this.selectDevicePrincipal()
      // 获取档案修订所属部门下拉框数据
      this.obtainItemParameterList()
      // 获取档案修订设备状态下拉框数据
      this.selectEnumByCategory()
      // 获取档案修订检验项目级联弹框数据
@@ -736,6 +764,30 @@
        this.dialogVisible = true
      })
    },
    // 下次日期 = 最近日期 + 周期(月),自动计算
    calcNextDate(data) {
      const calc = (lastDate, cycle) => {
        const period = parseInt(cycle)
        if (!lastDate || !period || period <= 0) {
          return null
        }
        return dayjs(String(lastDate).replace(' ', 'T'))
          .add(period, 'month')
          .format('YYYY-MM-DD HH:mm:ss')
      }
      const nextCalibrationDate = calc(data.lastCalibrationDate, data.calibrationDate)
      if (nextCalibrationDate) {
        data.nextCalibrationDate = nextCalibrationDate
      }
      const nextMaintenanceDate = calc(data.lastMaintenanceDate, data.maintenanceCycle)
      if (nextMaintenanceDate) {
        data.nextMaintenanceDate = nextMaintenanceDate
      }
      const nextExamineDate = calc(data.lastExamineDate, data.examineCycle)
      if (nextExamineDate) {
        data.nextExamineDate = nextExamineDate
      }
    },
    //修订档案
    submitForm() {
      let flag = true
@@ -822,17 +874,9 @@
      selectUserCondition().then(res => {
        this.responsiblePersonList = res.data;
      })
    },
    obtainItemParameterList() {
      obtainItemParameterList().then(res => {
        let data = []
        res.data.forEach(a => {
          data.push({
            label: a.laboratoryName,
            value: a.id
          })
        })
        this.subordinateDepartmentsList = data
      // 被授权人下拉只取检测员角色人员
      selectUserCondition({ type: 3 }).then(res => {
        this.inspectorList = res.data;
      })
    },
    getInsProductIds() {