| | |
| | | export default { |
| | | data() { |
| | | return { |
| | | machineNo: '',//机台编码 |
| | | workOrderNo: '',//工单号 |
| | | pageIndex: 1, |
| | | pageSize: 18, |
| | | total: 0, |
| | |
| | | searchKey: '', |
| | | filteredTools: [], |
| | | useLimitInput: '', |
| | | toolRecords: [ |
| | | // 示例数据,实际应从后端接口获取 |
| | | { id: 1, no: 'T22050338', name: 'm1.5合金长刀', upTime: '7-13 9:00', upCount: 15, downTime: '7-13 19:00', downCount: 3115, useCount: 3100, useLimit: 8888, lifePercent: '34.88%', lifeWarn: '90%', warnStatus: '正常' } |
| | | ] |
| | | toolRecords: [] |
| | | }; |
| | | }, |
| | | computed: { |
| | |
| | | }, |
| | | methods: { |
| | | async fetchTools(searchKey) { |
| | | const res = await this.$post({ |
| | | url: '/MesCutterLedger/QueryTools', |
| | | data: JSON.stringify({ |
| | | searchKey, |
| | | pageIndex: this.pageIndex, |
| | | pageSize: this.pageSize |
| | | }), |
| | | headers: { 'Content-Type': 'application/json' } |
| | | }); |
| | | if (res.status === 0) { |
| | | this.filteredTools = res.data.tbBillList.map(t => ({ |
| | | no: t.cutterId || t.no, |
| | | name: t.cutterName || t.name, |
| | | model: t.cutterModel || t.model |
| | | })); |
| | | this.total = res.data.total || 0; // 假设后端返回总数 |
| | | } else { |
| | | this.$showMessage(res.message || '查询失败'); |
| | | try { |
| | | const res = await this.$post({ |
| | | url: '/MesCutterLedger/QueryTools', |
| | | data: JSON.stringify({ |
| | | searchKey, |
| | | pageIndex: this.pageIndex, |
| | | pageSize: this.pageSize |
| | | }), |
| | | headers: { 'Content-Type': 'application/json' } |
| | | }); |
| | | |
| | | if (res.status === 0) { |
| | | // 兼容不同返回结构:直接数组 / { tbBillList, total } / { data: [...] } |
| | | const payload = Array.isArray(res.data) ? res.data |
| | | : (res.data && res.data.tbBillList) ? res.data.tbBillList |
| | | : (res.data && res.data.data) ? res.data.data |
| | | : []; |
| | | |
| | | const getField = (obj, ...keys) => { |
| | | for (const k of keys) if (obj?.[k] !== undefined && obj?.[k] !== null) return obj[k]; |
| | | return null; |
| | | }; |
| | | |
| | | const mapped = (payload || []).map(t => ({ |
| | | no: getField(t, 'cutterId', 'CUTTER_ID', 'cutteR_ID', 'daA001', 'no'), |
| | | name: getField(t, 'cutterName', 'CUTTER_NAME', 'cutteR_NAME', 'name'), |
| | | model: getField(t, 'cutterModel', 'CUTTER_MODEL', 'cutteR_MODEL', 'model') |
| | | })); |
| | | |
| | | // 填充弹窗列表和下拉列表(模板中下拉使用 toolList) |
| | | this.filteredTools = mapped; |
| | | this.toolList = mapped.slice(); |
| | | |
| | | // 总数优先取顶层 totalCount,再取嵌套 total,再退回 payload 长度 |
| | | this.total = Number(res.totalCount ?? res.data?.total ?? res.data?.totalCount ?? res.total ?? mapped.length ?? 0) || 0; |
| | | } else { |
| | | this.$showMessage(res.message || '查询失败'); |
| | | } |
| | | } catch (err) { |
| | | console.error('fetchTools 错误:', err); |
| | | this.$showMessage('查询刀具失败,请检查网络或接口'); |
| | | } |
| | | }, |
| | | //翻页 |
| | |
| | | confirmTool() { |
| | | this.showToolDialog = false; |
| | | }, |
| | | handleUpTool() { |
| | | // 上刀提交逻辑,调用后端接口 |
| | | this.$showMessage('上刀提交成功(示例)'); |
| | | async handleUpTool() { |
| | | if (!this.workOrderNo) { |
| | | this.$showMessage('工单号不能为空'); |
| | | return; |
| | | } |
| | | if (!this.machineNo) { |
| | | this.$showMessage('机台号不能为空'); |
| | | return; |
| | | } |
| | | if (!this.selectedToolNo) { |
| | | this.$showMessage('刀具编号不能为空'); |
| | | return; |
| | | } |
| | | if (!this.useLimitInput) { |
| | | this.$showMessage('使用上限不能为空'); |
| | | return; |
| | | } |
| | | const useLimit = Number(this.useLimitInput); |
| | | if (isNaN(useLimit) || useLimit <= 0) { |
| | | this.$showMessage('请输入有效的使用上限'); |
| | | return; |
| | | } |
| | | const payload = { |
| | | workOrderNo: this.workOrderNo, // 工单号 |
| | | machineNo: this.machineNo, // 机台编号 |
| | | toolNo: this.selectedToolNo, // 刀具编号 |
| | | type: '上刀', // 上刀 |
| | | useLimit: this.useLimitInput ? Number(this.useLimitInput) : null // 使用上限 |
| | | }; |
| | | const res = await this.$post({ |
| | | url: '/MesCutterLedger/SubmitToolAction', |
| | | data: JSON.stringify(payload), |
| | | headers: { 'Content-Type': 'application/json' } |
| | | }); |
| | | if (res.status === 0) { |
| | | this.$showMessage('上刀提交成功'); |
| | | } else { |
| | | this.$showMessage(res.message || '上刀提交失败'); |
| | | } |
| | | }, |
| | | handleDownTool() { |
| | | // 下刀提交逻辑,调用后端接口 |
| | | this.$showMessage('下刀提交成功(示例)'); |
| | | async handleDownTool() { |
| | | if (!this.workOrderNo) { |
| | | this.$showMessage('工单号不能为空'); |
| | | return; |
| | | } |
| | | if (!this.machineNo) { |
| | | this.$showMessage('机台号不能为空'); |
| | | return; |
| | | } |
| | | if (!this.selectedToolNo) { |
| | | this.$showMessage('刀具编号不能为空'); |
| | | return; |
| | | } |
| | | if (!this.useLimitInput) { |
| | | this.$showMessage('使用上限不能为空'); |
| | | return; |
| | | } |
| | | const useLimit = Number(this.useLimitInput); |
| | | if (isNaN(useLimit) || useLimit <= 0) { |
| | | this.$showMessage('请输入有效的使用上限'); |
| | | return; |
| | | } |
| | | const payload = { |
| | | workOrderNo: this.workOrderNo, |
| | | machineNo: this.machineNo, |
| | | toolNo: this.selectedToolNo, |
| | | type: '下刀', // 下刀 |
| | | useLimit: this.useLimitInput ? Number(this.useLimitInput) : null |
| | | }; |
| | | const res = await this.$post({ |
| | | url: '/MesCutterLedger/SubmitToolAction', |
| | | data: JSON.stringify(payload), |
| | | headers: { 'Content-Type': 'application/json' } |
| | | }); |
| | | if (res.status === 0) { |
| | | this.$showMessage('下刀提交成功'); |
| | | } else { |
| | | this.$showMessage(res.message || '下刀提交失败'); |
| | | } |
| | | }, |
| | | cancel() { |
| | | this.selectedToolNo = ''; |
| | | this.toolName = ''; |
| | | this.toolModel = ''; |
| | | }, |
| | | setUseLimit() { |
| | | // 保存使用上限逻辑,实际应调用后端接口 |
| | | this.$showMessage('使用上限已保存(示例)'); |
| | | async fetchFormData() { |
| | | if (!this.workOrderNo || !this.machineNo) { |
| | | console.warn('工单号或机台号为空,跳过获取表单数据'); |
| | | return; |
| | | } |
| | | |
| | | const payload = { |
| | | workOrderNo: this.workOrderNo.trim(), |
| | | machineNo: this.machineNo.trim() |
| | | }; |
| | | |
| | | try { |
| | | console.log('请求参数:', payload); // 添加调试日志 |
| | | |
| | | const res = await this.$post({ |
| | | url: '/MesCutterLedger/GetFormData', |
| | | data: JSON.stringify(payload), |
| | | headers: { 'Content-Type': 'application/json' } |
| | | }); |
| | | |
| | | if (res.status === 0) { |
| | | console.log('获取数据成功:', res.data); |
| | | // ... 处理数据 |
| | | } else { |
| | | this.$showMessage(res.message || '获取表单数据失败'); |
| | | } |
| | | } catch (error) { |
| | | console.error('获取表单数据错误:', error); |
| | | this.$showMessage('获取数据失败,请检查网络连接'); |
| | | } |
| | | } |
| | | //// 添加辅助方法 |
| | | //formatDateTime(dateTimeStr) { |
| | | // if (!dateTimeStr) return ''; |
| | | // // 根据后端返回的时间格式进行调整 |
| | | // const date = new Date(dateTimeStr); |
| | | // return `${date.getMonth() + 1}-${date.getDate()} ${date.getHours()}:${date.getMinutes().toString().padStart(2, '0')}`; |
| | | //} |
| | | }, |
| | | mounted() { |
| | | // 页面加载时拉取全部刀具 |
| | | this.fetchTools(''); |
| | | this.machineNo = uni.getStorageSync('machineNo') || ''; |
| | | this.workOrderNo = uni.getStorageSync('daa001') || ''; |
| | | |
| | | // 添加调试信息 |
| | | console.log('机台号:', this.machineNo); |
| | | console.log('工单号:', this.workOrderNo); |
| | | |
| | | if (this.machineNo && this.workOrderNo) { |
| | | this.fetchFormData(); |
| | | } else { |
| | | console.warn('机台号或工单号为空,无法获取表单数据'); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | .tool-btn { |
| | | margin: 5px 10px 5px 0; |
| | | padding: 8px 16px; |
| | | background: #f5f5f5; |
| | | border: 1px solid #ccc; |
| | | border-radius: 4px; |
| | | cursor: pointer; |
| | | background: #e0e0e0; |
| | | color: #888; |
| | | } |
| | | .tool-btn { |
| | | margin: 5px 10px 5px 0; |
| | | padding: 8px 16px; |
| | | background: #f5f5f5; |
| | | border: 1px solid #ccc; |
| | | border-radius: 4px; |
| | | cursor: pointer; |
| | | background: #e0e0e0; |
| | | color: #888; |
| | | } |
| | | |
| | | .dialog-actions { |
| | | display: flex; |