| | |
| | | <template> |
| | | <view class="page"> |
| | | <!-- 刀具选择区 --> |
| | | <view class="top-section"> |
| | | <view class="form-row"> |
| | | <view class="top-section-grid"> |
| | | <view class="form-cell"> |
| | | <label class="form-label">选择刀具编号:</label> |
| | | <select v-model="selectedToolNo" class="form-select"> |
| | | <option v-for="tool in toolList" :key="tool.no" :value="tool.no">{{ tool.no }} | {{ tool.name }}</option> |
| | | </select> |
| | | <button class="btn-blue" @click="showToolDialog = true">刀具目录</button> |
| | | </view> |
| | | <view class="form-row"> |
| | | <view class="form-cell"> |
| | | <label class="form-label">设置使用上限:</label> |
| | | <input class="input" type="number" v-model="useLimitInput" placeholder="每次换刀后手填" :disabled="!selectedToolNo" /> |
| | | <button class="btn-blue" @click="setUseLimit" :disabled="!selectedToolNo || !useLimitInput">保存上限</button> |
| | | </view> |
| | | <view class="form-row"> |
| | | <view class="form-cell"> |
| | | <label class="form-label">刀具名称:</label> |
| | | <input class="input" v-model="toolName" placeholder="刀具带出" disabled /> |
| | | </view> |
| | | <view class="form-row"> |
| | | <label class="form-label">规格型号:</label> |
| | | <label class="form-label" style="margin-left: 16px;">规格型号:</label> |
| | | <input class="input" v-model="toolModel" placeholder="刀具带出" disabled /> |
| | | </view> |
| | | </view> |
| | |
| | | showToolDialog: false, |
| | | searchKey: '', |
| | | filteredTools: [], |
| | | useLimitInput: '', |
| | | 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: '正常' } |
| | |
| | | }; |
| | | }, |
| | | methods: { |
| | | searchTool() { |
| | | this.filteredTools = this.toolList.filter(t => |
| | | t.no.includes(this.searchKey) || t.name.includes(this.searchKey) |
| | | ); |
| | | async fetchTools(searchKey) { |
| | | // 实际项目中请替换为你的后端接口地址 |
| | | const res = await fetch('/api/QueryTools', { |
| | | method: 'POST', |
| | | headers: { 'Content-Type': 'application/json' }, |
| | | body: JSON.stringify(searchKey) |
| | | }); |
| | | const data = await res.json(); |
| | | if (data.status === 0) { |
| | | this.filteredTools = data.data.tbBillList.map(t => ({ |
| | | no: t.cutterId || t.no, |
| | | name: t.cutterName || t.name, |
| | | model: t.cutterModel || t.model |
| | | })); |
| | | } else { |
| | | this.$showMessage(data.message || '查询失败'); |
| | | } |
| | | }, |
| | | async searchTool() { |
| | | await this.fetchTools(this.searchKey); |
| | | }, |
| | | selectTool(tool) { |
| | | this.selectedToolNo = tool.no; |
| | |
| | | this.selectedToolNo = ''; |
| | | this.toolName = ''; |
| | | this.toolModel = ''; |
| | | }, |
| | | setUseLimit() { |
| | | // 保存使用上限逻辑,实际应调用后端接口 |
| | | this.$showMessage('使用上限已保存(示例)'); |
| | | } |
| | | }, |
| | | mounted() { |
| | | // 实际应从后端加载刀具目录和使用记录 |
| | | this.filteredTools = this.toolList; |
| | | // 页面加载时拉取全部刀具 |
| | | this.fetchTools(''); |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .form-row { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-bottom: 1.2vh; |
| | | } |
| | | |
| | | .form-label { |
| | | width: 120px; |
| | | font-weight: bold; |
| | | } |
| | | |
| | | .form-select { |
| | | width: 220px; |
| | | padding: 1vh; |
| | | font-size: 1.1vw; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .button-row { |
| | | display: flex; |
| | | justify-content: center; |
| | | gap: 32px; |
| | | margin: 2vh 0; |
| | | } |
| | | |
| | | .page { |
| | | padding: 2vh; |
| | | .top-section-grid { |
| | | display: flex; |
| | | flex-direction: column; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .top-section { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | justify-content: center; |
| | | align-items: flex-end; |
| | | gap: 32px; |
| | | margin-bottom: 2vh; |
| | | } |
| | | |
| | | .form-group { |
| | | .form-cell { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-right: 2vw; |
| | | margin-bottom: 1.5vh; |
| | | } |
| | | |
| | | .form-label { |
| | | width: 90px; |
| | | font-weight: bold; |
| | | } |
| | | |
| | | .input { |
| | | padding: 1vh; |
| | | font-size: 1.5vw; |
| | | font-size: 1.1vw; |
| | | border: 1px solid #ccc; |
| | | width: 16vw; |
| | | width: 10vw; |
| | | margin-right: 8px; |
| | | } |
| | | |
| | | .form-select { |
| | | width: 12vw; |
| | | padding: 1vh; |
| | | font-size: 1.1vw; |
| | | margin-right: 8px; |
| | | } |
| | | |
| | | .btn-blue { |
| | |
| | | color: white; |
| | | border: none; |
| | | padding: 8px 18px; |
| | | margin-left: 10px; |
| | | margin-left: 8px; |
| | | border-radius: 5px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .btn-disabled { |
| | | background-color: #ccc; |
| | | .button-row { |
| | | display: flex; |
| | | justify-content: center; |
| | | gap: 32px; |
| | | margin: 2vh 0; |
| | | } |
| | | |
| | | .save-btn, .cancel-btn { |
| | | width: 28%; |
| | | padding: 1.5vh; |
| | | background-color: #00A2E9; |
| | | color: white; |
| | | font-size: 1.2vw; |
| | | border: none; |
| | | padding: 8px 18px; |
| | | margin-left: 10px; |
| | | text-align: center; |
| | | border-radius: 5px; |
| | | cursor: not-allowed; |
| | | } |
| | | |
| | | .cancel-btn { |
| | | background-color: #ccc; |
| | | color: #333; |
| | | } |
| | | |
| | | .dialog-overlay { |
| | |
| | | display: flex; |
| | | justify-content: space-around; |
| | | margin-top: 2vh; |
| | | } |
| | | |
| | | .save-btn, .cancel-btn { |
| | | width: 28%; |
| | | padding: 1.5vh; |
| | | background-color: #00A2E9; |
| | | color: white; |
| | | font-size: 1.2vw; |
| | | border: none; |
| | | text-align: center; |
| | | border-radius: 5px; |
| | | } |
| | | |
| | | .cancel-btn { |
| | | background-color: #ccc; |
| | | color: #333; |
| | | } |
| | | |
| | | .tool-desc { |