ah_sz_gqj_app/pages/samples/samplesDetail.vue

503 lines
12 KiB
Vue
Raw Normal View History

2025-01-16 18:39:33 +08:00
<template>
<view>
<view class="topTab"></view>
<view class="page-content">
<view class="search">
<image @click="customNavigateBack" style="width: 40rpx;height: 40rpx;margin:0 20rpx;" src="@/static/img/back.png" mode=""></image>
<u-search :showAction="false" style="margin-right: 20rpx;" :input-style="inputStyle" bgColor='#F3F3F3' :searchIconSize="36" v-model="searchValue" @change="searchList" ></u-search>
<view style="width: 20%;height: 100%;display: flex;align-items: center;justify-content: center;">
<view class="addBtn" @click="addDevice">添加样品</view>
<!-- <view class="addBtn" v-if="hasTeam" @click="searchList">查询</view> -->
</view>
</view>
<view class="main-header">
<view style="color: #A6A6A6;font-size: 24rpx;width: 110rpx;margin-left: 20rpx;">送样单位</view>
<view style="margin:0 20rpx;font-size: 24rpx;">{{customName}}</view>
</view>
<view class="main-box">
<!-- 列表 -->
<view class="list-box" >
<u-list @scrolltolower="scrolltolower" height="82vh" v-if="listData.length>0">
<u-list-item v-for="(item, index) in listData" :key="index">
<view class="list-item">
<view class="item-header">
<view class="header-name">
{{item.sampleTools+' '+item.devModule}}
</view>
<view class="header-time">
{{item.sampleTime}}
</view>
</view>
<view class="item-content">
<view class="content-box">
<view class="item-text">
<text class="label">送样部门</text>
<text class="info">{{item.sampleDepartment}}</text>
</view>
<view class="item-text">
<text class="label">样品编号</text>
<text class="info">{{item.devCode}}</text>
</view>
<view class="item-text">
<text class="label">收样编号</text>
<text class="info">{{item.customerCode}}</text>
<image src="../../static/images/del.png" @click="delDevice(item)" v-if="item.experStatus==0" style="width: 30rpx;height: 30rpx;float: right;margin-right: 20rpx;" alt="">
</view>
</view>
</view>
<view class="item-footer">
<view class="footer-left">
<view style="font-size: 22rpx;">收样标签</view>
<view class="foot-btn" @click="goSamplesCode(item)">查看</view>
</view>
<!-- <view class="footer-right">已打印</view> -->
</view>
</view>
</u-list-item>
</u-list>
<view style="width: 100%;height: 80vh;display: flex;flex-direction:column;justify-content: center;align-items: center;" v-if="listData.length==0">
<image src="../../static/images/noDevices.png" style="width: 60%;height: 20vh;" alt="">
<view style="color: rgba(0, 0, 0, 0.45);">未添加样品</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { getDetailsList,delSamplesDetails,getFlag } from '@/service/url.js';
import tabHeader from '@/components/tab-Header.vue';
import eselect from '@/components/eselect.vue';
import AES from "@/utils/cryptoJs/aes.js";
export default {
components: {
tabHeader,
eselect,
},
data() {
return {
addData:{},//新增
searchValue:'',//搜索记录
inputStyle:{
fontSize:'24rpx',//修改搜索框里面的文字大小
height:'60rpx',
},
batchCode:'',//编辑
collectId:'',
customId:'',
customName:'',
hasTeam:false,
// 新增收样
addPopup: false,
addForm:{
collectDept:'',
},
showDate: false,
showDept: false,
columns: [['曹村供电所', '王村供电所', '张村供电所', '周村供电所', '李村供电所']],
rules: {
'collectDept': {
type: 'string',
required: true,
message: '请选择部门',
trigger: ['blur', 'change']
},
},
isFlag:true,
listData:[],
page:1,
};
},
onLoad(option) {
console.log(option)
if(option.addData){
this.addData=JSON.parse(option.addData)||{};
this.customName=this.addData.customName;
}else{
this.collectId = option.id || '';
this.customId = option.customId || '';
this.customName = option.customName|| ''
this.batchCode = option.batchCode|| ''
if(option.hasTeam&&option.hasTeam!=""){
this.hasTeam=true;
}else{
this.hasTeam=false;
}
}
},
onShow() {
if(this.collectId&&this.collectId!=""){
this.loadmore()
}
},
methods: {
customNavigateBack() {
// 自定义返回逻辑
const pages = getCurrentPages(); // 获取页面栈
const len = pages.length;
let backPage = ''; // 要返回的页面路径
for (let i = len - 2; i >= 0; i--) {
// 从倒数第二个页面开始遍历,找到第一个不是当前页面的页面
if (pages[i].route !== 'pages/A/A') {
backPage = pages[i].route;
break;
}
}
if (backPage) {
uni.navigateBack({
delta: len - 1 - pages.findIndex(page => page.route === backPage) // 返回到已存在的页面
});
}
},
searchList(value){//搜索收样记录
// console.log(value)
// console.log(this.searchValue)
this.page = 1;
this.listData=[]
this.loadmore()
},
scrolltolower() {
this.page += 1;
this.loadmore()
},
loadmore() {
let obj = {
"keyWord":this.searchValue,
"id":this.collectId,
"page":this.page,
"limit":"10"
}
let param = {
encryptedData: AES.encrypt(JSON.stringify(obj))
}
this.$http.post(getDetailsList,param).then(res => {
if (res) {
console.log(res)
if(res.code == 200){
if(res.data?.length>0){
if(this.page == 1){
this.listData = res.data;
}else{
this.listData = [...this.listData, ...res.data];
}
}else{
console.log("没有更多了")
}
}
}
}).catch(error => {
console.log(error)
// this.$utils.showHttpError(error)
})
// console.log(this.listData)
},
goSamplesCode(item){
uni.navigateTo({
url: `/pages/samples/sampleCode?customerCode=sybq/${item.customerCode}`
})
},
//判断是否可操作
hasFlag(){
},
//新增按钮触发
addDevice(){
if(this.collectId){
let obj = {"id":this.collectId}
let param = {encryptedData: AES.encrypt(JSON.stringify(obj))}
this.$http.post(getFlag,param).then(response => {
if (response) {
if(response.code == 200){
uni.navigateTo({//修改收样批次
url: `/pages/samples/addDevice?id=${this.collectId}&customName=${this.customName}&customId=${this.customId}&batchCode=${this.batchCode}`
})
}
}
}).catch(error => {
uni.showToast({
title: error.msg,
icon: "none"
})
})
}else{
uni.navigateTo({//新建收样批次
url: `/pages/samples/addDevice?addData=${JSON.stringify(this.addData)}`
})
}
},
//为派工可删除
delDevice(chosen){
let obj = {"id":this.collectId}
let param = {encryptedData: AES.encrypt(JSON.stringify(obj))}
this.$http.post(getFlag,param).then(response => {
if (response){
if(response.code == 200){
uni.showModal({
title: '确认',
content: '请确认是否删除该样品!',
showCancel: true,
cancelText: '取消',
confirmText: '确认',
success: res => {
if (res.confirm) {
let obj = {
"id":chosen.id,
}
let param = {
encryptedData: AES.encrypt(JSON.stringify(obj))
// encryptedData: JSON.stringify(obj)
}
this.$http.post(delSamplesDetails,param).then(response => {
if (response) {
if(response.code == '200'){
uni.showToast({
title: "删除成功",
icon: "none"
})
this.page = 1;
this.listData=[];
this.loadmore()
}else{
uni.showToast({
title: "删除失败",
icon: "none"
})
}
}
}).catch(error => {
console.log(error)
})
} else if (res.cancel) {}
}
});
}
}
}).catch(error => {})
},
},
}
</script>
<style lang="scss">
/deep/.u-popup .u-slide-right-enter-active{
left: 0;
}
.searchInput{
height: 100%;
}
.page-content{
width: 100%;
height: 96vh;
position: absolute;
top: 4vh;
padding: 0 0;
background-color: #F3F3F3;
.search{
width: 100%;
height: 120rpx;
margin: 0rpx auto;
display: flex;
justify-content: space-between;
align-items: center;
background-color: #FFF;
}
.addBtn{
width: 120rpx;
height: 50rpx;
line-height: 50rpx;
text-align: center;
color: #fff;
border-radius: 30rpx;
font-size: 20rpx;
background-color: #0052D9;
margin:0 20rpx;
}
.main-box{
width: 100%;
height: auto;
}
.main-header{
width: 100%;
height: auto;
display: flex;
align-items: center;
background-color: #FFF;
padding-bottom: 20rpx;
}
.tab-box {
overflow: hidden;
height: 80upx;
.tab-item {
float: left;
height: 70upx;
width: 48%;
font-size: 30upx;
line-height: 70upx;
text-align: center;
}
.active {
color: #333;
border-radius: 10upx 10upx 0 0;
font-weight: bold;
}
.activeLine{
background: linear-gradient( 90deg, #50CBA1 0%, #06AEA6 100%), #5685F2;
border-radius: 10upx;
width: 50upx;
height: 10upx;
margin: 0 auto;
}
}
.list-box{
width: 94%;
height: auto;
// border: 1px solid #000;
margin: 20rpx auto;
.list-item{
width: 100%;
height: auto;
background-color: #fff;
border-radius: 20rpx;
margin: 20rpx 0;
.item-header{
width: 100%;
height: auto;
line-height: 72rpx;
font-size: 28rpx;
border: 1px dashed #E3E9FA;
display: flex;
align-items: center;
justify-content: space-between;
}
.header-name{
width: 72%;
padding:20rpx;
// word-wrap: break-word;
line-height: 40rpx;
}
.header-time{
width: 26%;
color: #999999;
font-size: 20rpx;
}
.item-content{
width: 100%;
height: auto;
border: 1px dashed #E3E9FA;
font-size: 24rpx;
.content-box{
width: 94%;
height: auto;
margin: 20rpx;
background-color: #F7F7F7;
padding: 20rpx 0;
border-radius: 10rpx;
.item-text{
margin-left: 20rpx;
margin-top: 15rpx;
.label{
color: #999999;
}
.info{
color: #373737;
}
}
}
}
.item-footer{
width: 100%;
height: 72rpx;
position: relative;
.footer-left{
width: 300rpx;
height: 70rpx;
display: flex;
align-items: center;
position: absolute;
left: 0;
font-size: 20rpx;
margin-left: 40rpx;
}
.footer-right{
width: 100rpx;
height: 70rpx;
display: flex;
align-items: center;
position: absolute;
right: 0;
color: #999999;
font-size: 20rpx;
}
.foot-btn{
width: 80rpx;
height: 40rpx;
line-height: 40rpx;
text-align: center;
background: rgba(0,133,255,0.05);
border-radius: 10rpx;
color: #0052D9;
font-size: 20rpx;
margin-left: 20rpx;
}
}
}
}
}
.submit-box {
width: 100%;
height: 100rpx;
padding-bottom: 20rpx;
position: fixed;
bottom: 0;
display: flex;
justify-content: space-between;
align-items: center;
background-color: #FFF;
.submit-add{
width: 80%;
margin: 0 auto;
height: 65rpx;
font-size: 26rpx;
background: #0052D9;
box-shadow: 0px 4px 2px 0px rgba(81,147,254,0.15);
}
}
.add-header{
width: 100%;
height: 80rpx;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
background-color: #fff;
}
.add-form{
width: 100%;
height: 20vh;
padding: 20rpx 0;
background-color: #fff;
}
</style>