hldy_app_mini/pages/Warehouse/picking.vue

3433 lines
86 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 class="contain">
<view v-show="moreindex!=-1 || topbuttontarget!=-1 || openjianhuo || opengaijia || opendata || opencgr "
class="mengban"
@click="moreindex=-1; topbuttontarget=-1;openjianhuo=false;opengaijia=false;opendata=false;opencgr=false;clickflag=false;">
</view>
<!-- 没数据了,遮罩 -->
<nomessageimge cont="暂无数据" :show="nomessageshow" />
<!-- 给模糊搜索用的 -->
<view v-show="filteredCgrListsecond.length&&gysvalue" class="mengban" @click="closefilteredCgrListsecond">
</view>
<view class="input-next" style="bottom: 450rpx;" v-if="filteredCgrListsecond.length && gysvalue">
<view v-show="filteredCgrListsecond[0].suppliersName!=`暂无数据`" class="next-father"
v-for="(item, index) in filteredCgrListsecond.slice(0, 5)" :key="index"
@click="clickfilteredCgrListsecond(item,index)">
{{ item.suppliersName }}
</view>
<view class="nomessage" v-if="filteredCgrListsecond[0].suppliersName===`暂无数据`">
暂无数据
</view>
</view>
<!-- 给模糊搜索用的 -->
<view v-show="filteredCgrList.length&&cgrvalue" class="mengban" @click="closefilteredCgrList"></view>
<view class="input-next" v-if="filteredCgrList.length && cgrvalue">
<view v-show="filteredCgrList[0].cgBy!=`暂无数据`" class="next-father"
v-for="(item, index) in filteredCgrList.slice(0, 5)" :key="index" @click="clickfilteredCgrList(item)">
{{ item.cgBy }}
</view>
<view class="nomessage" v-if="filteredCgrList[0].cgBy===`暂无数据`">
暂无数据
</view>
</view>
<!-- 日期 -->
<view class="calendar-father" v-show="opendata" v-if="xiaohui">
<calendar @datachange="dateget" />
</view>
<!-- 改价 -->
<view class="gaijiafather" v-show="opengaijia" :style="donghuaopo?{opacity:1}:{opacity:0}">
<view style="width: 100%;margin-top: 50rpx;font-size: 30rpx;">
采购单价:
<text style="color: #888888;">
¥{{ gaijia }}
</text>
</view>
<view style="margin-top: 150rpx;display: flex;align-items: center;flex-direction: column;width: 50%;">
<view style="font-size: 30rpx;margin-bottom: 10rpx;">
到货单价
</view>
<view class="gray-input" style="width: 410rpx;">
¥ {{ gaijia }}
</view>
</view>
<view style="position: absolute;right: 30rpx;bottom: 30rpx;">
<view style="display: flex;">
<view @click="opengaijia=false"
style="width: 160rpx;height: 75rpx;background-color: #ebeced;color: #888888;display: flex;justify-content: center;align-items: center;font-size: 30rpx;border-radius: 40rpx;">
取消
</view>
<view @click="dogaijia"
style="width: 160rpx;height: 75rpx;;color: #0385FA;display: flex;justify-content: center;align-items: center;font-size: 30rpx;border-radius: 40rpx;border: 1rpx solid #0385FA;background: linear-gradient(to bottom,#E9F4FF,#CAE0F9);margin: 0 40rpx;">
确定
</view>
</view>
</view>
<view class="jianhuo-jianpan" style="right: -40rpx;bottom: 150rpx;">
<view style="display: flex;width: 480rpx;">
<view class="gray-button-jianpan" @click="press('1')">
1
</view>
<view class="gray-button-jianpan" @click="press('2')">
2
</view>
<view class="gray-button-jianpan" @click="press('3')">
3
</view>
</view>
<view style="display: flex;width: 480rpx;">
<view class="gray-button-jianpan" @click="press('4')">
4
</view>
<view class="gray-button-jianpan" @click="press('5')">
5
</view>
<view class="gray-button-jianpan" @click="press('6')">
6
</view>
</view>
<view style="display: flex;width: 480rpx;">
<view class="gray-button-jianpan" @click="press('7')">
7
</view>
<view class="gray-button-jianpan" @click="press('8')">
8
</view>
<view class="gray-button-jianpan" @click="press('9')">
9
</view>
</view>
<view style="display: flex;width: 480rpx;">
<view class="gray-button-jianpan" @click="press('AC')">
AC
</view>
<view class="gray-button-jianpan" @click="press('0')">
0
</view>
<view class="gray-button-jianpan" @click="press('.')">
.
</view>
</view>
</view>
</view>
<!-- 拣货 -->
<view class="jianhuofather guodu" v-show="openjianhuo" :style="donghuaopo?{opacity:1}:{opacity:0}">
<view style="margin: 40rpx 0;width: 100%;text-align: center;font-size: 35rpx;font-weight: 600;">
{{showvalue.wlName}}
</view>
<view style="display: flex;justify-content: space-between;width: 100%;">
<view style="font-weight: 600;font-size: 30rpx;">
物料信息
</view>
<view style="font-weight: 600;font-size: 35rpx;color: #555555;">
¥{{showvalue.totalPrice}}
</view>
</view>
<view style="display: flex;margin-top: 10rpx;">
<view class="" style="width: 33%;">
<view style="color: #888888;margin-top: 10rpx;">
物料编码
</view>
<view class="" style="margin-top: 5rpx;font-size: 34rpx;">
{{showvalue.wlMaterialNo}}
</view>
</view>
<view style="width: 33%;">
<view style="color: #888888;margin-top: 10rpx;white-space: nowrap;">
规格型号
</view>
<view style="margin-top: 5rpx;font-size: 34rpx;white-space: nowrap;display: flex;flex-wrap: nowrap;">
{{showvalue.wlSpecificationModel}}
</view>
</view>
</view>
<view style="display: flex;margin-top: 20rpx;">
<view class="" style="width: 33%;">
<view style="color: #888888;margin-top: 10rpx;">
采购单价
</view>
<view class="text-anim" style="margin-top: 5rpx;font-weight: 600;font-size: 34rpx;">
¥{{showvalue.arrivalPrice?Number(showvalue.arrivalPrice).toFixed(2):Number(showvalue.procurementPrice).toFixed(2)}}
</view>
</view>
<view class="" style="width: 33%;">
<view style="color: #888888;margin-top: 10rpx;">
采购数量
</view>
<view class="" style="margin-top: 5rpx;font-weight: 600;font-size: 34rpx;">
{{showvalue.purchaseQuantity}}
</view>
</view>
<view class="" style="width: 33%;">
<view style="color: #888888;margin-top: 10rpx;">
采购单位
</view>
<view class="" style="margin-top: 5rpx;font-size: 34rpx;">
{{showvalue.wlUnits}}
</view>
</view>
</view>
<view style="width: 95%;height: 0.5rpx; background-color: #eff1f3;margin-top: 10rpx;margin-bottom: 5rpx;">
</view>
<view style="">
<view style="font-weight: 600;font-size: 30rpx;">
入库信息
</view>
</view>
<view style="display: flex;margin-top: 10rpx;">
<view class="" style="width: 33%;">
<view style="color: #888888;margin-top: 10rpx;">
入库数量
</view>
<view class="" style="margin-top: 5rpx;font-size: 34rpx;">
{{showvalue.rksl}}
</view>
</view>
<view class="" style="width: 33%;">
<view style="color: #888888;margin-top: 10rpx;">
挂账数量
</view>
<view class="" style="margin-top: 5rpx;font-size: 34rpx;">
{{showvalue.wrksl}}
</view>
</view>
<view class="" style="width: 33%;">
<view style="color: #888888;margin-top: 10rpx;">
销账数量
</view>
<view class="" style="margin-top: 5rpx;font-size: 34rpx;">
{{showvalue.xzsl}}
</view>
</view>
</view>
<view style="width: 95%;height: 0.5rpx; background-color: #eff1f3;margin-top: 10rpx;margin-bottom: 5rpx;">
</view>
<view style="">
<view style="font-weight: 600;font-size: 30rpx;">
拣货拍照
</view>
</view>
<view style="display: flex;flex-wrap: wrap;width: 60%;">
<view class="moban-photo" v-for="(item,index) in albumlist" :key="index">
<view
style="width: 1.6vw;height: 1.6vw;z-index: 20;position: absolute; right: 0.1vw;top: 0.1vw;background: rgba(255, 255, 255, 0.7);display: flex;justify-content: center;align-items: center;"
@click.stop="deldex=index;open=1">
<image src="/static/x.png" mode="aspectFill" style="width: 100%;height: 100%;"></image>
</view>
<image style="width: 100%;height: 100%;" :src="item?item:'/static/zhanwei.png'" mode="aspectFill"
@click="previewImage(item,index,albumlist)" />
</view>
<view style="width: 40%;height: 150rpx;margin-right: 4%;margin-top: 3%;" v-if="albumlist.length<4"
@click="uplod(0)">
<view class="moban-photo-special">
<image style="width: 50rpx;height: 50rpx;margin-bottom: 5rpx;"
src="/static/index/warehouse/procurement/picking/addphoto.png" />
<view style="color: #78B1EB;font-size: 25rpx;">
点击拍照上传
</view>
</view>
</view>
<view
style="width: 87%;height: 0.5rpx; background-color: #eff1f3;margin-top: 10rpx;margin-bottom: 5rpx;">
</view>
</view>
<view style="">
<view style="font-weight: 600;font-size: 30rpx;">
数量
</view>
</view>
<view style="display: flex;margin-top: 30rpx;margin-left: 20rpx;">
<view class="gray-button" @click="jjnum(-1)" @longpress="handleTouchStart(-1)"
@touchend="handleTouchEnd">
-
</view>
<view class="gray-input" style="width:12vw;">
<text v-for="(v,i) in stringjh" :key="i">{{v}}</text>
</view>
<!-- <text></text>{{showvalue.num}} -->
<view class="gray-button" @click="jjnum(1)" @longpress="handleTouchStart(1)" @touchend="handleTouchEnd">
+
</view>
</view>
<view class="jianhuobutton">
<view style="display: flex;">
<view @click="openjianhuo = false;clickflag = false"
style="width: 160rpx;height: 75rpx;background-color: #ebeced;color: #888888;display: flex;justify-content: center;align-items: center;font-size: 30rpx;border-radius: 40rpx;">
关闭
</view>
<view @click="config(1)"
style="width: 160rpx;height: 75rpx;;color: #0385FA;display: flex;justify-content: center;align-items: center;font-size: 30rpx;border-radius: 40rpx;border: 1rpx solid #0385FA;background: linear-gradient(to bottom,#E9F4FF,#CAE0F9);margin: 0 20rpx;">
销账
</view>
<view @click="config(0)"
style="width: 160rpx;height: 75rpx;;color: #0385FA;display: flex;justify-content: center;align-items: center;font-size: 30rpx;border-radius: 40rpx;border: 1rpx solid #0385FA;background: linear-gradient(to bottom,#E9F4FF,#CAE0F9);">
入库
</view>
</view>
</view>
<view class="jianhuo-jianpan">
<view style="display: flex;width: 480rpx;">
<view class="gray-button-jianpan" @click="clknum(1)">
1
</view>
<view class="gray-button-jianpan" @click="clknum(2)">
2
</view>
<view class="gray-button-jianpan" @click="clknum(3)">
3
</view>
</view>
<view style="display: flex;width: 480rpx;">
<view class="gray-button-jianpan" @click="clknum(4)">
4
</view>
<view class="gray-button-jianpan" @click="clknum(5)">
5
</view>
<view class="gray-button-jianpan" @click="clknum(6)">
6
</view>
</view>
<view style="display: flex;width: 480rpx;">
<view class="gray-button-jianpan" @click="clknum(7)">
7
</view>
<view class="gray-button-jianpan" @click="clknum(8)">
8
</view>
<view class="gray-button-jianpan" @click="clknum(9)">
9
</view>
</view>
<view style="display: flex;width: 480rpx;">
<view class="gray-button-jianpan" @click="clknum('AC')">
AC
</view>
<view class="gray-button-jianpan" @click="clknum(0)">
0
</view>
<view class="gray-button-jianpan" @click="clknum('AE')">
AE
</view>
</view>
</view>
</view>
<!-- 照片墙 -->
<view class="photowall" v-show="topbuttontarget!=-1" :style="donghuaopo?{opacity:1}:{opacity:0}">
<view class="photowall-title">
<view class="photowall-name">
{{ !topbuttontarget?`拣货照片`:`随行单` }}
</view>
<view class="">
<text class="photowall-left">
采购单号:
</text>
<text class="photowall-right">
{{plsbuy[lefttarget]?.cgdNo}}
</text>
</view>
</view>
<scroll-view scroll-y="true" class="photowall-other" scroll-with-animation v-if="topbuttontarget==0">
<view class="photowall-other-one" v-for="(item,index) in jhdanarr" :key="index"
@click="previewImage(item,index,jhdanarr,2)">
<image style="width: 100%;height: 70%;border-radius: 30rpx;"
:src="item.jhPic?serverUrl + item.jhPic:'/static/ceshiyaoshan.png'" mode="aspectFill"
:lazy-load="true" />
<view style="margin-top: 20rpx;">
<text style="color: #888888;">
上传时间:
</text>
<text style="margin-left: 15rpx;">
{{item.createTime}}
</text>
</view>
<view style="margin-top: 10rpx;">
<text style="color: #888888;letter-spacing: 8.9rpx;">
上传人:
</text>
<text>
{{item.createBy}}
</text>
</view>
</view>
</scroll-view>
<scroll-view scroll-y="true" class="photowall-other" scroll-with-animation v-if="topbuttontarget==1">
<view class="photowall-other-one" v-for="(item,index) in suixingdanarr" :key="index"
@click="previewImage(item,index,suixingdanarr,1)">
<image style="width: 100%;height: 70%;border-radius: 30rpx;"
:src="item.sxdPic?serverUrl + item.sxdPic:'/static/ceshiyaoshan.png'" mode="aspectFill" />
<view style="margin-top: 20rpx;">
<text style="color: #888888;">
上传时间:
</text>
<text style="margin-left: 15rpx;">
{{item.createTime}}
</text>
</view>
<view style="margin-top: 10rpx;">
<text style="color: #888888;letter-spacing: 8.9rpx;">
上传人:
</text>
<text>
{{item.createBy}}
</text>
</view>
</view>
<view class="photowall-other-one" v-if="topbuttontarget==1">
<view style="width: 100%;height: 70%;display: flex;flex-direction: column;
justify-content: center;align-items: center;position: absolute;top:3vw;left: 0;
background-color:#fafdff ;border: 1rpx solid #78B1EB;border-radius: 30rpx;" @click="uplod(1)">
<image style="width: 70rpx;height: 70rpx;margin-bottom: 5rpx;"
src="/static/index/warehouse/procurement/picking/addphoto.png" />
<view style="color: #78B1EB;">
点击拍照上传
</view>
</view>
</view>
</scroll-view>
</view>
<view class="contain-left">
<view v-show="openselect" class="mengban" @click="openselect=false"></view>
<view class="left-select-more" v-show="openselect" >
<view class="more-bottom">
<view class="bottom-left" @click="chongzhi">
重置
</view>
<view class="bottom-right" @click="openselect=false">
确定
<text style="font-size: 25rpx;margin-top: 5rpx;" v-if="alltotal>=99">
(99+采购单)
</text>
</view>
</view>
<view class="more-title">
采购单状态
</view>
<view class="more-statues-father">
<view :class="plzinfo.cgdType==`0,1`?`more-statues-button-target`:`more-statues-button`"
@click="plzinfo.cgdType=`0,1`;search()">
全部
</view>
<view :class="plzinfo.cgdType==`0`?`more-statues-button-target`:`more-statues-button`"
@click="plzinfo.cgdType=`0`;search()">
待入库
</view>
<view :class="plzinfo.cgdType==`1`?`more-statues-button-target`:`more-statues-button`"
@click="plzinfo.cgdType=`1`;search()">
待完结
</view>
</view>
<view class="more-time">
采购日期
</view>
<view class="more-time-select" @click="opendata=!opendata">
<view class="more-gray" v-show="!plzinfo.startTime">
开始日期
</view>
<view class="more-black" v-show="plzinfo.startTime">
{{ plzinfo.startTime }}
</view>
<view style="font-size: 32rpx;">
</view>
<view class="more-gray" v-show="!plzinfo.endTime">
结束日期
</view>
<view class="more-black" v-show="plzinfo.endTime">
{{ plzinfo.endTime }}
</view>
<image class="more-img" src="/static/index/warehouse/procurement/picking/data.png" />
</view>
<view class="more-select">
采购人
</view>
<view class="more-time-select" @click="opencgr=true">
<input class="more-gray" v-model="cgrvalue" placeholder="请输入采购人" placeholder-style="color: #BFBFBF;"
style="margin-left: 30rpx;width: 400rpx;" @input="changeArray"></input>
<image class="select-img" src="/static/index/warehouse/procurement/picking/center.png" />
</view>
<view class="more-select">
供应商
</view>
<view class="more-time-select" @click="opengys=true">
<input class="more-gray" v-model="gysvalue" placeholder="请输入供应商" placeholder-style="color: #BFBFBF;"
style="margin-left: 30rpx;width: 400rpx;" @input="changeArraysecond"></input>
<image class="select-img" src="/static/index/warehouse/procurement/picking/center.png" />
</view>
</view>
<view class="title-input-father">
<input class="title-input" type="text" v-model="plzinfo.cgdParamInfo" maxlength="15"
placeholder="采购单号/采购日期/供应商" @confirm="search()" />
<image v-show="plzinfo.cgdParamInfo" class="title-input-img" src="@/static/x.png"
@click="plzinfo.cgdParamInfo='';search()" />
<view class="title-input-button" @click="search();">
检索
</view>
<view class="filter">
<image class="filter-img"
:src="`/static/index/purchaseorder/select${openselect?`target`:``}.png`" />
<view :class="openselect?`filter-font-target`: `filter-font`" @click="openselect=!openselect">
筛选
</view>
</view>
</view>
<view class="statues-father">
<view class="statues-gray">
单据状态
</view>
<view :class="plzinfo.cgdType==`0,1`?`statues-button-target`:`statues-button`" style="margin-left: 4%;"
@click="plzinfo.cgdType=`0,1`;search()">
全部
</view>
<view :class="plzinfo.cgdType==`0`?`statues-button-target`:`statues-button`"
@click="plzinfo.cgdType=`0`;search()">
待入库
</view>
<view :class="plzinfo.cgdType==`1`?`statues-button-target`:`statues-button`"
@click="plzinfo.cgdType=`1`;search()">
待完结
</view>
</view>
<view class="left-menu-father">
<scroll-view scroll-y="true" scroll-with-animation class="left-menu-scroll" :scroll-top="leftscrolltop"
@scrolltolower="plsbuytolower" :lower-threshold="400">
<view class="pls-card" v-for="(v,i) in plsbuy" :key='i' @click="clickLeftMenu(i,v)"
:style="{borderColor: i==lefttarget? ``:`#fff` }">
<text style="display: block;background: #ff5757;
position: absolute;width: 1.3vw;height: 1.3vw;border-radius: 50%;right: -0.1vw;top: -0.1vw;"
v-if="v.izNew=='Y'">
</text>
<view class="pls-card-title">
<view class="title-left">
{{ v.cgdNo }}
</view>
<view class="title-right">
<text style="position: absolute;bottom: 4rpx;left: -30rpx;">
</text>
<view class="title-right-big">
{{ Number(v.totalPrice).toFixed(2) }}
</view>
</view>
</view>
<view class="pls-card-middle">
<view class="pls-card-middle-one">
<view class="middle-title">
{{ v.qgDate }}
</view>
<view class="middle-heng-father">
<view class="middle-heng"
style="border-top-left-radius: 20rpx;border-bottom-left-radius: 20rpx;"></view>
<view class="middle-heng" style="border-radius: 20rpx;background-color: #1083F8;">
</view>
<!-- <view class="middle-heng" v-if="Number(v.status)<3 "
style="border-radius: 20rpx;background-color: #1083F8;"></view> -->
<!-- <view class="middle-ball"
:style="Number(v.status)<3?{backgroundColor: `#1083F8`}:{} "></view> -->
<view class="middle-ball" :style="{backgroundColor: `#1083F8`}"></view>
</view>
<view class="end-font">
<!-- <view class="" :style="Number(v.status)<3?{color: `#1083F8`}:{} ">
采购
</view> -->
<view class="" :style="{color: `#1083F8`}">
采购
</view>
<view style="font-size: 25rpx;">
{{ "[ " + v.qgBy + " ]" }}
</view>
</view>
</view>
<view class="pls-card-middle-one">
<view class="middle-title">
{{ v.jhTime?.slice(0,10) }}
</view>
<view class="middle-heng-father">
<view class="middle-heng"></view>
<view class="middle-heng"
style="border-radius: 20rpx;width: 105%;margin-left: -5%;">
</view>
<view class="middle-heng" v-if="Number(v.status)>=1"
style="border-radius: 20rpx;background-color: #1083F8;width: 105%;margin-left: -5%;">
</view>
<view class="middle-ball" :style="{backgroundColor: `#1083F8`}"></view>
<view class="middle-ball"
:style="Number(v.status)>=1?{backgroundColor: `#1083F8`}:{} ">
</view>
<!-- <view class="middle-ball"
:style="Number(v.status)>=1?{backgroundColor: `#1083F8`}:{} ">
</view> -->
</view>
<view class="end-font">
<!-- <view class=""
:style="Number(v.status)<3 && Number(v.status)>0?{color: `#1083F8`}:{} ">
拣货
</view> -->
<view class="" :style="Number(v.status)>=1?{color: `#1083F8`}:{}">
拣货
</view>
<view style="font-size: 25rpx;" v-if="Number(v.status)>=1 && v.jhBy">
{{ "[ " + v.jhBy + " ]" }}
</view>
</view>
</view>
<view class="pls-card-middle-one">
<view class="middle-title">
{{ Number(v.status)>=2 ? v.wjTime?.slice(0,10) :""}}
</view>
<view class="middle-heng-father">
<view class="middle-heng"
style="border-top-right-radius: 20rpx;border-bottom-right-radius: 20rpx;">
</view>
<view class="middle-heng" v-if="Number(v.status)>=2"
style="border-radius: 20rpx;background-color: #1083F8;width: 105%;margin-left: -5%;">
</view>
<view class="middle-ball" :style="{backgroundColor: `#1083F8`}"></view>
<view class="middle-ball"
:style="Number(v.status)>=2?{backgroundColor: `#1083F8`}:{} ">
</view>
</view>
<view class="end-font">
<view :style="Number(v.status)>=2?{color: `#1083F8`}:{}">
完结
</view>
<view style="font-size: 25rpx;" v-if="Number(v.status)>=2 && v.wjBy">
{{ "[ " + v.wjBy + " ]" }}
</view>
</view>
</view>
</view>
<view class="pls-card-end">
<view class="end-left">
<image class="end-left-img" src="/static/shili.png" />
<view class="end-left-font">
{{ v.gysId_dictText }}
</view>
</view>
<!-- <view :class="v?.cgdType=='9' ?`tag-fail`:`tag-success`">
{{ tagesstatues[Number(v.status)] }}
</view> -->
<view class="tag-success">
{{ tagesstatues[Number(v.status)] }}
</view>
</view>
</view>
</scroll-view>
</view>
</view>
<view class="white-zhezhao"></view>
<view class="contain-right">
<view class="contain-right-title">
<view class="left-top-tags">
<view class="wuliao-title">
物料信息
<!-- <view class="wuliao-heng"></view> -->
</view>
</view>
<view :class="!topbuttontarget?`contain-right-button-target`: `contain-right-button`"
@click="donghuastart(0)">
<image class="buttont-img"
:src="`/static/index/warehouse/procurement/picking/camera${!topbuttontarget?`target`:``}.png`" />
<view class="button-font">
拣货照片
</view>
</view>
<view :class="topbuttontarget==1?`contain-right-button-target`: `contain-right-button`"
@click="donghuastart(1)">
<image class="buttont-img"
:src="`/static/index/warehouse/procurement/picking/work${topbuttontarget==1?`target`:``}.png`" />
<view class="button-font">
随行单
</view>
</view>
<view :class="!Number(plsbuy[lefttarget]?.status)?`contain-right-button`: `contain-right-button-bad`"
style="border-color: #D9DADC;box-shadow: 0 1rpx 3rpx #D9DADC;" @click="bebad">
<image class="buttont-img"
:src="`/static/index/warehouse/procurement/picking/bebad${!Number(plsbuy[lefttarget]?.status)?``:`target`}.png`" />
<view class="button-font">
作废
</view>
</view>
<view class="contain-right-button" @click="goback()">
<image class="buttont-img" style="margin-top: 4rpx;" src="/static/index/purchaseorder/back.png" />
<view class="button-font">
返回
</view>
</view>
</view>
<view class="contain-right-middle">
<scroll-view scroll-x="true" class="middle-Y" :scroll-left="Invoiscroll" scroll-with-animation>
<view class="middle-Y-father">
<view class="middle-one" v-for="(v,i) in InvoicingList" :key='i'
:style="{border: middletarget === i? '4rpx solid #1083F8': '4rpx solid transparent',backgroundColor:middletarget === i?`#F9FCFF`:``}"
@click="clickmiddle(i)">
<view :class="v.status<2?`up-tags-target`: `up-tags`">
{{v.status_dictText}}
</view>
<image class="middle-img"
:src="v.materialImg?serverUrl + v.materialImg : '/static/index/warehouse/procurement/k.png'"
mode="aspectFill"></image>
<!-- <image class="middle-img" :src=" '/static/zhiniaoku.png'" mode="aspectFill"></image> -->
<view class="middle-right">
<view class="right-title">
{{ v.wlName }}
</view>
<view class="juzhong">
<view class="">
<text style="font-size: 25rpx;margin-right: -5rpx;margin-left: -5rpx;">
</text>
<text style="font-size: 30rpx;"
:style="{fontWeight:middletarget !== i?`600`:``,color:middletarget !== i?`#333333`:`#888888`}">
{{v.arrivalPrice?Number(v.arrivalPrice).toFixed(2):Number(v.procurementPrice).toFixed(2) }}
</text>
</view>
<view class="" style="font-size: 30rpx;position: relative;">
<text style="font-weight: 600;margin-right: 5rpx;"
:style="{fontWeight:middletarget === i?`600`:``,color:middletarget === i?`#333333`:`#888888`}">
{{ v.purchaseQuantity }}
</text>
<text style="font-size: 26rpx;color: #888888;">
{{ v.wlUnits}}
</text>
</view>
</view>
<view class="right-middle">
</view>
<view class="juzhong">
<view class="">
<text style="color: #888888;">
入库数量
</text>
</view>
<view class="">
<text :style=" {fontWeight: v.rksl>0? `600` :`` }">
{{v.rksl}}
</text>
</view>
</view>
<view class="juzhong">
<view class="">
<text style="color: #888888;">
挂账数量
</text>
</view>
<view class="">
<text :style=" {fontWeight: v.wrksl>0? `600` :`` }">
{{v.wrksl}}
</text>
</view>
</view>
<view class="juzhong">
<view class="">
<text style="color: #888888;">
销账数量
</text>
</view>
<view class="">
<text :style=" {fontWeight: v.xzsl>0? `600` :`` }">
{{v.xzsl}}
</text>
</view>
</view>
</view>
</view>
</view>
</scroll-view>
<view style="display: flex;justify-content: space-between;">
<view style="display: flex;">
<view :class="!typechange? `wuliao-title`:`wuliao-title-no`" @click="typechange = 0">
物料详情
<view class="wuliao-heng"></view>
</view>
<view :class="typechange==1? `wuliao-title`:`wuliao-title-no`" style="margin-left: 10rpx;"
@click="typechange = 1">
拣货记录
<view class="wuliao-heng"></view>
</view>
</view>
<view style="display: flex;margin-top: 10rpx;font-size: 30rpx;">
<view :style="outerStyle" @click="opengaijiaclick">
<view :style="segmentsWrapperStyle">
<view v-for="(c, i) in segColors" :key="i" :style="{
flex: 1,
height: '100%',
backgroundColor: c
}" />
</view>
<view :style="innerStyle">
<text :style="textStyle">改价</text>
</view>
</view>
<view @click="openjianhuoclick"
:class="showvalue.jianhuobtn==false?`jianhuobutton-gray-bad`: `jianhuobutton-gray`">
拣货
</view>
</view>
</view>
<view style="width: 95%;height: 0.5rpx; background-color: #eff1f3;margin-left: 5%;"></view>
<view class="right-bottom" v-show="!typechange">
<view class="right-bottom-left">
<image class="left-img"
:src="showvalue?.materialImg?serverUrl + showvalue?.materialImg : '/static/index/warehouse/procurement/k.png'"
mode="aspectFill"></image>
<view class="left-tags">
<view class="tags-one" v-if="showvalue.categoryId_dictText">
{{showvalue.categoryId_dictText}}
</view>
<view class="tags-one" v-if="showvalue.typeId_dictText">
{{showvalue.typeId_dictText}}
</view>
<view class="tags-one" v-if="showvalue.medicationId_dictText">
{{showvalue.medicationId_dictText}}
</view>
</view>
</view>
<view class="right-bottom-right">
<view class="bottom-right-title">
<view class="title-left">
{{showvalue.wlName}}
</view>
<view class="title-right">
<text
style="position: absolute;top: 8rpx;left: -35rpx;font-weight: 300;font-size: 28rpx;">
</text>
<view style="color: #555555;">
{{Number(showvalue.totalPrice).toFixed(2) }}
</view>
</view>
</view>
<view class="bottom-right-middle">
<view class="middle-onecard">
<view class="threeone">
<view class="gray-text">
物料编码
</view>
<view class="right-text">
{{showvalue.wlMaterialNo}}
</view>
</view>
<view class="threeone">
<view class="gray-text">
规格型号
</view>
<view class="right-text" style="white-space: nowrap;">
{{showvalue.wlSpecificationModel}}
</view>
</view>
<view class="gray-heng"></view>
</view>
<view class="middle-onecard">
<view class="threeone">
<view class="gray-text">
采购单价
</view>
<view class="right-text">
¥{{showvalue.arrivalPrice? Number(showvalue.arrivalPrice).toFixed(2):Number(showvalue.procurementPrice).toFixed(2) }}
</view>
</view>
<view class="threeone">
<view class="gray-text">
采购数量
</view>
<view class="right-text">
{{showvalue.purchaseQuantity}}
</view>
</view>
<view class="threeone">
<view class="gray-text">
采购单位
</view>
<view class="right-text">
{{showvalue.wlUnits}}
</view>
</view>
<view class="gray-heng"></view>
</view>
<!-- <view class="gray-heng"></view> -->
<view class="middle-onecard">
<view class="threeone">
<view class="gray-text">
库存数量
</view>
<view class="right-text">
{{showvalue.kcsl}}
</view>
</view>
<view class="threeone">
<view class="gray-text">
物料上限 ↑
</view>
<view class="right-text">
{{showvalue.wlUpperLimit}}
</view>
</view>
<view class="threeone">
<view class="gray-text">
物料下限 ↓
</view>
<view class="right-text">
{{showvalue.wlLowerLimit}}
</view>
</view>
<view class="gray-heng"></view>
</view>
<!-- <view class="gray-heng"></view> -->
<view class="middle-onecard">
<view class="threeone">
<view class="gray-text">
入库数量
</view>
<view class="right-text">
{{showvalue.rksl}}
</view>
</view>
<view class="threeone">
<view class="gray-text">
挂账数量
</view>
<view class="right-text">
{{showvalue.wrksl}}
</view>
</view>
<view class="threeone">
<view class="gray-text">
销账数量
</view>
<view class="right-text">
{{showvalue.xzsl}}
</view>
</view>
</view>
</view>
</view>
</view>
<view class="right-bottom" v-show="typechange==1" style="padding: 0 50rpx;flex-direction: column;">
<view style="width: 100%;display: flex;justify-content: space-between;margin-top: 20rpx;">
<view style="font-size: 35rpx;font-weight: 600;margin-left: 20rpx;color: #222222;">
{{showvalue.wlName}}
</view>
<view style="color: black;">
<text style="color: #888888;">
采购数量:
</text>
<text style="font-weight: 600;color: #555555;">
{{showvalue.purchaseQuantity}}
</text>
{{showvalue.wlUnits}}
</view>
</view>
<scroll-view style="width: 110%;height: 400rpx;display: flex;flex-wrap: wrap;" scroll-y="true"
scroll-with-animation @scrolltolower="lhjlfy()">
<view
style=" display: inline-block;width: 45%;height: 180rpx;background-color: #F9F9F9;border-radius: 30rpx;margin-right: 2%;margin-top: 20rpx;padding: 0 30rpx;color: #888888;"
v-for="(item,index) in lhjlarr" :key="index">
<view
style="width: 100%;justify-content: space-between;display: flex;align-items: center;height: 60rpx;margin-top: 20rpx;">
<view class="">
拣货数量
<text style="font-weight: 600;color: #555555;">
{{item.crkNum}}
</text>
<text style="color: #555555;">
{{showvalue.materialUnits}}
</text>
</view>
<view
style="width: 110rpx;height: 50rpx;border-radius: 30rpx;display: flex;justify-content: center;align-items: center;border: 1rpx solid #C3C3C3;background-color: #f1f1f1;color: #888888;margin-top: -10rpx;">
{{ item.crkStatus_dictText}}
</view>
</view>
<view style="width: 100%;justify-content: space-between;display: flex;">
<view class="">
采购单价
<text style="font-weight: 600;color: #555555;">
{{Number(item.oldPrice).toFixed(2)}}
</text>
</view>
<view class="">
拣货人
<text style="color: #888888;font-weight: 600;">
{{item.createBy}}
</text>
</view>
</view>
<view style="width: 100%;justify-content: space-between;display: flex;margin-top: 10rpx;">
<view class="">
到货单价
<text style="font-weight: 600;color: #555555;">
{{Number(item.newPrice).toFixed(2)}}
</text>
</view>
<view class="">
{{item.createTime}}
</view>
</view>
</view>
<view
style="width: 100%;display: flex;justify-content: center;color: #C3C3C3;margin-top: 20rpx;">
<image v-if="statustory=='loading'"
style="width: 25rpx;height: 25rpx;margin-right: 10rpx;margin-top: 5rpx;margin-left: -10rpx;"
src="/static/index/warehouse/procurement/picking/loading.png" />
<text v-if="statustory=='loading'">上划加载更多</text>
<text v-if="statustory=='nomore'">已加载全部~</text>
<text v-if="statustory=='loadmore'">加载中~</text>
</view>
</scroll-view>
</view>
</view>
</view>
<!-- 分享的弹出层 -->
<view v-show="shareShow" class="popup-share" @click="shareShow=false">
<view class="popup-share-content" :style="{ opacity: deletedownisopacity ? 1 : 0 }" @click.stop>
<view class="share-other">
<view class="share-main">
<view class="">
<view class="share-weight">
{{ plsbuy[lefttarget]?.cgdNo }}
</view>
<view class="share-font">
供应商:{{ plsbuy[lefttarget]?.gysId_dictText }}
</view>
<view class="share-font">
采购时间:{{ plsbuy[lefttarget]?.qgDate }}
</view>
</view>
<view class="right-flex">
<view style="font-weight: 600;">
<text style="vertical-align: 2rpx;">
</text>
<text class="dollar-text">
{{plsbuy[lefttarget]?.totalPrice}}
</text>
</view>
<view class="caigou-font">
采购金额
</view>
</view>
</view>
<view class="share-bottom">
<view style="display: flex;align-items: center;">
<image class="share-bottom-img" src="/static/index/youngman.png"></image>
<view class="share-name">
{{ plsbuy[lefttarget]?.createBy_dictText }}
</view>
<view class="share-font">
采购人
</view>
</view>
<view class="blue-button" @click="clickshare">
分享
</view>
</view>
</view>
</view>
</view>
<tanchuang :show="badshow" font="确定要作废这个采购单吗" @back="badshow=false;" @right="zuofei"> </tanchuang>
<tanchuang :show="open==1" font="是否删除此图片" @back="open = 0" @right="del()"> </tanchuang>
<tanchuang :show="open==2" font="是否销账此物料?" @back="open = 0" @right="sctp(1)"> </tanchuang>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted, reactive, onBeforeUnmount, computed, nextTick, defineProps, onUnmounted } from 'vue';
import { editIzNew,queryPickingRecordList, queryJhzpList, addSxd, querySxdList, queryInvoicingList, getCgdMaterialTreeData, queryNuInfoByNuId, updateKfstatus, queryCgdList, queryCgdInfoList, queryWlInfoByWlId, voidedCgdMain, getCgrLis, getGysList, upload, editPrice, pickingInfo } from './api/lunpan.js'
import { onShow, onLoad, onHide, onPageScroll } from "@dcloudio/uni-app"
import calendar from '@/component/public/calendar.vue'
import superpicker from '@/component/public/superpicker.vue'
import nomessageimge from '@/pages/procurement/components/nomessage.vue';
import tanchuang from '@/pages/procurement/components/tanchuang.vue';
const open = ref(0);
const typechange = ref(0);
const stringjh = ref("")
const serverUrl = ref("");
const opengaijia = ref(false);
const guiling = ref(false);
const openjianhuo = ref(false);
const opendata = ref(false);
const gaijia = ref("");
// 改价
const dogaijia = () => {
// console.log("????",showvalue.value.id,gaijia.value)
editPrice({ id: showvalue.value.id, arrivalPrice: gaijia.value }).then((res) => {
// console.log("改价", showvalue.value.id,gaijia.value)
console.log("res", res)
if (res.code == 200) {
showvalue.value.arrivalPrice = gaijia.value;
// console.log("000",Number(gaijia.value),Number(showvalue.value.purchaseQuantity))
showvalue.value.totalPrice = Number(gaijia.value) * Number(showvalue.value.purchaseQuantity);
plsbuy.value[lefttarget.value].totalPrice = res.result.totalPrice
// showvalue.value.arrivalPrice
// plsbuy.value[lefttarget.value].totalPrice = gaijia.value
opengaijia.value = false;
}
})
}
// 计算器
function press(k : string) {
if (guiling.value) {
gaijia.value = '';
guiling.value = false
}
if (k === 'AC') {
gaijia.value = ''
return
}
// 小数点
if (k === '.') {
if (!gaijia.value.includes('.')) {
gaijia.value = gaijia.value === '' ? '0.' : gaijia.value + '.'
}
return
}
// 数字
if (/^\d$/.test(k)) {
// 有小数
if (gaijia.value.includes('.')) {
const [i, d] = gaijia.value.split('.')
if ((d || '').length < 2) gaijia.value += k
return
}
// 无小数,整数部分限制 4 位
let intPart = gaijia.value
if (intPart === '0') intPart = '' // 防止 01
if (intPart.length < 4) gaijia.value = intPart + k
}
}
// 模糊查询
const gysclick = (res : any) => {
console.log("///", res);
opengys.value = false;
}
const openjianhuoclick = () => {
if (showvalue.value.jianhuobtn == false) {
return
}
openjianhuo.value = true;
clickflag.value = true;
donghuaopo.value = false;
setTimeout(() => {
donghuaopo.value = true;
}, 100)
}
const opengaijiaclick = () => {
opengaijia.value = true;
guiling.value = true
gaijia.value = (showvalue.value.arrivalPrice ? showvalue.value.arrivalPrice : showvalue.value.procurementPrice).toString()
donghuaopo.value = false;
setTimeout(() => {
donghuaopo.value = true;
}, 100)
}
// 过滤后的结果,页面上渲染用这个
const filteredCgrList = ref([]);
const closefilteredCgrList = () => {
filteredCgrList.value = [];
cgrvalue.value = plzinfo.cgBy;
}
const clickfilteredCgrList = (item : any) => {
filteredCgrList.value = [];
plzinfo.cgBy = item.cgBy
cgrvalue.value = plzinfo.cgBy;
search()
}
// --- 模糊匹配 ---
function fuzzyMatch(text : unknown, q : string) {
const s = String(text ?? '').toLowerCase()
const ql = String(q ?? '').toLowerCase().trim()
if (!ql) return true
if (s.includes(ql)) return true
// subsequence 模糊字符序列
let i = 0
for (let j = 0; j < s.length && i < ql.length; j++) {
if (s[j] === ql[i]) i++
}
return i === ql.length
}
// --- 0.3 秒防抖专用变量 ---
let debounceTimer : number | null = null
/**
* changeArray - 防抖搜索0.3 秒后无再次输入才执行)
*/
function changeArray(res : any) {
if (!res.detail.value) {
plzinfo.cgBy = "";
filteredCgrList.value = [];
search()
return
}
const keyword = String(
typeof res === 'string' ? res : res?.detail?.value ?? ''
).trim()
// 清除上一次的定时器
if (debounceTimer) clearTimeout(debounceTimer)
// 重新等待 300ms
debounceTimer = setTimeout(() => {
if (!keyword) {
filteredCgrList.value = cgrlist.value.slice()
return
}
filteredCgrList.value = cgrlist.value.filter(item =>
fuzzyMatch(item?.cgBy, keyword)
)
if (!filteredCgrList.value.length) {
filteredCgrList.value.push({ cgBy: `暂无数据` })
}
}, 300)
}
// 过滤后的结果,页面上渲染用这个
const filteredCgrListsecond = ref([]);
const secondindex = ref(-1)
const closefilteredCgrListsecond = () => {
filteredCgrListsecond.value = [];
gysvalue.value = "";
plzinfo.suppliers = "";
search()
}
const clickfilteredCgrListsecond = (item : any, index : number) => {
filteredCgrListsecond.value = [];
plzinfo.suppliers = item.suppliers;
gysvalue.value = item.suppliersName;
secondindex.value = index;
search()
}
const cgrvalue = ref("");
const gysvalue = ref("");
function changeArraysecond(res : any) {
if (!res.detail.value) {
plzinfo.suppliers = "";
filteredCgrListsecond.value = [];
secondindex.value = -1;
gysvalue.value = "";
search()
return
}
const keyword = String(
typeof res === 'string' ? res : res?.detail?.value ?? ''
).trim()
// 清除上一次的定时器
if (debounceTimer) clearTimeout(debounceTimer)
// 重新等待 300ms
debounceTimer = setTimeout(() => {
if (!keyword) {
filteredCgrListsecond.value = gyslist.value.slice()
return
}
filteredCgrListsecond.value = gyslist.value.filter(item =>
fuzzyMatch(item?.suppliersName, keyword)
)
// filteredCgrListsecond.value = [...filteredCgrListsecond.value, ...filteredCgrListsecond.value, ...filteredCgrListsecond.value, ...filteredCgrList.value, ...filteredCgrList.value]
if (!filteredCgrListsecond.value.length) {
filteredCgrListsecond.value.push({ suppliersName: `暂无数据` })
}
}, 300)
}
onLoad(() => {
firstgetqueryCgdList();
serverUrl.value = uni.getStorageSync('serverUrl') + '/sys/common/static/';
getSelectList();
})
const opencgr = ref(false);
const opengys = ref(false);
const cgrlist = ref([]);
const gyslist = ref([]);
const getSelectList = () => {
getCgrLis().then((res : any) => {
cgrlist.value = res.result;
})
getGysList().then((res : any) => {
gyslist.value = res.result;
// console.log("isright", res)
})
}
const openselect = ref(false);
const searchValue = ref("");
const middletarget = ref(0);
const tagesstatues = ["待入库", "待完结", '已完结'];
const topbuttontarget = ref(-1);
const typestatues = ref(0)
const plzinfo = reactive({
pageNo: 1,
pageSize: 10,
canpull: true,
cgdParamInfo: "",
suppliers: "",
cgdType: "0,1",
startTime: "",
endTime: "",
cgBy: "",
nuId: uni.getStorageSync('nuId')
})
const mobanplzinfo = {
pageNo: 1,
pageSize: 10,
canpull: true,
cgdParamInfo: "",
suppliers: "",
cgdType: "0,1",
startTime: "",
endTime: "",
cgBy: "",
nuId: uni.getStorageSync('nuId')
}
// 销毁日历
const xiaohui = ref(true);
const chongzhi = () => {
xiaohui.value = false;
setTimeout(() => {
xiaohui.value = true;
}, 300)
Object.assign(plzinfo, mobanplzinfo);
cgrvalue.value = "";
gysvalue.value = ""
search()
}
type datetype = {
start : string,
end : string
}
const dateget = (res : datetype) => {
plzinfo.startTime = res.start;
plzinfo.endTime = res.end;
search()
}
const leftscrolltop = ref(0)
const plsbuy = ref([])
const alltotal = ref(0);
const nomessageshow = ref(false);
const firstgetqueryCgdList = () => {
queryCgdList(plzinfo).then((res : any) => {
plsbuy.value.push(...res.result.records)
alltotal.value = res.result.total
if (!res.result.total) {
// console.log("没数据了!!!")
nomessageshow.value = true;
}
// console.log("请购单数据呢???", res)
if (res.result.records.length) {
form.cgdId = plsbuy.value[0].id
queryInvo(0);
}
if (res.result.records.length < plzinfo.pageSize) {
plzinfo.canpull = false;
}
})
}
const setout = ref(true)
let times = null
const plsbuytolower = () => {
if (!setout.value) { return }
plzinfo.pageNo++;
getqueryCgdList()
setout.value = false
times = setTimeout(() => {
setout.value = true
}, 500)
}
//获得采购单列表
const getqueryCgdList = () => {
if (!plzinfo.canpull) return
queryCgdList(plzinfo).then((res : any) => {
plsbuy.value.push(...res.result.records)
alltotal.value = res.result.total
if (res.result.records.length < plzinfo.pageSize) {
plzinfo.canpull = false;
}
})
}
const lefttarget = ref(0);
const clickLeftMenu = (index : any,item:any) => {
let num = Math.ceil((index + 1))
leftscrolltop.value = (num - 2) * 186;
lefttarget.value = index;
form.cgdId = plsbuy.value[index].id
form.pageNo = 1
form.canpull = true;
// console.log("!!!!",form)
queryCgdInfoList(form).then(res => {
InvoicingList.value = []
// console.log("数据呢", res.result.records)
InvoicingList.value.push(...res.result.records);
if (form.pageNo) {
clickmiddle(0);
}
})
if (item.izNew == 'Y') {
item.izNew = 'N'
editIzNew({ id: item.id })
}
}
const showvalue = ref({
materialImg: "",
cgrvalue: "",
gysvalue: "",
wlName: "",
procurementPrice: "",
wlMaterialNo: "",
wlSpecificationModel: "",
purchaseQuantity: "",
wlUnits: "",
kcsl: "",
wlUpperLimit: "",
wlLowerLimit: "",
suppliersName: "",
jianhuobtn: false,
})
const goback = () => {
uni.navigateBack()
}
const form = reactive({
nuId: '',
pageNo: 1,
pageSize: -1,
categoryId: '',
typeId: '',
medicationId: '',
wlParamInfo: '',
cgdId: "",
isWaring: 0,
canpull: true
})
const mobanform = {
nuId: '',
pageNo: 1,
pageSize: 9,
categoryId: '',
typeId: '',
medicationId: '',
wlParamInfo: '',
cgdId: "",
isWaring: 0
}
const Invoiscroll = ref(0)
const tagsArray = [`待入库`, `挂账中`, `已入库`, `已销账`,]
const clickmiddle = (index : number) => {
// console.log(showvalue.value)
middletarget.value = index;
showvalue.value = InvoicingList.value[index];
showvalue.value.jianhuobtn = false;
Invoiscroll.value = (index - 2) * 205;
if (Number(showvalue.value.status) == 0 || (Number(showvalue.value.status) > 0 && Number(showvalue.value.wrksl) > 0)) {
showvalue.value.maxnum = (showvalue.value.rksl == 0 && showvalue.value.wrksl == 0 && showvalue.value.xzsl == 0) ? showvalue.value.purchaseQuantity : showvalue.value.wrksl
showvalue.value.num = showvalue.value.maxnum;
stringjh.value = toFixed4ByPadStart(showvalue.value.num);
showvalue.value.jianhuobtn = true;
}
Object.assign(form, mobanform)
lhjpageNo.value = 1;
lhjlarr.value = [];
lhjilu()
}
const InvoicingList = ref([])
const queryInvo = (index : number) => {
queryCgdInfoList(form).then(res => {
InvoicingList.value = res.result.records;
clickmiddle(index);
})
}
const lhjlarr = ref([])
const lhjpageNo = ref(1)
const statustory = ref('loading')
const lhjilu = () => {
let obj = {
cgdId: showvalue.value.cgdId,
wlId: showvalue.value.wlId,
pageNo: lhjpageNo.value,
pageSize: 10,
}
queryPickingRecordList(obj).then(res => {
lhjlarr.value.push(...res.result.records)
statustory.value = (res.result.total == lhjlarr.value.length || res.result.records.length == 0 ? 'nomore' : 'loadmore')
})
}
const lhjlfy = () => {
if (statustory.value == 'nomore') { return }
lhjpageNo.value++;
lhjilu()
}
const search = () => {
// if (!plzinfo.cgdParamInfo) return
plzinfo.pageNo = 1;
plsbuy.value = [];
queryCgdList(plzinfo).then((res : any) => {
plsbuy.value.push(...res.result.records)
alltotal.value = res.result.total
if (res.result.records.length) {
form.cgdId = plsbuy.value[0].id
queryInvo(0);
}
if (res.result.records.length < plzinfo.pageSize) {
plzinfo.canpull = false;
}
})
// middletarget.value = 0;
// form.wlParamInfo = searchValue.value;
// form.cgdId = plsbuy.value[lefttarget.value].id
// queryInvo();
}
const moreindex = ref(-1);
const zuofeiindex = ref(-1);
// const openmore = (index : number) => {
// zuofeiindex.value = index;
// if (plsbuy.value[index].cgdType == '9') {
// setTimeout(() => {
// uni.showToast({
// title: '该采购单已作废',
// icon: 'error', // 不显示小图标
// duration: 2000
// })
// }, 300)
// } else {
// moreindex.value = index;
// }
// }
const shareShow = ref(false);
const deletedownisopacity = ref(false)
const share = () => {
shareShow.value = true;
moreindex.value = -1;
deletedownisopacity.value = false;
setTimeout(() => {
deletedownisopacity.value = true
}, 100)
}
const clickshare = () => {
console.log("-----------------------> 点击分享按钮");
uni.share({
provider: "weixin",
scene: "WXSceneSession",
type: 0,
href: "https://www.baidu.com/",
title: "采购单分享",
summary: "采购单",
imageUrl: "https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni@2x.png",
success: function (res) {
uni.showToast({
title: res,
icon: 'none', // 'none' 表示不带图标
duration: 20000
})
console.log("-------------------success:",res);
},
fail: function (err) {
console.log("------------------- fail:",err);
uni.showToast({
title: err,
icon: 'none', // 'none' 表示不带图标
duration: 20000
})
}
});
}
const badshow = ref(false);
const donghuacs = ref(false)
const bebad = () => {
if (!Number(plsbuy.value[lefttarget.value]?.status) && plsbuy.value.length) {
badshow.value = true;
moreindex.value = -1;
donghuacs.value = false;
setTimeout(() => donghuacs.value = true, 50)
}
}
const zuofei = () => {
voidedCgdMain({ id: plsbuy.value[lefttarget.value].id }).then((res : any) => {
console.log("res", res)
if (res.success) {
uni.showToast({
title: res.message,
icon: 'success', // 'none' 表示不带图标
duration: 2000
})
badshow.value = false;
InvoicingList.value = [];
plsbuy.value = []
Object.assign(plzinfo, mobanplzinfo)
Object.assign(form, mobanform)
firstgetqueryCgdList();
} else {
uni.showToast({
title: res.message,
icon: 'none',
duration: 2000
})
badshow.value = false;
}
})
}
const donghuaopo = ref(false)
const suixingdanarr = ref([])
const jhdanarr = ref([])
const donghuastart = (index : number) => {
if (index == 1) {
sxdarr()
} else {
JhzpList()
}
topbuttontarget.value = index;
donghuaopo.value = false;
setTimeout(() => {
donghuaopo.value = true;
}, 100)
}
const Jhz = ref(1)
const JhzpList = () => {
let obj = {
cgdId: plsbuy.value[lefttarget.value].id,
}
queryJhzpList(obj).then(res => {
jhdanarr.value = res.result
})
}
const sxdarr = () => {
let obj = {
cgdId: plsbuy.value[lefttarget.value].id,
pageNo: 1,
pageSize: -1
}
querySxdList(obj).then(res => {
console.log(res.result.records)
suixingdanarr.value = res.result.records
})
}
const sxdupld = (e) => {
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
uni.uploadFile({
url: uni.getStorageSync('serverUrl') + '/sys/common/upload',
filePath: e,
name: 'file',
formData: {
biz: year + '/' + month + '/sxdPic'
},
header: {
'X-Access-Token': uni.getStorageSync('token')
},
success: res => {
const data = JSON.parse(res.data)
addSxd({ sxdPic: data.message, cgdId: plsbuy.value[lefttarget.value].id }).then(resd => {
if (resd.success) {
sxdarr()
}
})
},
fail: () => {
uni.showToast({ title: '上传失败', icon: 'none' })
}
})
}
// 上传
const albumlist = ref([])
const uplod = (type : number) => {
uni.chooseImage({
count: 1, //默认9
sizeType: ['compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['camera'], //从相册选择
success: (e) => {
let ar = JSON.stringify(e.tempFilePaths)
uni.compressImage({
src: JSON.parse(ar)[0],
quality: 60,
success: res => {
if (!type) {
albumlist.value.push(res.tempFilePath)
} else if (type == 1) {
sxdupld(res.tempFilePath)
console.log(res.tempFilePath)
}
}
})
}
});
}
// 预览
const previewImage = (v, i, arr, n) => {
if (n == 1) {
let u = []
arr.forEach(e => {
u.push(serverUrl.value + e.sxdPic)
})
uni.previewImage({
current: i,
urls: u,
showmenu: false,
longPressActions: {
itemList: [],
}
})
}
else if (n == 2) {
let u = []
arr.forEach(e => {
u.push(serverUrl.value + e.jhPic)
})
uni.previewImage({
current: i,
urls: u,
showmenu: false,
longPressActions: {
itemList: [],
}
})
}
else {
uni.previewImage({
current: i,
urls: arr,
showmenu: false,
longPressActions: {
itemList: [],
}
})
}
}
// 删除1个
const deldex = ref(-1)
const del = () => {
albumlist.value.splice(deldex.value, 1)
deldex.value = -1;
open.value = 0;
}
const clickflag = ref(false);
const clknum = (item : any) => {
// showvalue.value.maxnum = showvalue.value.purchaseQuantity : showvalue.value.wrksl
// showvalue.value.num
if (item == "AC") {
showvalue.value.num = 0;
stringjh.value = toFixed4ByPadStart(showvalue.value.num);
return
}
if (item == "AE") {
showvalue.value.num = Math.trunc(showvalue.value.num / 10)
stringjh.value = toFixed4ByPadStart(showvalue.value.num);
return
}
if (clickflag.value == true) {
showvalue.value.num = item;
clickflag.value = false;
stringjh.value = toFixed4ByPadStart(showvalue.value.num)
return
}
if (digitCountByString(showvalue.value.num) > 3) {
} else {
if (!showvalue.value.num) {
showvalue.value.num = item
} else {
showvalue.value.num = showvalue.value.num * 10 + item;
}
// cy()
stringjh.value = toFixed4ByPadStart(showvalue.value.num)
}
}
// 数字转化
const digitCountByString = (n) => {
const s = Math.abs(n).toString();
return s.length;
}
// 数字转化
const toFixed4ByPadStart = (n) => {
const intPart = Math.floor(Math.abs(n));
return String(intPart).padStart(4, '0');
}
// 加减
const InteroutId = ref(null)
const handleTouchStart = (e : number) => {
Interval(e)
}
const handleTouchEnd = () => {
clearInterval(InteroutId.value);
// 清除定时器
}
const Interval = (e : number) => {
InteroutId.value = setInterval(() => {
jjnum(e);
}, 120);
}
const jjnum = (e : number) => {
let m = showvalue.value.maxnum;
if (m <= showvalue.value.num && e == 1) { showvalue.value.num = m; return }
if (showvalue.value.num <= 1 && e == -1) { showvalue.value.num = 1; return }
showvalue.value.num += e;
stringjh.value = toFixed4ByPadStart(showvalue.value.num)
}
//
const fag = (e) => {
let str = '';
addupimg.value.forEach(item => {
str += item + ','
})
let obj = {
jhId: showvalue.value.id,
jhNum: showvalue.value.num,
jhType: e,
jhPic: str == '' ? null : str,
cgdId: showvalue.value.cgdId
}
pickingInfo(obj).then(res => {
console.log(res)
uni.showToast({
icon: 'none',
title: res.message ? res.message : '操作成功'
})
if (res.success) {
console.log(res.result.cgdInfo)
console.log(plsbuy.value[lefttarget.value])
albumlist.value = [];
addupimg.value = [];
openjianhuo.value = false;
open.value = 0;
form.cgdId = plsbuy.value[lefttarget.value].id;
plsbuy.value[lefttarget.value] = res.result.cgdInfo;
queryInvo(middletarget.value)
}
})
}
const addupimg = ref([])
const sctp = (e : number) => {
if (albumlist.value.length == 0) {
fag(e)
return
}
let now = new Date();
let year = now.getFullYear();
let month = now.getMonth() + 1;
albumlist.value.forEach(item => {
uni.uploadFile({
url: uni.getStorageSync('serverUrl') + '/sys/common/upload',
filePath: item,
name: 'file',
formData: {
biz: year + '/' + month + '/jhPic'
},
header: {
'X-Access-Token': uni.getStorageSync('token')
},
success: res => {
const data = JSON.parse(res.data)
addupimg.value.push(data.message)
if (addupimg.value.length == albumlist.value.length) {
fag(e)
}
},
fail: () => {
uni.showToast({ title: '上传失败', icon: 'none' })
}
})
})
}
const config = (e) => {
if (e == 1) {
open.value = 2;
} else {
sctp(0)
}
}
// 配置
const SEG_COUNT = 8; // 分段数量
const PADDING = 2; // 外层 paddingrpx
const W = 180, H = 70; // 宽高rpx
const RADIUS = 40; // 外层圆角rpx
const innerRadius = 36; // 内层圆角rpx
const intervalMs = 120; // 动画步进时间ms
const loopDuration = 1000; // 一个完整循环ms
// 颜色起止RGB 数组)
const from = [210, 210, 210]; // #ababab
const to = [50, 152, 255]; // #1083F8
// 状态:基准进度 0..1(整条条带整体移动)
const baseP = ref(0);
// 插值函数
function mix(a, b, p) { return Math.round(a + (b - a) * p); }
function rgbToHex(rgb) { return '#' + rgb.map(n => n.toString(16).padStart(2, '0')).join(''); }
// 计算每个 segment 的颜色:每段在整体进度上有一个相位偏移
const segColors = computed(() => {
const colors = [];
for (let i = 0; i < SEG_COUNT; i++) {
// 每段在 0..1 上的相对位置:把每段想成条带上的一点
// pos = baseP + i / SEG_COUNT模 1 后得到 0..1
let pos = (baseP.value + i / SEG_COUNT) % 1;
// 使用平滑函数(可选):这里用三角/贝塞尔会更柔和
// 但简单的线性即可产生中间过渡色:
const p = pos; // 0..1
const rgb = [
mix(from[0], to[0], p),
mix(from[1], to[1], p),
mix(from[2], to[2], p)
];
colors.push(rgbToHex(rgb));
}
return colors;
});
// 行内样式
const outerStyle = computed(() => ({
width: `${W}rpx`,
height: `${H}rpx`,
padding: `${PADDING}rpx`,
borderRadius: `${RADIUS}rpx`,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
backgroundColor: 'transparent',
position: 'relative'
}));
const segmentsWrapperStyle = computed(() => ({
position: 'absolute',
left: 0,
top: 0,
width: '100%',
height: '100%',
borderRadius: `${RADIUS}rpx`,
overflow: 'hidden',
display: 'flex',
flexDirection: 'row',
zIndex: 1
}));
const innerStyle = computed(() => ({
width: `calc(100% - ${PADDING * 2}rpx)`,
height: `calc(100% - ${PADDING * 2}rpx)`,
borderRadius: `${innerRadius}rpx`,
backgroundColor: '#ffffff',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
zIndex: 2
}));
const textStyle = computed(() => ({
color: segColors.value[0] || rgbToHex(from),
fontSize: '30rpx',
fontWeight: '500',
zIndex: 3
}));
// 启动定时器:推进 baseP从 0 线性到 1 再回到 0循环
let timer = null;
onMounted(() => {
const stepMs = intervalMs;
const stepsPerLoop = Math.max(1, Math.round(loopDuration / stepMs));
timer = setInterval(() => {
baseP.value += 1 / stepsPerLoop;
if (baseP.value >= 1) baseP.value -= 1; // 保持 0..1
}, stepMs);
});
onUnmounted(() => {
if (timer) clearInterval(timer);
});
const jiansuotarget = ref(false);
</script>
<style lang="less" scoped>
.contain {
background-color: rgb(239, 240, 244);
width: 100vw;
height: 100vh;
padding: 5vh 2vw 0 2vw;
display: flex;
.contain-left {
height: 95vh;
width: 30%;
position: relative;
z-index: 99;
.left-select-more {
position: absolute;
top: 7%;
left: 0;
width: 100%;
height: 83%;
background-color: #fff;
border-radius: 30rpx;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
z-index: 9999;
padding: 0 50rpx;
.more-bottom {
position: absolute;
bottom: 60rpx;
right: 50rpx;
display: flex;
.bottom-left {
padding: 0 50rpx;
height: 80rpx;
color: #888888;
background-color: #F8F8FA;
border-radius: 40rpx;
display: flex;
justify-content: center;
align-items: center;
font-size: 32rpx;
margin-right: 12rpx;
}
.bottom-right {
padding: 0 50rpx;
height: 80rpx;
color: #0385FA;
border: 1rpx solid #0385FA;
// background-color: #F8F8FA;
background: linear-gradient(to bottom, #E9F4FF, #CAE0F9);
border-radius: 40rpx;
display: flex;
justify-content: center;
align-items: center;
font-size: 30rpx;
}
}
.more-title {
margin-top: 55rpx;
font-size: 30rpx;
}
.more-time {
margin-top: 20rpx;
font-size: 30rpx;
}
.more-select {
margin: 30rpx 0;
font-size: 30rpx;
}
.more-time-select {
margin-top: 30rpx;
width: 100%;
height: 7vh;
display: flex;
align-items: center;
background-color: #F8F8FA;
border-radius: 30rpx;
position: relative;
.more-gray {
color: #BFBFBF;
font-size: 30rpx;
width: 200rpx;
display: flex;
justify-content: center;
align-items: center;
}
.more-black {
font-size: 28rpx;
width: 200rpx;
display: flex;
justify-content: center;
align-items: center;
}
.more-img {
width: 35rpx;
height: 35rpx;
}
.select-img {
position: absolute;
right: 40rpx;
top: 50%;
transform: translateY(-50%);
width: 25rpx;
height: 18rpx;
}
}
.more-statues-father {
width: 103%;
height: 7vh;
margin-top: 30rpx;
display: flex;
margin-left: -10rpx;
// background-color: green;
justify-content: space-between;
// align-items: center;
.more-statues-gray {
color: #888888;
font-size: 28rpx;
}
.more-statues-button {
width: 30%;
// margin-right: 2%;
margin: 0 1%;
height: 5.5vh;
border-radius: 40rpx;
font-size: 28rpx;
background-color: #fff;
border: 1rpx solid #D9DADC;
color: #555555;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.1);
}
.more-statues-button-target {
width: 30%;
margin: 0 1%;
height: 5.5vh;
border-radius: 40rpx;
font-size: 28rpx;
background-color: #DFF4FC;
border: 1rpx solid #0da6f8;
color: #1083F8;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.1);
}
}
}
.title-input-father {
height: 6vh;
width: 100%;
display: flex;
align-items: center;
position: relative;
.title-input {
width: 60%;
height: 5vh;
background-color: #E2E4E9;
font-size: 25rpx;
padding-left: 40rpx;
border-radius: 40rpx;
}
.title-input-button {
width: 20%;
margin-left: 2%;
height: 5vh;
border-radius: 40rpx;
font-size: 28rpx;
background-color: #fff;
border: 1rpx solid #D9DADC;
color: #555555;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.1);
}
}
.statues-father {
width: 100%;
height: 7vh;
display: flex;
align-items: center;
margin-top: -4rpx;
.statues-gray {
color: #888888;
font-size: 28rpx;
}
.statues-button {
width: 24%;
margin-left: 2%;
height: 4vh;
border-radius: 40rpx;
font-size: 28rpx;
background-color: #fff;
border: 1rpx solid #D9DADC;
color: #555555;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.1);
}
.statues-button-target {
width: 24%;
margin-left: 2%;
height: 4vh;
border-radius: 40rpx;
font-size: 28rpx;
background-color: #DFF4FC;
border: 1rpx solid #0da6f8;
color: #1083F8;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.1);
}
}
.left-menu-father {
// margin-top: 1.3vh;
width: 100%;
height: 80vh;
.left-menu-scroll {
height: 100%;
width: 100%;
.pls-card {
width: 100%;
height: 25.3vh;
border: #0f9fff 3rpx solid;
background-color: #fff;
border-radius: 40rpx;
margin-bottom: 2vh;
padding: 0 30rpx;
position: relative;
.pls-card-title {
height: 5.5vh;
width: 105%;
display: flex;
justify-content: space-between;
align-items: flex-end;
.title-left {
font-weight: 600;
font-size: 32rpx;
}
.title-right {
display: flex;
align-items: flex-end;
font-size: 30rpx;
position: relative;
.title-right-big {
font-weight: 600;
font-size: 40rpx;
margin-right: 35rpx;
color: #555555;
}
.title-right-img {
position: absolute;
right: -10rpx;
bottom: 6rpx;
width: 40rpx;
height: 40rpx;
}
}
}
.pls-card-middle {
width: 100%;
height: 11vh;
margin-top: 1vh;
// background-color: blue;
display: flex;
.pls-card-middle-one {
width: 33.3%;
height: 100%;
// background-color: yellow;
.middle-title {
width: 100%;
height: 2vh;
// background-color: #007CFF;
color: #888888;
text-align: center;
font-size: 25rpx;
overflow: hidden;
}
.middle-heng-father {
width: 100%;
height: 4vh;
position: relative;
.middle-heng {
width: 100%;
height: 0.8vh;
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
background-color: #EEEEEE;
}
.middle-ball {
width: 30rpx;
height: 30rpx;
background-color: #EEEEEE;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
}
}
.end-font {
width: 100%;
height: 6vh;
text-align: center;
color: #666666;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
.pls-card-end {
width: 100%;
height: 7vh;
display: flex;
justify-content: space-between;
position: relative;
.end-left {
height: 100%;
display: flex;
align-items: center;
.end-left-img {
width: 30rpx;
height: 30rpx;
}
.end-left-font {
margin-top: 3rpx;
width: 400rpx;
// background-color: #007CFF;
// font-size: 26rpx;
color: #666666;
margin-left: 10rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.tag-fail {
width: 120rpx;
height: 50rpx;
border-radius: 30rpx;
display: flex;
align-items: center;
justify-content: center;
background-color: #FDEBEC;
color: #FF5757;
position: absolute;
right: -5rpx;
bottom: 20rpx;
}
.tag-success {
width: 120rpx;
height: 50rpx;
border-radius: 30rpx;
display: flex;
align-items: center;
justify-content: center;
background-color: #ECF6FF;
color: #1083F8;
position: absolute;
right: -5rpx;
bottom: 20rpx;
}
}
}
}
}
}
.contain-right {
z-index: 1;
height: 95vh;
width: 70%;
margin-left: 2%;
overflow: hidden;
.contain-right-title {
width: 100%;
height: 80rpx;
display: flex;
justify-content: flex-end;
position: relative;
.contain-right-button {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
padding: 0 35rpx;
border-radius: 40rpx;
border: 1rpx solid #555555;
border-color: #D9DADC;
box-shadow: 0 1rpx 3rpx #D9DADC;
margin-left: 20rpx;
.buttont-img {
width: 40rpx;
height: 40rpx;
margin-right: 5rpx;
// margin-top: 4rpx;
}
.button-font {
font-size: 30rpx;
color: #555555;
}
}
.contain-right-button-bad {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
padding: 0 35rpx;
border-radius: 40rpx;
border: 1rpx solid #555555;
margin-left: 20rpx;
background-color: #f7f7f7;
color: #999999;
.buttont-img {
width: 40rpx;
height: 40rpx;
margin-right: 5rpx;
// margin-top: 4rpx;
}
.button-font {
font-size: 30rpx;
// color: #555555;
}
}
.contain-right-button-target {
background: linear-gradient(-45deg, rgba(223, 244, 252, 1), rgba(204, 228, 249, 0.43));
display: flex;
justify-content: center;
align-items: center;
height: 100%;
padding: 0 35rpx;
color: #1083F8;
border-radius: 40rpx;
border: 1rpx solid #555555;
border-color: #1083F8;
box-shadow: 0 1rpx 3rpx #D9DADC;
margin-left: 20rpx;
.buttont-img {
width: 40rpx;
height: 40rpx;
margin-right: 5rpx;
// margin-top: 4rpx;
}
.button-font {
font-size: 30rpx;
// color: #555555;
}
}
}
.contain-right-middle {
width: 100%;
height: 460rpx;
margin-top: 20rpx;
.middle-Y {
width: 100%;
height: 100%;
.middle-Y-father {
display: flex;
// flex-wrap: wrap;
// width: 100%;
padding-left: 20rpx;
.middle-one {
min-width: 325rpx;
height: 450rpx;
background-color: #F9F9F9;
border-radius: 30rpx;
margin-left: 20rpx;
margin-bottom: 30rpx;
display: flex;
flex-direction: column;
align-items: center;
position: relative;
// justify-content: space-around;
.middle-img {
margin-top: 10rpx;
width: 180rpx;
height: 180rpx;
}
.middle-right {
width: 250rpx;
.right-title {
width: 100%;
white-space: nowrap;
/* 不换行 */
overflow: hidden;
/* 超出隐藏 */
text-overflow: ellipsis;
/* 显示省略号 */
display: block;
font-weight: 600;
font-size: 30rpx;
margin-bottom: 15rpx;
text-align: center;
}
.right-middle {
// margin-bottom: 7rpx;
height: 15rpx;
}
}
}
}
}
}
}
}
.white-zhezhao {
position: fixed;
height: 100%;
background-color: #fff;
width: 68%;
top: 0;
left: 32%;
}
.wuliao-title {
margin-top: 40rpx;
margin-left: 30rpx;
display: flex;
flex-direction: column;
align-items: center;
font-size: 32rpx;
font-weight: 600;
width: 200rpx;
.wuliao-heng {
background-color: #1083F8;
width: 40rpx;
height: 5rpx;
border-radius: 5rpx;
margin-top: 10rpx;
}
}
.wuliao-title-no {
margin-top: 40rpx;
margin-left: 30rpx;
display: flex;
flex-direction: column;
align-items: center;
font-size: 32rpx;
font-weight: 600;
width: 200rpx;
color: #888888;
.wuliao-heng {
display: none;
}
}
.right-bottom {
width: 100%;
height: 600rpx;
display: flex;
.right-bottom-left {
height: 100%;
width: 30%;
padding-left: 30rpx;
padding-top: 30rpx;
.left-img {
width: 250rpx;
height: 250rpx;
margin-left: 50rpx;
margin-top: 2vw;
}
.left-tags {
width: 100%;
display: flex;
flex-wrap: wrap;
}
.tags-one {
min-width: 130rpx;
height: 60rpx;
display: flex;
justify-content: center;
align-items: center;
border-radius: 30rpx;
border: 1rpx solid #D2D2D2;
margin-left: 20rpx;
margin-top: 10rpx;
font-size: 23rpx;
color: #555555;
padding: 0 0.5vw;
}
}
.right-bottom-right {
height: 100%;
width: 70%;
.bottom-right-title {
width: 100%;
height: 100rpx;
display: flex;
justify-content: space-between;
align-items: center;
// background-color: red;
.title-left {
font-weight: 600;
font-size: 35rpx;
}
.title-right {
font-weight: 600;
font-size: 35rpx;
position: relative;
margin-right: 20rpx;
}
}
.bottom-right-middle {
width: 100%;
.threeone {
width: 33%;
}
.middle-onecard {
width: 100%;
height: 120rpx;
display: flex;
position: relative;
.gray-text {
color: #999999;
margin-bottom: 3rpx;
font-size: 25rpx;
}
.right-text {
font-size: 32rpx;
color: #555555;
}
}
}
}
}
.gray-heng {
position: absolute;
left: 0;
bottom: 20%;
background-color: #eff1f3;
height: 0.5rpx;
width: 80%;
}
.title-input-img {
width: 50rpx;
height: 50rpx;
position: absolute;
right: 220rpx;
top: 50%;
transform: translateY(-50%);
}
.more-father {
position: absolute;
right: 60rpx;
top: 15rpx;
width: 165rpx;
height: 150rpx;
background-color: #fff;
z-index: 102;
border-radius: 35rpx;
box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.15);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 20rpx 0;
.more-one {
width: 100%;
height: 50%;
display: flex;
justify-content: center;
align-items: center;
}
}
.mengban {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
z-index: 100;
}
.popup-share {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: flex;
justify-content: center;
align-items: center;
backdrop-filter: blur(1rpx);
background-color: rgba(236, 237, 241, 0.4);
/* 添加毛玻璃效果 */
z-index: 999;
.share-other {
z-index: 1;
width: 100%;
height: 100%;
padding: 50rpx;
position: relative;
.share-main {
display: flex;
justify-content: space-between;
.share-weight {
font-weight: 600;
font-size: 30rpx;
}
.share-font {
color: #666666;
font-size: 30rpx;
margin-top: 20rpx;
}
}
}
.popup-share-content {
position: absolute;
display: flex;
flex-direction: column;
width: 1000rpx;
height: 500rpx;
background-color: #fff;
border-radius: 30rpx;
transition: opacity 0.4s ease;
.popup-share-title {
margin: 30rpx 30rpx;
font-size: 40rpx;
position: relative;
.popup-share-img {
position: absolute;
top: 0;
right: 0;
width: 200rpx;
height: 200rpx;
}
}
.popup-share-upcontent {
margin: 0 30rpx;
display: flex;
justify-content: space-between;
.popup-share-font {
font-size: 35rpx;
color: gray;
}
}
.popup-share-gray {
background-color: #D3D3D3;
width: calc(100% - 60rpx);
height: 2rpx;
margin: 110rpx 30rpx 0 30rpx;
}
.popup-share-downcontent {
display: flex;
justify-content: space-between;
align-items: center;
height: 100%;
margin: 0 30rpx;
.popup-downcontent-img {
width: 70rpx;
height: 70rpx;
}
.popup-downcontent-font {
font-size: 27rpx;
margin-left: 20rpx;
}
.popup-share-downcontent-left {
display: flex;
align-items: center;
}
.popup-share-downcontent-button {
background: linear-gradient(to right bottom, #00c9ff, #0076ff);
color: #fff;
display: flex;
justify-content: center;
align-items: center;
padding: 15rpx 30rpx;
border-radius: 20rpx;
font-size: 32rpx;
}
}
}
.share-bottom {
position: absolute;
width: 100%;
padding: 0 50rpx;
height: 120rpx;
bottom: 70rpx;
left: 0;
display: flex;
justify-content: space-between;
align-items: center;
.share-bottom-img {
width: 150rpx;
height: 140rpx;
}
.share-name {
margin: 0 20rpx;
font-size: 35rpx;
color: #555555;
font-weight: 600;
}
.share-font {
color: #555555;
margin-top: 10rpx;
font-size: 24rpx;
}
}
.blue-button {
margin-top: 60rpx;
width: 150rpx;
height: 70rpx;
border-radius: 40rpx;
display: flex;
justify-content: center;
align-items: center;
color: #007CFF;
font-size: 30rpx;
background: linear-gradient(to bottom, #e7f4ff, #c5e5ff);
border: 2rpx solid #9AD1FF;
}
}
/* 容器默认隐藏,透明度为 0不接受点击 */
.neuro-wrapper {
position: fixed;
inset: 0;
display: flex;
justify-content: center;
align-items: center;
z-index: 999;
opacity: 0;
pointer-events: none;
transition: opacity 0.3s ease;
}
/* 显示时透明度过渡到 1可接受点击 */
.neuro-wrapper.is-active {
opacity: 1;
pointer-events: auto;
}
/* 遮罩层,半透明黑色 */
.neuro-mask {
position: absolute;
inset: 0;
background-color: rgba(0, 0, 0, 0.3);
}
/* 拟态框 固定尺寸 + 阴影样式 + 相对定位于 wrapper */
.neuro-box {
position: relative;
width: 600rpx;
height: 450rpx;
border-radius: 30rpx;
background-color: #fff;
display: flex;
flex-direction: column;
align-items: center;
z-index: 1;
padding: 0 10%;
.button {
width: 47%;
background-color: #ddf0ff;
display: flex;
justify-content: center;
align-items: center;
// color: #fff;
color: #007CFF;
border: 1rpx solid #007CFF;
font-size: 25rpx;
border-radius: 30rpx;
}
.card-font {
margin-top: 70rpx;
width: 600rpx;
justify-content: center;
display: flex;
}
.button-white {
width: 47%;
border: 2rpx solid #c3cacd;
background: linear-gradient(to bottom, #f3f3f5, #dee4e9);
display: flex;
justify-content: center;
align-items: center;
font-size: 25rpx;
border-radius: 30rpx;
}
.button-father {
position: absolute;
bottom: 60rpx;
left: 50%;
transform: translateX(-50%);
width: 100%;
height: 70rpx;
display: flex;
justify-content: space-between;
padding: 0 50rpx;
}
.title {
margin-top: 80rpx;
font-weight: 600;
font-size: 35rpx;
}
}
.filter {
position: absolute;
right: -30rpx;
top: 20rpx;
width: 100rpx;
height: 50rpx;
// background-color: #0076ff;
display: flex;
justify-content: center;
// align-items: center;
.filter-img {
width: 35rpx;
height: 35rpx;
margin-left: 5rpx;
// margin-top: 4rpx;
}
.filter-font {
margin-top: 5rpx;
font-size: 27rpx;
color: #555555;
}
.filter-font-target {
margin-top: 5rpx;
font-size: 27rpx;
color: #1083F8;
}
}
.left-top-tags {
position: absolute;
top: -25rpx;
left: 0rpx;
}
.juzhong {
justify-content: space-between;
align-items: center;
height: 40rpx;
font-size: 25rpx;
display: flex;
}
.up-tags {
position: absolute;
right: 15rpx;
top: 15rpx;
width: 110rpx;
height: 50rpx;
border-radius: 40rpx;
background-color: #fff;
color: #555555;
border: 1rpx solid #C3C3C3;
font-size: 24rpx;
z-index: 2;
display: flex;
justify-content: center;
align-items: center;
}
.up-tags-target {
position: absolute;
right: 15rpx;
top: 15rpx;
width: 110rpx;
height: 50rpx;
border-radius: 40rpx;
background-color: #fff;
color: #1083F8;
border: 1rpx solid #A4D5FE;
font-size: 24rpx;
z-index: 2;
display: flex;
justify-content: center;
align-items: center;
}
.gaijiafather {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 50%;
height: 55%;
border-radius: 30rpx;
background-color: #fff;
transition: all 0.3s;
z-index: 999;
box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.2);
padding: 0 60rpx;
}
.jianhuofather {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 50%;
height: 95%;
border-radius: 30rpx;
background-color: #fff;
transition: all 0.3s;
z-index: 999;
box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.2);
padding: 0 60rpx;
.jianhuobutton {
position: absolute;
bottom: 30rpx;
right: 50rpx;
display: flex;
}
}
.photowall {
position: fixed;
top: 54%;
left: 50%;
transform: translate(-50%, -50%);
width: 70%;
height: 83%;
border-radius: 30rpx;
background-color: #fff;
transition: all 0.3s;
z-index: 999;
box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.2);
padding: 0 90rpx;
.photowall-title {
margin-top: 50rpx;
display: flex;
justify-content: space-between;
width: 100%;
.photowall-name {
font-size: 38rpx;
// font-weight: 600;
}
.photowall-left {
color: #888888;
}
.photowall-right {
font-size: 30rpx;
font-weight: 600;
}
}
.photowall-other {
width: 110%;
height: 67vh;
display: flex;
margin-top: 20rpx;
.photowall-other-one {
width: 28.5%;
height: 430rpx;
margin-right: 3vw;
margin-bottom: 3%;
border-radius: 30rpx;
display: inline-block;
position: relative;
// background-color: red;
}
}
}
.gray-button {
font-size: 50rpx;
background-color: #f9f9f9;
box-shadow: 2px 3px 6px rgba(0, 0, 0, 0.12);
border-radius: 20rpx;
width: 100rpx;
height: 100rpx;
// border: 1rpx solid #CBCFD0;
display: flex;
justify-content: center;
align-items: center;
margin-right: 10rpx;
}
.gray-button:active {
background: linear-gradient(to top, #00C9FF, #0076FF);
color: #fff;
font-size: 44rpx;
font-weight: 700;
border: 1rpx solid #00C9FF;
}
.gray-button-jianpan:active {
background: linear-gradient(to top, #00C9FF, #0076FF);
color: #fff;
font-size: 44rpx;
font-weight: 700;
border: 1rpx solid #00C9FF;
}
.gray-button-jianpan {
font-size: 40rpx;
font-weight: 600;
background-color: #f9f9f9;
border-radius: 35rpx;
box-shadow: 2px 3px 6px rgba(0, 0, 0, 0.12);
color: #555555;
width: 100rpx;
height: 100rpx;
border: 1rpx solid transparent;
display: flex;
justify-content: center;
align-items: center;
margin-right: 30rpx;
margin-bottom: 20rpx;
transition: .1s;
-webkit-transform-style: preserve-3d;
-webkit-overflow-scrolling: touch;
}
.gray-input {
font-size: 50rpx;
font-weight: 600;
background-color: #f9f9f9;
border-radius: 20rpx;
box-shadow: 2px 3px 6px rgba(0, 0, 0, 0.12);
padding: 0 30rpx;
letter-spacing: 10rpx;
height: 100rpx;
border: 1rpx solid #CBCFD0;
display: flex;
justify-content: flex-end;
align-items: center;
padding-left: 40rpx;
margin-right: 10rpx;
}
.jianhuo-jianpan {
position: absolute;
right: -10rpx;
bottom: 12%;
}
.text-anim {
animation: colorScale 2s linear infinite;
transform-origin: left bottom;
animation-iteration-count: 1;
color: #1083F8;
}
@keyframes colorScale {
0% {
color: #1083F8;
transform: scale(calc(1));
}
50% {
color: #333333;
transform: scale(calc(3));
}
100% {
color: #1083F8;
transform: scale(calc(1));
}
}
.calendar-father {
position: fixed;
top: 550rpx;
left: 60rpx;
width: 700rpx;
height: 600rpx;
background-color: #fff;
z-index: 999;
}
.input-next {
position: fixed;
bottom: 660rpx;
left: 40rpx;
width: 610rpx;
// height: 300rpx;
border-radius: 30rpx;
z-index: 102;
background-color: #fff;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
padding: 40rpx 30rpx;
.next-father {
color: #999;
margin: 10rpx;
font-size: 28rpx;
}
}
.nomessage {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 200rpx;
font-size: 34rpx;
color: #999;
}
.moban-photo {
width: 40%;
height: 150rpx;
margin-right: 4%;
margin-top: 3%;
background-color: #F9F9F9;
display: flex;
justify-content: center;
align-items: center;
border-radius: 20rpx;
border-radius: 0.6vw;
overflow: hidden;
position: relative;
}
.moban-photo-special {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background-color: #fafdff;
border: 1rpx solid #c4ebff;
border-radius: 20rpx;
}
.jianhuobutton-gray {
background-color: #f8f8f8;
color: #555555;
display: flex;
align-items: center;
justify-content: center;
color: #555555;
width: 180rpx;
height: 70rpx;
border-radius: 40rpx;
box-shadow: 0 4rpx 6rpx rgba(0, 0, 0, 0.1);
margin-left: 20rpx;
}
.jianhuobutton-gray-bad {
background-color: #f8f8f8;
color: #999;
display: flex;
align-items: center;
justify-content: center;
// color: #555555;
width: 180rpx;
height: 70rpx;
border-radius: 40rpx;
box-shadow: 0 4rpx 6rpx rgba(0, 0, 0, 0.1);
margin-left: 20rpx;
}
.bottom-left:active,
.title-input-button:active,
.donghua-do:active,
.contain-right-button:active,
.jianhuobutton-gray:active,
{
color: #1083F8;
background: linear-gradient(-45deg, rgba(223, 244, 252, 1), rgba(204, 228, 249, 0.43));
border: 1px solid #1083F8;
transition: .4s;
-webkit-transform-style: preserve-3d;
-webkit-overflow-scrolling: touch;
}
</style>