You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

811 lines
25 KiB

1 week ago
<template>
<view class="container">
<!-- 主内容区域 -->
<scroll-view class="content" scroll-y="true">
<!-- 基础信息 -->
<view class="section">
<view class="section-header">
<text class="section-title">基础信息</text>
</view>
<view class="info-card" v-if="pallet">
<view class="info-row">
<text class="label">工装托盘编号:</text>
<text class="value">{{pallet.palletNo || '-' }}</text>
</view>
<!-- <view class="info-row">
<text class="label">外形尺寸:</text>
<text class="value">{{pallet.size || '-' }}</text>
</view>
<view class="info-row">
<text class="label">载重:</text>
<text class="value">{{pallet.load || '-' }}</text>
</view>
<view class="info-row">
<text class="label">使用状态:</text>
<text class="value status-used">{{ retType(pallet.palletStatus,3) || '-' }}</text>
</view>
<view class="info-row">
<text class="label">创建日期:</text>
<text class="value">{{pallet.createDate || '-' }}</text>
</view>
<view class="info-row">
<text class="label">备注:</text>
<text class="value">{{pallet.remark || '-' }}</text>
</view> -->
<view class="info-row">
<text class="label">转运状态:</text>
<text class="value status-transit">{{ retType(pallet.status,1)|| '-' }}</text>
</view>
<!-- <view class="info-row">
<text class="label">当前转运状态:</text>
<text class="value">{{pallet.deliveryId || '-' }}</text>
</view> -->
<view class="info-row">
<text class="label">存放部门:</text>
<text class="value">{{ retType(pallet.departCode,2) || '-' }}</text>
</view>
<view class="info-row">
<text class="label">存放工场:</text>
<text class="value">{{pallet.workshop || '-' }}</text>
</view>
<view class="info-row">
<text class="label">存放区域:</text>
<text class="value">{{pallet.location || '-' }}</text>
</view>
<view class="info-row">
<text class="label">存放地址:</text>
<text class="value">{{pallet.address || '-' }}</text>
</view>
<view class="info-row">
<text class="label">确认时间:</text>
<text class="value">{{pallet.confirmTime || '-' }}</text>
</view>
<view class="info-row">
<text class="label">确认人员:</text>
<text class="value">{{pallet.confirmName || '-' }}</text>
</view>
<view class="info-row">
<text class="label">存放天数:</text>
<text class="value">{{pallet.stayDays || '-' }}</text>
</view>
<view class="info-row">
<text class="label">装盘船只:</text>
<text class="value">{{pallet.loadProject || '-' }}</text>
</view>
<view class="info-row">
<text class="label">装盘安装托盘表号:</text>
<text class="value">{{pallet.loadInst || '-' }}</text>
</view>
<view class="info-row">
<text class="label">装盘数量:</text>
<text class="value">{{pallet.loadQty || '-' }}</text>
</view>
<view class="info-row">
<text class="label">装盘信息:</text>
<text class="value">{{pallet.loadDesc || '-' }}</text>
</view>
<view class="info-row" v-if="pallet.status=='03'||pallet.status=='04'">
<text class="label">去向部门:</text>
<text class="value">{{ retType(pallet.toDepartCode,2) || '-' }}</text>
</view>
<view class="info-row" v-if="pallet.status=='03'||pallet.status=='04'">
<text class="label">去向工场:</text>
<text class="value">{{pallet.toWorkshop || '-' }}</text>
</view>
<view class="info-row" v-if="pallet.status=='03'||pallet.status=='04'">
<text class="label">去向位置:</text>
<text class="value">{{pallet.toLocation || '-' }}</text>
</view>
<view class="info-row" v-if="pallet.status=='03'||pallet.status=='04'">
<text class="label">去向地址:</text>
<text class="value">{{pallet.toAddress || '-' }}</text>
</view>
<view class="info-row">
<text class="label">转运时间:</text>
<text class="value">{{pallet.fromTime || '-' }}</text>
</view>
<view class="info-row">
<text class="label">转运人员:</text>
<text class="value">{{pallet.fromName || '-' }}</text>
</view>
<!-- <view class="info-row">
<text class="label">装盘时间:</text>
<text class="value">{{pallet.loadTime || '-' }}</text>
</view>
<view class="info-row">
<text class="label">装盘人:</text>
<text class="value">{{pallet.loadName || '-' }}</text>
</view>
<view class="info-row">
<text class="label">配送单号:</text>
<text class="value">{{pallet.deliveryNo || '-' }}</text>
</view>
<view class="info-row">
<text class="label">车辆牌号:</text>
<text class="value">{{pallet.deliveryCar || '-' }}</text>
</view>
<view class="info-row">
<text class="label">配送/转运部门:</text>
<text class="value">{{ retType(pallet.fromDepartCode,2)|| '-' }}</text>
</view>
<view class="info-row">
<text class="label">配送/转运工场:</text>
<text class="value">{{pallet.fromWorkshop || '-' }}</text>
</view>
<view class="info-row">
<text class="label">配送/转运区域:</text>
<text class="value">{{pallet.fromLocation || '-' }}</text>
</view>
<view class="info-row">
<text class="label">配送/转运地址:</text>
<text class="value">{{pallet.fromAddress || '-' }}</text>
</view>
<view class="info-row">
<text class="label">配送/转运人员电话:</text>
<text class="value">{{pallet.fromPhone || '-' }}</text>
</view> -->
<!-- <view class="info-row">
<text class="label">配送/转运备注:</text>
<text class="value">{{pallet.fromRemark || '-' }}</text>
</view>
<view class="info-row">
<text class="label">去向接收人员:</text>
<text class="value">{{pallet.toName || '-' }}</text>
</view>
<view class="info-row">
<text class="label">去向接收人员电话:</text>
<text class="value">{{pallet.toPhone || '-' }}</text>
</view>
<view class="info-row">
<text class="label">接收部门:</text>
<text class="value">{{ retType(pallet.receiveDepartCode,2) || '-' }}</text>
</view>
<view class="info-row">
<text class="label">接收工场:</text>
<text class="value">{{pallet.receiveWorkshop || '-' }}</text>
</view>
<view class="info-row">
<text class="label">接收区域:</text>
<text class="value">{{pallet.receiveLocation || '-' }}</text>
</view>
<view class="info-row">
<text class="label">接收地址:</text>
<text class="value">{{pallet.receiveAddress || '-' }}</text>
</view>
<view class="info-row">
<text class="label">接收时间:</text>
<text class="value">{{pallet.receiveTime || '-' }}</text>
</view>
<view class="info-row">
<text class="label">接收人员:</text>
<text class="value">{{pallet.receiveName || '-' }}</text>
</view>
<view class="info-row">
<text class="label">接收人员电话:</text>
<text class="value">{{pallet.receivePhone || '-' }}</text>
</view>
<view class="info-row">
<text class="label">接收备注:</text>
<text class="value">{{pallet.receiveRemark || '-' }}</text>
</view>
<view class="info-row">
<text class="label">卸盘时间:</text>
<text class="value">{{pallet.finishTime || '-' }}</text>
</view>
<view class="info-row">
<text class="label">卸盘人员:</text>
<text class="value">{{pallet.finishName || '-' }}</text>
</view>
<view class="info-row">
<text class="label">卸盘人员电话:</text>
<text class="value">{{pallet.finishPhone || '-' }}</text>
</view>
<view class="info-row">
<text class="label">卸盘备注:</text>
<text class="value">{{pallet.finishRemark || '-' }}</text>
</view> -->
</view>
</view>
<!-- 装盘明细 -->
<view class="section">
<view class="section-header">
<text class="section-title">装盘明细{{pallet&&pallet.instdetailList?pallet.instdetailList.length:0}}</text>
</view>
<view class="list-container" v-if="pallet&&pallet.instdetailList">
<view v-for="(item, index) in pallet.instdetailList" :key="index" class="list-item">
<view class="item-header" @click="gotocxDetail(item.instno,item.project)">
<text class="item-tip">{{ item.groupDesc }} ({{ item.qty?parseFloat(item.qty).toFixed(2):'0.00'}})</text>
</view>
12 hours ago
<view v-for="(row, ii) in item.items">
<view class="item-header" @click="toggleDetail(ii)">
<text class="item-title">{{ row.assemcode }} ({{ row.qty?parseFloat(row.qty).toFixed(2):'0.00' }})</text>
<uni-icons :type="expandedIndex === ii ? 'arrowup' : 'arrowdown'" size="16" color="#999"></uni-icons>
1 week ago
</view>
12 hours ago
<view v-if="expandedIndex === ii" class="item-content">
1 week ago
<view class="detail-row">
<text class="label">工程编号:</text>
12 hours ago
<text class="value">{{ row.project }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">安装托盘表号:</text>
12 hours ago
<text class="value">{{ row.instno }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">制作图号:</text>
12 hours ago
<text class="value">{{ row.dwgno }}</text>
1 week ago
</view>
<!-- <view class="detail-row">
<text class="label">分段号:</text>
12 hours ago
<text class="value">{{ row.section }}</text>
1 week ago
</view> -->
<view class="detail-row">
<text class="label">规格:</text>
12 hours ago
<text class="value">{{ row.spec }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">材质:</text>
12 hours ago
<text class="value">{{ row.grd }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">数量:</text>
12 hours ago
<text class="value">{{ row.qty }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">重量:</text>
12 hours ago
<text class="value">{{ row.weight }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">表面处理:</text>
12 hours ago
<text class="value">{{ row.treatment }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">涂装代码:</text>
12 hours ago
<text class="value">{{ row.paintcode }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">修改类型:</text>
12 hours ago
<text class="value">{{ row.modifyType }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">修改卡号:</text>
12 hours ago
<text class="value">{{ row.modifyKh }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">修改通知单号:</text>
12 hours ago
<text class="value">{{ row.modifyDwgno }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">修改日期:</text>
12 hours ago
<text class="value">{{ row.modifyDate }}</text>
1 week ago
</view>
<!-- <view class="detail-row">
<text class="label">生产状态:</text>
12 hours ago
<text class="value">{{ row.status }}</text>
1 week ago
</view> -->
<!-- <view class="detail-row">
<text class="label">状态日期:</text>
12 hours ago
<text class="value">{{ row.statusDate }}</text>
1 week ago
</view> -->
<view class="detail-row">
<text class="label">制作单位:</text>
12 hours ago
<text class="value">{{ row.manuDept }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">处理单位:</text>
12 hours ago
<text class="value">{{ row.treatDept }}</text>
1 week ago
</view>
<!-- <view class="detail-row">
<text class="label">配送单位:</text>
12 hours ago
<text class="value">{{ row.deliverDept }}</text>
1 week ago
</view> -->
<view class="detail-row">
<text class="label">工装托盘编号:</text>
12 hours ago
<text class="value">{{ row.palletNo }}</text>
1 week ago
</view>
<!-- <view class="detail-row">
<text class="label">工装托盘转运记录ID:</text>
12 hours ago
<text class="value">{{ row.deliveryId }}</text>
1 week ago
</view> -->
<!-- <view class="detail-row">
<text class="label">配送单号:</text>
12 hours ago
<text class="value">{{ row.deliveryNo }}</text>
1 week ago
</view> -->
<view class="detail-row">
<text class="label">配送车辆:</text>
12 hours ago
<text class="value">{{ row.deliveryCar }}</text>
1 week ago
</view>
<!-- <view class="detail-row">
<text class="label">配送日期:</text>
12 hours ago
<text class="value">{{ row.deliveryDate }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">配送备注:</text>
12 hours ago
<text class="value">{{ row.deliveryRemark }}</text>
1 week ago
</view> -->
<view class="detail-row">
<text class="label">需求日期:</text>
12 hours ago
<text class="value">{{ row.requireRate }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">需求单位:</text>
12 hours ago
<text class="value">{{ retType(row.requireDepartCode,2) }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">配送地址:</text>
12 hours ago
<text class="value">{{ row.requireAddress }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">接收人员:</text>
12 hours ago
<text class="value">{{ row.requireName }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">接收人员电话:</text>
12 hours ago
<text class="value">{{ row.requirePhone }}</text>
1 week ago
</view>
<!-- <view class="detail-row">
<text class="label">实际接收日期:</text>
12 hours ago
<text class="value">{{ row.receiveDate }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">实际接收人员:</text>
12 hours ago
<text class="value">{{ row.receiveName }}</text>
1 week ago
</view>
<view class="detail-row">
<text class="label">实际接收备注:</text>
12 hours ago
<text class="value">{{ row.receiveRemark }}</text>
1 week ago
</view> -->
</view>
12 hours ago
</view>
</view>
1 week ago
</view>
</view>
<!-- 配送转运图片 -->
<view class="section">
<view class="section-header">
<text class="section-title">配送转运图片</text>
</view>
<view class="image-grid" v-if="pallet&&pallet.files">
<view class="image-item" v-for="(img, index) in pallet.files" :key="index">
<image :src="img" mode="aspectFill" @click="prviewImage(index)" class="image"></image>
</view>
</view>
</view>
<!-- 零散物资信息 -->
<!-- <view class="section">
<view class="section-header">
<text class="section-title">零散物资信息</text>
</view>
<view class="info-card" v-if="pallet&&pallet.other">
<view class="info-row">
<text class="label">物资名称:</text>
<text class="value">螺丝钉</text>
</view>
<view class="info-row">
<text class="value">{{pallet.other}}</text>
</view>
</view>
</view> -->
</scroll-view>
</view>
</template>
<script>
export default {
props: {
palletAll: {
type: Object,
default: function () {
return {
};
}
}
},
data() {
return {
depts:[],
dicts:[],
status:[],
palletStatus:[],
pallet:{},
expandedIndex:null,
}
},
mounted() {
this._initDetail();
this.getTypes();
},
watch: {
palletAll(data) {
this._initDetail(data);
},
deep: true, // 深度监听
immediate: true, // 初次监听即执行
},
methods: {
gotocxDetail(instno,project){
uni.navigateTo({
url: `/pages/pallet/tpcxtk?instno=${instno}&project=${project}`
});
},
_initDetail(palletAll = this.palletAll) {
this.pallet=palletAll;
// 加载详情
this.openPalletDetail();
},
// 获取托盘详情
async openPalletDetail() {
if(this.pallet.palletNo){
uni.showLoading({
title: '数据加载中...'
});
const {data: res} = await uni.$http.get('/getInstdetail',{ // /getPalletAll
palletNo: this.pallet.palletNo
});
if(res.success){
12 hours ago
if(res.data&&res.data.length>0)
1 week ago
{
12 hours ago
this.pallet["instdetailList"]=[];
res.data.forEach(cell=>{
var findx = -1;
findx = this.pallet["instdetailList"].findIndex(item => item.groupDesc === cell.groupDesc);
if(findx<0){
var add = {
...cell,
items:[cell],
};
this.pallet["instdetailList"].push(add);
this.$forceUpdate();
}
else {
this.pallet["instdetailList"][findx].items.push(cell);
this.$forceUpdate();
}
});
this.pallet["instdetailList"].forEach((cell,idx)=>{
cell["qty"]=this.getQty(cell.items);
this.$forceUpdate();
});
// this.pallet["instdetailList"]=res.data;
1 week ago
this.$forceUpdate();
}
}
}
},
12 hours ago
getQty(items){
var num=0
if (items&&items.length>0) {
items.forEach(cell=>{
num=num+1.0*(cell.qty?cell.qty:0);
});
return num.toFixed(2);
}
else{
return 0;
}
},
1 week ago
toggleDetail(index) {
if (this.expandedIndex === index) {
this.expandedIndex = null;
} else {
this.expandedIndex = index;
}
},
getTypes() {
//获取数据字典
this.gcs=[];
this.status=[];
var commondata = uni.getStorageSync("commondata");
if(commondata){
var data = JSON.parse(commondata);
if(data){
this.dicts=data.dicts;
this.depts=data.depts;
this.dicts.forEach(cell=>{
// console.log(cell.bmlb)
if("TPZT"==cell.bmlb){
// 托盘转运状态
this.status.push(cell);
}
if("SYZT"==cell.bmlb){
// 托盘转运状态
this.palletStatus.push(cell);
}
});
this.$forceUpdate();
}
}
else{
this.dicts=[];
this.depts=[];
this.status=[];
}
},
retType(type,str) {
var rets = '';
if(str==1){
// 状态
this.status.forEach((cell,idx)=>{
if(type==cell.bm){
rets=cell.bmsm;
return;
}
});
}
else if(str==3){
// 使用状态
this.palletStatus.forEach((cell,idx)=>{
if(type==cell.bm){
rets=cell.bmsm;
return;
}
});
}
else if(str==2){
// 部门
this.depts.forEach((cell,idx)=>{
if(type==cell.departCode){
rets=cell.departName;
return;
}
});
}
if(!rets){
rets=type
}
return rets;
},
getStatusClass(status) {
switch (status) {
case '表面接收':
return 'status-waiting';
case '建立任务':
return 'status-delivered';
case '内表面接收':
return 'status-receivedf';
case '配盘完工':
return 'status-received';
case '配送出库':
return 'status-outbound';
case '完工转运':
return 'status-complete';
default:
return 'status-default';
}
},
prviewImage(index) {
if(this.pallet&&this.pallet.files){
uni.previewImage({
urls: this.pallet.files,
current: index
});
}
},
}
}
</script>
<style lang="scss" scoped>
.container {
height: 100%;
background-color: #f5f5f5;
}
.navbar {
display: flex;
align-items: center;
height: 88rpx;
background-color: #fff;
padding: 0 30rpx;
box-sizing: border-box;
position: relative;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
}
.nav-left,
.nav-right {
width: 60rpx;
display: flex;
align-items: center;
}
.nav-title {
flex: 1;
text-align: center;
font-size: 34rpx;
font-weight: bold;
color: #333;
}
.content {
height: calc(100%);
padding: 0;
box-sizing: border-box;
}
.section {
background-color: #fff;
border-radius: 16rpx;
margin-bottom: 20rpx;
overflow: hidden;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
}
.section-header {
padding: 30rpx;
border-bottom: 1rpx solid #eee;
}
.section-title {
font-size: 32rpx;
font-weight: bold;
color: #333;
}
.info-card {
padding: 30rpx;
}
.info-row {
display: flex;
margin-bottom: 20rpx;
}
.info-row:last-child {
margin-bottom: 0;
}
.label {
width: 200rpx;
font-size: 28rpx;
color: #666;
line-height: 1.5;
}
.value {
flex: 1;
font-size: 28rpx;
color: #333;
line-height: 1.5;
}
.status-used {
color: #ff6b35;
}
.status-transit {
color: #4a90e2;
}
.list-container {
padding: 0 30rpx 30rpx;
}
.list-item {
border: 1rpx solid #eee;
border-radius: 12rpx;
margin-top: 20rpx;
overflow: hidden;
}
.item-header {
display: flex;
flex-direction: row;
align-items: center;
padding: 20rpx 30rpx;
background-color: #f9f9f9;
}
.item-header-tip {
display: flex;
flex-direction: row;
align-items: center;
padding: 20rpx 20rpx 0;
background-color: #f9f9f9;
}
.item-tip{
display: flex;
flex: 1;
font-size: 30rpx;
font-weight: bold;
color: #007aff;
padding: 12rpx;
border-radius: 10rpx;
border: 1rpx solid #007aff;
12 hours ago
background: #e2eefa;
1 week ago
}
.item-title {
display: flex;
flex: 1;
font-size: 30rpx;
font-weight: bold;
color: #333;
}
.item-content {
padding: 20rpx 30rpx;
}
.detail-row {
display: flex;
margin-bottom: 15rpx;
}
.detail-row:last-child {
margin-bottom: 0;
}
.image-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20rpx;
padding: 30rpx;
}
.image-item {
border-radius: 12rpx;
overflow: hidden;
aspect-ratio: 1;
}
.image {
width: 100%;
height: 100%;
}
.status-badge {
padding: 6rpx 12rpx;
border-radius: 10rpx;
font-size: 24rpx;
color: #fff;
display: flex;
align-items: center;
margin-right: 10rpx;
}
.status-waiting {
background-color: #faad14;
}
.status-delivered {
background-color: #1890ff;
}
.status-receivedf {
background-color: #52c41a;
}
.status-received {
background-color: #18b566;
}
.status-outbound {
background-color: #fca600;
}
.status-complete {
background-color: #c191e8;
}
.status-default {
background-color: #f5f5f5;
color: #666666;
}
</style>