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.

885 lines
21 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="page">
<view class="back"></view>
<view class="wrapnob">
<!-- 列表 -->
<swiper class="swiper-box" :duration="300" :current="tabCurrentIndex" @animationfinish="animationfinish">
<swiper-item class="swiper-item" v-for="tabItem in list" :key="tabItem.id">
<scroll-view scroll-y style="height: 100%;width: 100%;">
<!-- 装载信息区域 -->
<view class="loading-section">
<!-- 分组信息折叠面板 -->
<view class="accordion" v-for="(group, index) in tabItem.slist" :key="index+'-'+group.assemcode">
<view class="accordion-header">
<view class="header-info">
<text class="group-title">{{ type=='1'?'制作图号:':'托盘表号:' }}{{ type=='1'?group.dwgno:page.instno }}</text>
<text class="group-title"> 配送比例:{{group.percent?group.percent+'%':'0.0%'}}</text>
</view>
<view class="header-info">
<text class="group-title"> 全部:{{group.tabs[0].count}}</text>
<text class="group-title"> 接收:{{group.tabs[1].count}} </text>
<text class="group-title"> 配送:{{group.tabs[2].count}} </text>
<text class="group-title"> 未配:{{group.tabs[3].count}} </text>
<text class="group-title"> 修改:{{group.tabs[4].count}} </text>
</view>
</view>
<view class="accordion-content">
<!-- 分组详细信息 -->
<view class="group-details">
<view class="detail-row">
<text class="detail-label">需求单位:</text>
<text class="detail-value">{{ group.requireDepartCode?retType(group.requireDepartCode,2):'' }}</text>
</view>
<view class="detail-row">
<text class="detail-label">需求日期:</text>
<text class="detail-value">{{ group.requireDate }}</text>
</view>
<view class="detail-row">
<text class="detail-label">需求地址:</text>
<text class="detail-value">{{ group.requireAddress }}</text>
</view>
<view class="detail-row">
<text class="detail-label">接收人:</text>
<text class="detail-value">{{ group.requireName }}</text>
</view>
<view class="detail-row">
<text class="detail-label">联系电话:</text>
<text class="detail-value">{{ group.requirePhone }}</text>
</view>
<view class="detail-row">
<text class="detail-label">部件数量:</text>
<text class="detail-value">{{ group.items?group.items.length:0 }}</text>
</view>
<view class="detail-row">
<text class="detail-label">配送时间:</text>
<text class="detail-value">{{ group.deliveryDate }}</text>
</view>
<view class="detail-row">
<text class="detail-label">配送车辆:</text>
<text class="detail-value">{{ group.deliveryCar }}</text>
</view>
<view class="detail-row">
<text class="detail-label">配送数量:</text>
<text class="detail-value">{{ group.deliveryNum }}</text>
</view>
<view class="detail-row">
<text class="detail-label">未配送数量:</text>
<text class="detail-value">{{ group.unDeliveryNum }}</text>
</view>
<view class="detail-row">
<text class="detail-label">实际接收人:</text>
<text class="detail-value">{{ group.receiveName }}</text>
</view>
<view class="detail-row">
<text class="detail-label">实际接收时间:</text>
<text class="detail-value">{{ group.receiveDate }}</text>
</view>
</view>
<!-- 状态选项卡 -->
<view class="tabs-container">
<view class="tabs-scroll">
<view class="tabs-wrapper">
<view
v-for="(tab, idx) in group.tabs"
:key="idx"
class="tab-item"
:class="{ active: group.activeTab === idx }"
@click="switchTab(index,idx)"
>
<text class="tab-count">{{ tab.count }}</text>
<text class="tab-text">{{ tab.name }}</text>
</view>
</view>
</view>
</view>
<!-- 管件清单明细 -->
<view class="item-list">
<view class="list-item"
v-for="(item,ii) in group.items" :key="ii"
v-if="(group.activeTab==0||(group.activeTab==1&&item.receiveDate)||(group.activeTab==2&&item.deliveryDate)
||(group.activeTab==3&&!item.deliveryDate)||(group.activeTab==4&&item.modifyMark=='Y'))"
:class="{ red: item.modifyType === 'Y',blue: item.deliveryDate?true:false,green: item.receiveDate?true:false }">
<view class="list-cell">
<view class="item-xuh" >
{{ group.xh?++group.xh:(group.xh=1,group.xh) }}.
</view>
<view class="item-cell" style="padding-left:4rpx;">
件号: {{ item.assemcode || '-' }}
</view>
<view class="item-cell">
数量: {{ item.qty?(1.0*item.qty).toFixed(0) : '-' }}
</view>
</view>
<view class="list-cell">
<view class="item-cell">
规格: {{ item.spec || '-' }}
</view>
<view class="item-cell">
材质: {{ item.grd || '-' }}
</view>
</view>
<view class="list-cell">
<view class="item-cell">
状态: {{ item.status || '-' }}
</view>
<view class="item-cell">
时间: {{ item.statusDate || '-' }}
</view>
<view class="item-cell">
单位: {{ item.statusDept?retType(item.statusDept,2):'-' }}
</view>
</view>
<view class="list-cell">
<view class="item-cell">
配送时间: {{ item.deliveryDate || '-' }}
</view>
<view class="item-cell">
工装托盘: {{ item.palletNo || '-' }}
</view>
</view>
<view class="list-cell" v-if="item.modifyMark=='Y'">
<view class="item-cell">
修改说明: {{ item.modifyType +' ' + item.modifyDwgno }}
</view>
</view>
<view class="list-cell">
<view class="item-cell">
备注: {{ item.deliveryRemark || '-' }}
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="nodata" v-if="tabItem.slist.length<=0">
</view>
</scroll-view>
</swiper-item>
</swiper>
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
show: false,
type: '1',// 1制作图号 2, 安装托盘表号 3, 分段
page: {
project: null,
dwgno: null,
instno: null
},
tabCurrentIndex: 0,
loadStatus:'loadmore',
scrollLeft: 0,
list:[
{
id:'tph',
loadStatus:'loadmore',
num: 0,
name:'',
expanded:false,
slist:[]
}
],
address:[],
users:[],
depts:[],
dicts:[],
gcs:[],
status:[],
};
},
onLoad(option) {
if(option.type){
this.type=option.type;
this.$forceUpdate();
}
if(option.project){
this.page.project=option.project;
this.$forceUpdate();
}
if(option.instno){
this.page.instno=option.instno;
this.$forceUpdate();
}
if(option.dwgno){
this.page.dwgno=option.dwgno;
this.$forceUpdate();
}
this.getYpDetail();
// 先加载分类
this.getTypes();
},
created(){
},
methods: {
toggleGroupAll(index) {
var that=this;
if(index==this.tabCurrentIndex){
this.list[index].expanded = !this.list[index].expanded;
this.list[index].slist.forEach((item,ii) => {
this.list[index].slist[ii].expanded=that.list[index].expanded;
});
this.$forceUpdate();
}
},
toggleGroup(index) {
this.list[this.tabCurrentIndex].slist[index].expanded = !this.list[this.tabCurrentIndex].slist[index].expanded;
this.$forceUpdate();
},
async getYpDetail() {
// 查询托盘明细
uni.showLoading({
title: '数据加载中...'
});
// 查询 托盘基本信息
// this.page.project="T300K-106";
var parms={};
if(this.page.project){
parms["project"]=this.page.project;
}
if(this.page.section){
parms["section"]=this.page.section;
}
if(this.page.palletNo){
parms["palletNo"]=this.page.palletNo;
}
if(this.page.dwgno){
parms["dwgno"]=this.page.dwgno;
}
if(this.page.instno){
parms["instno"]=this.page.instno;
}
const {data: res} = await uni.$http.get('/searchInstdetail',parms);
if(res.success){
this.list[0].slist=[];
if(res.data&&res.data.length>0){
// 全部数据加载
this.list[this.tabCurrentIndex].loadStatus="nomore";
res.data.forEach((cell,idx)=>{
var findx = -1;
if(this.type=='1'){
// 制作图
findx = this.list[0].slist.findIndex(item => item.dwgno === cell.dwgno);
}
else {
// 托盘表号
findx = this.list[0].slist.findIndex(item => item.instno === cell.instno);
}
if(findx<0){
var add = {
expanded:false,
activeTab:0,
items:[cell],
project:cell.project,
instno:cell.instno,
dwgno:cell.dwgno,
requireDepartCode:cell.requireDepartCode,
requireRate:cell.requireRate,
requireAddress:cell.requireAddress,
requireName:cell.requireName,
requirePhone:cell.requirePhone,
qty:cell.qty,
deliveryNum:0,
unDeliveryNum:0,
deliveryDate:cell.deliveryDate,
requireDate:cell.requireDate,
deliveryCar:cell.deliveryCar,
receiveName:cell.receiveName,
receiveDate:cell.receiveDate,
};
this.list[0].slist.push(add);
}
else {
this.list[0].slist[findx].items.push(cell);
}
});
this.list[0].slist.forEach((cell,idx)=>{
this.list[0].slist[idx]["deliveryNum"]=this.getdeliveryNum(cell.items);
this.list[0].slist[idx]["unDeliveryNum"]=this.getunDeliveryNum(cell.items);
this.list[0].slist[idx]["deliveryDate"]=this.getdeliveryDate(cell.items);
this.list[0].slist[idx]["requireDate"]=this.getrequireDate(cell.items);
this.list[0].slist[idx]["tabs"]=this.gettabs(cell.items);
this.list[0].slist[idx]["percent"]=(this.getpercent(cell.items)).toFixed(1);
this.$forceUpdate();
});
this.$forceUpdate();
}
else{
this.list[this.tabCurrentIndex].loadStatus="nomore";
}
}
else{
this.list[this.tabCurrentIndex].loadStatus="nomore";
}
},
switchTab(ii,kk){
this.list[0].slist[ii].activeTab=kk;
this.list[0].slist[ii].xh=0;
this.$forceUpdate();
},
getpercent(items){
var all=0,ps=0,xg=0,percent=0;
if (items&&items.length>0) {
items.forEach(cell=>{
all=all+(1.0*cell.qty);
// c) 配送deliveryDate!=
if(cell.deliveryDate){
ps=ps+(1.0*cell.qty);
}
// e) 修改modifyMark=Y modify_mark为新增字段
if(cell.modifyMark== 'Y'){
xg=xg+(1.0*cell.qty);
}
});
percent=(all-xg)?(ps-xg)*100/(all-xg):0;
}
return percent;
},
gettabs(items){
var tabs=[
{ name: '全部', count: 0 },
{ name: '接收', count: 0 },
{ name: '配送', count: 0 },
{ name: '未配', count: 0 },
{ name: '修改', count: 0 }
];
if (items&&items.length>0) {
tabs[0].count=items.length;
items.forEach(cell=>{
// b) 接收receiveDate!=
if(cell.receiveDate){
tabs[1].count=tabs[1].count+1;
}
// c) 配送deliveryDate!=
if(cell.deliveryDate){
tabs[2].count=tabs[2].count+1;
}
// d) 未配deliveryDate=
if(!cell.deliveryDate){
tabs[3].count=tabs[3].count+1;
}
// e) 修改modifyMark=Y modify_mark为新增字段
if(cell.modifyMark== 'Y'){
tabs[4].count=tabs[4].count+1;
}
});
}
return tabs;
},
getunDeliveryNum(items){
var num=0
if (items&&items.length>0) {
items.forEach((cell,idx)=>{
// console.log(cell.deliveryDate)
if(cell.deliveryDate==''||cell.deliveryDate==null||cell.deliveryDate==undefined){
num=num+1.0*(cell.qty?cell.qty:0);
}
});
return num.toFixed(2);
}
else{
return 0;
}
},
getdeliveryNum(items){
var num=0
if (items&&items.length>0) {
items.forEach((cell,idx)=>{
// console.log(cell.deliveryDate)
if(cell.deliveryDate){
num=num+1.0*(cell.qty?cell.qty:0);
}
});
return num.toFixed(2);
}
else{
return 0;
}
},
getdeliveryDate(items){
var date=''
if (items&&items.length>0) {
items.forEach((cell,idx)=>{
if(cell.deliveryDate){
date=this.compareDate(date,cell.deliveryDate);
if(!date){
date=cell.deliveryDate;
}
else{
if(this.compareDate(date,cell.deliveryDate)){
date=cell.deliveryDate;
}
}
}
});
}
return date;
},
getrequireDate(items){
var date=''
if (items&&items.length>0) {
items.forEach((cell,idx)=>{
if(cell.requireDate){
date=this.compareDate(date,cell.requireDate);
if(!date){
date=cell.requireDate;
}
else{
if(this.compareDate(date,cell.requireDate)){
date=cell.requireDate;
}
}
}
});
}
return date;
},
compareDate(timeStr1,timeStr2){
let date1 = new Date(timeStr1);
let date2 = new Date(timeStr2);
if (date1 < date2) {
return true;
} else if (date1 >= date2) {
return false;
}
},
getTypes() {
//获取数据字典
this.gcs=[];
this.status=[];
var commondata = uni.getStorageSync("commondata");
if(commondata){
var data = JSON.parse(commondata);
if(data){
this.users=data.users;
this.dicts=data.dicts;
this.depts=data.depts;
this.address=data.address;
this.dicts.forEach(cell=>{
if("PJCD"==cell.bmlb){
// 工程
this.gcs.push(cell);
}
if("TPZT"==cell.bmlb){
// 托盘转运状态
this.status.push(cell);
}
});
console.log(this.gcs)
this.$forceUpdate();
}
}
else{
this.users=[];
this.dicts=[];
this.depts=[];
this.address=[];
}
},
retType(type,str) {
var rets = '';
if(str==1){
// 状态
this.status.forEach((cell,idx)=>{
if(type==cell.bm){
rets=cell.bmsm;
return;
}
});
if(!rets){
rets="其他"
}
}
else if(str==2){
// 部门
this.depts.forEach((cell,idx)=>{
if(type==cell.departCode){
rets=cell.departName;
return;
}
});
}
if(!rets){
rets=type
}
return rets;
},
animationfinish({ detail: { current } }) {
this.tabCurrentIndex = current;
this.tabsetDx();
},
tabsetDx() {
this.scrollLeft = (this.tabCurrentIndex - 1) * 200;
},
}
}
</script>
<style lang="scss" scoped>
.u-drawer{
top:calc(var(--window-top) + 100rpx) !important;
height: calc(100vh - var(--window-top) - 100rpx) !important;
z-index: 92 !important;
}
.popcon1{
padding: 0 20rpx 10rpx;
}
.popcon{
height: calc(100vh - 100rpx) !important;
/* #ifdef H5 */
height: calc(100vh - var(--window-top) - 100rpx) !important;
/* #endif */
overflow-y: auto;
}
::v-deep uni-picker > .uni-picker-container {
z-index: 12998 !important;
}
::v-deep uni-picker > .uni-mask {
z-index: 12999 !important;
}
.searchinput {
margin-right: 40rpx !important;
}
.u-size-default {
padding: 10rpx !important;
}
.u-shaixuan {
text-align: center;
z-index: 90 !important;
}
.cu-form-group .title {
font-size: 26rpx !important;
}
.cu-form-group uni-picker .picker {
font-size: 26rpx !important;
}
.searchbg{
width: 100%;
position: relative;
display: block;
overflow: hidden;
padding: 14rpx 20rpx 0 20rpx;
.detail-item {
display: flex;
margin-bottom: 15rpx;
}
.item-label {
font-size: 28rpx;
color: #666;
width: 150rpx;
}
.item-value {
font-size: 28rpx;
color: #333;
flex: 1;
}
}
.u-drawer.timetip {
height: calc(100vh - var(--window-top) - 100rpx) !important;
top: 0 !important;
bottom: auto !important;
}
.cu-form-group {
::v-deep .u-mask {
margin-top: -300rpx !important;
}
}
.icon-screen{
position: absolute;
top: 20rpx;
right: 0;
width: 36rpx;
height:35rpx;
background: url('../../static/images/shaixuan.png') no-repeat center center;
background-size: 100% auto;
}
.selnodate{
width: 400rpx;
height: 30rpx;
background: url('@/static/images/xiayiji.png') no-repeat center right;
background-size:auto 88%;
padding-right: 50rpx;
text-align: right;
color: rgb(192, 196, 204);
}
::v-deep .u-form-item {
color: #000;
font-size: 28rpx !important;
padding: 6rpx;
background-color: #fff;
}
::v-deep .u-form-item--left {
margin: 0 0 0 18rpx !important;
width: 150rpx;
}
.selarr {
height: 100%;
line-height: 1;
text-align: right;
display: flex;
flex: 1;
flex-direction: row;
align-items: center;
margin-right: 32rpx;
.txt{
display: flex;
justify-content: flex-end;
flex: 1;
}
}
.info-card {
background-color: #fff;
border-radius: 12rpx;
padding:20rpx 30rpx;
margin-bottom: 20rpx;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
margin: 10rpx 20rpx 0;
}
.info-row {
display: flex;
justify-content: space-between;
}
.label {
display: flex;
flex: 1;
font-size: 28rpx;
color: #666;
}
.value {
font-size: 28rpx;
color: #333;
}
.status-01 {
color: #1890ff;
}
.status-02 {
color: #00c853;
}
.status-03 {
color: #ffab00;
}
.status-04 {
color: #fa3534;
}
.loading-section {
margin-bottom: 20rpx;
}
.accordion {
background-color: #fff;
border-radius: 12rpx;
margin-bottom: 20rpx;
overflow: hidden;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05);
}
.accordion-header {
display: flex;
flex-direction: column;
padding: 20rpx;
background-color: #f5f5f5;
}
.header-info {
display: flex;
align-items: center;
}
.group-title {
font-size: 30rpx;
font-weight: bold;
color: #333;
margin-right: 20rpx;
}
.group-tray {
font-size: 26rpx;
color: #666;
margin-right: 20rpx;
}
.accordion-content {
padding: 30rpx;
}
.group-details {
margin-bottom: 30rpx;
}
.detail-row {
display: flex;
margin-bottom: 20rpx;
}
.detail-row:last-child {
margin-bottom: 0;
}
.detail-label {
font-size: 26rpx;
color: #666;
width: 160rpx;
}
.detail-value {
font-size: 26rpx;
color: #333;
flex: 1;
}
.tabs-container {
background-color: #ffffff;
margin:0 0;
}
.tabs-scroll {
white-space: nowrap;
padding: 0 0 20rpx;
}
.tabs-wrapper {
display: inline-flex;
width: 100%;
}
.tab-item {
padding: 10rpx 30rpx;
margin: 0 10rpx 0 0;
border-radius: 20rpx;
background-color: #f5f5f5;
display: flex;
flex-direction: column;
align-items: center;
width: 20%;
}
.tab-item.active {
background-color: #007aff;
}
.tab-text {
font-size: 28rpx;
color: #333;
margin-right: 8rpx;
}
.tab-item.active .tab-text {
color: #ffffff;
}
.tab-count {
font-size: 32rpx;
font-weight: 600;
color: #333;
}
.tab-item.active .tab-count {
color: rgba(255, 255, 255, 0.8);
}
.item-list {
width: 100%;
display: flex;
flex-direction: column;
}
.list-item {
border: 1rpx solid #e0e0e0;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
border-radius: 8rpx;
display: flex;
flex-direction: column;
width: 100%;
margin-bottom: 20rpx;
padding: 10rpx;
background-color: #fafafa;
}
.list-item.red{
color:#de0000;
}
.list-item.blue{
color:#2196f3;
}
.list-item.green{
color:#18b566;
}
.list-cell{
display: flex;
flex-direction: row;
width: 100%;
}
.item-xuh{
text-align: center;
font-size: 28rpx;
padding: 6rpx 0 6rpx 0;
word-break: break-all;
}
.item-cell {
text-align: center;
font-size: 28rpx;
padding: 6rpx 0 6rpx 30rpx;
word-break: break-all;
}
.swiper-box {
flex: 1;
height: calc(100vh) !important;
/* #ifdef H5 */
height: calc(100vh - var(--window-top) ) !important;
/* #endif */
margin: 0;
}
.nodata{
background-color: #FFFFFF;
background-image: url('../../static/image/nodata.jpg');
background-repeat: no-repeat;
background-position: center center;
background-size: 66% 66%;
height: 600rpx;
border-radius: 20rpx;
color: #666;
display: flex;
align-items: center;
justify-content: flex-end;
width: 90%;
flex-direction: column;
padding-bottom: 40rpx;
margin: 20rpx 5%;
}
</style>