This commit is contained in:
Teng 2025-12-01 17:14:07 +08:00
commit 819581c31d
10 changed files with 761 additions and 5 deletions

View File

@ -0,0 +1,14 @@
// 引入 request 文件
import request from '@/request/index.js'
// 以下 api 为博主项目示例,实际与项目相匹配
// 查询服务类型
export const queryInvoicingList = (params) => {
return request({
url: `${uni.getStorageSync('serverUrl')}/api/pad/invoicing/qld/queryInvoicingList`,
method: 'get',
data: params,
})
}

View File

@ -0,0 +1,178 @@
<template>
<view>
<view class="kcyj">
<view class="kjlt">
请领物料
</view>
<scroll-view scroll-x="true" class="kcscrol guodu"
scroll-with-animation :scroll-top="scrolltop" @scrolltolower="scrolltolower(1)">
<view class="yjbox" v-for="(v,i) in Material" :key="i" @click="clickaddcar(v,i)">
<image :src="v.materialImg?serverUrl+v.materialImg:'/static/index/procurement/k.png'"
mode="aspectFill"></image>
<view>{{v.materialName}}</view>
<text class="ytj" v-if="v.isAdd==1">已添加</text>
</view>
</scroll-view>
<view class="kjlt more guodu" :style="qb?'width:11.2vw':'' ">
<view @click="qb=!qb;moredex=0" 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>
<view class="guodu" :class="qb?(moredex==2?'avt':''):'righ0'" @click="moredex=2">添加全部</view>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, defineProps, watch, reactive } from 'vue';
const props = defineProps({
show: {
type: Boolean,
default:false,
required: true,
},
Material:{
type:Array,
required: true,
}
});
</script>
<style scoped lang="less">
.kcyj {
width: 100%;
height: 10vw;
display: flex;
margin-top: 1vw;
position: relative;
.kjlt {
width: 3.2vw;
height: 10vw;
background: rgba(255, 255, 255, 0.5);
border-radius: 1.1vw;
writing-mode: vertical-rl;
align-items: center;
display: flex;
justify-content: center;
letter-spacing: 3px;
font-size: 1.4vw;
position: relative;
z-index: 100;
}
.more {
margin-left: 0.6vw;
position: relative;
background: RGBA(239, 240, 244, 1);
.righ0 {
right: 0 !important;
}
view {
writing-mode: vertical-rl;
align-items: center;
display: flex;
justify-content: center;
letter-spacing: 3px;
width: 3.2vw;
height: 10vw;
position: absolute;
top: 0;
border-radius: 1.1vw;
font-size: 1.4vw;
color: #888888;
background: #fff;
&:nth-child(1) {
letter-spacing: 6px;
padding-top: 2vw;
z-index: 5;
image {
width: 1.6vw;
height: 1.6vw;
margin-top: 10px;
}
}
&:nth-child(2) {
right: 4.2vw;
z-index: 3;
}
&:nth-child(3) {
right: 8.5vw;
z-index: 2;
}
}
.avt {
background: rgba(85, 166, 249, 1);
color: #FFFFFF;
}
}
.kcscrol {
width:calc(100% - 10vw);
height: 10vw;
white-space: nowrap;
margin-left: 0.6vw;
position: relative;
z-index: 99;
.yjbox {
display: inline-block;
width: 14vw;
height: 10vw;
background: rgba(255, 255, 255, 0.5);
border-radius: 1.1vw;
margin-right: 0.6vw;
position: relative;
.ytj {
width: 4.5vw;
height: 1.8vw;
background: #E3EEF7;
border-radius: 0.9vw;
border: 1px solid rgba(3, 133, 250, 0.34);
font-weight: 400;
font-size: 1.1vw;
color: #1083F8;
text-align: center;
line-height: 1.75vw;
position: absolute;
top: 0.8vw;
right: 0.8vw;
}
image {
width: 7vw;
height: 7vw;
margin: 0.5vw auto 0.5vw;
display: block;
border-radius: 1vw;
}
>view {
width: 100%;
height: 1.4vw;
font-weight: 400;
font-size: 1.3vw;
color: #212327;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
padding: 0 1vw;
text-align: center;
}
}
}
}
</style>

View File

@ -0,0 +1,374 @@
<template>
<view>
<scroll-view scroll-y="true" class="itembox" scroll-with-animation @scrolltolower="scrolltolower()" enable-back-to-top>
<view class="box">
<view class="fler" v-for="(v,index) in InvoicingList" :key="index">
<scroll-view class="carditem guodu" @touchend="handleTouchEnd($event,v,index)"
@touchstart="touchstart($event,v,index)" scroll-with-animation scroll-x="true"
:scroll-left="v.scrollleft" @scroll="scroll" >
<view class="speitem guodu" >
<image :src="v.materialImg?serverUrl+v.materialImg:'/static/index/procurement/k.png'"
mode="aspectFill">
</image>
<view class="cardp">
<view v-if="v.categoryId_dictText">{{v.categoryId_dictText}}</view>
<view v-if="v.typeId_dictText">{{v.typeId_dictText}}</view>
</view>
</view>
<view class="msitem guodu" >
<view>
<view>{{v.materialName}}</view>
</view>
<view>
<text style="white-space: nowrap;"> 规格型号: </text>
<view>{{v.specificationModel}}</view>
</view>
<view>
<view>
<text>{{v.qlNum?v.qlNum:'--'}}</text>
<text>请领数量</text>
</view>
<view>
<text>{{v.materialUnits}}</text>
<text>请领单位</text>
</view>
</view>
</view>
<view class="add" @click.stop="addcar(v,index)">
<view v-if="v.isAdd==1">已添加</view>
<image :src="'/static/index/procurement/+.png'" mode="aspectFill"></image>
</view>
<view class="zkadd guodu" :class="v.isAdd==1?'zkf':''">
<view @click.stop="crk(v,index)" @touchend.stop>
请领记录
</view>
<view @click.stop="crk(v,index)" @touchend.stop>
物料详情
</view>
<view @click.stop="addcar(v,index)" v-if="v.isAdd!=1" @touchend.stop>
</view>
</view>
</scroll-view>
</view>
</view>
</scroll-view>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, defineProps, watch, reactive } from 'vue';
const props = defineProps({
InvoicingList: {
type: Array,
required: true
},
status: {
type: String
},
show: {
type: Boolean,
default: false,
required: true,
},
})
const caigouobj = ref({})
const emit = defineEmits(['addcartory', 'scrolltolower','addcar','crk'])
const pageX = ref(0);
const pageY = ref(0);
const touchstart = (event : any, v : any,i:number) => {
caigouobj.value = v;
pageX.value = event.changedTouches[0].pageX;
pageY.value = event.changedTouches[0].pageY;
solleft(v, i)
}
const handleTouchEnd = (event : any, v : any, i : number) => {
let y = event.changedTouches[0].pageY;
let x = event.changedTouches[0].pageX;
let absx = Math.abs(x - pageX.value)
let absy = Math.abs(y - pageY.value)
if (absy > 30 && absx+10<absy) {
setTimeout(()=>{
caigouobj.value.scrollleft = 0
},20)
return
}
if (absx < 10 && absy < 10) {
if(caigouobj.value.zk==false){
setTimeout(()=>{
caigouobj.value.scrollleft = 0
},20)
}
return
}
if(scrollLeft.value <=40){
caigouobj.value.scrollleft = scrollLeft.value;
caigouobj.value.zk = false;
nextTick(()=>{
caigouobj.value.scrollleft = 0;
scrollLeft.value = 0;
})
}else{
caigouobj.value.scrollleft = 150;
caigouobj.value.zk = true;
}
caigouobj.value = v;
caigouobj.value.Limitnum = Number(caigouobj.value?.upperLimit) - Number(caigouobj.value.kcsl);
caigouobj.value.index = i;
caigouobj.value.yj = false;
caigouobj.value.zk = x > pageX.value ? false : true;
caigouobj.value.scrollleft = caigouobj.value.zk ? 150 : 0;
}
const solleft = (v : any, i : number) => {
props.InvoicingList.forEach((item, k) => {
if (k != i&&item.zk==true) {
item.zk = false;
item.scrollleft = 0;
}
})
}
const scrolltolower = () => {
emit('scrolltolower')
}
const scrollLeft = ref(0)
const scroll = (e)=>{
scrollLeft.value = e.detail.scrollLeft
console.log(e.detail.scrollLeft)
}
</script>
<style scoped lang="less">
.zkadd {
width: 9vw;
height: 100%;
display: inline-flex;
justify-content: flex-end;
position: absolute;
top: 0;
right: -9vw;
view:active{
background:rgba(85, 166, 249, 1) !important;
color: #FFFFFF !important;
}
>view {
width: 3vw;
height: 100%;
font-weight: 400;
font-size: 1.3vw;
display: flex;
justify-content: center;
align-items: center;
writing-mode: vertical-rl;
text-orientation: upright;
letter-spacing:2px;
&:nth-child(3) {
background: rgba(194, 196, 201, .6);
color: #555555;
}
&:nth-child(2) {
background: rgba(194, 196, 201, .4);
color: #666666;
}
&:nth-child(1) {
background: rgba(194, 196, 201, .2);
color: #666666;
}
}
}
.add {
width:5vw;
height: 13vw;
display: inline-flex;
justify-content: space-between;
align-items: center;
position: absolute;
top:0;
right:0.8vw;
>view {
width: 4.5vw;
height: 1.8vw;
background: #E3EEF7;
border-radius: 0.9vw;
border: 1px solid rgba(3, 133, 250, 0.34);
font-weight: 400;
font-size: 1.1vw;
color: #1083F8;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
top: 0.8vw;
right: 0vw;
}
image {
width: 3vw;
height: 3vw;
position: absolute;
bottom: 0.8vw;
right: 0vw;
}
}
.msitem {
width: 11.5vw;
height: 100%;
position: absolute;
top:0;
left: 10vw;
>view {
margin-top: 0.25vw;
&:nth-child(3) {
width: 100%;
height: 3.4vw;
display: flex;
justify-content: space-between;
>view {
width: 50%;
height: 100%;
display: flex;
flex-direction: column;
position: relative;
margin-top:1vw;
white-space: nowrap;
&:nth-child(1){
padding-right: 1.7vw;
align-items: flex-start;
}
&:nth-child(2){
padding-left: 1.7vw;
align-items: flex-start;
}
&:nth-child(1)::after {
content: '';
position: absolute;
right: 0;
width: 100%;
height: 2.2vw;
border-right: 1px solid #C9C9C9;
top: 0.6vw;
}
text {
&:nth-child(1) {
font-weight: bold;
font-size: 1.7vw;
color: #555555;
}
&:nth-child(2) {
font-weight: 400;
font-size: 1.1vw;
color: #999999;
white-space: nowrap;
}
}
}
}
&:nth-child(2) {
display: flex;
justify-content: space-between;
flex-direction: column;
margin-top: 0.1vw;
view{
font-size: 1.4vw;
color: #888888;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
text {
font-weight: 400;
font-size: 1.1vw;
color: #777777;
margin-top: 0.25vw;
}
}
&:nth-child(1) {
view{
display: inline-block;
width: 10vw;
font-weight: bold;
font-size: 1.6vw;
color: #222222;
height: 3vw;
padding-top: 1.3vw;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
}
}
}
.speitem {
width: 10vw;
height: 100%;
display: inline-flex;
flex-direction: column;
position: absolute;
top:0;
left: 0;
.cardp {
width:8vw;
height: 4vw;
display: flex;
margin: 0 auto;
align-items: center;
justify-content: center;
flex-direction: column;
view {
min-width: 5.5vw;
height: 1.8vw;
border-radius: 0.9vw;
border: 1px solid #D2D2D2;
margin: 0.5vw 0 0 0.5vw;
display: flex;
justify-content: center;
align-items: center;
font-weight: 400;
font-size: 1vw;
color: #555555;
padding: 0 0.25vw;
}
}
>image {
width: 8.5vw;
height: 7.5vw;
margin: 0.7vw auto 0.25vw;
}
}
.itembox{
width: 100%;
height: 68vh;
padding: 0 2vw 0 0;
.box{
width: 100%;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
.fler{
width: 27.5vw;
height: 13vw;
margin-top: 0.9vw;
.carditem{
width: 27.5vw;
height: 13vw;
background: rgba(245, 246, 248, 1);
border-radius: 1.1vw;
position: relative;
overflow: hidden;
}
}
}
</style>

View File

@ -0,0 +1,84 @@
<template>
<view>
<view class="buttons-father">
<view class="boxtwo">
<view class="ipt">
<input type="text" placeholder="物料名称/物料简拼" />
</view>
<view class="scr">
检索
</view>
<view class="shx">
<image src="/static/index/requestform/shaixuan.png" mode="aspectFill"></image>
<view class="shx-font">
筛选
</view>
</view>
<view class="shx">
<image src="/static/index/requestform/chongzhi.png" mode="aspectFill"></image>
<view class="shx-font">
重置
</view>
</view>
</view>
<view class="boxtwo flexend">
<view class="qlthbtn">
<image src="/static/index/requestform/ql0.png" mode="aspectFill"></image>
<view class="shx-font">
请领单
</view>
</view>
<view class="qlthbtn">
<image src="/static/index/requestform/ql1.png" mode="aspectFill"></image>
<view class="shx-font">
回退单
</view>
</view>
<view class="qlthbtn">
<image src="/static/index/requestform/ql2.png" mode="aspectFill"></image>
<view class="shx-font">
退货
</view>
</view>
</view>
</view>
<addwl></addwl>
<carditem :InvoicingList="listarr"></carditem>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed, nextTick, defineProps, watch, reactive } from 'vue';
import { queryInvoicingList } from '../api/api.js'
import addwl from '../common/addwl.vue'
import carditem from '../common/carditem.vue'
const from = reactive({
pageNo:1,
pageSize:10,
nuId:uni.getStorageSync('nuId'),
elderId:uni.getStorageSync('NUall').id,
wlParamInfo:'',
categoryId:'',
typeId:'',
medicationId:''
})
onMounted(()=>{
config()
})
const listarr = ref([])
const config = ()=>{
console.log(from)
queryInvoicingList(from).then(res=>{
res.result.records.forEach(item=>{
item.zk = false;
item.scrollleft = 0;
})
listarr.value.push(...res.result.records)
console.log(res)
})
}
</script>
<style lang="less" scoped>
@import "../css/take.less";
</style>

View File

@ -34,4 +34,108 @@
margin-left: 60rpx;
margin-right: 3rpx;
}
}
.buttons-father {
width: 100%;
height: 90rpx;
display: flex;
justify-content: space-between;
.flexend{
justify-content: flex-end !important;
padding-right: 1.8vw;
}
.boxtwo{
width: 50%;
height: 100%;
display: flex;
justify-content: flex-start;
}
.ipt {
display: flex;
align-items: center;
width: 16vw;
background: #E2E4E9;
border-radius: 1.65vw;
height: 3.3vw;
image {
width: 2.2vw;
height: 2.2vw;
margin: 0 0.5vw;
}
input {
width: 18vw;
height: 3.5vw;
font-size: 1.4vw;
padding-left: 1.6vw;
}
}
.qlthbtn{
width: 9.3vw;
height: 3.3vw;
background: rgba(255, 255, 255, 0.6);
border-radius: 1.65vw;
border: 1rpx solid #D9DADC;
font-weight: 400;
font-size: 1.2vw;
color: #222;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0.5rpx 3rpx 3rpx #dadee1;
margin: 0 0 0 0.5vw;
color: #555555;
image {
width: 1.8vw;
height: 1.8vw;
margin: 0 0.2vw 0 0;
}
}
.scr {
border-radius: 1.65vw;
font-weight: 400;
font-size: 1.4vw;
display: flex;
justify-content: center;
align-items: center;
width: 6.5vw;
height: 3.3vw;
margin: 0 0 0 0.7vw;
background: rgba(255, 255, 255, 0.6);
border: 1px solid #D9DADC;
color: #555555;
box-shadow: 0.5rpx 3rpx 3rpx #dadee1;
}
.shx {
width: 6.5vw;
height: 3.3vw;
background: rgba(255, 255, 255, 0.6);
border-radius: 1.65vw;
border: 1rpx solid #D9DADC;
font-weight: 400;
font-size: 1.2vw;
color: #222;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0.5rpx 3rpx 3rpx #dadee1;
margin: 0 0 0 0.5vw;
color: #555555;
image {
width: 1.8vw;
height: 1.8vw;
margin: 0 0.2vw 0 0;
}
.shx-font {
margin-top: 3rpx;
// margin-left: -5rpx;
}
}
}

View File

@ -10,11 +10,12 @@
<view class="right-icons">
<image class="right-icons-img" src="/static/index/requestform/touxiang.png" />
<view>{{uni.getStorageSync('realname')}}</view>
<image class="right-icons-img-back" src="/static/index/requestform/back.png" />
<view>返回</view>
<image class="right-icons-img-back" src="/static/index/requestform/back.png" v-if="hometype>0"/>
<view v-if="hometype>0">返回</view>
</view>
</view>
<requestformView />
<takehomep v-if="hometype==0"></takehomep>
<requestformView v-if="hometype==1" />
</view>
</template>
@ -23,7 +24,8 @@
import { onShow, onLoad, onHide, onPageScroll } from "@dcloudio/uni-app"
import { queryCgdList } from '@/pages/Warehouse/api/lunpan.js'
import requestformView from './component/requestform.vue'
import takehomep from './component/takehomep.vue'
const hometype = ref(0)
const transition = ref(false);
const props = defineProps({
isShow: {

View File

@ -77,7 +77,7 @@
onMounted(() => {
menuIndex.value = -1;
nextTick(() => menuIndex.value = 0)
nextTick(() => menuIndex.value = 3)
isOld.value = 2;
uni.getSystemInfoSync(); // global

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 712 B