Files
mwims-mtx-mini-program/pages/plugin/inDetails.vue
T

340 lines
7.7 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>
<scroll-view scroll-y class="page">
<cu-custom bgColor="bg-blue" :isBack="true"><block slot="backText">返回</block><block slot="content">入库详情</block></cu-custom>
<!-- 入库批次信息 -->
<view class="batch-info-card">
<view class="batch-title">入库批次{{batch}}</view>
<view class="batch-meta">
<text class="meta-item">🏥 {{organ_name}}</text>
<text class="meta-item">👤 入库人{{in_ware_name}}</text>
</view>
<view class="batch-meta">
<text class="meta-item">📊 总重量{{totalWeight}} kg</text>
<text class="meta-item">📦 总袋数{{totalCount}} </text>
</view>
</view>
<!-- 空数据提示 -->
<view v-if="!detailData || detailData.length === 0" class="empty-container">
<text class="empty-icon">📋</text>
<text class="empty-text">暂无详情数据</text>
</view>
<!-- 表格展示 -->
<view v-else class="table-wrapper">
<view class="table-container">
<view class="table-header">
<view class="table-cell cell-type">医废类型</view>
<view class="table-cell cell-dept">科室</view>
<view class="table-cell cell-weight">重量</view>
<view class="table-cell cell-person">收集人</view>
<view class="table-cell cell-time">收集时间</view>
</view>
<view class="table-row" v-for="(item, index) in currentPageData" :key="index">
<view class="table-cell cell-type">
<img :src="item.image" class="type-icon">
<text>{{item.waste_type}}</text>
</view>
<view class="table-cell cell-dept">{{item.dept_name}}</view>
<view class="table-cell cell-weight">{{item.weight}}</view>
<view class="table-cell cell-person">{{item.recl_name}}</view>
<view class="table-cell cell-time">{{formatTime(item.recl_time)}}</view>
</view>
</view>
<!-- 分页控件 -->
<view class="pagination-wrapper">
<view class="pagination-info">
<text> {{totalItems}} {{currentPage}}/{{totalPages}} </text>
</view>
<view class="pagination-controls">
<button class="page-btn" :disabled="currentPage === 1" @click="changePage('prev')">上一页</button>
<button class="page-btn" :disabled="currentPage === totalPages" @click="changePage('next')">下一页</button>
</view>
</view>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
batch: '',
organ_name: '',
in_ware_name: '',
totalCount: 0,
totalWeight: 0,
detailData: [],
currentPage: 1,
pageSize: 20,
totalItems: 0,
totalPages: 0
}
},
computed: {
currentPageData() {
const start = (this.currentPage - 1) * this.pageSize
const end = start + this.pageSize
return this.detailData.slice(start, end)
}
},
watch: {
detailData(newVal) {
this.totalItems = newVal.length
this.totalPages = Math.ceil(this.totalItems / this.pageSize)
if (this.currentPage > this.totalPages && this.totalPages > 0) {
this.currentPage = this.totalPages
}
}
},
mounted(){
// 获取页面参数
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
this.batch = currentPage.options.batch || ''
this.getInDetailData()
},
methods: {
// 获取入库详情数据
getInDetailData(){
let that = this;
uni.request({
url: 'https://mtx.mini.opmonitor.com/?c=app_api&a=getInDetailData',
data: {batch: that.batch},
header: {
'Content-type': 'application/json'
},
success: function(res){
const data = res.data.data
console.info('入库详情数据:', data)
that.organ_name = data.organ_name || ''
that.in_ware_name = data.in_ware_name || ''
that.totalCount = data.totalCount || 0
that.totalWeight = data.totalWeight || 0
that.detailData = data.details || []
},
fail: () => {
console.info('获取入库详情失败')
}
})
},
// 格式化时间 m-d H:i
formatTime(timeStr) {
if (!timeStr) return ''
const date = new Date(timeStr.replace(/-/g, '/'))
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
const hours = String(date.getHours()).padStart(2, '0')
const minutes = String(date.getMinutes()).padStart(2, '0')
return `${month}-${day} ${hours}:${minutes}`
},
// 切换页面
changePage(direction) {
if (direction === 'prev' && this.currentPage > 1) {
this.currentPage--
} else if (direction === 'next' && this.currentPage < this.totalPages) {
this.currentPage++
}
}
}
}
</script>
<style>
.page {
width: 100vw;
height: 100vh;
}
/* 批次信息卡片 */
.batch-info-card {
margin: 12rpx;
padding: 24rpx;
background: linear-gradient(135deg, #4a90e2 0%, #357abd 100%);
border-radius: 12rpx;
box-shadow: 0 4rpx 16rpx rgba(74, 144, 226, 0.25);
color: #fff;
}
.batch-title {
font-size: 28rpx;
font-weight: 600;
margin-bottom: 16rpx;
}
.batch-meta {
display: flex;
justify-content: space-between;
margin-bottom: 12rpx;
}
.batch-meta:last-child {
margin-bottom: 0;
}
.meta-item {
font-size: 24rpx;
opacity: 0.95;
}
/* 空数据容器 */
.empty-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 200rpx 0;
}
.empty-icon {
font-size: 120rpx;
margin-bottom: 30rpx;
}
.empty-text {
font-size: 32rpx;
color: #999;
}
/* 表格包裹层 */
.table-wrapper {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}
/* 表格容器 - 入库详情使用紧凑风格 */
.table-container {
flex: 1;
overflow-y: auto;
margin: 0 12rpx;
background-color: #fff;
border-radius: 12rpx;
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
border: 1px solid #e1e8f0;
}
/* 表头 */
.table-header {
display: flex;
background: linear-gradient(90deg, #4a90e2 0%, #357abd 100%);
color: #fff;
font-weight: 600;
font-size: 22rpx;
padding: 0;
position: sticky;
top: 0;
z-index: 10;
}
/* 表格行 */
.table-row {
display: flex;
border-bottom: 1px solid #f0f6fc;
background-color: #fff;
min-height: 68rpx;
}
.table-row:last-child {
border-bottom: none;
}
.table-row:nth-child(even) {
background-color: #f8fbff;
}
/* 表格单元格 */
.table-cell {
padding: 12rpx 10rpx;
font-size: 22rpx;
color: #333;
display: flex;
align-items: center;
word-break: break-all;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.cell-type {
flex: 1.8;
min-width: 200rpx;
}
.cell-dept {
flex: 1.3;
min-width: 120rpx;
}
.cell-weight {
flex: 0.8;
min-width: 80rpx;
justify-content: center;
color: #4a90e2;
font-weight: 600;
}
.cell-person {
flex: 1;
min-width: 100rpx;
}
.cell-time {
flex: 1.5;
min-width: 120rpx;
}
/* 类型图标 */
.type-icon {
width: 28rpx;
height: 28rpx;
margin-right: 10rpx;
border-radius: 4rpx;
flex-shrink: 0;
}
/* 分页包裹层 */
.pagination-wrapper {
margin: 12rpx;
padding: 14rpx 20rpx;
background-color: #fff;
border-radius: 12rpx;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
display: flex;
justify-content: space-between;
align-items: center;
}
.pagination-info {
font-size: 22rpx;
color: #666;
}
.pagination-controls {
display: flex;
gap: 12rpx;
}
.page-btn {
padding: 8rpx 24rpx;
background: linear-gradient(135deg, #4a90e2 0%, #357abd 100%);
color: #fff;
border-radius: 16rpx;
font-size: 22rpx;
border: none;
box-shadow: 0 1rpx 6rpx rgba(74, 144, 226, 0.25);
}
.page-btn[disabled] {
background: #ccc;
box-shadow: none;
opacity: 0.5;
}
</style>