| | |
| | | <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"> |
| | |
| | | <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> |
| | |
| | | <!-- 右边布局 --> |
| | | <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 |
| | |
| | | <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> |
| | |
| | | |
| | | <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' |
| | |
| | | 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: { |
| | |
| | | ], |
| | | calibrationDate: [ |
| | | { required: true, message: '请输入校准周期(月)', trigger: 'blur' }, |
| | | ], |
| | | subordinateDepartmentsId: [ |
| | | { required: true, message: '请选择所属部门', trigger: 'change' }, |
| | | ] |
| | | }, |
| | | // dateForm: { |
| | |
| | | dialogVisible: false, |
| | | upLoad: false, |
| | | responsiblePersonList: [], |
| | | subordinateDepartmentsList: [], |
| | | inspectorList: [], |
| | | options: [], |
| | | equipmentList: [], |
| | | deviceStatusList: [], |
| | |
| | | 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' |
| | | } |
| | |
| | | // 获取相关文档的数据 |
| | | 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 === '') { |
| | |
| | | openFileRevisionDialog() { |
| | | // 获取档案修订负责人下拉框数据 |
| | | this.selectDevicePrincipal() |
| | | // 获取档案修订所属部门下拉框数据 |
| | | this.obtainItemParameterList() |
| | | // 获取档案修订设备状态下拉框数据 |
| | | this.selectEnumByCategory() |
| | | // 获取档案修订检验项目级联弹框数据 |
| | |
| | | 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 |
| | |
| | | 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() { |