Browse Source

新增盘点详情

myd
qb 1 year ago
parent
commit
2c8647deb9
  1. 38
      api/user.js
  2. 15
      compoment/PopUp/PopUp.vue
  3. 1
      compoment/saomiao2.vue
  4. 676
      pagesTask/pages/checkTaskList - 副本/checkTaskList.vue
  5. 32
      pagesTask/pages/checkTaskList/checkTaskList.vue
  6. 1264
      pagesTask/pages/dynamicCheckDetails/dynamicCheckDetails.vue
  7. 1338
      unpackage/dist/dev/app-plus/app-service.js
  8. 8
      unpackage/dist/dev/app-plus/app.css

38
api/user.js

@ -1524,6 +1524,19 @@ export function getWarehouseTask(data) {
});
}
/**
* 查询盘点数据详情
* @param {Object} data
*/
export function getWarehouseTaskgetTaskConInfo(data) {
return request({
url: `logpm-warehouse/api/WarehouseTask/getTaskConInfo`,
method: "get",
data
});
}
/**
* 库位盘点库位详情信息
* @param {Object} data
@ -1675,6 +1688,31 @@ export function postqueryupdateQuestDetailAllocation(data) {
});
}
/**
* 盘点 -- 查看库位信息
* @param {Object} data
*/
export function postWarehouseTaskQuestDetailAllocation(data) {
return request({
url: `logpm-warehouse/api/WarehouseTask/questScanAllcation`,
method: "get",
data
});
}
/**
* 盘点 -- 提交盘点
* @param {Object} data
*/
export function postWarehouseTaskAddDataInfo(data) {
return request({
url: `logpm-warehouse/api/WarehouseTask/addDataInfo`,
method: "post",
data
});
}
/**
* 合同盘点详情信息
* @param {Object} data

15
compoment/PopUp/PopUp.vue

@ -1,6 +1,6 @@
<template>
<!-- 弹窗组件 -->
<view class="popUpMask" @click="showPopUp = false" v-if="showPopUp">
<view class="popUpMask" @click="details.close" v-if="showPopUp">
<view class="container" @click.stop :style="{height:details.height}">
<scroll-view class="scoolv" scroll-y="true">
<view class="title">
@ -40,7 +40,7 @@
/**
* 内容高度
*/
height: '60%',
height: 'auto',
/**
* 标题
*/
@ -91,12 +91,11 @@
display: flex;
align-items: center;
justify-content: center;
}
.container {
width: 90%;
height: 60%;
// height: 60%;
border-radius: 10upx;
background: #fff;
@ -106,18 +105,20 @@
}
.scoolv {
height: 80%;
max-height: 40vh;
padding: 20upx;
padding-bottom: 0upx;
box-sizing: border-box;
}
.buttonContainer {
height: 20%;
height: 12vh;
flex: 1;
display: flex;
justify-content: space-around;
justify-content: space-evenly;
align-items: center;
zoom: 0.9;
// padding: 20upx;
>view {
padding: 15upx 50upx;

1
compoment/saomiao2.vue

@ -78,7 +78,6 @@
// details.intentFilter.addAction('com.android.server.scannerservice.broadcast') // 广
details.receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: function (context, intent) {
console.log('111 :>> ', 111);
console.log("intent", intent)
plus.android.importClass(intent);
// Pinia广

676
pagesTask/pages/checkTaskList - 副本/checkTaskList.vue

@ -0,0 +1,676 @@
<template>
<view>
<!-- 顶部导航栏 -->
<u-navbar :title="title" placeholder :autoBack="true" leftIconSize='35' bgColor='#d3832a' leftIconColor='#ffffff'
titleStyle='color:#ffffff'></u-navbar>
</view>
<!-- 主体内容 -->
<view class="main">
<!-- 随机盘点 -->
<template v-if="pageType === 1">
<!-- 表格 -->
<view class="table">
<!-- 表格头部 -->
<view class="thead">
</view>
<!-- 表格主体 -->
<view class="tbody">
</view>
</view>
</template>
<!-- 按库位盘点 -->
<template v-if="pageType === 2">
<!-- 顶部 -->
<view class="main_top">
<input type="text" v-model="details.scancode" placeholder="请扫描或输入库位码" class="main_top_search" />
<view class="button" @click="scandata">搜索</view>
</view>
<!-- 表格 -->
<view class="table" v-for="item in renderList">
<view class="tpbx" @click="goStorageDetails(item)">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>库位码{{item.positionCode}}</view>
</view>
<view class="tpbx">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>总件数{{item.total}}</view>
</view>
<view class="tpbx">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>盘点件数{{item.unTotal}}</view>
</view>
</view>
</template>
<!-- 按合同号盘点 -->
<template v-if="pageType === 3">
<!-- 顶部 -->
<view class="main_top">
<!-- <view class="select">
<view class="dropdown-btn" @tap="toggleDropdown">
{{ selectedValue.label }}
</view>
<view v-show="isDropdownOpen" class="dropdown-list">
<view v-for="option in options" :key="option.value" @tap="selectOption(option)">
{{ option.label }}
</view>
</view>
</view> -->
<view class="uni-list-cell-db">
<picker @change="bindPickerChange" :value="optionsChooseIndex" :range="options.map(val => val.label)">
<view class="uni-input">{{options.map(val => val.label)[optionsChooseIndex]}}
</view>
</picker>
</view>
<input @input="handleInputChange" type="text" v-model="details.scancode"
:placeholder="selectedValue.placeholder" class="main_top_search htselect" />
<view class="button" @click="ContractSearch">搜索</view>
</view>
<!-- 表格 -->
<view class="table" v-for="item in renderList">
<view class="tpbx" @click="contract(item)">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>合同号{{item.orderCode}}</view>
</view>
<view class="tpbx">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>总件数{{item.total}}</view>
</view>
<view class="tpbx">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>在库件数{{item.zktotal}}</view>
</view>
<view class="tpbx">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>盘点件数{{item.unTotal}}</view>
</view>
<view class="tpbx">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>是否库存品: {{ item.isInventory === 0 ? "不是" : "是" }}</view>
</view>
<view class="tpbx">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>是否零担: {{ item.isZero === 0 ? "不是" : "是" }}</view>
</view>
</view>
</template>
<!-- 按托盘盘点 -->
<template v-if="pageType === 4">
<!-- 顶部 -->
<view class="main_top">
<input type="text" v-model="details.scancode" placeholder="请扫描或输入托盘码" class="main_top_search" />
<view class="button" @click="searchTary">搜索</view>
</view>
<!-- 表格 -->
<view class="table" v-for="item in renderList">
<view class="tpbx" @click="goTrayDetails(item)">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>托盘码{{item.trayCode}}</view>
</view>
<view class="tpbx">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>总件数{{item.total}}</view>
</view>
<view class="tpbx">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>货物类型{{item.goodsType}}</view>
</view>
<view class="tpbx">
<image src="/pagesHome/static/kuweiicon.png"></image>
<view>盘点件数{{item.unTotal}}</view>
</view>
</view>
</template>
<view v-show="isEnd" class="footer-end">
到底啦
</view>
</view>
<!-- #ifdef APP -->
<saomiao2 :ishidestop="scanState !== 0"></saomiao2>
<!-- #endif -->
</template>
<script setup lang="ts">
import {
onShow,
onLoad,
onHide,
onReachBottom,
onPullDownRefresh
} from '@dcloudio/uni-app'
import { ref, reactive, toRefs } from "vue";
import {
getWarehouseTaskAllocationList,
getWarehouseTrayList,
getWarehouseTaskAllocationDetailByStrip,
postqueryContractList,
pgetContractList
} from '@/api/user.js';
import utils from '@/utils/utils.js';
import useSystemSettingsStore from '@/store/useSystemSettingsStore';
import { storeToRefs } from 'pinia';
const { scanState } = storeToRefs(useSystemSettingsStore())
const details = reactive({
//
title: '',
// 1: ; 2: ; 3: ; 4: ;
pageType: 1,
//
scancode: '',
searchText: {
storageText: '',
taryText: ''
},
//
marketName: [],
id: '',
isscan: true,
page: {
//
current: 1,
//
size: 10,
},
//
renderList: [],
//
isEnd: false,
warehouseId: '',
questNum: '',
//
})
const placeholder = ref('请输入')
const isDropdownOpen = ref(false) //
const selectedValue = ref({
value: '1', label: '定制品', placeholder: '请输入或扫描包条码'
}) //
//
const optionsChooseIndex = ref(0)
const options = ref([ //
{ value: '1', label: '定制品', placeholder: '请输入或扫描包条码' },
{ value: '2', label: '库存品', placeholder: '请输入物料编码' },
])
const toggleDropdown = () => {
isDropdownOpen.value = !isDropdownOpen.value; //
}
const selectOption = (option) => {
selectedValue.value = option; //
if (option.value == 1) {//
placeholder.value = '请输入合同号'
} else {
placeholder.value = '请输入物料编码'
}
console.log(option);
isDropdownOpen.value = false; //
}
// input
const infodata = ref({
})
//
onLoad((info) => {
console.log('info :>> ', info);
const { pageType, data } = JSON.parse(info.data)
details.title = data.title
details.pageType = pageType
details.id = data.id
details.warehouseId = data.warehouseId
details.marketName = data.marketName
details.questNum = data.questNum
if (details.pageType === 3) {
infodata.value = data
}
})
//
onShow(() => {
// #ifdef APP
uni.$off('scancodedate')
uni.$on('scancodedate', function (code) {
if (code) {
console.log('code :>> ', code);
details.scancode = code
scandata()
}
})
// #endif
// ,
if (details.pageType === 1) details.isscan = false
//
initPage()
if (details.pageType === 1) return
else if (details.pageType === 2) return utils.ttsspke('请扫描库位码')
else if (details.pageType === 3) return utils.ttsspke('请扫描包条码或输入订单自编码')
else if (details.pageType === 4) return utils.ttsspke('请扫描托盘')
})
//
// onHide(() => {
// uni.$off('scancodedate')
// })
//
let antiShake : any = null
//
onReachBottom(() => {
// ,
if (details.isEnd) return uni.showToast({
title: '数据加载完毕',
icon: 'success'
})
if (antiShake) {
uni.hideLoading()
//
clearTimeout(antiShake)
return antiShake = null
}
uni.showLoading({
mask: true,
title: '数据加载中'
})
antiShake = setTimeout(async () => {
// // +1
// details.page.current += 1
// //
// await initPage()
uni.hideLoading()
}, 500)
})
//
onPullDownRefresh(() => {
console.log('111 :>> ', 111);
//
details.page.current = 1
//
details.isEnd = false
//
details.renderList = []
const timer = setTimeout(async () => {
const res = await initPage()
uni.stopPullDownRefresh()
clearTimeout(timer)
}, 500)
})
//
async function initPage() {
try {
let res : any = null
uni.showLoading({
mask: true,
title: '数据加载中'
})
if (details.pageType === 1) return
if (details.pageType === 2) {
// id
// type: type, 1, 2
res = await getWarehouseTaskAllocationList({
...details.page,
questId: details.id,
questNum: details.questNum
})
}
else if (details.pageType === 3) {
res = await pgetContractList({
...details.page,
questId: infodata.value.id,
warehouseId: infodata.value.warehouseId,
questNum: details.questNum
})
}
else if (details.pageType === 4) {
res = await getTaryList()
}
console.log('res :>> ', res);
const { code, data } = res
if (code === 200 && data) {
if (details.pageType === 3) {
details.renderList = res.data.records
} else details.renderList = data.list || []
console.log('data.list :>> ', data.list);
if (data.length < details.page.size) details.isEnd = true
} else if (code === 3001) {
const msg = data.audio
utils.ttsspke(msg)
uni.showToast({
icon: 'error',
title: msg
})
}
return res
} catch (error) {
//TODO handle the exception
console.log('error :>> ', error);
} finally {
uni.hideLoading()
}
}
async function getTaryList() {
console.log('details.id :>> ', details.id);
const submitData : any = {
...details.page,
questId: details.id,
questNum: details.questNum
}
submitData.trayCode = details.scancode
console.log('submitData :>> ', submitData);
return getWarehouseTrayList(submitData)
}
//
async function scandata() {
try {
//
if (!details.isscan) return
console.log('222 :>> ', 222);
uni.showLoading({
mask: true,
title: '数据请求中'
})
//
if (details.pageType === 2) {
getWarehouseTaskAllocationDetailByStrip({
questId: details.id,
allocationId: details.scancode,
questNum: details.questNum
}).then(res => {
console.log(res);
if (res.code != 403) {
console.log('跳转')
uni.navigateTo({
url: `/pagesTask/pages/storageLocationCheckDetails/storageLocationCheckDetails?allocationId=${details.scancode}&questId=${details.id}&marketName=${JSON.stringify(details.marketName)}&questNum=${details.questNum}`
})
}
})
return
}
if (details.pageType == 3) {
postqueryContractList({
taskId: details.id,
goodsType: selectedValue.value.value,
warehouseId: details.warehouseId,
type: '1',
code: details.scancode,
questNum: details.questNum
}).then(res => {
console.log(res, 'res===');
utils.ttsspke(res.audio)
if (res.code != 3001) {
details.renderList = res.data
}
})
return
}
if (details.pageType === 4) {
const res = await initPage()
console.log('res :>> ', res);
const { msg, code, data } = res
uni.showToast({
title: msg,
icon: 'none'
})
if (code === 200 && data) {
const info = {
trayCode: data[0].trayCode,
taskId: details.id,
trayId: data[0].trayId,
type: data[0].goodsType,
marketName: details.marketName,
//
holdBackFirstPost: true,
questNum: details.questNum
}
console.log('info :>> ', info);
uni.navigateTo({
url: `/pagesTask/pages/trayCheckDetails/trayCheckDetails?info=${JSON.stringify(info)}`
})
}
}
} catch (err) {
console.log('err :>> ', err);
//TODO handle the exception
} finally {
uni.hideLoading()
}
}
/**
* 处理扫描后台监听状态
*/
function bindPickerChange(e) {
console.log('picker发送选择改变,携带值为', e.detail.value)
optionsChooseIndex.value = e.detail.value
selectedValue.value = options.value[optionsChooseIndex.value]
}
//
const searchStorage = () => {
getWarehouseTaskAllocationDetailByStrip({
questId: details.id,
allocationId: details.scancode,
questNum: details.questNum
}).then(res => {
console.log('res >>>>>>>>', res);
if (res.code !== 403) {
uni.navigateTo({
url: `/pagesTask/pages/storageLocationCheckDetails/storageLocationCheckDetails?allocationId=${details.scancode}&questId=${details.id}&marketName=${JSON.stringify(details.marketName)}&questNum=${details.questNum}`
})
}
})
}
//
const goStorageDetails = (val) => {
console.log('val :>> ', val);
getWarehouseTaskAllocationDetailByStrip({
questId: details.id,
allocationId: val.allocationId,
questNum: details.questNum
}).then(res => {
console.log(res);
if (res.code != 403) {
uni.navigateTo({
url: `/pagesTask/pages/storageLocationCheckDetails/storageLocationCheckDetails?allocationId=${val.allocationId}&questId=${details.id}&marketName=${JSON.stringify(details.marketName)}&questNum=${details.questNum}`
})
}
})
}
//
const searchTary = () => {
if (!details.scancode) return uni.showToast({
icon: 'none',
title: '请输入托盘码'
})
// goTrayDetails(details.searchText.taryText)
scandata()
}
//
function goTrayDetails(item) {
const info = {
//
trayCode: item.trayCode,
// Id
taskId: details.id,
// Id
trayId: item.trayId,
//
type: item.goodsType,
//
marketName: details.marketName,
//
holdBackFirstPost: false,
questNum: details.questNum
}
uni.navigateTo({
url: `/pagesTask/pages/trayCheckDetails/trayCheckDetails?info=${JSON.stringify(info)}`
})
}
// ,
const contract = (val) => {
uni.navigateTo({
url: `/pagesTask/pages/contracts/contracts?warehouseId=${details.warehouseId}&taskId=${details.id}&orderCode=${val.orderCode}&isInventory=${val.isInventory}&marketName=${JSON.stringify(details.marketName)}&martialCode=${val.martialCode}&questNum=${details.questNum}`
})
}
//
const ContractSearch = () => {
postqueryContractList({
taskId: details.id,
goodsType: selectedValue.value.value,
warehouseId: details.warehouseId,
type: '2',
incomingBatch: details.scancode,
questNum: details.questNum
}).then(res => {
console.log(res, 'res===');
utils.ttsspke(res.audio)
if (res.code != 3001) {
details.renderList = res.data
}
})
}
// Input
const handleInputChange = () => {
console.log(details.searchText.taryText);
if (!details.scancode) {
pgetContractList({
taskId: infodata.value.id,
warehouseId: infodata.value.warehouseId,
questNum: details.questNum
}).then(res => {
if (res.code = 200 && res.data) {
details.renderList = res.data.records
}
utils.ttsspke(res.msg)
})
}
}
const {
title,
pageType,
isEnd,
renderList
} = toRefs(details)
</script>
<style lang="scss" scoped>
$buttonColor: #d3832a;
//
.button {
font-size: 28upx;
padding: 10upx 20upx;
border: 1upx solid $buttonColor;
background-color: #fff;
color: #d3832a;
border-radius: 5upx;
}
.main {
padding: 10upx;
font-size: 28upx; //
}
.main_top {
display: flex;
// align-items: center;
justify-content: space-between;
margin-bottom: 10upx;
align-items: center;
.uni-list-cell-db {
margin: 0 20upx;
}
//
&_search {
flex: 1;
padding-left: 20upx;
margin-right: 20upx;
box-sizing: border-box;
height: 28upx * 2;
border-radius: 28upx;
border: 1upx solid #000;
}
.button {
background-color: $buttonColor;
color: #fff;
padding: 0 60upx;
height: 28upx * 2;
display: inline-flex;
align-items: center;
}
}
.table {
margin-top: 10upx;
box-shadow: 0 0 20upx #6f5050;
}
//
.tpbx {
display: flex;
align-items: center;
// padding: 18upx 24upx;
box-sizing: border-box;
border-bottom: 4upx solid #EEEEEE;
>image {
flex: none;
width: 32upx;
height: 32upx;
margin-right: 15upx;
}
>view {
flex: 1;
font-size: 28upx;
font-weight: 400;
color: #020B18;
.numb {
font-size: 28upx;
color: #178AF2;
}
}
}
//
.footer-end {
padding: 20upx 0;
text-align: center;
}
</style>

32
pagesTask/pages/checkTaskList/checkTaskList.vue

@ -27,7 +27,7 @@
<template v-if="pageType === 2">
<!-- 顶部 -->
<view class="main_top">
<input type="text" v-model="details.scancode" placeholder="请输入库位码" class="main_top_search" />
<input type="text" v-model="details.scancode" placeholder="请扫描或输入库位码" class="main_top_search" />
<view class="button" @click="scandata">搜索</view>
</view>
@ -106,7 +106,7 @@
<template v-if="pageType === 4">
<!-- 顶部 -->
<view class="main_top">
<input type="text" v-model="details.scancode" placeholder="请输入托盘码" class="main_top_search" />
<input type="text" v-model="details.scancode" placeholder="请扫描或输入托盘码" class="main_top_search" />
<view class="button" @click="searchTary">搜索</view>
</view>
@ -333,7 +333,7 @@
else if (details.pageType === 3) {
res = await pgetContractList({
...details.page,
taskId: infodata.value.id,
questId: infodata.value.id,
warehouseId: infodata.value.warehouseId,
questNum: details.questNum
})
@ -371,7 +371,7 @@
console.log('details.id :>> ', details.id);
const submitData : any = {
...details.page,
taskId: details.id,
questId: details.id,
questNum: details.questNum
}
submitData.trayCode = details.scancode
@ -427,27 +427,27 @@
}
if (details.pageType === 4) {
const res = await initPage()
const res = await getTaryList()
console.log('res :>> ', res);
const { msg, code, data } = res
uni.showToast({
title: msg,
icon: 'none'
})
const { code, data } = res
// uni.showToast({
// title: msg,
// icon: 'none'
// })
if (code === 200 && data) {
const info = {
trayCode: data[0].trayCode,
taskId: details.id,
questId: details.id,
trayId: data[0].trayId,
type: data[0].goodsType,
marketName: details.marketName,
//
holdBackFirstPost: true,
questNum: details.questNum
questNum: details.questNum,
pageType: details.pageType,
title: details.title
}
console.log('info :>> ', info);
uni.navigateTo({
url: `/pagesTask/pages/trayCheckDetails/trayCheckDetails?info=${JSON.stringify(info)}`
url: `/pagesTask/pages/dynamicCheckDetails/dynamicCheckDetails?info=${JSON.stringify(info)}`
})
}
}
@ -524,8 +524,6 @@
type: item.goodsType,
//
marketName: details.marketName,
//
holdBackFirstPost: false,
questNum: details.questNum
}
uni.navigateTo({

1264
pagesTask/pages/dynamicCheckDetails/dynamicCheckDetails.vue

File diff suppressed because it is too large Load Diff

1338
unpackage/dist/dev/app-plus/app-service.js vendored

File diff suppressed because it is too large Load Diff

8
unpackage/dist/dev/app-plus/app.css vendored

@ -1156,7 +1156,6 @@ uni-view[data-v-f631659b], uni-scroll-view[data-v-f631659b], uni-swiper-item[dat
}
.container[data-v-385736e8] {
width: 90%;
height: 60%;
border-radius: 0.3125rem;
background: #fff;
}
@ -1165,17 +1164,18 @@ uni-view[data-v-f631659b], uni-scroll-view[data-v-f631659b], uni-swiper-item[dat
margin-bottom: 0.3125rem;
}
.container .scoolv[data-v-385736e8] {
height: 80%;
max-height: 40vh;
padding: 0.625rem;
padding-bottom: 0;
box-sizing: border-box;
}
.container .buttonContainer[data-v-385736e8] {
height: 20%;
height: 12vh;
flex: 1;
display: flex;
justify-content: space-around;
justify-content: space-evenly;
align-items: center;
zoom: 0.9;
}
.container .buttonContainer > uni-view[data-v-385736e8] {
padding: 0.46875rem 1.5625rem;

Loading…
Cancel
Save