Browse Source

优化备货

dev
qb 4 months ago
parent
commit
b5b152adf0
  1. 137
      api/user.js
  2. 4
      compoment/MyInput/MyInput.vue
  3. 11
      config/host.js
  4. 370
      manifest.json
  5. 8
      pages.json
  6. 2
      pages/index/index.vue
  7. 14
      pages/news/news.vue
  8. 3
      pages/user/user.vue
  9. 419
      pagesHome/pages/ArrivalList/ArrivalList.vue
  10. 106
      pagesHome/pages/OrderSortingDetail/OrderSortingDetail.vue
  11. 14
      pagesHome/pages/PeopleScanUp/PeopleScanUp.vue
  12. 105
      pagesHome/pages/PickingScanList/PickingScanList.vue
  13. 345
      pagesHome/pages/StockUplist/StockUplist.vue
  14. 225
      pagesHome/pages/StockUplistScandetails/StockUplistScandetails.vue
  15. 188
      pagesHome/pages/StowageList/StowageList.vue
  16. 20
      pagesHome/pages/orderInquiry/orderInquiry.vue
  17. 45
      pagesHome/pages/pickingScan/pickingScan.vue
  18. 389
      pagesHome/pages/scansorting/scansorting.vue
  19. 127
      pagesHome/pages/setbarcode/setbarcode.vue
  20. 310
      pagesUser/pages/AddressBook/AddressBook.vue
  21. 2
      unpackage/dist/build/app-plus/pages/news/news.css
  22. 2
      unpackage/dist/build/app-plus/pagesHome/pages/OrderSortingDetail/OrderSortingDetail.css
  23. 2
      unpackage/dist/build/app-plus/pagesHome/pages/scansorting/scansorting.css
  24. 2
      unpackage/dist/dev/mp-weixin/project.config.json

137
api/user.js

@ -127,6 +127,23 @@ export function distributionStockuppageList(data, loadingObj = {}, canCancel = f
canCancel
);
}
/**
* -- 备货信息列表
* @param {Object} data
*/
export function newDistributionStockuppageList(data, loadingObj = {}, canCancel = false) {
return request({
url: `logpm-distribution/app/distributionStockup/newPageList`,
method: "post",
data
},
loadingObj,
canCancel
);
}
/**
* 客户信息列表
* @param {Object} data
@ -142,6 +159,23 @@ export function distributionStockuppageListClient(data, loadingObj = {}, canCanc
canCancel
);
}
/**
* -- 客户信息列表
* @param {Object} data
*/
export function distributionStockupNewClientDetail(data, loadingObj = {}, canCancel = true) {
return request({
url: `logpm-distribution/app/distributionStockup//newClientDetail`,
method: "post",
data
},
loadingObj,
canCancel
);
}
/**
* 备货客户列表
* @param {Object} data
@ -157,6 +191,23 @@ export function distributionStockuporderList(data, loadingObj = {}, canCancel =
canCancel
);
}
/**
* -- 备货客户列表
* @param {Object} data
*/
export function distributionStockupNewOrderList(data, loadingObj = {}, canCancel = true) {
return request({
url: `logpm-distribution/app/distributionStockup/newOrderList`,
method: "post",
data
},
loadingObj,
canCancel
);
}
/**
* 备货客户订单明细
* @param {Object} data
@ -172,6 +223,24 @@ export function distributionStockuporderInfo(data, loadingObj = {}, canCancel =
canCancel
);
}
/**
* -- 备货客户订单明细
* @param {Object} data
*/
export function distributionStockupPackageDetail(data, loadingObj = {}, canCancel = true) {
return request({
url: `logpm-distribution/app/distributionStockup/packageDetail`,
method: "post",
data
},
loadingObj,
canCancel
);
}
/**
* 备货扫码
* @param {Object} data
@ -355,6 +424,19 @@ export function distributionStockupstockupStockListPackageCode(data, loadingObj
canCancel
);
}
/** 新 -- 库存品备货生成包条 */
export function postInventoryPackageConfig(data = {}, loadingObj = {}, canCancel = false) {
return request({
url: `logpm-distribution/app/distributionStockup/inventoryPackageConfig`,
method: "post",
data
},
loadingObj,
canCancel
);
}
/**
* 装车扫描
* @param {Object} data
@ -3861,7 +3943,7 @@ export function getOrderPackageDetail(orderPackageCode, loadingObj = {}, canCanc
);
}
/** 根据包条码查询包条详情 */
/** 上传配载图片 -- 装车前 */
export function postUploadLoadingPhoto(data, loadingObj = {}, canCancel = false) {
return request({
url: `logpm-trunkline/carsLoad/uploadLoadingPhoto`,
@ -3873,6 +3955,35 @@ export function postUploadLoadingPhoto(data, loadingObj = {}, canCancel = false)
);
}
/**
* 编辑配载图片 -- 发车前
*/
export const postUploadStartPhoto = (data, loadingObj = {}, canCancel = false) => {
return request({
url: '/api/logpm-trunkline/carsLoad/uploadStartPhoto',
method: 'post',
data,
},
loadingObj,
canCancel
);
};
/**
* 编辑配载图片 -- 卸车前
*/
export const postUploadUnloadPhoto = (data, loadingObj = {}, canCancel = false) => {
return request({
url: '/api/logpm-trunkline/carsLoad/uploadUnloadPhoto',
method: 'post',
data,
},
loadingObj,
canCancel
);
};
/** 获取订单详情 */
export function postDeliveryOrderCodeWarehouseDetail(data, loadingObj = {}, canCancel = false) {
@ -3923,4 +4034,28 @@ export function getBasicNoticeList(data, loadingObj = {}, canCancel = false) {
loadingObj,
canCancel
);
}
/** 生成新托盘码 */
export function postCreateTray(data = {}, loadingObj = {}, canCancel = false) {
return request({
url: `logpm-warehouse/api/warehouseTrayType/createTray`,
method: "post",
data
},
loadingObj,
canCancel
);
}
/** 查看通讯录 */
export function getContactsList(data = {}, loadingObj = {}, canCancel = false) {
return request({
url: `blade-system/contacts/list`,
method: "get",
data
},
loadingObj,
canCancel
);
}

4
compoment/MyInput/MyInput.vue

@ -209,8 +209,8 @@
console.log('err :>> ', err);
//TODO handle the exception
} finally {
instance.proxy.$forceUpdate();
console.log('instance :>> ', instance);
// instance.proxy.$forceUpdate();
// console.log('instance :>> ', instance);
}

11
config/host.js

@ -11,15 +11,16 @@
// const devhost = 'http://192.168.3.12:13000/'
// xiaohei
// const devhost = 'http://192.168.3.65:13000/'
// const devhost = 'http://192.168.5.6:13000/'
// tjj
// const devhost = 'http://192.168.3.14:13000/'
const devhost = 'http://192.168.3.14:13000/'
// cyz
// const devhost = 'http://192.168.6.169:9777/'
// const devhost = 'http://192.168.6.169:9777/'
// const devhost = 'http://192.168.6.141:8777/'
// lg
// const devhost = 'http://192.168.3.16:13000/'
// cg
const devhost = 'http://192.168.3.73:13000/'
// const devhost = 'http://192.168.3.73:13000/'
// 正式
// const devhost = 'https://api.huo5u.com/'
// cg
@ -29,8 +30,8 @@ const devhost = 'http://192.168.3.73:13000/'
/**
* 正式域名
* */
// const prohost = 'https://api.huo5u.com/'
const prohost = 'http://test.api.huo5u.com/'
const prohost = 'https://api.huo5u.com/'
// const prohost = 'http://test.api.huo5u.com/'
/**
* 图片域名
* */

370
manifest.json

@ -1,187 +1,189 @@
{
"name" : "货无忧测试版",
"appid" : "__UNI__EB22F37",
"description" : "",
"versionName" : "1.2.22",
"versionCode" : 1222,
"transformPx" : false,
/* 5+App */
"app-plus" : {
// "custom":false,
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
/* */
"modules" : {
"Bluetooth" : {},
"Barcode" : {},
"Camera" : {},
"Geolocation" : {}
},
/* */
"distribute" : {
/* android */
"android" : {
"permissions" : [
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios */
"ios" : {
"dSYMs" : false,
"idfa" : false
},
/* SDK */
"sdkConfigs" : {
"geolocation" : {
"amap" : {
"__platform__" : [ "android" ],
"appkey_ios" : "f5577fdddf4f68f92bbde932e9e35bd6",
"appkey_android" : "f5577fdddf4f68f92bbde932e9e35bd6"
}
},
"ad" : {}
},
"splashscreen" : {
"androidStyle" : "common",
"useOriginalMsgbox" : false,
"iosStyle" : "common"
},
"icons" : {
"android" : {
"hdpi" : "unpackage/res/icons/72x72.png",
"xhdpi" : "unpackage/res/icons/96x96.png",
"xxhdpi" : "unpackage/res/icons/144x144.png",
"xxxhdpi" : "unpackage/res/icons/192x192.png"
},
"ios" : {
"appstore" : "unpackage/res/icons/1024x1024.png",
"ipad" : {
"app" : "unpackage/res/icons/76x76.png",
"app@2x" : "unpackage/res/icons/152x152.png",
"notification" : "unpackage/res/icons/20x20.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"proapp@2x" : "unpackage/res/icons/167x167.png",
"settings" : "unpackage/res/icons/29x29.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"spotlight" : "unpackage/res/icons/40x40.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png"
},
"iphone" : {
"app@2x" : "unpackage/res/icons/120x120.png",
"app@3x" : "unpackage/res/icons/180x180.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"notification@3x" : "unpackage/res/icons/60x60.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"settings@3x" : "unpackage/res/icons/87x87.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png",
"spotlight@3x" : "unpackage/res/icons/120x120.png"
}
}
}
},
"nativePlugins" : {
"MT-TTS" : {
"__plugin_info__" : {
"name" : "MT-TTS语音合成",
"description" : "安卓tts语音合成",
"platforms" : "Android",
"url" : "",
"android_package_name" : "",
"ios_bundle_id" : "",
"isCloud" : false,
"bought" : -1,
"pid" : "",
"parameters" : {}
}
},
"Sunmi-Print-Inner" : {
"__plugin_info__" : {
"name" : "Sunmi-Print-Inner",
"description" : "商米打印服务uniapp插件",
"platforms" : "Android",
"url" : "",
"android_package_name" : "",
"ios_bundle_id" : "",
"isCloud" : false,
"bought" : -1,
"pid" : "",
"parameters" : {}
}
},
"LcPrinter" : {
"__plugin_info__" : {
"name" : "LcPrinter",
"description" : "打印插件",
"platforms" : "Android",
"url" : "",
"android_package_name" : "",
"ios_bundle_id" : "",
"isCloud" : false,
"bought" : -1,
"pid" : "",
"parameters" : {}
}
}
}
},
/* */
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "wxedb0d10ea46a0113",
"setting" : {
"urlCheck" : false,
"es6" : true,
"ignoreDevUnusedFiles" : false,
"lazyCodeLoading" : "requiredComponents",
"minified" : true
},
"usingComponents" : true,
"permission" : {
"scope.userFuzzyLocation" : {
"desc" : "你的位置信息将用于小程序位置接口的效果展示"
},
"scope.userLocation" : {
"desc" : "你的位置信息将用于小程序位置接口的效果展示"
}
},
"requiredPrivateInfos" : [ "getLocation" ]
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "3"
"name": "货无忧",
"appid": "__UNI__EB22F37",
"description": "",
"versionName": "1.2.23",
"versionCode": 1223,
"transformPx": false,
/* 5+App */
"app-plus": {
// "custom":false,
"usingComponents": true,
"nvueStyleCompiler": "uni-app",
"compilerVersion": 3,
"splashscreen": {
"alwaysShowBeforeRender": true,
"waiting": true,
"autoclose": true,
"delay": 0
},
/* */
"modules": {
"Bluetooth": {},
"Barcode": {},
"Camera": {},
"Geolocation": {}
},
/* */
"distribute": {
/* android */
"android": {
"permissions": [
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>"
]
},
/* ios */
"ios": {
"dSYMs": false,
"idfa": false
},
/* SDK */
"sdkConfigs": {
"geolocation": {
"amap": {
"__platform__": ["android"],
"appkey_ios": "f5577fdddf4f68f92bbde932e9e35bd6",
"appkey_android": "f5577fdddf4f68f92bbde932e9e35bd6"
}
},
"ad": {}
},
"splashscreen": {
"androidStyle": "common",
"useOriginalMsgbox": false,
"iosStyle": "common"
},
"icons": {
"android": {
"hdpi": "unpackage/res/icons/72x72.png",
"xhdpi": "unpackage/res/icons/96x96.png",
"xxhdpi": "unpackage/res/icons/144x144.png",
"xxxhdpi": "unpackage/res/icons/192x192.png"
},
"ios": {
"appstore": "unpackage/res/icons/1024x1024.png",
"ipad": {
"app": "unpackage/res/icons/76x76.png",
"app@2x": "unpackage/res/icons/152x152.png",
"notification": "unpackage/res/icons/20x20.png",
"notification@2x": "unpackage/res/icons/40x40.png",
"proapp@2x": "unpackage/res/icons/167x167.png",
"settings": "unpackage/res/icons/29x29.png",
"settings@2x": "unpackage/res/icons/58x58.png",
"spotlight": "unpackage/res/icons/40x40.png",
"spotlight@2x": "unpackage/res/icons/80x80.png"
},
"iphone": {
"app@2x": "unpackage/res/icons/120x120.png",
"app@3x": "unpackage/res/icons/180x180.png",
"notification@2x": "unpackage/res/icons/40x40.png",
"notification@3x": "unpackage/res/icons/60x60.png",
"settings@2x": "unpackage/res/icons/58x58.png",
"settings@3x": "unpackage/res/icons/87x87.png",
"spotlight@2x": "unpackage/res/icons/80x80.png",
"spotlight@3x": "unpackage/res/icons/120x120.png"
}
}
}
},
"nativePlugins": {
"MT-TTS": {
"__plugin_info__": {
"name": "MT-TTS语音合成",
"description": "安卓tts语音合成",
"platforms": "Android",
"url": "",
"android_package_name": "",
"ios_bundle_id": "",
"isCloud": false,
"bought": -1,
"pid": "",
"parameters": {}
}
},
"Sunmi-Print-Inner": {
"__plugin_info__": {
"name": "Sunmi-Print-Inner",
"description": "商米打印服务uniapp插件",
"platforms": "Android",
"url": "",
"android_package_name": "",
"ios_bundle_id": "",
"isCloud": false,
"bought": -1,
"pid": "",
"parameters": {}
}
},
"LcPrinter": {
"__plugin_info__": {
"name": "LcPrinter",
"description": "打印插件",
"platforms": "Android",
"url": "",
"android_package_name": "",
"ios_bundle_id": "",
"isCloud": false,
"bought": -1,
"pid": "",
"parameters": {}
}
}
}
},
/* */
"quickapp": {},
/* */
"mp-weixin": {
"appid": "wxedb0d10ea46a0113",
"setting": {
"urlCheck": false,
"es6": true,
"ignoreDevUnusedFiles": false,
"lazyCodeLoading": "requiredComponents",
"minified": true
},
"usingComponents": true,
"permission": {
"scope.userFuzzyLocation": {
"desc": "你的位置信息将用于小程序位置接口的效果展示"
},
"scope.userLocation": {
"desc": "你的位置信息将用于小程序位置接口的效果展示"
}
},
"requiredPrivateInfos": ["getLocation"]
},
"mp-alipay": {
"usingComponents": true
},
"mp-baidu": {
"usingComponents": true
},
"mp-toutiao": {
"usingComponents": true
},
"uniStatistics": {
"enable": false
},
"vueVersion": "3"
}
// "custom":false,
/* */
/* */

8
pages.json

@ -854,6 +854,14 @@
"onReachBottomDistance": 1,
"navigationStyle": "custom"
}
},
{
"path": "pages/AddressBook/AddressBook",
"style": {
"navigationBarTitleText": "通讯录",
"onReachBottomDistance": 1,
"navigationStyle": "custom"
}
}
]
},

2
pages/index/index.vue

@ -280,7 +280,7 @@
router: '/pagesHome/pages/integral/integral',
},
{
icon: 'http://8.137.14.82:9000/bladex/upload/20240117/fac9c4fd6c4f0bee599417fc8fbbee62.png',
icon: 'http://htys.oss-cn-chengdu.aliyuncs.com/htys/afb031efec7d2f8620ee68c71f87a80e.png',
name: '我的考核',
router: '/pagesHome/pages/integralMy/integralMy',
},

14
pages/news/news.vue

@ -29,7 +29,7 @@
<view class="align-center">
<!-- <image class="tip" src="@/static/weixin.png" mode=""></image> -->
<text class="title1 ml10">{{item.type}}</text>
<text class="title1 ml10">{{item.categoryName}}</text>
</view>
@ -45,9 +45,10 @@
{{item.title}}
</view>
<view class="text" v-html="item.content">
<!-- 为了让您更好的使用资源平台,我们正在对平台进行升级升级期间暂时无法访问给您带来的不便,敬请谅解 -->
<view class="text">
<rich-text :nodes="item.content"></rich-text>
</view>
</view>
<!-- 查看详情 -->
@ -106,6 +107,13 @@
const initPage = async () => {
const res = await getBasicNoticeList({})
const {
code,
data
} = res
if (code !== 200) return
details.data = data
}
initPage()

3
pages/user/user.vue

@ -162,6 +162,9 @@
}
function checkitem(item) {
if (item.type == 1) {
uni.navigateTo({
url: '/pagesUser/pages/AddressBook/AddressBook'
})
}
//
else if (item.type == 3) {

419
pagesHome/pages/ArrivalList/ArrivalList.vue

@ -97,21 +97,19 @@
</view>
<view class="button-container" v-else-if="item.showControl">
<view class="">
<view class="button" @click="handleDetailsByOrder(item, 1)">
按件入库
</view>
<view class="button" @click="handleDetailsByOrder(item, 1)">
按件入库
</view>
<view class="button" @click="handleDetailsByOrder(item, 2)">
整托入库
</view>
<view class="button" @click="handleDetailsByOrder(item, 2)">
整托入库
</view>
<view class="button" @click="handleScanByTray(item)">
卸分一体
</view>
<view class="button" @click="handleScanByTray(item)">
卸分一体
</view>
<view class="" v-if="item.showTruckLoading">
<template v-if="item.showTruckLoading">
<view class="button" @click="gostockuplist(item)">
按件装车
</view>
@ -119,6 +117,19 @@
<view class="button" @click="gostockuplistBytray(item)">
整托装车
</view>
<view class="button" @click="handleShowLoadImg(item, 'beforeLoad')">
装车前图片
</view>
<view class="button" @click="handleShowLoadImg(item, 'beforeStart')">
发车前图片
</view>
</template>
<view class="button" @click="handleShowLoadImg(item, 'beforeUnload')">
卸车前图片
</view>
</view>
</template>
@ -144,6 +155,29 @@
</BasicContainer>
<!-- 装车前上传 -->
<PopUp ref="LoadUploadImg">
<block v-for="item in details.imgOption" :key="item.title">
<view class="upload_img_item">
<view class="upload_img_item_title">
<view>
{{item.title}}
</view>
<view v-if="item.min" class="ml10" style="color: red; font-weight: normal">
最少{{item.min}}
</view>
</view>
<u-upload :fileList="item.imgArr" @afterRead="(e)=> handleUploadImg(e, item.imgArr)"
@delete="(e)=> deletePic(e, item.imgArr)" multiple></u-upload>
</view>
</block>
</PopUp>
<l-calendar v-model:value="show" :initStartDate='date[0]' :initEndDate='date[1]' @hide='showCalendar'
@change="onConfirm"></l-calendar>
<saomiao2 :ishidestop="scanState !== 0"></saomiao2>
@ -153,7 +187,10 @@
import {
postArriveUnloadPageList,
warehouseTrayTypeorderScanTrayCode,
postArriveCarByLoadId
postArriveCarByLoadId,
postUploadLoadingPhoto,
postUploadStartPhoto,
postUploadUnloadPhoto
} from '@/api/user.js'
import {
onLoad,
@ -162,6 +199,7 @@
} from '@dcloudio/uni-app'
import { computed, nextTick, reactive, ref, toRefs, watchEffect } from "vue";
import utils from '@/utils/utils.js'
import functions from '@/utils/functions.js';
import useSystemSettingsStore from '@/store/useSystemSettingsStore';
import { storeToRefs } from 'pinia';
const { scanState } = storeToRefs(useSystemSettingsStore())
@ -212,6 +250,7 @@
//
const basicContainer = ref()
const LoadUploadImg = ref()
//
let antiShake : any = null
@ -275,7 +314,105 @@
/** 扫描的码值 */
scancode: '',
scrollheight: '80vh',
notRefresh: false
notRefresh: false,
/** 装车上传前配置 */
LoadUploadImgOption: [
{
title: '车厢卫生',
type: '10',
position: '2',
min: 1,
imgArr: []
}
],
/** 发车前上传前配置 */
StartUploadImgOption: [
{
title: '盖雨棚前 - 左',
type: '20',
position: '3',
min: 1,
imgArr: [],
},
{
title: '盖雨棚前 - 右',
type: '20',
position: '4',
min: 1,
imgArr: [],
},
{
title: '盖雨棚前 - 后',
type: '20',
position: '2',
min: 1,
imgArr: [],
},
{
title: '盖雨棚后 - 左',
type: '21',
position: '3',
min: 1,
imgArr: [],
},
{
title: '盖雨棚后 - 右',
type: '21',
position: '4',
min: 1,
imgArr: [],
},
{
title: '盖雨棚后 - 后',
type: '21',
position: '2',
min: 1,
imgArr: [],
},
],
/** 卸车前图片 */
beforeUnloadImgArr: [
{
title: '卸车前车辆照片 - 左',
type: '20',
position: '3',
imgArr: [],
},
{
title: '卸车前车辆照片 - 右',
type: '20',
position: '4',
imgArr: [],
},
{
title: '卸车前车辆照片 - 后',
type: '20',
position: '2',
imgArr: [],
},
{
title: '防护措施 - 左',
type: '21',
position: '3',
imgArr: [],
},
{
title: '防护措施 - 右',
type: '21',
position: '4',
imgArr: [],
},
{
title: '防护措施 - 后',
type: '21',
position: '2',
imgArr: [],
},
],
imgOption: [],
/** 已上传的图片 */
oldImgArr: []
})
const carStateDictionaries = reactive([
@ -515,6 +652,198 @@
})
}
const handleInitImg = (data, imgArr, cloneList) => {
if (utils.getObjType(data) !== 'array') return
if (utils.getObjType(imgArr) !== 'array') return
if (utils.getObjType(cloneList) !== 'array') return
console.log('imgArr :>> ', imgArr);
console.log('cloneList :>> ', cloneList);
for (let i = 0; i < data.length; i++) {
const value = data[i]
for (let i = 0; i < imgArr.length; i++) {
const item = imgArr[i]
if (item.type + ' - ' + item.position !== value.type + ' - ' + item.position) continue
item.imgArr.push({ url: value.url })
cloneList.push({ url: value.url })
break
}
}
}
/** 显示装车前上传图片 */
const handleShowLoadImg = (item, type) => {
const _oldImgArr = []
let title = ''
const { carsLoadLinePhotoEntities } = item
switch (type) {
case 'beforeLoad':
details.imgOption = utils.deepClone(details.LoadUploadImgOption)
title = '装车前照片'
break;
case 'beforeStart':
details.imgOption = utils.deepClone(details.StartUploadImgOption)
title = '发车前照片'
break;
case 'beforeUnload':
details.imgOption = utils.deepClone(details.beforeUnloadImgArr)
title = '卸车前照片'
break
default:
break;
}
handleInitImg(carsLoadLinePhotoEntities, details.imgOption, _oldImgArr)
LoadUploadImg.value.setDetails({
title,
showPopUp: true,
async success() {
const submitData = {
loadId: item.id,
addUrlList: [],
removeUrlList: []
}
for (let i = 0; i < details.imgOption.length; i++) {
const value = details.imgOption[i]
console.log('value :>> ', value);
if (value.imgArr.length < value.min) return utils.handleToast(`${value.title}最少上传${value.min}`)
for (let i = 0; i < value.imgArr.length; i++) {
const item = value.imgArr[i]
let isContinue = false
for (let i = 0; i < _oldImgArr.length; i++) {
const _val = _oldImgArr[i]
if (_val.url !== item.url) continue
isContinue = true
_oldImgArr.splice(i, 1)
break
}
if (isContinue) continue
submitData.addUrlList.push({
type: value.type,
position: value.position,
url: item.url
})
}
}
for (let i = 0; i < _oldImgArr.length; i++) {
const value = _oldImgArr[i]
submitData.removeUrlList.push(value.id)
}
let res : any = {}
switch (type) {
case 'beforeLoad':
res = await postUploadLoadingPhoto(submitData)
break;
case 'beforeStart':
res = await postUploadStartPhoto(submitData)
break;
case 'beforeUnload':
res = await postUploadStartPhoto(submitData)
break;
default:
break;
}
const { code, msg } = res
if (code !== 200) return
utils.handleToast(msg)
LoadUploadImg.value.details.showPopUp = false
basicContainer.value.startPullDownRefresh()
}
})
}
/** 上传图片 */
const handleUploadImg = async (event, imgArr) => {
try {
uni.showLoading({
title: '上传中',
mask: true
})
const writeArr = ['jpg', 'jpeg', 'png']
const PromiseAll = []
for (let i = 0; i < event.file.length; i++) {
const item = event.file[i]
console.log('item :>> ', item);
// const type = item.name.split('.').slice(-1)[0]
let type = ''
item.url && (type = item.url.split('.').slice(-1)[0])
item.name && (type = item.name.split('.').slice(-1)[0])
if (writeArr.indexOf(type) === -1) continue
console.log('type :>> ', type);
PromiseAll.push(functions.upfile(item.url, false))
}
const res = await Promise.all(PromiseAll)
console.log('res :>> ', res);
for (let i = 0; i < res.length; i++) {
const response = res[i]
const { link } = response
if (!link) continue
imgArr.push({ url: link })
}
} catch (err) {
console.log('err :>> ', err);
//TODO handle the exception
} finally {
uni.hideLoading()
}
console.log('event :>> ', event);
}
/** 删除图片 */
const deletePic = (event, imgArr) => {
console.log('event :>> ', event);
imgArr.splice(event.index, 1)
}
const {
show,
datatime,
@ -524,8 +853,6 @@
</script>
<style lang="scss" scoped>
@import url(@/utils/style/common.scss);
.inputsr {
width: 100%;
height: 64upx;
@ -663,13 +990,13 @@
.button-container {
border-top: 4upx solid #eee;
padding-top: 10upx;
display: flex;
flex-wrap: wrap;
>view {
display: flex;
.button {
margin-right: 20upx;
}
.button {
margin-right: 20upx;
}
}
@ -686,6 +1013,58 @@
}
}
//
:deep(.u-upload__button) {
width: 4.5rem !important;
height: 4.5rem !important;
.u-icon__icon {
font-size: 1.5rem !important;
line-height: 1.5rem !important;
}
}
:deep(.u-upload__wrap__preview__image) {
width: 4.5rem !important;
height: 4.5rem !important;
}
:deep(.u-upload__deletable) {
width: 36upx;
height: 36upx;
.u-icon__icon {
font-size: 28upx !important;
line-height: 28upx !important;
}
}
:deep(.popUpMask) {
z-index: 99;
}
//
.upload_img_item {
.upload_img_item_title {
margin: 20upx 0;
font-weight: bold;
color: var(--subjectColor);
display: flex;
align-items: center;
&::before {
content: '';
width: 4upx;
height: 1rem;
background-color: var(--subjectColor);
margin-right: 20upx;
}
}
}
.w100 {
width: 100%;
}

106
pagesHome/pages/OrderSortingDetail/OrderSortingDetail.vue

@ -65,7 +65,7 @@
<view @click.stop="print" class="submitBtn flex-c-c rem-0-9" hover-class="clickClass">
<u-icon name="file-text-fill" color="#fff" size="36" />
<text class="ml10">
打印清单
</text>
</view>
</view>
@ -243,10 +243,18 @@
</view>
</view>
<!-- 零担/库存品继续录入 -->
<template v-if="details.tabBarState !== 1">
<view class="buts" @click="setshowstate(details.tabBarState)">继续录入</view>
</template>
<view class="footer">
<view class="footer_container flex">
<view class="button" @click="handleCreateTray">
打印托盘码
</view>
<!-- 零担/库存品继续录入 -->
<template v-if="details.tabBarState !== 1">
<view class="button" @click="setshowstate(details.tabBarState)">继续录入</view>
</template>
</view>
</view>
<template v-if="details.showstate !== 0">
<view class="tanchuangbg" @click="setshowstate(0)" @touchmove.stop v-if="showstate !== 0">
@ -569,6 +577,7 @@
title: '提示',
content: '确认删除该订单与托盘码的绑定?',
confirmTxt: '确认',
cancelTxt: '取消',
isshow: true,
isshowcancel: true,
success: async () => {
@ -598,6 +607,7 @@
title: '提示',
content: '确认删除该订单和托盘的绑定?',
confirmTxt: '确认',
cancelTxt: '取消',
isshow: true,
isshowcancel: true,
success: async () => {
@ -627,6 +637,7 @@
isshow: true,
content: '确认删除该数据?',
confirmTxt: '删除',
cancelTxt: '取消',
success: async () => {
let data = {
trayGoodsId: item.trayGoodsId,
@ -1213,6 +1224,52 @@
})
}
/** 生成新托盘 */
const handleCreateTray = () => {
tip.value.setdetails({
isshow: true,
title: '提示',
content: '是否打印并分拣',
isshowcancel: true,
cancelTxt: '取消',
confirmTxt: '打印',
success: () => {
// #ifdef APP
const handlePrint = () => {
let text = '! 0 200 200 333 1\r\n'
text += 'SETBOLD 1\r\n'
text += `T 56 0 140 0 托盘码\r\n`
text += 'B QR 140 60 M 4 U 4\r\n'
text += `MA,${detauser.value?.trayCode}\r\n`
text += 'ENDQR\r\n'
text += `T 56 0 40 200 托盘码: ${detauser.value?.trayCode}\r\n`
text += `T 56 0 40 240 托盘名称: ${detauser.value?.trayName}\r\n`
text += 'FORM\r\n'
text += 'PRINT\r\n'
const res = utils.getbl(bluetoothInfo.value, text)
res.catch(() => {
bluetoothList.value.setdetails({ isshow: true, success() { handlePrint() } })
})
}
if (!bluetoothInfo.value.name) return bluetoothList.value.setdetails({ isshow: true, success() { handlePrint() } })
handlePrint()
// #endif
tip.value.setdetails({ isshow: false })
},
cancel: () => {
tip.value.setdetails({ isshow: false })
},
close: () => tip.value.setdetails({ isshow: false })
})
}
const { datelist, detauser, showstate, waybillCode, checkinarr, Remarktext, codelist } =
toRefs(details)
</script>
@ -1255,7 +1312,7 @@
min-width: 50%;
flex: none;
font-size: 0.8rem;
padding: 5upx;
padding: 10upx;
box-sizing: border-box;
}
}
@ -1822,4 +1879,41 @@
}
}
}
//
.footer {
$height: 120upx;
height: $height;
.footer_container {
height: inherit;
position: fixed;
width: 100vw;
// background-color: #fff;
bottom: 0;
right: 0;
padding: 10upx 40upx 0;
box-sizing: border-box;
.button {
$buttonHeight: 80upx;
height: $buttonHeight;
line-height: $buttonHeight;
background-color: var(--subjectColor);
color: #fff;
flex: 1;
margin: 0 auto;
text-align: center;
border-radius: calc($buttonHeight / 2);
box-shadow: 0 10upx 5upx 0upx #d3832a60;
margin-left: 20upx;
&:first-child {
margin-left: 0;
background-color: var(--primaryColor);
box-shadow: 0 10upx 5upx 0upx #0086f160;
}
}
}
}
</style>

14
pagesHome/pages/PeopleScanUp/PeopleScanUp.vue

@ -7,6 +7,14 @@
<image src="/pagesHome/static/scanqc.png"></image>
<view>请直接扫描库位码</view>
</view>
<!-- <view class="flex position-r">
<input type="text" v-model="details.scancode" />
<view class="" @click="scandata">
搜索
</view>
</view> -->
<view class="topviewbox">
<view class="oebox">
<image src="/pagesHome/static/changku.png"></image>
@ -672,7 +680,9 @@
// })
}
})
details.uplistarr = fn2(details.uplistarr, 'materialCode,incomingBatch')
details.uplistarr = fn2(details.uplistarr, ['1', '2'].includes(details.upshelfScanType + '') ? 'orderCode' : 'materialCode,incomingBatch')
console.log('details.uplistarr :>> ', details.uplistarr);
details.showstate = 0
details.codelist = []
details.waybillCode = ''
@ -859,6 +869,8 @@
let result = [];
tempArr.map((item) => {
item.goodsType = fnname === 'orderCode' ? 2 : 3
if (result.length == 0) {
item.enterNum = Number(item.enterNum)
result.push(item)

105
pagesHome/pages/PickingScanList/PickingScanList.vue

@ -2,25 +2,12 @@
<BasicContainer ref="basicContainer" :option="option" :leftClick="backPreviousPage">
<template #head>
<view class="hedtopt">
<!-- <view class="topBox">
<input type="text" v-model="details.searchValue" class="searchInput" placeholder="请输入库位名称" />
<view class="button" @click="handleSearch">搜索</view>
</view> -->
<view class="typto">
<view class="align-center">
<text>
当前备货区域
</text>
<!-- <text class="vibx">{{items.stockupArea}}</text> -->
<text class="vibx">{{details.stockUpStorageInfo.stockupAllocationName}}</text>
</view>
</view>
<view class="typto">
<view>备货编码{{items.stockupCode}}</view>
</view>
<view class="typto">
<view>备货状态{{items.stockupStatusStr}}</view>
<view>备货类型{{items.typeServiceStr}}</view>
<view>备货状态{{items.stockupStatusName}}</view>
<view>备货类型{{items.deliveryTypeName}}</view>
</view>
</view>
</template>
@ -31,40 +18,32 @@
<template v-if="datalist.length !== 0">
<view class="its" @click="goCustomerOrdersDetails(item)" v-for="item in datalist" :key="item">
<view class="titl">
客户{{item.customer}}
客户{{item.consignee}}
</view>
<view class="contsx">
<view class="content">
<view><text style="color: #90A0AF;">备货是否完成</text>{{item.stockStatusName}}</view>
<view><text style="color: #90A0AF;">备货类型</text>{{item.typeServiceStr}}</view>
<!-- <view><text style="color: #90A0AF;">备货是否完成</text>{{item.stockStatusName}}</view> -->
<view><text style="color: #90A0AF;">备货类型</text>{{item.deliveryTypeName}}</view>
</view>
<view class="content mt10">
<view><text style="color: #90A0AF;">商场名称</text>{{item.mallName || '暂无数据'}}</view>
<view><text style="color: #90A0AF;">商场名称</text>{{item.marketName || '暂无数据'}}</view>
</view>
<view class="total mt10">
<view>
<view>订单总数</view>
<view>{{item.orderNum}}</view>
<view>{{item.orderNum ||0}}</view>
</view>
<!-- <view>
<view>定制品数</view>
<view>{{item.planNum || 0}}</view>
</view> -->
<!-- <view>
<view>零担数</view>
<view>{{item.planNum || 0}}</view>
</view> -->
<view>
<view>库存品数量</view>
<view>{{item.inventoryNub || 0}}</view>
<view>{{item.inventoryNum || 0}}</view>
</view>
<view>
<view>计划件数</view>
<view>{{item.planNum + item.inventoryNub}}</view>
<view>{{item.planNum || 0 }}</view>
</view>
<view>
<view>已备数量</view>
<view>{{item.stockupNum || 0}}</view>
<view>{{item.scanNum || 0}}</view>
</view>
</view>
</view>
@ -82,6 +61,7 @@
<script lang="ts" setup>
import {
distributionStockupNewClientDetail,
distributionStockuppageListClient,
postUpShelfScanAllocation
} from '@/api/user.js'
@ -120,7 +100,8 @@
}
let details = reactive({
id: '',
/** 备货任务id */
stockupId: '',
datalist: [],
items: {} as any,
scancode: '',
@ -138,9 +119,7 @@
})
const tip = ref(null)
onLoad((op) => {
details.id = op.id
details.stockupArea = op.stockupArea
// details.items=JSON.parse(op.item)
details.stockupId = op.stockupId
// #ifdef APP
// utils.ttsspke('')
// #endif
@ -163,29 +142,36 @@
//
async function initpage() {
let data = {
stockupId: details.id
let submitData = {
stockupId: details.stockupId
}
let response = await distributionStockuppageListClient(data)
if (response.code !== 200) return
let response = await distributionStockupNewClientDetail(submitData)
// const response = await distributionStockuppageListClient(submitData)
const { code, data } = response
if (code !== 200) return
details.datalist = []
if (response.data && response.data.orderList) details.datalist = response.data.orderList.map(val => {
val.inventoryNub = val.inventoryNub !== 0 ? val.inventoryNub : 0
val.planNum = val.planNum !== 0 ? val.planNum : 0
return val
})
details.items = response.data
console.log('data :>> ', data);
details.items = data.data[0]
details.datalist = data.data[0].stockUpClientVOList
// details.datalist = data.orderList
}
function goCustomerOrdersDetails(item) {
// if (!details.stockUpStorageInfo.stockupAllocationId) return utils.handleToast('')
uni.navigateTo({
url: '/pagesHome/pages/StockUplist/StockUplist?item='
+ JSON.stringify(item) + '&id=' + item.reservationId
+ '&stockupId=' + details.id
+ '&stockupAllocationId=' + details.stockUpStorageInfo.stockupAllocationId
+ '&stockupAllocationName=' + details.stockUpStorageInfo.stockupAllocationName
// url: '/pagesHome/pages/StockUplist/StockUplist?item='
// + JSON.stringify(item) + '&id=' + item.reservationId
// + '&stockupId=' + details.stockupId
// + '&stockupAllocationId=' + details.stockUpStorageInfo.stockupAllocationId
// + '&stockupAllocationName=' + details.stockUpStorageInfo.stockupAllocationName
url: '/pagesHome/pages/StockUplist/StockUplist?reservationId='
+ item.reservationId + '&typeService=' + item.typeService + '&stockupId=' + details.stockupId
})
}
const { items, datalist } = toRefs(details)
@ -225,25 +211,6 @@
})
}
/** 搜索 */
const handleSearch = async () => {
details.scancode = details.searchValue
scandata()
// try {
// uni.showLoading()
// const submitData = { fragment: details.searchValue }
// const res = await distributionInspectStockUpArea(submitData)
// const { code, data } = res
// console.log('data :>> ', data);
// } catch (e) {
// //TODO handle the exception
// } finally {
// uni.hideLoading()
// }
}
//
function backPreviousPage() {
uni.navigateBack()

345
pagesHome/pages/StockUplist/StockUplist.vue

@ -4,16 +4,14 @@
<view class="head">
<view class="type1">
<view>客户{{user.consignee}}</view>
<view>当前库位{{user.goodsAreaName }}</view>
<view>当前库位{{user.marketName }}</view>
</view>
<view class="type1">
<view>计划件数{{user.planNum || 0}}</view>
<view>备货件数{{user.scanNum || 0}}</view>
</view>
<!-- <view>
<view class="button" @click="handleShowChangeStorage">切换库位</view>
</view> -->
</view>
<view class="tabtip">
<view @click="setorderStatus(1)">
<view :class="orderStatus==1?'xz':''">定制品</view>
@ -34,22 +32,25 @@
<view class="item" v-if="orderStatus==1" v-for="item in orderList">
<view class="toptitl">
<view class="toplft">
库位{{item.allocation}}
订单{{item.orderCode}}
</view>
<view class="tis bf">
按件扫描
</view>
</view>
<view class="boxcontt">
<view>
<view><text style="color: #90A0AF;">托盘号</text>{{item.pallet}}</view>
<view><text style="color: #90A0AF;">托盘名称</text>{{item.trayLeanName}}</view>
<view class="">
<view @click.stop="goorderdetail(item)"><text
style="color: #90A0AF;">运单号</text>{{item.waybillNumber}}
</view>
</view>
<view class="">
<view @click.stop="goorderdetail(item)"><text
style="color: #90A0AF;">订单自编码</text>{{item.orderCode}}
style="color: #90A0AF;">库位名称</text>{{item.allocationNames}}
</view>
</view>
<view>
<view><text style="color: #90A0AF;">计划件数</text>{{item.planNum || 0}}</view>
<view><text style="color: #90A0AF;">扫描件数</text>{{item.scanNum || 0}}</view>
@ -63,21 +64,10 @@
<view class="anj" @click="godetails(item)">
{{item.completeStact?'查看明细':'按件备货扫码'}}
</view>
<!-- <view class="anj" @click="godetails(item)" v-else>
查看明细
</view> -->
</view>
</view>
<!-- 库存品 -->
<view class="item" v-if="orderStatus==2" v-for="item in stockList">
<!-- <view class="toptitl">
<view class="toplft">
库位号{{item.allocation}}
</view>
<view :class="item==3?'tis bf':'tis'">
整托备货
</view>
</view> -->
<view class="boxcontt">
<view>
<view>
@ -88,11 +78,10 @@
<view><text style="color: #90A0AF;">物品</text>{{item.materialName}}</view>
</view>
<view>
<view><text style="color: #90A0AF;">SKU</text>{{item.sku}}</view>
<view><text style="color: #90A0AF;">规格</text>{{item.cargoNorms}}</view>
<view><text style="color: #90A0AF;">物料编码</text>{{item.cargoNumber}}</view>
</view>
<view>
<view><text style="color: #90A0AF;">物料编码</text>{{item.cargoNumber}}</view>
<view><text style="color: #90A0AF;">规格</text>{{item.cargoNorms}}</view>
<view><text style="color: #90A0AF;">单位</text>{{item.cargoUnit}}</view>
</view>
<view>
@ -101,12 +90,13 @@
</view>
</view>
<view class="buttts" v-if="Number(item.realNum) < Number(item.planNum)">
<view class="anj" @click="goBarCode(item)">
<view class="anj" @click="()=>handleCreatePackage(item)">
配置包条码
</view>
<!-- <view class="anj">
拆包
</view> -->
<view class="anj" @click="goBarCode(item)">
备货扫描
</view>
</view>
</view>
<!-- 零担 -->
@ -125,21 +115,18 @@
<view><text style="color: #90A0AF;">扫描件数</text>{{item.scanNum || 0}}</view>
</view>
</view>
<view class="buttts">
<!-- <view class="anj" @click="showZeroOrderDetails(item)">
{{item.completeStact?'查看明细':'去备货'}}
</view> -->
<view class="buttts" v-if="item.planNum !== item.scanNum">
<!-- <view class="anj" @click="printOrderCode(item)">
打印订单号
</view> -->
<view class="anj" @click="handleStockUpByZero(item)">
{{item.completeStact?'查看明细':'去备货'}}
备货
</view>
</view>
</view>
</template>
<!-- <up-button type="primary" text="确定"></up-button> -->
</view>
</scroll-view>
</template>
@ -148,9 +135,70 @@
<saomiao2 :ishidestop="scanState !== 0"></saomiao2>
<BluetoothList ref="bluetoothList"></BluetoothList>
<!-- 切换库位 -->
<PopUp ref="ChangeStorage">
<view class="PopUpTitle">请扫描库位码</view>
<!-- 零担备货 -->
<PopUp ref="StockupZero">
<view class="mt20 ">
<view>
订单号{{details.zeroItem.orderCode}}
</view>
</view>
<view class="mt20 ">
<view>
货物名称{{details.zeroItem.categoryName}}
</view>
</view>
<view class="mt20 flex-c-sb">
<view>
计划数{{details.zeroItem.planNum}}
</view>
<view>
已备数{{details.zeroItem.scanNum}}
</view>
<view>
剩余数{{details.zeroItem.maxNum}}
</view>
</view>
<view class="mt20 flex-c-c">
<view>
备货数
</view>
<view class="flex1">
<InputNum v-model="details.zeroItem.enterNum" :maxNum="details.zeroItem.maxNum"></InputNum>
</view>
</view>
</PopUp>
<!-- 库存品生成包条 -->
<PopUp ref="CreateStockPopup">
<view class="mb20 mt20" style="word-break: break-all;">
物料名称
<view class="">
{{details.stockItem.materialName}}
</view>
</view>
<view class="mb20 flex-c-sb">
<view>
计划数{{details.stockItem.planNum}}
</view>
<view>
已备数{{details.stockItem.realNum}}
</view>
<view>
剩余数{{details.stockItem.maxNum}}
</view>
</view>
<InputNum v-model="details.stockItem.enterNum" :maxNum="details.stockItem.maxNum"></InputNum>
</PopUp>
</template>
@ -166,11 +214,13 @@
detailType,
} from '@/interfaces/pagesHome/StockUplist'
import {
distributionStockuporderList,
distributionStockupNewOrderList,
distributionStockupscanningCode,
postZeroStockUpData,
postZeroStockUp,
distributionScanStockUpArea
distributionScanStockUpArea,
distributionStockupstockupScan,
postInventoryPackageConfig
} from '@/api/user.js'
import { reactive, toRefs, ref, inject, onMounted, nextTick } from "vue";
import useBluetoothStore from '@/store/useBluetoothStore.js';
@ -184,8 +234,9 @@
//
const tiplists = ref(null)
const basicContainer = ref(null)
/** 切换库位 */
const ChangeStorage = ref(null)
const StockupZero = ref()
/** 库存品生成包条 */
const CreateStockPopup = ref()
//
const option = {
title: '备货列表',
@ -197,6 +248,7 @@
//
let details = reactive({
reservationId: '',
typeService: '',
orderList: [],
//
zeroOrderList: [],
@ -227,14 +279,17 @@
stockupAllocationId: '',
/** 备货库位名称 */
stockupAllocationName: '',
/** 零担备货数据 */
zeroItem: {},
/** 库存品生成包条 */
stockItem: {}
})
onLoad((op) => {
console.log('op :>> ', op);
details.reservationId = op.id
details.reservationId = op.reservationId
details.typeService = op.typeService
details.stockupId = op.stockupId
details.stockupAllocationId = op.stockupAllocationId
details.stockupAllocationName = op.stockupAllocationName
details.items = JSON.parse(op.item)
const _tts = ['定制品拣货', '库存品拣货', '零担拣货']
utils.ttsspke(_tts[details.orderStatus - 1])
@ -277,50 +332,31 @@
async function initpage() {
console.log(details.items);
let data = {
// 1, 0
isZero: 0,
orderStatus: details.orderStatus,
reservationId: details.reservationId,
typeService: details.items.typeService,
stockupId: details.stockupId,
mallName: details.items.mallName
}
// , isZero
if (details.orderStatus === 3) {
data.orderStatus = 1
data.isZero = 1
typeService: details.typeService,
}
details.orderList = []
let response = await distributionStockuporderList(data)
let response = await distributionStockupNewOrderList(data)
if (response.code !== 200) return
console.log('response :>> ', response);
console.log('details.orderStatus :>> ', details.orderStatus);
details.user.consignee = response.data?.consignee
details.user.goodsAreaName = response.data?.goodsAreaName
details.orderList = response.data?.orderList || []
details.stockList = response.data?.stockList || []
if (details.orderStatus === 3) details.zeroOrderList = response.data?.orderList || []
details.user.planNum = response.data?.planNum
details.user.scanNum = response.data?.scanNum
details.user = response.data
details.orderList = response.data?.stockUpOrderDetailVOList || []
details.stockList = response.data?.stockUpInventoryDetailVOList || []
details.zeroOrderList = response.data?.stockUpZeroOrderDetailVOList || []
details.isscan = false
return null
}
//
function godetails(item : any) {
uni.navigateTo({
url: '/pagesHome/pages/StockUplistScandetails/StockUplistScandetails?stockArticleId='
+ (item.stockArticleId || '')
+ '&orderStatus=' + details.orderStatus
url: '/pagesHome/pages/StockUplistScandetails/StockUplistScandetails?orderId='
+ (item.orderId || '')
+ '&reservationId=' + details.reservationId
+ '&allocation=' + item.allocation
+ '&pallet=' + item.pallet
+ '&orderCode=' + item.orderCode
+ '&stockupId=' + details.stockupId
+ '&allocationId=' + item.allocationId
+ '&typeService=' + details.items.typeService
+ '&status=' + (item.completeStact ? '1' : '0')
+ '&stockupAllocationId=' + details.stockupAllocationId
+ '&stockupAllocationName=' + details.stockupAllocationName
+ '&typeService=' + details.typeService
})
}
@ -367,14 +403,10 @@
uni.setStorageSync('setbarcodeInfo', item)
return uni.navigateTo({
url: '/pagesHome/pages/setbarcode/setbarcode?reservationId=' + details.reservationId
+ '&goodsAreaName=' + details.user.goodsAreaName
+ '&stockupId=' + details.stockupId
+ '&typeService=' + details.items.typeService
+ '&typeService=' + details.typeService
+ '&allocationId=' + item.allocationList[0].id
+ '&positionCode=' + item.allocationList[0].name
+ '&mallName=' + details.items.mallName
+ '&stockupAllocationId=' + details.stockupAllocationId
+ '&stockupAllocationName=' + details.stockupAllocationName
})
}
details.isChooseStorage = true
@ -403,14 +435,10 @@
uni.setStorageSync('setbarcodeInfo', item)
uni.navigateTo({
url: '/pagesHome/pages/setbarcode/setbarcode?reservationId=' + details.reservationId
+ '&goodsAreaName=' + details.user.goodsAreaName
+ '&stockupId=' + details.stockupId
+ '&typeService=' + details.items.typeService
+ '&typeService=' + details.typeService
+ '&allocationId=' + item.allocationList[_index].id
+ '&positionCode=' + item.allocationList[_index].name
+ '&mallName=' + details.items.mallName
+ '&stockupAllocationId=' + details.stockupAllocationId
+ '&stockupAllocationName=' + details.stockupAllocationName
})
details.isChooseStorage = false
tiplists.value.setdetails({ isshow: false })
@ -426,20 +454,6 @@
})
}
/** 扫描库位 */
const scanStorage = async () => {
try {
uni.showLoading()
const res = await distributionScanStockUpArea({ stockUpAreaCode: details.scancode })
const { code, data } = res
if (code !== 200) return
} catch (err) {
console.log('err :>> ', err);
//TODO handle the exception
} finally {
uni.hideLoading()
}
}
/** 扫描定制品 */
const scanOrder = async () => {
@ -486,14 +500,10 @@
uni.setStorageSync('setbarcodeInfo', details.chooseItem)
uni.navigateTo({
url: '/pagesHome/pages/setbarcode/setbarcode?reservationId=' + details.reservationId
+ '&goodsAreaName=' + details.user.goodsAreaName
+ '&stockupId=' + details.stockupId
+ '&typeService=' + details.items.typeService
+ '&typeService=' + details.typeService
+ '&allocationId=' + _item.id
+ '&positionCode=' + _item.name
+ '&mallName=' + details.items.mallName
+ '&stockupAllocationId=' + details.stockupAllocationId
+ '&stockupAllocationName=' + details.stockupAllocationName
})
}
@ -502,8 +512,6 @@
* */
async function scandata() {
scanOrder()
// if (!details.goodsStockupAllocationId || details.isChangeStorage) scanStorage()
// else scanOrder()
}
/**
@ -517,7 +525,7 @@
}
//
let data = {
typeService: details.items.typeService,
typeService: details.typeService,
stockupId: details.stockupId,
allocationId: item.allocationId,
orderCode: item.orderCode,
@ -583,7 +591,7 @@
if (deta.inpList.length === 0 || item.completeStact) return tiplists.value.setdetails({ isshow: false })
let data : any = {
reservationId: details.reservationId,
typeService: details.items.typeService,
typeService: details.typeService,
stockupId: details.stockupId,
orderCode: deta.inpList[0].orderCode,
stockArticleId: deta.inpList[0].stockArticleId,
@ -728,39 +736,114 @@
})
}
/** 显示切换库位弹窗 */
const handleShowChangeStorage = () => {
details.isChangeStorage = true
ChangeStorage.value.setDetails({
title: '切换备货区域',
/** 零担备货 */
const handleStockUpByZero = (item) => {
console.log('item :>> ', item);
details.zeroItem = {
...item,
scanNum: utils.isNumber(item.scanNum) ? Number(item.scanNum) : 0,
planNum: utils.isNumber(item.planNum) ? Number(item.planNum) : 0,
enterNum: 0
} as any
details.zeroItem.maxNum = details.zeroItem.planNum - details.zeroItem.scanNum
StockupZero.value.setDetails({
showPopUp: true,
success() {
ChangeStorage.value.details.showPopUp = false
details.isChangeStorage = false
},
close() {
ChangeStorage.value.details.showPopUp = false
details.isChangeStorage = false
title: '零担备货',
async success() {
const { enterNum, maxNum } = details.zeroItem as any
if (!utils.isNumber(enterNum)) return utils.handleToast('请输入数字')
if (enterNum <= 0) return utils.handleToast('请输入大于0的值')
if (enterNum > maxNum) return utils.handleToast('不能大于已备数量')
let submitData = {
scanType: 3,
reservationId: details.reservationId,
stockupId: details.stockupId,
typeService: details.typeService,
orderId: item.orderId,
packageNum: enterNum
}
let res = await distributionStockupstockupScan(submitData)
const { code, data } = res
if (code !== 200) return
StockupZero.value.setDetails({ showPopUp: false })
basicContainer.value.startPullDownRefresh()
}
})
}
/** 零担备货 */
const handleStockUpByZero = (item) => {
console.log('item :>> ', item);
/** 生成包条码 */
const handleCreatePackage = (item) => {
details.stockItem = {
...item,
scanNum: utils.isNumber(item.scanNum) ? Number(item.scanNum) : 0,
realNum: utils.isNumber(item.realNum) ? Number(item.realNum) : 0,
enterNum: 0
}
uni.navigateTo({
url: '/pagesHome/pages/StockUplistByZero/StockUplistByZero?info=' + JSON.stringify({
typeService: details.items.typeService,
stockupId: details.stockupId,
orderCode: item.orderCode,
stockArticleId: item.stockArticleId,
reservationId: details.reservationId,
stockupAllocationId: details.stockupAllocationId,
stockupAllocationName: details.stockupAllocationName
})
details.stockItem.maxNum = details.stockItem.planNum - details.stockItem.realNum
CreateStockPopup.value.setDetails({
showPopUp: true,
title: '生成包条码',
async success() {
const submitData = {
typeService: details.typeService,
packageNum: details.stockItem.enterNum,
descriptionGoods: item.materialName,
reservationId: details.reservationId
}
const { enterNum, maxNum } = details.stockItem as any
if (!utils.isNumber(enterNum)) return utils.handleToast('请输入数字')
if (enterNum <= 0) return utils.handleToast('请输入大于0的值')
if (enterNum > maxNum) return utils.handleToast('不能大于已备数量')
const res = await postInventoryPackageConfig(submitData)
const { code, data } = res
if (code !== 200) return
let _isReturn = false
data.forEach(value => {
// const util=(inject('utils') as any)
let text = '! 0 200 200 333 1\r\n'
text += 'SETBOLD 2\r\n'
text += `T 56 0 0 0 ${value}\r\n`
text += 'LINE 0 50 420 50 3\r\n'
text += `T 55 0 0 60 客户\r\n`
text += 'LINE 40 50 40 110 3\r\n'
text += `T 55 0 50 60 ${value.clientName}\r\n`
text += 'LINE 40 80 420 80 3\r\n'
text += `T 55 0 50 90 ${value.address}\r\n`
text += 'LINE 0 110 420 110 3\r\n'
text += `T 55 0 0 120 物料\r\n`
text += 'LINE 40 110 40 140 3\r\n'
text += `T 55 0 60 120 ${item.materialName}\r\n`
text += 'LINE 0 140 420 140 3\r\n'
text += 'B QR 150 150 M 2 U 4\r\n'
text += `MA,${value.orderPackageCode}\r\n`
text += 'ENDQR\r\n'
text += 'PRINT\r\n'
utils.getbl(bluetoothInfo.value, text).catch(() => {
bluetoothList.value.setdetails({ isshow: true })
_isReturn = true
})
})
if (_isReturn) return
}
})
}
const { user, orderList, orderStatus, stockList, zeroOrderList } = toRefs(details)
</script>

225
pagesHome/pages/StockUplistScandetails/StockUplistScandetails.vue

@ -4,58 +4,29 @@
<template #head>
<view class="head">
<view class="type1">
<view>客户{{ details.customer }}</view>
<view>备货区域{{ details.stockupArea }}</view>
<view>客户{{ details.info.consignee }}</view>
</view>
<view class="type1">
<view>计划件数{{ details.planNum }}</view>
<view>扫描件数{{ details.scanNum }}</view>
<view>商场{{ details.info.marketName }}</view>
</view>
<view class="type1">
<view>库位号{{ details.warehouseArea }}</view>
<view>托盘码{{ details.trays }}</view>
</view>
<!-- <view class="type1">
<view>
容器件数300
</view>
<view>
计划件数300
</view>
</view> -->
<view class="type2">
<view>
<!-- 完成件数1 -->
</view>
<!-- <view>
<view>备货托盘</view>
<view>
绑定托盘
</view>
</view> -->
<view>计划件数{{ details.info.planNum }}</view>
<view>扫描件数{{ details.info.scanNum }}</view>
</view>
</view>
</template>
<template #body>
<view class="butbox">
<scroll-view scroll-y="true" class="scrollv">
<view class="mabxs">
<view class="ite" @click="showsdqs" v-for="item in dataList">
<view>
<view @click.stop="goorderdetail(item)">订单号{{ item.orderCode }}</view>
<view>包条码{{ item.packageBarCode }}</view>
</view>
<view>
<view>货物类型{{ item.goodsType == 1 ? '定制品' : '' }}</view>
<view>是否备货{{ item.isScanStr }}</view>
</view>
<view style="flex: 1">
<view style="flex: 1">物料名称{{ item.materialName }}</view>
</view>
</view>
</view>
</scroll-view>
<view class="mabxs">
<view class="ite" @click="showsdqs" v-for="item in dataList">
<view class="mb10" @click.stop="goorderdetail(item)">订单号{{ item.orderCode }}</view>
<view class="mb10">包条码{{ item.orderPackageCode }}</view>
<view>备货状态{{ item.stockupStatusName }}</view>
</view>
</view>
<view class="footer">
<view class="prtbut" @click="prinbut">打印</view>
</view>
</template>
@ -70,7 +41,7 @@
<script lang="ts" setup>
import { onLoad, onShow, onHide, onUnload, onPullDownRefresh } from '@dcloudio/uni-app'
import { distributionStockuporderInfo, distributionStockupstockupScan } from '@/api/user.js'
import { distributionStockupPackageDetail, distributionStockupstockupScan } from '@/api/user.js'
import { detailType } from '@/interfaces/pagesHome/StockUplistScandetails'
import { reactive, ref, toRefs, inject } from 'vue'
import utils from '@/utils/utils'
@ -94,48 +65,27 @@
return await initpage()
},
})
let details = reactive<detailType>({
let details = reactive({
dataList: [],
stockArticleId: '',
orderStatus: '',
reservationId: '',
stockListId: '',
allocation: '',
pallet: '',
customer: '',
stockupArea: '',
planNum: '',
scanNum: '',
stockupId: '',
orderId: '',
typeService: '',
info: {
customer: '',
planNum: 0,
scanNum: 0,
},
trays: '',
warehouseArea: '',
orderCode: '',
scancode: '',
stockupId: '',
address: '',
isscan: false,
allocationId: '',
status: '',
typeService: '',
/** 备货库位ID */
stockupAllocationId: '',
/** 备货库位名称 */
stockupAllocationName: '',
})
const tiplists = ref(null)
onLoad(op => {
details.stockArticleId = op.stockArticleId
details.status = op.status
details.stockupId = op.stockupId
details.orderStatus = op.orderStatus
details.reservationId = op.reservationId
details.allocationId = op.allocationId
// details.stockListId=op.stockListId
details.allocation = op.allocation
details.pallet = op.pallet
details.orderCode = op.orderCode
details.orderId = op.orderId
details.typeService = op.typeService
details.stockupAllocationId = op.stockupAllocationId
details.stockupAllocationName = op.stockupAllocationName
// #ifdef APP
if (Number(details.status) === 0) utils.ttsspke('请按件备货')
// #endif
@ -157,25 +107,12 @@
}, 200)
})
/* onHide(() => {
uni.$off('scancodedate')
})
*/
function goorderdetail(item) {
uni.navigateTo({
url: '/pagesHome/pages/orderDetails/orderDetails?orderCode=' + item.orderCode,
})
}
/* onPullDownRefresh(() => {
const timer = setTimeout(() => {
initpage()
//
uni.stopPullDownRefresh()
clearTimeout(timer)
}, 500)
}) */
function prinbut() {
let list = [],
checklist = []
@ -245,6 +182,7 @@
},
})
}
function showsdqs() {
tiplists.value.setdetails({
isshow: true,
@ -267,22 +205,13 @@
}
async function scandata() {
if (Number(details.planNum) !== 0 && Number(details.planNum) === Number(details.scanNum))
return utils.handleToast('该客户已齐套, 请返回上一级页面')
//
if (Number(details.status) !== 0) return
let data = {
scanType: 1,
// orderCode: details.orderCode,
packetBarCode: details.scancode,
stockupArea: details.stockupArea,
reservationId: details.reservationId,
allocationId: details.allocationId,
stockupId: details.stockupId,
typeService: details.typeService,
stockupAllocationId: details.stockupAllocationId,
stockupAllocationName: details.stockupAllocationName,
}
let res = await distributionStockupstockupScan(data)
console.log(res)
@ -298,99 +227,54 @@
async function initpage() {
let data = {
orderStatus: details.orderStatus,
reservationId: details.reservationId,
stockArticleId: details.stockArticleId,
// stockListId:details.stockListId,
allocationId: details.allocationId,
allocation: details.allocation,
pallet: details.pallet,
stockupId: details.stockupId,
status: details.status,
typeService: details.typeService,
orderId: details.orderId
}
let response = await distributionStockuporderInfo(data)
let response = await distributionStockupPackageDetail(data)
if (response.code !== 200) return
console.log(response)
details.dataList = response.data.packageList
details.customer = response.data.customer
details.stockupArea = response.data.stockupArea
details.planNum = response.data.planNum
details.scanNum = response.data.scanNum
details.trays = response.data.trays
details.warehouseArea = response.data.warehouseArea
details.address = response.data.address
if (Number(details.scanNum) > 0 && details.isscan) {
utils.ttsspke(details.scanNum + '件')
details.dataList = response.data.deliveryPackageDetailList
details.info = response.data
details.info.planNum = response.data.planNum
details.info.scanNum = response.data.scanNum
if (Number(details.info.scanNum) > 0 && details.isscan) {
utils.ttsspke(details.info.scanNum + '件')
}
}
const { dataList } = toRefs(details)
</script>
<style lang="scss">
.butbox {
display: flex;
flex-direction: column;
width: 686upx;
margin: auto;
margin-top: 20upx;
box-sizing: border-box;
padding: 16upx 0upx;
background-color: #ffffff;
border-radius: 8upx;
.mabxs {
padding: 20upx;
.scrollv {
width: 100%;
height: 50vh;
// padding: 10upx;
.ite {
font-size: 0.9rem;
padding: 20upx;
box-sizing: border-box;
border-radius: 8upx;
box-shadow: 0upx 2upx 10upx 0upx #e2e2e3;
margin-bottom: 20upx;
color: #092c4d;
background-color: #fff;
}
}
.mabxs {
display: flex;
flex-direction: column;
align-items: center;
padding-top: 5upx;
.ite {
width: 93%;
// width: 100%;
display: flex;
flex-direction: column;
align-items: center;
padding: 10upx;
box-sizing: border-box;
border-radius: 8upx;
box-shadow: 0upx 2upx 10upx 0upx #e2e2e3;
margin-bottom: 20upx;
>view {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
margin-bottom: 10upx;
&:nth-last-child(1) {
margin-bottom: none;
}
.footer {
$height: 88upx;
>view {
width: 50%;
// flex: 1;
font-size: 28upx;
font-weight: 400;
color: #092c4d;
}
}
}
}
}
height: calc($height + 40upx);
.prtbut {
margin: auto;
margin-top: 20upx;
position: fixed;
left: 50%;
transform: translateX(-50%);
bottom: 40upx;
width: 320upx;
height: 88upx;
height: $height;
background: #d3832a;
border-radius: 8upx;
font-size: 32upx;
@ -402,6 +286,7 @@
}
}
.head {
display: flex;
flex-direction: column;

188
pagesHome/pages/StowageList/StowageList.vue

@ -43,7 +43,7 @@
<template #body>
<view class="sccv" @scrolltolower="jiazai">
<view class="mabx">
<view v-for="item in dataList" :key="item">
<view v-for="item in dataList" :key="item" class="pb20">
<view class="topbox font-color">
<view class="type1">
<view>
@ -86,29 +86,28 @@
</view>
<template v-if="status!==2">
<!-- <template v-if="item.isLoadingPhoto"> -->
<view class="bts flex-c-sa">
<view @click="handleShowImg(item)">
上传运输合同
</view>
<view @click="gostockuplistBytray(item)">
整托装车
</view>
<view @click="gostockuplist(item)">
按件装车
</view>
<view class="bts">
<view class="btn" @click="gostockuplistBytray(item)">
整托装车
</view>
<view class="btn" @click="gostockuplist(item)">
按件装车
</view>
<view @click="handleShowImg(item)">
上传运输合同
</view>
<view @click="handleShowLoadImg(item, 'beforeLoad')">
上传装车前图片
</view>
<!-- </template> -->
<!-- <template v-else>
<view class="bts flex-c-sa">
<view @click="handleShowLoadImg(item)">
上传装车前图片
</view>
<view @click="handleShowLoadImg(item, 'beforeStart')">
上传发车前图片
</view>
</template> -->
</view>
</template>
<view :class="{tip:true, active: status==2}">
@ -135,11 +134,17 @@
<!-- 装车前上传 -->
<PopUp ref="LoadUploadImg">
<block v-for="item in details.LoadUploadImgOption" :key="item.title">
<block v-for="item in details.imgOption" :key="item.title">
<view class="upload_img_item">
<view class="upload_img_item_title">
{{item.title}}
<view>
{{item.title}}
</view>
<view v-if="item.min" class="ml10" style="color: red; font-weight: normal">
最少{{item.min}}
</view>
</view>
<u-upload :fileList="item.imgArr" @afterRead="(e)=> handleUploadImg(e, item.imgArr)"
@ -164,7 +169,7 @@
onUnload,
onPullDownRefresh
} from '@dcloudio/uni-app'
import { postCarsLoadPageList, postFindFinanceList, postAddContractByLoadId, postUploadLoadingPhoto } from '@/api/user.js'
import { postCarsLoadPageList, postFindFinanceList, postAddContractByLoadId, postUploadLoadingPhoto, postUploadStartPhoto, } from '@/api/user.js'
import { timeType } from '@/interfaces/pagesHome/allType'
import functions from '@/utils/functions.js';
import { inject, reactive, ref, toRefs, watchEffect, nextTick } from "vue";
@ -217,6 +222,53 @@
imgArr: []
}
],
/** 发车前上传前配置 */
StartUploadImgOption: [
{
title: '盖雨棚前 - 左',
type: '20',
position: '3',
min: 1,
imgArr: [],
},
{
title: '盖雨棚前 - 右',
type: '20',
position: '4',
min: 1,
imgArr: [],
},
{
title: '盖雨棚前 - 后',
type: '20',
position: '2',
min: 1,
imgArr: [],
},
{
title: '盖雨棚后 - 左',
type: '21',
position: '3',
min: 1,
imgArr: [],
},
{
title: '盖雨棚后 - 右',
type: '21',
position: '4',
min: 1,
imgArr: [],
},
{
title: '盖雨棚后 - 后',
type: '21',
position: '2',
min: 1,
imgArr: [],
},
],
imgOption: [],
/** 已上传的图片 */
oldImgArr: []
})
@ -412,27 +464,64 @@
})
}
const handleInitImg = (data, imgArr, cloneList) => {
if (utils.getObjType(data) !== 'array') return
if (utils.getObjType(imgArr) !== 'array') return
if (utils.getObjType(cloneList) !== 'array') return
console.log('imgArr :>> ', imgArr);
console.log('cloneList :>> ', cloneList);
for (let i = 0; i < data.length; i++) {
const value = data[i]
for (let i = 0; i < imgArr.length; i++) {
const item = imgArr[i]
if (item.type + ' - ' + item.position !== value.type + ' - ' + item.position) continue
item.imgArr.push({ url: value.url })
cloneList.push({ url: value.url })
break
}
}
}
/** 显示装车前上传图片 */
const handleShowLoadImg = (item) => {
details.oldImgArr = []
const handleShowLoadImg = (item, type) => {
const _oldImgArr = []
let title = ''
const { carsLoadLinePhotoEntities } = item
switch (type) {
case 'beforeLoad':
details.imgOption = utils.deepClone(details.LoadUploadImgOption)
title = '装车前照片'
break;
case 'beforeStart':
details.imgOption = utils.deepClone(details.StartUploadImgOption)
title = '发车前照片'
break;
default:
break;
}
handleInitImg(carsLoadLinePhotoEntities, details.imgOption, _oldImgArr)
LoadUploadImg.value.setDetails({
title: '装车前照片',
title,
showPopUp: true,
async success() {
console.log('details.LoadUploadImgOption :>> ', details.LoadUploadImgOption);
console.log('details.imgFileList :>> ', details.imgFileList);
const submitData = {
loadId: item.id,
addUrlList: [],
removeUrlList: []
}
const _oldImgArr = utils.deepClone(details.oldImgArr)
for (let i = 0; i < details.LoadUploadImgOption.length; i++) {
const value = details.LoadUploadImgOption[i]
for (let i = 0; i < details.imgOption.length; i++) {
const value = details.imgOption[i]
console.log('value :>> ', value);
if (value.imgArr.length < value.min) return utils.handleToast(`${value.title}最少上传${value.min}`)
for (let i = 0; i < value.imgArr.length; i++) {
@ -445,7 +534,8 @@
if (_val.url !== item.url) continue
isContinue = true
_val.splace(i, 1)
_oldImgArr.splice(i, 1)
break
}
if (isContinue) continue
@ -465,7 +555,21 @@
const res = await postUploadLoadingPhoto(submitData)
let res : any = {}
switch (type) {
case 'beforeLoad':
res = await postUploadLoadingPhoto(submitData)
break;
case 'beforeStart':
res = await postUploadStartPhoto(submitData)
break;
default:
break;
}
const { code, msg } = res
@ -760,8 +864,10 @@
>.bts {
display: flex;
flex-wrap: wrap;
align-items: center;
margin: 20upx 0;
padding: 0 20upx;
margin-top: 20upx;
>view {
border-radius: 8upx;
@ -775,11 +881,13 @@
font-weight: 400;
padding: 10upx 30upx;
color: #0086F1;
}
margin-bottom: 20upx;
margin-right: 20upx;
>view:nth-of-type(2) {
border-color: var(--subjectColor);
color: var(--subjectColor);
&.btn {
border-color: var(--subjectColor);
color: var(--subjectColor);
}
}
}
}

20
pagesHome/pages/orderInquiry/orderInquiry.vue

@ -441,26 +441,6 @@
text += `T 55 0 140 260 ${item.qrCode}\r\n`
text += 'FORM\r\n'
text += 'PRINT\r\n'
// const subjectHeight = 40
// //
// const interval = 30
// let text = '! 0 200 200 338 1\r\n'
// // 340
// text += 'SETBOLD 1\r\n' //
// text += 'B QR 40 20 M 2 U 8\r\n' //
// text += `MA,${item.qrCode}\r\n`
// text += 'ENDQR\r\n' // 1
// text += `T 70 0 40 240 C-C4-3-6\r\n`
// text += `T 70 0 260 ${subjectHeight} ${''}\r\n` //
// text += `LINE 250 ${subjectHeight + (interval * 1)} 440 ${subjectHeight + (interval * 1)} 3\r\n` // 线 // 1线
// text += `LINE 250 0 250 220 3\r\n` // 2
// text += `T 70 0 260 ${subjectHeight + (interval * 2)} ${''}\r\n`
// text += `LINE 250 ${subjectHeight + (interval * 3)} 440 ${subjectHeight + (interval * 3)} 3\r\n` // 线 // 2线
// text += `T 70 0 260 ${subjectHeight + (interval * 4)} ${'C'}\r\n`
// // text += `LINE 230 ${subjectHeight + (interval * 5)} 440 ${subjectHeight + (interval * 5)} 3\r\n` // 线 // 3线
// text += 'FORM\r\n'
// text += 'PRINT\r\n'
utils.getbl(bluetoothInfo.value, text).catch(() => {
bluetoothList.value.setdetails({ isshow: true })
_isReturn = true

45
pagesHome/pages/pickingScan/pickingScan.vue

@ -47,30 +47,18 @@
<view class="topbox">
<view class="type1">
<view>
<text style="color: #90A0AF;">配车类型</text>{{item.typeServiceStr}}
<text style="color: #90A0AF;">计划类型</text>{{item.deliveryTypeName}}
</view>
<view>
<text style="color: #90A0AF;">备货是否完成</text>{{item.stockupStatusStr}}
<text style="color: #90A0AF;">备货状态</text>{{item.stockupStatusName}}
</view>
</view>
<view class="type1">
<view>
<text style="color: #90A0AF;">客户</text>{{item.customer}}
</view>
<view>
<text style="color: #90A0AF;">备货区域</text>{{item.stockupArea}}
</view>
</view>
<view class="type3">
<view>
<text style="color: #90A0AF;">库位</text>{{item.warehouseArea}}
</view>
</view>
<view class="type3">
<view>
<text style="color: #90A0AF;">托盘</text>{{item.trays}}
<text style="color: #90A0AF;">客户</text>{{item.consignee}}
</view>
</view>
<view class="type2">
<view>
<view>订单总数</view>
@ -78,15 +66,15 @@
</view>
<view>
<view>计划备货件数</view>
<view>{{item.planNum + item.inventoryNub}}</view>
<view>{{item.planNum + item.planNum}}</view>
</view>
<view>
<view>备货件数</view>
<view>{{item.realNum}}</view>
<view>{{item.scanNum}}</view>
</view>
<view>
<view>库存品数</view>
<view>{{item.inventoryNub}}</view>
<view>{{item.inventoryNum}}</view>
</view>
</view>
</view>
@ -117,7 +105,7 @@
onUnload,
onPullDownRefresh
} from '@dcloudio/uni-app'
import { distributionStockuppageList } from '@/api/user.js'
import { distributionStockuppageList, newDistributionStockuppageList } from '@/api/user.js'
import { pageData } from '@/interfaces/pagesHome/pickingScan'
import { timeType } from '@/interfaces/pagesHome/allType'
import { inject, nextTick, reactive, ref, toRefs, watchEffect } from "vue";
@ -132,6 +120,7 @@
await init()
},
reachBottomInitPage: jiazai,
haveReachBottom: false,
isFixed: true
}
let details = reactive({
@ -222,12 +211,14 @@
status: details.status,
customName: details.customName
}
let response = await distributionStockuppageList(data)
// let response = await distributionStockuppageList(data)
let response = await newDistributionStockuppageList(data)
if (response.code !== 200) return
if (details.currentPage == 1 && response.data) {
details.dataList = response.data.records
// details.dataList = response.data.records
details.dataList = response.data
} else {
if (response.data.records.lngth == 0) {
if (response.data.length == 0) {
uni.showToast({
title: '已经到底了。',
icon: 'none'
@ -235,9 +226,8 @@
details.currentPage--
return
}
details.dataList = details.dataList.concat(response.data.records)
}
// details.dataList=response.data.records
// details.dataList=response.data
} catch (e) {
//TODO handle the exception
} finally {
@ -258,7 +248,7 @@
// })
console.log('item :>> ', item);
uni.navigateTo({
url: '/pagesHome/pages/PickingScanList/PickingScanList?id=' + item.id + '&stockupArea=' + item.stockupArea + '&typeService=' + item.typeService,
url: '/pagesHome/pages/PickingScanList/PickingScanList?stockupId=' + item.stockupId,
})
}
function cleartime() {
@ -382,12 +372,13 @@
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
margin-bottom: 20upx;
font-size: 28upx;
color: #161616;
>view {
width: 50%;
min-width: 50%;
}
}

389
pagesHome/pages/scansorting/scansorting.vue

@ -24,67 +24,75 @@
<!-- 主体 -->
<template #body>
<scroll-view class="scvmabx">
<view class="maxboxs">
<view class="items" v-for="item in datalist">
<view class="headtopv">
<view>
<image src="/pagesHome/static/tpicon.png"></image>
<view>{{`${item.trayName} ( ${item.trayCode} )`}}</view>
</view>
<view @click="goorderdetail(item)">继续分拣</view>
<view class="maxboxs">
<view class="items" v-for="item in datalist">
<view class="headtopv">
<view>
<image src="/pagesHome/static/tpicon.png"></image>
<view>{{`${item.trayName} ( ${item.trayCode} )`}}</view>
</view>
<view class="contentbx">
<view class="unames">
<view>
<view>
<image src="/pagesHome/static/uname.png"></image>
<view>名称</view>
</view>
<view>{{item.marketName}}{{item.filterValue}}</view>
</view>
<view>
<view>
<image src="/pagesHome/static/dttype.png"></image>
<view>打托方式</view>
</view>
<view>{{item.trayTypeName}}</view>
</view>
<view @click="goorderdetail(item)">继续分拣</view>
</view>
<view class="contentbx">
<view class="unames">
<view class="mb10">
<view>
<view>
<image src="/pagesHome/static/dttype.png"></image>
<view>备注</view>
</view>
<view>{{item.remark}}</view>
<image src="/pagesHome/static/uname.png"></image>
<view>名称</view>
</view>
<view>{{item.marketName}}{{item.filterValue}}</view>
</view>
<view class="numbox">
<view>
<view>订单数</view>
<view>{{item.totalNum}}</view>
</view>
<view>
<view>订单总数</view>
<view>{{item.orderTotalNum}}</view>
</view>
<view class="mb10">
<view>
<view>库存品数</view>
<view>{{item.stockNum}}</view>
<image src="/pagesHome/static/dttype.png"></image>
<view>打托方式</view>
</view>
<view>{{item.trayTypeName}}</view>
</view>
<view class="mb10">
<view>
<view>库存品总数</view>
<view>{{item.stockTotalNum}}</view>
<image src="/pagesHome/static/dttype.png"></image>
<view>备注</view>
</view>
<view>{{item.remark}}</view>
</view>
</view>
<view class="numbox">
<view>
<view>订单数</view>
<view>{{item.totalNum}}</view>
</view>
<view>
<view>订单总数</view>
<view>{{item.orderTotalNum}}</view>
</view>
<view>
<view>库存品数</view>
<view>{{item.stockNum}}</view>
</view>
<view>
<view>库存品总数</view>
<view>{{item.stockTotalNum}}</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</template>
</BasicContainer>
<view class="footer">
<view class="footer_container">
<view class="button" @click="handleCreateTray">
生成新托盘
</view>
</view>
</view>
<tips ref="tip" />
<BluetoothList ref="bluetoothList"></BluetoothList>
<l-calendar v-model:value="show" :initStartDate='date[0]' :initEndDate='date[1]' @hide='showCalendar'
@change="onConfirm"></l-calendar>
<saomiao2 :ishidestop="scanState !== 0"></saomiao2>
@ -94,6 +102,7 @@
import {
warehouseTrayTypeorderPageList,
warehouseTrayTypeorderScanTrayCode,
postCreateTray
} from '@/api/user.js'
import {
onLoad,
@ -105,6 +114,11 @@
import useSystemSettingsStore from '@/store/useSystemSettingsStore';
import { storeToRefs } from 'pinia';
const { scanState } = storeToRefs(useSystemSettingsStore())
import useBluetoothStore from '@/store/useBluetoothStore.js';
const bluetoothList = ref(null)
const bluetoothStore = useBluetoothStore()
const { bluetoothInfo } = storeToRefs(bluetoothStore)
//
const option = reactive({
leftClick() {
@ -151,7 +165,7 @@
})
const basicContainer = ref()
const tip = ref()
//
function reachBottomInitPage() {
@ -255,25 +269,100 @@
})
}
}
//
function showCalendar() {
details.show = !details.show
}
//
function onConfirm(e : any) {
console.log(e);
date.value[0] = e.startDate
date.value[1] = e.endDate
details.datatime = date.value[0] + ' 至 ' + date.value[1]
basicContainer.value.startPullDownRefresh()
// details.datatime=(uni as any).$u.timeFormat(date.value[0], 'yyyy-mm-dd')+' '+(uni as any).$u.timeFormat(date.value[1], 'yyyy-mm-dd')
}
//
function cleartime() {
// console.log(1231211);
details.datatime = ''
date.value = []
basicContainer.value.startPullDownRefresh()
}
const print = (data, isJump = false) => {
// #ifdef APP
const handlePrint = () => {
let text = '! 0 200 200 333 1\r\n'
text += 'SETBOLD 1\r\n'
text += `T 56 0 140 0 托盘码\r\n`
text += 'B QR 140 60 M 4 U 4\r\n'
text += `MA,${data.palletCode}\r\n`
text += 'ENDQR\r\n'
text += `T 56 0 40 200 托盘码: ${data.palletCode}\r\n`
text += `T 56 0 40 240 托盘名称: ${data.palletName}\r\n`
text += 'FORM\r\n'
text += 'PRINT\r\n'
const res = utils.getbl(bluetoothInfo.value, text)
res.then(() => {
if (isJump) uni.navigateTo({
url: '/pagesHome/pages/ScanSortingType/ScanSortingType?trayCode=' + data.palletCode
})
})
res.catch(() => {
bluetoothList.value.setdetails({ isshow: true, success() { handlePrint() } })
})
}
if (!bluetoothInfo.value.name) return bluetoothList.value.setdetails({ isshow: true, success() { handlePrint() } })
handlePrint()
// #endif
}
/** 生成新托盘 */
const handleCreateTray = () => {
tip.value.setdetails({
isshow: true,
title: '提示',
content: '是否生成新托盘码',
isshowcancel: true,
cancelTxt: '取消',
confirmTxt: '确认',
success: async () => {
const res = await postCreateTray()
const { code, data } = res
if (code !== 200) return
tip.value.setdetails({
isshow: true,
title: '提示',
content: '是否打印并分拣',
isshowcancel: true,
cancelTxt: '打印',
confirmTxt: '打印并分拣',
success: () => {
print(data, true)
tip.value.setdetails({ isshow: false })
},
cancel: () => {
print(data)
tip.value.setdetails({ isshow: false })
},
close: () => tip.value.setdetails({ isshow: false })
})
},
cancel: () => {
tip.value.setdetails({ isshow: false })
},
close: () => tip.value.setdetails({ isshow: false })
})
}
const {
show,
datatime,
@ -287,8 +376,7 @@
width: 550upx !important;
height: 75upx;
background: #F5F5F6;
border-radius: 8upx 8upx 8upx 8upx;
opacity: 1;
border-radius: 8upx;
border: 2upx solid #EEEEEE;
padding: 16upx 18upx;
box-sizing: border-box;
@ -345,7 +433,6 @@
display: flex;
align-items: center;
justify-content: space-between;
// margin-top: 20upx;
background-color: #FFFFFF;
padding: 20upx 30upx;
box-sizing: border-box;
@ -356,9 +443,6 @@
padding: 10upx 20upx;
box-sizing: border-box;
// flex: 1;
// margin-right: 50upx;
// border-radius: 10upx;
>input {
flex: 1;
font-size: 28upx;
@ -379,126 +463,137 @@
}
}
.scvmabx {
width: 100%;
margin-top: 20upx;
.maxboxs {
width: 100%;
.maxboxs {
padding: 20upx;
>.items {
display: flex;
flex-direction: column;
align-items: center;
background-color: #ffffff;
margin-bottom: 20upx;
padding: 16upx 30upx;
box-sizing: border-box;
>.items {
width: 100%;
display: flex;
flex-direction: column;
background-color: #ffffff;
margin-bottom: 20upx;
padding: 16upx 30upx;
box-sizing: border-box;
.contentbx {
.contentbx {
display: flex;
flex-direction: column;
.unames {
padding: 15upx 0;
.unames {
>view {
display: flex;
flex-direction: column;
align-items: flex-start;
padding: 15upx 0;
align-items: center;
font-size: 28upx;
>view {
>view:nth-of-type(1) {
width: 180upx;
display: flex;
align-items: center;
font-size: 28upx;
justify-content: flex-start;
&:nth-of-type(1) {
margin-bottom: 20upx;
}
>view:nth-of-type(1) {
width: 180upx;
display: flex;
align-items: center;
justify-content: flex-start;
>image {
width: 42upx;
height: 42upx;
margin-right: 15upx;
}
}
}
}
.numbox {
width: 686upx;
height: 160upx;
background: #F5F7FB;
border-radius: 8upx;
display: flex;
align-items: center;
justify-content: space-between;
margin: auto;
>view {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
>view:nth-of-type(1) {
font-size: 28upx;
font-weight: 400;
color: #AFB4BA;
margin-bottom: 20upx;
}
>view:nth-of-type(2) {
font-size: 36upx;
font-weight: 400;
color: #020B18;
}
image {
width: 42upx;
height: 42upx;
margin-right: 15upx;
}
}
}
.headtopv {
.numbox {
height: 160upx;
background: #F5F7FB;
border-radius: 8upx;
display: flex;
align-items: center;
justify-content: space-between;
padding: 14upx 0;
border-bottom: 2upx solid #EEEEEE;
>view:nth-of-type(1) {
>view {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: #020B18;
font-size: 32upx;
>image {
width: 32upx;
height: 32upx;
margin-right: 10upx;
>view:nth-of-type(1) {
font-size: 28upx;
font-weight: 400;
color: #AFB4BA;
margin-bottom: 20upx;
}
>view:nth-of-type(2) {
font-size: 36upx;
font-weight: 400;
color: #020B18;
}
}
}
}
>view:last-child {
width: 192upx;
height: 72upx;
background: #D3832A;
border-radius: 8upx 8upx 8upx 8upx;
opacity: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: 28upx;
font-weight: 400;
color: #FFFFFF;
.headtopv {
display: flex;
align-items: center;
justify-content: space-between;
padding: 14upx 0;
border-bottom: 2upx solid #EEEEEE;
>view:nth-of-type(1) {
display: flex;
align-items: center;
justify-content: center;
color: #020B18;
font-size: 32upx;
>image {
width: 32upx;
height: 32upx;
margin-right: 10upx;
}
}
>view:last-child {
width: 192upx;
height: 72upx;
background: #D3832A;
border-radius: 8upx 8upx 8upx 8upx;
opacity: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: 28upx;
font-weight: 400;
color: #FFFFFF;
}
}
}
}
//
.footer {
$height: 120upx;
height: $height;
.footer_container {
height: inherit;
position: fixed;
width: 100vw;
background-color: #fff;
bottom: 0;
right: 0;
padding-top: 10upx;
.button {
$buttonHeight: 80upx;
height: $buttonHeight;
line-height: $buttonHeight;
background-color: var(--subjectColor);
color: #fff;
width: 70%;
margin: 0 auto;
text-align: center;
border-radius: calc($buttonHeight / 2);
box-shadow: 0 10upx 5upx 0upx #d3832a60;
}
}
}

127
pagesHome/pages/setbarcode/setbarcode.vue

@ -28,17 +28,9 @@
</view>
</view>
<view class="butsbx">
<!-- <template v-if="Number(items.sourceType)===1">
<view @click="setstockPrint(1)">采集原包条码</view>
</template>
<template v-else>
<view @click="setstockPrint(2)">扫描打印包条</view>
<view @click="showmd">新生成包码</view>
</template> -->
<view :class="{'active':details.stockPrint === 1}" @click="setstockPrint(1)">采集原包条码</view>
<view :class="{'active':details.stockPrint === 2}" @click="setstockPrint(2)">扫描打印包条码</view>
<view @click="showmd">新生成包条码</view>
<!-- <view @click="showmd">新生成包条码</view> -->
</view>
</template>
@ -103,11 +95,11 @@
import useBluetoothStore from '@/store/useBluetoothStore.js';
import useSystemSettingsStore from '@/store/useSystemSettingsStore';
import { storeToRefs } from 'pinia';
import utils from '@/utils/utils.js';
const { scanState } = storeToRefs(useSystemSettingsStore())
const bluetoothList = ref(null)
const bluetoothStore = useBluetoothStore()
const { bluetoothInfo } = storeToRefs(bluetoothStore)
const utils = inject('utils') as any
let details = reactive({
items: {},
reservationId: '',
@ -128,13 +120,8 @@
packageNum: 0,
/** 已扫数量 */
realityNum: 0,
mallName: '',
/** 是否为扫描后进行刷新 */
isscan: true,
/** 备货库位ID */
stockupAllocationId: '',
/** 备货库位名称 */
stockupAllocationName: '',
})
const tips = ref(null)
const basicContainer = ref(null)
@ -146,25 +133,16 @@
haveData: true,
async pullDownRefreshInitPage() {
await initpage()
}
},
isFixed: true
}
onUnload(() => {
uni.removeStorageSync('setbarcodeInfo')
})
// const tiplists=ref(null)
onLoad((op) => {
details.stockupId = op.stockupId
// details.items = JSON.parse(op.item)
details.items = uni.getStorageSync('setbarcodeInfo') || {}
console.log('op :>> ', details.items);
details.reservationId = op.reservationId
details.goodsAreaName = op.goodsAreaName
details.allocationId = op.allocationId
details.positionCode = op.positionCode
details.typeService = op.typeService
details.mallName = op.mallName
details.stockupAllocationId = op.stockupAllocationId
details.stockupAllocationName = op.stockupAllocationName
if (op.completeStact == 'true') {
details.completeStact = true
}
@ -245,19 +223,14 @@
let data = {
orderStatus: 2,
reservationId: details.reservationId,
stockListId: details.items.stockListId,
stockupId: details.stockupId,
allocationId: details.allocationId,
positionCode: details.positionCode,
typeService: details.typeService,
status: details.completeStact ? 1 : 0,
cargoNumber: details.items.cargoNumber
}
// let response = await distributionStockuporderInfo(data)
let response = await stockConfigList(data)
if (response.code !== 200) return
if (response.code !== 200 || utils.getObjType(response.data) !== 'object') return
details.codelist = response.data.stockConfigOrderPackageListVOS
details.customer = response.data.customer
details.deliveryAddress = response.data.deliveryAddress
@ -360,7 +333,7 @@
const printList = checklist.map(val => deta.list[val])
printList.map(item => {
printList.forEach(item => {
// const util=(inject('utils') as any)
let text = '! 0 200 200 333 1\r\n'
text += 'SETBOLD 2\r\n'
@ -407,70 +380,24 @@
details.isscan = true
let data = {
let submitData : any = {
scanType: 2,
stockListId: details.items.stockListId,
packetBarCode: code,
stockupArea: details.goodsAreaName,
reservationId: details.reservationId,
stockupId: details.stockupId,
allocationId: details.allocationId,
// stockPrint: details.items.sourceType,
// status: details.completeStact ? 1 : 0,
stockPrint: details.stockPrint,
status: details.stockPrint,
id: details.orderpackgedetails.stockListId,
cargoNumber: details.items.cargoNumber,
marketCode: details.items.cargoNumber,
mallName: details.mallName,
stockupAllocationId: details.stockupAllocationId,
stockupAllocationName: details.stockupAllocationName
}
console.log('details.items.cargoNumber :>> ', details.items.cargoNumber);
// utils.ttsspke('stockPrint'+details.stockPrint)
if (details.stockPrint === 2) {
console.log('data :>> ', data);
delete data.marketCode
let res = await distributionStockupstockupScan(data)
console.log(res);
if (res.code == 200) {
basicContainer.value.startPullDownRefresh()
}
return
typeService: details.typeService
}
//
const response = await distributionStockupstockupScanCheck(data)
console.log('response :>> ', response);
const { code: resCode } = response
if (resCode === 60002) {
console.log('123 :>> ', 123);
popUp_Edit.value.setDetails({
title: '切换批次',
showPopUp: true,
async success() {
data.stockListId = response.data
const resp = await distributionStockupstockupUpdateStockup(data)
console.log('resp :>> ', resp);
if (resp.code == 200) {
popUp_Edit.value.details.showPopUp = false
basicContainer.value.startPullDownRefresh()
}
}
})
if (submitData.stockPrint === 2) {
submitData.positionCode = details.positionCode
submitData.allocationId = details.allocationId
}
//
else if (resCode === 200) {
delete data.marketCode
let res = await distributionStockupstockupScan(data)
console.log(res);
if (res.code == 200) {
basicContainer.value.startPullDownRefresh()
}
let res = await distributionStockupstockupScan(submitData)
console.log(res);
if (res.code == 200) {
basicContainer.value.startPullDownRefresh()
}
} catch (e) {
@ -485,16 +412,14 @@
<style lang="scss">
.scrollv {
width: 686upx;
height: 60vh;
// padding: 10upx;
box-sizing: border-box;
min-height: 60vh;
margin: 20upx;
background-color: #ffffff;
margin: auto;
margin-top: 20upx;
padding: 20upx;
box-sizing: border-box;
border-radius: 10upx;
width: auto;
.mabxs {
display: flex;
@ -548,7 +473,7 @@
align-items: center;
// justify-content: space-around;
margin-top: 25upx;
padding: 0 4%;
// padding: 0 4%;
>view {
width: 204upx;
@ -568,22 +493,14 @@
background-color: var(--subjectColor);
color: #fff;
}
// &:nth-of-type(2) {
// margin-left: 20upx;
// }
}
}
.head {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-around;
width: 100vw;
box-sizing: border-box;
padding: 20upx;
// height: 176upx;
box-sizing: border-box;
// border-bottom: 2upx solid #ececec;
background-color: #ffffff;
>.type1 {

310
pagesUser/pages/AddressBook/AddressBook.vue

@ -0,0 +1,310 @@
<template>
<BasicContainer ref="basicContainer" :option="option">
<template #head>
<view class="header_container align-center">
<view class="flex1 mr20">
<MyInput v-model="details.form.searchText" placeholder="请输入" @remove="handleSearch" clearable />
</view>
<view class="searchBtn flex-c-c" hover-class="clickClass" @click="handleSearch">
<u-icon name="search" color="#fff" size="40" />
</view>
</view>
</template>
<template #body>
<view class="main">
<block v-for="item in details.data">
<view :class="{row: true, 'align-center': true, isHide: item.isHide}"
@click="()=> handleShowDetail(item)">
<view class="flex1">
{{item.name}}
</view>
<view class="align-center">
<view class="mr20 phone">
{{item.mobile || '暂未维护'}}
</view>
<view class="phone_container">
<!-- 拨打 -->
<u-icon name="phone-fill" size="40" color="#fff"></u-icon>
</view>
</view>
</view>
</block>
</view>
</template>
</BasicContainer>
<PopUp ref="DetailPopUp">
<view class="flex-c-sb">
<!-- 占位 -->
<view style="width: 10px;height: 10px;"></view>
<view>详情</view>
<view @click="handleClosePopUp">
<u-icon name="close" size="40"></u-icon>
</view>
</view>
<view class="details_container">
<view class="details_title text-center">
{{details.detailInfo.name}}
</view>
<view class="details_content">
<view class="">
{{details.detailInfo.deptNames}}
</view>
<view class="tip_content">
<block v-for="item in details.detailInfo.postNamesArr">
<view class="tip">{{item}}</view>
</block>
</view>
</view>
<view class="flex-c-sb" @click="handlePhone">
<view class="phone">
{{details.detailInfo.mobile}}
</view>
<view class="phone_container">
<!-- 拨打 -->
<u-icon name="phone-fill" size="40" color="#fff"></u-icon>
</view>
</view>
</view>
</PopUp>
</template>
<script lang="ts" setup>
import {
onShow,
onLoad,
onHide,
onPullDownRefresh
} from '@dcloudio/uni-app'
import { reactive, ref, toRefs } from 'vue';
import { getContactsList } from '@/api/user';
import utils from '@/utils/utils.js';
const DetailPopUp = ref()
const option = {
title: '通讯录',
haveData: true,
pullDownRefreshInitPage() {
},
reachBottomInitPage() {
},
haveReachBottom: false,
isFixed: true
}
const details = reactive({
form: {
searchText: ''
},
data: [],
detailInfo: {}
})
const initPage = async () => {
const res = await getContactsList({})
const { code, data } = res
if (code !== 200) return
details.data = data
for (let i = 0; i < details.data.length; i++) {
details.data[i].isHide = false
}
}
initPage()
const handlePhone = (item) => {
if (!details.detailInfo.mobile) return uni.showToast({ title: '系统暂无该用户电话', icon: 'none' })
console.log('details.detailInfo :>> ', details.detailInfo);
uni.makePhoneCall({
phoneNumber: details.detailInfo.mobile,
success() {
console.log('111 :>> ', 111);
},
fail() {
console.log('222 :>> ', 222);
}, complete() {
console.log('333 :>> ', 333);
}
})
}
const handleShowDetail = (item) => {
console.log('DetailPopUp :>> ', DetailPopUp);
details.detailInfo = { ...item }
details.detailInfo.postNamesArr = utils.getObjType(details.detailInfo.postNames) === 'string' && details.detailInfo.postNames ? details.detailInfo.postNames.split(',') : []
DetailPopUp.value.setDetails({
/**
* 是否显示弹框
*/
showPopUp: true,
isShowClose: false,
isShowButton: false,
/**
* 标题
*/
title: '',
})
}
const handleClosePopUp = () => {
DetailPopUp.value.setDetails({ showPopUp: false })
}
const handleSearch = () => {
const _rep = details.form.searchText && new RegExp('^' + details.form.searchText)
for (let i = 0; i < details.data.length; i++) {
const item = details.data[i]
item.isHide = details.form.searchText ? !_rep.test(item.name) : false
console.log('item.isHide :>> ', item.isHide);
}
}
</script>
<style lang="scss" scoped>
.header_container {
$height: 2.3rem;
padding: 20upx;
background-color: #fff;
height: fit-content;
width: 100vw;
box-sizing: border-box;
:deep(.input_container) {
height: $height;
border: 4upx solid #ccc;
// box-shadow: 0 0 20upx #ccc;
input {
padding: 0 30upx;
}
}
.searchBtn {
background-color: var(--subjectColor);
height: $height;
text-align: center;
padding: 0 50upx;
border-radius: 10upx;
transition: all 0.3s;
}
}
.main {
margin: 20upx;
padding: 0 20upx;
background-color: #fff;
// padding: 20upx;
border-radius: 10upx;
.row {
padding: 20upx 0;
border-bottom: 2upx solid #eee;
line-height: 1.5rem;
overflow: hidden;
transition: all 0.3s;
// height: 1.5rem;
&::before {
content: '';
width: 6upx;
height: 1.5rem;
background-color: var(--primaryColor);
margin-right: 20upx;
border-radius: 10upx;
}
&.isHide {
display: none;
}
.phone {
color: #888;
font-size: 0.9rem;
}
}
}
.phone_container {
$size: 56upx;
width: $size;
height: $size;
background-color: var(--primaryColor);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
.detailRow {
padding-left: 40upx;
font-size: 0.9rem;
.title {
color: #888;
}
}
.details_container {
padding: 32upx 20upx;
background-color: #fdf9f4;
margin-top: 28upx;
border-radius: 16upx;
margin-bottom: 32upx;
.details_title {
font-size: 1.2rem;
font-weight: bold;
margin-bottom: 32upx;
}
.details_content {
$border: 2upx solid #eee;
border-bottom: $border;
border-top: $border;
padding: 32upx 0;
margin-bottom: 32upx;
.tip_content {
display: flex;
flex-wrap: wrap;
margin-top: 20upx;
.tip {
padding: 8upx 20upx;
background-color: #f8eddf;
color: var(--subjectColor);
margin-right: 10upx;
margin-bottom: 0;
border-radius: 10upx;
}
}
}
.phone {
font-size: 1.2rem;
font-weight: bold;
}
}
</style>

2
unpackage/dist/build/app-plus/pages/news/news.css vendored

@ -1 +1 @@
.titles{position:absolute;left:50%;top:2.1875rem;transform:translate(-50%);font-size:1.125rem;font-weight:400;color:#d3832a;z-index:5}.mabxose{margin:auto;margin-top:4.6875rem;width:17.5rem;padding:.625rem;background-color:#f0e6dc;border-radius:.3125rem}.mabxose .titl{color:#d3832a}.mabxose .inps{width:15.625rem;height:1.875rem;border:.0625rem solid #cfcfcf;display:flex;align-items:center;justify-content:flex-start;margin-top:.625rem}.mabxose .inps>uni-input{flex:1}.mabxose .buts{background-color:#d3832a;color:#fff;display:flex;align-items:center;justify-content:center;width:7.5rem;height:2.5rem;border-radius:.3125rem;margin:auto;margin-top:.625rem}
.u-status-bar[data-v-31491727]{width:100%}uni-view[data-v-5c79ae5e],uni-scroll-view[data-v-5c79ae5e],uni-swiper-item[data-v-5c79ae5e]{display:flex;flex-direction:column;flex-shrink:0;flex-grow:0;flex-basis:auto;align-items:stretch;align-content:flex-start}@font-face{font-family:uicon-iconfont;src:url(https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf) format("truetype")}.u-icon[data-v-5c79ae5e]{display:flex;align-items:center}.u-icon--left[data-v-5c79ae5e]{flex-direction:row-reverse;align-items:center}.u-icon--right[data-v-5c79ae5e]{flex-direction:row;align-items:center}.u-icon--top[data-v-5c79ae5e]{flex-direction:column-reverse;justify-content:center}.u-icon--bottom[data-v-5c79ae5e]{flex-direction:column;justify-content:center}.u-icon__icon[data-v-5c79ae5e]{font-family:uicon-iconfont;position:relative;display:flex;flex-direction:row;align-items:center}.u-icon__icon--primary[data-v-5c79ae5e]{color:#3c9cff}.u-icon__icon--success[data-v-5c79ae5e]{color:#5ac725}.u-icon__icon--error[data-v-5c79ae5e]{color:#f56c6c}.u-icon__icon--warning[data-v-5c79ae5e]{color:#f9ae3d}.u-icon__icon--info[data-v-5c79ae5e]{color:#909399}.u-icon__img[data-v-5c79ae5e]{height:auto;will-change:transform}.u-icon__label[data-v-5c79ae5e]{line-height:1}uni-view[data-v-917ffc31],uni-scroll-view[data-v-917ffc31],uni-swiper-item[data-v-917ffc31]{display:flex;flex-direction:column;flex-shrink:0;flex-grow:0;flex-basis:auto;align-items:stretch;align-content:flex-start}.u-navbar--fixed[data-v-917ffc31]{position:fixed;left:0;right:0;top:0;z-index:11}.u-navbar__content[data-v-917ffc31]{display:flex;flex-direction:row;align-items:center;height:44px;background-color:#9acafc;position:relative;justify-content:center}.u-navbar__content__left[data-v-917ffc31],.u-navbar__content__right[data-v-917ffc31]{padding:0 13px;position:absolute;top:0;bottom:0;display:flex;flex-direction:row;align-items:center}.u-navbar__content__left[data-v-917ffc31]{left:0}.u-navbar__content__left--hover[data-v-917ffc31]{opacity:.7}.u-navbar__content__left__text[data-v-917ffc31]{font-size:15px;margin-left:3px}.u-navbar__content__title[data-v-917ffc31]{text-align:center;font-size:16px;color:#303133}.u-navbar__content__right[data-v-917ffc31]{right:0}.u-navbar__content__right__text[data-v-917ffc31]{font-size:15px;margin-left:3px}.infoStart[data-v-b3db3405]:before,.list .list_item .title2[data-v-b3db3405]:before{content:"";display:block;width:6px;height:6px;background-color:#fc4956;border-radius:50%}.tabbar[data-v-b3db3405]{z-index:9;background-color:#fff;display:flex;height:2.8125rem;position:relative;border-radius:.3125rem;margin:0 .625rem;overflow:hidden}.tabbar .tabbar_item[data-v-b3db3405]{flex:1;transition:all .3s}.tabbar .tabbar_item uni-text[data-v-b3db3405]{position:relative;z-index:10}.tabbar .tabbar_item.active[data-v-b3db3405]{color:#fff}.tabbar .activeItem[data-v-b3db3405]{width:50%;height:100%;position:absolute;bottom:0;left:0;background-color:var(--subjectColor);transition:all .3s}.list[data-v-b3db3405]{padding:12px}.list .list_item[data-v-b3db3405]{background-color:#fff;border-radius:8px}.list .list_item .title_container[data-v-b3db3405]{padding:10px}.list .list_item .content_container[data-v-b3db3405]{padding:16px 10px}.list .list_item .content_container .content_title[data-v-b3db3405]{margin-bottom:7px}.list .list_item .content_container .text[data-v-b3db3405]{font-size:13px;color:#999;line-height:19px}.list .list_item .title1[data-v-b3db3405]{font-size:15px;color:#151515;line-height:22px}.list .list_item .title2[data-v-b3db3405]{display:flex;align-items:center;font-size:16px;color:#151515;line-height:23px}.list .list_item .title2[data-v-b3db3405]:before{margin-right:10px}.list .list_item .info[data-v-b3db3405]{color:#999;font-size:12px;line-height:17px}.list .list_item .tip[data-v-b3db3405]{width:24px;height:24px}.list .list_item .border-bottom[data-v-b3db3405]{border-bottom:1px solid #eee}

2
unpackage/dist/build/app-plus/pagesHome/pages/OrderSortingDetail/OrderSortingDetail.css vendored

File diff suppressed because one or more lines are too long

2
unpackage/dist/build/app-plus/pagesHome/pages/scansorting/scansorting.css vendored

File diff suppressed because one or more lines are too long

2
unpackage/dist/dev/mp-weixin/project.config.json vendored

@ -22,7 +22,7 @@
"compileType": "miniprogram",
"libVersion": "3.1.2",
"appid": "wxedb0d10ea46a0113",
"projectname": "货无忧测试版",
"projectname": "货无忧",
"condition": {
"search": {
"current": -1,

Loading…
Cancel
Save