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 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 * @param {Object} data
@ -142,6 +159,23 @@ export function distributionStockuppageListClient(data, loadingObj = {}, canCanc
canCancel 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 * @param {Object} data
@ -157,6 +191,23 @@ export function distributionStockuporderList(data, loadingObj = {}, canCancel =
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 * @param {Object} data
@ -172,6 +223,24 @@ export function distributionStockuporderInfo(data, loadingObj = {}, canCancel =
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 * @param {Object} data
@ -355,6 +424,19 @@ export function distributionStockupstockupStockListPackageCode(data, loadingObj
canCancel canCancel
); );
} }
/** 新 -- 库存品备货生成包条 */
export function postInventoryPackageConfig(data = {}, loadingObj = {}, canCancel = false) {
return request({
url: `logpm-distribution/app/distributionStockup/inventoryPackageConfig`,
method: "post",
data
},
loadingObj,
canCancel
);
}
/** /**
* 装车扫描 * 装车扫描
* @param {Object} data * @param {Object} data
@ -3861,7 +3943,7 @@ export function getOrderPackageDetail(orderPackageCode, loadingObj = {}, canCanc
); );
} }
/** 根据包条码查询包条详情 */ /** 上传配载图片 -- 装车前 */
export function postUploadLoadingPhoto(data, loadingObj = {}, canCancel = false) { export function postUploadLoadingPhoto(data, loadingObj = {}, canCancel = false) {
return request({ return request({
url: `logpm-trunkline/carsLoad/uploadLoadingPhoto`, 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) { export function postDeliveryOrderCodeWarehouseDetail(data, loadingObj = {}, canCancel = false) {
@ -3923,4 +4034,28 @@ export function getBasicNoticeList(data, loadingObj = {}, canCancel = false) {
loadingObj, loadingObj,
canCancel 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); console.log('err :>> ', err);
//TODO handle the exception //TODO handle the exception
} finally { } finally {
instance.proxy.$forceUpdate(); // instance.proxy.$forceUpdate();
console.log('instance :>> ', instance); // console.log('instance :>> ', instance);
} }

11
config/host.js

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

370
manifest.json

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

8
pages.json

@ -854,6 +854,14 @@
"onReachBottomDistance": 1, "onReachBottomDistance": 1,
"navigationStyle": "custom" "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', 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: '我的考核', name: '我的考核',
router: '/pagesHome/pages/integralMy/integralMy', router: '/pagesHome/pages/integralMy/integralMy',
}, },

14
pages/news/news.vue

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

3
pages/user/user.vue

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

419
pagesHome/pages/ArrivalList/ArrivalList.vue

@ -97,21 +97,19 @@
</view> </view>
<view class="button-container" v-else-if="item.showControl"> <view class="button-container" v-else-if="item.showControl">
<view class=""> <view class="button" @click="handleDetailsByOrder(item, 1)">
<view class="button" @click="handleDetailsByOrder(item, 1)"> 按件入库
按件入库 </view>
</view>
<view class="button" @click="handleDetailsByOrder(item, 2)"> <view class="button" @click="handleDetailsByOrder(item, 2)">
整托入库 整托入库
</view> </view>
<view class="button" @click="handleScanByTray(item)"> <view class="button" @click="handleScanByTray(item)">
卸分一体 卸分一体
</view>
</view> </view>
<view class="" v-if="item.showTruckLoading"> <template v-if="item.showTruckLoading">
<view class="button" @click="gostockuplist(item)"> <view class="button" @click="gostockuplist(item)">
按件装车 按件装车
</view> </view>
@ -119,6 +117,19 @@
<view class="button" @click="gostockuplistBytray(item)"> <view class="button" @click="gostockuplistBytray(item)">
整托装车 整托装车
</view> </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>
</view> </view>
</template> </template>
@ -144,6 +155,29 @@
</BasicContainer> </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' <l-calendar v-model:value="show" :initStartDate='date[0]' :initEndDate='date[1]' @hide='showCalendar'
@change="onConfirm"></l-calendar> @change="onConfirm"></l-calendar>
<saomiao2 :ishidestop="scanState !== 0"></saomiao2> <saomiao2 :ishidestop="scanState !== 0"></saomiao2>
@ -153,7 +187,10 @@
import { import {
postArriveUnloadPageList, postArriveUnloadPageList,
warehouseTrayTypeorderScanTrayCode, warehouseTrayTypeorderScanTrayCode,
postArriveCarByLoadId postArriveCarByLoadId,
postUploadLoadingPhoto,
postUploadStartPhoto,
postUploadUnloadPhoto
} from '@/api/user.js' } from '@/api/user.js'
import { import {
onLoad, onLoad,
@ -162,6 +199,7 @@
} from '@dcloudio/uni-app' } from '@dcloudio/uni-app'
import { computed, nextTick, reactive, ref, toRefs, watchEffect } from "vue"; import { computed, nextTick, reactive, ref, toRefs, watchEffect } from "vue";
import utils from '@/utils/utils.js' import utils from '@/utils/utils.js'
import functions from '@/utils/functions.js';
import useSystemSettingsStore from '@/store/useSystemSettingsStore'; import useSystemSettingsStore from '@/store/useSystemSettingsStore';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
const { scanState } = storeToRefs(useSystemSettingsStore()) const { scanState } = storeToRefs(useSystemSettingsStore())
@ -212,6 +250,7 @@
// //
const basicContainer = ref() const basicContainer = ref()
const LoadUploadImg = ref()
// //
let antiShake : any = null let antiShake : any = null
@ -275,7 +314,105 @@
/** 扫描的码值 */ /** 扫描的码值 */
scancode: '', scancode: '',
scrollheight: '80vh', 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([ 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 { const {
show, show,
datatime, datatime,
@ -524,8 +853,6 @@
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import url(@/utils/style/common.scss);
.inputsr { .inputsr {
width: 100%; width: 100%;
height: 64upx; height: 64upx;
@ -663,13 +990,13 @@
.button-container { .button-container {
border-top: 4upx solid #eee; border-top: 4upx solid #eee;
padding-top: 10upx; 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 { .w100 {
width: 100%; 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"> <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" /> <u-icon name="file-text-fill" color="#fff" size="36" />
<text class="ml10"> <text class="ml10">
打印清单
</text> </text>
</view> </view>
</view> </view>
@ -243,10 +243,18 @@
</view> </view>
</view> </view>
<!-- 零担/库存品继续录入 --> <view class="footer">
<template v-if="details.tabBarState !== 1"> <view class="footer_container flex">
<view class="buts" @click="setshowstate(details.tabBarState)">继续录入</view> <view class="button" @click="handleCreateTray">
</template> 打印托盘码
</view>
<!-- 零担/库存品继续录入 -->
<template v-if="details.tabBarState !== 1">
<view class="button" @click="setshowstate(details.tabBarState)">继续录入</view>
</template>
</view>
</view>
<template v-if="details.showstate !== 0"> <template v-if="details.showstate !== 0">
<view class="tanchuangbg" @click="setshowstate(0)" @touchmove.stop v-if="showstate !== 0"> <view class="tanchuangbg" @click="setshowstate(0)" @touchmove.stop v-if="showstate !== 0">
@ -569,6 +577,7 @@
title: '提示', title: '提示',
content: '确认删除该订单与托盘码的绑定?', content: '确认删除该订单与托盘码的绑定?',
confirmTxt: '确认', confirmTxt: '确认',
cancelTxt: '取消',
isshow: true, isshow: true,
isshowcancel: true, isshowcancel: true,
success: async () => { success: async () => {
@ -598,6 +607,7 @@
title: '提示', title: '提示',
content: '确认删除该订单和托盘的绑定?', content: '确认删除该订单和托盘的绑定?',
confirmTxt: '确认', confirmTxt: '确认',
cancelTxt: '取消',
isshow: true, isshow: true,
isshowcancel: true, isshowcancel: true,
success: async () => { success: async () => {
@ -627,6 +637,7 @@
isshow: true, isshow: true,
content: '确认删除该数据?', content: '确认删除该数据?',
confirmTxt: '删除', confirmTxt: '删除',
cancelTxt: '取消',
success: async () => { success: async () => {
let data = { let data = {
trayGoodsId: item.trayGoodsId, 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 } = const { datelist, detauser, showstate, waybillCode, checkinarr, Remarktext, codelist } =
toRefs(details) toRefs(details)
</script> </script>
@ -1255,7 +1312,7 @@
min-width: 50%; min-width: 50%;
flex: none; flex: none;
font-size: 0.8rem; font-size: 0.8rem;
padding: 5upx; padding: 10upx;
box-sizing: border-box; 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> </style>

14
pagesHome/pages/PeopleScanUp/PeopleScanUp.vue

@ -7,6 +7,14 @@
<image src="/pagesHome/static/scanqc.png"></image> <image src="/pagesHome/static/scanqc.png"></image>
<view>请直接扫描库位码</view> <view>请直接扫描库位码</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="topviewbox">
<view class="oebox"> <view class="oebox">
<image src="/pagesHome/static/changku.png"></image> <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.showstate = 0
details.codelist = [] details.codelist = []
details.waybillCode = '' details.waybillCode = ''
@ -859,6 +869,8 @@
let result = []; let result = [];
tempArr.map((item) => { tempArr.map((item) => {
item.goodsType = fnname === 'orderCode' ? 2 : 3
if (result.length == 0) { if (result.length == 0) {
item.enterNum = Number(item.enterNum) item.enterNum = Number(item.enterNum)
result.push(item) result.push(item)

105
pagesHome/pages/PickingScanList/PickingScanList.vue

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

345
pagesHome/pages/StockUplist/StockUplist.vue

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

225
pagesHome/pages/StockUplistScandetails/StockUplistScandetails.vue

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

188
pagesHome/pages/StowageList/StowageList.vue

@ -43,7 +43,7 @@
<template #body> <template #body>
<view class="sccv" @scrolltolower="jiazai"> <view class="sccv" @scrolltolower="jiazai">
<view class="mabx"> <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="topbox font-color">
<view class="type1"> <view class="type1">
<view> <view>
@ -86,29 +86,28 @@
</view> </view>
<template v-if="status!==2"> <template v-if="status!==2">
<!-- <template v-if="item.isLoadingPhoto"> --> <view class="bts">
<view class="bts flex-c-sa">
<view @click="handleShowImg(item)"> <view class="btn" @click="gostockuplistBytray(item)">
上传运输合同 整托装车
</view> </view>
<view @click="gostockuplistBytray(item)"> <view class="btn" @click="gostockuplist(item)">
整托装车 按件装车
</view> </view>
<view @click="gostockuplist(item)"> <view @click="handleShowImg(item)">
按件装车 上传运输合同
</view> </view>
<view @click="handleShowLoadImg(item, 'beforeLoad')">
上传装车前图片
</view> </view>
<!-- </template> -->
<!-- <template v-else> <view @click="handleShowLoadImg(item, 'beforeStart')">
<view class="bts flex-c-sa"> 上传发车前图片
<view @click="handleShowLoadImg(item)">
上传装车前图片
</view>
</view> </view>
</template> --> </view>
</template> </template>
<view :class="{tip:true, active: status==2}"> <view :class="{tip:true, active: status==2}">
@ -135,11 +134,17 @@
<!-- 装车前上传 --> <!-- 装车前上传 -->
<PopUp ref="LoadUploadImg"> <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">
<view class="upload_img_item_title"> <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> </view>
<u-upload :fileList="item.imgArr" @afterRead="(e)=> handleUploadImg(e, item.imgArr)" <u-upload :fileList="item.imgArr" @afterRead="(e)=> handleUploadImg(e, item.imgArr)"
@ -164,7 +169,7 @@
onUnload, onUnload,
onPullDownRefresh onPullDownRefresh
} from '@dcloudio/uni-app' } 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 { timeType } from '@/interfaces/pagesHome/allType'
import functions from '@/utils/functions.js'; import functions from '@/utils/functions.js';
import { inject, reactive, ref, toRefs, watchEffect, nextTick } from "vue"; import { inject, reactive, ref, toRefs, watchEffect, nextTick } from "vue";
@ -217,6 +222,53 @@
imgArr: [] 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: [] 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) => { const handleShowLoadImg = (item, type) => {
details.oldImgArr = [] 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({ LoadUploadImg.value.setDetails({
title: '装车前照片', title,
showPopUp: true, showPopUp: true,
async success() { async success() {
console.log('details.LoadUploadImgOption :>> ', details.LoadUploadImgOption);
console.log('details.imgFileList :>> ', details.imgFileList);
const submitData = { const submitData = {
loadId: item.id, loadId: item.id,
addUrlList: [], addUrlList: [],
removeUrlList: [] removeUrlList: []
} }
const _oldImgArr = utils.deepClone(details.oldImgArr)
for (let i = 0; i < details.LoadUploadImgOption.length; i++) { for (let i = 0; i < details.imgOption.length; i++) {
const value = details.LoadUploadImgOption[i] const value = details.imgOption[i]
console.log('value :>> ', value);
if (value.imgArr.length < value.min) return utils.handleToast(`${value.title}最少上传${value.min}`) if (value.imgArr.length < value.min) return utils.handleToast(`${value.title}最少上传${value.min}`)
for (let i = 0; i < value.imgArr.length; i++) { for (let i = 0; i < value.imgArr.length; i++) {
@ -445,7 +534,8 @@
if (_val.url !== item.url) continue if (_val.url !== item.url) continue
isContinue = true isContinue = true
_val.splace(i, 1) _oldImgArr.splice(i, 1)
break
} }
if (isContinue) continue 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 const { code, msg } = res
@ -760,8 +864,10 @@
>.bts { >.bts {
display: flex; display: flex;
flex-wrap: wrap;
align-items: center; align-items: center;
margin: 20upx 0; padding: 0 20upx;
margin-top: 20upx;
>view { >view {
border-radius: 8upx; border-radius: 8upx;
@ -775,11 +881,13 @@
font-weight: 400; font-weight: 400;
padding: 10upx 30upx; padding: 10upx 30upx;
color: #0086F1; color: #0086F1;
} margin-bottom: 20upx;
margin-right: 20upx;
>view:nth-of-type(2) { &.btn {
border-color: var(--subjectColor); border-color: var(--subjectColor);
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 += `T 55 0 140 260 ${item.qrCode}\r\n`
text += 'FORM\r\n' text += 'FORM\r\n'
text += 'PRINT\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(() => { utils.getbl(bluetoothInfo.value, text).catch(() => {
bluetoothList.value.setdetails({ isshow: true }) bluetoothList.value.setdetails({ isshow: true })
_isReturn = true _isReturn = true

45
pagesHome/pages/pickingScan/pickingScan.vue

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

389
pagesHome/pages/scansorting/scansorting.vue

@ -24,67 +24,75 @@
<!-- 主体 --> <!-- 主体 -->
<template #body> <template #body>
<scroll-view class="scvmabx"> <view class="maxboxs">
<view class="maxboxs"> <view class="items" v-for="item in datalist">
<view class="items" v-for="item in datalist"> <view class="headtopv">
<view class="headtopv"> <view>
<view> <image src="/pagesHome/static/tpicon.png"></image>
<image src="/pagesHome/static/tpicon.png"></image> <view>{{`${item.trayName} ( ${item.trayCode} )`}}</view>
<view>{{`${item.trayName} ( ${item.trayCode} )`}}</view>
</view>
<view @click="goorderdetail(item)">继续分拣</view>
</view> </view>
<view class="contentbx"> <view @click="goorderdetail(item)">继续分拣</view>
<view class="unames"> </view>
<view> <view class="contentbx">
<view> <view class="unames">
<image src="/pagesHome/static/uname.png"></image> <view class="mb10">
<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> <view>
<view> <image src="/pagesHome/static/uname.png"></image>
<image src="/pagesHome/static/dttype.png"></image> <view>名称</view>
<view>备注</view>
</view>
<view>{{item.remark}}</view>
</view> </view>
<view>{{item.marketName}}{{item.filterValue}}</view>
</view> </view>
<view class="numbox"> <view class="mb10">
<view>
<view>订单数</view>
<view>{{item.totalNum}}</view>
</view>
<view>
<view>订单总数</view>
<view>{{item.orderTotalNum}}</view>
</view>
<view> <view>
<view>库存品数</view> <image src="/pagesHome/static/dttype.png"></image>
<view>{{item.stockNum}}</view> <view>打托方式</view>
</view> </view>
<view>{{item.trayTypeName}}</view>
</view>
<view class="mb10">
<view> <view>
<view>库存品总数</view> <image src="/pagesHome/static/dttype.png"></image>
<view>{{item.stockTotalNum}}</view> <view>备注</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>
</view> </view>
</view> </view>
</scroll-view> </view>
</template> </template>
</BasicContainer> </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' <l-calendar v-model:value="show" :initStartDate='date[0]' :initEndDate='date[1]' @hide='showCalendar'
@change="onConfirm"></l-calendar> @change="onConfirm"></l-calendar>
<saomiao2 :ishidestop="scanState !== 0"></saomiao2> <saomiao2 :ishidestop="scanState !== 0"></saomiao2>
@ -94,6 +102,7 @@
import { import {
warehouseTrayTypeorderPageList, warehouseTrayTypeorderPageList,
warehouseTrayTypeorderScanTrayCode, warehouseTrayTypeorderScanTrayCode,
postCreateTray
} from '@/api/user.js' } from '@/api/user.js'
import { import {
onLoad, onLoad,
@ -105,6 +114,11 @@
import useSystemSettingsStore from '@/store/useSystemSettingsStore'; import useSystemSettingsStore from '@/store/useSystemSettingsStore';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
const { scanState } = storeToRefs(useSystemSettingsStore()) const { scanState } = storeToRefs(useSystemSettingsStore())
import useBluetoothStore from '@/store/useBluetoothStore.js';
const bluetoothList = ref(null)
const bluetoothStore = useBluetoothStore()
const { bluetoothInfo } = storeToRefs(bluetoothStore)
// //
const option = reactive({ const option = reactive({
leftClick() { leftClick() {
@ -151,7 +165,7 @@
}) })
const basicContainer = ref() const basicContainer = ref()
const tip = ref()
// //
function reachBottomInitPage() { function reachBottomInitPage() {
@ -255,25 +269,100 @@
}) })
} }
} }
//
function showCalendar() { function showCalendar() {
details.show = !details.show details.show = !details.show
} }
//
function onConfirm(e : any) { function onConfirm(e : any) {
console.log(e); console.log(e);
date.value[0] = e.startDate date.value[0] = e.startDate
date.value[1] = e.endDate date.value[1] = e.endDate
details.datatime = date.value[0] + ' 至 ' + date.value[1] details.datatime = date.value[0] + ' 至 ' + date.value[1]
basicContainer.value.startPullDownRefresh() 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() { function cleartime() {
// console.log(1231211);
details.datatime = '' details.datatime = ''
date.value = [] date.value = []
basicContainer.value.startPullDownRefresh() 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 { const {
show, show,
datatime, datatime,
@ -287,8 +376,7 @@
width: 550upx !important; width: 550upx !important;
height: 75upx; height: 75upx;
background: #F5F5F6; background: #F5F5F6;
border-radius: 8upx 8upx 8upx 8upx; border-radius: 8upx;
opacity: 1;
border: 2upx solid #EEEEEE; border: 2upx solid #EEEEEE;
padding: 16upx 18upx; padding: 16upx 18upx;
box-sizing: border-box; box-sizing: border-box;
@ -345,7 +433,6 @@
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
// margin-top: 20upx;
background-color: #FFFFFF; background-color: #FFFFFF;
padding: 20upx 30upx; padding: 20upx 30upx;
box-sizing: border-box; box-sizing: border-box;
@ -356,9 +443,6 @@
padding: 10upx 20upx; padding: 10upx 20upx;
box-sizing: border-box; box-sizing: border-box;
// flex: 1;
// margin-right: 50upx;
// border-radius: 10upx;
>input { >input {
flex: 1; flex: 1;
font-size: 28upx; font-size: 28upx;
@ -379,126 +463,137 @@
} }
} }
.scvmabx {
width: 100%;
margin-top: 20upx;
.maxboxs {
width: 100%; .maxboxs {
padding: 20upx;
>.items {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; background-color: #ffffff;
margin-bottom: 20upx;
padding: 16upx 30upx;
box-sizing: border-box;
>.items { .contentbx {
width: 100%;
display: flex;
flex-direction: column;
background-color: #ffffff;
margin-bottom: 20upx;
padding: 16upx 30upx;
box-sizing: border-box;
.contentbx { .unames {
display: flex; padding: 15upx 0;
flex-direction: column;
.unames { >view {
display: flex; display: flex;
flex-direction: column; align-items: center;
align-items: flex-start; font-size: 28upx;
padding: 15upx 0;
>view { >view:nth-of-type(1) {
width: 180upx;
display: flex; display: flex;
align-items: center; 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 { image {
display: flex; width: 42upx;
flex-direction: column; height: 42upx;
align-items: center; margin-right: 15upx;
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;
}
} }
} }
} }
.headtopv { .numbox {
height: 160upx;
background: #F5F7FB;
border-radius: 8upx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 14upx 0;
border-bottom: 2upx solid #EEEEEE;
>view:nth-of-type(1) { >view {
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
justify-content: center;
color: #020B18; >view:nth-of-type(1) {
font-size: 32upx; font-size: 28upx;
font-weight: 400;
>image { color: #AFB4BA;
width: 32upx; margin-bottom: 20upx;
height: 32upx; }
margin-right: 10upx;
>view:nth-of-type(2) {
font-size: 36upx;
font-weight: 400;
color: #020B18;
} }
} }
}
}
>view:last-child { .headtopv {
width: 192upx; display: flex;
height: 72upx; align-items: center;
background: #D3832A; justify-content: space-between;
border-radius: 8upx 8upx 8upx 8upx; padding: 14upx 0;
opacity: 1; border-bottom: 2upx solid #EEEEEE;
display: flex;
align-items: center; >view:nth-of-type(1) {
justify-content: center; display: flex;
font-size: 28upx; align-items: center;
font-weight: 400; justify-content: center;
color: #FFFFFF; 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> </view>
<view class="butsbx"> <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 === 1}" @click="setstockPrint(1)">采集原包条码</view>
<view :class="{'active':details.stockPrint === 2}" @click="setstockPrint(2)">扫描打印包条码</view> <view :class="{'active':details.stockPrint === 2}" @click="setstockPrint(2)">扫描打印包条码</view>
<view @click="showmd">新生成包条码</view> <!-- <view @click="showmd">新生成包条码</view> -->
</view> </view>
</template> </template>
@ -103,11 +95,11 @@
import useBluetoothStore from '@/store/useBluetoothStore.js'; import useBluetoothStore from '@/store/useBluetoothStore.js';
import useSystemSettingsStore from '@/store/useSystemSettingsStore'; import useSystemSettingsStore from '@/store/useSystemSettingsStore';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import utils from '@/utils/utils.js';
const { scanState } = storeToRefs(useSystemSettingsStore()) const { scanState } = storeToRefs(useSystemSettingsStore())
const bluetoothList = ref(null) const bluetoothList = ref(null)
const bluetoothStore = useBluetoothStore() const bluetoothStore = useBluetoothStore()
const { bluetoothInfo } = storeToRefs(bluetoothStore) const { bluetoothInfo } = storeToRefs(bluetoothStore)
const utils = inject('utils') as any
let details = reactive({ let details = reactive({
items: {}, items: {},
reservationId: '', reservationId: '',
@ -128,13 +120,8 @@
packageNum: 0, packageNum: 0,
/** 已扫数量 */ /** 已扫数量 */
realityNum: 0, realityNum: 0,
mallName: '',
/** 是否为扫描后进行刷新 */ /** 是否为扫描后进行刷新 */
isscan: true, isscan: true,
/** 备货库位ID */
stockupAllocationId: '',
/** 备货库位名称 */
stockupAllocationName: '',
}) })
const tips = ref(null) const tips = ref(null)
const basicContainer = ref(null) const basicContainer = ref(null)
@ -146,25 +133,16 @@
haveData: true, haveData: true,
async pullDownRefreshInitPage() { async pullDownRefreshInitPage() {
await initpage() await initpage()
} },
isFixed: true
} }
onUnload(() => {
uni.removeStorageSync('setbarcodeInfo')
})
// const tiplists=ref(null) // const tiplists=ref(null)
onLoad((op) => { onLoad((op) => {
details.stockupId = op.stockupId 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.reservationId = op.reservationId
details.goodsAreaName = op.goodsAreaName
details.allocationId = op.allocationId details.allocationId = op.allocationId
details.positionCode = op.positionCode details.positionCode = op.positionCode
details.typeService = op.typeService details.typeService = op.typeService
details.mallName = op.mallName
details.stockupAllocationId = op.stockupAllocationId
details.stockupAllocationName = op.stockupAllocationName
if (op.completeStact == 'true') { if (op.completeStact == 'true') {
details.completeStact = true details.completeStact = true
} }
@ -245,19 +223,14 @@
let data = { let data = {
orderStatus: 2, orderStatus: 2,
reservationId: details.reservationId, reservationId: details.reservationId,
stockListId: details.items.stockListId,
stockupId: details.stockupId, stockupId: details.stockupId,
allocationId: details.allocationId,
positionCode: details.positionCode,
typeService: details.typeService, typeService: details.typeService,
status: details.completeStact ? 1 : 0,
cargoNumber: details.items.cargoNumber
} }
// let response = await distributionStockuporderInfo(data) // let response = await distributionStockuporderInfo(data)
let response = await stockConfigList(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.codelist = response.data.stockConfigOrderPackageListVOS
details.customer = response.data.customer details.customer = response.data.customer
details.deliveryAddress = response.data.deliveryAddress details.deliveryAddress = response.data.deliveryAddress
@ -360,7 +333,7 @@
const printList = checklist.map(val => deta.list[val]) const printList = checklist.map(val => deta.list[val])
printList.map(item => { printList.forEach(item => {
// const util=(inject('utils') as any) // const util=(inject('utils') as any)
let text = '! 0 200 200 333 1\r\n' let text = '! 0 200 200 333 1\r\n'
text += 'SETBOLD 2\r\n' text += 'SETBOLD 2\r\n'
@ -407,70 +380,24 @@
details.isscan = true details.isscan = true
let data = { let submitData : any = {
scanType: 2, scanType: 2,
stockListId: details.items.stockListId,
packetBarCode: code, packetBarCode: code,
stockupArea: details.goodsAreaName,
reservationId: details.reservationId, reservationId: details.reservationId,
stockupId: details.stockupId, stockupId: details.stockupId,
allocationId: details.allocationId,
// stockPrint: details.items.sourceType,
// status: details.completeStact ? 1 : 0,
stockPrint: details.stockPrint, stockPrint: details.stockPrint,
status: details.stockPrint, typeService: details.typeService
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
} }
// if (submitData.stockPrint === 2) {
const response = await distributionStockupstockupScanCheck(data) submitData.positionCode = details.positionCode
submitData.allocationId = details.allocationId
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()
}
}
})
} }
//
else if (resCode === 200) { let res = await distributionStockupstockupScan(submitData)
delete data.marketCode console.log(res);
let res = await distributionStockupstockupScan(data) if (res.code == 200) {
console.log(res); basicContainer.value.startPullDownRefresh()
if (res.code == 200) {
basicContainer.value.startPullDownRefresh()
}
} }
} catch (e) { } catch (e) {
@ -485,16 +412,14 @@
<style lang="scss"> <style lang="scss">
.scrollv { .scrollv {
width: 686upx; min-height: 60vh;
height: 60vh; margin: 20upx;
// padding: 10upx;
box-sizing: border-box;
background-color: #ffffff; background-color: #ffffff;
margin: auto;
margin-top: 20upx; margin-top: 20upx;
padding: 20upx; padding: 20upx;
box-sizing: border-box; box-sizing: border-box;
border-radius: 10upx; border-radius: 10upx;
width: auto;
.mabxs { .mabxs {
display: flex; display: flex;
@ -548,7 +473,7 @@
align-items: center; align-items: center;
// justify-content: space-around; // justify-content: space-around;
margin-top: 25upx; margin-top: 25upx;
padding: 0 4%; // padding: 0 4%;
>view { >view {
width: 204upx; width: 204upx;
@ -568,22 +493,14 @@
background-color: var(--subjectColor); background-color: var(--subjectColor);
color: #fff; color: #fff;
} }
// &:nth-of-type(2) {
// margin-left: 20upx;
// }
} }
} }
.head { .head {
display: flex; width: 100vw;
flex-direction: column; box-sizing: border-box;
align-items: center;
justify-content: space-around;
padding: 20upx; padding: 20upx;
// height: 176upx;
box-sizing: border-box; box-sizing: border-box;
// border-bottom: 2upx solid #ececec;
background-color: #ffffff; background-color: #ffffff;
>.type1 { >.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", "compileType": "miniprogram",
"libVersion": "3.1.2", "libVersion": "3.1.2",
"appid": "wxedb0d10ea46a0113", "appid": "wxedb0d10ea46a0113",
"projectname": "货无忧测试版", "projectname": "货无忧",
"condition": { "condition": {
"search": { "search": {
"current": -1, "current": -1,

Loading…
Cancel
Save