Merge remote-tracking branch 'origin/dev' into dev
| | |
| | | }); |
| | | } |
| | | |
| | | //设å¤ä¿å
»åæ¡å¯¼åº |
| | | export function exportMaintenanceRecord(query) { |
| | | return request({ |
| | | url: "/deviceMaintain/exportMaintenanceRecord", |
| | | method: "get", |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //设å¤ç»´æ¤å é¤ |
| | | export function deleteDeviceMaintenance(query) { |
| | | return request({ |
| | | url: "/deviceMaintain/deleteDeviceMaintenance", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // æ°å¢è®¾å¤ç»´æ¤ä¿å
» |
| | | export function addDeviceMaintenance(data) { |
| | | return request({ |
| | | url: "/deviceMaintain/addDeviceMaintenance", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | //设å¤ç»´æ¤è¡¨ æ¥è¯¢ |
| | | export function getDeviceMaintenancePage(query) { |
| | | return request({ |
| | | url: "/deviceMaintain/getDeviceMaintenancePage", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // åç¨-ä¿å |
| | | export function saveDeviceBorrow(data) { |
| | | return request({ |
| | |
| | | params: query, |
| | | }); |
| | | } |
| | | //设å¤ç»´æ¤ä¿å
» æ¥è¯¢ |
| | | export function selectDeviceMaintenancePage(query) { |
| | | return request({ |
| | | url: "/deviceMaintain/selectDeviceMaintenancePage", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | //设å¤ç»´æ¤ä¿å
» å é¤ |
| | | export function deleteDeviceMaintenance(query) { |
| | | return request({ |
| | | url: "/deviceMaintain/deleteDeviceMaintenance", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | //设å¤ç»´æ¤ä¿å
» æ°å¢ |
| | | export function addDeviceMaintenance(query) { |
| | | return request({ |
| | | url: "/deviceMaintain/addDeviceMaintenance", |
| | | method: "post", |
| | | data: query, |
| | | }); |
| | | } |
| | | //设å¤ä½¿ç¨ææ å页æ¥è¯¢ |
| | | export function selectDeviceImpowerByPage(query) { |
| | | return request({ |
| | | url: "/deviceImpower/selectDeviceImpowerByPage", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | //设å¤ä½¿ç¨ææ æ¥è¯¢è¯¦æ
|
| | | export function getImpowerDetail(query) { |
| | | return request({ |
| | | url: "/deviceImpower/getImpowerDetail", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | //设å¤ä½¿ç¨ææ å é¤ |
| | | export function deleteImpower(query) { |
| | | return request({ |
| | | url: "/deviceImpower/deleteImpower", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | //设å¤ä½¿ç¨ææ å¯¼åº |
| | | export function exportDeviceImpower(query) { |
| | | return request({ |
| | | url: "/deviceImpower/exportDeviceImpower", |
| | | method: "get", |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | | //设å¤ä½¿ç¨ææ æ°å¢ |
| | | export function addImpower(query) { |
| | | return request({ |
| | | url: "/deviceImpower/addImpower", |
| | | method: "post", |
| | | data: query, |
| | | }); |
| | | } |
| | | //设å¤ä½¿ç¨ææ ä¿®æ¹ |
| | | export function updateImpower(query) { |
| | | return request({ |
| | | url: "/deviceImpower/updateImpower", |
| | | method: "post", |
| | | data: query, |
| | | }); |
| | | } |
| | | //设å¤ä½¿ç¨ææ æ¹åææ |
| | | export function reviewImpowerStatus(query) { |
| | | return request({ |
| | | url: "/deviceImpower/reviewImpowerStatus", |
| | | method: "post", |
| | | data: query, |
| | | }); |
| | | } |
| | |
| | | <div style="margin: 10px 0"> |
| | | <el-table ref="yearTable" :data="examinePlanDetailsList" id="templateParamTable" row-key="deviceId" |
| | | v-loading="yearTableLoading" |
| | | :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border height="500px"> |
| | | :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border height="560px"> |
| | | <el-table-column label="设å¤åç§°" min-width="190" prop="deviceName"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceName" clearable size="small"></el-input> |
| | |
| | | </el-date-picker> |
| | | </div> |
| | | <div style="margin: 10px 0"> |
| | | <el-table id="templateParamTable" ref="yearTable" :data="calibrationPlanDetailList" height="300px" |
| | | <el-table id="templateParamTable" ref="yearTable" :data="calibrationPlanDetailList" height="560px" |
| | | v-loading="yearTableLoading" |
| | | :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border |
| | | row-key="deviceId" style="width: 100% ;"> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search"> |
| | | <el-button size="small" type="primary" @click="refreshTableList">å·æ°</el-button> |
| | | <el-button size="small" type="primary" @click="openDia('add')">æ° å»º</el-button> |
| | | <el-button :loading="outLoading" size="small" type="primary" @click="openHandleOut">导 åº</el-button> |
| | | </div> |
| | | <div> |
| | | <lims-table :tableData="tableData" :column="column" |
| | | height="calc(100vh - 20em)" @pagination="pagination" |
| | | :page="page" :tableLoading="tableLoading"></lims-table> |
| | | </div> |
| | | <el-dialog :visible.sync="dialogVisible" title="仪å¨è®¾å¤ä½¿ç¨ç»´æ¤ä¿å
»è¡¨" width="55%"> |
| | | <el-form ref="form" :model="form" label-width="130px" :rules="rules"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç»´æ¤æ¥æ:" prop="maintenanceDate"> |
| | | <el-date-picker v-model="form.maintenanceDate" :disabled="operationType === 'view'" |
| | | format="yyyy-MM-dd" size="small" placeholder="éæ©æ¥æ" style="width:100%" |
| | | type="date" value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ç»´æ¤å
容:" prop="maintenanceContentArr"> |
| | | <el-checkbox-group v-model="form.maintenanceContentArr" :disabled="operationType === 'view'"> |
| | | <el-checkbox v-for="city in qualificationList" :key="city.label" :label="city.label" |
| | | :value="city.label"></el-checkbox> |
| | | </el-checkbox-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç»´æ¤äºº:" prop="maintenanceUserId"> |
| | | <el-select v-model="form.maintenanceUserId" |
| | | clearable filterable |
| | | placeholder="è¯·éæ©" size="small" style="width: 100%;"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="夿³¨:" prop="remark"> |
| | | <el-input v-model="form.remark" :disabled="operationType === 'view'" size="small" |
| | | style="width: 100%;"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeDia">å æ¶</el-button> |
| | | <el-button v-if="operationType !== 'view'" type="primary" @click="saveRecord" :loading="buttonLoading">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addDeviceMaintenance, |
| | | deleteDeviceMaintenance, |
| | | selectDeviceMaintenancePage |
| | | } from "@/api/cnas/resourceDemand/device"; |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import {selectUserCondition} from "@/api/system/user"; |
| | | |
| | | export default { |
| | | name: '', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {limsTable}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | }, |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | search: { |
| | | maintenanceDate: '', |
| | | }, |
| | | outLoading: false, |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | total: 0, |
| | | size: 20, |
| | | current: 1 |
| | | }, |
| | | column: [ |
| | | { label: 'ç»´æ¤æ¥æ', prop: 'maintenanceDate' }, |
| | | { label: 'ç»´æ¤å
容', prop: 'maintenanceContent' }, |
| | | { label: 'ç»´æ¤äºº', prop: 'maintenanceUserName' }, |
| | | { label: '夿³¨', prop: 'remark' }, |
| | | { |
| | | dataType: 'action', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openDia('edit', row); |
| | | }, |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDeleteClick(row); |
| | | }, |
| | | }, |
| | | ] |
| | | } |
| | | ], |
| | | dialogVisible: false, |
| | | form: { |
| | | id: '', |
| | | deviceId: '', |
| | | maintenanceDate: '', |
| | | maintenanceContentArr: [], |
| | | maintenanceContent: '', |
| | | maintenanceUserId: '', |
| | | remark: '', |
| | | }, |
| | | operationType: '', |
| | | buttonLoading: false, |
| | | qualificationList: [], |
| | | rules: { |
| | | maintenanceDate: [{ required: true, message: 'è¯·éæ©ç»´æ¤æ¥æ', trigger: 'change' }], |
| | | maintenanceContentArr: [{ required: true, message: 'è¯·éæ©ç»´æ¤å
容', trigger: 'change' }], |
| | | maintenanceUserId: [{ required: true, message: 'è¯·éæ©ç»´æ¤äºº', trigger: 'change' }], |
| | | }, |
| | | responsibleOptions: [], |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.refreshTableList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // ç¹å»å·æ° |
| | | refreshTableList () { |
| | | this.page.current = 1; |
| | | this.getTableList() |
| | | }, |
| | | // å页忢 |
| | | pagination(page) { |
| | | this.page.size = page.limit |
| | | this.getTableList() |
| | | }, |
| | | getTableList () { |
| | | this.tableLoading = true |
| | | selectDeviceMaintenancePage({ |
| | | deviceId: this.clickNodeVal.value, |
| | | ...this.page |
| | | }).then(res => { |
| | | this.tableLoading = false |
| | | this.tableData = res.data.records |
| | | this.page.total = res.data.total |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | }) |
| | | }, |
| | | // æå¼æä½å¼¹æ¡ |
| | | openDia (type, row) { |
| | | this.operationType = type |
| | | this.dialogVisible = true |
| | | this.$nextTick(() => { |
| | | this.$refs['form'].resetFields() |
| | | this.form.id = '' |
| | | if (this.operationType === 'edit') { |
| | | this.form = {...row} |
| | | this.$set(this.form, 'maintenanceContentArr', this.form.maintenanceContent.split(',')) |
| | | } |
| | | }) |
| | | this.getDictS() |
| | | this.getUserList() |
| | | }, |
| | | // æ¥è¯¢ç»´æ¤å
容鿩æ¡å
容 |
| | | getDictS () { |
| | | // å®ä¹å®éªå®¤åç§°ä¸ç»´æ¤å
容类åçæ å°å
³ç³» |
| | | const labTypeMapping = { |
| | | 'èå室': 'aging_maintenance_content', |
| | | 'èåå®éªå®¤': 'aging_maintenance_content', |
| | | 'çµæ§è½å®éªå®¤': 'electrical_maintenance_content', |
| | | 'ç¯å¢å®éªå®¤': 'environmental_maintenance_content', |
| | | 'çç§å®éªå®¤': 'burn_maintenance_content', |
| | | 'æ··ç¼å®éªå®¤': 'mixing_maintenance_content', |
| | | 'æ£æµä¸å¿çµæ§è½å®éªå®¤': 'center_electrical_maintenance_content', |
| | | 'ææ¸©äº': 'temperature2_maintenance_content', |
| | | 'ææ¸©ä¸': 'temperature1_maintenance_content', |
| | | 'åå¦å®éªå®¤': 'chemistry_maintenance_content', |
| | | 'å¶æ ·å®¤': 'sample_maintenance_content', |
| | | '使¸©å®éªå®¤': 'hypothermia_maintenance_content', |
| | | }; |
| | | // è·åå½åèç¹çå®éªå®¤åç§° |
| | | const name = this.clickNodeVal.parent.label; |
| | | // æ ¹æ®æ å°å
³ç³»è·å对åºçç±»å |
| | | const type = labTypeMapping[name]; |
| | | this.getDicts(type).then((response) => { |
| | | this.qualificationList = response.data.map((m) => { |
| | | return { |
| | | label: m.dictLabel, |
| | | value: m.dictValue, |
| | | }; |
| | | }); |
| | | }); |
| | | }, |
| | | openHandleOut () { |
| | | |
| | | }, |
| | | handleDeleteClick(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | deleteDeviceMaintenance({ id: row.id }).then(res => { |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'å 餿å!' |
| | | }); |
| | | this.refreshTableList() |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // æäº¤æ°å¢åä¿å |
| | | saveRecord () { |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid) { |
| | | this.buttonLoading = true; |
| | | this.form.maintenanceContent = this.form.maintenanceContentArr.join(',') |
| | | this.form.deviceId = this.clickNodeVal.value |
| | | addDeviceMaintenance(this.form).then(res => { |
| | | this.buttonLoading = false; |
| | | this.$message.success('æ°å¢æå') |
| | | this.closeDia() |
| | | this.getTableList() |
| | | }).catch(err => { |
| | | this.buttonLoading = false; |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | closeDia () { |
| | | this.$refs['form'].resetFields(); |
| | | this.dialogVisible = false |
| | | this.refreshTableList() |
| | | }, |
| | | // è·åè´è´£äººä¿¡æ¯æ¥å£ |
| | | getUserList() { |
| | | selectUserCondition({type: 2}).then(res => { |
| | | if (res.code == 200) { |
| | | this.responsibleOptions = res.data |
| | | } |
| | | }) |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.refreshTableList(); |
| | | } |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search { |
| | | height: 46px; |
| | | text-align: right; |
| | | margin-top: 10px; |
| | | } |
| | | </style> |
| | |
| | | <template slot-scope="scope"> |
| | | <el-button :disabled="scope.row.status === 1" size="small" type="text" |
| | | @click="handleForm('edit', scope.row)">ç¼è¾</el-button> |
| | | <el-button size="small" type="text" @click="handleForm('view', scope.row)">æ¥ç</el-button> |
| | | <el-button :disabled="scope.row.status === 1" size="small" type="text" |
| | | @click="tellApprove(scope.row.maintenancePlanId)">å®¡æ ¸éç¥</el-button> |
| | | <el-button :disabled="scope.row.status === 1 || userId != scope.row.auditId" size="small" type="text" |
| | |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="applicationForm" |
| | | title="设å¤ä¿å
»è®¡å表" width="80%" @close="closeDialog"> |
| | | <div style="display: flex;align-items: center;"> |
| | | <el-button v-if="operationType !== 'check'" size="small" type="primary" @click="addTableRow">æ·»å </el-button> |
| | | <el-button v-if="operationType === 'edit'" size="small" type="primary" @click="addTableRow">æ·»å </el-button> |
| | | <span style="width: 60px;margin-left: 10px">年份ï¼</span> |
| | | <el-date-picker v-model="form.planYear" type="year" value-format="yyyy" clearable size="small" format="yyyy" |
| | | placeholder="鿩年"> |
| | | placeholder="鿩年" :disabled="operationType !== 'edit'"> |
| | | </el-date-picker> |
| | | </div> |
| | | <div style="margin: 10px 0"> |
| | | <el-table ref="yearTable" :data="deviceMaintenancePlanDetails" id="templateParamTable" row-key="deviceId" |
| | | :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border |
| | | height="300px" style="width: 100% ;"> |
| | | height="560px" style="width: 100% ;"> |
| | | <el-table-column align="center" header-align="center" label="åºå·" type="index" width="60"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" min-width="170" prop="deviceName"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceName" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.deviceName" :disabled="operationType !== 'edit'" clearable |
| | | size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="设å¤ç¼å·" min-width="140" prop="deviceNumber"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceNumber" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.deviceNumber" :disabled="operationType !== 'edit'" clearable |
| | | size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å½å±å®éªå®¤" min-width="120" prop="storagePoint"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.storagePoint" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.storagePoint" :disabled="operationType !== 'edit'" clearable |
| | | size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ä¿å
Ȍ
³é®é¨ä½" min-width="120" prop="maintenanceSite"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.maintenanceSite" :disabled="operationType === 'check'" clearable size="small" |
| | | <el-input v-model="scope.row.maintenanceSite" :disabled="operationType !== 'edit'" clearable size="small" |
| | | type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ä¿å
Ȍ
容" min-width="120" prop="maintenanceContent"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.maintenanceContent" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.maintenanceContent" :disabled="operationType !== 'edit'" clearable |
| | | size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ä¿å
»å¨æ" min-width="90" prop="maintenanceIntervals"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.maintenanceIntervals" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.maintenanceIntervals" :disabled="operationType !== 'edit'" clearable |
| | | size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="æä½" width="80" align="center" v-if="operationType !== 'check'"> |
| | | <el-table-column fixed="right" label="æä½" width="80" align="center" v-if="operationType === 'edit'"> |
| | | <template slot-scope="scope"> |
| | | <el-button style="color: #f56c6c" type="text" @click="deleteRow(scope.$index)">å é¤</el-button> |
| | | </template> |
| | |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeDialog">å æ¶</el-button> |
| | | <el-button v-if="operationType !== 'check'" :loading="submitFormLoading" type="primary" @click="submitForm">ç¡® |
| | | <el-button v-if="operationType === 'edit'" :loading="submitFormLoading" type="primary" @click="submitForm">ç¡® |
| | | 认</el-button> |
| | | <el-button v-if="operationType === 'check'" :loading="submitFormLoading" type="primary" |
| | | @click="checkStatus(0)">ä¸éè¿</el-button> |
| | |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addEquipDia = false">å æ¶</el-button> |
| | | <el-button v-if="operationType !== 'check'" :loading="submitFormLoading" type="primary" |
| | | <el-button v-if="operationType === 'edit'" :loading="submitFormLoading" type="primary" |
| | | @click="changeMachineName">ç¡® |
| | | 认</el-button> |
| | | </span> |
| | |
| | | </el-table-column> |
| | | <el-table-column label="æ¹åæ¶é´" min-width="180" prop="auditDate"></el-table-column> |
| | | <!-- æä½æé® --> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="240"> |
| | | <el-table-column align="center" fixed="right" label="æä½" min-width="270"> |
| | | <template slot-scope="scope"> |
| | | <el-button :disabled="scope.row.status === 1" size="small" type="text" |
| | | @click="handleForm('edit', scope.row)">ç¼è¾</el-button> |
| | | <el-button size="small" type="text" @click="handleForm('view', scope.row)">æ¥ç</el-button> |
| | | <el-button :disabled="scope.row.status === 1" size="small" type="text" |
| | | @click="tellApprove(scope.row.traceabilityManagementId)">æ¹åéç¥</el-button> |
| | | <el-button :disabled="scope.row.status === 1 || userId != scope.row.auditId" size="small" type="text" |
| | |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="applicationForm" |
| | | title="仪å¨è®¾å¤é弿º¯æºç®¡çæ»ä½è®¡å" width="80%" @close="closeDialog"> |
| | | <div style="display: flex;align-items: center;"> |
| | | <el-button v-if="operationType !== 'check'" size="small" type="primary" @click="addTableRow">æ·»å </el-button> |
| | | <el-button v-if="operationType === 'edit'" size="small" type="primary" @click="addTableRow">æ·»å </el-button> |
| | | <span style="width: 60px;margin-left: 10px">年份ï¼</span> |
| | | <el-date-picker v-model="form.planYear" type="year" value-format="yyyy" clearable size="small" format="yyyy" |
| | | placeholder="鿩年"> |
| | | placeholder="鿩年" :disabled="operationType !== 'edit'"> |
| | | </el-date-picker> |
| | | </div> |
| | | <div style="margin: 10px 0"> |
| | | <el-table ref="yearTable" :data="deviceTraceabilityManagementDetails" height="300px" id="templateParamTable" |
| | | <el-table ref="yearTable" :data="deviceTraceabilityManagementDetails" height="560px" id="templateParamTable" |
| | | :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border |
| | | row-key="deviceId" v-loading="yearTableLoading"> |
| | | <el-table-column align="center" header-align="center" label="åºå·" type="index" width="60"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" min-width="170" prop="deviceId"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceName" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.deviceName" :disabled="operationType !== 'edit'" clearable |
| | | size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="åå·" min-width="140" prop="specificationModel"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.specificationModel" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.specificationModel" :disabled="operationType !== 'edit'" clearable |
| | | size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="设å¤ç¼å·" min-width="140" prop="managementNumber"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.managementNumber" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.managementNumber" :disabled="operationType !== 'edit'" clearable |
| | | size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ææ¯ææ åæ°" min-width="150" prop="technicalIndexParameters"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.technicalIndexParameters" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.technicalIndexParameters" :disabled="operationType !== 'edit'" clearable |
| | | size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ææ¯ææ è¦æ±" min-width="150" prop="technicalRequirements"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.technicalRequirements" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.technicalRequirements" :disabled="operationType !== 'edit'" clearable |
| | | size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ£å®å¨æ" min-width="120" prop="verificationCycle"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.verificationCycle" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.verificationCycle" :disabled="operationType !== 'edit'" clearable |
| | | size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ£å®åä½" min-width="90" prop="verificationUnit"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.verificationUnit" :disabled="operationType === 'check'" clearable |
| | | <el-input v-model="scope.row.verificationUnit" :disabled="operationType !== 'edit'" clearable |
| | | size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="夿³¨" min-width="90" prop="remark"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.remark" :disabled="operationType === 'check'" clearable size="small" |
| | | <el-input v-model="scope.row.remark" :disabled="operationType !== 'edit'" clearable size="small" |
| | | type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="æä½" width="80" align="center" v-if="operationType !== 'check'"> |
| | | <el-table-column fixed="right" label="æä½" width="80" align="center" v-if="operationType === 'edit'"> |
| | | <template slot-scope="scope"> |
| | | <el-button style="color: #f56c6c" type="text" @click="deleteRow(scope.$index)">å é¤</el-button> |
| | | </template> |
| | |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeDialog">å æ¶</el-button> |
| | | <el-button v-if="operationType !== 'check'" :loading="submitFormLoading" type="primary" @click="submitForm">ç¡® |
| | | <el-button v-if="operationType === 'edit'" :loading="submitFormLoading" type="primary" @click="submitForm">ç¡® |
| | | 认</el-button> |
| | | <el-button v-if="operationType === 'check'" :loading="submitFormLoading" type="primary" |
| | | @click="checkStatus(0)">ä¸éè¿</el-button> |
| | |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addEquipDia = false">å æ¶</el-button> |
| | | <el-button v-if="operationType !== 'check'" :loading="submitFormLoading" type="primary" |
| | | <el-button v-if="operationType === 'edit'" :loading="submitFormLoading" type="primary" |
| | | @click="changeMachineName">ç¡® |
| | | 认</el-button> |
| | | </span> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search"> |
| | | <el-button size="small" type="primary" @click="refreshTableList">å· æ°</el-button> |
| | | <el-button size="small" type="primary" @click="openDia('add')">æ° å¢</el-button> |
| | | <el-button :loading="outLoading" size="small" type="primary" @click="openHandleOut">导 åº</el-button> |
| | | </div> |
| | | <div> |
| | | <lims-table :tableData="tableData" :column="column" |
| | | height="calc(100vh - 20em)" @pagination="pagination" |
| | | :page="page" :tableLoading="tableLoading"></lims-table> |
| | | </div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="usageTableDia" |
| | | title="设å¤ä¿å
»è®¡å表" width="80%" @close="closeDialog"> |
| | | <div style="display: flex;align-items: center;"> |
| | | <el-button size="small" type="primary" @click="addTableRow">æ·»å </el-button> |
| | | <span style="width: 60px;margin-left: 10px">年份ï¼</span> |
| | | <el-date-picker v-model="form.impowerYear" type="year" value-format="yyyy" clearable size="small" format="yyyy" |
| | | placeholder="鿩年"> |
| | | </el-date-picker> |
| | | </div> |
| | | <div style="margin: 10px 0"> |
| | | <el-table ref="usageTableData" :data="usageTableData" id="templateParamTable" row-key="deviceId" |
| | | :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border |
| | | height="560px" style="width: 100% ;"> |
| | | <el-table-column align="center" header-align="center" label="åºå·" type="index" width="60"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" min-width="170" prop="deviceName"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceName" clearable |
| | | size="small" :disabled="operationType === 'check'"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="设å¤ç¼å·" min-width="140" prop="deviceNumber"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.deviceNumber" clearable |
| | | size="small" :disabled="operationType === 'check'"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="è§æ ¼åå·" min-width="120" prop="model"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.model" clearable |
| | | size="small" :disabled="operationType === 'check'"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ£æµé¡¹ç®" min-width="120" prop="inspectionItem<"> |
| | | <template slot-scope="scope"> |
| | | <el-input v-model="scope.row.inspectionItem" clearable size="small" |
| | | :disabled="operationType === 'check'"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="被ææäºº" min-width="120" prop="delegatee"> |
| | | <template slot-scope="scope"> |
| | | <el-select v-model="scope.row.delegatedUserArr" |
| | | clearable filterable multiple |
| | | :disabled="operationType === 'check'" |
| | | placeholder="è¯·éæ©" size="small" style="width: 100%;"> |
| | | <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="æä½" width="80" align="center"> |
| | | <template slot-scope="scope"> |
| | | <el-button style="color: #f56c6c" type="text" @click="deleteRow(scope.$index)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeDialog">å æ¶</el-button> |
| | | <el-button v-if="operationType !== 'check'" :loading="submitFormLoading" type="primary" @click="submitForm">确认</el-button> |
| | | <el-button v-if="operationType === 'check'" :loading="submitFormLoading" type="primary" |
| | | @click="checkStatus(0)">ä¸éè¿</el-button> |
| | | <el-button v-if="operationType === 'check'" :loading="submitFormLoading" type="primary" |
| | | @click="checkStatus(1)">éè¿</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="addEquipDia" title="æ·»å 设å¤" |
| | | width="50%"> |
| | | <div style="display: flex;align-items: center;"> |
| | | <span style="width: 90px;margin-left: 10px">被ææäººï¼</span> |
| | | <el-select v-model="delegatedUser" clearable filterable multiple |
| | | 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> |
| | | </div> |
| | | <el-table ref="multipleTable" :data="equipOptions" tooltip-effect="dark" height="500" style="width: 100%" |
| | | :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border |
| | | @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column label="设å¤åç§°" prop="label" width="190"></el-table-column> |
| | | <el-table-column prop="value" label="设å¤ç¼å·" width="130"></el-table-column> |
| | | <el-table-column prop="managementNumber" label="å½å±å®éªå®¤"></el-table-column> |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addEquipDia = false">å æ¶</el-button> |
| | | <el-button :loading="submitFormLoading" type="primary" @click="changeMachineName">确认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import { |
| | | addImpower, |
| | | deleteImpower, deviceScopeSearch, getImpowerDetail, reviewImpowerStatus, |
| | | selectDeviceImpowerByPage, updateImpower |
| | | } from "@/api/cnas/resourceDemand/device"; |
| | | import {exportQualityMonitorDetail} from "@/api/cnas/process/ensureResults/qualityMonitor"; |
| | | import {selectUserCondition} from "@/api/system/user"; |
| | | |
| | | export default { |
| | | name: '', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {limsTable}, |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | } |
| | | } |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | outLoading: false, |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | total: 0, |
| | | size: 20, |
| | | current: 1 |
| | | }, |
| | | column: [ |
| | | { label: '计å年份', prop: 'impowerYear' }, |
| | | { label: 'ç¼å¶äºº', prop: 'compiler' }, |
| | | { label: 'ç¼å¶æ¶é´', prop: 'datePreparation' }, |
| | | { label: 'ææäºº', prop: 'audit' }, |
| | | { label: 'æææ¥æ', prop: 'auditDate' }, |
| | | { |
| | | dataType: 'action', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openDia('edit', row); |
| | | }, |
| | | }, |
| | | { |
| | | name: 'ææ', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openDia('check', row); |
| | | }, |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDeleteClick(row); |
| | | }, |
| | | }, |
| | | ] |
| | | } |
| | | ], |
| | | responsibleOptions: [], |
| | | operationType: '', |
| | | usageTableDia: false, |
| | | usageTableData: [], |
| | | submitFormLoading: false, |
| | | addEquipDia: false, |
| | | equipOptions: [], |
| | | selectionRows: [], |
| | | form: { |
| | | impowerYear: '' |
| | | }, |
| | | delegatedUser: [], |
| | | impowerId: '' |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.refreshTableList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // ç¹å»å·æ° |
| | | refreshTableList () { |
| | | this.page.current = 1; |
| | | this.getTableList() |
| | | }, |
| | | // å页忢 |
| | | pagination(page) { |
| | | this.page.size = page.limit |
| | | this.getTableList() |
| | | }, |
| | | getTableList () { |
| | | this.tableLoading = true |
| | | selectDeviceImpowerByPage({ |
| | | ...this.page |
| | | }).then(res => { |
| | | this.tableLoading = false |
| | | this.tableData = res.data.records |
| | | this.page.total = res.data.total |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | }) |
| | | }, |
| | | // æå¼æä½å¼¹æ¡ |
| | | openDia (type, row) { |
| | | this.operationType = type |
| | | this.usageTableDia = true |
| | | this.form = { |
| | | impowerYear: '', |
| | | usageTableData: [], |
| | | } |
| | | this.usageTableData = [] |
| | | if (row) { |
| | | this.impowerId = row.impowerId |
| | | getImpowerDetail({ impowerId: this.impowerId }).then(res => { |
| | | if (res.code === 200) { |
| | | this.form = res.data |
| | | this.usageTableData = this.form.usageTableData |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | } |
| | | this.getEquipOptions() |
| | | this.getUserList() |
| | | }, |
| | | closeDialog () { |
| | | this.usageTableDia = false |
| | | this.getTableList() |
| | | }, |
| | | // æ·»å è®¾å¤ |
| | | addTableRow() { |
| | | this.addEquipDia = true |
| | | this.delegatedUser = this.responsibleOptions.map((item) => item.name); |
| | | this.getEquipOptions() |
| | | }, |
| | | // å é¤è¡¨æ ¼è¡ |
| | | deleteRow(index) { |
| | | this.usageTableData.splice(index, 1) |
| | | }, |
| | | // æäº¤æ°å¢åä¿®æ¹ |
| | | submitForm() { |
| | | this.form.usageTableData = this.HaveJson(this.usageTableData) |
| | | this.form.usageTableData.forEach((item) => { |
| | | item.delegatedUser = item.delegatedUserArr.join(',') |
| | | }) |
| | | this.submitFormLoading = true |
| | | if (this.operationType === 'add') { |
| | | addImpower(this.form).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.usageTableDia = false |
| | | this.refreshTableList() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } else { |
| | | updateImpower(this.form).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.usageTableDia = false |
| | | this.refreshTableList() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | } |
| | | }, |
| | | // æäº¤å®¡æ ¸ |
| | | checkStatus(status) { |
| | | const params = { |
| | | status: status, |
| | | impowerId: this.impowerId |
| | | } |
| | | reviewImpowerStatus(params).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('å®¡æ ¸æå') |
| | | this.usageTableDia = false |
| | | this.refreshTableList() |
| | | } |
| | | this.submitFormLoading = false |
| | | }).catch(err => { |
| | | this.submitFormLoading = false |
| | | }) |
| | | }, |
| | | handleSelectionChange(selection) { |
| | | this.selectionRows = selection |
| | | }, |
| | | // èµå¼ä»ªå¨ç¼å· |
| | | changeMachineName() { |
| | | this.deviceMaintenancePlanDetails = [] |
| | | this.selectionRows.map(val => { |
| | | this.usageTableData.push({ deviceId: val.id, deviceName: val.label, deviceNumber: val.value, model: val.specificationModel, delegatedUserArr: this.delegatedUser }) |
| | | }) |
| | | this.addEquipDia = false |
| | | }, |
| | | // è·åææè®¾å¤ |
| | | getEquipOptions() { |
| | | this.equipOptions = [] |
| | | deviceScopeSearch({ status: 0 }).then(res => { |
| | | if (res.code === 200 && res.data) { |
| | | this.equipOptions = res.data.map(m => { |
| | | m.value = m.managementNumber |
| | | m.label = m.deviceName |
| | | return m |
| | | }) |
| | | } |
| | | }).catch(error => { |
| | | console.error(error) |
| | | }) |
| | | }, |
| | | openHandleOut (row) { |
| | | exportQualityMonitorDetail({ impowerId: row.impowerId }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/msword' }); |
| | | this.$download.saveAs(blob, row.monitorName + '.docx') |
| | | }) |
| | | }, |
| | | handleDeleteClick(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | deleteImpower({ id: row.impowerId }).then(res => { |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'å 餿å!' |
| | | }); |
| | | this.refreshTableList() |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // è·åè´è´£äººä¿¡æ¯æ¥å£ |
| | | getUserList() { |
| | | selectUserCondition({type: 2}).then(res => { |
| | | if (res.code == 200) { |
| | | this.responsibleOptions = res.data |
| | | } |
| | | }) |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.refreshTableList(); |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search { |
| | | height: 46px; |
| | | text-align: right; |
| | | margin-top: 10px; |
| | | } |
| | | </style> |
| | |
| | | <quantity-value-traceability-plan v-if="menuListActiveName == 'é弿º¯æºè®¡å'" |
| | | :clickNodeVal="clickNodeVal"></quantity-value-traceability-plan> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="设å¤ä½¿ç¨ææ" name="设å¤ä½¿ç¨ææ"> |
| | | <usage-authorization v-if="menuListActiveName == '设å¤ä½¿ç¨ææ'" |
| | | :clickNodeVal="clickNodeVal"></usage-authorization> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="å©ç¨å¤é¨ä»ªå¨è®¾å¤" name="å©ç¨å¤é¨ä»ªå¨è®¾å¤"> |
| | | <using-external-instruments v-if="menuListActiveName == 'å©ç¨å¤é¨ä»ªå¨è®¾å¤'" :clickNodeVal="clickNodeVal"></using-external-instruments> |
| | | </el-tab-pane> |
| | |
| | | <el-tab-pane label="è®¾å¤æ ¡å" name="è®¾å¤æ ¡å"> |
| | | <calibration v-if="tabListActiveName == 'è®¾å¤æ ¡å'" :clickNodeVal="clickNodeVal" /> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="设å¤ç»´æ¤" name="设å¤ç»´æ¤"> |
| | | <maintenance v-if="tabListActiveName == '设å¤ç»´æ¤'" :clickNodeVal="clickNodeVal" /> |
| | | <el-tab-pane label="设å¤ç»´æ¤ä¿å
»" name="设å¤ç»´æ¤ä¿å
»"> |
| | | <equipmentMaintenance v-if="tabListActiveName == '设å¤ç»´æ¤ä¿å
»'" :clickNodeVal="clickNodeVal" /> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="设å¤åç¨" name="设å¤åç¨"> |
| | | <borrow v-if="tabListActiveName == '设å¤åç¨'" :clickNodeVal="clickNodeVal" /> |
| | |
| | | import files from "./component/files.vue"; |
| | | import calibration from "./component/calibration.vue"; |
| | | import check from "./component/check.vue"; |
| | | import maintenance from "./component/maintenance.vue"; |
| | | import borrow from "./component/borrow.vue"; |
| | | import fault from "./component/fault.vue"; |
| | | import record from "./component/record.vue"; |
| | |
| | | import EquipmentMaintenancePlan from "./component/equipmentMaintenancePlan.vue"; |
| | | import EquipmentAcceptance from "./component/equipmentAcceptance.vue"; |
| | | import QuantityValueTraceabilityPlan from "./component/quantityValueTraceabilityPlan.vue"; |
| | | import equipmentMaintenance from "./component/equipmentMaintenance.vue"; |
| | | import usageAuthorization from "./component/usageAuthorization.vue"; |
| | | import { |
| | | treeDevice, |
| | | } from '@/api/cnas/resourceDemand/device.js' |
| | |
| | | files, |
| | | calibration, |
| | | check, |
| | | maintenance, |
| | | borrow, |
| | | fault, |
| | | record, |
| | |
| | | management, |
| | | overview, |
| | | resourceReservation, |
| | | operationInstruction |
| | | operationInstruction, |
| | | equipmentMaintenance, |
| | | usageAuthorization, |
| | | }, |
| | | data() { |
| | | return { |