Files
klp-mono/apps/hand-factory/pages/todo/components/relabel-popup.vue
王文昊 8f96197aa5 feat: 添加待办事项模块及相关功能
新增待办事项页面,包含钢卷列表展示、筛选功能、钢卷详情页,支持重贴标签操作和查看改判/调拨记录,同时添加底部 tab 栏入口和对应图标资源
2026-05-20 11:09:08 +08:00

223 lines
4.9 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>
<uni-popup ref="popup" type="center" :safe-area="true">
<view class="popup-container">
<view class="popup-header">
<text class="popup-title">重贴标签</text>
<text class="popup-close" @click="close"></text>
</view>
<view class="popup-content">
<!-- 钢卷信息展示 -->
<view class="coil-info">
<view class="info-row">
<text class="label">入场钢卷号</text>
<text class="value">{{ coilInfo.enterCoilNo || '-' }}</text>
</view>
<view class="info-row">
<text class="label">当前钢卷号</text>
<text class="value highlight">{{ coilInfo.currentCoilNo || '-' }}</text>
</view>
<view class="info-row">
<text class="label">产品名称</text>
<text class="value">{{ coilInfo.itemName || '-' }}</text>
</view>
</view>
<!-- 操作人信息 -->
<view class="operator-info">
<text class="label">操作人</text>
<text class="value">{{ operatorName }}</text>
</view>
</view>
<view class="popup-footer">
<button class="btn btn-cancel" @click="close">取消</button>
<button class="btn btn-confirm" @click="handleConfirm" :disabled="loading">
{{ loading ? '提交中...' : '确认重贴' }}
</button>
</view>
</view>
</uni-popup>
</template>
<script>
import { relabelCoil, completeTodoAction } from '@/api/wms/todo'
export default {
name: 'RelabelPopup',
data() {
return {
loading: false,
coilInfo: {}
}
},
computed: {
operatorName() {
return this.$store.state.user.nickName || this.$store.state.user.name || '未知'
}
},
methods: {
open(coilInfo) {
this.coilInfo = coilInfo
this.$refs.popup.open()
},
close() {
this.$refs.popup.close()
},
async handleConfirm() {
this.loading = true
try {
// 1. 提交重贴标签操作
await relabelCoil({
coilId: this.coilInfo.coilId,
currentCoilNo: this.coilInfo.currentCoilNo,
operator: this.operatorName,
operateTime: new Date().toISOString()
})
// 2. 完成待办操作
if (this.coilInfo.actionId) {
await completeTodoAction(this.coilInfo.actionId)
}
uni.showToast({
title: '重贴标签成功',
icon: 'success'
})
this.close()
this.$emit('success')
} catch (error) {
console.error('重贴标签失败:', error)
uni.showToast({
title: '操作失败,请重试',
icon: 'none'
})
} finally {
this.loading = false
}
}
}
}
</script>
<style scoped lang="scss">
.popup-container {
background: #ffffff;
border-radius: 16rpx;
width: 80vw;
max-width: 600rpx;
overflow: hidden;
.popup-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx;
border-bottom: 1rpx solid #f0f0f0;
.popup-title {
font-size: 32rpx;
font-weight: 600;
color: #333333;
}
.popup-close {
font-size: 36rpx;
color: #999999;
padding: 10rpx;
}
}
.popup-content {
padding: 30rpx;
.coil-info {
background: #f8f8f8;
border-radius: 12rpx;
padding: 24rpx;
margin-bottom: 30rpx;
.info-row {
display: flex;
margin-bottom: 16rpx;
&:last-child {
margin-bottom: 0;
}
.label {
font-size: 26rpx;
color: #666666;
width: 160rpx;
flex-shrink: 0;
}
.value {
font-size: 26rpx;
color: #333333;
flex: 1;
&.highlight {
color: #1a73e8;
font-weight: 500;
}
}
}
}
.operator-info {
display: flex;
align-items: center;
padding-top: 20rpx;
border-top: 1rpx solid #f0f0f0;
.label {
font-size: 26rpx;
color: #666666;
}
.value {
font-size: 26rpx;
color: #333333;
font-weight: 500;
}
}
}
.popup-footer {
display: flex;
padding: 20rpx 30rpx 40rpx;
gap: 20rpx;
.btn {
flex: 1;
height: 88rpx;
line-height: 88rpx;
text-align: center;
border-radius: 8rpx;
font-size: 30rpx;
border: none;
&::after {
border: none;
}
&.btn-cancel {
background: #f5f5f5;
color: #666666;
}
&.btn-confirm {
background: #1a73e8;
color: #ffffff;
&:disabled {
opacity: 0.6;
}
}
}
}
}
</style>