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

2 weeks ago
<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">
6 days ago
<text class="group-title">{{ type=='1'?'制作图号:':'托盘表号:' }}{{ type=='1'?group.dwgno:page.instno }}</text>
2 weeks ago
<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">
6 days ago
数量: {{ item.qty?(1.0*item.qty).toFixed(0) : '-' }}
2 weeks ago
</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,
6 days ago
type: '1',// 1制作图号 2, 安装托盘表号 3, 分段
2 weeks ago
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) {
6 days ago
if(option.type){
this.type=option.type;
this.$forceUpdate();
}
2 weeks ago
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";
6 days ago
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);
2 weeks ago
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;
6 days ago
if(this.type=='1'){
2 weeks ago
// 制作图
findx = this.list[0].slist.findIndex(item => item.dwgno === cell.dwgno);
}
6 days ago
else {
// 托盘表号
findx = this.list[0].slist.findIndex(item => item.instno === cell.instno);
}
2 weeks ago
if(findx<0){
var add = {
expanded:false,
activeTab:0,
items:[cell],
project:cell.project,
instno:cell.instno,
6 days ago
dwgno:cell.dwgno,
2 weeks ago
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&&cell.zfbs!=='1'){
2 weeks ago
// 工程
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>