<template> <view class="conte"> <view class="header"> <text class="title">{{userInfo.dept.dept}} <text class="red" v-if="otherData"> (单 {{otherData.pathologyFormNum}}, 标 {{otherData.specimenNum}}) </text> </text> <view class="filter" @click="filterClick"> <text class="newicon newicon-shaixuan icon"></text> </view> </view> <view class="height-list"></view> <view class="list" @click="detail(item)" v-for="(item, index) in list" :key="index"> <view class="df-list list-border"> <view>{{item.applyCode}}</view> <view>{{item.status.name}}</view> </view> <view class="df-list"> <view class="df-list-over-left">科室:{{item.patientDTO.department.dept}}</view> <view class="df-list-over">部位:{{item.takePart}}</view> </view> <view class="df-list"> <view class="df-list-over-left">患者:{{item.patientName}}({{item.patientDTO.bedNum}}床)</view> <view class="df-list-over">住院号:{{item.patientDTO.patientCode}}</view> </view> <view class="df-list"> <view class="df-list-over-left">离:{{yyTimeFilter(item.inVitroTime)}}</view> <view class="df-list-over">固:{{yyTimeFilter(item.fixationTime)}}</view> </view> <view class="list-content"></view> </view> <uni-drawer width="400px" :visible="isShowFilter" mode="right" :maskClick="false" @close="filterCacel()"> <view class="execFilterMask" @touchmove.stop.prevent> <view class="execFilter"> <radio-group @change="radioChange"> <label class="df uni-list-cell uni-list-cell-pd" v-for="(item, index) in specimenData" :key="item.id"> <view> <radio :value="item.id+''" :checked="index == current" /> </view> <view>{{item.dept}}</view> </label> </radio-group> <view> <label class="df uni-list-cell uni-list-cell-pd">固定并存放标本间</label> <checkbox-group @change="checkChange"> <label class="df uni-list-cell uni-list-cell-pd"> <checkbox color="#49B856" value="1" :checked="depositCheck" />是否开启 </label> </checkbox-group> </view> <view class="execFilterFooter"> <view class="btn" @click="filterCacel()" v-if="isDept || specimenData.length==0">取消</view> <view class="btn" @click="filterOk()">确认</view> </view> </view> </view> </uni-drawer> <!-- PDA扫描 --> <scanner></scanner> <!-- apk自动更新 --> <appUpdata v-if="isApp && isUpdate" @getUpdate="isUpdate=false"></appUpdata> </view> </template> <script> import { get, post } from "../../http/http.js"; import scanner from "../../components/scanner/scanner.vue"; import appUpdata from "../../components/appUpdata/appUpdata.vue"; export default { data() { return { list: [], idx: 0, isDept:null, userInfo:uni.getStorageSync('userData').user, hosId: uni.getStorageSync('userData').user.currentHospital.id, specimenData: [], isShowFilter: false, current: null, deptId:null, totalNum:0, hasMore:true, SMFlag:true, otherData:null, isApp:false, isUpdate:false, depositCheck:false, } }, components: { scanner, appUpdata }, methods: { // 时间格式化 yyTimeFilter(timestamp) { var date = new Date(timestamp); // 时间戳为毫秒级别 var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); var hours = date.getHours(); var minutes = date.getMinutes(); var seconds = date.getSeconds(); // 格式化月份、日期、小时、分钟、秒 month = month < 10 ? '0' + month : month; day = day < 10 ? '0' + day : day; hours = hours < 10 ? '0' + hours : hours; minutes = minutes < 10 ? '0' + minutes : minutes; seconds = seconds < 10 ? '0' + seconds : seconds; return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; }, // 选择check checkChange(e){ let values = e.detail.value; if(values[0]=='1'){ this.depositCheck = true }else{ this.depositCheck = false } }, // 打开科室选择 filterClick() { this.isShowFilter = true this.$nextTick(_=>{ let userInfo = uni.getStorageSync('userData').user if(this.isDept){ for (let i = 0; i < this.specimenData.length; i++) { if (this.specimenData[i].id == userInfo.dept.id) { this.current = i; this.deptId = userInfo.dept.id; break; } } } }) }, // 关闭科室弹框 filterCacel() { this.isShowFilter = false }, // 确定关联科室 filterOk() { let userInfo = uni.getStorageSync('userData').user if(!this.isDept){ if(!this.deptId){ uni.showToast({ title: '请选择科室', duration: 1000, icon:'none' }); return } } uni.showLoading({ title: "加载中", mask: true, }); let query = { user: { dept:{ id:this.deptId?this.deptId:userInfo.dept.id }, id:userInfo.id, fixedStoredSpecimenRoom:this.depositCheck ? 1 : 0 }, } post('/data/updData/user', query).then(res => { uni.hideLoading(); this.filterCacel(); this.getCurrentUserNow() this.idx = 0 this.getList() }); }, // getNewDept(){ // let postData = { // currentHosId: this.hosId, // loginType: "Wechat", // }; // post('/auth/changeHospital',postData).then((result) => { // if (result.status == 200) { // this.getCurrentUserNow(); // } // }); // }, // 获取当前用户信息 getCurrentUserNow() { get('/user/data/getCurrentUser').then((data) => { if (data["status"] == 200) { this.loginUser = data.data let user = uni.getStorageSync('userData'); user.user.dept = data["data"].dept; user.user.currentHospital = data["data"].currentHospital; this.userInfo.dept.dept = data["data"].dept.dept; user.user.fixedStoredSpecimenRoom = data["data"].fixedStoredSpecimenRoom; uni.setStorageSync('userData',user) let userInfo = uni.getStorageSync('userData').user this.isDept = this.specimenData.find(i=>i.id == userInfo.dept.id) if(userInfo.fixedStoredSpecimenRoom!=null){ this.depositCheck = userInfo.fixedStoredSpecimenRoom == 1 ? true : false } } }); }, // 选择科室 radioChange(evt) { this.deptId = evt.detail.value for (let i = 0; i < this.specimenData.length; i++) { if (this.specimenData[i].id == evt.detail.value) { this.current = i; break; } } }, // 查看详情 detail(item){ // this.padChange('862420344832\n') uni.navigateTo({ url: `/pages/specimenPort/detail?detailId=${item.id}` }); }, // 获取标本间科室 getDept(backType) { post('/common/common/getDictionary', { key: "dept_type", type: "list" }).then((res2) => { let item2 = res2.find(i => i.name == '标本间科室') let query = { idx: 0, sum: 9999, department: { hospital: { id: this.hosId || "" }, type: { id: item2.id || "" }, }, }; post('/data/fetchDataList/department', query).then((res) => { this.specimenData = res.list if(!backType){ this.isShowFilter = true } let userInfo = uni.getStorageSync('userData').user if(userInfo.fixedStoredSpecimenRoom!=null){ this.depositCheck = userInfo.fixedStoredSpecimenRoom == 1 ? true : false } this.isDept = this.specimenData.find(i=>i.id == userInfo.dept.id) this.$nextTick(_=>{ if(this.isDept){ for (let i = 0; i < this.specimenData.length; i++) { if (this.specimenData[i].id === userInfo.dept.id) { this.current = i; break; } } } }) if(this.isDept){ this.getList() } }); }); }, // 分页数据 getList() { uni.showLoading({ title: "加载中", mask: true, }); let query = { idx: this.idx, pathologyForm: { detailsType: "specimenDept", keyWords: "", hosId: this.hosId, }, sum: 20 } post('/data/fetchDataList/pathologyForm', query).then(res => { uni.hideLoading(); if(res.list.length){ this.hasMore = true; this.list = this.idx === 0 ? res.list : this.list.concat(res.list); this.otherData = res.otherData }else{ if(this.idx == 0){ this.list = [] } this.hasMore = false; } this.totalNum = res.totalNum; }); }, // PDA扫描 padChange(scannerCode){ scannerCode = scannerCode.replace('\n','') if (!this.SMFlag) { return; } this.SMFlag = false; uni.showLoading({ title: "加载中", mask: true, }); post("/pathology/scanCode", { barcode:scannerCode, platform:"app" }).then((res) => { this.SMFlag = true uni.hideLoading(); if(res.status==200){ let data = res.data[0] let item = null let str = null if(scannerCode.indexOf(':')!=-1){ str = scannerCode.split(':') item = data.pathologySpecimenDTOList.find(i=>i.specimenCode == str[1]) }else{ item = data.pathologySpecimenDTOList.find(i=>i.specimenCode == scannerCode) } // let item = data.pathologySpecimenDTOList.find(i=>i.specimenCode == scannerCode) if(!item.fixationTime && data.pathologyFormType==0){ if(data.status.value==2 || data.status.value==3 || data.status.value==4){ uni.navigateTo({ url: `/pages/specimenPort/scan?data=${JSON.stringify(data)}&type=${res.type}` }); }else{ uni.showToast({ title: '查询到标本申请单信息', duration: 1000, icon:'none' }); setTimeout(_=>{ uni.navigateTo({ url: `/pages/specimenPort/detail?detailId=${data.id}` }); },800) } }else if(item.fixationTime && data.pathologyFormType==0){ uni.showToast({ title: '查询到标本申请单信息', duration: 1000, icon:'none' }); setTimeout(_=>{ uni.navigateTo({ url: `/pages/specimenPort/detail?detailId=${data.id}` }); },800) }else{ uni.showToast({ title: '该申请单类型不是病理检查申请单', duration: 1000, icon:'none' }); } }else{ uni.showModal({ title: "提示", content: `${res.msg} \n 扫描内容:${scannerCode}`, confirmColor:'#49b856', success: (res) => { if (res.confirm) { console.log("用户点击确定"); } else if (res.cancel) { console.log("用户点击取消"); } }, }); } }) }, }, onReachBottom() { this.idx++; if (this.hasMore) { this.getList(); // 当触底时加载更多数据 } }, onBackPress(e) { // backbutton:物理按键返回 if (e.from === 'backbutton') { uni.navigateTo({ url: `/pages/homePage/homePage` }); return true } }, onShow() { let that = this // #ifdef APP-PLUS this.isUpdate = true this.isApp = true uni.$off('scan') // 每次进来先 移除全局自定义事件监听器 uni.$on('scan', function(data) { that.padChange(data) }) // #endif }, onLoad(option) { let backType = option.backType ? option.backType : null this.getDept(backType) // #ifdef APP-PLUS this.isUpdate = true this.isApp = true // #endif } } </script> <style lang="less" scoped> page { background: #F7F7F7; } .conte { .header { height: 80rpx; display: flex; justify-content: center; align-items: center; position: relative; position: fixed; width: 100%; background: #F7F7F7; .title { color: #57BC63; font-size: 32rpx; font-weight: 500; .red{ color: red; margin-left: 10px; } } .filter { position: absolute; right: 15rpx; top: 24rpx; .icon{ font-size: 34rpx; } } } .height-list { height: 44px; } .list { // margin-bottom: 20rpx; background: #fff; .df-list { display: flex; justify-content: space-between; padding: 14rpx 20rpx; font-size: 28rpx; color: #555555; .df-list-over-left{ overflow: hidden; flex: 1; text-overflow: ellipsis; white-space: nowrap; } .df-list-over{ overflow: hidden; flex: 1; text-overflow: ellipsis; white-space: nowrap; margin-left: 20rpx; } } .list-border { border-bottom: 1px solid #D2D2D2; height: 46rpx; display: flex; justify-content: space-between; align-items: center; font-size: 32rpx !important; font-weight: 500; color: #000; } .list-content{ height: 22rpx; background: #F7F7F7; } } .df { display: flex; height: 80rpx; align-items: center; padding: 0 20rpx; border-bottom: 1px solid #D2D2D2; } .execFilterMask{ .execFilter{ position: relative; background-color: #fff; height: 100vh; border-radius: 100rpx 100rpx 0 0; /deep/ .uni-radio-input-checked { background-color: #49b856 !important; border-color: #49b856 !important; } .execFilterHeader{ height: 70rpx; display: flex; justify-content: center; align-items: center; border-bottom: 2rpx solid #ccc; } .execFilterBody{ .execFilterItem{ padding: 32rpx; border-bottom: 2rpx dashed #ccc; &:last-of-type{ border-bottom: none; } .execFilterItemHeader{} .execFilterItemBody{ display: flex; flex-wrap: wrap; padding: 32rpx 0 0; justify-content: space-between; text-align: left; .execFilterItemBox{ width: 200rpx; height: 80rpx; text-align: center; line-height: 80rpx; background-color: #f6f6f6; margin-bottom: 20rpx; border-radius: 80rpx; &.active{ color: #fff; background-color: #49b856; } } .deptName { height: 80rpx; background-color: #f6f6f6; border-radius: 20rpx; padding: 0 20rpx; width: 100%; } } } } .execFilterFooter { position: absolute; bottom: 0; right: 0; left: 0; line-height: 66rpx; height: 100rpx; display: flex; justify-content: space-between; .btn { height: 66rpx; flex: 1; margin: 0 1%; background-image: linear-gradient(to right, #72c172, #3bb197); color: #fff; border-radius: 8rpx; font-size: 28rpx; margin-top: 16rpx; text-align: center; } } } } } </style>