<template>
|
<div class="page">
|
<!-- 右上角刷新 -->
|
<div class="top-right">
|
<button class="refresh-btn" @click="refresh" :disabled="loading">刷新</button>
|
</div>
|
|
<!-- 状态区 -->
|
<div class="middle-section">
|
<div class="item notice">
|
<h4>说明:先点击调机开始,再点击送检呼叫;成功后两个按钮隐藏。首次首检合格后系统自动写入开工/调机完成时间。</h4>
|
</div>
|
|
<!-- 调机开始 -->
|
<div class="item" v-if="showStartBtn">
|
<button class="btn-blue"
|
@click="onStartClick"
|
:disabled="loading">
|
点击调机开始
|
</button>
|
<input class="txt-inp"
|
v-model="maStartTime"
|
placeholder="点击后记录调机时间"
|
disabled />
|
<div class="hint">说明:点击调机开始后,该按钮与送检按钮将根据后续操作隐藏。</div>
|
</div>
|
|
<!-- 已开始但按钮隐藏时仍显示时间 -->
|
<div class="item" v-else>
|
<button class="btn-hidden" disabled>调机开始(已记录)</button>
|
<input class="txt-inp" v-model="maStartTime" disabled />
|
</div>
|
|
<!-- 送检呼叫 -->
|
<div class="item" v-if="showShoutBtn">
|
<button class="btn-blue"
|
@click="onShoutClick"
|
:disabled="loading || !maStartTime">
|
点击送检呼叫
|
</button>
|
<input class="txt-inp"
|
v-model="maShoutTime"
|
placeholder="点击按钮带出时间"
|
disabled />
|
<div class="hint">说明:需先调机开始后才能送检。</div>
|
</div>
|
|
<!-- 已送检 -->
|
<div class="item" v-else>
|
<button class="btn-hidden" disabled>送检呼叫(已记录)</button>
|
<input class="txt-inp" v-model="maShoutTime" disabled />
|
</div>
|
|
<!-- 调机完成(首检OK自动写入) -->
|
<div class="item">
|
<button class="btn-disabled" disabled>
|
首检OK=调机完成=开工
|
</button>
|
<input class="txt-inp"
|
v-model="maEndTime"
|
placeholder="首次首检确认OK后系统写入"
|
disabled />
|
<div class="hint">
|
若首检通过,后端调用 QualifiedInspection 自动写入 MaEndTime 与 StartTime。
|
</div>
|
</div>
|
</div>
|
|
<!-- 底部操作 -->
|
<div class="bottom-section">
|
<button class="save-btn"
|
v-if="!maEndTime"
|
:disabled="loading || !statusForm.id"
|
@click="save">
|
保存并生效
|
</button>
|
<button class="btn-disabled"
|
v-else
|
disabled>
|
保存并生效
|
</button>
|
|
<button class="cancel-btn" :disabled="loading" @click="cancel">
|
取消
|
</button>
|
</div>
|
|
<div class="footer-info" v-if="error">
|
<span class="error">{{ error }}</span>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
export default {
|
name: 'AdjustInspect',
|
props: {
|
orderNo: { type: String, required: true },
|
orderId: { type: Number, required: true },
|
machineNo: { type: String, required: true }
|
},
|
data() {
|
return {
|
maShoutTime: '',
|
maStartTime: '',
|
maEndTime: '',
|
statusForm: {},
|
flag: -1,
|
loading: false,
|
error: '',
|
showStartBtn: true,
|
showShoutBtn: true
|
}
|
},
|
created() {
|
this.loadStatus();
|
},
|
methods: {
|
formatNow() {
|
// 使用项目已有的日期工具 (若必须用 this.$getDate 保留)
|
return this.$getDate('yyyy-mm-dd hh24:mi:ss');
|
},
|
async loadStatus() {
|
this.loading = true;
|
this.error = '';
|
try {
|
const res = await this.$post({
|
url: '/MesOrderSta/FindByOrderNo',
|
data: {
|
orderId: this.orderId,
|
orderNo: this.orderNo
|
}
|
});
|
const row = res.data.tbBillList || {};
|
this.statusForm = row;
|
this.maStartTime = row.maStartTime || '';
|
this.maShoutTime = row.maShoutTime || '';
|
this.maEndTime = row.maEndTime || '';
|
// 控制按钮显隐
|
this.showStartBtn = !this.maStartTime;
|
this.showShoutBtn = !this.maShoutTime;
|
} catch (e) {
|
this.error = '加载工单状态失败:' + (e.message || e);
|
} finally {
|
this.loading = false;
|
}
|
},
|
refresh() {
|
this.loadStatus();
|
},
|
onStartClick() {
|
if (this.maStartTime) return;
|
this.maStartTime = this.formatNow();
|
this.showStartBtn = false;
|
// flag 保持 -1,不触发自动首检逻辑
|
this.flag = -1;
|
},
|
onShoutClick() {
|
if (!this.maStartTime) {
|
this.$showMessage('请先点击调机开始');
|
return;
|
}
|
if (this.maShoutTime) return;
|
this.maShoutTime = this.formatNow();
|
this.showShoutBtn = false;
|
this.flag = -1;
|
},
|
async save() {
|
if (!this.statusForm.id) {
|
this.$showMessage('ID为空,不允许推送');
|
return;
|
}
|
this.loading = true;
|
this.error = '';
|
try {
|
const res = await this.$post({
|
url: '/MesOrderSta/ChangeMachineTime',
|
data: {
|
maStartTime: this.maStartTime,
|
maShoutTime: this.maShoutTime,
|
maEndTime: this.maEndTime, // 这里通常为空,后端首检通过后自动写入
|
id: this.statusForm.id,
|
orderId: this.orderId,
|
machineNo: this.machineNo,
|
flag: this.flag
|
}
|
});
|
if (res.data.tbBillList) {
|
this.$showMessage('保存成功');
|
await this.loadStatus();
|
} else {
|
this.$showMessage('保存失败');
|
this.cancel();
|
}
|
} catch (e) {
|
this.error = '保存异常:' + (e.message || e);
|
this.$showMessage('保存异常');
|
} finally {
|
this.loading = false;
|
}
|
},
|
cancel() {
|
// 回退到上次加载状态
|
this.maStartTime = this.statusForm.maStartTime || '';
|
this.maShoutTime = this.statusForm.maShoutTime || '';
|
this.maEndTime = this.statusForm.maEndTime || '';
|
this.showStartBtn = !this.maStartTime;
|
this.showShoutBtn = !this.maShoutTime;
|
}
|
}
|
}
|
</script>
|
|
<style scoped>
|
.page {
|
padding: 2vh;
|
display: flex;
|
flex-direction: column;
|
box-sizing: border-box;
|
height: 100%;
|
position: relative;
|
}
|
|
.top-right {
|
position: absolute;
|
top: 10px;
|
right: 50px;
|
z-index: 10;
|
}
|
|
.refresh-btn {
|
padding: 10px;
|
background-color: #00A2E9;
|
color: #fff;
|
font-size: 1.2vw;
|
border: none;
|
border-radius: 4px;
|
cursor: pointer;
|
}
|
|
.middle-section {
|
display: flex;
|
flex-direction: column;
|
gap: 18px;
|
margin-top: 60px;
|
}
|
|
.item {
|
display: flex;
|
flex-direction: row;
|
align-items: flex-start;
|
gap: 20px;
|
}
|
|
.item.notice {
|
height: auto;
|
}
|
|
button {
|
width: 28%;
|
min-width: 200px;
|
padding: 14px;
|
font-size: 1.1vw;
|
border: none;
|
cursor: pointer;
|
border-radius: 4px;
|
}
|
|
.btn-blue {
|
background-color: #00A2E9;
|
color: #fff;
|
}
|
|
.btn-disabled {
|
background-color: #9d9d9d;
|
color: #fff;
|
cursor: not-allowed;
|
}
|
|
.btn-hidden {
|
background-color: #d0d0d0;
|
color: #666;
|
cursor: not-allowed;
|
}
|
|
.txt-inp {
|
flex: 1;
|
height: 54px;
|
padding: 10px;
|
font-size: 1.0vw;
|
border: 1px solid #ccc;
|
border-radius: 4px;
|
box-sizing: border-box;
|
}
|
|
.hint {
|
flex: 0 0 240px;
|
font-size: 0.9vw;
|
color: #b40000;
|
line-height: 1.4;
|
}
|
|
.bottom-section {
|
display: flex;
|
justify-content: space-between;
|
margin-top: auto;
|
gap: 20px;
|
padding-top: 30px;
|
}
|
|
.save-btn,
|
.cancel-btn {
|
width: 48%;
|
padding: 16px;
|
background-color: #00A2E9;
|
color: #fff;
|
font-size: 1.2vw;
|
border: none;
|
border-radius: 4px;
|
cursor: pointer;
|
}
|
|
.save-btn:disabled,
|
.cancel-btn:disabled {
|
background-color: #7fbfdc;
|
cursor: not-allowed;
|
}
|
|
.footer-info {
|
margin-top: 16px;
|
font-size: 0.9vw;
|
}
|
|
.error {
|
color: #d40000;
|
}
|
</style>
|