Browse Source

增加盘点相关组件2024/7/19 19:59:14

pull/1/head
zhang_li 5 months ago
parent
commit
bf7b78223c
  1. 22
      src/common/directory.js
  2. 13
      src/mycomponents/detail/comDetailCard.vue
  3. 31
      src/mycomponents/package/PackageAndItemCard.vue
  4. 6
      src/mycomponents/qty/recommendQty.vue
  5. 698
      src/pages.json
  6. 33
      src/pages/count/coms/comFuzzyCountJobCard.vue
  7. 397
      src/pages/count/job/fuzzyCountDetail.vue
  8. 430
      src/pages/count/job/fuzzyCountJob.vue
  9. 2
      src/pages/index/index.vue

22
src/common/directory.js

@ -20,7 +20,8 @@ let sampleMethodList = [];
let transferModeList = [];
let countStageList = [];
let locationAreaTypeList = [];
let businessList=[]
let businessList=[];
let countScopeTypeList = [];
@ -61,7 +62,8 @@ export function clearCacheData() {
transferModeList = [];
countStageList = [];
locationAreaTypeList=[];
businessList=[]
businessList=[];
countScopeTypeList = []
}
//获取字典信息
@ -317,6 +319,22 @@ export function getUomInfo(value) {
}
return resultInfo
}
//获取盘点范围类型
export function getCountScopeType(value) {
var resultInfo = "";
if (countStageList.length == 0) {
countStageList = getDirectoryInfo("count_scope_type")
}
if (countStageList.length > 0) {
for (let item of countStageList) {
if (item.value == value) {
resultInfo = item
break;
}
}
}
return resultInfo
}
//获取包装单位
export function getPackUnitInfo(value) {

13
src/mycomponents/detail/comDetailCard.vue

@ -90,15 +90,16 @@ watch(
}
)
onMounted(() => {
if (detailOptions.value.length == 0) {
detailOptions.value = getDetailOption()
}
if (scanOptions.value.length == 0) {
scanOptions.value = getPurchaseReceiptOption(props.settingParam.allowModifyQty, false)
}
// if (detailOptions.value.length == 0) {
// detailOptions.value = getDetailOption()
// }
// if (scanOptions.value.length == 0) {
// scanOptions.value = getPurchaseReceiptOption(props.settingParam.allowModifyQty, false)
// }
nextTick((res) => {
collapse.value.init()
})
showLocation()
})
const swipeClick = (params, item) => {
let text = ''

31
src/mycomponents/package/PackageAndItemCard.vue

@ -0,0 +1,31 @@
<template>
<view :class="dataContent.scaned ? 'scan_view' : ''" style="background-color: #fff">
<view class="uni-flex uni-row space-between" style="align-items: center">
<view style="word-break: break-all">
<item :dataContent="dataContent" style="margin-left: 4px; padding: 0px 5px 5px"></item>
<pack v-if="dataContent.number != null" :packingCode="dataContent.number"></pack>
<batch v-if="dataContent.batch != null" :batch="dataContent.batch"></batch>
</view>
<view class="uni-flex uni-row" style="word-break: break-all">
<recommend-qty v-if="dataContent.handleQty == null || dataContent.handleQty == undefined" :dataContent="dataContent" :isShowStdPack="false" :isShowStatus="isShowStatus" :isShowPackCount="false"></recommend-qty>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, getCurrentInstance, onMounted, nextTick, watch } from 'vue'
import item from '@/mycomponents/item/item.vue'
import pack from '@/mycomponents/balance/pack.vue'
import batch from '@/mycomponents/balance/batch.vue'
import recommendQty from '@/mycomponents/qty/recommendQty.vue'
const props = defineProps({
dataContent: {
type: Object,
default: null
}
})
</script>
<style></style>

6
src/mycomponents/qty/recommendQty.vue

@ -7,7 +7,7 @@
{{ Number(dataContent.qty) }}
</view>
<uom :uom="dataContent.uom"></uom>
<view v-if="dataContent.packQty != undefined" class="uni-flex uni-row">
<view v-if="isShowPackCount && dataContent.packQty != undefined" class="uni-flex uni-row">
<view class="uom">/</view>
<view class="text_packQty">{{ calc(dataContent.qty, dataContent.packQty) }} </view>
</view>
@ -54,6 +54,10 @@ const props = defineProps({
objTextStyle: {
type: Object,
default: null
},
isShowPackCount: {
type: Boolean,
default: true
}
})
const calc = (qty, packQty) => {

698
src/pages.json

@ -1892,349 +1892,389 @@
}
},
{
"path": "pages/count/record/countRecord",
"style": {
"navigationBarTitleText": "按库位盘点",
"enablePullDownRefresh": false
"path": "pages/count/job/fuzzyCountJob",
"style": {
"navigationBarTitleText": "盲盘任务",
"enablePullDownRefresh": true,
"titleNView": {
// "autoBackButton": "true",
"buttons": [
//
{
"float": "right",
"fontSize": "58rpx", //
"text": "\ue696",
"fontSrc": "/static/ali_icon/iconfont.ttf"
},
{
"float": "right",
"fontSize": "52rpx", //
"text": "\ue6e2",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
]
}
},
{
"path": "pages/unPlanned/job/receiptJob",
"style": {
"navigationBarTitleText": "计划外入库任务",
"enablePullDownRefresh": true,
"titleNView": {
// "autoBackButton": "true",
"buttons": [
//
{
"float": "right",
"fontSize": "58rpx", //
"text": "\ue696",
"fontSrc": "/static/ali_icon/iconfont.ttf"
},
{
"float": "right",
"fontSize": "52rpx", //
"text": "\ue6e2",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
]
}
}
},
{
"path": "pages/unPlanned/job/receiptJobDetail",
"style": {
"navigationBarTitleText": "计划外入库详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/request/receiptRequest",
"style": {
"navigationBarTitleText": "计划外入库申请",
"enablePullDownRefresh": false,
"titleNView": {
// "autoBackButton": "true",
"buttons": [
//
{
"float": "right",
"fontSize": "58rpx", //
"text": "\ue696",
"fontSrc": "/static/ali_icon/iconfont.ttf"
},
{
"float": "right",
"fontSize": "52rpx", //
"text": "\ue6e2",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
]
}
}
},
{
"path": "pages/unPlanned/request/receiptRequestDetail",
"style": {
"navigationBarTitleText": "计划外入库申请详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/request/receiptRequestCreate",
"style": {
"navigationBarTitleText": "计划外入库申请创建",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/job/issueJob",
"style": {
"navigationBarTitleText": "计划外出库任务",
"enablePullDownRefresh": false,
"titleNView": {
// "autoBackButton": "true",
"buttons": [
//
{
"float": "right",
"fontSize": "58rpx", //
"text": "\ue696",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
},
{
"path": "pages/count/job/fuzzyCountDetail",
"style": {
"navigationBarTitleText": "盲盘明细",
"enablePullDownRefresh": false
},
{
}
},
{
"path": "pages/count/record/countRecord",
"style": {
"navigationBarTitleText": "按库位盘点",
"enablePullDownRefresh": false
"float": "right",
"fontSize": "52rpx", //
"text": "\ue6e2",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
]
}
}
},
{
"path": "pages/unPlanned/job/issueJobDetail",
"style": {
"navigationBarTitleText": "计划外出库详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/job/receiptJob",
"style": {
"navigationBarTitleText": "计划外入库任务",
"enablePullDownRefresh": true,
"titleNView": {
// "autoBackButton": "true",
"buttons": [
//
{
"float": "right",
"fontSize": "58rpx", //
"text": "\ue696",
"fontSrc": "/static/ali_icon/iconfont.ttf"
},
{
"float": "right",
"fontSize": "52rpx", //
"text": "\ue6e2",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
]
}
},
{
"path": "pages/unPlanned/request/issueRequest",
"style": {
"navigationBarTitleText": "计划外出库申请",
"enablePullDownRefresh": false,
"titleNView": {
// "autoBackButton": "true",
"buttons": [
//
{
"float": "right",
"fontSize": "58rpx", //
"text": "\ue696",
"fontSrc": "/static/ali_icon/iconfont.ttf"
},
{
}
},
"float": "right",
"fontSize": "52rpx", //
"text": "\ue6e2",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
]
}
}
},
{
"path": "pages/unPlanned/request/issueRequestDetail",
"style": {
"navigationBarTitleText": "计划外出库申请详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/request/issueRequestCreate",
"style": {
"navigationBarTitleText": "计划外出库申请创建",
"enablePullDownRefresh": false
{
"path": "pages/unPlanned/job/receiptJobDetail",
"style": {
"navigationBarTitleText": "计划外入库详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/request/receiptRequest",
"style": {
"navigationBarTitleText": "计划外入库申请",
"enablePullDownRefresh": false,
"titleNView": {
// "autoBackButton": "true",
"buttons": [
//
{
"float": "right",
"fontSize": "58rpx", //
"text": "\ue696",
"fontSrc": "/static/ali_icon/iconfont.ttf"
},
{
"float": "right",
"fontSize": "52rpx", //
"text": "\ue6e2",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
]
}
},
}
},
{
"path": "pages/unPlanned/request/receiptRequestDetail",
"style": {
"navigationBarTitleText": "计划外入库申请详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/request/receiptRequestCreate",
"style": {
"navigationBarTitleText": "计划外入库申请创建",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/record/receiptRecord",
"style": {
"navigationBarTitleText": "计划外入库记录",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/record/issueRecord",
"style": {
"navigationBarTitleText": "计划外出库记录",
"enablePullDownRefresh": false
{
"path": "pages/unPlanned/job/issueJob",
"style": {
"navigationBarTitleText": "计划外出库任务",
"enablePullDownRefresh": false,
"titleNView": {
// "autoBackButton": "true",
"buttons": [
//
{
"float": "right",
"fontSize": "58rpx", //
"text": "\ue696",
"fontSrc": "/static/ali_icon/iconfont.ttf"
},
{
"float": "right",
"fontSize": "52rpx", //
"text": "\ue6e2",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
]
}
},
{
"path": "pages/container/record/containerBindRecord",
"style": {
"navigationBarTitleText": "器具绑定",
"enablePullDownRefresh": false
}
},
{
"path": "pages/container/record/containerUnBindRecord",
"style": {
"navigationBarTitleText": "器具解绑",
"enablePullDownRefresh": false
}
},
{
"path": "pages/package/record/splitPackageRecord",
"style": {
"navigationBarTitleText": "拆包",
"enablePullDownRefresh": false
}
},
{
"path": "pages/package/record/mergePackageRecord",
"style": {
"navigationBarTitleText": "合包",
"enablePullDownRefresh": false
}
},
{
"path": "pages/package/record/overPackageRecord",
"style": {
"navigationBarTitleText": "翻包",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/job/issueJobDetail",
"style": {
"navigationBarTitleText": "计划外出库详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/request/issueRequest",
"style": {
"navigationBarTitleText": "计划外出库申请",
"enablePullDownRefresh": false,
"titleNView": {
// "autoBackButton": "true",
"buttons": [
//
{
"float": "right",
"fontSize": "58rpx", //
"text": "\ue696",
"fontSrc": "/static/ali_icon/iconfont.ttf"
},
{
"float": "right",
"fontSize": "52rpx", //
"text": "\ue6e2",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
]
}
},
{
"path": "pages/package/job/overPackageJob",
"style": {
"navigationBarTitleText": "翻包任务",
"enablePullDownRefresh": false,
"titleNView": {
// "autoBackButton": "true",
"buttons": [
//
{
"float": "right",
"fontSize": "58rpx", //
"text": "\ue696",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
},
{
"path": "pages/unPlanned/request/issueRequestDetail",
"style": {
"navigationBarTitleText": "计划外出库申请详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/request/issueRequestCreate",
"style": {
"navigationBarTitleText": "计划外出库申请创建",
"enablePullDownRefresh": false
}
},
},
{
{
"path": "pages/unPlanned/record/receiptRecord",
"style": {
"navigationBarTitleText": "计划外入库记录",
"enablePullDownRefresh": false
}
},
{
"path": "pages/unPlanned/record/issueRecord",
"style": {
"navigationBarTitleText": "计划外出库记录",
"enablePullDownRefresh": false
}
},
{
"path": "pages/container/record/containerBindRecord",
"style": {
"navigationBarTitleText": "器具绑定",
"enablePullDownRefresh": false
}
},
{
"path": "pages/container/record/containerUnBindRecord",
"style": {
"navigationBarTitleText": "器具解绑",
"enablePullDownRefresh": false
}
},
{
"path": "pages/package/record/splitPackageRecord",
"style": {
"navigationBarTitleText": "拆包",
"enablePullDownRefresh": false
}
},
{
"path": "pages/package/record/mergePackageRecord",
"style": {
"navigationBarTitleText": "合包",
"enablePullDownRefresh": false
}
},
{
"path": "pages/package/record/overPackageRecord",
"style": {
"navigationBarTitleText": "翻包",
"enablePullDownRefresh": false
}
},
"float": "right",
"fontSize": "52rpx", //
"text": "\ue6e2",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
]
}
}
},
{
"path": "pages/package/job/overPackageJobDetail",
"style": {
"navigationBarTitleText": "翻包任务详情",
"enablePullDownRefresh": false
}
}, {
"path": "pages/point/index",
"style": {
"navigationBarTitleText": "打印",
"enablePullDownRefresh": false
}
}, {
"path": "pages/pointProductReceipt/index",
"style": {
"navigationBarTitleText": "打印",
"enablePullDownRefresh": false
}
}, {
"path": "pages/pointProductReceipt/webview",
"style": {
"navigationBarTitleText": "打印",
"enablePullDownRefresh": false
}
},
{
"path": "pages/pointPutawayJob/index",
"style": {
"navigationBarTitleText": "打印",
"enablePullDownRefresh": false
}
},
{
"path": "pages/check/checkFgLabel",
"style": {
"navigationBarTitleText": "标签成品标签",
"enablePullDownRefresh": false
}
}, {
"path": "pages/material/materialDowngrade",
"style": {
"navigationBarTitleText": "物料降级",
"enablePullDownRefresh": false
}
},
{
"path": "pages/fg/receiptByPlan",
"style": {
"navigationBarTitleText": "按计划报工",
"enablePullDownRefresh": false
}
},
{
"path": "pages/fg/receiptNoPlan",
"style": {
"navigationBarTitleText": "无计划报工",
"enablePullDownRefresh": false
{
"path": "pages/package/job/overPackageJob",
"style": {
"navigationBarTitleText": "翻包任务",
"enablePullDownRefresh": false,
"titleNView": {
// "autoBackButton": "true",
"buttons": [
//
{
"float": "right",
"fontSize": "58rpx", //
"text": "\ue696",
"fontSrc": "/static/ali_icon/iconfont.ttf"
},
{
"float": "right",
"fontSize": "52rpx", //
"text": "\ue6e2",
"fontSrc": "/static/ali_icon/iconfont.ttf"
}
]
}
}
],
"globalStyle": {
"navigationBarTextStyle": "white",
"navigationBarTitleText": "WMS仓库管理系统-移动端",
"navigationBarBackgroundColor": "#3C9CFF",
"h5": {
"maxWidth": 1190,
"navigationBarTextStyle": "white",
"navigationBarBackgroundColor": "#3C9CFF !important"
},
//
// "titleNView": {
// "autoBackButton": "true",
// "buttons": [{
// "float": "right",
// "text": "\ue696",
// "fontSrc": "/static/ali_icon/iconfont.ttf",
// "fontSize": "58rpx"
// }]
// },
"softinputMode": "adjustPan" //adjustResize
},
"tabBar": {
"color": "#000000",
"selectedColor": "#2678f2",
"borderStyle": "black",
"backgroundColor": "",
"list": [{
"pagePath": "pages/index/index",
"iconPath": "./static/bar/home.png",
"selectedIconPath": "./static/bar/home_p.png",
"text": "首页"
},
{
"pagePath": "pages/message/index",
"iconPath": "./static/bar/message.png",
"selectedIconPath": "./static/bar/message_p.png",
"text": "消息"
}, {
"pagePath": "pages/setter/index",
"iconPath": "./static/bar/setting.png",
"selectedIconPath": "./static/bar/setting_p.png",
"text": "设置"
}
]
{
"path": "pages/package/job/overPackageJobDetail",
"style": {
"navigationBarTitleText": "翻包任务详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/point/index",
"style": {
"navigationBarTitleText": "打印",
"enablePullDownRefresh": false
}
},
{
"path": "pages/pointProductReceipt/index",
"style": {
"navigationBarTitleText": "打印",
"enablePullDownRefresh": false
}
},
{
"path": "pages/pointProductReceipt/webview",
"style": {
"navigationBarTitleText": "打印",
"enablePullDownRefresh": false
}
},
{
"path": "pages/pointPutawayJob/index",
"style": {
"navigationBarTitleText": "打印",
"enablePullDownRefresh": false
}
},
{
"path": "pages/check/checkFgLabel",
"style": {
"navigationBarTitleText": "标签成品标签",
"enablePullDownRefresh": false
}
},
{
"path": "pages/material/materialDowngrade",
"style": {
"navigationBarTitleText": "物料降级",
"enablePullDownRefresh": false
}
},
{
"path": "pages/fg/receiptByPlan",
"style": {
"navigationBarTitleText": "按计划报工",
"enablePullDownRefresh": false
}
},
{
"path": "pages/fg/receiptNoPlan",
"style": {
"navigationBarTitleText": "无计划报工",
"enablePullDownRefresh": false
}
}
],
"globalStyle": {
"navigationBarTextStyle": "white",
"navigationBarTitleText": "WMS仓库管理系统-移动端",
"navigationBarBackgroundColor": "#3C9CFF",
"h5": {
"maxWidth": 1190,
"navigationBarTextStyle": "white",
"navigationBarBackgroundColor": "#3C9CFF !important"
},
//
// "titleNView": {
// "autoBackButton": "true",
// "buttons": [{
// "float": "right",
// "text": "\ue696",
// "fontSrc": "/static/ali_icon/iconfont.ttf",
// "fontSize": "58rpx"
// }]
// },
"softinputMode": "adjustPan" //adjustResize
},
"tabBar": {
"color": "#000000",
"selectedColor": "#2678f2",
"borderStyle": "black",
"backgroundColor": "",
"list": [{
"pagePath": "pages/index/index",
"iconPath": "./static/bar/home.png",
"selectedIconPath": "./static/bar/home_p.png",
"text": "首页"
},
{
"pagePath": "pages/message/index",
"iconPath": "./static/bar/message.png",
"selectedIconPath": "./static/bar/message_p.png",
"text": "消息"
}, {
"pagePath": "pages/setter/index",
"iconPath": "./static/bar/setting.png",
"selectedIconPath": "./static/bar/setting_p.png",
"text": "设置"
}
]
}
}

33
src/pages/count/coms/comFuzzyCountJobCard.vue

@ -0,0 +1,33 @@
<template>
<job-com-main-card :dataContent="dataContent">
<view v-if="dataContent.countRange != undefined" class="">
<view v-for="(range, index) in dataContent.countRange" :key="index">
<view class="card_view">
<text class="card_packing_code">{{ getCountScopeName(range.type) }}</text>
<text class="card_content">{{ range.value }}</text>
</view>
</view>
</view>
</job-com-main-card>
</template>
<script setup lang="ts">
import { ref, onMounted, nextTick, watch } from 'vue'
import { getCountScopeType } from '@/common/directory.js'
import jobComMainCard from '@/mycomponents/job/jobComMainCard.vue'
import jobComMainDetailCard from '@/mycomponents/job/jobComMainDetailCard.vue'
import toLocation from '@/mycomponents/balance/toLocation.vue'
const props = defineProps({
dataContent: {
type: Object,
default: {}
}
})
const getCountScopeName = () => {
const item = getCountScopeType(value)
return item.label
}
</script>
<style lang="scss"></style>

397
src/pages/count/job/fuzzyCountDetail.vue

@ -0,0 +1,397 @@
<template>
<view class="page-wraper">
<view class="page-header">
<view class="header_job_top">
<job-top :dataContent="jobContent"></job-top>
</view>
</view>
<view class="page-main" style="height: 500px">
<view class="">
<com-blank-view @goScan="showFromLocationPopup" v-if="detailSource.length == 0"></com-blank-view>
</view>
<scroll-view scroll-y="true" class="page-main-scroll">
<uni-swipe-action ref="swipeAction">
<uni-swipe-action-item @click="removeData($event, dataContent)" :right-options="removeOptions">
<view class="detail-list" v-for="(item, index) in detailSource" :key="item.id">
<view class="">
<package-and-item-card :dataContent="item"></package-and-item-card>
<!-- <com-count-detail-card :ref="'countDetail_'+index" :dataContent="item" :index="index"
@editItem="editItem" :settingParam="jobContent" @remove="updateData"
@updateData="updateData">
</com-count-detail-card> -->
</view>
<view class="split_line"></view>
</view>
<!-- <item-qty v-if="settingParam.isOpenCount=='TRUE'" :dataContent="dataContent"
:handleQty="dataContent.handleQty" :isShowBalanceQty="false">
</item-qty>
<item-qty v-else :dataContent="dataContent" :handleQty="dataContent.handleQty"
:isShowBalanceQty="true" :showRecommendQty="false" :showStdPack="true">
</item-qty> -->
</uni-swipe-action-item>
</uni-swipe-action>
</scroll-view>
</view>
<view class="page-footer">
<view class="uni-flex u-col-center space-between padding_10" style="background-color: ghostwhite; width: 100%">
<view class=""> </view>
<view class="uni-flex uni-row">
<button class="btn_single_commit" hover-class="btn_commit_after" @click="commit">提交</button>
</view>
</view>
</view>
<win-scan-button v-if="fromLocationCode != ''" @goScan="openScanPopup"></win-scan-button>
<win-scan-pack ref="scanPopup" @getResult="getScanResult"></win-scan-pack>
<win-scan-location ref="scanLocationCode" title="盘点库位" @getLocation="getLocation"></win-scan-location>
<count-qty-edit ref="countQtyEdit" @confirm="editConfirm" @close="editClose" :isShowStatus="true" :allowEditStatus="editInventoryStatus" :isShowBalance="jobContent.isOpenCount == 'TRUE'"> </count-qty-edit>
<comMessage ref="comMessage"></comMessage>
</view>
</template>
<script>
import { Decimal } from 'decimal.js' //
import { getCountJobDetail, takeCountJob, cancleTakeCountJob, countJobSubmit } from '@/api/request2.js'
import { calc } from '@/common/calc.js'
import { goHome, navigateBack, getPackingNumberAndBatch } from '@/common/basic.js'
import { getCountStageName } from '@/common/directory.js'
import winScanButton from '@/mycomponents/scan/winScanButton.vue'
import winScanPack from '@/mycomponents/scan/winScanPack.vue'
import comCountDetailCard from '@/pages/count/coms/comCountDetailCard.vue'
// import winScanPackAndLocation from "@/mycomponents/scan/winScanPackAndLocation.vue"
import winScanLocation from '@/mycomponents/scan/winScanLocation.vue'
import countQtyEdit from '@/mycomponents/qty/countQtyEdit.vue'
import jobTop from '@/mycomponents/job/jobTop.vue'
import comBlankView from '@/mycomponents/common/comBlankView.vue'
import PackageAndItemCard from '@/mycomponents/package/PackageAndItemCard.vue'
export default {
name: 'receipt_detail',
components: {
winScanButton,
winScanPack,
comCountDetailCard,
// winScanPackAndLocation,
winScanLocation,
countQtyEdit,
jobTop,
comBlankView,
PackageAndItemCard
},
data() {
return {
id: '',
scanCount: 0,
jobContent: {}, //
subList: [], // subList
detailSource: [], //
balance: {}, //
editInventoryStatus: false,
package: {}, //
label: {}, //
currentEditItem: {},
jobStatus: '',
fromLocation: {},
fromLocationCode: ''
}
},
onLoad(option) {
this.id = option.id
if (this.id != undefined) {
//
if (option.status == '1') {
this.receive((callback) => {
this.getDetail()
})
} else {
this.getDetail()
}
}
this.showFromLocationPopup()
},
//
onNavigationBarButtonTap(e) {
if (e.index === 0) {
goHome()
}
},
//
onBackPress(e) {
//
if (e.from === 'backbutton') {
if (this.jobStatus == '2') {
//
cancleTakeCountJob(this.id)
.then((res) => {
uni.navigateBack()
})
.catch((error) => {
uni.navigateBack()
})
} else {
uni.navigateBack()
}
return true
}
},
onPullDownRefresh() {
// uni.stopPullDownRefresh();
},
mounted() {},
methods: {
//
receive(callback) {
if (this.id != null) {
takeCountJob(this.id)
.then((res) => {
callback()
})
.catch((error) => {
this.showErrorMessage(error)
})
}
},
getDetail() {
const that = this
uni.showLoading({
title: '加载中....',
mask: true
})
getCountJobDetail(that.id)
.then((res) => {
uni.hideLoading()
that.jobContent = res.data
that.jobStatus = res.data.status
})
.catch((error) => {
uni.hideLoading()
this.showErrorMessage(error)
})
},
showFromLocationPopup() {
this.$nextTick(() => {
this.$refs.scanLocationCode.openScanPopup()
})
},
getLocation(location, code) {
this.getFromLocationCode(location, code)
},
getFromLocationCode(location, code) {
this.fromLocation = location
this.fromLocationCode = code
this.openScanPopup()
},
openScanPopup() {
this.$refs.scanPopup.openScanPopup()
},
closeScanPopup() {
this.$refs.scanPopup.closeScanPopup()
},
scanPopupGetFocus() {
if (this.$refs.scanPopup != undefined) {
this.$refs.scanPopup.getfocus()
}
},
closeScanPopup() {
if (this.$refs.scanPopup != undefined) {
this.$refs.scanPopup.closeScanPopup()
}
},
scanPopupGetFocus() {
if (this.$refs.scanPopup != undefined) {
this.$refs.scanPopup.packGetFocus()
}
},
scanPopupLoseFocus() {
if (this.$refs.scanPopup != undefined) {
this.$refs.scanPopup.packLoseFocus()
}
},
//
getScanResult(result) {
const that = this
const item = this.createDetailInfo(result.package)
this.detailSource.push(item)
},
//
createDetailInfo(packInfo) {
const detail = {
scaned: true,
// countDetailNumber: "",
number: this.jobContent.number,
packingNumber: packInfo.number,
batch: packInfo.batch,
inventoryStatus: 'OK',
itemCode: packInfo.itemCode,
itemName: packInfo.itemName,
itemDesc1: packInfo.itemDesc1,
itemDesc2: packInfo.itemDesc2,
projectCode: '',
qty: packInfo.qty,
uom: packInfo.uom,
remark: '',
locationCode: this.fromLocationCode,
creator: this.$store.state.user.id,
warehouseCode: this.fromLocation.warehouseCode,
areaCode: this.fromLocation.areaCode,
locationGroupCode: this.fromLocation.locationGroupCode
}
return detail
},
//
editCountResult(item, subItem) {
const that = this
this.$refs.comMessage.showQuestionMessage(`箱码【${that.label.packingNumber}】已经完成盘点,是否要编辑盘点结果?`, (res) => {
if (res) {
this.currentEditItem = subItem
this.$refs.countQtyEdit.openEditPopup(subItem, item.subList)
// this.$refs.countQtyEdit.openEditPopupShowSeconds(subItem,
// item.subList);
} else {
this.scanPopupGetFocus()
}
})
},
editClose() {
this.scanPopupGetFocus()
},
commit() {
// if(this.detailSource.length==0)
// {
// }
uni.showLoading({
title: '提交中....',
mask: true
})
const params = this.setParams()
console.log('提交参数', JSON.stringify(params))
countJobSubmit(params)
.then((res) => {
uni.hideLoading()
if (res.data == null) {
this.showCommitSuccessMessage('提交成功')
} else {
this.showErrorMessage(`提交失败[${res.msg}]`)
}
})
.catch((error) => {
uni.hideLoading()
this.showErrorMessage(error)
})
},
setParams() {
const subList = []
const creator = this.$store.state.user.id
this.jobContent.subList = this.detailSource
// this.jobContent.creator = creator;
return this.jobContent
},
showMessage(message) {
this.$refs.comMessage.showMessage(message, (res) => {
if (res) {
this.afterCloseMessage()
}
})
},
showErrorMessage(message) {
this.$refs.comMessage.showErrorMessage(message, (res) => {
if (res) {
this.afterCloseMessage()
}
})
},
showScanMessage(message) {
this.$refs.comMessage.showScanMessage(message)
},
afterCloseMessage() {
this.scanPopupGetFocus()
},
closeScanMessage() {
this.scanPopupGetFocus()
},
editItem(item) {
this.currentEditItem = item
const detail = this.detailSource.find((r) => r.itemCode == item.itemCode)
this.$refs.countQtyEdit.openEditPopup(item, detail.subList)
},
showCommitSuccessMessage(hint) {
this.$refs.comMessage.showSuccessMessage(hint, (res) => {
navigateBack(1)
})
},
getCountStageName(value) {
return getCountStageName(value)
},
isOpenCount(value) {
return value == 'TRUE' ? '明盘' : '盲盘'
}
}
}
</script>
<style scoped lang="scss">
page {
width: 100%;
height: 100%;
background-color: #fff;
}
.page-wraper {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
}
.page-main {
flex: 1;
position: relative;
}
.page-main-scroll {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
.page-main-list {
/* height: 80rpx;
line-height: 80rpx; */
text-align: center;
background: #e0e0e0;
}
</style>

430
src/pages/count/job/fuzzyCountJob.vue

@ -0,0 +1,430 @@
<template>
<view class="">
<com-empty-view v-if="jobList.length == 0"></com-empty-view>
<job-filter ref="filter" otherTitle="ASN" @switchChangeToday="switchChangeToday" @switchChangeWait="switchChangeWait" @onScanNumber="getScanNumber" :checkedToday="checkedToday" :checkedWaitTask="checkedWaitTask"> </job-filter>
<view v-if="jobList.length > 0">
<uni-swipe-action ref="swipeAction">
<view v-for="(item, index) in jobList" :key="index">
<uni-swipe-action-item :right-options="item.status == '2' ? detailGiveupOptions : detailOptions" @click="swipeClick($event, item)">
<com-fuzzy-count-job-card :dataContent="item" @click="openJobDetail(item)"></com-fuzzy-count-job-card>
</uni-swipe-action-item>
</view>
</uni-swipe-action>
<job-list-popup ref="jobListPopup" @selectedItem="selectedItem"></job-list-popup>
<job-info-popup ref="jobInfoPopup"></job-info-popup>
<uni-load-more :status="loadingType" />
</view>
<win-scan-button @goScan="openScanPopup" v-if="jobList.length > 0"></win-scan-button>
<winScanPackJob title="库位" ref="scanPopup" @getResult="getScanResult"> </winScanPackJob>
<jobList ref="jobList" @selectItem="selectItem"></jobList>
<comMessage ref="comMessage"></comMessage>
</view>
</template>
<script>
import { cancleTakeCountJob, getCountJobList } from '@/api/request2.js'
import { goHome, updateTitle } from '@/common/basic.js'
import { getDetailOption, getDetailGiveupOption } from '@/common/array.js'
import { getCountScopeType } from '@/common/directory.js'
import comEmptyView from '@/mycomponents/common/comEmptyView.vue'
import jobFilter from '@/mycomponents/job/jobFilter.vue'
import comFuzzyCountJobCard from '@/pages/count/coms/comFuzzyCountJobCard.vue'
import jobListPopup from '@/pages/count/coms/jobListPopup.vue'
import jobInfoPopup from '@/pages/count/coms/jobInfoPopup.vue'
import jobList from '@/mycomponents/jobList/jobList.vue'
import winScanButton from '@/mycomponents/scan/winScanButton.vue'
import winScanPackJob from '@/mycomponents/scan/winScanPackJob.vue'
export default {
name: 'receipt',
components: {
comEmptyView,
jobFilter,
comFuzzyCountJobCard,
jobListPopup,
jobInfoPopup,
winScanPackJob,
jobList,
winScanButton
},
data() {
return {
jobList: [],
pageNo: 1,
pageSize: 10,
totalCount: 0,
loadingType: 'nomore',
checkedToday: false,
checkedWaitTask: false,
todayTime: '',
status: '1,2', //
detailOptions: [],
detailGiveupOptions: [],
title: '',
countScopeTypeDic: []
}
},
onLoad(option) {
this.title = option.title
},
onShow() {
this.getList('refresh')
},
onReady() {
this.detailOptions = getDetailOption()
this.detailGiveupOptions = getDetailGiveupOption()
this.countScopeTypeDic = getCountScopeType()
},
onReachBottom() {
//
if (this.loadingType == 'loading' || this.loadingType == 'nomore') {
return
}
this.getList('more')
},
onPullDownRefresh() {
this.getList('refresh')
},
// 退
onBackPress(options) {
if (options.from === 'navigateBack') {
uni.navigateBack({
delta: 1
})
return false
}
},
//
onNavigationBarButtonTap(e) {
if (e.index === 0) {
goHome()
} else if (e.index == 1) {
this.$refs.filter.openFilter()
}
},
methods: {
getList(type) {
const that = this
uni.showLoading({
title: '加载中­....',
mask: true
})
this.loadingType = 'loading'
if (type === 'refresh') {
this.pageNo = 1
this.jobList = []
}
const filters = []
if (this.checkedToday) {
filters.push({
column: 'create_time',
action: 'betweeen',
value: this.todayTime
})
}
filters.push({
column: 'status',
action: 'in',
value: this.status
})
filters.push({
column: 'isOpenCount',
action: '==',
value: 'FALSE'
})
// filters.push({
// column: "accept_user_id",
// action: "==",
// value: this.$store.state.user.id
// })
const params = {
filters,
pageNo: this.pageNo,
pageSize: this.pageSize,
sort: 'number',
by: 'DESC'
}
getCountJobList(params)
.then((res) => {
uni.hideLoading()
if (type === 'refresh') {
uni.stopPullDownRefresh()
}
const { list } = res.data
this.totalCount = res.data.total
updateTitle(`${this.title}(${this.totalCount})`)
this.loadingType = 'loadmore'
if (list == null || list.length == 0) {
this.loadingType = 'nomore'
return
}
this.jobList = type === 'refresh' ? list : this.jobList.concat(list)
// this.jobList[0].countRange = [{
// type: "LOCATION_CODE",
// value: "902,903"
// }, {
// type: "ITEMS_CODE",
// value: "123"
// }]
// this.jobList[1].countRange = [{
// type: "AREABASIC_CODE",
// value: "101"
// }, {
// type: "ITEMS_CODE",
// value: "123"
// }];
this.pageNo++
})
.catch((error) => {
if (type === 'refresh') {
uni.stopPullDownRefresh()
}
updateTitle(this.title)
this.loadingType = ''
uni.hideLoading()
that.showMessage(error)
})
},
getCountRange(value) {
if (value == undefined || value == null) return ''
const rangeList = []
value.forEach((r) => {
const item = rangeList.find((l) => l.type == r.type)
if (item != undefined) {
item.value = `${item.value},${r.value}`
} else {
const data = {
typeCode: r.type,
typeName: getDescFromDic(r.type),
value: r.value
}
rangeList.push(r)
}
})
return rangeList
},
openJobDetail(item) {
uni.navigateTo({
url: `./fuzzyCountDetail?id=${item.id}&status=${item.status}&title=${this.title}`
})
},
showItemList(itemList) {
this.$refs.jobListPopup.openPopup(itemList)
},
selectedItem(item) {
this.openJobDetail(item)
},
openScanPopup() {
this.$refs.scanPopup.openScanPopup()
},
selectItem(item) {
this.$refs.scanPopup.closeScanPopup()
this.openJobDetail(item)
},
swipeClick(e, dataContent) {
if (e.content.text == '详情') {
this.openjobInfoPopup(dataContent)
} else if (e.content.text == '放弃') {
this.$refs.comMessage.showQuestionMessage('确定要放弃当前任务?', (res) => {
if (res) {
this.cancleJob(dataContent.id)
}
})
}
},
openjobInfoPopup(item) {
this.$refs.jobInfoPopup.openPopup(item)
},
cancleJob(id) {
cancleTakeCountJob(id)
.then((res) => {
if (res.data) {
this.getList('refresh')
uni.showToast({
title: '放弃任务成功'
})
} else {
this.showMessage('放弃任务失败')
}
})
.catch((error) => {
this.showMessage(error)
})
},
switchChangeToday(state, creationTime) {
this.checkedToday = state
this.todayTime = creationTime
this.getList('refresh')
},
switchChangeWait(state, jobStatus) {
this.checkedWaitTask = state
this.status = jobStatus
this.getList('refresh')
},
getScanNumber(code) {
this.getDataListByType(code)
},
getDataListByType(code) {
const that = this
uni.showLoading({
title: '加载中....',
mask: true
})
const filters = []
filters.push({
column: 'status',
action: 'in',
value: '1,2'
})
filters.push({
column: 'number',
action: '==',
value: code
})
filters.push({
column: 'countSplitType',
action: '==',
value: 'locationCode'
})
filters.push({
column: 'accept_user_id',
action: '==',
value: this.$store.state.user.id
})
const params = {
filters,
pageNo: 1,
pageSize: 100,
sort: 'number',
by: 'DESC'
}
getCountJobList(params)
.then((res) => {
uni.hideLoading()
if (res.data.list.length == 0) {
that.showMessage('未查找到' + `${code}】的收货任务`)
} else if (res.data.list.length == 1) {
that.openJobDetail(res.data.list[0])
}
})
.catch((error) => {
uni.hideLoading()
that.showMessage(error)
})
},
showMessage(message) {
this.$refs.comMessage.showErrorMessage(message, (res) => {
if (res) {
}
})
},
getScanResult(result) {
const that = this
uni.showLoading({
title: '加载中....',
mask: true
})
const filters = []
filters.push({
column: 'status',
action: 'in',
value: '1,2'
})
filters.push({
column: 'countSplitType',
action: '==',
value: 'locationCode'
})
filters.push({
column: 'countSplitCode',
action: '==',
value: result.label.code
})
filters.push({
column: 'accept_user_id',
action: '==',
value: this.$store.state.user.id
})
const params = {
filters,
pageNo: 1,
pageSize: 1000,
sort: 'number',
by: 'DESC'
}
getCountJobList(params)
.then((res) => {
uni.hideLoading()
const resultList = res.data.list
resultList.forEach((item) => {
item.title = item.number
item.selected = false
})
const list = []
resultList.forEach((item) => {
if (!list.find((subItem) => subItem.title == item.title)) {
list.push(item)
}
})
if (list.length == 0) {
that.showMessage('未查找到库位' + `${result.label.code}】的盘点任务`)
} else if (list.length == 1) {
that.selectItem(list[0])
} else {
that.$refs.jobList.openList(list)
}
})
.catch((error) => {
uni.hideLoading()
that.showMessage(error)
})
}
}
}
</script>
<style scoped lang="scss"></style>

2
src/pages/index/index.vue

@ -324,7 +324,7 @@ const rightScroll = async (e) => {
}
const getDictory = () => {
const params = {
types: ['job_status', 'location_type', 'item_status', 'item_type', 'uom', 'inventory_status', 'container_type', 'pack_unit', 'unplanned_receipt_reason', 'unplanned_issue_reason', 'scrap_reason', 'inspect_failed_reason', 'request_status', 'inspect_type', 'next_action', 'sample_method', 'transfer_mode', 'count_stage', 'inspect_result', 'area_type']
types: ['job_status', 'location_type', 'item_status', 'item_type', 'uom', 'inventory_status', 'container_type', 'pack_unit', 'unplanned_receipt_reason', 'unplanned_issue_reason', 'scrap_reason', 'inspect_failed_reason', 'request_status', 'inspect_type', 'next_action', 'sample_method', 'transfer_mode', 'count_stage', 'inspect_result', 'area_type', 'count_scope_type']
}
getDictionaryItem(params)
.then((res) => {

Loading…
Cancel
Save