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

339 lines
7.6 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-green" :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">👤 出库人{{comp_recl_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: '',
comp_recl_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.getOutDetailData()
},
methods: {
// 获取出库详情数据
getOutDetailData(){
let that = this;
uni.request({
url: 'https://mtx.mini.opmonitor.com/?c=app_api&a=getOutDetailData',
data: {batch: that.batch},
header: {
'Content-type': 'application/json'
},
success: function(res){
const data = res.data.data
that.organ_name = data.organ_name || ''
that.comp_recl_name = data.comp_recl_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, #27ae60 0%, #1e8449 100%);
border-radius: 12rpx;
box-shadow: 0 4rpx 16rpx rgba(39, 174, 96, 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 #e8f5e9;
}
/* 表头 */
.table-header {
display: flex;
background: linear-gradient(90deg, #27ae60 0%, #1e8449 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 #f1f8f3;
background-color: #fff;
min-height: 68rpx;
}
.table-row:last-child {
border-bottom: none;
}
.table-row:nth-child(even) {
background-color: #f8fff9;
}
/* 表格单元格 */
.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: #27ae60;
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, #27ae60 0%, #1e8449 100%);
color: #fff;
border-radius: 16rpx;
font-size: 22rpx;
border: none;
box-shadow: 0 1rpx 6rpx rgba(39, 174, 96, 0.25);
}
.page-btn[disabled] {
background: #ccc;
box-shadow: none;
opacity: 0.5;
}
</style>