|
|
@@ -13,8 +13,9 @@
|
|
|
@keyup.enter="add_onSubmit"
|
|
|
id="searchInput"
|
|
|
class="gongfen-order-search-input"
|
|
|
+ :disabled="workScoreDialogVisible"
|
|
|
/>
|
|
|
- <el-button type="primary" icon="search" class="gongfen-search-btn" @click="add_onSubmit">查询</el-button>
|
|
|
+ <el-button type="primary" icon="search" class="gongfen-search-btn" :disabled="workScoreDialogVisible" @click="add_onSubmit">查询</el-button>
|
|
|
<span class="gongfen-toolbar-label">机台号</span>
|
|
|
<el-input v-model="add_formData['机台号']" readonly class="gongfen-toolbar-field" />
|
|
|
<span class="gongfen-toolbar-label">工序</span>
|
|
|
@@ -41,7 +42,7 @@
|
|
|
|
|
|
<div class="gongfen-report-tabs">
|
|
|
<!-- 表格数据 -->
|
|
|
- <el-tabs v-model="activeName" @tab-change="relayoutGongfenHistoryTable">
|
|
|
+ <el-tabs v-model="activeName" @tab-click="onGongfenTabClick">
|
|
|
<el-tab-pane label="当天报工记录" name="first">
|
|
|
<el-table
|
|
|
ref="gongfenHistoryTableRef"
|
|
|
@@ -676,6 +677,8 @@ const getGongfenHistorySummaries = ({ columns, data }) => {
|
|
|
const _code = ref('裁剪')
|
|
|
//全局接口接受的物理地址
|
|
|
const Machine = ref('')
|
|
|
+/** 机台 MAC 映射是否就绪;失败时禁止报工,避免静默落入测试机台 */
|
|
|
+const machineReady = ref(false)
|
|
|
//全局获取UniqId
|
|
|
const UniqId = ref('')
|
|
|
|
|
|
@@ -686,33 +689,39 @@ const selectedEmployee = ref('')
|
|
|
//物理地址获取机台编号
|
|
|
const getMachineMacdata = async () => {
|
|
|
try {
|
|
|
- const data = await getMachineMac({sys_sbID:Machine.value});
|
|
|
+ const data = await getMachineMac({ sys_sbID: Machine.value })
|
|
|
if (data.data === null) {
|
|
|
- // ElMessage({
|
|
|
- // type: 'error',
|
|
|
- // message: '未获取到机台编号请确认MAC地址或与管理员联系'
|
|
|
- // })
|
|
|
- add_formData['机台号'] = '测试机台'
|
|
|
- add_formData['工序'] = _code.value
|
|
|
- add_formData['组别'] = "测试"
|
|
|
- add_formData['人员'] = "测试"
|
|
|
- return;
|
|
|
+ machineReady.value = false
|
|
|
+ add_formData['机台号'] = ''
|
|
|
+ add_formData['工序'] = ''
|
|
|
+ add_formData['组别'] = ''
|
|
|
+ add_formData['人员'] = ''
|
|
|
+ employees.value = []
|
|
|
+ ElMessage.error('未获取到机台编号,请确认 MAC 地址或与管理员联系')
|
|
|
+ return
|
|
|
}
|
|
|
add_formData['机台号'] = data.data['机台号']
|
|
|
add_formData['工序'] = data.data['生产工序']
|
|
|
add_formData['组别'] = data.data['组别']
|
|
|
add_formData['人员'] = data.data['组长']
|
|
|
_code.value = data.data['生产工序']
|
|
|
- // 获取员工数据
|
|
|
+ machineReady.value = true
|
|
|
getEmployeeData(data.data['机台号'])
|
|
|
setTimeout(() => {
|
|
|
- const inputElement = document.getElementById('searchInput');
|
|
|
- if (inputElement) {
|
|
|
- inputElement.focus();
|
|
|
- }
|
|
|
- }, 100); // 延迟100毫秒
|
|
|
+ const inputElement = document.getElementById('searchInput')
|
|
|
+ if (inputElement) {
|
|
|
+ inputElement.focus()
|
|
|
+ }
|
|
|
+ }, 100)
|
|
|
} catch (error) {
|
|
|
console.error(error)
|
|
|
+ machineReady.value = false
|
|
|
+ add_formData['机台号'] = ''
|
|
|
+ add_formData['工序'] = ''
|
|
|
+ add_formData['组别'] = ''
|
|
|
+ add_formData['人员'] = ''
|
|
|
+ employees.value = []
|
|
|
+ ElMessage.error('获取机台信息失败,请检查本机服务后刷新页面')
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -926,6 +935,11 @@ const openWorkScoreDialog = async () => {
|
|
|
warningres('请先查询订单信息');
|
|
|
return;
|
|
|
}
|
|
|
+ const machineNo = String(add_formData['机台号'] || '').trim()
|
|
|
+ if (!machineReady.value || !machineNo) {
|
|
|
+ warningres('未获取到机台信息,请确认本机 MAC 服务或与管理员联系后再报工')
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
resetWorkScoreDialogState()
|
|
|
const hasData = await loadProcessParts()
|
|
|
@@ -936,14 +950,17 @@ const openWorkScoreDialog = async () => {
|
|
|
};
|
|
|
|
|
|
const loadOrderAttachments = async (orderNo) => {
|
|
|
+ const seq = ++attachmentQuerySeq
|
|
|
try {
|
|
|
const jsOrderAttachments = await OrderAttachments({ order: orderNo, desc: '技术附件' })
|
|
|
const ddOrderAttachments = await OrderAttachments({ order: orderNo, desc: '订单资料附件' })
|
|
|
+ if (seq !== attachmentQuerySeq) return
|
|
|
const jsList = jsOrderAttachments?.data?.list || []
|
|
|
const ddList = ddOrderAttachments?.data?.list || []
|
|
|
jstableData.splice(0, jstableData.length, ...jsList)
|
|
|
ddtableData.splice(0, ddtableData.length, ...ddList)
|
|
|
} catch (error) {
|
|
|
+ if (seq !== attachmentQuerySeq) return
|
|
|
console.error('获取附件失败:', error)
|
|
|
jstableData.length = 0
|
|
|
ddtableData.length = 0
|
|
|
@@ -1556,9 +1573,16 @@ const GetAddr = () => {
|
|
|
result += res.macAddress[i]
|
|
|
}
|
|
|
Machine.value = result
|
|
|
- getMachineMacdata(Machine.value)
|
|
|
+ getMachineMacdata(Machine.value)
|
|
|
+ } else if (xmlhttp.readyState == 4) {
|
|
|
+ machineReady.value = false
|
|
|
+ ElMessage.error('无法连接本机 MAC 服务(127.0.0.1:8090),请检查后刷新页面')
|
|
|
}
|
|
|
}
|
|
|
+ xmlhttp.onerror = function() {
|
|
|
+ machineReady.value = false
|
|
|
+ ElMessage.error('无法连接本机 MAC 服务(127.0.0.1:8090),请检查后刷新页面')
|
|
|
+ }
|
|
|
// 3. 打开一个连接
|
|
|
xmlhttp.open("get", "http://127.0.0.1:8090/init")
|
|
|
// 5. 发送
|
|
|
@@ -1626,6 +1650,24 @@ const refreshProcessProduction = async () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/** 点击「当天报工记录 / 工序产量核查」时重新拉取最新数据(含再次点击当前 Tab) */
|
|
|
+const onGongfenTabClick = async (pane) => {
|
|
|
+ const name = pane?.paneName ?? pane?.props?.name
|
|
|
+ if (name === 'first') {
|
|
|
+ await getGongfenHistory()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (name === 'processProduction') {
|
|
|
+ await refreshProcessProduction()
|
|
|
+ }
|
|
|
+ relayoutGongfenHistoryTable()
|
|
|
+}
|
|
|
+
|
|
|
+// 查询请求序号:丢弃过期响应,避免连扫串单
|
|
|
+let orderQuerySeq = 0
|
|
|
+let historyQuerySeq = 0
|
|
|
+let attachmentQuerySeq = 0
|
|
|
+
|
|
|
// 查询
|
|
|
/** 子订单号如 DC2605017-0800 转为订单号 DC2605017 再查询 */
|
|
|
const normalizeOrderSearchInput = (val) => {
|
|
|
@@ -1636,12 +1678,17 @@ const normalizeOrderSearchInput = (val) => {
|
|
|
}
|
|
|
|
|
|
const add_onSubmit = async ()=>{
|
|
|
+ if (workScoreDialogVisible.value) {
|
|
|
+ warningres('请先关闭工分报工窗口后再查询其他订单,避免报错单')
|
|
|
+ return
|
|
|
+ }
|
|
|
const searchKey = normalizeOrderSearchInput(add_searchInfo.value)
|
|
|
if (!searchKey) {
|
|
|
warningres('请扫描订单二维码')
|
|
|
return;
|
|
|
}
|
|
|
add_searchInfo.value = searchKey
|
|
|
+ const seq = ++orderQuerySeq
|
|
|
|
|
|
try {
|
|
|
const response = await WorkOrderList({
|
|
|
@@ -1649,6 +1696,7 @@ const add_onSubmit = async ()=>{
|
|
|
page: 1,
|
|
|
limit: 10,
|
|
|
});
|
|
|
+ if (seq !== orderQuerySeq) return
|
|
|
const list = response.data?.data || []
|
|
|
const total = response.data?.total ?? list.length
|
|
|
if (response.code === 0 && response.data) {
|
|
|
@@ -1665,6 +1713,32 @@ const add_onSubmit = async ()=>{
|
|
|
|
|
|
// 获取工分报工历史记录
|
|
|
await getGongfenHistory();
|
|
|
+ if (seq !== orderQuerySeq) return
|
|
|
+
|
|
|
+ const searchValue = getActiveOrderNo();
|
|
|
+
|
|
|
+ // 附件加载失败不影响查询结果
|
|
|
+ await loadOrderAttachments(searchValue);
|
|
|
+ if (seq !== orderQuerySeq) return
|
|
|
+
|
|
|
+ // 查询成功后清空搜索框,便于继续扫描下一单
|
|
|
+ add_searchInfo.value = '';
|
|
|
+ _searchInput();
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ warningres(response.msg || '查询失败');
|
|
|
+ orderInfoList.length = 0;
|
|
|
+ currentOrderNo.value = '';
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ if (seq !== orderQuerySeq) return
|
|
|
+ console.error('查询订单失败:', error);
|
|
|
+ warningres('网络错误,请稍后重试');
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+// 获取工分报工历史记录
|
|
|
+ await getGongfenHistory();
|
|
|
|
|
|
const searchValue = getActiveOrderNo();
|
|
|
|
|
|
@@ -1688,11 +1762,13 @@ const add_onSubmit = async ()=>{
|
|
|
|
|
|
// 获取工分报工历史记录
|
|
|
const getGongfenHistory = async () => {
|
|
|
+ const seq = ++historyQuerySeq
|
|
|
try {
|
|
|
const response = await GetReportingWorkRecord({
|
|
|
date: currentDates,
|
|
|
machine: add_formData['机台号']
|
|
|
});
|
|
|
+ if (seq !== historyQuerySeq) return
|
|
|
if (response.code === 0 && response.data) {
|
|
|
gongfenHistoryData.value = response.data || [];
|
|
|
} else {
|
|
|
@@ -1700,6 +1776,7 @@ const getGongfenHistory = async () => {
|
|
|
}
|
|
|
relayoutGongfenHistoryTable()
|
|
|
} catch (error) {
|
|
|
+ if (seq !== historyQuerySeq) return
|
|
|
console.error('获取工分报工历史记录失败:', error);
|
|
|
gongfenHistoryData.value = [];
|
|
|
relayoutGongfenHistoryTable()
|
|
|
@@ -1708,20 +1785,46 @@ const getGongfenHistory = async () => {
|
|
|
|
|
|
const deleteReportingWork = async (row) => {
|
|
|
try {
|
|
|
- await ElMessageBox.confirm('确定要删除这条报工记录吗?', '提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
- type: 'warning'
|
|
|
- });
|
|
|
+ const escapeHtml = (val) => String(val ?? '')
|
|
|
+ .replace(/&/g, '&')
|
|
|
+ .replace(/</g, '<')
|
|
|
+ .replace(/>/g, '>')
|
|
|
+ .replace(/"/g, '"')
|
|
|
+ const processCode = escapeHtml(row?.process_code) || '-'
|
|
|
+ const processName = escapeHtml(row?.process_name) || '-'
|
|
|
+ const staffName = escapeHtml(row?.staff_name) || '-'
|
|
|
+ const number = escapeHtml(row?.number) || '-'
|
|
|
+ await ElMessageBox.confirm(
|
|
|
+ `<div class="gongfen-delete-msg">
|
|
|
+ <div>确定要删除这条报工记录吗?</div>
|
|
|
+ <div class="gongfen-delete-msg__row">工序号:<strong>${processCode}</strong></div>
|
|
|
+ <div class="gongfen-delete-msg__row">工序名称:<strong>${processName}</strong></div>
|
|
|
+ <div class="gongfen-delete-msg__row">员工姓名:<strong>${staffName}</strong></div>
|
|
|
+ <div class="gongfen-delete-msg__row">数量:<strong>${number}</strong></div>
|
|
|
+ </div>`,
|
|
|
+ '提示',
|
|
|
+ {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning',
|
|
|
+ dangerouslyUseHTMLString: true,
|
|
|
+ customClass: 'gongfen-delete-confirm',
|
|
|
+ }
|
|
|
+ );
|
|
|
|
|
|
+ const deleteId = row?.id ?? row?.ID
|
|
|
+ if (deleteId === undefined || deleteId === null || deleteId === '') {
|
|
|
+ ElMessage.warning('缺少报工记录ID,无法删除')
|
|
|
+ return
|
|
|
+ }
|
|
|
const response = await DeleteReportingWork({
|
|
|
- id: row.id
|
|
|
+ id: deleteId
|
|
|
});
|
|
|
|
|
|
if (response.code === 0) {
|
|
|
ElMessage.success('删除成功');
|
|
|
- // 刷新数据
|
|
|
- getGongfenHistory();
|
|
|
+ await getGongfenHistory();
|
|
|
+ await refreshProcessProduction();
|
|
|
} else {
|
|
|
ElMessage.error(response.msg || '删除失败');
|
|
|
}
|
|
|
@@ -1872,6 +1975,7 @@ const submitEditReportingQty = async () => {
|
|
|
ElMessage.success(res.msg || '修改成功')
|
|
|
editReportingQtyVisible.value = false
|
|
|
await getGongfenHistory()
|
|
|
+ await refreshProcessProduction()
|
|
|
} else {
|
|
|
ElMessage.error(res?.msg || '修改失败')
|
|
|
}
|
|
|
@@ -3226,4 +3330,27 @@ const warningres = (arr) => {
|
|
|
margin-right: 0;
|
|
|
margin-bottom: 6px;
|
|
|
}
|
|
|
+
|
|
|
+/* 工分报工删除确认:图标顶对齐,工序信息左对齐 */
|
|
|
+.gongfen-delete-confirm .el-message-box__container {
|
|
|
+ align-items: flex-start;
|
|
|
+}
|
|
|
+.gongfen-delete-confirm .el-message-box__status {
|
|
|
+ top: 2px;
|
|
|
+}
|
|
|
+.gongfen-delete-confirm .el-message-box__message {
|
|
|
+ padding-left: 0;
|
|
|
+ text-align: left;
|
|
|
+}
|
|
|
+.gongfen-delete-confirm .gongfen-delete-msg {
|
|
|
+ text-align: left;
|
|
|
+ line-height: 1.7;
|
|
|
+}
|
|
|
+.gongfen-delete-confirm .gongfen-delete-msg__row {
|
|
|
+ margin-top: 6px;
|
|
|
+}
|
|
|
+.gongfen-delete-confirm .gongfen-delete-msg__row strong {
|
|
|
+ color: #f56c6c;
|
|
|
+ font-weight: 600;
|
|
|
+}
|
|
|
</style>
|