| | |
| | | |
| | | <!-- layout content --> |
| | | <a-layout-content |
| | | :style="{ height: '100%', paddingTop: fixedHeader ? '59px' : '0' ,background: $route.meta.title=='首页'?'#FEFEFE':''}"> |
| | | :style="{ height: '100%', paddingTop: fixedHeader ? '59px' : '0' ,background: $route.meta.title=='首页'?'#FDFDFD':''}"> |
| | | <slot></slot> |
| | | </a-layout-content> |
| | | |
| | |
| | | </div> |
| | | |
| | | <dv-border-box-9 style="padding: 15px 15px 0"> |
| | | <div id="tech_condition_chart" style="width:100%;height: 240px;"></div> |
| | | <div id="warranty_malfunction_chart" style="width:100%;height: 240px;"></div> |
| | | <div> |
| | | <div style="display: flex;flex-direction:column;align-items: center"> |
| | | <dv-decoration-11 |
| | | style="width:45%;height:60px;color: rgba(0,0,0,.45);font-size: 20px;align-self: flex-start">三保计划 |
| | | </dv-decoration-11> |
| | | <div class="support-plan-container"> |
| | | <div v-for="(item,index) in supportPlanList" :key="index" class="support-plan-item" |
| | | :style="{background:item.backgroundColor}" @click="openMaintenanceModal(item)"> |
| | | <div>{{item.planTime}}</div> |
| | | <div class="plan-value-container"> |
| | | <div class="plan-value">{{$data[item.planValueLabel]}}</div> |
| | | <div>台</div> |
| | | </div> |
| | | <div id="tech_condition_chart" style="width:100%;height: 280px;"></div> |
| | | <div id="warranty_malfunction_chart" style="width:100%;height: 280px;"></div> |
| | | <div style="display: flex;flex-direction:column;align-items: center;margin-top: 40px"> |
| | | <div class="support-plan-container"> |
| | | <div v-for="(item,index) in supportPlanList" :key="index" class="support-plan-item" |
| | | :style="{background:item.backgroundColor}" @click="openMaintenanceModal(item)"> |
| | | <div>{{item.planTime}}</div> |
| | | <div class="plan-value-container"> |
| | | <div class="plan-value">{{$data[item.planValueLabel]}}</div> |
| | | <div>台</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div style="display: flex;margin-top: 10px;justify-content: space-between;align-items: center;"> |
| | | <dv-decoration-11 style="width:45%;height:60px;font-size: 20px;color: rgba(0,0,0,.45)">二保计划 |
| | | </dv-decoration-11> |
| | | <div |
| | | style="flex:1;text-align:center;font-size: 25px;color: rgba(0,0,0,.45);overflow: hidden;text-overflow: ellipsis;white-space: nowrap"> |
| | | 2024年4月1日大修 |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | signageApi.getEquipmentOEEMonthStatisticsApi(this.productionCode) |
| | | .then(res => { |
| | | if (res.success && res.result) { |
| | | const res = { |
| | | result: [ |
| | | { |
| | | equipmentId: '2140311', |
| | | overallEquipmentEfficiency: 12 |
| | | }, |
| | | { |
| | | equipmentId: '2140511', |
| | | overallEquipmentEfficiency: 32 |
| | | }, |
| | | { |
| | | equipmentId: '2420011', |
| | | overallEquipmentEfficiency: 15 |
| | | }, |
| | | { |
| | | equipmentId: '2140023', |
| | | overallEquipmentEfficiency: 62 |
| | | }, |
| | | { |
| | | equipmentId: '2110011', |
| | | overallEquipmentEfficiency: 46 |
| | | }, |
| | | { |
| | | equipmentId: '2140211', |
| | | overallEquipmentEfficiency: 75 |
| | | }, |
| | | { |
| | | equipmentId: '2144011', |
| | | overallEquipmentEfficiency: 86 |
| | | }, |
| | | { |
| | | equipmentId: '2140021', |
| | | overallEquipmentEfficiency: 97 |
| | | }, |
| | | { |
| | | equipmentId: '2145031', |
| | | overallEquipmentEfficiency: 57 |
| | | } |
| | | ] |
| | | } |
| | | this.barChartData = res.result.map(item => { |
| | | return { |
| | | name: item.equipmentId, |
| | |
| | | const equipmentIdObj = { |
| | | equipmentId: item.equipmentId, |
| | | equipmentName: item.equipmentName, |
| | | openRate: 84, |
| | | startRate: 70, |
| | | utilizationRate: 42 |
| | | openRate: 0, |
| | | startRate: 0, |
| | | utilizationRate: 0 |
| | | } |
| | | this.first7DaysEfficiencyData.dataList.push(equipmentIdObj) |
| | | } |
| | |
| | | justify-content: space-around; |
| | | flex-wrap: wrap; |
| | | color: #fff; |
| | | padding-top: 20px; |
| | | |
| | | .support-plan-item { |
| | | border-radius: 3px; |
| | |
| | | this.loadData(); |
| | | }, |
| | | |
| | | /* 导入 */ |
| | | handleImportExcel(info) { |
| | | this.loading = true; |
| | | |
| | | if (info.file.status === 'done') { |
| | | this.loading = false; |
| | | |
| | | // 检查响应内容是否为CSV格式(包含未找到的设备编码) |
| | | if (info.file.response && typeof info.file.response === 'string' && |
| | | info.file.response.includes('未找到的设备编码')) { |
| | | |
| | | // 创建CSV文件并下载 |
| | | const blob = new Blob([info.file.response], { type: 'text/csv;charset=utf-8' }); |
| | | const downloadUrl = window.URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = downloadUrl; |
| | | link.setAttribute('download', '未找到的设备编码.csv'); |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | window.URL.revokeObjectURL(downloadUrl); |
| | | |
| | | // 显示提示信息 |
| | | this.$notification.warning({ |
| | | message: '导入完成', |
| | | description: '导入成功但存在未找到的设备编码,已下载未找到的设备编码列表' |
| | | }); |
| | | |
| | | this.loadData(); |
| | | return; |
| | | } |
| | | |
| | | // 处理常规JSON响应 |
| | | if (info.file.response && info.file.response.success) { |
| | | this.$notification.success({ |
| | | message: '导入成功', |
| | | description: info.file.response.message || `${info.file.name} 文件上传成功` |
| | | }); |
| | | this.loadData(); |
| | | } else { |
| | | const fileName = info.file.name || '未知文件'; |
| | | const errorMessage = info.file.response && info.file.response.message |
| | | ? info.file.response.message |
| | | : '导入失败,未知错误'; |
| | | |
| | | this.$notification.error({ |
| | | message: '导入失败', |
| | | description: `${fileName} ${errorMessage}` |
| | | }); |
| | | } |
| | | } else if (info.file.status === 'error') { |
| | | this.loading = false; |
| | | |
| | | const fileName = info.file.name || '未知文件'; |
| | | let errorMessage = '上传失败,未知错误'; |
| | | |
| | | if (info.file.response) { |
| | | if (info.file.response.message) { |
| | | errorMessage = info.file.response.message; |
| | | } else if (info.file.response.error) { |
| | | errorMessage = info.file.response.error; |
| | | } |
| | | } else if (info.file.error) { |
| | | errorMessage = info.file.error.message || info.file.error; |
| | | } |
| | | |
| | | this.$notification.error({ |
| | | message: '上传失败', |
| | | description: `${fileName} ${errorMessage}` |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | batchDel() { |
| | | var ids = '' |
| | | for (var a = 0; a < this.selectedRowKeys.length; a++) { |
| | |
| | | close() { |
| | | this.$emit('close') |
| | | this.visible = false |
| | | this.$refs.form.clearValidate() |
| | | if (this.$refs.form) this.$refs.form.clearValidate() |
| | | } |
| | | } |
| | | } |
| | |
| | | getAction(this.url.queryById, { id: record.dataId }) |
| | | .then(res => { |
| | | if (res.success) { |
| | | that.model = Object.assign({ confirmDealType: '1' }, res.result) |
| | | that.model = Object.assign({}, res.result, { confirmDealType: '1' }) |
| | | that.model.dataId = record.dataId |
| | | that.model.taskId = record.id |
| | | that.model.userId = record.assignee |