Compare commits

...

2 Commits

Author SHA1 Message Date
wangweidong 070665730f 同步 2025-12-03 14:18:52 +08:00
wangweidong ec60a63e26 同步 2025-12-03 14:15:33 +08:00
7 changed files with 648 additions and 34 deletions

View File

@ -76,6 +76,20 @@ export const queryMaterialInfo = (params) => {
data: params,
})
}
export const queryQlwcLog = (params) => {
return request({
url: `${uni.getStorageSync('serverUrl')}/api/pad/invoicing/qld/queryQlwcLog`,
method: 'get',
data: params,
})
}
export const removeAllGwc = (params) => {
return request({
url: `${uni.getStorageSync('serverUrl')}/api/pad/invoicing/qld/removeAllGwc`,
method: 'post',
data: params,
})
}
export const transRead = (params) => {
return request({
url: `${uni.getStorageSync('serverUrl')}/api/pad/invoicing/qld/transRead`,

View File

@ -12,48 +12,75 @@
mode="aspectFill"></image>
<view>{{v.materialInfo.materialName}}</view>
<text class="ytj" v-if="v.qlNum>=0">{{v.qlNum}}</text>
<view class="zhanwei" v-if="moredex==1" @click.stop="del(v)">
<view>-</view>
</view>
</view>
<defaultr cont="暂无数据" v-if="Material.length==0&&timeout" style="position: absolute;width: 10vw;height: 10vw;"></defaultr>
</scroll-view>
<view class="kjlt more guodu" :style="qb?'width:15vw':'' " @touchstart="ts" @touchmove="canmove">
<view @click="qb=!qb;moredex=0;moveleft()" class="righ0">
<view @click="zksq" class="righ0">
{{!qb?'更多':'收起'}}
<image class="guodu" :style="qb?'transform: rotate(180deg);':''"
src="/static/index/procurement/zjt.png" mode="aspectFill"></image>
</view>
<view class="guodu" :class="qb?(moredex==1?'avt':''):'righ0'" @click="moredex=1;Invenshow=true">
<view class="guodu" :class="qb?(moredex==1?'avt':''):'righ0'" @click="moredex=1; ">
批量移除
</view>
<view class="guodu" :class="qb?(moredex==2?'avt':''):'righ0'" @click="moredex=2">
<view class="guodu" :class="qb?(moredex==2?'avt':''):'righ0'" @click="moredex=2; ">
清空列表
</view>
<view class="guodu" :class="qb?(moredex==3?'avt':''):'righ0'" @click="moredex=3">
<view class="guodu" :class="qb?(moredex==3?'avt':''):'righ0'" @click="moredex=3;emit('submit')">
提交请领单
</view>
</view>
</view>
<tanchuang @back="moredex = 0" :show="moredex==2" font="确定将本次请领清单中的所有物料都移除吗?" @right="delall"></tanchuang>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, watch, reactive } from 'vue';
import defaultr from './default.vue'
import tanchuang from '../common/tanchuang.vue';
const props = defineProps({
Material:{
type:Array,
required: true,
}
});
const emit = defineEmits([ 'delall' ,'del','submit'])
const serverUrl = ref(uni.getStorageSync('serverUrl') + '/sys/common/static/')
const qb = ref(false)
const moredex = ref(0)
// watch(()=>props.Material,
// ()=>{
// console.log(props.Material)
// if(props.Material.length>5){
// scrollleft.value = 100*props.Material.length
// }
// })
watch(()=>props.Material,
()=>{
if(props.Material.length==0){
qb.value = false;
}
})
const delall = ()=>{
emit('delall');
setTimeout(()=>{
moredex.value = 0;
qb.value = false;
},100)
}
const del =(v)=>{
emit('del',v)
}
const zksq = () =>{
if(props.Material.length==0){
uni.showToast({
icon:'none',
title:'请添加请领物料!'
})
return
}
qb.value=!qb.value;
moredex.value=0;
moveleft();
}
const startX = ref(0)
const ts = (e) => {
startX.value = e.touches[0].clientX
@ -65,6 +92,7 @@
}
const scrollleft = ref(0)
const canmove = (e : any) => {
if(props.Material.length==0){ return }
const moveX = e.touches[0].clientX
const diff = moveX - startX.value
// diff
@ -221,7 +249,32 @@
border-radius: 1.1vw;
margin-right: 0.8vw;
position: relative;
.zhanwei{
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
z-index: 200;
view{
position: absolute;
width: 2.2vw;
height: 2.2vw;
display: flex;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
border-radius: 50%;
border: 2px solid rgba(255, 78, 78, 1);
display: flex;
justify-content: center;
align-items: center;
font-size: 3vw;
color: rgba(255, 78, 78, 1);
}
}
.ytj {
min-width: 1.5vw;
height: 1.8vw;

View File

@ -0,0 +1,127 @@
<template>
<view>
<view class="mengban" @click="emit('fill')" v-if="show"> </view>
<view class="qinglingdetails" :class="show?'':'unclass'" :style="showbox?'z-index:220':'z-index:-2'">
<view class="tit">
<view>请领详情</view>
</view>
<view class="itemcan">
<text>{{ uni.getStorageSync('nuName')}}</text>
<text>请领人:{{uni.getStorageSync('realname')}}</text>
<text>请领日期:{{times}}</text>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, watch, reactive } from 'vue';
import { queryMaterialInfo,queryQlwcLog} from '../api/api.js'
import defaultr from './default.vue'
const props = defineProps({
objtake: {
type: Object,
required: true
},
show: {
type: Boolean
}
})
const pageNo = ref(1)
const times = ref('')
const status = ref('loadmore')
onMounted(()=>{
let now = new Date();
let year = now.getFullYear();
let month = (now.getMonth() + 1)<10?'0'+(now.getMonth() + 1):(now.getMonth() + 1);
let day = now.getDay()<10?'0'+now.getDay():now.getDay();
times.value = year+'.'+month+'.'+day
})
const wuobj = ref({})
const serverUrl = ref(uni.getStorageSync('serverUrl') + '/sys/common/static/')
const emit = defineEmits([ 'fill' ,'qingling'])
const showbox = ref(false)
const wcLog = ref([])
watch(()=>props.show,
()=>{
console.log(props.objtake)
if(props.show==true){
setTimeout(()=>{
showbox.value = true
},50)
}else{
showbox.value = false;
wcLog.value = [];
pageNo.value = 1;
status.value = "loadmore"
}
})
const scrolltolower = ()=>{
if (status.value=='loading'||status.value=='nomore') { return }
status.value = 'loading';
pageNo.value++;
}
</script>
<style scoped lang="less">
.qinglingdetails{
width: 60vw;
height: 49vw;
background:rgba(255, 255, 255, 0.98);
box-shadow: 0rpx 0rpx 1.3vw 0rpx rgba(163,167,182,0.16);
border-radius: 1.6vw;
position: fixed;
top:8vw;
left: 20vw;
z-index: 200;
padding:1vw 1.4vw;
.itemcan{
width: 100%;
height: 6.6vw;
display: flex;
justify-content: space-between;
align-items: center;
text{
font-weight: 400;
font-size: 1.4vw;
color: #888888;
}
}
.tit {
width: 100%;
height: 3.5vw;
line-height: 6vw;
font-weight: 400;
font-size: 1.6vw;
color: #333333;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #E5E5E5;
}
}
.mengban{
width: 100vw;
height: 100vh;
position: fixed;
z-index: 20;
top: 0;
left: 0;
background: RGBA(239, 240, 244, 0.55);
}
.hei0 {
height: 0 !important;
view{
height: 0 !important;
}
}
.unclass {
opacity: 0 !important;
}
.guodu {
transition: .4s;
-webkit-transform-style: preserve-3d;
-webkit-overflow-scrolling: touch;
}
</style>

View File

@ -1,13 +1,142 @@
<template>
<view>
<view class="recorditem">
<view class="mengban" @click="emit('fill')" v-if="show"> </view>
<view class="recorditem guodu" :class="show?'':'unclass'" :style="showbox?'z-index:220':'z-index:-2'">
<view class="tit">
<view>请领记录</view>
<text>入住时间{{times}}</text>
</view>
<view class="cont">
<view class="leftbox">
<image :src="objtake.materialImg?serverUrl+objtake.materialImg:'/static/index/procurement/k.png'" mode="aspectFill"/>
<view>
<text>耗材用品</text>
<text>复健用品</text>
</view>
</view>
<view class="youcont">
<view>{{objtake.materialName}}</view>
<view>
<view>
物料编码
<text>{{objtake.materialNo}}</text>
</view>
<view>
规格型号
<text style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;">{{objtake.specificationModel}}</text>
</view>
</view>
<view>
<view>
请领数量
<text>{{objtake.qlNum?objtake.qlNum:'0'}}</text>
</view>
<view>
请领单位
<text>{{objtake.materialUnits}}</text>
</view>
</view>
</view>
</view>
<view class="lji">
<view>累计请领: </view>
<text> {{wuobj.wlNum?wuobj.wlNum:0}}{{objtake.materialUnits}}</text>
</view>
<scroll-view scroll-y="true" class="jilu" scroll-with-animation @scrolltolower="scrolltolower()">
<view class="itm" v-for="(v,i) in wcLog" :key='i'>
<view class="dian" :class="i==wcLog.length-1?'d':''"></view>
<view class="riqi">
{{v.opeTime}}
</view>
<view class="qlr">
请领数量<text>{{v.qlNum}}{{v.materialUnits}}</text>
</view>
<view class="qlr">
请领人<text>{{v.empName}}</text>
</view>
</view>
<view style="height:3vw;width: 100%;display: flex;align-items: center;justify-content: center;">
<u-loadmore :status="status" :loadText="{nomore:'暂无更多数据'}" v-if="wcLog.length>6" />
</view>
<defaultr cont="暂无请领数据" v-if="wcLog.length==0" style="width: 10vw;height: 10vw;margin: 1.5vw auto;position: relative;"></defaultr>
</scroll-view>
<view class="plsbuy-bottom">
<view class="quxiao" @click="emit('fill')">
关闭
</view>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, watch, reactive } from 'vue';
import { queryMaterialInfo,queryQlwcLog} from '../api/api.js'
import defaultr from './default.vue'
const props = defineProps({
objtake: {
type: Object,
required: true
},
show: {
type: Boolean
}
})
const pageNo = ref(1)
const times = ref('')
const status = ref('loadmore')
onMounted(()=>{
times.value = uni.getStorageSync('NUall').elderInfo.checkinTime
})
const wuobj = ref({})
const serverUrl = ref(uni.getStorageSync('serverUrl') + '/sys/common/static/')
const emit = defineEmits([ 'fill' ,'qingling'])
const showbox = ref(false)
const wcLog = ref([])
watch(()=>props.show,
()=>{
console.log(props.objtake)
if(props.show==true){
let obj = {
nuId:uni.getStorageSync('nuId'),
elderId:uni.getStorageSync('NUall').id,
wlId:props.objtake.wlId,
}
queryMaterialInfo(obj).then(res=>{
wuobj.value = res.result
})
qglog()
setTimeout(()=>{
showbox.value = true
},50)
}else{
showbox.value = false;
wcLog.value = [];
pageNo.value = 1;
status.value = "loadmore"
}
})
const scrolltolower = ()=>{
if (status.value=='loading'||status.value=='nomore') { return }
status.value = 'loading';
pageNo.value++;
qglog()
}
const qglog = ()=>{
let obj = {
nuId:uni.getStorageSync('nuId'),
elderId:uni.getStorageSync('NUall').id,
wlId:props.objtake.wlId,
pageNo:pageNo.value,
pageSize:20
}
queryQlwcLog(obj).then(res=>{
wcLog.value.push(...res.result.records);
status.value = (res.result.total == wcLog.value.length ? 'nomore' : 'loadmore')
})
}
</script>
<style scoped lang="less">
@ -19,5 +148,244 @@
border-radius: 1.6vw;
border: 1px solid #E5E5E5;
position: fixed;
top: 6.5vw;
left: 29vw;
z-index: 200;
padding: 0 1.7vw;
.jilu{
width: 100%;
height: 17vw;
.itm::after{
content: '';
width: 1px;
height: 100%;
border-left: 2px dashed rgba(136, 136, 136, 1);
position: absolute;
left: 1.75vw;
top: 1.5vw;
z-index: 201;
}
.itm{
width: 100%;
height: 3.5vw;
position: relative;
display: flex;
align-items: center;
.dian{
width: 0.5vw;
height: 0.5vw;
margin: 01.6vw;
background: #888888;
border-radius: 50%;
position: relative;
}
.d::before{
content: '';
width: 15px;
height: 100%;
position: absolute;
height: 4vw;
left: 0vw;
top: 0.5vw;
z-index: 203;
background: white;
}
.riqi{
min-width: 7.2vw;
height: 2vw;
background: #F9F9FA;
border-radius: 1vw;
border: 1px solid #D2D2D2;
display: flex;
justify-content: center;
align-items: center;
font-weight: 400;
font-size: 1vw;
color: #888888;
padding: 0 0.6vw;
}
.qlr{
font-weight: 400;
font-size: 1.3vw;
color: #999999;
margin-left: 1.8vw;
text{
color: #333;
}
}
}
}
.lji{
height: 5vw;
display: flex;
justify-content: flex-end;
padding-top: 1.2vw;
view{
font-weight: 400;
font-size: 1.6vw;
color: #222222;
}
text{
font-weight: bold;
font-size: 1.6vw;
color: #222222;
}
}
.cont{
width: 38vw;
height: 14.6vw;
background: #F9F9FA;
border-radius: 1.6vw;
margin: 1.5vw auto 0;
padding: 1.4vw 1vw;
display: flex;
justify-content: flex-start;
.leftbox {
width: 15.2vw;
height: 100%;
border-right: 2px solid #E5E5E5;
view {
width: 100%;
margin-top: 0.6vw;
display: flex;
justify-content: space-around;
text {
min-width: 4.8vw;
height: 2vw;
border-radius: 1vw;
border: 1px solid #D2D2D2;
font-weight: 400;
font-size: 1.1vw;
color: #555555;
display: flex;
justify-content: center;
align-items: center;
padding: 0 0.6vw;
}
}
>image {
width: 8.5vw;
height: 8vw;
margin: 0 auto;
display: block;
}
}
.youcont {
width: 25vw;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
>view {
padding: 0 1.8vw;
&:nth-child(2),
&:nth-child(3) {
width: 100%;
height: 3.6vw;
display: flex;
justify-content: flex-start;
margin-top: 1.8vw;
>view {
width: 50%;
font-weight: 400;
font-size: 1.1vw;
color: #888888;
display: flex;
flex-direction: column;
justify-content: space-between;
text {
font-weight: 400;
font-size: 1.4vw;
color: #222222;
}
}
}
&:nth-child(1) {
width: 100%;
height: 1.8vw;
font-weight: bold;
font-size: 1.6vw;
color: #222222;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
line-height: 1.8vw;
}
}
}
}
.tit {
width: 100%;
height: 6vw;
line-height: 6vw;
font-weight: 400;
font-size: 1.6vw;
color: #333333;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #E5E5E5;
padding-top: 1vw;
text{
font-weight: 400;
font-size: 1.1vw;
color: #999999;
}
}
}
.plsbuy-bottom {
width: 100%;
margin-top: 2vw;
height: 7vw;
display: flex;
justify-content: flex-end;
font-size: 35rpx;
view{
display: flex;
justify-content: center;
align-items: center;
width: 9.1vw;
height: 3.8vw;
color: rgba(92, 121, 146, 1);
border-radius:1.9vw;
font-size: 1.8vw;
border: 1px solid #EDEDEF;
margin-left: 1vw;
}
.quxiao{
background: #EDEDEF;
}
.plsbuy-bottom-blue {
background: linear-gradient(0deg, #CAE0F9, #E9F4FF);
border: 1px solid rgba(3,133,250,0.34);
color: #0385FA;
}
}
.unclass {
opacity: 0 !important;
}
.guodu {
transition: .4s;
-webkit-transform-style: preserve-3d;
-webkit-overflow-scrolling: touch;
}
.mengban{
width: 100vw;
height: 100vh;
position: fixed;
z-index: 20;
top: 0;
left: 0;
background: RGBA(239, 240, 244, 0.55);
}
</style>

View File

@ -43,24 +43,28 @@
</view>
</view>
</view>
<addwl :Material="addMaterial"></addwl>
<addwl :Material="addMaterial" @delall="delall" @del="adddel" @submit="submit"></addwl>
<carditem :InvoicingList="listarr" @scrolltolower="scrolltolower" :status="status" @comfig="comfig"></carditem>
<takeing :show="takeshow" :objtake="objtake" @fill="takeshow = false" @right="right"></takeing>
<cgdclass @confirm="confirm" :show="ification" :typenum="0" ref="classication" @fill="ification = false"></cgdclass>
<medetails :show="detaishow" @fill="detaishow = false" @confirm="confirm" :objtake="objtake"></medetails>
<tanchuang @back="tanshow = false" :show="tanshow" font="确定将该物料从本次请领清单中移除吗?" @right="del"></tanchuang>
<takerecord :objtake="objtake" :show="recordshow" @fill="recordshow = false"></takerecord>
<submits></submits>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, watch, reactive } from 'vue';
import { queryInvoicingList,wlzd,queryGwcInfo,addGwc ,deleteGwcWl} from '../api/api.js'
import { queryInvoicingList,wlzd,queryGwcInfo,addGwc ,deleteGwcWl,removeAllGwc} from '../api/api.js'
import addwl from '../common/addwl.vue';
import carditem from '../common/carditem.vue';
import takeing from '../common/takeing.vue';
import cgdclass from '../common/cgdclass.vue';
import medetails from '../common/medetails.vue';
import tanchuang from '../common/tanchuang.vue';
import takerecord from '../common/takerecord.vue';
import submits from '../common/submits.vue'
const form = reactive({
pageNo:1,
pageSize:10,
@ -75,6 +79,7 @@
const ification = ref(false)
const detaishow = ref(false)
const tanshow = ref(false)
const recordshow = ref(false)
const classication = ref<InstanceType<typeof ChildComponent>>()
onMounted(()=>{
@ -108,16 +113,35 @@
})
}
const scrolltolower = ( ) => {
if (status.value=='loading') { return }
if (status.value=='loading'||status.value=='nomore') { return }
status.value = 'loading';
form.pageNo++;
config()
}
const submit = ()=>{
}
const adddel = (v)=>{
console.log(v)
listarr.value.forEach(item=>{
if(item.wlId == v.wlId){
objtake.value = item
}
})
tanshow.value = true;
console.log(objtake.value)
}
const del = ()=>{
deleteGwcWl({gwcId:objtake.value.gwcId}).then(res=>{
let obj = {
nuId:form.nuId,
elderId:form.elderId,
wlId:objtake.value.wlId
}
deleteGwcWl(obj).then(res=>{
if(res.success){
tanshow.value = false;
objtake.value.isAdd = null;
objtake.value.qlNum = null;
wuliao();
}else{
uni.showToast({
@ -127,6 +151,23 @@
}
})
}
const delall = () =>{
removeAllGwc({nuId:form.nuId, elderId:form.elderId}).then(res=>{
if(res.success){
wuliao();
listarr.value.forEach(item=>{
item.isAdd = null;
item.qlNum = null;
item.gwcId = null;
})
}else{
uni.showToast({
icon:'none',
title:res.message
})
}
})
}
const objtake = ref({})
const comfig=(v,i,t)=>{
console.log(v,i,t)
@ -142,6 +183,9 @@
break;
case 1:
objtake.value = v;
recordshow.value = true;
break;
case 2:
@ -158,8 +202,15 @@
wlzd(obj).then(res=>{
console.log(obj,res)
if(res.success){
// objtake.value = v;
// objtake.value.zk = false;
// objtake.value.scrollleft = 0;
// objtake.value = v.zhiDingId?false:true;
// listarr.value.splice(i,1);
// listarr.value.unshift(v)
listarr.value = [];
form.pageNo = 1;
config()
}else{
uni.showToast({
@ -188,6 +239,7 @@
if(res.success){
takeshow.value = false;
v.isAdd = 1;
v.qlNum = e;
wuliao();
}else{
uni.showToast({

View File

@ -574,7 +574,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
)
]);
}
const camera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]], ["__file", "D:/hldy_app_mini/pages/camera.nvue"]]);
const camera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]], ["__file", "D:/项目/hldy_app_mini/pages/camera.nvue"]]);
export {
camera as default
};

View File

@ -577,7 +577,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
)
]);
}
const fullcamera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]], ["__file", "D:/hldy_app_mini/pages/fullcamera.nvue"]]);
const fullcamera = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["styles", [_style_0]], ["__file", "D:/项目/hldy_app_mini/pages/fullcamera.nvue"]]);
export {
fullcamera as default
};