Files
rd_mes_uniapp/pages/basic/empEqpEnd.vue
2025-12-18 14:11:48 +08:00

207 lines
4.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<t-emp />
<view class="btns">
<button type="primary" class="btn" @click="search">查询</button>
<button type="primary" class="btn" @click="endAll" :disabled="searchEqpWithEmp.length===0">全部下机</button>
</view>
<h2 class="endableEqp">可下机设备</h2>
<view class="eqps" v-for="(item, index) in searchEqpWithEmp" :key="index">
<view class="info">
<view class="item">设备编码{{ item.eqpCode }}</view>
<view class="item">设备名称{{ item.eqpName }}</view>
</view>
<button type="primary" class="end" @click="end(index)">下机</button>
</view>
</view>
</template>
<script>
import {
addEnd,
listEmpEqpHistory
} from '@/api/basic/empEqpHistory.js'
import {
listEmployee
} from '@/api/mes/jobIn.js'
import {
getInfo
} from '@/api/login.js'
export default {
data() {
return {
empCode: this.$store.state.employee.empCode,
empName: this.$store.state.employee.empName,
eqpCode: null,
eqpName: null,
searchEqpWithEmp: [],
endEqp: []
}
},
methods: {
//根据员工姓名和员工编号来查询已上机但并未下机的设备
//注:只用一个字段无法精确查找,可能查找到老员工
search() {
this.searchEqpWithEmp = [];
listEmpEqpHistory({
empName: this.empName,
empCode: this.empCode
}).then(async res => {
if (res.rows.length > 0) {
for (var i in res.rows) {
//判断是否下机
if (!res.rows[i].endTime) {
this.searchEqpWithEmp.push({
eqpCode: res.rows[i].equipmentCode,
eqpName: res.rows[i].equipmentTitle
});
}
}
if (this.searchEqpWithEmp.length === 0) {
return uni.showToast({
title: '未查询到已上机设备',
icon: 'none'
})
}
} else {
this.$modal.showToast('没有可下机设备')
}
})
},
end(index) {
this.$modal.loading('操作中')
addEnd({
empCode: this.empCode,
eqpCode: this.searchEqpWithEmp[index].eqpCode
}).then(res => {
this.$modal.closeLoading();
this.$modal.msgSuccess("下机成功!")
this.search()
})
},
endAll() {
// 确认存在可下机设备
if (this.searchEqpWithEmp.length === 0) {
return uni.showToast({
title: '没有可下机设备',
icon: 'none'
})
}
// 确认操作弹窗
uni.showModal({
title: '操作确认',
content: `确定要下机全部${this.searchEqpWithEmp.length}台设备吗?`,
success: async (res) => {
if (res.confirm) {
try {
this.$modal.loading('批量下机中...')
// 创建所有设备的Promise数组
const requests = this.searchEqpWithEmp.map(device =>
addEnd({
empCode: this.empCode, // 使用动态empCode
eqpCode: device.eqpCode
})
)
// 并发执行所有请求
const results = await Promise.all(requests)
// 检查所有结果
const allSuccess = results.every(res => res.code === 200)
if (allSuccess) {
this.$modal.msgSuccess(`成功下机${results.length}台设备`)
this.search() // 刷新列表
} else {
uni.showToast({
title: '部分设备下机失败',
icon: 'none'
})
}
} catch (error) {
uni.showToast({
title: '批量下机操作异常',
icon: 'none'
})
} finally {
this.$modal.closeLoading()
}
}
}
})
}
},
}
</script>
<style scoped lang="scss">
page {
padding: 60rpx 40rpx;
color: #000;
font-size: 40rpx;
}
.empName {
display: inline-block;
margin-left: 80rpx;
}
.btns {
margin-top: 100rpx;
display: flex;
justify-content: space-between;
.btn {
width: 300rpx;
height: 100rpx;
margin: 0;
font-size: 40rpx;
background-color: deepskyblue;
border: none;
color: #fff;
}
}
.endableEqp {
margin: 60rpx 0 40rpx;
text-align: center;
}
.eqps {
display: flex;
justify-content: space-between;
align-items: center;
position: relative;
width: 100%;
padding: 20rpx;
border: 1px solid #ccc;
border-radius: 10rpx;
margin-bottom: 20rpx;
background-color: #f9f9f9;
.info {
flex: 1;
margin-right: 20rpx;
}
.item {
margin-bottom: 10rpx;
font-weight: bold;
}
.end {
position: absolute;
top: 20rpx;
right: 20rpx;
width: 200rpx;
height: 90rpx;
background-color: deepskyblue;
border: none;
color: #fff;
}
}
</style>