hutongqing
2024-12-16 78311f131e9dee7e183aecb76ead86510e2bbdfe
Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn
已删除4个文件
已修改23个文件
已添加568个文件
93345 ■■■■■ 文件已修改
代码管理/PDA.zip 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/0f60b943-ef81-4dea-85d5-c72f1e023d53.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/21553faa-f482-4cad-bdea-7867d42f4bac.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7ef307ad-ea94-4ff6-9f94-954e08ae3914.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/94bf32fb-a9ab-47de-b62c-824e9491924a.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9c17e159-331e-4125-a28c-5a8ab0b1e2a2.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9e1d61a9-543a-4f29-8a45-612c6ce8feca.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c37ec95c-ca36-40d5-988e-41ceb36fe9a6.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/e0712c6d-3f7b-4769-b7a3-cc59cff4d10a.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f7a5ecd7-5ca5-4e04-904a-54fa34104eb6.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DeviceInfo.tsv 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/HoisterJob/CommonHoisterJob.cs 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/HoisterJob/HoisterDBName.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7c6138bc-3140-4505-80bf-ce7e49063d2e.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8ec046b0-40f2-4e27-acac-8986b42cfae0.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/90452a76-738e-47ca-a3e0-da8f36d31ada.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/993667d3-2068-4ea5-8fda-e1b10b53b187.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/9ec6694e-5882-4f4c-83dc-d548cd406f48.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/MaterielInfoDTO.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/SupplierDTO.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpOutOrderDTO.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/PurchaseOrderModel.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReceiveOrderDetailService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReceiveOrderService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrder.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetailController.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderController.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderDetailController.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/.eslintignore 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/.hbuilderx/launch.json 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/.vscode/launch.json 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/App.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/LICENSE 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/common/config.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/common/http.interceptor.js 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/common/uni-ui.scss 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/components/uni-section/config.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/components/uni-section/readme.md 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/components/uni-section/uni-section.vue 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/main.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/manifest.json 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/package-lock.json 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/package.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages.json 460 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/acrossfloor/acrossfloorcallmat.vue 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/acrossfloor/matbind.vue 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/allocationorder/allocationorder.vue 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/allocationorder/allocationorderoutbound.vue 437 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/callmat/ordercallmat.vue 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/callmat/receiveorder.vue 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/carea/cacheareacallmat.vue 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/carea/carea.vue 317 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/carea/zbareaboxing.vue 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/carry/getCarryRequest.vue 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/delivery/carrycheck.vue 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/delivery/delivery.vue 278 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/delivery/getcarryinfo.vue 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/delivery/trainstockbind.vue 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/directorder/directorder.vue 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/directorder/directorderoutbound.vue 574 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/emptybox/emptyboxmanage.vue 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/halfproduct/halfproductboxing.vue 289 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/halfproduct/hpreceiveorder.vue 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/home/home.vue 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/index/index.vue 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/index/settings.vue 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/login/login.vue 531 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/other/other.vue 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/other/printtag.vue 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/other/printtagf4.vue 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/other/printtagf7.vue 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/otherboxing/otherboxing.vue 491 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/otheroutboundorder/otherorderoutbound.vue 588 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/otheroutboundorder/otheroutboundorder.vue 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/outboundscan/matoutboundscan.vue 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/outboundscan/productoutboundscan.vue 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/picking/pickingMat.vue 430 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/productboxing/productboxing.vue 344 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/productoutbound/productoutbound.vue 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/rawhandoutbound/handoutbound.vue 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/rawhandoutbound/kbhandoutbound.vue 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/rawhandoutbound/manualoutbound.vue 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/rawhandoutbound/rawhandoutbound.vue 611 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/raworderboxing/inboundorder.vue 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/raworderboxing/orderboxing.vue 353 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/raworderboxing/raworderboxing.vue 504 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/raworderboxing/releaseboxing.vue 237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/receiveorder/multiplereceiveorder.vue 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/receiveorder/multiplereceiveorderout.vue 597 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/receiveorder/receiveorder.vue 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/receiveorder/receiveorderoutbound.vue 620 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/relocation/relocation.vue 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stock/bindstock.vue 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stock/releasestock.vue 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/stock/stock.vue 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/taskInfo/cancelTask.vue 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/template/tabtemplate.vue 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/test/acrossfloor.vue 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/pages/test/qianfushitest.vue 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/center-selected.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/center.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/fail.mp3 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/index-selected.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/index.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/login_bottom_bg.jpg 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/login_top2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/login_top3.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/repeat.mp3 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/static/success.mp3 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/template.h5.html 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/README.md 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-action-sheet/tn-action-sheet.vue 202 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-avatar-group/tn-avatar-group.vue 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-avatar/tn-avatar.vue 298 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-badge/tn-badge.vue 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-button/tn-button.vue 302 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-calendar/tn-calendar.vue 707 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-car-keyboard/tn-car-keyboard.vue 320 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-cascade-selection/tn-cascade-selection.vue 654 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-checkbox-group/tn-checkbox-group.vue 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-checkbox/tn-checkbox.vue 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-circle-progress/tn-circle-progress.vue 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-collapse-item/tn-collapse-item.vue 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-collapse/tn-collapse.vue 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-color-icon/tn-color-icon.vue 318 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-column-notice/tn-column-notice.vue 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-count-down/tn-count-down.vue 314 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-count-scroll/tn-count-scroll.vue 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-count-to/tn-count-to.vue 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-cropper/index.wxs 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-cropper/tn-cropper.vue 570 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-custom-swiper-item/index.wxs 288 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-custom-swiper-item/tn-custom-swiper-item.vue 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-custom-swiper/tn-custom-swiper.vue 535 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-drag/index.wxs 265 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-drag/tn-drag.vue 278 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-empty/tn-empty.vue 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-fab/tn-fab.vue 523 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-form-item/tn-form-item.vue 457 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-form/tn-form.vue 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-goods-nav/tn-goods-nav.vue 382 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-grid-item/tn-grid-item.vue 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-grid/tn-grid.vue 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-image-upload-drag/tn-image-upload-drag.vue 995 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-image-upload/tn-image-upload.vue 645 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-index-anchor/tn-index-anchor.vue 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-index-list/tn-index-list.vue 361 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-input/tn-input.vue 427 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-keyboard/tn-keyboard.vue 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-landscape/tn-landscape.vue 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-lazy-load/tn-lazy-load.vue 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-line-progress/tn-line-progress.vue 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-list-cell/tn-list-cell.vue 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-list-view/tn-list-view.vue 184 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-load-more/tn-load-more.vue 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-loading/tn-loading.vue 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-modal/tn-modal.vue 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-nav-bar/tn-nav-bar.vue 355 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-notice-bar/tn-notice-bar.vue 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-number-box/tn-number-box.vue 401 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-number-keyboard/tn-number-keyboard.vue 182 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-picker/tn-picker.vue 723 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-popup/tn-popup.vue 491 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-radio-group/tn-radio-group.vue 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-radio/tn-radio.vue 265 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-rate/tn-rate.vue 334 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-read-more/tn-read-more.vue 222 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-row-notice/tn-row-notice.vue 301 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-scroll-list/tn-scroll-list.vue 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-scroll-view/tn-scroll-view.vue 401 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-select/tn-select.vue 380 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-sign-board/tn-sign-board.vue 690 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-skeleton/tn-skeleton.vue 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-slider/tn-slider.vue 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-stack-swiper/index-h5.wxs 657 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-stack-swiper/index.wxs 657 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-stack-swiper/tn-stack-swiper.vue 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-steps/tn-steps.vue 346 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-sticky/tn-sticky.vue 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-subsection/tn-subsection.vue 410 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-swipe-action-item/index.wxs 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-swipe-action-item/tn-swipe-action-item.vue 236 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-swipe-action/tn-swipe-action.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-swiper/tn-swiper.vue 364 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-switch/tn-switch.vue 241 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-tabbar/tn-tabbar.vue 576 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-table/tn-table.vue 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-tabs-swiper/tn-tabs-swiper.vue 444 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-tabs/tn-tabs.vue 340 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-tag/tn-tag.vue 223 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-td/tn-td.vue 307 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue_bk 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-time-line/tn-time-line.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-time-line/tn-time-line.vue_bk 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-tips/tn-tips.vue 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-toast/tn-toast.vue 227 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-tr/tn-tr.vue 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-tree-node/tn-tree-node.vue 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-tree-view/tn-tree-view.vue 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-verification-code-input/tn-verification-code-input.vue 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-verification-code/tn-verification-code.vue 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/components/tn-waterfall/tn-waterfall.vue 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/iconfont.css 1645 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/index.js 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/index.scss 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/config/color.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/config/zIndex.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/css/color.scss 563 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/css/main.scss 722 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/css/style.h5.scss 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/css/style.mp.scss 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/$parent.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/array.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/color.js 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/colorUtils.js 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/deepClone.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/message.js 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/messageUtils.js 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/number.js 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/string.js 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/test.js 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/updateCustomBarInfo.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/function/uuid.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/mixin/components_color.js 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/mixin/mixin.js 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/mixin/mpShare.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/mixin/touch.js 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/utils/area.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/utils/async-validator.js 1356 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/utils/calendar.js 546 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/utils/city.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/utils/emitter.js 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/libs/utils/province.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/tuniao-ui/theme.scss 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni.scss 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-badge/changelog.md 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-badge/components/uni-badge/uni-badge.vue 268 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-badge/package.json 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-badge/readme.md 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-card/changelog.md 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-card/components/uni-card/uni-card.vue 270 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-card/package.json 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-card/readme.md 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-combox/changelog.md 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-combox/components/uni-combox/uni-combox.vue 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-combox/package.json 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-combox/readme.md 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-data-checkbox/changelog.md 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue 821 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-data-checkbox/package.json 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-data-checkbox/readme.md 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-data-select/changelog.md 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue 449 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-data-select/package.json 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-data-select/readme.md 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-easyinput/changelog.md 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-easyinput/components/uni-easyinput/common.js 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue 639 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-easyinput/package.json 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-easyinput/readme.md 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-forms/changelog.md 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue 631 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-forms/components/uni-forms/uni-forms.vue 397 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-forms/components/uni-forms/utils.js 293 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-forms/components/uni-forms/validate.js 486 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-forms/package.json 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-forms/readme.md 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-group/changelog.md 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-group/components/uni-group/uni-group.vue 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-group/package.json 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-group/readme.md 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-icons/changelog.md 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-icons/components/uni-icons/icons.js 1169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-icons/components/uni-icons/uni-icons.vue 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-icons/components/uni-icons/uni.ttf 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-icons/components/uni-icons/uniicons.css 663 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-icons/components/uni-icons/uniicons.ttf 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-icons/package.json 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-icons/readme.md 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-id/changelog.md 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-id/package.json 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-id/readme.md 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/LICENSE.md 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package-lock.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-list/changelog.md 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue 571 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue 530 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-list/components/uni-list/uni-list.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-list/components/uni-list/uni-refresh.vue 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-list/components/uni-list/uni-refresh.wxs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-list/package.json 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-list/readme.md 346 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-load-more/changelog.md 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue 399 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-load-more/package.json 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-load-more/readme.md 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-nav-bar/changelog.md 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue 357 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-nav-bar/package.json 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-nav-bar/readme.md 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/changelog.md 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/i18n/en.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/i18n/index.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/keypress.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/popup.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/uni-popup.vue 473 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/package.json 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-popup/readme.md 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/changelog.md 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/index.scss 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/package.json 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/readme.md 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/styles/index.scss 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_border.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_color.scss 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_radius.scss 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_space.scss 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_styles.scss 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_text.scss 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_variables.scss 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/styles/tools/functions.scss 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/theme.scss 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-scss/variables.scss 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-search-bar/changelog.md 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue 298 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-search-bar/package.json 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-search-bar/readme.md 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-segmented-control/changelog.md 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-segmented-control/package.json 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-segmented-control/readme.md 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-transition/changelog.md 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-transition/components/uni-transition/createAnimation.js 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-transition/components/uni-transition/uni-transition.vue 286 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-transition/package.json 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uni_modules/uni-transition/readme.md 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/apk/apkurl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/apk/cmManifestCache.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/certdata 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/cloudcertificate/certini 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/.manifest/icon-android-hdpi.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/.manifest/icon-android-xhdpi.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/.manifest/icon-android-xxhdpi.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/.manifest/icon-android-xxxhdpi.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappchooselocation.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniapperror.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappes6.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappopenlocation.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniapppicker.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappquill.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappquillimageresize.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappscan.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappsuccess.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappview.html 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/app-config-service.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/app-config.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/app-service.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/app-view.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/manifest.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/center-selected.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/center.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/fail.mp3 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/index-selected.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/index.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/login_bottom_bg.jpg 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/login_top2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/login_top3.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/repeat.mp3 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/success.mp3 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/uni_modules/uni-icons/components/uni-icons/uniicons.ttf 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/view.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/view.umd.min.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/1024x1024.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/120x120.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/144x144.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/152x152.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/167x167.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/180x180.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/192x192.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/20x20.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/29x29.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/40x40.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/58x58.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/60x60.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/72x72.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/76x76.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/80x80.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/87x87.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/res/icons/96x96.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappchooselocation.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniapperror.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappes6.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappopenlocation.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniapppicker.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappquill.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappquillimageresize.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappscan.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappsuccess.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappview.html 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/app-config-service.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/app-config.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/app-service.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/app-view.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/manifest.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/center-selected.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/center.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/index-selected.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/index.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/login_bottom_bg.jpg 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/login_top2.jpg 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/login_top3.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/uni_modules/uni-icons/components/uni-icons/uniicons.ttf 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/view.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/view.umd.min.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/LICENSE 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/README.md 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-action-sheet/u-action-sheet.vue 190 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-alert-tips/u-alert-tips.vue 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue 290 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-avatar-cropper/weCropper.js 1265 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-avatar/u-avatar.vue 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-back-top/u-back-top.vue 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-badge/u-badge.vue 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-button/u-button.vue 596 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-calendar/u-calendar.vue 639 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-car-keyboard/u-car-keyboard.vue 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-card/u-card.vue 299 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-cell-group/u-cell-group.vue 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-cell-item/u-cell-item.vue 316 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-checkbox-group/u-checkbox-group.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-checkbox/u-checkbox.vue 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-circle-progress/u-circle-progress.vue 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-col/u-col.vue 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-collapse-item/u-collapse-item.vue 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-collapse/u-collapse.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-column-notice/u-column-notice.vue 237 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-count-down/u-count-down.vue 318 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-count-to/u-count-to.vue 241 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-divider/u-divider.vue 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-dropdown-item/u-dropdown-item.vue 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-dropdown/u-dropdown.vue 298 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-empty/u-empty.vue 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-field/u-field.vue 384 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-form-item/u-form-item.vue 431 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-form/u-form.vue 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-full-screen/u-full-screen.vue 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-gap/u-gap.vue 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-grid-item/u-grid-item.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-grid/u-grid.vue 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-icon/u-icon.vue 336 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-image/u-image.vue 266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-index-anchor/u-index-anchor.vue 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-index-list/u-index-list.vue 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-input/u-input.vue 387 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-keyboard/u-keyboard.vue 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-lazy-load/u-lazy-load.vue 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-line-progress/u-line-progress.vue 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-line/u-line.vue 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-link/u-link.vue 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-loading-page/u-loading-page.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-loading/u-loading.vue 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-loadmore/u-loadmore.vue 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-mask/u-mask.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-message-input/u-message-input.vue 311 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-modal/u-modal.vue 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-navbar/u-navbar.vue 315 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-no-network/u-no-network.vue 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-notice-bar/u-notice-bar.vue 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-number-box/u-number-box.vue 363 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-number-keyboard/u-number-keyboard.vue 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-parse/libs/CssHandler.js 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-parse/libs/MpHtmlParser.js 580 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-parse/libs/config.js 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-parse/libs/handler.wxs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-parse/libs/trees.vue 505 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-parse/u-parse.vue 645 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-picker/u-picker.vue 676 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-popup/u-popup.vue 456 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-radio-group/u-radio-group.vue 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-radio/u-radio.vue 271 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-rate/u-rate.vue 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-read-more/u-read-more.vue 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-row-notice/u-row-notice.vue 269 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-row/u-row.vue 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-search/u-search.vue 342 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-section/u-section.vue 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-select/u-select.vue 417 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-skeleton/u-skeleton.vue 199 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-slider/u-slider.vue 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-steps/u-steps.vue 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-sticky/u-sticky.vue 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-subsection/u-subsection.vue 355 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-swipe-action/u-swipe-action.vue 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-swiper/u-swiper.vue 340 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-switch/u-switch.vue 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-tabbar/u-tabbar.vue 330 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-table/u-table.vue 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue 488 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-tabs/u-tabs.vue 368 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-tag/u-tag.vue 294 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-td/u-td.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-th/u-th.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-time-line-item/u-time-line-item.vue 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-time-line/u-time-line.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-toast/u-toast.vue 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-top-tips/u-top-tips.vue 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-tr/u-tr.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-upload/u-upload.vue 654 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-verification-code/u-verification-code.vue 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/components/u-waterfall/u-waterfall.vue 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/iconfont.css 910 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/index.js 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/index.scss 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/config/config.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/config/zIndex.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/css/color.scss 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/css/common.scss 176 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/css/style.components.scss 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/css/style.h5.scss 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/css/style.mp.scss 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/css/style.nvue.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/css/style.vue.scss 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/$parent.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/addUnit.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/bem.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/color.js 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/colorGradient.js 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/debounce.js 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/deepClone.js 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/deepMerge.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/getParent.js 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/guid.js 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/md5.js 385 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/queryParams.js 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/random.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/randomArray.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/route.js 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/sys.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/test.js 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/throttle.js 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/timeFormat.js 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/timeFrom.js 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/toast.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/trim.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/function/type2icon.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/mixin/mixin.js 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/mixin/mpShare.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/request/index.js 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/store/index.js 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/util/area.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/util/async-validator.js 1356 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/util/city.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/util/emitter.js 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/libs/util/province.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/package.json 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/uview-ui/theme.scss 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
代码管理/淮安PDA/vue.config.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/PDA.zip
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/0f60b943-ef81-4dea-85d5-c72f1e023d53.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/21553faa-f482-4cad-bdea-7867d42f4bac.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/7ef307ad-ea94-4ff6-9f94-954e08ae3914.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/94bf32fb-a9ab-47de-b62c-824e9491924a.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9c17e159-331e-4125-a28c-5a8ab0b1e2a2.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/9e1d61a9-543a-4f29-8a45-612c6ce8feca.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/c37ec95c-ca36-40d5-988e-41ceb36fe9a6.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/e0712c6d-3f7b-4769-b7a3-cc59cff4d10a.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/f7a5ecd7-5ca5-4e04-904a-54fa34104eb6.vsidx
Binary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/wwwroot/WIDESEAWCS_DB.DBSeed.Json/Dt_DeviceInfo.tsv
@@ -1,6 +1,7 @@
[
  {
    "Id": 1,
    "DispatchId": null,
    "DeviceCode": "SC01",
    "DeviceName": "1号堆垛机",
    "DeviceType": "CommonStackerCrane",
@@ -17,6 +18,7 @@
  },
  {
    "Id": 3,
    "DispatchId": null,
    "DeviceCode": "1002",
    "DeviceName": "输送线",
    "DeviceType": "CommonConveyorLine",
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineJob/CommonConveyorLineJob.cs
@@ -53,7 +53,7 @@
        public Task Execute(IJobExecutionContext context)
        {
            Console.Out.WriteLine(DateTime.Now);
            //Console.Out.WriteLine(DateTime.Now);
            try
            {
                CommonConveyorLine conveyorLine = (CommonConveyorLine)context.JobDetail.JobDataMap.Get("JobParams");
@@ -96,7 +96,7 @@
            }
            finally
            {
                Console.Out.WriteLine(DateTime.Now);
                //Console.Out.WriteLine(DateTime.Now);
            }
            return Task.CompletedTask;
        }
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/HoisterJob/CommonHoisterJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
using Quartz;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_TaskInfoService;
using WIDESEAWCS_Tasks.HoisterJob;
namespace WIDESEAWCS_Tasks
{
    [DisallowConcurrentExecution]
    public class CommonHoisterJob : JobBase, IJob
    {
        private readonly ITaskService _taskService;
        private readonly ITaskExecuteDetailService _taskExecuteDetailService;
        private readonly ITaskRepository _taskRepository;
        private readonly IRouterService _routerService;
        public CommonHoisterJob(ITaskService taskService, ITaskExecuteDetailService taskExecuteDetailService, ITaskRepository taskRepository, IRouterService routerService)
        {
            _taskService = taskService;
            _taskExecuteDetailService = taskExecuteDetailService;
            _taskRepository = taskRepository;
            _routerService = routerService;
        }
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
                OtherDevice Hoister = (OtherDevice)context.JobDetail.JobDataMap.Get("JobParams");
                if (Hoister != null)
                {
                    foreach (var HoisterJob in Hoister.DeviceProDTOs.GroupBy(x => x.DeviceChildCode))
                    {
                        var Tray = Hoister.GetValue<HoisterDBName, bool>(HoisterDBName.Tray, HoisterJob.Key);
                        var Leisure = Hoister.GetValue<HoisterDBName, bool>(HoisterDBName.Leisure, HoisterJob.Key);
                        if (Tray)
                        {
                            #region æŸ¥è¯¢ç»„盘信息
                            //向WMS申请查询当前提升机口的组盘信息,存在组盘信息返回入库任务并发出入库申请
                            var task = _taskService.QueryExecutingConveyorLineTask(1, HoisterJob.Key);
                            if (Leisure && task != null)
                                Hoister.SetValue(HoisterDBName.RequestIn, true, HoisterJob.Key);
                            #endregion
                            var Inbounding = Hoister.GetValue<HoisterDBName, bool>(HoisterDBName.Inbounding, HoisterJob.Key);
                            if (Inbounding && task != null)
                            {
                                task.TaskState = (int)TaskInStatusEnum.Line_InFinish;
                                task.NextAddress = "001-003-001";
                                _taskService.UpdateData(task);
                                //更新任务状态并取消入库申请
                                Hoister.SetValue(HoisterDBName.RequestIn, false, HoisterJob.Key);
                            }
                        }
                        else
                        {
                            //查询出库任务,存在出库任务发出出库申请
                            var task = _taskService.QueryExecutingConveyorLineTask(2, HoisterJob.Key);
                            if (task != null && Leisure)
                                Hoister.SetValue(HoisterDBName.RequestOut, true, HoisterJob.Key);
                            var Outbounding = Hoister.GetValue<HoisterDBName, bool>(HoisterDBName.Outbounding, HoisterJob.Key);
                            if (Outbounding && task != null)
                            {
                                task.NextAddress = HoisterJob.Key;
                                task.TargetAddress = HoisterJob.Key;
                                task.TaskState = (int)TaskOutStatusEnum.OutNew;
                                _taskService.UpdateData(task);
                                //更新任务状态并取消出库申请
                                Hoister.SetValue(HoisterDBName.RequestOut, false, HoisterJob.Key);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
            return Task.CompletedTask;
        }
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/HoisterJob/HoisterDBName.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WIDESEAWCS_Tasks.HoisterJob
{
    public enum HoisterDBName
    {
        /// <summary>
        /// æ‰˜ç›˜åˆ°ä½
        /// </summary>
        Tray,
        /// <summary>
        /// å…¥åº“执行中
        /// </summary>
        Inbounding,
        /// <summary>
        /// ç©ºé—²
        /// </summary>
        Leisure,
        /// <summary>
        /// å‡ºåº“执行中
        /// </summary>
        Outbounding,
        /// <summary>
        /// è¯·æ±‚入库
        /// </summary>
        RequestIn,
        /// <summary>
        /// è¯·æ±‚出库
        /// </summary>
        RequestOut
    }
}
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -16,6 +16,7 @@
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.Service;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_Tasks.HoisterJob;
using WIDESEAWCS_Tasks.StackerCraneJob;
namespace WIDESEAWCS_Tasks
@@ -123,6 +124,10 @@
                else
                {
                    task = _taskService.QueryStackerCraneOutTask(commonStackerCrane.DeviceCode);
                    if (task == null)
                    {
                        task = _taskService.QueryStackerCraneInTask(commonStackerCrane.DeviceCode);
                    }
                }
            }
@@ -163,6 +168,7 @@
                IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == router.ChildPosiDeviceCode);
                if (device != null)
                {
                    if (device.DeviceCode == "YMCTSJ" || task.Roadway == "CSJCSC01") return task;
                    CommonConveyorLine conveyorLine = (CommonConveyorLine)device;
                    if (conveyorLine.IsOccupied(router.ChildPosi))//出库站台未被占用
                    {
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/WIDESEAWCS_Tasks.csproj
@@ -7,7 +7,7 @@
    </PropertyGroup>
    <ItemGroup>
      <PackageReference Include="WIDESEAWCS_QuartzJob" Version="2.1.0" />
      <PackageReference Include="WIDESEAWCS_QuartzJob" Version="3.0.0" />
    </ItemGroup>
    <ItemGroup>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/7c6138bc-3140-4505-80bf-ce7e49063d2e.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/8ec046b0-40f2-4e27-acac-8986b42cfae0.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/90452a76-738e-47ca-a3e0-da8f36d31ada.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/993667d3-2068-4ea5-8fda-e1b10b53b187.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/9ec6694e-5882-4f4c-83dc-d548cd406f48.vsidx
Binary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/MaterielInfoDTO.cs
@@ -3,9 +3,28 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
namespace WIDESEA_DTO.Basic
{
    [ModelValidate]
    public class MaterielInfo
    {
        /// <summary>
        ///
        /// </summary>
        public string From { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string DateTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        [PropertyValidate("物料列表", NotNullAndEmpty = true)]
        public MaterielInfoDTO Content { get; set; }
    }
    [ModelValidate]
    public class MaterielInfoDTO
    {
        public string Code { get; set; }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/SupplierDTO.cs
@@ -3,9 +3,28 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
namespace WIDESEA_DTO.Basic
{
    [ModelValidate]
    public class Supplier
    {
        /// <summary>
        ///
        /// </summary>
        public string From { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string DateTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        [PropertyValidate("物料列表", NotNullAndEmpty = true)]
        public SupplierDTO Content { get; set; }
    }
    [ModelValidate]
    public class SupplierDTO
    {
        public string Code { get; set; }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/ErpOutOrderDTO.cs
@@ -3,9 +3,29 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
using WIDESEA_DTO.Basic;
namespace WIDESEA_DTO.ERP
{
    [ModelValidate]
    public class ErpOutOrder
    {
        /// <summary>
        ///
        /// </summary>
        public string From { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string DateTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        [PropertyValidate("物料列表", NotNullAndEmpty = true)]
        public ErpOutOrderDTO Content { get; set; }
    }
    [ModelValidate]
    public class ErpOutOrderDTO
    {
        public int Way { get; set; }
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/ERP/PurchaseOrderModel.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core.Attributes;
@@ -10,6 +11,23 @@
namespace WIDESEA_DTO
{
    [ModelValidate]
    public class Root
    {
        /// <summary>
        ///
        /// </summary>
        public string From { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string DateTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        [PropertyValidate("物料列表", NotNullAndEmpty = true)]
        public PurchaseOrderModel Content { get; set; }
    }
    /// <summary>
    /// é‡‡è´­å•模型
    /// </summary>
@@ -67,6 +85,7 @@
    /// <summary>
    /// é‡‡è´­å•明细模型
    /// </summary>
    [ModelValidate]
    public class PurchaseOrderDetailModel
    {
        /// <summary>
@@ -81,7 +100,7 @@
        /// ä»“库编号
        /// </summary>
        [PropertyValidate("仓库编号", NotNullAndEmpty = true)]
        public int WaId { get; set; }
        public string WaId { get; set; }
        /// <summary>
        /// æ•°é‡
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderDetailService.cs
@@ -3,6 +3,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_IInboundRepository;
using WIDESEA_Model.Models;
@@ -12,5 +13,7 @@
    public interface IInboundOrderDetailService : IService<Dt_InboundOrderDetail>
    {
        IInboundOrderDetailRepository Repository { get; }
        WebResponseContent GetInboundOrderDetails(SaveModel saveModel);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IInboundOrderService.cs
@@ -16,6 +16,7 @@
    {
        IInboundOrderRepository Repository { get; }
        WebResponseContent GetInboundOrders(SaveModel saveModel);
        WebResponseContent MaterielGroup(int inboundOrderId, string palletCode, string serNum);
        WebResponseContent MaterielGroup(int inboundOrderId, string palletCode, List<string> serNums);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReceiveOrderDetailService.cs
@@ -12,5 +12,6 @@
    public interface IReceiveOrderDetailService : IService<Dt_ReceiveOrderDetail>
    {
        WebResponseContent AddReceiveOrderDetail(string serNum, string orderNo);
        WebResponseContent GetReceiveOrderInfos(SaveModel saveModel);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IInboundService/IReceiveOrderService.cs
@@ -24,5 +24,6 @@
        /// <param name="orderId"></param>
        /// <returns></returns>
        WebResponseContent FeedbackReceiveOrder(int orderId);
        WebResponseContent GetReceiveOrders(SaveModel saveModel);
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderDetailService.cs
@@ -1,8 +1,10 @@
using System;
using Org.BouncyCastle.Crypto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
@@ -19,5 +21,20 @@
        public InboundOrderDetailService(IInboundOrderDetailRepository BaseDal) : base(BaseDal)
        {
        }
        public WebResponseContent GetInboundOrderDetails(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                string orderNo = saveModel.MainData["orderNo"].ToString();
                Dt_InboundOrder inboundOrder = Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == orderNo).Includes(x => x.Details).First();
                content.OK(data: inboundOrder.Details);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs
@@ -58,6 +58,31 @@
            _recordService = recordService;
            _invokeERPService = invokeERPService;
        }
        public WebResponseContent GetInboundOrders(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                int pageNo = saveModel.MainData["pageNo"].ObjToInt();
                string orderNo = saveModel.MainData["orderNo"].ToString();
                List<Dt_InboundOrder> dt_ReceiveOrders = new List<Dt_InboundOrder>();
                if (string.IsNullOrEmpty(orderNo))
                {
                    dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderStatus < InOrderStatusEnum.入库完成.ObjToInt()).ToPageList(pageNo, 5);
                }
                else
                {
                    dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => (x.InboundOrderNo.Contains(orderNo)) && x.OrderStatus < InOrderStatusEnum.入库完成.ObjToInt()).ToPageList(pageNo, 5);
                }
                content.OK(data: dt_ReceiveOrders);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
        public WebResponseContent MaterielGroup(int inboundOrderId, string palletCode, string serNum)
        {
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/PurchaseOrderService.cs
@@ -3,6 +3,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_BasicRepository;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
@@ -10,6 +11,7 @@
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO;
using WIDESEA_IBasicRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_InboundRepository;
@@ -21,11 +23,13 @@
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IPurchaseOrderDetailRepository _purchaseOrderDetailRepository;
        private readonly IBasicRepository _basicRepository;
        public PurchaseOrderService(IPurchaseOrderRepository BaseDal, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
        public PurchaseOrderService(IPurchaseOrderRepository BaseDal, IPurchaseOrderDetailRepository purchaseOrderDetailRepository, IUnitOfWorkManage unitOfWorkManage,IBasicRepository basicRepository) : base(BaseDal)
        {
            _purchaseOrderDetailRepository = purchaseOrderDetailRepository;
            _unitOfWorkManage = unitOfWorkManage;
            _basicRepository = basicRepository;
        }
        public WebResponseContent ReceivePurchaseOrder(PurchaseOrderModel model)
@@ -55,17 +59,22 @@
                {
                    return WebResponseContent.Instance.Error($"采购单号重复");
                }
                List<Dt_PurchaseOrderDetail> purchaseOrderDetails = new List<Dt_PurchaseOrderDetail>();
                List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData();
                 List<Dt_PurchaseOrderDetail> purchaseOrderDetails = new List<Dt_PurchaseOrderDetail>();
                foreach (var item in model.MList)
                {
                    Dt_Warehouse? warehouse = warehouses.FirstOrDefault(x => x.WarehouseCode == item.WaId);
                    if(warehouse == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到仓库信息");
                    }
                    Dt_PurchaseOrderDetail purchaseOrderDetail = new Dt_PurchaseOrderDetail()
                    {
                        MaterielCode = item.MCode,
                        PurchaseDetailQuantity = item.Qty,
                        PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt(),
                        Unit = item.Unit,
                        WarehouseId = item.WaId,
                        WarehouseId = warehouse.WarehouseId,
                        RowNo = item.RowId,
                    };
                    purchaseOrderDetails.Add(purchaseOrderDetail);
@@ -105,12 +114,17 @@
                {
                    return WebResponseContent.Instance.Error($"未找到采购单明细信息");
                }
                List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData();
                List<Dt_PurchaseOrderDetail> purchaseOrderDetails = new List<Dt_PurchaseOrderDetail>();
                List<Dt_PurchaseOrderDetail> updatePurchaseOrderDetails = new List<Dt_PurchaseOrderDetail>();
                List<int> detailIds = new List<int>();
                foreach (var item in model.MList)
                {
                    Dt_Warehouse? warehouse = warehouses.FirstOrDefault(x => x.WarehouseCode == item.WaId);
                    if (warehouse == null)
                    {
                        return WebResponseContent.Instance.Error($"未找到仓库信息");
                    }
                    Dt_PurchaseOrderDetail? purchaseOrderDetail = purchaseOrder.Details.FirstOrDefault(x => x.RowNo == item.RowId);
                    if (purchaseOrderDetail == null)
                    {
@@ -120,7 +134,7 @@
                            PurchaseDetailQuantity = item.Qty,
                            PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt(),
                            Unit = item.Unit,
                            WarehouseId = item.WaId,
                            WarehouseId = warehouse.WarehouseId,
                            RowNo = item.RowId,
                        };
                        purchaseOrderDetails.Add(purchaseOrderDetail);
@@ -131,7 +145,7 @@
                        purchaseOrderDetail.PurchaseDetailQuantity = item.Qty;
                        purchaseOrderDetail.PurchaseDetailStatus = PurchaseOrderDetailStatusEnum.NotReceived.ObjToInt();
                        purchaseOrderDetail.Unit = item.Unit;
                        purchaseOrderDetail.WarehouseId = item.WaId;
                        purchaseOrderDetail.WarehouseId = warehouse.WarehouseId;
                        purchaseOrderDetail.RowNo = item.RowId;
                        updatePurchaseOrderDetails.Add(purchaseOrderDetail);
                        detailIds.Add(purchaseOrderDetail.Id);
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderDetailService.cs
@@ -155,5 +155,32 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public WebResponseContent GetReceiveOrderInfos(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                string searchValue = saveModel.MainData["searchValue"].ToString();
                string orderNo = saveModel.MainData["orderNo"].ToString();
                Dt_ReceiveOrder receiveOrder = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderNo == orderNo).First();
                if (receiveOrder == null) throw new Exception($"未找到单据编号【{orderNo}】信息");
                List<Dt_ReceiveOrderDetail> receiveOrderDetails = new List<Dt_ReceiveOrderDetail>();
                if (string.IsNullOrEmpty(searchValue))
                {
                    receiveOrderDetails = Db.Queryable<Dt_ReceiveOrderDetail>().Where(x => x.ReceiveOrderId == receiveOrder.ReceiveOrderId).ToList();
                }
                else
                {
                    receiveOrderDetails = Db.Queryable<Dt_ReceiveOrderDetail>().Where(x => x.ReceiveOrderId == receiveOrder.ReceiveOrderId && x.MaterielCode == searchValue).ToList();
                }
                content.OK(data: receiveOrderDetails);
            }
            catch (Exception ex)
            {
                content.Error(ex.Message);
            }
            return content;
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/ReceiveOrderService.cs
@@ -1,4 +1,5 @@
using System;
using MailKit.Search;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -138,6 +139,31 @@
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        public WebResponseContent GetReceiveOrders(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                int pageNo = saveModel.MainData["pageNo"].ObjToInt();
                string orderNo = saveModel.MainData["orderNo"].ToString();
                List<Dt_ReceiveOrder> dt_ReceiveOrders = new List<Dt_ReceiveOrder>();
                if (string.IsNullOrEmpty(orderNo))
                {
                    dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt()).ToPageList(pageNo, 5);
                }
                else
                {
                    dt_ReceiveOrders = Db.Queryable<Dt_ReceiveOrder>().Where(x => (x.ReceiveOrderNo.Contains(orderNo) || x.SuppliersId.Contains(orderNo)) && x.ReceiveOrderStatus < ReceiveOrderStatusEnum.Completed.ObjToInt()).ToPageList(pageNo, 5);
                }
                content.OK(data: dt_ReceiveOrders);
            }
            catch (Exception)
            {
                throw;
            }
            return content;
        }
        public WebResponseContent CreateInboundOrder(int receiveOrderId)
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_PurchaseOrder.cs
@@ -59,7 +59,7 @@
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [SugarColumn(IsNullable = false, Length = 200, ColumnDescription = "")]
        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "")]
        public string Remark { get; set; }
        /// <summary>
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/ERP/ErpController.cs
@@ -46,9 +46,9 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("ReceivePurchaseOrderSingle"), AllowAnonymous, MethodParamsValidate]
        public WebResponseContent ReceivePurchaseOrder([FromBody] PurchaseOrderModel model)
        public WebResponseContent ReceivePurchaseOrder([FromBody] Root model)
        {
            return _purchaseOrderService.ReceivePurchaseOrder(model);
            return _purchaseOrderService.ReceivePurchaseOrder(model.Content);
        }
        /// <summary>
@@ -57,9 +57,9 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("ReceiveSupplier"), AllowAnonymous, MethodParamsValidate]
        public WebResponseContent ReceiveSupplier([FromBody] SupplierDTO model)
        public WebResponseContent ReceiveSupplier([FromBody] Supplier model)
        {
            return _supplierInfoService.ReceiveSupplier(model);
            return _supplierInfoService.ReceiveSupplier(model.Content);
        }
        /// <summary>
@@ -68,9 +68,9 @@
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost, Route("ReceiveMaterial"), AllowAnonymous, MethodParamsValidate]
        public WebResponseContent ReceiveMaterial([FromBody] MaterielInfoDTO model)
        public WebResponseContent ReceiveMaterial([FromBody] MaterielInfo model)
        {
            return _materielInfoService.ReceiveMaterial(model);
            return _materielInfoService.ReceiveMaterial(model.Content);
        }
        /// <summary>
@@ -79,9 +79,9 @@
        /// <param name="erpOutOrder"></param>
        /// <returns></returns>
        [HttpPost, Route("ReceiveOutOrder"), AllowAnonymous, MethodParamsValidate]
        public WebResponseContent ReceiveOutOrder([FromBody] ErpOutOrderDTO erpOutOrder)
        public WebResponseContent ReceiveOutOrder([FromBody] ErpOutOrder erpOutOrder)
        {
            return _outboundOrderService.ReceiveOutOrder(erpOutOrder);
            return _outboundOrderService.ReceiveOutOrder(erpOutOrder.Content);
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderController.cs
@@ -16,6 +16,15 @@
        public InboundOrderController(IInboundOrderService service) : base(service)
        {
        }
        /// <summary>
        /// æŸ¥è¯¢å…¥åº“单信息
        /// </summary>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("GetInboundOrders")]
        public WebResponseContent GetInboundOrders([FromBody] SaveModel saveModel)
        {
            return Service.GetInboundOrders(saveModel);
        }
        /// <summary>
        /// å•个物料码组盘
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/InboundOrderDetailController.cs
@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WIDESEA_Core;
using WIDESEA_Core.BaseController;
using WIDESEA_IInboundService;
using WIDESEA_Model.Models;
@@ -13,5 +14,14 @@
        public InboundOrderDetailController(IInboundOrderDetailService service) : base(service)
        {
        }
        /// <summary>
        /// æŸ¥è¯¢å…¥åº“单详情
        /// </summary>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("GetInboundOrderDetails")]
        public WebResponseContent GetInboundOrderDetails([FromBody] SaveModel saveModel)
        {
            return Service.GetInboundOrderDetails(saveModel);
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderController.cs
@@ -37,5 +37,13 @@
            return Service.FeedbackReceiveOrder(orderId);
        }
        /// æŸ¥è¯¢æ”¶è´§å•信息
        /// </summary>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("GetReceiveOrders")]
        public WebResponseContent GetReceiveOrders([FromBody]SaveModel saveModel)
        {
            return Service.GetReceiveOrders(saveModel);
        }
    }
}
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Inbound/ReceiveOrderDetailController.cs
@@ -27,5 +27,15 @@
        {
            return Service.AddReceiveOrderDetail(serNum, orderNo);
        }
        /// <summary>
        /// æŸ¥è¯¢æ”¶è´§å•信息
        /// </summary>
        /// <returns></returns>
        [HttpPost, HttpGet, Route("GetReceiveOrderInfos")]
        public WebResponseContent GetReceiveOrderInfos([FromBody] SaveModel saveModel)
        {
            return Service.GetReceiveOrderInfos(saveModel);
        }
    }
}
´úÂë¹ÜÀí/»´°²PDA/.eslintignore
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
unpackage
node_modules
uview-ui
´úÂë¹ÜÀí/»´°²PDA/.hbuilderx/launch.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
{
    // launch.json é…ç½®äº†å¯åŠ¨è°ƒè¯•æ—¶ç›¸å…³è®¾ç½®ï¼Œconfigurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
    // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
    "version" : "0.0",
    "configurations" : [
        {
            "app-plus" : {
                "launchtype" : "local"
            },
            "default" : {
                "launchtype" : "local"
            },
            "type" : "uniCloud"
        },
        {
            "playground" : "standard",
            "type" : "uni-app:app-android"
        }
    ]
}
´úÂë¹ÜÀí/»´°²PDA/.vscode/launch.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
{
    // ä½¿ç”¨ IntelliSense äº†è§£ç›¸å…³å±žæ€§ã€‚
    // æ‚¬åœä»¥æŸ¥çœ‹çŽ°æœ‰å±žæ€§çš„æè¿°ã€‚
    // æ¬²äº†è§£æ›´å¤šä¿¡æ¯ï¼Œè¯·è®¿é—®: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "chrome",
            "request": "launch",
            "name": "针对 localhost å¯åЍ Chrome",
            "url": "http://localhost:8080",
            "webRoot": "${workspaceFolder}"
        }
    ]
}
´úÂë¹ÜÀí/»´°²PDA/App.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<script>
    export default {
        onLaunch: function() {
            // console.log('App Launch')
        },
        onShow: function() {
            // this.interval = setInterval(function() {
            //     uni.hideKeyboard(); //隐藏软键盘
            // }, 50);
            // console.log('App Show')
        },
        onHide: function() {
            // console.log('App Hide')
        },
        onLoad() {
        },
    }
</script>
<style lang="scss">
    @import './tuniao-ui/index.scss';
    @import './tuniao-ui/iconfont.css';
    @import "uview-ui/index.scss";
    /*每个页面公共css */
</style>
´úÂë¹ÜÀí/»´°²PDA/LICENSE
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 www.uviewui.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
´úÂë¹ÜÀí/»´°²PDA/common/config.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
let config = {
    baseUrl: 'http://localhost:9293',
    urls: [
        'http://127.0.0.1:9293',
        'http://localhost:9293'
    ]
}
export {
    config
}
´úÂë¹ÜÀí/»´°²PDA/common/http.interceptor.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,136 @@
import { config } from "./config";
// let baseUrl = 'http://10.1.105.155:9995'
// let baseUrl = 'http://10.1.211.101:9004'
let baseUrl = '';
// let baseUrl = 'http://192.168.43.71:9995'
// let baseUrl = 'http://47.112.196.253:8881'
const install = (Vue, vm) => {
    baseUrl = config.baseUrl;
    // æ­¤ä¸ºè‡ªå®šä¹‰é…ç½®å‚数,具体参数见上方说明
    Vue.prototype.$u.http.setConfig({
        baseUrl: baseUrl,
        loadingText: '努力加载中~',
        loadingTime: 5000,
        originalData: true,
        // ......
    });
    // è¯·æ±‚拦截,配置Token等参数
    Vue.prototype.$u.http.interceptor.request = (config) => {
        // å¼•用token
        // æ–¹å¼ä¸€ï¼Œå­˜æ”¾åœ¨vuex的token,假设使用了uView封装的vuex方式
        // è§ï¼šhttps://uviewui.com/components/globalVariable.html
        // config.header.token = vm.token;
        // æ–¹å¼äºŒï¼Œå¦‚果没有使用uView封装的vuex方法,那么需要使用$store.state获取
        // config.header.token = vm.$store.state.token;
        // æ–¹å¼ä¸‰ï¼Œå¦‚æžœtoken放在了globalData,通过getApp().globalData获取
        // config.header.token = getApp().globalData.username;
        // æ–¹å¼å››ï¼Œå¦‚æžœtoken放在了Storage本地存储中,拦截是每次请求都执行的
        // æ‰€ä»¥å“ªæ€•您重新登录修改了Storage,下一次的请求将会是最新值
        // const token = uni.getStorageSync('token');
        // config.header.token = token;
        // debugger
        // var aaa = "Bearer " + uni.getStorageSync('jo_id_token');
        // var bbb = "a" + uni.getStorageSync('remAcc');
        // var ccc =  "a" + uni.getStorageSync('remPwd');
        // var ddd =  "a" + uni.getStorageSync('acc');
        // var eee =  "a" + uni.getStorageSync('pwd');
        config.header.Token = 'xxxxxx';
        config.header.Authorization = "Bearer " + uni.getStorageSync('jo_id_token');
        config.header.uniapp = '1';
        // å¯ä»¥å¯¹æŸä¸ªurl进行特别处理,此url参数为this.$u.get(url)中的url值
        if (config.url == '/api/User/login') config.header.noToken = true;
        // æœ€åŽéœ€è¦å°†config进行return
        return config;
        // å¦‚æžœreturn一个false值,则会取消本次请求
        // if(config.url == '/user/rest') return false; // å–消某次请求
    }
    // å“åº”拦截,判断状态码是否通过
    Vue.prototype.$u.http.interceptor.response = (res) => {
        if(!res.statusCode){
            if (res.errMsg) {
                vm.$u.toast("请求失败,请检查后台程序是否打开,错误信息:" + res.errMsg);
                return false;
            }
        }
        if (res.statusCode == 200) {
            // res为服务端返回值,可能有code,result等字段
            // è¿™é‡Œå¯¹res.result进行返回,将会在this.$u.post(url).then(res => {})的then回调中的res的到
            // å¦‚果配置了originalData为true,请留意这里的返回值
            return res.data;
        } else if (res.statusCode == 401) {
            // å‡è®¾201为token失效,这里跳转登录
            vm.$u.toast('验证失败,请重新登录');
            uni.reLaunch({
                url: '/pages/login/login'
            });
            return false;
        } else if (res.statusCode == 202) {
            // å¦‚果返回false,则会调用Promise的reject回调,
            // å¹¶å°†è¿›å…¥this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值
            vm.$u.post("/api/User/replaceToken").then(res => {
                if (x.data.status) {
                    vm.$u.vuex('vuex_token', x.data.data)
                    vm.$u.route({
                        type: "navigateBack",
                        delta: -1
                    })
                } else {
                    vm.$u.toast('验证过期,请重新登录');
                    uni.reLaunch({
                        url: '/pages/login/login'
                    });
                }
            }).catch(err => {
                uni.reLaunch({
                    url: '/pages/login/login'
                });
            })
            // uni.request({
            //     url: "http://192.168.12.245:8099/api/User/replaceToken",
            //     param: {},
            //     method: 'POST',
            //     responseType: "text",
            //     header: {
            //         Authorization: "Bearer " + vm.vuex_token
            //     },
            //     async: false,
            //     success: function(x) {
            //         if (x.data.status) {
            //             vm.$u.vuex('vuex_token',x.data.data)
            //             vm.$u.route({
            //                 type: "navigateBack",
            //                 delta: -1
            //             })
            //         } else {
            //             console.log(x.data.message);
            //             vm.$u.toast('验证过期,请重新登录');
            //             setTimeout(() => {
            //                 // æ­¤ä¸ºuView的方法,详见路由相关文档
            //                 vm.$u.route('/pages/user/login')
            //             }, 1500)
            //         }
            //     },
            //     errror: function(ex) {
            //         console.log(ex);
            //         uni.reLaunch({
            //             url: '/pages/user/login'
            //         });
            //     },
            // });
            return false;
        }
    }
}
export default {
    install,
    baseUrl
}
´úÂë¹ÜÀí/»´°²PDA/common/uni-ui.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,120 @@
.uni-flex {
    display: flex;
}
.uni-flex-row {
    @extend .uni-flex;
    flex-direction: row;
    box-sizing: border-box;
}
.uni-flex-column {
    @extend .uni-flex;
    flex-direction: column;
}
.uni-color-gary {
    color: #3b4144;
}
/* æ ‡é¢˜ */
.uni-title {
    display: flex;
    margin-bottom: $uni-spacing-col-base;
    font-size: $uni-font-size-lg;
    font-weight: bold;
    color: #3b4144;
}
.uni-title-sub {
    display: flex;
    // margin-bottom: $uni-spacing-col-base;
    font-size: $uni-font-size-base;
    font-weight: 500;
    color: #3b4144;
}
/* æè¿° é¢å¤–文本 */
.uni-note {
    margin-top: 10px;
    color: #999;
    font-size: $uni-font-size-sm;
}
/* åˆ—表内容 */
.uni-list-box {
    @extend .uni-flex-row;
    flex: 1;
    margin-top: 10px;
}
/* ç•¥ç¼©å›¾ */
.uni-thumb {
    flex-shrink: 0;
    margin-right: $uni-spacing-row-base;
    width: 125px;
    height: 75px;
    border-radius: $uni-border-radius-lg;
    overflow: hidden;
    border: 1px #f5f5f5 solid;
    image {
        width: 100%;
        height: 100%;
    }
}
.uni-media-box {
    @extend .uni-flex-row;
    // margin-bottom: $uni-spacing-col-base;
    border-radius: $uni-border-radius-lg;
    overflow: hidden;
    .uni-thumb {
        margin: 0;
        margin-left: 4px;
        flex-shrink: 1;
        width: 33%;
        border-radius:0;
        &:first-child {
            margin: 0;
        }
    }
}
/* å†…容 */
.uni-content {
    @extend .uni-flex-column;
    justify-content: space-between;
}
/* åˆ—表footer */
.uni-footer {
    @extend .uni-flex-row;
    justify-content: space-between;
    margin-top: $uni-spacing-col-lg;
}
.uni-footer-text {
    font-size: $uni-font-size-sm;
    color: $uni-text-color-grey;
    margin-left: 5px;
}
/* æ ‡ç­¾ */
.uni-tag {
    flex-shrink: 0;
    padding: 0 5px;
    border: 1px $uni-border-color solid;
    margin-right: $uni-spacing-row-sm;
    border-radius: $uni-border-radius-base;
    background: $uni-bg-color-grey;
    color: $uni-text-color;
    font-size: $uni-font-size-sm;
}
/* é“¾æŽ¥ */
.uni-link {
    margin-left: 10px;
    color: $uni-text-color;
    text-decoration: underline;
}
´úÂë¹ÜÀí/»´°²PDA/components/uni-section/config.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
{
    "id": "99999",
    "name": "Section",
    "desc": "标题栏",
    "edition": "0.0.1",
    "url": "section",
    "type": "布局组件",
    "path": "https://ext.dcloud.net.cn/plugin?id=",
    "hidden": true,
    "test":true,
    "update_log": []
}
´úÂë¹ÜÀí/»´°²PDA/components/uni-section/readme.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
### Section æ ‡é¢˜æ 
标题栏,用于显示标题,组件名:``uni-section``,代码块: uSection。
### ä½¿ç”¨æ–¹å¼
在 ``script`` ä¸­å¼•用组件
```javascript
import uniSection from "@/components/uni-section/uni-section.vue"
export default {
    components: {uniSection}
}
```
在 ``template`` ä¸­ä½¿ç”¨ç»„ä»¶
```html
<uni-section title="只有主标题"></uni-section>
<uni-section title="竖线装饰" sub-title="副标题" type="line"></uni-section>
<uni-section title="圆形装饰" sub-title="副标题" type="circle"></uni-section>
```
### å±žæ€§è¯´æ˜Ž
|属性名        |类型    |默认值    |说明                                                |
|---        |----    |---    |---                                                |
|type        |String    |-        |标题装饰类型 ï¼Œå¯é€‰å€¼ï¼šline(竖线)、circle(圆形)|
|title        |String    |-        |主标题                                                |
|sub-title    |String    |-        |副标题                                                |
´úÂë¹ÜÀí/»´°²PDA/components/uni-section/uni-section.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,136 @@
<template>
    <view class="uni-section" nvue>
        <view v-if="type" class="uni-section__head">
            <view :class="type" class="uni-section__head-tag" />
        </view>
        <view class="uni-section__content">
            <text :class="{'distraction':!subTitle}" class="uni-section__content-title">{{ title }}</text>
            <text v-if="subTitle" class="uni-section__content-sub">{{ subTitle }}</text>
        </view>
        <slot />
    </view>
</template>
<script>
    /**
     * Section æ ‡é¢˜æ 
     * @description æ ‡é¢˜æ 
     * @property {String} type = [line|circle] æ ‡é¢˜è£…饰类型
     *     @value line ç«–线
     *     @value circle åœ†å½¢
     * @property {String} title ä¸»æ ‡é¢˜
     * @property {String} subTitle å‰¯æ ‡é¢˜
     */
    export default {
        name: 'UniSection',
        props: {
            type: {
                type: String,
                default: ''
            },
            title: {
                type: String,
                default: ''
            },
            subTitle: {
                type: String,
                default: ''
            }
        },
        data() {
            return {}
        },
        watch: {
            title(newVal) {
                if (uni.report && newVal !== '') {
                    uni.report('title', newVal)
                }
            }
        },
        methods: {
            onClick() {
                this.$emit('click')
            }
        }
    }
</script>
<style lang="scss" scoped>
    .uni-section {
        position: relative;
        /* #ifndef APP-NVUE */
        display: flex;
        /* #endif */
        margin-top: 10px;
        flex-direction: row;
        align-items: center;
        padding: 0 10px;
        height: 50px;
        background-color: $uni-bg-color-grey;
        /* #ifdef APP-NVUE */
        // border-bottom-color: $uni-border-color;
        // border-bottom-style: solid;
        // border-bottom-width: 0.5px;
        /* #endif */
        font-weight: normal;
    }
    /* #ifndef APP-NVUE */
    // .uni-section:after {
    //     position: absolute;
    //     bottom: 0;
    //     right: 0;
    //     left: 0;
    //     height: 1px;
    //     content: '';
    //     -webkit-transform: scaleY(.5);
    //     transform: scaleY(.5);
    //     background-color: $uni-border-color;
    // }
    /* #endif */
    .uni-section__head {
        flex-direction: row;
        justify-content: center;
        align-items: center;
        margin-right: 10px;
    }
    .line {
        height: 15px;
        background-color: $uni-text-color-disable;
        border-radius: 5px;
        width: 3px;
    }
    .circle {
        width: 8px;
        height: 8px;
        border-top-right-radius: 50px;
        border-top-left-radius: 50px;
        border-bottom-left-radius: 50px;
        border-bottom-right-radius: 50px;
        background-color: $uni-text-color-disable;
    }
    .uni-section__content {
        flex-direction: column;
        flex: 1;
        color: $uni-text-color;
    }
    .uni-section__content-title {
        font-size: $uni-font-size-base;
        color: $uni-text-color;
    }
    .distraction {
        flex-direction: row;
        align-items: center;
    }
    .uni-section__content-sub {
        font-size: $uni-font-size-sm;
        color: $uni-text-color-grey;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/main.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
import Vue from 'vue'
import App from './App'
Vue.config.productionTip = false
App.mpType = 'app'
// å°è£…的展示消息提示的方法
uni.$showMsg = function (title = '数据加载失败!', duration = 1500) {
  uni.showToast({
    title,
    duration,
    icon: 'none',
  })
}
// å¼•入全局uView
import uView from 'uview-ui'
Vue.use(uView);
// å¼•入全局TuniaoUI
import TuniaoUI from 'tuniao-ui'
Vue.use(TuniaoUI)
// http拦截器,此为需要加入的内容,如果不是写在common目录,请自行修改引入路径
import httpInterceptor from '@/common/http.interceptor.js'
const app = new Vue({
    ...App
})
// è¿™é‡Œéœ€è¦å†™åœ¨æœ€åŽï¼Œæ˜¯ä¸ºäº†ç­‰Vue创建对象完成,引入"app"对象(也即页面的"this"实例)
Vue.use(httpInterceptor, app)
app.$mount()
´úÂë¹ÜÀí/»´°²PDA/manifest.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
{
    "name" : "WMS-PDA",
    "appid" : "__UNI__BFEF6BA",
    "description" : "",
    "versionName" : "25",
    "versionCode" : "100",
    "transformPx" : false,
    /* 5+App特有相关 */
    "app-plus" : {
        "safearea" : {
            "bottom" : {
                "offset" : "none"
            }
        },
        "usingComponents" : true,
        "nvueCompiler" : "uni-app",
        "compilerVersion" : 3,
        "splashscreen" : {
            "alwaysShowBeforeRender" : true,
            "waiting" : true,
            "autoclose" : true,
            "delay" : 0
        },
        /* æ¨¡å—配置 */
        "modules" : {
            "Barcode" : {},
            "Bluetooth" : {}
        },
        /* åº”用发布信息 */
        "distribute" : {
            /* android打包配置 */
            "android" : {
                "permissions" : [
                    "<uses-feature android:name=\"android.hardware.camera\"/>",
                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
                ]
            },
            /* ios打包配置 */
            "ios" : {
                "dSYMs" : false
            },
            /* SDK配置 */
            "sdkConfigs" : {
                "ad" : {}
            },
            "icons" : {
                "android" : {
                    "hdpi" : "unpackage/res/icons/72x72.png",
                    "xhdpi" : "unpackage/res/icons/96x96.png",
                    "xxhdpi" : "unpackage/res/icons/144x144.png",
                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
                },
                "ios" : {
                    "appstore" : "unpackage/res/icons/1024x1024.png",
                    "ipad" : {
                        "app" : "unpackage/res/icons/76x76.png",
                        "app@2x" : "unpackage/res/icons/152x152.png",
                        "notification" : "unpackage/res/icons/20x20.png",
                        "notification@2x" : "unpackage/res/icons/40x40.png",
                        "proapp@2x" : "unpackage/res/icons/167x167.png",
                        "settings" : "unpackage/res/icons/29x29.png",
                        "settings@2x" : "unpackage/res/icons/58x58.png",
                        "spotlight" : "unpackage/res/icons/40x40.png",
                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
                    },
                    "iphone" : {
                        "app@2x" : "unpackage/res/icons/120x120.png",
                        "app@3x" : "unpackage/res/icons/180x180.png",
                        "notification@2x" : "unpackage/res/icons/40x40.png",
                        "notification@3x" : "unpackage/res/icons/60x60.png",
                        "settings@2x" : "unpackage/res/icons/58x58.png",
                        "settings@3x" : "unpackage/res/icons/87x87.png",
                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
                    }
                }
            }
        }
    },
    /* å¿«åº”用特有相关 */
    "quickapp" : {},
    /* å°ç¨‹åºç‰¹æœ‰ç›¸å…³ */
    "mp-weixin" : {
        "appid" : "wxc256e348c4032ebd",
        "setting" : {
            "urlCheck" : false
        },
        "usingComponents" : true
    },
    "mp-alipay" : {
        "usingComponents" : true
    },
    "mp-baidu" : {
        "usingComponents" : true
    },
    "mp-toutiao" : {
        "usingComponents" : true
    },
    "h5" : {
        "template" : "template.h5.html",
        "router" : {
            "mode" : "history"
        }
    },
    "fallbackLocale" : "zh-Hans"
}
´úÂë¹ÜÀí/»´°²PDA/package-lock.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
{
  "name": "PDA",
  "lockfileVersion": 2,
  "requires": true,
  "packages": {
    "": {
      "dependencies": {
        "vue-touch-keyboard": "^0.3.2"
      }
    },
    "node_modules/babel-runtime": {
      "version": "6.26.0",
      "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz",
      "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
      "dependencies": {
        "core-js": "^2.4.0",
        "regenerator-runtime": "^0.11.0"
      }
    },
    "node_modules/core-js": {
      "version": "2.6.12",
      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
      "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
      "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
      "hasInstallScript": true
    },
    "node_modules/regenerator-runtime": {
      "version": "0.11.1",
      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
    },
    "node_modules/vue-touch-keyboard": {
      "version": "0.3.2",
      "resolved": "https://registry.npmmirror.com/vue-touch-keyboard/-/vue-touch-keyboard-0.3.2.tgz",
      "integrity": "sha512-+GAZSMdiPfop2At9fhGLzs2Jodd6BQla4q4Mm+VkpQLUaxmFFU64NWsjxvkkYjncAgbv/oO5wi+rM1X4eVHCbg==",
      "dependencies": {
        "babel-runtime": "^6.26.0"
      }
    }
  },
  "dependencies": {
    "babel-runtime": {
      "version": "6.26.0",
      "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz",
      "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
      "requires": {
        "core-js": "^2.4.0",
        "regenerator-runtime": "^0.11.0"
      }
    },
    "core-js": {
      "version": "2.6.12",
      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
      "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
    },
    "regenerator-runtime": {
      "version": "0.11.1",
      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
    },
    "vue-touch-keyboard": {
      "version": "0.3.2",
      "resolved": "https://registry.npmmirror.com/vue-touch-keyboard/-/vue-touch-keyboard-0.3.2.tgz",
      "integrity": "sha512-+GAZSMdiPfop2At9fhGLzs2Jodd6BQla4q4Mm+VkpQLUaxmFFU64NWsjxvkkYjncAgbv/oO5wi+rM1X4eVHCbg==",
      "requires": {
        "babel-runtime": "^6.26.0"
      }
    }
  }
}
´úÂë¹ÜÀí/»´°²PDA/package.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
{
  "dependencies": {
    "vue-touch-keyboard": "^0.3.2"
  }
}
´úÂë¹ÜÀí/»´°²PDA/pages.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,460 @@
{
    "easycom": {
        "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
    },
    "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "首页"
            }
        },
        {
            "path": "pages/home/home",
            "style": {
                "navigationBarTitleText": "我的"
            }
        },
        {
            "path": "pages/login/login",
            "style": {
                "navigationBarTitleText": "登录"
            }
        },
        // {
        //     "path": "pages/materielGroup/inboundOrder",
        //     "style": {
        //         "navigationBarTitleText": "入库订单",
        //         "enablePullDownRefresh": false
        //     }
        // },
        //原材料组盘(订单)
        {
            "path": "pages/raworderboxing/inboundorder",
            "style": {
                "navigationBarTitleText": "入库订单",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/raworderboxing/raworderboxing",
            "style": {
                "navigationBarTitleText": "组盘",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/raworderboxing/orderboxing",
            "style": {
                "navigationBarTitleText": "组盘",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/raworderboxing/releaseboxing",
            "style": {
                "navigationBarTitleText": "解绑托盘",
                "enablePullDownRefresh": false
            }
        },
        //其他组盘
        {
            "path": "pages/otherboxing/otherboxing",
            "style": {
                "navigationBarTitleText": "其他组盘",
                "enablePullDownRefresh": false
            }
        },
        //成品组盘
        {
            "path": "pages/productboxing/productboxing",
            "style": {
                "navigationBarTitleText": "成品组盘",
                "enablePullDownRefresh": false
            }
        },
        //手动出库管理
        {
            "path": "pages/rawhandoutbound/rawhandoutbound",
            "style": {
                "navigationBarTitleText": "原料手动出库",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/rawhandoutbound/handoutbound",
            "style": {
                "navigationBarTitleText": "ZB手动出库",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/rawhandoutbound/kbhandoutbound",
            "style": {
                "navigationBarTitleText": "KB手动出库",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/rawhandoutbound/manualoutbound",
            "style": {
                "navigationBarTitleText": "栈板区指定出库",
                "enablePullDownRefresh": false
            }
        },
        //成品出库
        {
            "path": "pages/productoutbound/productoutbound",
            "style": {
                "navigationBarTitleText": "成品出库",
                "enablePullDownRefresh": false
            }
        },
        //半成品组盘
        {
            "path": "pages/halfproduct/hpreceiveorder",
            "style": {
                "navigationBarTitleText": "半成品组盘",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/halfproduct/halfproductboxing",
            "style": {
                "navigationBarTitleText": "半成品组盘",
                "enablePullDownRefresh": false
            }
        },
        //生产领料单(仓库手动备料)
        {
            "path": "pages/receiveorder/receiveorder",
            "style": {
                "navigationBarTitleText": "收货单",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/receiveorder/receiveorderoutbound",
            "style": {
                "navigationBarTitleText": "收货单",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/receiveorder/multiplereceiveorder",
            "style": {
                "navigationBarTitleText": "生产领料单(多)",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/receiveorder/multiplereceiveorderout",
            "style": {
                "navigationBarTitleText": "生产领料单(多)",
                "enablePullDownRefresh": false
            }
        },
        //调拨申请单(仓库手动备料)
        {
            "path": "pages/allocationorder/allocationorder",
            "style": {
                "navigationBarTitleText": "调拨申请单",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/allocationorder/allocationorderoutbound",
            "style": {
                "navigationBarTitleText": "调拨申请单",
                "enablePullDownRefresh": false
            }
        },
        //直接调拨单(仓库手动备料)
        {
            "path": "pages/directorder/directorder",
            "style": {
                "navigationBarTitleText": "直接调拨单",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/directorder/directorderoutbound",
            "style": {
                "navigationBarTitleText": "直接调拨单",
                "enablePullDownRefresh": false
            }
        },
        //其他出库单(仓库手动备料)
        {
            "path": "pages/otheroutboundorder/otheroutboundorder",
            "style": {
                "navigationBarTitleText": "其他出库单",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/otheroutboundorder/otherorderoutbound",
            "style": {
                "navigationBarTitleText": "其他出库单",
                "enablePullDownRefresh": false
            }
        },
        //移库管理
        {
            "path": "pages/relocation/relocation",
            "style": {
                "navigationBarTitleText": "移库",
                "enablePullDownRefresh": false
            }
        },
        //空箱管理
        {
            "path": "pages/emptybox/emptyboxmanage",
            "style": {
                "navigationBarTitleText": "空箱管理",
                "enablePullDownRefresh": false
            }
        },
        //拣选管理
        {
            "path": "pages/picking/pickingMat",
            "style": {
                "navigationBarTitleText": "拣选",
                "enablePullDownRefresh": false
            }
        },
        //生产叫料管理
        {
            "path": "pages/callmat/receiveorder",
            "style": {
                "navigationBarTitleText": "生产叫料",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/callmat/ordercallmat",
            "style": {
                "navigationBarTitleText": "生产叫料",
                "enablePullDownRefresh": false
            }
        },
        //配送管理
        {
            "path": "pages/delivery/delivery",
            "style": {
                "navigationBarTitleText": "配送管理",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/delivery/getcarryinfo",
            "style": {
                "navigationBarTitleText": "配送信息查询",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/delivery/carrycheck",
            "style": {
                "navigationBarTitleText": "配送校验",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/delivery/trainstockbind",
            "style": {
                "navigationBarTitleText": "小火车库存绑定",
                "enablePullDownRefresh": false
            }
        },
        //C区管理
        {
            "path": "pages/carea/carea",
            "style": {
                "navigationBarTitleText": "C区管理",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/carea/zbareaboxing",
            "style": {
                "navigationBarTitleText": "C区组盘",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/carea/cacheareacallmat",
            "style": {
                "navigationBarTitleText": "C区叫料",
                "enablePullDownRefresh": false
            }
        },
        //库存管理
        {
            "path": "pages/stock/stock",
            "style": {
                "navigationBarTitleText": "库存管理",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/stock/bindstock",
            "style": {
                "navigationBarTitleText": "库存绑定",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/stock/releasestock",
            "style": {
                "navigationBarTitleText": "库存解绑",
                "enablePullDownRefresh": false
            }
        },
        //出库扫描
        {
            "path": "pages/outboundscan/matoutboundscan",
            "style": {
                "navigationBarTitleText": "原材料出库扫描",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/outboundscan/productoutboundscan",
            "style": {
                "navigationBarTitleText": "成品出库扫描",
                "enablePullDownRefresh": false
            }
        },
        //内箱拆分
        {
            "path": "pages/other/other",
            "style": {
                "navigationBarTitleText": "内箱拆分",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/other/printtag",
            "style": {
                "navigationBarTitleText": "内箱拆分(F2)",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/other/printtagf4",
            "style": {
                "navigationBarTitleText": "内箱拆分(F4)",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/other/printtagf7",
            "style": {
                "navigationBarTitleText": "内箱拆分(F7)",
                "enablePullDownRefresh": false
            }
        },
        //叫料请求
        {
            "path": "pages/carry/getCarryRequest",
            "style": {
                "navigationBarTitleText": "叫料请求",
                "enablePullDownRefresh": false
            }
        },
        //取消任务
        {
            "path": "pages/taskInfo/cancelTask",
            "style": {
                "navigationBarTitleText": "取消任务",
                "enablePullDownRefresh": false
            }
        },
        //点对点
        {
            "path": "pages/test/qianfushitest",
            "style": {
                "navigationBarTitleText": "点对点任务",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/test/acrossfloor",
            "style": {
                "navigationBarTitleText": "跨楼层搬运",
                "enablePullDownRefresh": false
            }
        },
        //设置
        {
            "path": "pages/index/settings",
            "style": {
                "navigationBarTitleText": "设置",
                "enablePullDownRefresh": false
            }
        },
        //跨楼层叫料
        {
            "path": "pages/acrossfloor/matbind",
            "style": {
                "navigationBarTitleText": "跨楼层叫料绑定",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/acrossfloor/acrossfloorcallmat",
            "style": {
                "navigationBarTitleText": "跨楼层叫料",
                "enablePullDownRefresh": false
            }
        }
    ],
    "globalStyle": {
        "navigationBarTextStyle": "black",
        "navigationBarTitleText": "uView",
        "navigationBarBackgroundColor": "#F8F8F8",
        "backgroundColor": "#F8F8F8"
    },
    "tabBar": {
        "color": "#909399",
        "selectedColor": "#303133",
        "borderStyle": "black",
        "backgroundColor": "#ffffff",
        "list": [{
            "pagePath": "pages/index/index",
            "iconPath": "static/index.png",
            "selectedIconPath": "static/index-selected.png",
            "text": "首页"
        }, {
            "pagePath": "pages/home/home",
            "iconPath": "static/center.png",
            "selectedIconPath": "static/center-selected.png",
            "text": "我"
        }]
    }
}
´úÂë¹ÜÀí/»´°²PDA/pages/acrossfloor/acrossfloorcallmat.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,138 @@
<template>
    <view style="padding: 5%;">
        <!-- <uni-forms ref="formData" :modelValue="formData" label-width="120"> -->
        <uni-forms label-width="120">
            <uni-forms-item label="终点地址">
                <uni-data-select v-model="value" :localdata="range"></uni-data-select>
            </uni-forms-item>
        </uni-forms>
        <button @click="submit" type="primary" size="default" style="margin-top: 2%;">叫料</button>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                istrue: false,
                range: [],
                value: ""
            }
        },
        onLoad() {
            this.getEndLocations();
        },
        methods: {
            submit() {
                if (this.value.length <= 0) {
                    this.$refs.uToast.show({
                        title: "请选择终点地址",
                        type: "error"
                    })
                    return;
                }
                var param = {
                    MainData: {
                        matCode: this.value,
                        endPoint: this.value
                    }
                }
                this.$u.post('/api/AcrossFloorCarry/AcrossFloorCallMat', param).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "叫料成功",
                            type: "success"
                        })
                        this.carNo = "";
                        this.value = "";
                        this.locationNo = "";
                        this.istrue = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            getEndLocations() {
                this.$u.post('/api/AcrossFloorCarry/GetEndPoints?floor=F6', null).then(res => {
                    if (res.status) {
                        this.range = res.data;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/acrossfloor/matbind.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,170 @@
<template>
    <view style="padding: 5%;">
        <!-- <uni-forms ref="formData" :modelValue="formData" label-width="120"> -->
        <uni-forms label-width="120">
            <uni-forms-item label="料车编号">
                <uni-easyinput type="text" :focus="!istrue" @input="carNoInputChange" v-model="carNo"
                    placeholder="请扫描料车编号" ref='midInput' />
            </uni-forms-item>
            <uni-forms-item label="库位编号">
                <uni-easyinput type="text" :focus="istrue" v-model="locationNo" placeholder="请扫描库位编号" ref='midInput' />
            </uni-forms-item>
            <uni-forms-item label="终点地址">
                <uni-data-select v-model="value" :localdata="range"></uni-data-select>
            </uni-forms-item>
        </uni-forms>
        <button @click="submit" type="primary" size="default" style="margin-top: 2%;">绑定</button>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                istrue: false,
                carNo: "",
                locationNo: "",
                endpoint: "",
                range: [],
                value: ""
            }
        },
        onLoad() {
            this.getEndLocations();
        },
        methods: {
            submit() {
                if (this.locationNo.length <= 0) {
                    this.$refs.uToast.show({
                        title: "请扫描库位编号",
                        type: "error"
                    })
                    return;
                }
                if (this.carNo.length <= 0) {
                    this.$refs.uToast.show({
                        title: "请扫描料车编号",
                        type: "error"
                    })
                    return;
                }
                if (this.value.length <= 0) {
                    this.$refs.uToast.show({
                        title: "请选择终点地址",
                        type: "error"
                    })
                    return;
                }
                var param = {
                    MainData: {
                        carNo: this.carNo,
                        locationNo: this.locationNo,
                        endPoint: this.value
                    }
                }
                this.$u.post('/api/AcrossFloorCarry/MatBind', param).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "绑定成功",
                            type: "success"
                        })
                        this.carNo = "";
                        this.value = "";
                        this.locationNo = "";
                        this.istrue = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            carNoInputChange() {
                this.$nextTick(() => {
                    this.istrue = true;
                });
            },
            getEndLocations() {
                this.$u.post('/api/AcrossFloorCarry/GetEndPoints?floor=F6', null).then(res => {
                    if (res.status) {
                        this.range = res.data;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/allocationorder/allocationorder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,175 @@
<template>
    <view>
        <u-sticky>
            <view style="background-color: #ffffff;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
            </view>
        </u-sticky>
        <uni-list :border="true">
            <uni-list-item direction="column" clickable @click="groupClick(item.allocation_code)" link
                :to="page+item.allocation_code" v-for="item in allReceivingOrders" :key="item.allocation_code">
                <template v-slot:body>
                    <uni-group margin-top="20">
                        <view> è°ƒæ‹¨å•号:{{item.allocation_code}} </view>
                        <view> è°ƒæ‹¨ç±»åž‹:{{item.allocation_order_type}} </view>
                        <view> å•据日期:{{item.allocation_date}} </view>
                    </uni-group>
                </template>
            </uni-list-item>
        </uni-list>
        <uni-load-more :status="status" v-if="loadVisible"></uni-load-more>
        <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                page: "/pages/allocationorder/allocationorderoutbound?orderNo=",
                loadVisible: false,
                searchValue: "",
                status: "more",
                allReceivingOrders: [],
                pageNo: 1,
                scrollTop: 0
            }
        },
        onLoad(res) {
            this.getData();
        },
        onPageScroll(e) {
            this.scrollTop = e.scrollTop;
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        methods: {
            search(res) {
                this.pageNo = 1;
                this.getData();
            },
            groupClick() {
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.searchValue,
                        pageNo: this.pageNo
                    },
                }
                this.$u.post('/api/ErpOrder/GetAllocationOrders', postData).then((res) => {
                    if (res.status) {
                        if(res.data){
                            if (this.searchValue == '') {
                                this.allReceivingOrders = this.allReceivingOrders.concat(res.data);
                                // this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            } else {
                                this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            }
                        }else{
                            this.status = 'noMore';
                            this.allReceivingOrders = [];
                            this.loadVisible = true;
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/allocationorder/allocationorderoutbound.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,437 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view v-if="current === 0" class="headerstyle">
            <view class="itemstyle">
                <uni-forms style="margin-left: 2%;margin-top: 20px;" label-width="180">
                    <uni-forms-item :label="label"></uni-forms-item>
                    <uni-forms-item label="单据类型:调拨申请单"></uni-forms-item>
                    <uni-forms-item label="内箱码:">
                        <uni-easyinput type="text" placeholder="请扫描内箱码" ref='midInput' :focus="focus"
                            v-model="innerCode" @input="innercodeInput" />
                    </uni-forms-item>
                    <uni-forms-item :label="matCode"></uni-forms-item>
                    <uni-forms-item :label="matName"></uni-forms-item>
                    <uni-forms-item :label="currentQty"></uni-forms-item>
                    <uni-forms-item :label="orderQty"></uni-forms-item>
                    <uni-forms-item :label="scanQty"></uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 1" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="180">
                    <uni-forms-item label="区域"><uni-data-select v-model="value"
                            :localdata="range"></uni-data-select></uni-forms-item>
                    <uni-forms-item label="楼层"><uni-data-select v-model="floor"
                            :localdata="floorrange"></uni-data-select></uni-forms-item>
                </uni-forms>
                <uni-list :border="true">
                    <uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="item.dtlId">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <button type="primary" style="position: absolute;right: 1%;" size="mini"
                                    @click="outbound(item.matCode)">出库</button>
                                <view class="uni-content">
                                    <view style="font-size: 18px;">物料编码:{{item.matCode}}</view>
                                    <view style="font-size: 18px;">单据号:{{orderNo}}</view>
                                    <view style="font-size: 18px;">物料名称:{{item.matName}}</view>
                                    <view style="font-size: 18px;">单据数量:{{item.totalQty}}</view>
                                    <view style="font-size: 18px;">已分配数量:{{item.processQty}}</view>
                                    <view style="font-size: 18px;">出库数量:{{item.outQty}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <view v-if="current === 2" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item label="楼层">
                        <uni-data-select v-model="printfloor" :localdata="printfloorrange"></uni-data-select>
                    </uni-forms-item>
                    <uni-forms-item label="内箱标签">
                        <uni-easyinput type="text" :focus="tagFocus" v-model="tag" placeholder="请扫描内箱标签" ref='midInput'
                            @input="tagInput" />
                    </uni-forms-item>
                    <uni-forms-item :label="tagmatCode"></uni-forms-item>
                    <uni-forms-item :label="tagmatName"></uni-forms-item>
                    <uni-forms-item :label="tagQty"></uni-forms-item>
                    <uni-forms-item label="拆分数量">
                        <uni-easyinput type="number" v-model="number" placeholder="请输入拆分数量" ref='midInput'
                            :focus="numberFocus" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="printTag" type="primary" size="default" style="margin-top: 2%;">打印标签</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 3" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item label="托盘条码">
                        <uni-easyinput type="text" :focus="!istrue" v-model="barcode" placeholder="请扫描托盘条码"
                            ref='midInput' @input="inputChangebarcode" />
                    </uni-forms-item>
                    <uni-forms-item label="地址条码">
                        <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                            :focus="istrue" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                items: ['出库条码扫描', '明细', '拆分', '入库'],
                current: 0,
                orderNo: "",
                orderInfo: [],
                label: "",
                innerCode: "",
                matCode: "物料编码:",
                matName: "物料名称:",
                orderQty: "需求数量:",
                currentQty: "已扫数量:",
                scanQty: "累计数量:",
                tagFocus: true,
                numberFocus: false,
                focus: true,
                tag: "",
                number: "",
                tagmatCode: "物料编码:",
                tagmatName: "物料名称:",
                tagQty: "包装数量:",
                value: "KB",
                range: [{
                        value: "KB",
                        text: "KB"
                    },
                    {
                        value: "ZB",
                        text: "ZB"
                    }
                ],
                floor: "F2",
                floorrange: [{
                        value: "F2",
                        text: "F2"
                    },
                    {
                        value: "F3",
                        text: "F3"
                    },
                    {
                        value: "F4",
                        text: "F4"
                    },
                    {
                        value: "F7",
                        text: "F7"
                    }
                ],
                printfloor: "F2",
                printfloorrange: [{
                        value: "F2",
                        text: "F2"
                    },
                    {
                        value: "F2-ZB",
                        text: "F2-ZB"
                    },
                    {
                        value: "F3",
                        text: "F3"
                    },
                    {
                        value: "F4",
                        text: "F4"
                    },
                    {
                        value: "F7",
                        text: "F7"
                    },
                    {
                        value: "F7-2",
                        text: "F7-2"
                    }
                ],
                barcode: "",
                address: "",
                istrue: false
            }
        },
        onLoad(res) {
            this.orderNo = res.orderNo;
            this.label = "单据编号:" + this.orderNo;
            this.getData();
        },
        methods: {
            voiceSpeech(src) {
                innerAudioContext.src = src; // '../../static/success.mp3';
                innerAudioContext.play();
            },
            updateFocus() {
                this.$nextTick(() => {
                    this.innerCode = '';
                    if (!this.focus) {
                        this.focus = true;
                    }
                });
            },
            inbound() {
                if (this.barcode.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描托盘号",
                        type: "error"
                    })
                    return;
                }
                if (this.address.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描地址条码",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        "barcode": this.barcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/RequestInbound', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.barcode = "";
                        this.address = "";
                        this.istrue = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.istrue = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.istrue = true;
                    }
                })
            },
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current == 1) {
                        this.getData();
                    }
                }
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.orderNo
                    },
                }
                this.$u.post('/api/ErpOrder/GetAllocationOrderInfo', postData).then((res) => {
                    if (res.status) {
                        this.orderInfo = res.data;
                        if (this.orderInfo.length > 3) {
                            this.loadVisible = true;
                        }
                    }
                })
            },
            innercodeInput() {
                this.$nextTick(() => {
                    if (this.innerCode == "") {
                        return;
                    }
                    var innerCode = this.innerCode;
                    setTimeout(() => {
                        this.innerCode = "";
                    }, 10);
                    // this.focus = false;
                    if (innerCode.split('|').length == 7) {
                        var postData = {
                            MainData: {
                                orderNo: this.orderNo,
                                innerCode: innerCode
                            },
                        }
                        this.$u.post('/api/ErpOrder/UpdateAlloctionOrder', postData).then((res) => {
                            if (res.status) {
                                this.matCode = "物料编码:" + res.data.matCode;
                                this.matName = "物料名称:" + res.data.matName;
                                this.orderQty = "需求数量:" + res.data.orderQty;
                                this.currentQty = "已扫数量:" + res.data.currentQty;
                                this.scanQty = "累计数量:" + res.data.scanQty;
                                if (res.message) {
                                    this.$refs.uToast.show({
                                        title: res.message,
                                        type: "error"
                                    })
                                    // setTimeout(this.updateFocus,200);
                                    setTimeout(() => {
                                        this.voiceSpeech('../../static/fail.mp3');
                                    }, 100);
                                    return;
                                }
                                // setTimeout(this.updateFocus,200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/success.mp3');
                                }, 100);
                            } else {
                                // this.innerCode = "";
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                                // setTimeout(this.updateFocus,200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/fail.mp3');
                                }, 100);
                            }
                        })
                    } else {
                        // this.innerCode = "";
                        this.$refs.uToast.show({
                            title: "内箱码扫描错误",
                            type: "error"
                        })
                        // setTimeout(this.updateFocus,200);
                        setTimeout(() => {
                            this.voiceSpeech('../../static/fail.mp3');
                        }, 100);
                    }
                    // this.innerCode = "";
                })
            },
            tagInput() {
                this.$nextTick(() => {
                    var tagInfos = this.tag.split('|');
                    if (tagInfos.length == 7) {
                        this.tagmatCode = "物料编码:" + tagInfos[1];
                        this.tagQty = "物料数量:" + tagInfos[5];
                    } else {
                        this.$refs.uToast.show({
                            title: "内箱码扫描错误",
                            type: "error"
                        })
                    }
                    this.numberFocus = true;
                })
            },
            printTag() {
                if (this.tag == "") {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                if (this.number <= 0) {
                    this.$refs.uToast.show({
                        title: "请输入数量",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        tag: this.tag,
                        number: this.number,
                        floor: this.printfloor
                    }
                }
                this.$u.post('/api/StockOperate/PrintTag', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "打印成功",
                            type: "success"
                        })
                        this.tagmatCode = "物料编码:";
                        this.tagQty = "包装数量:";
                        this.tag = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            outbound(code) {
                var postData = {
                    MainData: {
                        matCode: code,
                        orderNo: this.orderNo,
                        system: this.value,
                        floor: this.floor
                    }
                }
                this.$u.post('/api/ErpOrder/AllocationOrderOutbound', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "成功",
                            type: "success"
                        })
                        this.getData();
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/callmat/ordercallmat.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,233 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="180">
                        <uni-forms-item :label="label"></uni-forms-item>
                        <uni-forms-item label="单据类型:生产领料单"></uni-forms-item>
                        <uni-forms-item label="产线站点">
                            <uni-easyinput type="text" :focus="!istrue" v-model="endPoint" placeholder="请扫描产线站点"
                                ref='midInput' @input="inputChangebarcode()" />
                        </uni-forms-item>
                        <uni-forms-item label="内箱标签">
                            <uni-combox :candidates="candidates" @input="inputChange()" placeholder="请选择物料编号"
                                v-model="materialsns"></uni-combox>
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="submit" type="primary" size="default" style="margin-top: 2%;">叫料</button>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list class="footer">
                        <uni-list-item direction="column" v-if="innersn">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                        @click="deleteList(innersn.matCode)">
                                    </uni-icons>
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">物料编码:{{innersn.matCode}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 1" class="headerstyle">
                <view class="itemstyle">
                    <uni-list :border="true">
                        <uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view style="font-size: 18px;">单据号:{{orderNo}}</view>
                                        <view style="font-size: 18px;">物料编码:{{item.matCode}}</view>
                                        <view style="font-size: 18px;">物料名称:{{item.matName}}</view>
                                        <view style="font-size: 18px;">单据数量:{{item.totalQty}}</view>
                                        <view style="font-size: 18px;">出库数量:{{item.outQty}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                items: ['生产叫料', '明细'],
                current: 0,
                orderNo: "",
                orderInfo: [],
                label: "",
                innerCode: "",
                matCode: "物料编码:",
                matName: "物料名称:",
                orderQty: "需求数量:",
                currentQty: "已扫数量:",
                scanQty: "累计数量:",
                istrue: false,
                endPoint: "",
                materialsns: "",
                innersn: null,
                callMatCode: "",
                candidates: []
            }
        },
        onLoad(res) {
            this.orderNo = res.orderNo;
            this.label = "单据编号:" + this.orderNo;
            this.getData();
        },
        methods: {
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current == 1) {
                        this.getData();
                    }
                }
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.orderNo
                    },
                }
                this.$u.post('/api/ErpOrder/GetReceiveOrderInfoByCode', postData).then((res) => {
                    if (res.status) {
                        this.orderInfo = res.data.receiving_Dtls;
                        this.candidates = res.data.matCodes;
                        if (this.orderInfo.length > 3) {
                            this.loadVisible = true;
                        }
                    }
                })
            },
            inputChangebarcode() {
                // this.innersn = null;
                // this.$nextTick(() => {
                //     if (this.materialsns.length < 14 && this.materialsns.indexOf("半成品") == -1) {
                //         return;
                //     }
                //     var matInfo = this.materialsns.split('|');
                //     if (matInfo.length == 6) {
                //         this.callMatCode = "";
                //         var matObj = {
                //             matCode: matInfo[1],
                //         }
                //         this.callMatCode = matInfo[1];
                //         this.innersn = matObj;
                //     } else {
                //         var matObj = {
                //             matCode: this.materialsns
                //         }
                //         this.innersn = matObj;
                //         this.callMatCode = this.materialsns;
                //     }
                //     setTimeout(() => {
                //         this.materialsns = "";
                //     }, 100);
                // })
            },
            inputChange(e) {
                this.innersn = null;
                this.$nextTick(() => {
                    if (this.materialsns.length < 14 && this.materialsns.indexOf("半成品") == -1) {
                        return;
                    }
                    var matInfo = this.materialsns.split('|');
                    if (matInfo.length > 6) {
                        this.callMatCode = "";
                        var matObj = {
                            matCode: matInfo[1],
                        }
                        this.callMatCode = matInfo[1];
                        this.innersn = matObj;
                    } else {
                        // this.$refs.uToast.show({
                        //     title: "扫码错误,请扫描正确外箱码",
                        //     type: "error"
                        // })
                        var matObj = {
                            matCode: this.materialsns
                        }
                        this.innersn = matObj;
                        this.callMatCode = this.materialsns;
                    }
                    setTimeout(() => {
                        this.materialsns = "";
                    }, 100);
                })
            },
            submit() {
                if(this.callMatCode == ''){
                    this.$refs.uToast.show({
                        title: "请扫描物料编号",
                        type: "error"
                    });
                    return;
                }
                this.$u.post('/api/Carry/CallMaterial2', {
                    MainData: {
                        "endPoint": this.endPoint,
                        "matCode": this.callMatCode,
                        "orderNo": this.orderNo
                    }
                }).then(resdt => {
                    if (resdt.status) {
                        uni.$showMsg('叫料成功!')
                        this.innersn = null;
                        this.callMatCode = "";
                        this.materialsns = "";
                        // this.endPoint = "";
                    } else {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "error"
                        })
                    }
                })
            },
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/callmat/receiveorder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,175 @@
<template>
    <view>
        <u-sticky>
            <view style="background-color: #ffffff;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
            </view>
        </u-sticky>
        <uni-list :border="true">
            <uni-list-item direction="column" clickable @click="groupClick(item.receive_code)" link
                :to="page+item.receive_code" v-for="item in allReceivingOrders" :key="item.receive_code">
                <template v-slot:body>
                    <uni-group margin-top="20">
                        <view> å·¥å•号:{{item.receive_code}} </view>
                        <view> äº§å“æ–™å·:{{item.receive_productNo}} </view>
                        <view> äº§çº¿:{{item.receive_line}} </view>
                        <view> æ•°é‡:{{item.receive_quantity}} </view>
                    </uni-group>
                </template>
            </uni-list-item>
        </uni-list>
        <uni-load-more :status="status" v-if="loadVisible"></uni-load-more>
        <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                page: "/pages/callmat/ordercallmat?orderNo=",
                loadVisible: false,
                searchValue: "",
                status: "more",
                allReceivingOrders: [],
                pageNo: 1,
                scrollTop: 0
            }
        },
        onLoad(res) {
            this.getData();
        },
        onPageScroll(e) {
            this.scrollTop = e.scrollTop;
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        methods: {
            search(res) {
                this.getData();
            },
            groupClick() {
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.searchValue,
                        pageNo: this.pageNo
                    },
                }
                this.$u.post('/api/ErpOrder/GetReceiveOrderCodes', postData).then((res) => {
                    if (res.status) {
                        if (res.data) {
                            if (this.searchValue == '') {
                                this.allReceivingOrders = this.allReceivingOrders.concat(res.data);
                                // this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            } else {
                                this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            }
                        } else {
                            this.status = 'noMore';
                            this.allReceivingOrders = [];
                            this.loadVisible = true;
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/carea/cacheareacallmat.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,198 @@
<template>
    <view>
        <uni-forms class="customcss" label-width="120">
            <uni-forms-item label="内箱标签">
                <uni-easyinput type="text" @input="inputChange()" v-model="materialsns" placeholder="请扫描内箱标签"
                    ref='midInput' :focus="istrue" />
            </uni-forms-item>
            <uni-forms-item label="产线编号">
                <uni-easyinput type="text" v-model="line" placeholder="请输入产线编号" ref='midInput' :focus="!istrue" />
            </uni-forms-item>
            <uni-forms-item>
                <button @click="submit" type="primary" size="default" style="margin-top: 2%;">叫料</button>
            </uni-forms-item>
        </uni-forms>
        <uni-list class="footer">
            <uni-list-item direction="column" v-if="innersn">
                <template v-slot:body>
                    <view class="uni-list-box">
                        <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                            @click="deleteList(innersn.matCode)">
                        </uni-icons>
                        <view class="uni-content">
                            <view class="uni-title-sub uni-ellipsis-2">物料编码:{{innersn.matCode}}</view>
                        </view>
                    </view>
                </template>
            </uni-list-item>
        </uni-list>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                istrue: true,
                endPoint: '',
                materialsns: "",
                matCode: "",
                innersn: null,
                line: ""
            }
        },
        onLoad(res) {},
        methods: {
            submit() {
                if (this.line == "") {
                    this.$refs.uToast.show({
                        title: "请输入产线编号",
                        type: "error"
                    })
                    return;
                }
                if (this.matCode == "") {
                    this.$refs.uToast.show({
                        title: "请输入物料编号",
                        type: "error"
                    })
                    return;
                }
                var temp = this.line.split('-');
                this.$u.post('/api/Carry/CallMaterial', {
                    MainData: {
                        "endPoint": "A-" + temp[0] + "-TEMP-" + temp[1] + "-01:01-01",
                        "matCode": this.matCode,
                        "system": "ZB"
                    }
                }).then(resdt => {
                    if (resdt.status) {
                        uni.$showMsg('叫料成功!')
                        this.innersn = null;
                        this.matCode = "";
                        this.materialsns = "";
                        this.endPoint = "";
                    } else {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "error"
                        })
                    }
                })
            },
            inputChange(e) {
                this.innersn = null;
                this.$nextTick(() => {
                    if (this.materialsns.length < 14) {
                        return;
                    }
                    var matInfo = this.materialsns.split('|');
                    if (matInfo.length > 6) {
                        this.matCode = "";
                        var matObj = {
                            matCode: matInfo[1],
                        }
                        this.matCode = matInfo[1];
                        this.innersn = matObj;
                    } else {
                        var matObj = {
                            matCode: this.materialsns
                        }
                        this.innersn = matObj;
                        this.matCode = this.materialsns;
                    }
                    setTimeout(() => {
                        this.materialsns = "";
                    }, 100);
                })
            },
            inputChangebarcode() {
                this.istrue = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.istrue = true;
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        width: 100%;
        background-color: #fff;
        padding: 20rpx 40rpx;
    }
    .footer {
        // padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/carea/carea.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,317 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view v-if="current === 0" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="180">
                    <uni-forms-item label="托盘条码:">
                        <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus"
                            v-model="barcode" @input="barcodeInput" @focus="barcodeFocus" />
                    </uni-forms-item>
                    <uni-forms-item label="内箱标签:">
                        <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="focus" v-model="materSn"
                            @input="snInput" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="submit" type="primary" size="default" style="margin-top: 2%;">组盘</button>
                    </uni-forms-item>
                </uni-forms>
                <uni-list class="footer">
                    <uni-list-item direction="column" v-for="item in matTotal" :key="item.matCode">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                    <uni-list-item direction="column" v-for="item in matInfos" :key="item.orderNo">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                    @click="deleteList(item.orderNo)">
                                </uni-icons>
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">订单号:{{item.orderNo}}</view>
                                    <view class="uni-note">物料编码:{{item.matCode}}</view>
                                    <view class="uni-note">生产日期:{{item.matProductionDate}}</view>
                                    <view class="uni-note">数量:{{item.matQty}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <view v-if="current === 1" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item label="货位编号">
                        <uni-easyinput type="text" :focus="!bindbarcodefocus" v-model="locationNo" placeholder="请输入货位编号"
                            ref='midInput' @input="locationNoinputChange"  />
                    </uni-forms-item>
                    <uni-forms-item label="托盘条码">
                        <uni-easyinput type="text" :focus="bindbarcodefocus" v-model="bindbarcode" placeholder="请扫描托盘条码" ref='midInput'/>
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="bindstock" type="primary" size="default" style="margin-top: 2%;">库存绑定</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 2" class="headerstyle">
            <view class="itemstyle">
                <uni-forms class="customcss" label-width="120">
                    <uni-forms-item label="内箱标签">
                        <uni-easyinput type="text" @input="inputChange()" v-model="materialsns" placeholder="请扫描内箱标签"
                            ref='midInput' :focus="istrue" />
                    </uni-forms-item>
                    <uni-forms-item label="产线编号">
                        <uni-easyinput type="text" v-model="line" placeholder="请输入产线编号" ref='midInput' :focus="!istrue" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="submit" type="primary" size="default" style="margin-top: 2%;">叫料</button>
                    </uni-forms-item>
                </uni-forms>
                <uni-list class="footer">
                    <uni-list-item direction="column" v-if="innersn">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                    @click="deleteList(innersn.matCode)">
                                </uni-icons>
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">物料编码:{{innersn.matCode}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                items: ['C区组盘', 'C区库存绑定', 'C区叫料'],
                current: 0,
                matTotal: [],
                matInfos: [],
                orderNo: "",
                label: "",
                orderInfo: [],
                focus: false,
                barcode: "",
                materSn: "",
                sns: [],
                addressFocus: false,
                inboundBarcode: "",
                locationNo: "",
                bindbarcode: '',
                bindbarcodefocus: false,
            }
        },
        onLoad(res) {},
        methods: {
            onClickItem(e) {
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                }
            },
            updateFocus() {
                this.materSn = '';
                if (!this.focus) {
                    this.focus = true;
                }
            },
            barcodeFocus() {},
            onClickItem(e) {
                if (this.barcode == "") {
                    this.focus = false;
                    this.addressFocus = false;
                } else {
                    this.focus = true;
                    this.addressFocus = true;
                }
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                }
            },
            barcodeInput() {
                this.focus = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.focus = true;
                    }
                })
            },
            snInput() {
                this.$nextTick(() => {
                    if (this.materSn != "") {
                        // this.focus = false;
                        var matInfo = this.materSn.split('|');
                        if (matInfo.length == 7) {
                            var matObj = {
                                matCode: matInfo[1],
                                matProductionDate: matInfo[3],
                                matQty: matInfo[5],
                                orderNo: matInfo[6],
                                sn: this.materSn
                            }
                            var orderInfo = matObj.orderNo.split('.');
                            var temp = this.matInfos.find(x => x.orderNo == matObj.orderNo);
                            if (!temp) {
                                var tmp = this.matTotal.find(x => x.matCode == matObj.matCode);
                                if (!tmp) {
                                    this.matTotal.push({
                                        matCode: matObj.matCode,
                                        matQuantity: parseInt(matObj.matQty)
                                    })
                                } else {
                                    tmp.matQuantity += parseInt(matObj.matQty);
                                }
                                this.sns.push(this.materSn);
                                this.matInfos.push(matObj);
                                // setTimeout(this.updateFocus, 200);
                            } else {
                                this.$refs.uToast.show({
                                    title: "扫码重复",
                                    type: "error"
                                })
                                // setTimeout(this.updateFocus, 200);
                            }
                        } else {
                            this.$refs.uToast.show({
                                title: "扫码错误,请扫描正确内箱码",
                                type: "error"
                            })
                            // setTimeout(this.updateFocus, 200);
                        }
                    }
                    this.materSn = '';
                })
            },
            bindstock() {
                if (this.locationNo == "") {
                    this.$refs.uToast.show({
                        title: "货位号不能为空",
                        type: "error"
                    });
                    return;
                }
                if (this.bindbarcode == "") {
                    this.$refs.uToast.show({
                        title: "托盘号不能为空",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "locationNo": this.locationNo,
                        "barcode": this.bindbarcode
                    },
                }
                this.$u.post('/api/StockOperate/BindStock', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.inboundBarcode = "";
                        this.address = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            locationNoinputChange() {
                this.barcodefocus = false;
                this.$nextTick(function(x) {
                    if (this.locationNo != '') {
                        this.barcodefocus = true;
                    }
                })
            },
            submit() {
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: 'error'
                    })
                    return;
                }
                if (this.sns.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: 'error'
                    })
                    return;
                }
                this.$u.post('/api/Bill_group_stock/OtherBoxing', {
                    MainData: {
                        "pallet_barcode": this.barcode,
                        "orderNo": this.orderNo
                    },
                    DetailData: this.matInfos,
                    DelKeys: this.sns
                }).then(res => {
                    if (res.status) {
                        uni.$showMsg('组盘成功!')
                        this.barcode = "";
                        this.matInfos = [];
                        this.sns = [];
                        this.matTotal = [];
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    uni.showToast.show({
                        title: err.message,
                        type: 'error'
                    })
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/carea/zbareaboxing.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,264 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0">
                <uni-forms style="margin-top: 20px;margin-left: 20px;width: 100%;" label-width="180">
                    <uni-forms-item :label="label">
                    </uni-forms-item>
                    <uni-forms-item label="托盘条码:">
                        <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus"
                            v-model="barcode" @input="barcodeInput" @focus="barcodeFocus"/>
                    </uni-forms-item>
                    <uni-forms-item label="内箱标签:">
                        <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="focus" v-model="materSn"
                            @input="snInput"/>
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="submit" type="primary" size="default"style="margin-top: 2%;">组盘</button>
                    </uni-forms-item>
                </uni-forms>
                <uni-list class="footer">
                    <uni-list-item direction="column" v-for="item in matTotal" :key="item.matCode">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                    <uni-list-item direction="column" v-for="item in matInfos" :key="item.orderNo">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                    @click="deleteList(item.orderNo)">
                                </uni-icons>
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">订单号:{{item.orderNo}}</view>
                                    <view class="uni-note">物料编码:{{item.matCode}}</view>
                                    <view class="uni-note">生产日期:{{item.matProductionDate}}</view>
                                    <view class="uni-note">数量:{{item.matQty}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
            <view v-if="current === 1">
                <uni-forms style="margin-top: 20px;margin-left: 20px;width: 100%;" label-width="120">
                    <uni-forms-item label="托盘条码">
                        <uni-easyinput type="text" :focus="!addressFocus" v-model="barcode" placeholder="请扫描托盘条码"
                            ref='midInput' @input="inputChangebarcode()" @focus="barcodeFocus"/>
                    </uni-forms-item>
                    <uni-forms-item label="地址条码">
                        <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                            :focus="addressFocus"/>
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">库存绑定</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                items: ['组盘', '库存绑定'],
                current: 0,
                matTotal: [],
                matInfos: [],
                orderNo: "",
                label: "",
                orderInfo: [],
                focus: false,
                barcode: "",
                materSn: "",
                sns: [],
                addressFocus: false,
                inboundBarcode: "",
                address: ""
            }
        },
        onLoad(res) {
            this.focus = false;
            this.addressFocus = false;
        },
        methods: {
            updateFocus() {
                this.materSn = '';
                if (!this.focus) {
                    this.focus = true;
                }
            },
            barcodeFocus() {
            },
            onClickItem(e) {
                if(this.barcode == ""){
                    this.focus = false;
                    this.addressFocus = false;
                }else{
                    this.focus = true;
                    this.addressFocus = true;
                }
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                }
            },
            barcodeInput() {
                this.focus = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.focus = true;
                    }
                })
            },
            snInput() {
                this.$nextTick(() => {
                    if (this.materSn != "") {
                        this.focus = false;
                        var matInfo = this.materSn.split('|');
                        if (matInfo.length == 7) {
                            var matObj = {
                                matCode: matInfo[1],
                                matProductionDate: matInfo[3],
                                matQty: matInfo[5],
                                orderNo: matInfo[6],
                                sn: this.materSn
                            }
                            var orderInfo = matObj.orderNo.split('.');
                            var temp = this.matInfos.find(x => x.orderNo == matObj.orderNo);
                            if (!temp) {
                                var tmp = this.matTotal.find(x => x.matCode == matObj.matCode);
                                if (!tmp) {
                                    this.matTotal.push({
                                        matCode: matObj.matCode,
                                        matQuantity: parseInt(matObj.matQty)
                                    })
                                } else {
                                    tmp.matQuantity += parseInt(matObj.matQty);
                                }
                                this.sns.push(this.materSn);
                                this.matInfos.push(matObj);
                                setTimeout(this.updateFocus, 200);
                            } else {
                                this.$refs.uToast.show({
                                    title: "扫码重复",
                                    type: "error"
                                })
                                setTimeout(this.updateFocus, 200);
                            }
                        } else {
                            this.$refs.uToast.show({
                                title: "扫码错误,请扫描正确内箱码",
                                type: "error"
                            })
                            setTimeout(this.updateFocus, 200);
                        }
                    }
                })
            },
            inbound() {
                var postData = {
                    MainData: {
                        "barcode": this.inboundBarcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/RequestInbound', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.inboundBarcode = "";
                        this.address = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.addressFocus = false;
                this.$nextTick(function(x) {
                    if (this.inboundBarcode != '') {
                        this.addressFocus = true;
                    }
                })
            },
            submit() {
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: 'error'
                    })
                    return;
                }
                if (this.sns.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: 'error'
                    })
                    return;
                }
                this.$u.post('/api/Bill_group_stock/OtherBoxing', {
                    MainData: {
                        "pallet_barcode": this.barcode,
                        "orderNo": this.orderNo
                    },
                    DetailData: this.matInfos,
                    DelKeys: this.sns
                }).then(res => {
                    if (res.status) {
                        uni.$showMsg('组盘成功!')
                        this.barcode = "";
                        this.matInfos = [];
                        this.sns = [];
                        this.matTotal = [];
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    uni.showToast.show({
                        title: err.message,
                        type: 'error'
                    })
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .footer {
        // padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/carry/getCarryRequest.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,239 @@
<template>
    <view>
        <uni-data-select v-model="value" :localdata="range" @change="change"></uni-data-select>
        <uni-list :border="true">
            <uni-list-item direction="column" v-for="item in allReceivingOrders" :key="item.id">
                <template v-slot:body>
                    <uni-group margin-top="20">
                        <view> ç‰©æ–™ç¼–号:{{item.request_matcode}} </view>
                        <view> å«æ–™ç»ˆç‚¹:{{item.request_endpoint}} </view>
                        <view> å·¥å•号:{{item.request_orderno}} </view>
                        <view> å«æ–™æ¥¼å±‚:{{item.request_floor}} </view>
                        <view> å«æ–™äºº:{{item.creator}} </view>
                        <view> å«æ–™æ—¶é—´:{{item.createtime}} </view>
                        <!-- <view> æ—¥æœŸ:{{item.purchase_date}} </view> -->
                    </uni-group>
                </template>
            </uni-list-item>
        </uni-list>
        <uni-load-more :status="status" v-if="loadVisible"></uni-load-more>
        <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                page: "/pages/outorder/receiveorderinfo?orderNo=",
                loadVisible: false,
                searchValue: "",
                status: "more",
                allReceivingOrders: [],
                pageNo: 1,
                scrollTop: 0,
                city: "city",
                value: "F2",
                range: [{
                        value: "F2",
                        text: "F2"
                    },
                    {
                        value: "F3",
                        text: "F3"
                    },
                    {
                        value: "F4",
                        text: "F4"
                    },
                    {
                        value: "F5",
                        text: "F5"
                    },
                ],
            }
        },
        onLoad(res) {
            this.getData();
        },
        onPageScroll(e) {
            this.scrollTop = e.scrollTop;
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        methods: {
            change(res) {
                this.value = res;
                this.getData();
                // console.log(res)
            },
            confirm() {
            },
            search(res) {
                this.getData();
            },
            groupClick() {
            },
            getData() {
                var postData = {
                    MainData: {
                        floor: this.value
                    },
                }
                this.$u.post('/api/Carry/GetCallMatRequest', postData).then((res) => {
                    if (res.status) {
                        if (res.data) {
                            this.allReceivingOrders = this.allReceivingOrders.concat(res.data);
                            // this.allReceivingOrders = res.data;
                            if (this.allReceivingOrders.length > 3) {
                                this.loadVisible = true;
                            } else {
                                this.loadVisible = false;
                            }
                            // console.log(this.allReceivingOrders)
                        } else {
                            this.status = 'noMore';
                            this.allReceivingOrders = [];
                            this.loadVisible = true;
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    $nav-height: 30px;
    .box-bg {
        background-color: #F5F5F5;
        padding: 5px 0;
    }
    .city {
        /* #ifndef APP-PLUS-NVUE */
        display: flex;
        /* #endif */
        flex-direction: row;
        align-items: center;
        justify-content: flex-start;
        // width: 160rpx;
        margin-left: 4px;
    }
    .input-view {
        /* #ifndef APP-PLUS-NVUE */
        display: flex;
        /* #endif */
        flex-direction: row;
        // width: 500rpx;
        flex: 1;
        background-color: #f8f8f8;
        height: $nav-height;
        border-radius: 15px;
        padding: 0 15px;
        flex-wrap: nowrap;
        margin: 7px 0;
        line-height: $nav-height;
    }
    .input-uni-icon {
        line-height: $nav-height;
    }
    .nav-bar-input {
        height: $nav-height;
        line-height: $nav-height;
        /* #ifdef APP-PLUS-NVUE */
        width: 370rpx;
        /* #endif */
        padding: 0 5px;
        font-size: 12px;
        background-color: #f8f8f8;
    }
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/delivery/carrycheck.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,157 @@
<template>
    <view>
        <!-- <uni-forms ref="formData" :modelValue="formData" label-width="120"> -->
        <uni-forms class="customcss" label-width="120">
            <uni-forms-item label="托盘条码">
                <uni-easyinput type="text" :focus="!barcodefocus" v-model="barcode" placeholder="请扫描托盘条码" ref='midInput'
                    @input="barcodeinputChange" />
            </uni-forms-item>
            <uni-forms-item label="货位编号">
                <uni-easyinput type="text" :focus="barcodefocus" v-model="locationNo" @input="locationNoinputChange"
                    placeholder="请扫描货位编号" ref='midInput' />
            </uni-forms-item>
            <uni-forms-item :label="label">
            </uni-forms-item>
        </uni-forms>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                locationNo: "",
                barcode: '',
                barcodefocus: false,
                label:""
            }
        },
        onLoad(res) {
        },
        methods: {
            locationNoinputChange() {
                this.$nextTick(function(x) {
                    if (this.locationNo == "") {
                        return;
                    }
                    if (this.barcode == "") {
                        this.$refs.uToast.show({
                            title: "托盘号不能为空",
                            type: "error"
                        });
                        return;
                    }
                    var postData = {
                        MainData: {
                            "locationCode": this.locationNo,
                            "barcode": this.barcode
                        },
                    }
                    this.$u.post('/api/Carry/PutMatCheck', postData).then((res) => {
                        if (res.status) {
                            this.items = [];
                            this.$refs.uToast.show({
                                title: res.message,
                                type: "success"
                            });
                            this.locationNo = "";
                            this.barcode = "";
                            this.barcodefocus = false;
                        } else {
                            this.$refs.uToast.show({
                                title: res.message,
                                type: "error"
                            });
                            this.locationNo = "";
                        }
                        this.label = res.message;
                    })
                })
            },
            barcodeinputChange() {
                this.barcodefocus = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.barcodefocus = true;
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        background-color: #fff;
        padding: 20rpx 40rpx;
        width: 100%;
    }
    .footer {
        // padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/delivery/delivery.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,278 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view v-if="current === 0" class="headerstyle">
            <view class="itemstyle">
                <uni-forms class="customcss" label-width="120">
                    <uni-forms-item label="托盘条码">
                        <uni-easyinput type="text" :focus="!barcodefocus" v-model="barcode" placeholder="请扫描托盘条码"
                            ref='midInput' @input="barcodeinputChange" @confirm="submit" />
                    </uni-forms-item>
                    <uni-forms-item label="货位编号">
                        <uni-easyinput type="text" :focus="barcodefocus" v-model="locationNo" placeholder="请输入货位编号"
                            ref='midInput' @confirm="submit" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="confirm" type="primary" size="default" style="margin-top: 2%;">数量确认</button>
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="trainStockBind" type="primary" size="default"
                            style="margin-top: 2%;">手动绑定</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 1" class="headerstyle">
            <view class="itemstyle">
                <uni-forms class="customcss" label-width="120">
                    <uni-forms-item label="托盘条码">
                        <uni-easyinput type="text" :focus="!checkbarcodefocus" v-model="checkbarcode"
                            placeholder="请扫描托盘条码" ref='midInput' @input="checkbarcodeinputChange" />
                    </uni-forms-item>
                    <uni-forms-item label="货位编号">
                        <uni-easyinput type="text" :focus="checkbarcodefocus" v-model="checklocationNo"
                            @input="locationNoinputChange" placeholder="请扫描货位编号" ref='midInput' />
                    </uni-forms-item>
                    <uni-forms-item :label="label">
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 2" class="headerstyle">
            <view class="itemstyle">
                <uni-forms class="customcss" label-width="120">
                    <uni-forms-item label="条码信息">
                        <uni-easyinput type="text" :focus="!infobarcodefocus" v-model="infobarcode"
                            placeholder="请扫描托盘条码或小火车条码" ref='midInput' @input="infoinputChange" />
                    </uni-forms-item>
                </uni-forms>
                <uni-list class="footer">
                    <uni-list-item direction="column" v-for="(item,index) in infos" :key="index">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">物料编号:{{item.matCode}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">物料名称:{{item.matName}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">托盘号:{{item.barcode}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">出库数量:{{item.quantity}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">配送地址:{{item.address}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">当前位置:{{item.currentAddress}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                items: ['库存绑定', '配送校验', '配送信息查询'],
                current: 0,
                locationNo: "",
                barcode: '',
                barcodefocus: false,
                checklocationNo: "",
                checkbarcode: '',
                checkbarcodefocus: false,
                label: "",
                infos: [],
                infobarcode: '',
                infobarcodefocus: false,
            }
        },
        onLoad(res) {},
        methods: {
            onClickItem(e) {
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                }
            },
            confirm() {
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "托盘号不能为空",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "trainCode": this.locationNo,
                    },
                }
                this.$u.post('/api/StockOperate/TrainStockBindConfirm', postData).then((res) => {
                    if (res.status) {
                        this.items = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "success"
                        });
                        this.locationNo = "";
                        this.barcode = "";
                        this.barcodefocus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            trainStockBind() {
                if (this.locationNo == "") {
                    this.$refs.uToast.show({
                        title: "货位号不能为空",
                        type: "error"
                    });
                    return;
                }
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "托盘号不能为空",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "trainCode": this.locationNo,
                        "barcode": this.barcode
                    },
                }
                this.$u.post('/api/StockOperate/TrainStockBind', postData).then((res) => {
                    if (res.status) {
                        this.items = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "success"
                        });
                        this.locationNo = "";
                        this.barcode = "";
                        this.barcodefocus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            barcodeinputChange() {
                this.barcodefocus = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.barcodefocus = true;
                    }
                })
            },
            locationNoinputChange() {
                this.$nextTick(function(x) {
                    if (this.checklocationNo == "") {
                        return;
                    }
                    if (this.checkbarcode == "") {
                        this.$refs.uToast.show({
                            title: "托盘号不能为空",
                            type: "error"
                        });
                        return;
                    }
                    var postData = {
                        MainData: {
                            "locationCode": this.checklocationNo,
                            "barcode": this.checkbarcode
                        },
                    }
                    this.$u.post('/api/Carry/PutMatCheck', postData).then((res) => {
                        if (res.status) {
                            this.items = [];
                            this.$refs.uToast.show({
                                title: res.message,
                                type: "success"
                            });
                            this.checklocationNo = "";
                            this.checkbarcode = "";
                            this.checkbarcodefocus = false;
                        } else {
                            this.$refs.uToast.show({
                                title: res.message,
                                type: "error"
                            });
                            this.checklocationNo = "";
                            this.checkbarcode = "";
                            this.checkbarcodefocus = false;
                        }
                        this.label = res.message;
                    })
                })
            },
            checkbarcodeinputChange() {
                this.checkbarcodefocus = false;
                this.$nextTick(function(x) {
                    if (this.checkbarcode != '') {
                        this.checkbarcodefocus = true;
                    }
                })
            },
            infoinputChange() {
                this.$nextTick(function(x) {
                    if (this.infobarcode != '') {
                        var postData = {
                            MainData: {
                                "barcode": this.infobarcode
                            }
                        };
                        this.$u.post('/api/Carry/GetCarryInfo', postData).then(res => {
                            if (res.status) {
                                this.infos = res.data
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                            this.infobarcode = "";
                        })
                        this.istrue = true;
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/delivery/getcarryinfo.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,143 @@
<template>
    <view >
        <!-- <uni-forms ref="formData" :modelValue="formData" label-width="120"> -->
        <uni-forms class="customcss" label-width="120">
            <uni-forms-item label="条码信息">
                <uni-easyinput type="text" :focus="!barcodefocus" v-model="barcode" placeholder="请扫描托盘条码或小火车条码" ref='midInput'
                    @input="locationNoinputChange()" />
            </uni-forms-item>
        </uni-forms>
        <uni-list class="footer">
            <uni-list-item direction="column" v-for="(item,index) in infos" :key="index">
                <template v-slot:body>
                    <view class="uni-list-box">
                        <view class="uni-content">
                            <view class="uni-title-sub uni-ellipsis-2">物料编号:{{item.matCode}}</view>
                            <view class="uni-title-sub uni-ellipsis-2">物料名称:{{item.matName}}</view>
                            <view class="uni-title-sub uni-ellipsis-2">托盘号:{{item.barcode}}</view>
                            <view class="uni-title-sub uni-ellipsis-2">出库数量:{{item.quantity}}</view>
                            <view class="uni-title-sub uni-ellipsis-2">配送地址:{{item.address}}</view>
                            <view class="uni-title-sub uni-ellipsis-2">当前位置:{{item.currentAddress}}</view>
                        </view>
                    </view>
                </template>
            </uni-list-item>
        </uni-list>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                infos: [],
                barcode: '',
                barcodefocus: false,
            }
        },
        onLoad(res) {
        },
        methods: {
            locationNoinputChange() {
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        var postData = {
                            MainData: {
                                "barcode": this.barcode
                            }
                        };
                        this.$u.post('/api/Carry/GetCarryInfo', postData).then(res => {
                            if (res.status) {
                                this.infos = res.data
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                            this.barcode = "";
                        })
                        this.istrue = true;
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        background-color: #fff;
        padding: 20rpx 40rpx;
        width: 100%;
    }
    .footer {
        // padding-top: 20%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/delivery/trainstockbind.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,191 @@
<template>
    <view>
        <!-- <uni-forms ref="formData" :modelValue="formData" label-width="120"> -->
        <uni-forms class="customcss" label-width="120">
            <uni-forms-item label="托盘条码">
                <uni-easyinput type="text" :focus="!barcodefocus" v-model="barcode" placeholder="请扫描托盘条码" ref='midInput'
                    @input="locationNoinputChange()" @confirm="submit" />
            </uni-forms-item>
            <uni-forms-item label="货位编号">
                <uni-easyinput type="text" :focus="barcodefocus" v-model="locationNo" placeholder="请输入货位编号"
                    ref='midInput' @confirm="submit" />
            </uni-forms-item>
            <uni-forms-item>
                <button @click="confirm" type="primary" size="default" style="margin-top: 2%;">数量确认</button>
            </uni-forms-item>
            <uni-forms-item>
                <button @click="submit" type="primary" size="default" style="margin-top: 2%;">手动绑定</button>
            </uni-forms-item>
        </uni-forms>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                locationNo: "",
                barcode: '',
                barcodefocus: false,
            }
        },
        onLoad(res) {},
        methods: {
            confirm(){
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "托盘号不能为空",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "trainCode": this.locationNo,
                    },
                }
                this.$u.post('/api/StockOperate/TrainStockBindConfirm', postData).then((res) => {
                    if (res.status) {
                        this.items = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "success"
                        });
                        this.locationNo = "";
                        this.barcode = "";
                        this.barcodefocus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            submit() {
                if (this.locationNo == "") {
                    this.$refs.uToast.show({
                        title: "货位号不能为空",
                        type: "error"
                    });
                    return;
                }
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "托盘号不能为空",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "trainCode": this.locationNo,
                        "barcode": this.barcode
                    },
                }
                this.$u.post('/api/StockOperate/TrainStockBind', postData).then((res) => {
                    if (res.status) {
                        this.items = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "success"
                        });
                        this.locationNo = "";
                        this.barcode = "";
                        this.barcodefocus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            locationNoinputChange() {
                this.barcodefocus = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.barcodefocus = true;
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        background-color: #fff;
        padding: 20rpx 40rpx;
        width: 100%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/directorder/directorder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,175 @@
<template>
    <view>
        <u-sticky>
            <view style="background-color: #ffffff;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
            </view>
        </u-sticky>
        <uni-list :border="true">
            <uni-list-item direction="column" clickable @click="groupClick(item.directorder_code)" link
                :to="page+item.directorder_code" v-for="item in allReceivingOrders" :key="item.directorder_code">
                <template v-slot:body>
                    <uni-group margin-top="20">
                        <view> è°ƒæ‹¨å•号:{{item.directorder_code}} </view>
                        <!-- <view> è°ƒæ‹¨ç±»åž‹:{{item.directorder_type}} </view> -->
                        <view> å•据日期:{{item.directorder_date}} </view>
                    </uni-group>
                </template>
            </uni-list-item>
        </uni-list>
        <uni-load-more :status="status" v-if="loadVisible"></uni-load-more>
        <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                page: "/pages/directorder/directorderoutbound?orderNo=",
                loadVisible: false,
                searchValue: "",
                status: "more",
                allReceivingOrders: [],
                pageNo: 1,
                scrollTop: 0
            }
        },
        onLoad(res) {
            this.getData();
        },
        onPageScroll(e) {
            this.scrollTop = e.scrollTop;
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        methods: {
            search(res) {
                this.pageNo = 1;
                this.getData();
            },
            groupClick() {
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.searchValue,
                        pageNo: this.pageNo
                    },
                }
                this.$u.post('/api/ErpOrder/GetDirectOrders', postData).then((res) => {
                    if (res.status) {
                        if(res.data){
                            if (this.searchValue == '') {
                                this.allReceivingOrders = this.allReceivingOrders.concat(res.data);
                                // this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            } else {
                                this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            }
                        }else{
                            this.status = 'noMore';
                            this.allReceivingOrders = [];
                            this.loadVisible = true;
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/directorder/directorderoutbound.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,574 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view v-if="current === 0" class="headerstyle">
            <view class="itemstyle">
                <uni-forms style="margin-left: 2%;margin-top: 20px;" label-width="180">
                    <uni-forms-item :label="label"></uni-forms-item>
                    <uni-forms-item label="单据类型:直接调拨单"></uni-forms-item>
                    <uni-forms-item label="内箱码:">
                        <uni-easyinput type="text" placeholder="请扫描内箱码" ref='midInput' :focus="focus"
                            v-model="innerCode" @input="innercodeInput" />
                    </uni-forms-item>
                    <uni-forms-item :label="matCode"></uni-forms-item>
                    <uni-forms-item :label="matName"></uni-forms-item>
                    <uni-forms-item :label="currentQty"></uni-forms-item>
                    <uni-forms-item :label="orderQty"></uni-forms-item>
                    <uni-forms-item :label="scanQty"></uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 1" class="headerstyle">
            <view class="itemstyle">
                <u-sticky>
                    <view style="background-color: #ffffff;">
                        <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
                    </view>
                </u-sticky>
                <uni-forms label-width="180">
                    <uni-forms-item label="区域"><uni-data-select v-model="value"
                            :localdata="range"></uni-data-select></uni-forms-item>
                    <uni-forms-item label="楼层"><uni-data-select v-model="floor"
                            :localdata="floorrange"></uni-data-select>
                    </uni-forms-item>
                    <uni-forms-item label="出库区域">
                        <uni-data-select v-model="endType" :localdata="endTypeRange"></uni-data-select>
                    </uni-forms-item>
                </uni-forms>
                <uni-list :border="true">
                    <uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="item.dtlId">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <button type="primary" style="position: absolute;right: 1%;" size="mini"
                                    @click="outbound(item.matCode)">出库</button>
                                <view class="uni-content">
                                    <view style="font-size: 18px;">物料编码:{{item.matCode}}</view>
                                    <view style="font-size: 18px;">单据号:{{orderNo}}</view>
                                    <view style="font-size: 18px;">物料名称:{{item.matName}}</view>
                                    <view style="font-size: 18px;">单据数量:{{item.totalQty}}</view>
                                    <view style="font-size: 18px;">已分配数量:{{item.processQty}}</view>
                                    <view style="font-size: 18px;">出库数量:{{item.outQty}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <view v-if="current === 2" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item label="楼层">
                        <uni-data-select v-model="printfloor" :localdata="printfloorrange"></uni-data-select>
                    </uni-forms-item>
                    <uni-forms-item label="内箱标签">
                        <uni-easyinput type="text" :focus="tagFocus" v-model="tag" placeholder="请扫描内箱标签" ref='midInput'
                            @input="tagInput" />
                    </uni-forms-item>
                    <uni-forms-item :label="tagmatCode"></uni-forms-item>
                    <uni-forms-item :label="tagmatName"></uni-forms-item>
                    <uni-forms-item :label="tagQty"></uni-forms-item>
                    <uni-forms-item label="拆分数量">
                        <uni-easyinput type="number" v-model="number" placeholder="请输入拆分数量" ref='midInput'
                            :focus="numberFocus" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="printTag" type="primary" size="default" style="margin-top: 2%;">打印标签</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 3" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item label="托盘条码">
                        <uni-easyinput type="text" :focus="!istrue" v-model="barcode" placeholder="请扫描托盘条码"
                            ref='midInput' @input="inputChangebarcode" />
                    </uni-forms-item>
                    <uni-forms-item label="地址条码">
                        <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                            :focus="istrue" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 4" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item>
                        <uni-easyinput type="text" @input="releaseboxInput" v-model="releasevalue" placeholder="请扫码"
                            ref='midInput' :focus="releasefocus" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="releasebox" type="primary" size="default" style="margin-top: 2%;">解盘</button>
                    </uni-forms-item>
                </uni-forms>
                <uni-list>
                    <uni-list-item direction="column" v-if="value2">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">托盘号:{{value2}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                    <uni-list-item direction="column" v-for="item in matTotals" :key="item.matCode">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                    <uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                        ç‰©æ–™ç¼–码:{{item.matCode}}
                                    </view>
                                    <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                        ç‰©æ–™åç§°ï¼š{{item.matName}}
                                    </view>
                                    <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                        æ•°é‡ï¼š{{item.matQty}}
                                    </view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    import {
        config
    } from '../../common/config';
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                items: ['扫描', '明细', '拆分', '入库', '解盘'],
                current: 0,
                orderNo: "",
                orderInfo: [],
                label: "",
                innerCode: "",
                matCode: "物料编码:",
                matName: "物料名称:",
                orderQty: "需求数量:",
                currentQty: "已扫数量:",
                scanQty: "累计数量:",
                tagFocus: true,
                numberFocus: false,
                focus: true,
                tag: "",
                number: "",
                tagmatCode: "物料编码:",
                tagmatName: "物料名称:",
                tagQty: "包装数量:",
                value: "",
                range: [],
                floor: "",
                floorrange: [],
                printfloor: "",
                printfloorrange: [],
                barcode: "",
                address: "",
                istrue: false,
                releasefocus: true,
                releasevalue: "",
                matInfo: [],
                matTotals: [],
                value2: "",
                searchValue: "",
                endType: "",
                endTypeRange: []
            }
        },
        mounted() {
            this.printfloorrange = config.printFloorRange;
            this.floorrange = config.outboundFloorRange;
            if (config.outboundFloor) {
                this.floor = config.outboundFloor;
            }
            if (config.printFloor) {
                this.printfloor = config.printFloor;
            }
            this.range = config.warehouseRange;
            this.endTypeRange = config.outboundAreaRange;
            if (config.outboundArea) {
                this.endType = config.outboundArea;
            }
            if (config.warehouseArea) {
                this.value = config.warehouseArea;
            }
        },
        onLoad(res) {
            this.orderNo = res.orderNo;
            this.label = "单据编号:" + this.orderNo;
            this.getData();
        },
        methods: {
            voiceSpeech(src) {
                innerAudioContext.src = src; // '../../static/success.mp3';
                innerAudioContext.play();
            },
            search() {
                this.getData();
            },
            releasebox() {
                if (this.releasevalue.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫码",
                        type: "error"
                    })
                    return;
                }
                var param;
                var matInfo = this.releasevalue.split('|');
                if (matInfo.length == 7) {
                    param = {
                        MainData: {
                            "innerCode": this.releasevalue
                        }
                    }
                } else {
                    param = {
                        MainData: {
                            "barcode": this.releasevalue
                        }
                    }
                }
                this.$u.post('/api/StockOperate/ReleaseAllBox', param).then(resdt => {
                    if (resdt.status) {
                        uni.$showMsg('解盘成功!')
                        this.releasevalue = "";
                        this.matInfo = [];
                        this.matTotals = [];
                        this.value2 = "";
                    } else {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "error"
                        })
                    }
                })
            },
            releaseboxInput() {
                this.$nextTick(() => {
                    if (this.releasevalue.length == 0) {
                        return;
                    }
                    var matInfo = this.releasevalue.split('|');
                    this.matInfo = [];
                    if (matInfo.length == 7) {
                        this.$u.post('/api/StockOperate/GetStockInfoByInnerCode', {
                            MainData: {
                                "innerCode": this.releasevalue
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    } else {
                        this.$u.post('/api/StockOperate/GetStockInfoByBarcode', {
                            MainData: {
                                "barcode": this.releasevalue
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    }
                })
            },
            updateFocus() {
                this.$nextTick(() => {
                    this.innerCode = '';
                    if (!this.focus) {
                        this.focus = true;
                    }
                });
            },
            inbound() {
                if (this.barcode.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描托盘号",
                        type: "error"
                    })
                    return;
                }
                if (this.address.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描地址条码",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        "barcode": this.barcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/RequestInbound', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.barcode = "";
                        this.address = "";
                        this.istrue = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.istrue = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.istrue = true;
                    }
                })
            },
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current == 1) {
                        this.getData();
                    }
                }
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.orderNo,
                        searchValue: this.searchValue
                    },
                }
                this.$u.post('/api/ErpOrder/GetDirectOrderInfo', postData).then((res) => {
                    if (res.status) {
                        this.orderInfo = res.data;
                        if (this.orderInfo.length > 3) {
                            this.loadVisible = true;
                        }
                    }
                })
            },
            innercodeInput() {
                this.$nextTick(() => {
                    if (this.innerCode == "") {
                        return;
                    }
                    var innerCode = this.innerCode;
                    setTimeout(() => {
                        this.innerCode = "";
                    }, 10);
                    // this.focus = false;
                    if (innerCode.split('|').length == 7) {
                        var postData = {
                            MainData: {
                                orderNo: this.orderNo,
                                innerCode: innerCode
                            },
                        }
                        this.$u.post('/api/ErpOrder/UpdateDirectOrder', postData).then((res) => {
                            if (res.status) {
                                this.matCode = "物料编码:" + res.data.matCode;
                                this.matName = "物料名称:" + res.data.matName;
                                this.orderQty = "需求数量:" + res.data.orderQty;
                                this.currentQty = "已扫数量:" + res.data.currentQty;
                                this.scanQty = "累计数量:" + res.data.scanQty;
                                if (res.message) {
                                    this.$refs.uToast.show({
                                        title: res.message,
                                        type: "error"
                                    })
                                    // setTimeout(this.updateFocus,200);
                                    setTimeout(() => {
                                        this.voiceSpeech('../../static/fail.mp3');
                                    }, 100);
                                    return;
                                }
                                // setTimeout(this.updateFocus,200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/success.mp3');
                                }, 100);
                            } else {
                                // this.innerCode = "";
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                                // setTimeout(this.updateFocus,200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/fail.mp3');
                                }, 100);
                            }
                        })
                    } else {
                        // this.innerCode = "";
                        this.$refs.uToast.show({
                            title: "内箱码扫描错误",
                            type: "error"
                        })
                        // setTimeout(this.updateFocus,200);
                        setTimeout(() => {
                            this.voiceSpeech('../../static/fail.mp3');
                        }, 100);
                    }
                    // this.innerCode = "";
                })
            },
            tagInput() {
                this.$nextTick(() => {
                    var tagInfos = this.tag.split('|');
                    if (tagInfos.length == 7) {
                        this.tagmatCode = "物料编码:" + tagInfos[1];
                        this.tagQty = "物料数量:" + tagInfos[5];
                    } else {
                        this.$refs.uToast.show({
                            title: "内箱码扫描错误",
                            type: "error"
                        })
                    }
                    this.numberFocus = true;
                })
            },
            printTag() {
                if (this.tag == "") {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                if (this.number <= 0) {
                    this.$refs.uToast.show({
                        title: "请输入数量",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        tag: this.tag,
                        number: this.number,
                        floor: this.printfloor
                    }
                }
                this.$u.post('/api/StockOperate/PrintTag', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "打印成功",
                            type: "success"
                        })
                        this.tagmatCode = "物料编码:";
                        this.tagQty = "包装数量:";
                        this.tag = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            outbound(code) {
                if (this.floor == "") {
                    this.$refs.uToast.show({
                        title: "请选择楼层",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        matCode: code,
                        orderNo: this.orderNo,
                        system: this.value,
                        floor: this.floor,
                        endType: this.endType
                    }
                }
                this.$u.post('/api/ErpOrder/DirectOrderOutbound', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "成功",
                            type: "success"
                        })
                        this.getData();
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/emptybox/emptyboxmanage.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,222 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="barcodeFocus" v-model="barcode" placeholder="请扫描托盘条码"
                                ref='midInput' @input="inputChangebarcode()" />
                        </uni-forms-item>
                        <uni-forms-item label="地址条码">
                            <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                                :focus="addressFocus" />
                        </uni-forms-item>
                        <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">申请入库</button>
                    </uni-forms>
                </view>
            </view>
            <view v-if="current === 1" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="出库区域">
                            <uni-data-select v-model="outArea" :localdata="outAreas"></uni-data-select>
                        </uni-forms-item>
                        <uni-forms-item label="所在楼层">
                            <uni-data-select v-model="floor" :localdata="floorrange"></uni-data-select>
                        </uni-forms-item>
                        <uni-forms-item label="出库数量">
                            <uni-easyinput type="text" v-model="num" placeholder="请输入出库数量" ref='midInput'
                                :focus="numFocus" />
                        </uni-forms-item>
                        <button @click="outbound" type="primary" size="default" style="margin-top: 2%;">出库</button>
                    </uni-forms>
                </view>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    import {
        config
    } from '../../common/config';
    export default {
        data() {
            return {
                items: ['空箱入库', '空箱出库'],
                current: 0,
                barcodeFocus: true, //空箱入库托盘号光标
                addressFocus: false, //空箱入库地址光标
                barcode: '', //空箱托盘号
                address: "", //空箱入库地址
                floorFocus: true, //空箱出库楼层光标
                numFocus: false, //空箱出库数量光标
                floor: '', //楼层
                num: "", //空箱出库数量
                floor: "",
                floorrange: [],
                outArea:"",
                outAreas:[
                    {
                        value: "1",
                        text: "入库区"
                    },{
                        value: "2",
                        text: "出库区"
                    },{
                        value: "6",
                        text: "入库输送线"
                    }
                ]
            }
        },
        mounted() {
            this.floorrange = config.outboundFloorRange;
            if (config.outboundFloor) {
                this.floor = config.outboundFloor;
            }
        },
        onLoad(res) {
            this.barcodeFocus = true;
            this.addressFocus = false;
            this.floorFocus = true;
            this.numFocus = false;
        },
        methods: {
            onClickItem(e) {
                this.addressFocus = false;
                this.floorFocus = true;
                this.numFocus = false;
                this.barcodeFocus = true;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                }
            },
            inbound() {
                if (this.barcode == '') {
                    this.$refs.uToast.show({
                        title: "托盘号不能为空",
                        type: "error"
                    });
                    return;
                }
                if (this.startPoint == '') {
                    this.$refs.uToast.show({
                        title: "地址不能为空",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "barcode": this.barcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/EmptyBoxInbound', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "成功",
                            type: "success"
                        });
                        this.barcode = "";
                        this.address = "";
                        this.barcodeFocus = true;
                        this.addressFocus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.barcodeFocus = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.addressFocus = true;
                    }
                })
            },
            outbound() {
                if (this.floor == '') {
                    this.$refs.uToast.show({
                        title: "楼层不能为空",
                        type: "error"
                    });
                    return;
                }
                if (this.num == '') {
                    this.$refs.uToast.show({
                        title: "数量不能为空",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "floor": this.floor,
                        "num": this.num,
                        "area": this.outArea
                    }
                }
                this.$u.post('/api/Outbound/EmptyBoxOutbound', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "成功",
                            type: "success"
                        });
                        this.barcode = "";
                        this.address = "";
                        this.barcodeFocus = true;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/halfproduct/halfproductboxing.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,289 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item :label="label"></uni-forms-item>
                        <uni-forms-item label="单据类型:生产领料单"></uni-forms-item>
                        <uni-forms-item label="料车编码">
                            <uni-easyinput type="text" :focus="!istrue" v-model="barcode" placeholder="请扫描料车编码"
                                ref='midInput' @input="inputChangebarcode()" />
                        </uni-forms-item>
                        <uni-forms-item label="物料编号">
                            <uni-combox :candidates="candidates" placeholder="请选择物料编号" v-model="matcode"></uni-combox>
                        </uni-forms-item>
                        <uni-forms-item label="物料数量">
                            <uni-easyinput type="number" v-model="quantity" placeholder="请输入数量" ref='midInput'
                                :focus="quantityFocus" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="addItem" type="primary" style="margin-left: 50px;" size="mini">添加</button>
                            <button @click="submit" type="primary" style="margin-left: 100px;" size="mini">组盘</button>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list class="footer">
                        <uni-list-item direction="column" v-for="item in matInfos" :key="item.index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matcode}}</view>
                                        <view class="uni-title-sub uni-ellipsis-2">物料数量:{{item.quantity}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 1" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="货位编号">
                            <uni-easyinput type="text" :focus="!barcodefocus" v-model="locationNo" placeholder="请输入货位编号"
                                ref='midInput' @input="locationNoinputChange" />
                        </uni-forms-item>
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="barcodefocus" v-model="barcode2" placeholder="请扫描托盘条码"
                                ref='midInput' />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="bindStock" type="primary" size="default"
                                style="margin-top: 2%;">手动绑定</button>
                        </uni-forms-item>
                    </uni-forms>
                </view>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    // const SixUniTts = uni.requireNativePlugin("SmallSix-SixUniTts")
    export default {
        data() {
            return {
                items: ['半成品组盘', '库存绑定'],
                current: 0,
                istrue: false,
                barcode: '',
                matInfos: [],
                barcodefocus: true,
                quantity: 0,
                quantityFocus: false,
                matcode: "",
                index: 0,
                locationNo: "",
                barcode2: '',
                barcodefocus: false,
                label: "",
                orderNo: "",
                candidates: []
            }
        },
        onLoad(res) {
            this.barcodefocus = false;
            this.istrue = false;
            this.orderNo = res.orderNo;
            this.label = "单据编号:" + this.orderNo;
            this.getData();
        },
        methods: {
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.orderNo
                    },
                }
                this.$u.post('/api/ErpOrder/GetReceiveOrderInfoByCode', postData).then((res) => {
                    if (res.status) {
                        // this.orderInfo = res.data.receiving_Dtls;
                        this.candidates = res.data.matCodes;
                        // if (this.orderInfo.length > 3) {
                        //     this.loadVisible = true;
                        // }
                    }
                })
            },
            onClickItem(e) {
                this.barcodeFo = true;
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                }
            },
            bindStock() {
                if (this.locationNo == "") {
                    this.$refs.uToast.show({
                        title: "货位号不能为空",
                        type: "error"
                    });
                    return;
                }
                if (this.barcode2 == "") {
                    this.$refs.uToast.show({
                        title: "托盘号不能为空",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "locationNo": this.locationNo,
                        "barcode": this.barcode2
                    },
                }
                this.$u.post('/api/StockOperate/BindStock', postData).then((res) => {
                    if (res.status) {
                        this.items = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "success"
                        });
                        this.locationNo = "";
                        this.barcode2 = "";
                        this.barcodefocus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            locationNoinputChange() {
                this.barcodefocus = false;
                this.$nextTick(function(x) {
                    if (this.locationNo != '') {
                        this.barcodefocus = true;
                    }
                })
            },
            submit() {
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描料车编码",
                        type: "error"
                    })
                    return;
                }
                if (this.matInfos.length == 0) {
                    this.$refs.uToast.show({
                        title: "请录入物料信息",
                        type: "error"
                    })
                    return;
                }
                var params = {
                    MainData: {
                        "barcode": this.barcode,
                        "orderNo": this.orderNo
                    },
                    DetailData: this.matInfos
                };
                this.$u.post('/api/StockOperate/BCPBoxing', params).then(resdt => {
                    if (resdt.status) {
                        uni.$showMsg('组盘成功!')
                        this.matInfos = [];
                        this.barcode = "";
                        this.matcode = "";
                        this.quantity = 0;
                        this.quantityFocus = true;
                        this.istrue = false;
                        this.index = 0;
                    } else {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            addItem() {
                this.$nextTick(() => {
                    if (this.matcode != "" && this.quantity > 0) {
                        this.matInfos.push({
                            matcode: this.matcode,
                            quantity: parseInt(this.quantity),
                            index: this.index++
                        });
                        this.$refs.uToast.show({
                            title: "添加成功",
                            type: "success"
                        })
                        this.matcode = "";
                        this.quantity = 0;
                        this.quantityFocus = false;
                        this.istrue = true;
                    } else {
                        this.$refs.uToast.show({
                            title: "数据输入错误",
                            type: "error"
                        })
                    }
                })
            },
            inputChange(e) {
                this.$nextTick(() => {
                    this.istrue = false;
                    this.quantityFocus = true;
                })
            },
            updateFocus() {
                this.materialsns = '';
                if (!this.istrue) {
                    this.istrue = true;
                }
            },
            inputChangebarcode() {
                this.istrue = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.istrue = true;
                    }
                })
            },
            deleteList(res) {
                this.matInfos.map((item, index) => {
                    if (item.matcode == res) {
                        this.matInfos.splice(index, 1);
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/halfproduct/hpreceiveorder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,168 @@
<template>
    <view>
        <u-sticky>
            <view style="background-color: #ffffff;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
            </view>
        </u-sticky>
        <uni-list :border="true">
            <uni-list-item direction="column" clickable @click="groupClick(item.receive_code)" link
                :to="page+item.receive_code" v-for="item in allReceivingOrders" :key="item.receive_code">
                <template v-slot:body>
                    <uni-group margin-top="20">
                        <view> å·¥å•号:{{item.receive_code}} </view>
                        <view> äº§å“æ–™å·:{{item.receive_productNo}} </view>
                        <view> äº§çº¿:{{item.receive_line}} </view>
                        <view> æ•°é‡:{{item.receive_quantity}} </view>
                    </uni-group>
                </template>
            </uni-list-item>
        </uni-list>
        <uni-load-more :status="status" v-if="loadVisible"></uni-load-more>
        <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                page: "/pages/halfproduct/halfproductboxing?orderNo=",
                loadVisible: false,
                searchValue: "",
                status: "more",
                allReceivingOrders: [],
                pageNo: 1,
                scrollTop: 0
            }
        },
        onLoad(res) {
            this.getData();
        },
        onPageScroll(e) {
            this.scrollTop = e.scrollTop;
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        methods: {
            search(res) {
                this.getData();
            },
            groupClick() {
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.searchValue,
                        pageNo: this.pageNo
                    },
                }
                this.$u.post('/api/ErpOrder/GetReceiveOrderCodes', postData).then((res) => {
                    if (res.status) {
                        if (this.searchValue == '') {
                            this.allReceivingOrders = this.allReceivingOrders.concat(res.data);
                            // this.allReceivingOrders = res.data;
                            if (this.allReceivingOrders.length > 3) {
                                this.loadVisible = true;
                            } else {
                                this.loadVisible = false;
                            }
                        } else {
                            this.allReceivingOrders = res.data;
                            if (this.allReceivingOrders.length > 3) {
                                this.loadVisible = true;
                            } else {
                                this.loadVisible = false;
                            }
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/home/home.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,282 @@
<template>
    <view class="page">
        <view class="top">
            <view class="background"></view>
        </view>
        <view class="user-card">
            <view class="card">
                <view class="top">
                    <view class="userImage">
                        <!-- <open-data type="userAvatarUrl"></open-data> -->
                        <u-avatar :src="src" size="146"></u-avatar>
                    </view>
                </view>
                <view class="bottom" @tap.native="Login">
                    <view class="left">
                        <view class="user-text">
                            <!-- <open-data type="userNickName"></open-data> -->
                            <text style="text-align: center;">{{userNickName}}</text>
                        </view>
                        <!-- <view class="user-phone"> 171****4133 </view> -->
                    </view>
                    <view class="right flex-center">
                        <u-icon class="icon" name="arrow-right"></u-icon>
                    </view>
                </view>
                <!-- <view class="settings" @click="settings">
                    <view class="left">
                        <view class="settings-text">
                            <open-data type="userNickName"></open-data>
                            <text style="text-align: center;">设置</text>
                        </view>
                        <view class="user-phone"> 171****4133 </view>
                    </view>
                    <view class="right flex-center">
                        <u-icon class="icon" name="arrow-right"></u-icon>
                    </view>
                </view> -->
            </view>
        </view>
        <view class="list-card">
        </view>
        <view class="quit flex-center">
            <!-- <view class="btn flex-center" @click="LastLogin">
                æ›´æ–°ç¨‹åº
            </view> -->
            <view class="btn flex-center" @click="LastLogin">
                é€€å‡ºç™»å½•
            </view>
        </view>
    </view>
</template>
<style lang="scss" scoped>
    .top {
        height: 250rpx;
        position: relative;
        .background {
            background-color: #5199ff;
            border-bottom-left-radius: 22px;
            border-bottom-right-radius: 22px;
            position: absolute;
            height: 180rpx;
            width: 100%;
        }
    }
    .icon {
        color: #96a1ae;
        font-size: 20rpx;
    }
    .user-card {
        height: 170rpx;
        padding: 0 15px;
        .card {
            position: relative;
            bottom: 62px;
            height: 250rpx;
            background-color: white;
            border-radius: 5px;
            .top {
                height: 30%;
                position: relative;
                .userImage {
                    position: absolute;
                    bottom: 24%;
                    left: 10%;
                    width: 150rpx;
                    height: 150rpx;
                    overflow: hidden;
                    border-radius: 50%;
                    border: 2px solid white;
                }
            }
            .bottom {
                display: flex;
                height: 70%;
                .left {
                    width: 80%;
                    height: 100%;
                    position: relative;
                    .user-text {
                        width: 100%;
                        font-size: 1.6em;
                        padding-left: 80rpx;
                        height: 50%;
                    }
                    .user-phone {
                        width: 100%;
                        font-size: 1.3em;
                        padding-left: 80rpx;
                        height: 50%;
                    }
                }
                .right {
                    width: 20%;
                    height: 50%;
                }
                .right2 {
                    width: 10%;
                    height: 10%;
                }
            }
            .settings {
                display: flex;
                height: 70%;
                .left {
                    width: 80%;
                    height: 50%;
                    position: relative;
                    margin-left: 5%;
                    .settings-text {
                        width: 100%;
                        font-size: 1.2em;
                        padding-left: 80rpx;
                        height: 50%;
                        align-items: center;
                        padding-top: 10px;
                    }
                }
                .right {
                    width: 20%;
                    height: 50%;
                }
            }
        }
    }
    .list-card {
        padding: 0 15px;
        .card {
            border-radius: 5px;
            position: relative;
            background-color: white;
            border-radius: 5px;
            padding: 5px 30px;
            .item {
                display: flex;
                height: 120rpx;
                .left {
                    width: 15%;
                    image {
                        width: 70rpx;
                        height: 70rpx;
                    }
                }
                .center {
                    width: 65%;
                    display: flex;
                    justify-content: start;
                    align-items: center;
                    font-size: 1.1em;
                }
                .right {
                    width: 20%;
                    justify-content: flex-end;
                }
            }
        }
    }
    .item-bottom-solid {
        border-bottom: 1px solid #d4d6da;
    }
    .quit {
        height: 100rpx;
        margin-top: 50px;
        .btn {
            background-color: #4f99ff;
            border-radius: 30px;
            width: 80%;
            color: white;
            font-size: 1.2em;
            height: 100%;
        }
    }
    .flex-center {
        display: flex;
        justify-content: center;
        align-items: center;
    }
</style>
<script>
    //import {  } from "@/common/api/{$}.js";
    import httpInterceptor from '@/common/http.interceptor.js'
    export default {
        data() {
            return {
                src: "",
                userNickName: '请登录',
            };
        },
        //监听页面初始化,其参数同 onLoad å‚数,为上个页面传递的数据,参数类型为 Object(用于页面传参),触发时机早于 onLoad
        onInit() {},
        //监听页面加载,其参数为上个页面传递的数据,参数类型为 Object(用于页面传参)
        onLoad() {
            let isLogin = this.hasLogin();
            if (isLogin) {
                let haslogin = uni.getStorageSync('jo_user')
                this.userNickName = haslogin.userName;
                this.src = httpInterceptor.baseUrl + "/" + haslogin.img;
            }
        },
        //监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发
        onReady() {},
        //监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
        beforeDestroy() {},
        //页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。
        onReachBottom() {},
        onShareAppMessage(res) {},
        created() {},
        methods: {
            hasLogin() {
                let haslogin = uni.getStorageSync('jo_user')
                if (haslogin == null || haslogin == "") {
                    return false
                } else {
                    return true
                }
            },
            LastLogin() {
                //uni.clearStorage();
                uni.removeStorageSync('jo_id_token');
                uni.removeStorageSync('jo_user');
                uni.removeStorageSync('jo_userImg');
                this.$u.route('/pages/login/login');
            },
            Login() {
                this.$u.route('/pages/login/login');
            },
            settings(){
                this.$u.route('/pages/index/settings');
            }
        },
    };
</script>
´úÂë¹ÜÀí/»´°²PDA/pages/index/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,156 @@
<template>
    <!-- <u-card :title="title" > -->
    <view class="" slot="body">
        <!-- <view v-for="(item,index) in tree" :key="item.id"> -->
            <u-grid :col="3">
                <u-grid-item @tap="clickCoupon(item.url)" v-for="(item) in tree" :key="item.id">
                    <u-icon name="coupon" :size="50"></u-icon>
                    <view class="grid-text">{{item.name}}</view>
                </u-grid-item>
            </u-grid>
        <!-- </view> -->
        <u-toast ref="uToast" />
    </view>
    <!-- </u-card> -->
</template>
<script>
    import { config } from '../../common/config.js'
    export default {
        data() {
            return {
                // title: '操作功能'
                datas: [],
                tree: [],
                version:""
            }
        },
        onShow() {
            // uni.getSystemInfo({
            //     success: (res) => {
            //         this.version = res.appWgtVersion;
            //         // console.log(res);
            //         //检测当前平台,如果是安卓则启动安卓更新
            //         if (res.platform == "android") {
            //             this.AndroidCheckUpdate();
            //         }
            //     }
            // });
        },
        onLoad() {
            this.getCurrentTree();
        },
        mounted() {
        },
        methods: {
            AndroidCheckUpdate: function() {
                var _this = this;
                uni.request({
                    url: 'http://10.1.211.101:9004/api/PDA/GetPDAVersion?version=' + this.version,
                    method: 'GET',
                    data: {},
                    success: res => {
                        if (res.data.data) {
                            uni.showToast({
                                title: '有新的版本发布,检测到您目前为Wifi连接,程序已启动自动更新。新版本下载完成后将自动弹出安装程序。',
                                mask: false,
                                duration: 5000,
                                icon: "none"
                            });
                            var dtask = plus.downloader.createDownload("http://10.1.211.101:9004/api/PDA/DownLoadApp", {},
                                function(d, status) {
                                    // ä¸‹è½½å®Œæˆ
                                    if (status == 200) {
                                        plus.runtime.install(plus.io.convertLocalFileSystemURL(d
                                            .filename), {}, {}, function(error) {
                                            uni.showToast({
                                                title: '安装失败',
                                                mask: false,
                                                duration: 1500
                                            });
                                        })
                                    } else {
                                        uni.showToast({
                                            title: '更新失败',
                                            mask: false,
                                            duration: 1500
                                        });
                                    }
                                });
                            dtask.start();
                        }
                    },
                    fail: () => {
                        console.log('请求失败')
                    },
                    complete: () => {}
                });
            },
            getCurrentTree() {
                this.$u.post('/api/Sys_Menu/getTreeMenu', {}).then(result => {
                        this.tree = result;
                })
            },
            getTree(id, data, isRootId) {
                this.datas.forEach((x) => {
                    if (x.pid == id) {
                        x.lv = data.lv + 1;
                        if (isRootId) {
                            x.rootId = id;
                        }
                        if (!data.children) data.children = [];
                        data.children.push(x);
                        this.getTree(x.id, x, isRootId);
                    }
                });
            },
            getPermission(text) {
                // return true;
                return this.datas.find(x => x.text == text);
            },
            clickCoupon(url) {
                // console.log("clickCoupon")
                if (this.hasLogin()) {
                    this.$u.route(url)
                } else {
                    this.$t.message.loading('登录失效请重新登录')
                    uni.reLaunch({
                        url: '/pages/login/login'
                    });
                }
            },
            lock() {
                console.log("lock")
                if (this.hasLogin()) {
                    this.$u.route("pages/feeding/feeding")
                } else {
                    this.$t.message.loading('登录失效请重新登录')
                    uni.reLaunch({
                        url: '/pages/login/login'
                    });
                }
            },
            //判断是否登录
            hasLogin() {
                let haslogin = uni.getStorageSync('jo_user')
                if (haslogin == null || haslogin == "") {
                    return false
                } else {
                    return true
                }
            }
        }
    }
</script>
<style lang="scss" scoped>
    .grid-text {
        font-size: 28rpx;
        margin-top: 4rpx;
        color: $u-type-info;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/index/settings.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,181 @@
<template>
    <view style="padding: 5%;">
        <!-- <uni-forms ref="formData" :modelValue="formData" label-width="120"> -->
        <uni-forms label-width="120">
            <uni-forms-item label="打印楼层设置">
                <uni-data-select v-model="printFloor" :localdata="printFloorRange"></uni-data-select>
            </uni-forms-item>
            <uni-forms-item label="出库楼层设置">
                <uni-data-select v-model="outboundFloor" :localdata="outboundFloorRange"></uni-data-select>
            </uni-forms-item>
            <uni-forms-item label="组织设置">
                <uni-data-select v-model="organizeValue" :localdata="organizeRange"></uni-data-select>
            </uni-forms-item>
            <uni-forms-item label="区域">
                <uni-data-select v-model="warehouseArea" :localdata="warehouseRange"></uni-data-select>
            </uni-forms-item>
            <uni-forms-item label="出库区域">
                <uni-data-select v-model="outboundArea" :localdata="outboundAreaRange"></uni-data-select>
            </uni-forms-item>
        </uni-forms>
        <button @click="submit" type="primary" size="default" style="margin-top: 2%;">保存</button>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    import {
        config
    } from '../../common/config.js'
    export default {
        data() {
            return {
                printFloor: "",
                outboundFloor: "",
                organizeValue:"",
                warehouseArea:"",
                outboundArea:"",
                printFloorRange:[],
                outboundFloorRange:[],
                organizeRange:[]
            }
        },
        mounted() {
            var print = uni.getStorageSync('printFloor');
            if (print) {
                this.printFloor = print;
                config.printFloor = print;
            }
            var outbound = uni.getStorageSync('outboundFloor');
            if (outbound) {
                this.outboundFloor = outbound;
                config.outboundFloor = outbound;
            }
            var organize =  uni.getStorageSync('organizeValue');
            if (organize) {
                this.organizeValue = organize;
                config.organizeValue = organize;
            }
            var outbound2 =  uni.getStorageSync('outboundArea');
            if (outbound2) {
                this.outboundArea = outbound2;
                config.outboundArea = outbound2;
            }
            var warehouse =  uni.getStorageSync('warehouseArea');
            if (warehouse) {
                this.warehouseArea = warehouse;
                config.warehouseArea = warehouse;
            }
        },
        onLoad(res) {
            this.printFloorRange = config.printFloorRange;
            this.outboundFloorRange = config.printFloorRange;
            this.organizeRange = config.organizeRange;
            this.outboundAreaRange = config.outboundAreaRange;
            this.warehouseRange = config.warehouseRange;
        },
        methods: {
            submit() {
                uni.setStorage({
                    key: 'printFloor',
                    data: this.printFloor,
                });
                config.printFloor = this.printFloor;
                uni.setStorage({
                    key: 'outboundFloor',
                    data: this.outboundFloor,
                });
                config.outboundFloor = this.outboundFloor;
                uni.setStorage({
                    key: 'organizeValue',
                    data: this.organizeValue,
                });
                config.organizeValue = this.organizeValue;
                uni.setStorage({
                    key: 'warehouseArea',
                    data: this.warehouseArea,
                });
                config.warehouseArea = this.warehouseArea;
                uni.setStorage({
                    key: 'outboundArea',
                    data: this.outboundArea,
                });
                config.outboundArea = this.outboundArea;
                this.$refs.uToast.show({
                    title: "保存成功",
                    type: "success"
                })
            },
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/login/login.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,531 @@
<template>
    <view class="template-login">
        <!-- é¡¶éƒ¨è‡ªå®šä¹‰å¯¼èˆª -->
        <!-- <tn-nav-bar fixed alpha customBack>
      <view slot="back" class='tn-custom-nav-bar__back'
        @click="goBack">
        <text class='icon tn-icon-left'></text>
        <text class='icon tn-icon-home-capsule-fill'></text>
      </view>
    </tn-nav-bar> -->
        <view class="login">
            <!-- é¡¶éƒ¨èƒŒæ™¯å›¾ç‰‡-->
            <view class="login__bg login__bg--top">
                <image class="bg" src="/static/login_top2.jpg" mode="widthFix"></image>
            </view>
            <view class="login__bg login__bg--top">
                <image class="rocket rocket-sussuspension" src="/static/login_top3.png" mode="widthFix"></image>
            </view>
            <view class="login__wrapper">
                <!-- è¾“入框内容-->
                <view class="login__info tn-flex tn-flex-direction-column tn-flex-col-center tn-flex-row-center">
                    <!-- ç™»å½• -->
                    <block v-if="currentModeIndex === 0">
                        <view
                            class="login__info__item__input tn-flex tn-flex-direction-row tn-flex-nowrap tn-flex-col-center tn-flex-row-left">
                            <view class="login__info__item__input__left-icon">
                                <view class="tn-icon-my"></view>
                            </view>
                            <view class="login__info__item__input__content">
                                <input maxlength="45" placeholder-class="input-placeholder" v-model="user"
                                    placeholder="请输入登录用户名称" />
                            </view>
                        </view>
                        <view
                            class="login__info__item__input tn-flex tn-flex-direction-row tn-flex-nowrap tn-flex-col-center tn-flex-row-left">
                            <view class="login__info__item__input__left-icon">
                                <view class="tn-icon-lock"></view>
                            </view>
                            <view class="login__info__item__input__content">
                                <input :password="!showPassword" placeholder-class="input-placeholder" v-model="pass"
                                    placeholder="请输入登录密码" />
                            </view>
                            <view class="login__info__item__input__right-icon" @click="showPassword = !showPassword">
                                <view :class="[showPassword ? 'tn-icon-eye' : 'tn-icon-eye-hide']"></view>
                            </view>
                        </view>
                        <view
                            class="login__info__item__input tn-flex tn-flex-direction-row tn-flex-nowrap tn-flex-col-center tn-flex-row-left">
                            <view class="login__info__item__input__left-icon">
                                <view class="tn-icon-my"></view>
                            </view>
                            <view class="login__info__item__input__content">
                                <input maxlength="45" placeholder-class="input-placeholder" v-model="code"
                                    placeholder="请输入验证码" />
                            </view>
                            <view class="login__info__item__input__right-icon u-border" style="width: 30%;"
                                @click="getVierificationCode">
                                <img v-show="codeImgSrc != ''" :src="codeImgSrc" />
                            </view>
                        </view>
                    </block>
                    <!-- æ³¨å†Œ -->
                    <view class="login__info__item__input__content" style="margin-top: 20px;">
                        <uni-data-checkbox multiple v-model="checkbox" :localdata="hobby"></uni-data-checkbox>
                    </view>
                    <view class="login__info__item__button tn-cool-bg-color-7--reverse"
                        @click="currentModeIndex === 0 ? login() : registra()" hover-class="tn-hover"
                        :hover-stay-time="150">{{ currentModeIndex === 0 ? '登录' : '注册'}}</view>
                    <!-- <view v-if="currentModeIndex === 0" class="login__info__item__tips">忘记密码?</view> -->
                </view>
            </view>
            <!-- <tn-tips ref="tips" position="top"></tn-tips> -->
            <!-- åº•部背景图片-->
            <view class="login__bg login__bg--bottom">
                <image src="/static/login_bottom_bg.jpg" mode="widthFix"></image>
            </view>
        </view>
    </view>
</template>
<script>
    var app = getApp();
    export default {
        name: 'login-demo-1',
        // mixins: [template_page_mixin],*
        data() {
            return {
                // å½“前选中的模式
                currentModeIndex: 0,
                // æ¨¡å¼é€‰ä¸­æ»‘块
                modeSliderStyle: {
                    left: 0
                },
                // æ˜¯å¦æ˜¾ç¤ºå¯†ç 
                showPassword: false,
                // å€’计时提示文字
                tips: '获取验证码',
                email: '',
                codeImgSrc: '',
                pass: '',
                code: '1234',
                user: '',
                isDetail: false,
                hobby: [{
                        text: '记住账号',
                        value: 1
                    },
                    {
                        text: '记住密码',
                        value: 2
                    }
                ],
                checkbox: []
            }
        },
        watch: {
            currentModeIndex(value) {
                const sliderWidth = uni.upx2px(476 / 2)
                this.modeSliderStyle.left = `${sliderWidth * value}px`
            }
        },
        onLoad(options) {
            this.getVierificationCode()
            if (options.id) {
                this.isDetail = true
            }
        },
        mounted() {
            var remAcc = uni.getStorageSync('remAcc');
            if (remAcc) {
                this.checkbox.push(1);
            }
            var remPwd = uni.getStorageSync('remPwd');
            if (remPwd) {
                this.checkbox.push(2);
            }
            var acc = uni.getStorageSync('acc');
            if (acc) {
                this.user = acc;;
            }
            var pwd = uni.getStorageSync('pwd');
            if (pwd) {
                this.pass = pwd;
            }
        },
        methods: {
            ///获取验证码
            getVierificationCode() {
                this.$u.get('/api/User/getVierificationCode', {}).then(res => {
                    if (res.img != null) {
                        this.codeImgSrc = "data:image/png;base64," + res.img;
                        this.email = res.uuid;
                    } else {
                        this.$refs.uToast.show({
                            title: '获取验证码失败请重新获取',
                            type: 'error',
                        })
                    }
                })
                // uni.request({
                //     url:"http://192.168.0.101:8098/api/User/getVierificationCode",
                //     success: (res) => {
                //     }
                // })
            },
            login() {
                if (this.pass == '') {
                    this.$t.message.toast('请输入密码')
                    return;
                } else if (this.user == '') {
                    this.$t.message.toast('请输入用户名')
                    return;
                } else if (this.pass.length < 6) {
                    this.$t.message.toast('密码应大于6位')
                    return;
                } else {
                    var userAcc = this.user;
                    var userPwd = this.pass;
                    var checkValues = this.checkbox;
                    var remAcc = this.checkbox.find(x => x == 1);
                    if (remAcc) {
                        uni.setStorage({
                            key: "remAcc",
                            data: "1",
                        })
                    } else {
                        if (uni.getStorageSync('remAcc')) {
                            uni.removeStorageSync('remAcc');
                        }
                    }
                    var remPwd = this.checkbox.find(x => x == 2);
                    if (remPwd) {
                        uni.setStorage({
                            key: "remPwd",
                            data: "2",
                        })
                    } else {
                        if (uni.getStorageSync('remPwd')) {
                            uni.removeStorageSync('remPwd');
                        }
                    }
                    this.$t.message.loading('正在登录')
                    let userInfo = this.userInfo;
                    let userifno = {
                        UUID: this.email,
                        passWord: this.pass,
                        userName: this.user,
                        verificationCode: this.code
                    }
                    this.$u.post('/api/User/login', {
                        UUID: this.email,
                        passWord: this.pass,
                        userName: this.user,
                        verificationCode: this.code
                    }).then(res => {
                        // this.$u.toast(res.message);
                        this.$t.message.toast(res.message)
                        this.$t.message.closeLoading()
                        uni.setStorage({
                            key: 'jo_id_token',
                            data: res.data.token,
                        });
                        uni.setStorage({
                            key: 'jo_user',
                            data: res.data,
                        });
                        uni.setStorage({
                            key: 'jo_userImg',
                            data: res.data.img,
                        });
                        var acc = checkValues.find(x => x == 1);
                        if (acc) {
                            uni.setStorage({
                                key: 'acc',
                                data: userAcc,
                            });
                        } else {
                            if (uni.getStorage({
                                    key: 'acc'
                                })) {
                                uni.removeStorage({
                                    key: 'acc'
                                });
                            }
                        }
                        var pwd = checkValues.find(x => x == 2);
                        if (pwd) {
                            uni.setStorage({
                                key: 'pwd',
                                data: userPwd,
                            });
                        } else {
                            if (uni.getStorage({
                                    key: 'pwd'
                                })) {
                                uni.removeStorage({
                                    key: 'pwd'
                                });
                            }
                        }
                        setTimeout(() => {
                            this.$u.route({
                                type: 'reLaunch',
                                url: 'pages/index/index'
                            })
                            // this.$Router.replace({name:"tabbar"})
                        }, 200)
                    }).catch(res=>{
                        this.getVierificationCode();
                    });
                }
            },
            codeInput: function(e) {
                this.code = e.detail.value;
            },
            passInput: function(e) {
                this.pass = e.detail.value;
            },
            userInput: function(e) {
                this.user = e.detail.value;
            },
        }
    }
</script>
<style lang="scss" scoped>
    // @import '@/static/css/templatePage/custom_nav_bar.scss';
    /* æ‚¬æµ® */
    .rocket-sussuspension {
        animation: suspension 3s ease-in-out infinite;
    }
    @keyframes suspension {
        0%,
        100% {
            transform: translate(0, 0);
        }
        50% {
            transform: translate(-0.8rem, 1rem);
        }
    }
    .login {
        position: relative;
        height: 100%;
        z-index: 1;
        /* èƒŒæ™¯å›¾ç‰‡ start */
        &__bg {
            z-index: -1;
            position: fixed;
            &--top {
                top: 0;
                left: 0;
                right: 0;
                width: 100%;
                .bg {
                    width: 750rpx;
                    will-change: transform;
                }
                .rocket {
                    margin: 50rpx 28%;
                    width: 400rpx;
                    will-change: transform;
                }
            }
            &--bottom {
                bottom: -10rpx;
                left: 0;
                right: 0;
                width: 100%;
                // height: 144px;
                margin-bottom: env(safe-area-inset-bottom);
                image {
                    width: 750rpx;
                    will-change: transform;
                }
            }
        }
        /* èƒŒæ™¯å›¾ç‰‡ end */
        /* å†…容 start */
        &__wrapper {
            margin-top: 250rpx;
            width: 100%;
        }
        /* åˆ‡æ¢ start */
        &__mode {
            position: relative;
            margin: 0 auto;
            width: 476rpx;
            height: 77rpx;
            background-color: #FFFFFF;
            box-shadow: 0rpx 10rpx 50rpx 0rpx rgba(0, 3, 72, 0.1);
            border-radius: 39rpx;
            &__item {
                height: 77rpx;
                width: 100%;
                line-height: 77rpx;
                text-align: center;
                font-size: 31rpx;
                color: #908f8f;
                letter-spacing: 1em;
                text-indent: 1em;
                z-index: 2;
                transition: all 0.4s;
                &--active {
                    font-weight: bold;
                    color: #FFFFFF;
                }
            }
            &__slider {
                position: absolute;
                height: inherit;
                width: calc(476rpx);
                border-radius: inherit;
                box-shadow: 0rpx 18rpx 72rpx 18rpx rgba(0, 195, 255, 0.1);
                z-index: 1;
                transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
            }
        }
        /* åˆ‡æ¢ end */
        /* ç™»å½•注册信息 start */
        &__info {
            margin: 0 30rpx;
            margin-top: 105rpx;
            padding: 30rpx 51rpx;
            padding-bottom: 0;
            border-radius: 20rpx;
            background-color: #ffff;
            box-shadow: 0rpx 10rpx 50rpx 0rpx rgba(0, 3, 72, 0.1);
            &__item {
                &__input {
                    margin-top: 59rpx;
                    width: 100%;
                    height: 77rpx;
                    border: 1rpx solid #E6E6E6;
                    border-radius: 39rpx;
                    &__left-icon {
                        width: 10%;
                        font-size: 44rpx;
                        margin-left: 20rpx;
                        color: #AAAAAA;
                    }
                    &__content {
                        width: 80%;
                        padding-left: 10rpx;
                        &--verify-code {
                            width: 56%;
                        }
                        input {
                            font-size: 24rpx;
                            // letter-spacing: 0.1em;
                        }
                    }
                    &__right-icon {
                        width: 10%;
                        font-size: 44rpx;
                        margin-right: 20rpx;
                        color: #AAAAAA;
                    }
                    &__right-verify-code {
                        width: 34%;
                        margin-right: 20rpx;
                    }
                }
                &__button {
                    margin-top: 75rpx;
                    margin-bottom: 39rpx;
                    width: 100%;
                    height: 77rpx;
                    text-align: center;
                    font-size: 31rpx;
                    font-weight: bold;
                    line-height: 77rpx;
                    letter-spacing: 1em;
                    text-indent: 1em;
                    border-radius: 39rpx;
                    box-shadow: 1rpx 10rpx 24rpx 0rpx rgba(60, 129, 254, 0.35);
                }
                &__tips {
                    margin: 30rpx 0;
                    color: #AAAAAA;
                }
            }
        }
        /* ç™»å½•注册信息 end */
        /* ç™»å½•方式切换 start */
        &__way {
            margin: 0 auto;
            margin-top: 110rpx;
            &__item {
                &--icon {
                    width: 77rpx;
                    height: 77rpx;
                    font-size: 50rpx;
                    border-radius: 100rpx;
                    margin-bottom: 18rpx;
                    position: relative;
                    z-index: 1;
                    &::after {
                        content: " ";
                        position: absolute;
                        z-index: -1;
                        width: 100%;
                        height: 100%;
                        left: 0;
                        bottom: 0;
                        border-radius: inherit;
                        opacity: 1;
                        transform: scale(1, 1);
                        background-size: 100% 100%;
                        background-image: url(https://tnuiimage.tnkjapp.com/cool_bg_image/icon_bg5.png);
                    }
                }
            }
        }
        /* ç™»å½•方式切换 end */
        /* å†…容 end */
    }
    /deep/.input-placeholder {
        font-size: 24rpx;
        color: #E6E6E6;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/other/other.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,192 @@
<template>
    <view>
        <uni-forms style="margin-top: 30px;margin-left: 5%;width: 90%;" label-width="120">
            <uni-forms-item label="楼层">
                <uni-data-select v-model="floor" :localdata="floorrange"></uni-data-select>
            </uni-forms-item>
            <uni-forms-item label="内箱标签">
                <uni-easyinput type="text" :focus="tagFocus" v-model="tag" placeholder="请扫描内箱标签" ref='midInput'
                    @input="tagInput" />
            </uni-forms-item>
            <uni-forms-item :label="tagmatCode"></uni-forms-item>
            <!-- <uni-forms-item :label="tagmatName"></uni-forms-item> -->
            <uni-forms-item :label="tagQty"></uni-forms-item>
            <uni-forms-item label="拆分数量">
                <uni-easyinput type="number" v-model="number" placeholder="请输入拆分数量" ref='midInput'
                    :focus="numberFocus" />
            </uni-forms-item>
            <uni-forms-item>
                <button @click="printTag" type="primary" size="default" style="margin-top: 2%;">打印标签</button>
            </uni-forms-item>
        </uni-forms>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                tagFocus: true,
                numberFocus: false,
                tag: "",
                number: 0,
                tagmatCode: "物料编码:",
                tagmatName: "物料名称:",
                tagQty: "包装数量:",
                floor: "F2",
                floorrange: [{
                        value: "F2",
                        text: "F2"
                    },
                    {
                        value: "F4",
                        text: "F4"
                    },
                    {
                        value: "F7",
                        text: "F7"
                    },
                    {
                        value: "F7-2",
                        text: "F7-2"
                    }
                ],
            }
        },
        onLoad(res) {},
        methods: {
            printTag() {
                if (this.tag == "") {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                if (this.number <= 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        tag: this.tag,
                        number: this.number,
                        floor: this.floor
                    }
                }
                this.$u.post('/api/StockOperate/PrintTag', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "打印成功",
                            type: "success"
                        })
                        this.tagmatCode = "物料编码:";
                        this.tagQty = "包装数量:";
                        this.tag = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            tagInput() {
                this.$nextTick(() => {
                    var tagInfos = this.tag.split('|');
                    if (tagInfos.length == 7) {
                        this.tagmatCode = "物料编码:" + tagInfos[1];
                        this.tagQty = "物料数量:" + tagInfos[5];
                    } else {
                    }
                    this.numberFocus = true;
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/other/printtag.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,171 @@
<template>
    <view>
        <uni-forms style="margin-top: 30px;margin-left: 30px;width: 100%;" label-width="120">
            <uni-forms-item label="内箱标签">
                <uni-easyinput type="text" :focus="tagFocus" v-model="tag" placeholder="请扫描内箱标签" ref='midInput'
                    @input="tagInput" />
            </uni-forms-item>
            <uni-forms-item :label="tagmatCode"></uni-forms-item>
            <!-- <uni-forms-item :label="tagmatName"></uni-forms-item> -->
            <uni-forms-item :label="tagQty"></uni-forms-item>
            <uni-forms-item label="拆分数量">
                <uni-easyinput type="number" v-model="number" placeholder="请输入拆分数量" ref='midInput'
                    :focus="numberFocus" />
            </uni-forms-item>
            <uni-forms-item>
                <button @click="printTag" type="primary" size="default" style="margin-top: 2%;">打印标签</button>
            </uni-forms-item>
        </uni-forms>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                tagFocus: true,
                numberFocus: false,
                tag: "",
                number: 0,
                tagmatCode: "物料编码:",
                tagmatName: "物料名称:",
                tagQty: "包装数量:",
            }
        },
        onLoad(res) {},
        methods: {
            printTag() {
                if (this.tag == "") {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                if (this.number <= 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        tag: this.tag,
                        number: this.number,
                        floor: "F2"
                    }
                }
                this.$u.post('/api/StockOperate/PrintTag', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "打印成功",
                            type: "success"
                        })
                        this.tagmatCode = "物料编码:";
                        this.tagQty = "包装数量:";
                        this.tag = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            tagInput() {
                this.$nextTick(() => {
                    var tagInfos = this.tag.split('|');
                    if (tagInfos.length == 7) {
                        this.tagmatCode = "物料编码:" + tagInfos[1];
                        this.tagQty = "物料数量:" + tagInfos[5];
                    } else {
                    }
                    this.numberFocus = true;
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/other/printtagf4.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,171 @@
<template>
    <view>
        <uni-forms style="margin-top: 30px;margin-left: 30px;width: 100%;" label-width="120">
            <uni-forms-item label="内箱标签">
                <uni-easyinput type="text" :focus="tagFocus" v-model="tag" placeholder="请扫描内箱标签" ref='midInput'
                    @input="tagInput" />
            </uni-forms-item>
            <uni-forms-item :label="tagmatCode"></uni-forms-item>
            <!-- <uni-forms-item :label="tagmatName"></uni-forms-item> -->
            <uni-forms-item :label="tagQty"></uni-forms-item>
            <uni-forms-item label="拆分数量">
                <uni-easyinput type="number" v-model="number" placeholder="请输入拆分数量" ref='midInput'
                    :focus="numberFocus" />
            </uni-forms-item>
            <uni-forms-item>
                <button @click="printTag" type="primary" size="default" style="margin-top: 2%;">打印标签</button>
            </uni-forms-item>
        </uni-forms>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                tagFocus: true,
                numberFocus: false,
                tag: "",
                number: 0,
                tagmatCode: "物料编码:",
                tagmatName: "物料名称:",
                tagQty: "包装数量:",
            }
        },
        onLoad(res) {},
        methods: {
            printTag() {
                if (this.tag == "") {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                if (this.number <= 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        tag: this.tag,
                        number: this.number,
                        floor: "F4"
                    }
                }
                this.$u.post('/api/StockOperate/PrintTag', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "打印成功",
                            type: "success"
                        })
                        this.tagmatCode = "物料编码:";
                        this.tagQty = "包装数量:";
                        this.tag = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            tagInput() {
                this.$nextTick(() => {
                    var tagInfos = this.tag.split('|');
                    if (tagInfos.length == 7) {
                        this.tagmatCode = "物料编码:" + tagInfos[1];
                        this.tagQty = "物料数量:" + tagInfos[5];
                    } else {
                    }
                    this.numberFocus = true;
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/other/printtagf7.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,171 @@
<template>
    <view>
        <uni-forms style="margin-top: 30px;margin-left: 30px;width: 100%;" label-width="120">
            <uni-forms-item label="内箱标签">
                <uni-easyinput type="text" :focus="tagFocus" v-model="tag" placeholder="请扫描内箱标签" ref='midInput'
                    @input="tagInput" />
            </uni-forms-item>
            <uni-forms-item :label="tagmatCode"></uni-forms-item>
            <!-- <uni-forms-item :label="tagmatName"></uni-forms-item> -->
            <uni-forms-item :label="tagQty"></uni-forms-item>
            <uni-forms-item label="拆分数量">
                <uni-easyinput type="number" v-model="number" placeholder="请输入拆分数量" ref='midInput'
                    :focus="numberFocus" />
            </uni-forms-item>
            <uni-forms-item>
                <button @click="printTag" type="primary" size="default" style="margin-top: 2%;">打印标签</button>
            </uni-forms-item>
        </uni-forms>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                tagFocus: true,
                numberFocus: false,
                tag: "",
                number: 0,
                tagmatCode: "物料编码:",
                tagmatName: "物料名称:",
                tagQty: "包装数量:",
            }
        },
        onLoad(res) {},
        methods: {
            printTag() {
                if (this.tag == "") {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                if (this.number <= 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        tag: this.tag,
                        number: this.number,
                        floor: "F7"
                    }
                }
                this.$u.post('/api/StockOperate/PrintTag', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "打印成功",
                            type: "success"
                        })
                        this.tagmatCode = "物料编码:";
                        this.tagQty = "包装数量:";
                        this.tag = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            tagInput() {
                this.$nextTick(() => {
                    var tagInfos = this.tag.split('|');
                    if (tagInfos.length == 7) {
                        this.tagmatCode = "物料编码:" + tagInfos[1];
                        this.tagQty = "物料数量:" + tagInfos[5];
                    } else {
                    }
                    this.numberFocus = true;
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/otherboxing/otherboxing.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,491 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="180">
                        <uni-forms-item :label="label" style="display: none;">
                        </uni-forms-item>
                        <uni-forms-item label="组织编号">
                            <uni-data-select v-model="value" :localdata="range"></uni-data-select>
                        </uni-forms-item>
                        <uni-forms-item label="托盘条码:">
                            <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="barcodeFo"
                                v-model="barcode" @input="barcodeInput" />
                        </uni-forms-item>
                        <uni-forms-item label="内箱标签:">
                            <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="focus"
                                v-model="materSn" @input="snInput" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <checkbox checked="check">是否满盘</checkbox>
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="submit" type="primary" size="default">组盘</button>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list class="footer">
                        <uni-list-item direction="column" v-for="item in matTotal" :key="item.matCode">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                        <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                        <uni-list-item direction="column" v-for="(item,index) in matInfos" :key="item.sn">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                        @click="deleteList(item.innerCode)">
                                    </uni-icons>
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">订单号:{{item.orderNo}}</view>
                                        <view class="uni-note">物料编码:{{item.matCode}}</view>
                                        <!-- <view class="uni-note">生产日期:{{item.matProductionDate}}</view> -->
                                        <view class="uni-note">数量:{{item.matQty}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 1" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="!addressFocus" v-model="inboundBarcode"
                                placeholder="请扫描托盘条码" ref='midInput' @input="inputChangebarcode" />
                        </uni-forms-item>
                        <uni-forms-item label="地址条码">
                            <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                                :focus="addressFocus" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库确认</button>
                        </uni-forms-item>
                    </uni-forms>
                </view>
            </view>
            <view v-if="current === 2" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item>
                            <uni-easyinput type="text" @input="releaseboxInput" v-model="releasevalue" placeholder="请扫码"
                                ref='midInput' :focus="releasefocus" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="releasebox" type="primary" size="default"
                                style="margin-top: 2%;">解盘</button>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list>
                        <uni-list-item direction="column" v-if="value2">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">托盘号:{{value2}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                        <uni-list-item direction="column" v-for="item in matTotals" :key="item.matCode">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                        <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                        <uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                            ç‰©æ–™ç¼–码:{{item.matCode}}
                                        </view>
                                        <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                            ç‰©æ–™åç§°ï¼š{{item.matName}}
                                        </view>
                                        <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                            æ•°é‡ï¼š{{item.matQty}}
                                        </view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    import {
        config
    } from '../../common/config';
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                items: ['组盘', '入库', '解盘'],
                current: 0,
                matTotal: [],
                matInfos: [],
                orderNo: "",
                label: "",
                orderInfo: [],
                focus: false,
                barcode: "",
                materSn: "",
                sns: [],
                addressFocus: false,
                inboundBarcode: "",
                address: "",
                check: true,
                value: "",
                barcodeFo: true,
                range: [],
                releasefocus: true,
                releasevalue: "",
                matInfo: [],
                matTotals: [],
                value2: ""
            }
        },
        onLoad(res) {
            this.barcodeFo = true;
            this.focus = false;
            this.addressFocus = false;
            this.releasefocus = true;
            this.range = config.organizeRange;
            this.value = config.organizeValue;
        },
        methods: {
            voiceSpeech(src) {
                innerAudioContext.src = src; // '../../static/success.mp3';
                innerAudioContext.play();
            },
            releasebox() {
                if (this.releasevalue.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫码",
                        type: "error"
                    })
                    return;
                }
                var param;
                var matInfo = this.releasevalue.split('|');
                if (matInfo.length == 7) {
                    param = {
                        MainData: {
                            "innerCode": this.releasevalue
                        }
                    }
                } else {
                    param = {
                        MainData: {
                            "barcode": this.releasevalue
                        }
                    }
                }
                this.$u.post('/api/StockOperate/ReleaseAllBox', param).then(resdt => {
                    if (resdt.status) {
                        uni.$showMsg('解盘成功!')
                        this.releasevalue = "";
                        this.matInfo = [];
                        this.matTotals = [];
                        this.value2 = "";
                    } else {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "error"
                        })
                    }
                })
            },
            releaseboxInput() {
                this.$nextTick(() => {
                    if (this.releasevalue.length == 0) {
                        return;
                    }
                    var matInfo = this.releasevalue.split('|');
                    this.matInfo = [];
                    if (matInfo.length == 7) {
                        this.$u.post('/api/StockOperate/GetStockInfoByInnerCode', {
                            MainData: {
                                "innerCode": this.releasevalue
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    } else {
                        this.$u.post('/api/StockOperate/GetStockInfoByBarcode', {
                            MainData: {
                                "barcode": this.releasevalue
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    }
                })
            },
            updateFocus() {
                this.$nextTick(() => {
                    this.focus = true;
                });
            },
            onClickItem(e) {
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (e.currentIndex === 0) {
                        this.$nextTick(() => {
                            this.barcodeFo = true;
                            this.focus = false;
                        })
                    } else if (e.currentIndex === 1) {
                        this.$nextTick(() => {
                            this.addressFocus = false;
                        })
                    } else if (e.currentIndex === 2) {
                        this.$nextTick(() => {
                            this.releasefocus = true;
                        })
                    }
                }
            },
            barcodeInput() {
                this.$nextTick(function(x) {
                    // if (this.barcode != '') {
                    //     if (this.barcode.substring(0, 1) == 'A' || this.barcode.substring(0, 2) == 'TP') {
                    this.focus = true;
                    this.barcodeFo = false;
                    //     } else {
                    //         this.$refs.uToast.show({
                    //             title: "扫码错误,请扫描托盘码",
                    //             type: "error"
                    //         })
                    //         // setTimeout(this.barcodeFocus, 200);
                    //     }
                    // }
                })
            },
            snInput() {
                // this.
                this.$nextTick(() => {
                    if (this.materSn != "") {
                        this.focus = false;
                        var matSn = this.materSn;
                        setTimeout(() => {
                            this.materSn = "";
                        }, 10);
                        var matInfo = matSn.split('|');
                        if (matInfo.length == 7) {
                            var matObj = {
                                matCode: matInfo[1],
                                matProductionDate: matInfo[3],
                                matQty: matInfo[5],
                                orderNo: matInfo[6],
                                sn: matSn
                            }
                            var temp = this.matInfos.find(x => x.orderNo == matObj.orderNo);
                            if (!temp) {
                                var tmp = this.matTotal.find(x => x.matCode == matObj.matCode);
                                if (!tmp) {
                                    this.matTotal.push({
                                        matCode: matObj.matCode,
                                        matQuantity: parseInt(matObj.matQty)
                                    })
                                } else {
                                    tmp.matQuantity += parseInt(matObj.matQty);
                                }
                                this.sns.push(matSn);
                                this.matInfos.push(matObj);
                                setTimeout(this.updateFocus, 200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/success.mp3');
                                }, 100);
                            } else {
                                this.$refs.uToast.show({
                                    title: "扫码重复",
                                    type: "error"
                                })
                                setTimeout(this.updateFocus, 200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/fail.mp3');
                                }, 100);
                            }
                        } else {
                            this.$refs.uToast.show({
                                title: "扫码错误,请扫描正确内箱码",
                                type: "error"
                            })
                            setTimeout(this.updateFocus, 200);
                            setTimeout(() => {
                                this.voiceSpeech('../../static/fail.mp3');
                            }, 100);
                        }
                    }
                })
            },
            inbound() {
                var postData = {
                    MainData: {
                        "barcode": this.inboundBarcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/RequestInbound', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.inboundBarcode = "";
                        this.address = "";
                        this.addressFocus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.addressFocus = false;
                this.$nextTick(function(x) {
                    if (this.inboundBarcode != '') {
                        this.addressFocus = true;
                    }
                })
            },
            deleteList(res) {
                var sn = '';
                this.matInfos.map((item, index) => {
                    if (item.innerCode == res) {
                        this.matInfos.splice(index, 1);
                        sn = item.sn;
                        var tmp = this.matTotal.find(x => x.matCode == item.matCode);
                        if (tmp) {
                            tmp.matQuantity -= parseInt(item.matQty);
                        }
                    }
                })
                this.sns.map((item, index) => {
                    if (item == res) {
                        this.sns.splice(index, 1);
                    }
                })
            },
            submit() {
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: 'error'
                    })
                    return;
                }
                if (this.sns.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: 'error'
                    })
                    return;
                }
                if(this.value.length == 0){
                    this.$refs.uToast.show({
                        title: "请选择组织",
                        type: 'error'
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        "pallet_barcode": this.barcode,
                        "organizeCode": this.value
                    },
                    DetailData: this.matInfos
                }
                this.$u.post('/api/Bill_group_stock/OtherBoxing', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg('组盘成功!')
                        this.barcode = "";
                        this.matInfos = [];
                        this.sns = [];
                        this.matTotal = [];
                        this.barcodeFo = true;
                        this.focus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    uni.showToast.show({
                        title: err.message,
                        type: 'error'
                    })
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 30px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/otheroutboundorder/otherorderoutbound.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,588 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view v-if="current === 0" class="headerstyle">
            <view class="itemstyle">
                <uni-forms style="margin-left: 2%;margin-top: 20px;" label-width="180">
                    <uni-forms-item :label="label"></uni-forms-item>
                    <uni-forms-item label="单据类型:其他出库单"></uni-forms-item>
                    <uni-forms-item label="内箱码:">
                        <uni-easyinput type="text" placeholder="请扫描内箱码" ref='midInput' :focus="focus"
                            v-model="innerCode" @input="innercodeInput" />
                    </uni-forms-item>
                    <uni-forms-item :label="matCode"></uni-forms-item>
                    <uni-forms-item :label="matName"></uni-forms-item>
                    <uni-forms-item :label="currentQty"></uni-forms-item>
                    <uni-forms-item :label="orderQty"></uni-forms-item>
                    <uni-forms-item :label="scanQty"></uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 1" class="headerstyle">
            <view class="itemstyle">
                <u-sticky>
                    <view style="background-color: #ffffff;">
                        <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
                    </view>
                </u-sticky>
                <uni-forms label-width="180">
                    <uni-forms-item label="区域"><uni-data-select v-model="value"
                            :localdata="range"></uni-data-select></uni-forms-item>
                    <uni-forms-item label="楼层"><uni-data-select v-model="floor"
                            :localdata="floorrange"></uni-data-select>
                    </uni-forms-item>
                    <uni-forms-item label="出库区域">
                        <uni-data-select v-model="endType" :localdata="endTypeRange"></uni-data-select>
                    </uni-forms-item>
                </uni-forms>
                <uni-list :border="true">
                    <uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="item.dtlId">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <button type="primary" style="position: absolute;right: 1%;" size="mini"
                                    @click="outbound(item.matCode)">出库</button>
                                <view class="uni-content">
                                    <view style="font-size: 18px;">物料编码:{{item.matCode}}</view>
                                    <view style="font-size: 18px;">单据号:{{orderNo}}</view>
                                    <view style="font-size: 18px;">物料名称:{{item.matName}}</view>
                                    <view style="font-size: 18px;">单据数量:{{item.totalQty}}</view>
                                    <view style="font-size: 18px;">已分配数量:{{item.processQty}}</view>
                                    <view style="font-size: 18px;">出库数量:{{item.outQty}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <view v-if="current === 2" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item label="楼层">
                        <uni-data-select v-model="printfloor" :localdata="printfloorrange"></uni-data-select>
                    </uni-forms-item>
                    <uni-forms-item label="内箱标签">
                        <uni-easyinput type="text" :focus="tagFocus" v-model="tag" placeholder="请扫描内箱标签" ref='midInput'
                            @input="tagInput" />
                    </uni-forms-item>
                    <uni-forms-item :label="tagmatCode"></uni-forms-item>
                    <uni-forms-item :label="tagmatName"></uni-forms-item>
                    <uni-forms-item :label="tagQty"></uni-forms-item>
                    <uni-forms-item label="拆分数量">
                        <uni-easyinput type="number" v-model="number" placeholder="请输入拆分数量" ref='midInput'
                            :focus="numberFocus" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="printTag" type="primary" size="default" style="margin-top: 2%;">打印标签</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 3" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item label="托盘条码">
                        <uni-easyinput type="text" :focus="!istrue" v-model="barcode" placeholder="请扫描托盘条码"
                            ref='midInput' @input="inputChangebarcode" />
                    </uni-forms-item>
                    <uni-forms-item label="地址条码">
                        <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                            :focus="istrue" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 4" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item>
                        <uni-easyinput type="text" @input="releaseboxInput" v-model="releasevalue" placeholder="请扫码"
                            ref='midInput' :focus="releasefocus" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="releasebox" type="primary" size="default" style="margin-top: 2%;">解盘</button>
                    </uni-forms-item>
                </uni-forms>
                <uni-list>
                    <uni-list-item direction="column" v-if="value2">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">托盘号:{{value2}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                    <uni-list-item direction="column" v-for="item in matTotals" :key="item.matCode">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                    <uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                        ç‰©æ–™ç¼–码:{{item.matCode}}
                                    </view>
                                    <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                        ç‰©æ–™åç§°ï¼š{{item.matName}}
                                    </view>
                                    <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                        æ•°é‡ï¼š{{item.matQty}}
                                    </view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    import {
        config
    } from '../../common/config';
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                items: ['扫描', '明细', '拆分', '入库', '解盘'],
                current: 0,
                orderNo: "",
                orderInfo: [],
                label: "",
                innerCode: "",
                matCode: "物料编码:",
                matName: "物料名称:",
                orderQty: "需求数量:",
                currentQty: "已扫数量:",
                scanQty: "累计数量:",
                tagFocus: true,
                numberFocus: false,
                focus: true,
                tag: "",
                number: "",
                tagmatCode: "物料编码:",
                tagmatName: "物料名称:",
                tagQty: "包装数量:",
                value: "",
                range: [],
                floor: "",
                floorrange: [],
                printfloor: "",
                printfloorrange: [],
                barcode: "",
                address: "",
                istrue: false,
                releasefocus: true,
                releasevalue: "",
                matInfo: [],
                matTotals: [],
                value2: "",
                searchValue: "",
                endType: "",
                endTypeRange: []
            }
        },
        mounted() {
            this.printfloorrange = config.printFloorRange;
            this.floorrange = config.outboundFloorRange;
            if (config.outboundFloor) {
                this.floor = config.outboundFloor;
            }
            if (config.printFloor) {
                this.printfloor = config.printFloor;
            }
            this.range = config.warehouseRange;
            this.endTypeRange = config.outboundAreaRange;
            if (config.outboundArea) {
                this.endType = config.outboundArea;
            }
            if (config.warehouseArea) {
                this.value = config.warehouseArea;
            }
        },
        onLoad(res) {
            this.orderNo = res.orderNo;
            this.label = "单据编号:" + this.orderNo;
            this.getData();
        },
        methods: {
            voiceSpeech(src) {
                innerAudioContext.src = src; // '../../static/success.mp3';
                innerAudioContext.play();
            },
            search() {
                this.getData();
            },
            releasebox() {
                if (this.releasevalue.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫码",
                        type: "error"
                    })
                    return;
                }
                var param;
                var matInfo = this.releasevalue.split('|');
                if (matInfo.length == 7) {
                    param = {
                        MainData: {
                            "innerCode": this.releasevalue
                        }
                    }
                } else {
                    param = {
                        MainData: {
                            "barcode": this.releasevalue
                        }
                    }
                }
                this.$u.post('/api/StockOperate/ReleaseAllBox', param).then(resdt => {
                    if (resdt.status) {
                        uni.$showMsg('解盘成功!')
                        this.releasevalue = "";
                        this.matInfo = [];
                        this.matTotals = [];
                        this.value2 = "";
                    } else {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "error"
                        })
                    }
                })
            },
            releaseboxInput() {
                this.$nextTick(() => {
                    if (this.releasevalue.length == 0) {
                        return;
                    }
                    var matInfo = this.releasevalue.split('|');
                    this.matInfo = [];
                    if (matInfo.length == 7) {
                        this.$u.post('/api/StockOperate/GetStockInfoByInnerCode', {
                            MainData: {
                                "innerCode": this.releasevalue
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    } else {
                        this.$u.post('/api/StockOperate/GetStockInfoByBarcode', {
                            MainData: {
                                "barcode": this.releasevalue
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    }
                })
            },
            updateFocus() {
                this.$nextTick(() => {
                    this.innerCode = '';
                    if (!this.focus) {
                        this.focus = true;
                    }
                });
            },
            inbound() {
                if (this.barcode.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描托盘号",
                        type: "error"
                    })
                    return;
                }
                if (this.address.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描地址条码",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        "barcode": this.barcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/RequestInbound', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.barcode = "";
                        this.address = "";
                        this.istrue = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.istrue = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.istrue = true;
                    }
                })
            },
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current == 1) {
                        this.getData();
                    }
                }
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.orderNo,
                        searchValue: this.searchValue
                    },
                }
                this.$u.post('/api/ErpOrder/GetOtherOutOrderInfo', postData).then((res) => {
                    if (res.status) {
                        this.orderInfo = res.data;
                        if (this.orderInfo.length > 3) {
                            this.loadVisible = true;
                        }
                    }
                })
            },
            innercodeInput() {
                this.$nextTick(() => {
                    if (this.innerCode == "") {
                        return;
                    }
                    var innerCode = this.innerCode;
                    setTimeout(() => {
                        this.innerCode = "";
                    }, 10);
                    // this.focus = false;
                    if (innerCode.split('|').length == 7) {
                        var postData = {
                            MainData: {
                                orderNo: this.orderNo,
                                innerCode: innerCode
                            },
                        }
                        this.$u.post('/api/ErpOrder/UpdateOtherOutOrder', postData).then((res) => {
                            if (res.status) {
                                this.matCode = "物料编码:" + res.data.matCode;
                                this.matName = "物料名称:" + res.data.matName;
                                this.orderQty = "需求数量:" + res.data.orderQty;
                                this.currentQty = "已扫数量:" + res.data.currentQty;
                                this.scanQty = "累计数量:" + res.data.scanQty;
                                if (res.message) {
                                    this.$refs.uToast.show({
                                        title: res.message,
                                        type: "error"
                                    })
                                    // setTimeout(this.updateFocus,200);
                                    setTimeout(() => {
                                        this.voiceSpeech('../../static/fail.mp3');
                                    }, 100);
                                    return;
                                }
                                // setTimeout(this.updateFocus,200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/success.mp3');
                                }, 100);
                            } else {
                                // this.innerCode = "";
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                                // setTimeout(this.updateFocus,200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/fail.mp3');
                                }, 100);
                            }
                        })
                    } else {
                        // this.innerCode = "";
                        this.$refs.uToast.show({
                            title: "内箱码扫描错误",
                            type: "error"
                        })
                        // setTimeout(this.updateFocus,200);
                        setTimeout(() => {
                            this.voiceSpeech('../../static/fail.mp3');
                        }, 100);
                    }
                    // this.innerCode = "";
                })
            },
            tagInput() {
                this.$nextTick(() => {
                    var tagInfos = this.tag.split('|');
                    if (tagInfos.length == 7) {
                        this.tagmatCode = "物料编码:" + tagInfos[1];
                        this.tagQty = "物料数量:" + tagInfos[5];
                    } else {
                        this.$refs.uToast.show({
                            title: "内箱码扫描错误",
                            type: "error"
                        })
                    }
                    this.numberFocus = true;
                })
            },
            printTag() {
                if (this.tag == "") {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                if (this.number <= 0) {
                    this.$refs.uToast.show({
                        title: "请输入数量",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        tag: this.tag,
                        number: this.number,
                        floor: this.printfloor
                    }
                }
                this.$u.post('/api/StockOperate/PrintTag', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "打印成功",
                            type: "success"
                        })
                        this.tagmatCode = "物料编码:";
                        this.tagQty = "包装数量:";
                        this.tag = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            outbound(code) {
                if (this.floor == "") {
                    this.$refs.uToast.show({
                        title: "请选择楼层",
                        type: "error"
                    })
                    return;
                }
                if(this.value == ""){
                    this.$refs.uToast.show({
                        title: "请选择区域",
                        type: "error"
                    })
                    return;
                }
                if(this.endType == ""){
                    this.$refs.uToast.show({
                        title: "请选择出库区域",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        matCode: code,
                        orderNo: this.orderNo,
                        system: this.value,
                        floor: this.floor,
                        endType: this.endType
                    }
                }
                this.$u.post('/api/ErpOrder/OtherOutOrderOutbound', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "成功",
                            type: "success"
                        })
                        this.getData();
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/otheroutboundorder/otheroutboundorder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,175 @@
<template>
    <view>
        <u-sticky>
            <view style="background-color: #ffffff;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
            </view>
        </u-sticky>
        <uni-list :border="true">
            <uni-list-item direction="column" clickable @click="groupClick(item.other_outbound_no)" link
                :to="page+item.other_outbound_no" v-for="item in allReceivingOrders" :key="item.order_id">
                <template v-slot:body>
                    <uni-group margin-top="20">
                        <view> è°ƒæ‹¨å•号:{{item.other_outbound_no}} </view>
                        <!-- <view> è°ƒæ‹¨ç±»åž‹:{{item.directorder_type}} </view> -->
                        <view> å•据日期:{{item.other_outbound_date}} </view>
                    </uni-group>
                </template>
            </uni-list-item>
        </uni-list>
        <uni-load-more :status="status" v-if="loadVisible"></uni-load-more>
        <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                page: "/pages/otheroutboundorder/otherorderoutbound?orderNo=",
                loadVisible: false,
                searchValue: "",
                status: "more",
                allReceivingOrders: [],
                pageNo: 1,
                scrollTop: 0
            }
        },
        onLoad(res) {
            this.getData();
        },
        onPageScroll(e) {
            this.scrollTop = e.scrollTop;
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        methods: {
            search(res) {
                this.pageNo = 1;
                this.getData();
            },
            groupClick() {
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.searchValue,
                        pageNo: this.pageNo
                    },
                }
                this.$u.post('/api/ErpOrder/GetOtherOutOrders', postData).then((res) => {
                    if (res.status) {
                        if(res.data){
                            if (this.searchValue == '') {
                                this.allReceivingOrders = this.allReceivingOrders.concat(res.data);
                                // this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            } else {
                                this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            }
                        }else{
                            this.status = 'noMore';
                            this.allReceivingOrders = [];
                            this.loadVisible = true;
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/outboundscan/matoutboundscan.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,190 @@
<template>
    <view>
        <view style="background-color: #fff; padding: 20px 20px 20px 20px;width: 96%;margin-left: 2%;margin-top: 20px;">
            <uni-forms ref="formData" label-width="120">
                <uni-forms-item label="内箱码" style="background-color: #fff;">
                    <uni-easyinput type="text" :focus="true" v-model="innerCode" placeholder="请扫描内箱码"
                        ref='midInput' @input="innerCodeInput"/>
                </uni-forms-item>
            </uni-forms>
        </view>
        <uni-list class="body" style="width: 96%;margin-left: 2%;" v-if="matInfo">
            <uni-list-item direction="column">
                <template v-slot:body>
                    <view class="uni-list-box">
                        <view class="uni-content">
                            <!--     <view class="uni-title-sub uni-ellipsis-2">托盘号:{{item.barcode}}</view>
                            <view class="uni-note">货位编号:{{item.locationNo}}</view> -->
                            <view class="uni-title-sub uni-ellipsis-2">物料编码:{{matInfo.matCode}}</view>
                            <view class="uni-note">物料名称:{{matInfo.matName}}</view>
                            <view class="uni-note">数量:{{matInfo.quantity}}</view>
                        </view>
                    </view>
                </template>
            </uni-list-item>
        </uni-list>
        <view style="background-color: #fff; padding: 20rpx,20rpx;" class="footerxy">
            <u-sticky offset-top="80%" zIndex="999">
                <button @click="outbound" type="primary" size="default">出库确认</button>
            </u-sticky>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                innerCode: "",
                matInfo: null
            }
        },
        methods: {
            innerCodeInput(){
                if(this.innerCode != ""){
                    var postData = {
                        MainData: {
                            innerCode: this.innerCode
                        },
                    }
                    this.$u.post('/api/Outbound/GetMatInfo', postData).then((res) => {
                        if (res.status) {
                            this.matInfo = res.data;
                        } else {
                            this.$refs.uToast.show({
                                title: "库存信息查询失败" + res.message,
                                type: "error"
                            });
                        }
                    })
                }
            },
            outbound() {
                if(this.innerCode == ""){
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        innerCode: this.innerCode
                    },
                }
                this.$u.post('/api/Outbound/HandOutboundScan', postData).then((res) => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "出库成功",
                            type: "success"
                        });
                    } else {
                        this.$refs.uToast.show({
                            title: "出库失败" + res.message,
                            type: "error"
                        });
                    }
                })
            },
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 60px;
        text-align: center;
        z-index: 999;
        left: 40px;
        height: 20%;
    }
    .footer {
        // padding-top: 30%;
    }
    .body {
        padding-bottom: 80px;
        background-color: #f1f3f4;
    }
    .footerxy {
        width: 100%;
        height: 140rpx;
        text-align: center;
        position: fixed;
        /*1、【relative】相对定位;2、【absolute】绝对定位;3、【fixed】固定定位;4、【static】默认值;5、【sticky】粘性定位。*/
        left: 0px;
        /*定位:离页面左边0px的位置*/
        bottom: 0px;
        /*定位:离页面底部0px的位置*/
        padding-top: 20rpx;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/outboundscan/productoutboundscan.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,193 @@
<template>
    <view>
        <view style="background-color: #fff; padding: 20px 20px 20px 20px;width: 96%;margin-left: 2%;margin-top: 20px;">
            <uni-forms ref="formData" label-width="120">
                <uni-forms-item label="产品条码" style="background-color: #fff;">
                    <uni-easyinput type="text" maxlength="25" :focus="true" v-model="sn" placeholder="请扫描产品条码"
                        ref='midInput' @input="outbound" />
                </uni-forms-item>
            </uni-forms>
        </view>
        <uni-list class="body" style="width: 96%;margin-left: 2%;" v-if="matInfo">
            <uni-list-item direction="column">
                <template v-slot:body>
                    <view class="uni-list-box">
                        <view class="uni-content">
                            <!--     <view class="uni-title-sub uni-ellipsis-2">托盘号:{{item.barcode}}</view>
                            <view class="uni-note">货位编号:{{item.locationNo}}</view> -->
                            <view class="uni-title-sub uni-ellipsis-2">物料编码:{{matInfo.matCode}}</view>
                            <view class="uni-note">物料名称:{{matInfo.matName}}</view>
                            <view class="uni-note">数量:{{matInfo.quantity}}</view>
                        </view>
                    </view>
                </template>
            </uni-list-item>
        </uni-list>
        <!-- <view style="background-color: #fff; padding: 20rpx,20rpx;" class="footerxy">
            <u-sticky offset-top="80%" zIndex="999">
                <button @click="outbound" type="primary" size="default">出库确认</button>
            </u-sticky>
        </view> -->
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                sn: "",
                matInfo: null
            }
        },
        methods: {
            snInput() {
                if (this.sn != "") {
                    var postData = {
                        MainData: {
                            sn: this.sn
                        },
                    }
                    this.$u.post('/api/Outbound/GetProductInfo', postData).then((res) => {
                        if (res.status) {
                            debugger
                            this.outbound();
                        } else {
                            this.$refs.uToast.show({
                                title: "库存信息查询失败" + res.message,
                                type: "error"
                            });
                        }
                    })
                }
            },
            outbound() {
                this.$nextTick(() => {
                    if (this.sn == "") {
                        return;
                    }
                    var postData = {
                        MainData: {
                            sn: this.sn
                        },
                    }
                    this.$u.post('/api/Outbound/ProductOutboundScan', postData).then((res) => {
                        if (res.status) {
                            this.matInfo = res.data;
                            this.$refs.uToast.show({
                                title: "出库成功",
                                type: "success"
                            });
                            this.sn = "";
                        } else {
                            this.$refs.uToast.show({
                                title: "出库失败" + res.message,
                                type: "error"
                            });
                        }
                    })
                })
            },
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 60px;
        text-align: center;
        z-index: 999;
        left: 40px;
        height: 20%;
    }
    .footer {
        // padding-top: 30%;
    }
    .body {
        padding-bottom: 80px;
        background-color: #f1f3f4;
    }
    .footerxy {
        width: 100%;
        height: 140rpx;
        text-align: center;
        position: fixed;
        /*1、【relative】相对定位;2、【absolute】绝对定位;3、【fixed】固定定位;4、【static】默认值;5、【sticky】粘性定位。*/
        left: 0px;
        /*定位:离页面左边0px的位置*/
        bottom: 0px;
        /*定位:离页面底部0px的位置*/
        padding-top: 20rpx;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/picking/pickingMat.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,430 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="!istrue" v-model="barcode" placeholder="请扫描托盘条码"
                                ref='midInput' @input="inputChangebarcode()" />
                        </uni-forms-item>
                        <uni-forms-item label="内箱标签">
                            <uni-easyinput type="text" @input="inputChange()" v-model="materialsns"
                                placeholder="请扫描内箱标签" ref='midInput' :focus="istrue" />
                        </uni-forms-item>
                        <uni-forms-item label="出库数量">
                            <uni-easyinput type="number" v-model="num" placeholder="请输入出库数量" ref='midInput' />
                        </uni-forms-item>
                        <uni-forms-item>
                            <label style="margin-left: 0%;">总数量:{{totalNum}}</label>
                            <label style="margin-left: 30%;">出库数量:{{pickNum}}</label>
                        </uni-forms-item>
                        <uni-forms-item>
                            <label style="margin-left: 0%;">工单总数量:{{orderTotalNum}}</label>
                            <label style="margin-left: 21%;">累计出库数量:{{orderPickNum}}</label>
                        </uni-forms-item>
                        <uni-forms-item>
                            <label style="margin-left: 0%;">工单号:{{orderNo}}</label>
                        </uni-forms-item>
                        <uni-forms-item>
                            <checkbox :checked="isPicking" @click="checkedClick">是否拣选</checkbox>
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="picking" type="primary" style="margin-left: 0px;">拣选</button>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list>
                        <uni-list-item direction="column" v-for="item in matTotal" :key="item.matCode">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                        <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                        <uni-list-item direction="column" v-for="item in boxBarcodes" :key="item.sn">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                        @click="deleteList(item.sn)">
                                    </uni-icons>
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">订单号:{{item.orderNo}}</view>
                                        <view class="uni-note">物料编码:{{item.matCode}}</view>
                                        <view class="uni-note">生产日期:{{item.matProductionDate}}</view>
                                        <view class="uni-note">数量:{{item.matQty}}</view>
                                        <view class="uni-note">是否拣选:{{item.isPicking}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 1" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="!istrue2" v-model="barcode2" placeholder="请扫描托盘条码"
                                ref='midInput' @input="inputChangebarcode2()" />
                        </uni-forms-item>
                        <uni-forms-item label="内箱标签">
                            <uni-easyinput type="text" @input="inputChange2()" v-model="innerboxcode"
                                placeholder="请扫描内箱标签" ref='midInput' :focus="istrue2" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="submit" type="primary" size="default" style="margin-top: 2%;">组盘</button>
                        </uni-forms-item>
                    </uni-forms>
                </view>
            </view>
            <view v-if="current === 2" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="!addressFocus" v-model="inboundBarcode"
                                placeholder="请扫描托盘条码" ref='midInput' @input="inputChangebarcode3" />
                        </uni-forms-item>
                        <uni-forms-item label="地址条码">
                            <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                                :focus="addressFocus" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库确认</button>
                        </uni-forms-item>
                    </uni-forms>
                </view>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    // const SixUniTts = uni.requireNativePlugin("SmallSix-SixUniTts")
    export default {
        data() {
            return {
                items: ['拣选', '拣选组盘', '入库'],
                current: 0,
                isPicking: false,
                istrue: false,
                barcode: '',
                materialsns: "",
                boxBarcodes: [],
                sns: [],
                barcodefocus: true,
                totalNum: 0,
                pickNum: 0,
                num: 0,
                orderTotalNum: 0,
                orderPickNum: 0,
                orderNo: "",
                matTotal: [],
                istrue2: false,
                barcode2: '',
                innerboxcode: "",
                sns2: [],
                barcodefocus: true,
                addressFocus: false,
                inboundBarcode: "",
                address: "",
            }
        },
        onLoad(res) {
            this.barcodefocus = false;
            this.istrue = false;
        },
        methods: {
            onClickItem(e) {
                this.barcodeFo = true;
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                }
            },
            inbound() {
                var postData = {
                    MainData: {
                        "barcode": this.inboundBarcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/RequestInbound', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.inboundBarcode = "";
                        this.address = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode3() {
                this.addressFocus = false;
                this.$nextTick(function(x) {
                    if (this.inboundBarcode != '') {
                        this.addressFocus = true;
                    }
                })
            },
            picking() {
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: "error"
                    })
                    return;
                }
                if (this.sns.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                var params = {
                    MainData: {
                        "barcode": this.barcode,
                        "num": this.num,
                        "pickNum": this.pickNum
                    },
                    DetailData: this.sns
                }
                this.$u.post('/api/StockOperate/MatPicking', params).then(res => {
                    if (res.status) {
                        uni.$showMsg('拣选成功!')
                        this.barcode = "";
                        this.boxBarcodes = [];
                        this.sns = [];
                        this.materialsns = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            inputChange(e) {
                this.$nextTick(() => {
                    this.istrue = false;
                    var matInfo = this.materialsns.split('|');
                    if (matInfo.length == 7) {
                        var matObj = {
                            matCode: matInfo[1],
                            matProductionDate: matInfo[3],
                            matQty: matInfo[5],
                            orderNo: matInfo[6],
                            sn: this.materialsns,
                            isPicking: this.isPicking
                        }
                        var temp = this.boxBarcodes.find(x => x.orderNo == matObj.orderNo);
                        if (!temp) {
                            var tmp = this.matTotal.find(x => x.matCode == matObj.matCode);
                            if (!tmp) {
                                this.matTotal.push({
                                    matCode: matObj.matCode,
                                    matQuantity: parseInt(matObj.matQty)
                                })
                            } else {
                                tmp.matQuantity += parseInt(matObj.matQty);
                            }
                            this.sns.push({
                                innerboxcode: this.materialsns,
                                isSplit: this.isPicking
                            });
                            this.boxBarcodes.push(matObj);
                            this.isPicking = false;
                            setTimeout(this.updateFocus, 100);
                        } else {
                            this.$refs.uToast.show({
                                title: "扫码重复",
                                type: "error"
                            })
                            setTimeout(this.updateFocus, 100);
                        }
                    } else {
                        this.$refs.uToast.show({
                            title: "扫码错误,请扫描正确内箱码",
                            type: "error"
                        })
                        setTimeout(this.updateFocus, 100);
                    }
                })
            },
            checkedClick() {
                this.isPicking = !this.isPicking;
                this.istrue = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.istrue = true;
                    }
                })
            },
            updateFocus() {
                this.materialsns = '';
                if (!this.istrue) {
                    this.istrue = true;
                }
            },
            inputChangebarcode() {
                this.boxBarcodes = [];
                this.istrue = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        var postData = {
                            MainData: {
                                "barcode": this.barcode
                            }
                        };
                        this.$u.post('/api/Bill_group_stock/IsAllOutbound', postData).then(res => {
                            if (res.status) {
                                if (res.data.totalNum == res.data.pickNum) {
                                    res.data.innerBoxCode.forEach(x => {
                                        var matInfo = x.split('|');
                                        if (matInfo.length > 6) {
                                            var matObj = {
                                                matCode: matInfo[1],
                                                matProductionDate: matInfo[3],
                                                matQty: matInfo[5],
                                                orderNo: matInfo[6],
                                                sn: this.materialsns,
                                                isPicking: this.isPicking
                                            }
                                            this.sns.push({
                                                innerboxcode: this.materialsns,
                                                isSplit: this.isPicking
                                            });
                                            if (!this.boxBarcodes.find(x => x.orderNo == matObj
                                                    .orderNo)) {
                                                this.boxBarcodes.push(matObj);
                                            }
                                        }
                                    })
                                }
                                this.totalNum = res.data.totalNum;
                                this.pickNum = res.data.pickNum;
                                this.orderPickNum = res.data.orderPickNum;
                                this.orderTotalNum = res.data.orderTotalNum;
                                this.orderNo = res.data.orderNo;
                            }
                        })
                        this.istrue = true;
                    }
                })
            },
            deleteList(res) {
                this.matTotal.map((item, index) => {
                    var temp = this.boxBarcodes.find(x => x.sn == res);
                    if (temp) {
                        if (item.matCode == temp.matCode) {
                            if (item.matQuantity - temp.matQty == 0) {
                                this.matTotal.splice(index, 1);
                            } else {
                                item.matQuantity -= temp.matQty;
                            }
                        }
                    }
                })
                this.sns.map((item, index) => {
                    if (item.innerboxcode == res) {
                        this.sns.splice(index, 1);
                    }
                })
                this.boxBarcodes.map((item, index) => {
                    if (item.sn == res) {
                        this.boxBarcodes.splice(index, 1);
                    }
                })
            },
            submit() {
                if (this.barcode2 == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: "error"
                    })
                    return;
                }
                if (this.innerboxcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                this.$u.post('/api/StockOperate/PickingBoxing', {
                    MainData: {
                        "barcode": this.barcode2,
                        "innerboxcode": this.innerboxcode
                    },
                    DelKeys: this.sns2
                }).then(res => {
                    if (res.status) {
                        uni.$showMsg('组盘成功!')
                        this.barcode2 = "";
                        this.innerboxcode = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChange2(e) {
            },
            inputChangebarcode2() {
                this.istrue2 = false;
                this.$nextTick(function(x) {
                    if (this.barcode2 != '') {
                        this.istrue2 = true;
                    }
                })
            },
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/productboxing/productboxing.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,344 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="180">
                        <uni-forms-item label="托盘条码:">
                            <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="true"
                                v-model="barcode" @input="barcodeInput" />
                        </uni-forms-item>
                        <uni-forms-item label="产品条码:">
                            <uni-easyinput type="text" placeholder="请扫描产品条码" ref='midInput' :focus="focus"
                                v-model="materSn" @input="snInput" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="submit" type="primary" size="default" style="margin-top: 2%;">组盘</button>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list class="footer">
                        <uni-list-item direction="column" v-for="item in matInfos" :key="item.matCode">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                        <view class="uni-title-sub uni-ellipsis-2">安规:{{item.safety}}</view>
                                        <view class="uni-title-sub uni-ellipsis-2">数量:{{item.qty}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                        <uni-list-item direction="column" v-for="(item,index) in sns" :key="item">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">产品条码:{{item}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 1" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="!addressFocus" v-model="inboundBarcode"
                                placeholder="请扫描托盘条码" ref='midInput' @input="inputChangebarcode" />
                        </uni-forms-item>
                        <uni-forms-item label="地址条码">
                            <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                                :focus="addressFocus" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库确认</button>
                        </uni-forms-item>
                    </uni-forms>
                </view>
            </view>
            <view v-if="current === 2" class="headerstyle">
                <view class="itemstyle">
                </view>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                items: ['成品组盘', '成品入库'],
                current: 0,
                matTotal: [],
                matInfos: [],
                orderNo: "",
                label: "",
                orderInfo: [],
                focus: false,
                barcode: "",
                materSn: "",
                sns: [],
                addressFocus: false,
                inboundBarcode: "",
                address: "",
                check: true
            }
        },
        onShow() {},
        onLoad(res) {
            this.focus = false;
            this.addressFocus = false;
        },
        methods: {
            voiceSpeech(src) {
                innerAudioContext.src = src; // '../../static/success.mp3';
                innerAudioContext.play();
            },
            updateFocus() {
                this.$nextTick(() => {
                    console.log(1);
                    this.materSn = '';
                    if (!this.focus) {
                        this.focus = true;
                    }
                });
            },
            barcodeFocus() {
                this.barcode = '';
                if (this.focus) {
                    this.focus = false;
                }
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.orderNo
                    },
                }
                this.$u.post('/api/ErpOrder/GetReceivingOrderInfo', postData).then((res) => {
                    if (res.status) {
                        this.orderInfo = res.data;
                        if (this.orderInfo.length > 3) {
                            this.loadVisible = true;
                        }
                    }
                })
            },
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current == 2) {
                        this.getData();
                    }
                }
            },
            barcodeInput() {
                this.$nextTick(function(x) {
                    if (this.barcode.length > 0) {
                        var param = {
                            MainData: {
                                "barcode": this.barcode,
                            }
                        }
                        this.$u.post('/api/StockOperate/GetProductByBarcode', param).then(res => {
                            if (res.status) {
                                this.matInfos = res.data.matTotal;
                                this.sns.push(res.data.matInfo);
                            }
                            this.focus = true;
                        })
                    } else {
                        this.matInfos = [];
                        this.sns = [];
                    }
                })
            },
            snInput() {
                this.$nextTick(() => {
                    if (this.materSn != "") {
                        this.focus = false;
                        var code = this.materSn;
                        var param = {
                            MainData: {
                                "sn": code,
                            }
                        }
                        this.$u.post('/api/Bill_group_stock_product/GetProductInfoBySn', param).then(res => {
                            if (res.status) {
                                if (res.data) {
                                    var tmp = this.sns.find(x => x == code);
                                    if (!tmp) {
                                        var matInfo = this.matInfos.find(x => x.matCode == res.data
                                            .mater_code && x
                                            .safety == res.data.safety_regulations);
                                        if (matInfo) {
                                            matInfo.qty += 1;
                                        } else {
                                            this.matInfos.push({
                                                matCode: res.data.mater_code,
                                                safety: res.data.safety_regulations,
                                                qty: 1
                                            });
                                        }
                                        this.sns.push(code);
                                        this.voiceSpeech('../../static/success.mp3');
                                        setTimeout(this.updateFocus, 200);
                                    } else {
                                        this.$refs.uToast.show({
                                            title: "扫码重复",
                                            type: "error"
                                        })
                                        this.voiceSpeech('../../static/fail.mp3');
                                        setTimeout(this.updateFocus, 200);
                                    }
                                } else {
                                    this.$refs.uToast.show({
                                        title: "扫码错误" + res.message,
                                        type: "error"
                                    })
                                    this.voiceSpeech('../../static/fail.mp3');
                                    setTimeout(this.updateFocus, 200);
                                }
                            } else {
                                this.$refs.uToast.show({
                                    title: "扫码错误" + res.message,
                                    type: "error"
                                })
                                this.voiceSpeech('../../static/fail.mp3');
                                setTimeout(this.updateFocus, 200);
                            }
                        })
                    }
                })
            },
            inbound() {
                var postData = {
                    MainData: {
                        "barcode": this.inboundBarcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/ProductRequestInbound', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.inboundBarcode = "";
                        this.address = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.addressFocus = false;
                this.$nextTick(function(x) {
                    if (this.inboundBarcode != '') {
                        this.addressFocus = true;
                    }
                })
            },
            deleteList(res) {
                var sn = '';
                this.matInfos.map((item, index) => {
                    if (item.innerCode == res) {
                        this.matInfos.splice(index, 1);
                        sn = item.sn;
                        var tmp = this.matTotal.find(x => x.matCode == item.matCode);
                        if (tmp) {
                            tmp.matQuantity -= parseInt(item.matQty);
                        } else {
                        }
                    }
                })
                this.sns.map((item, index) => {
                    if (item == res) {
                        this.sns.splice(index, 1);
                    }
                })
            },
            submit() {
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: 'error'
                    })
                    return;
                }
                if (this.sns.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描产品条码",
                        type: 'error'
                    })
                    return;
                }
                this.$u.post('/api/Bill_group_stock_product/ProductBoxing', {
                    MainData: {
                        "barcode": this.barcode,
                        "orderNo": this.orderNo,
                        "isFull": this.check
                    },
                    DetailData: this.matInfos,
                    DelKeys: this.sns
                }).then(res => {
                    if (res.status) {
                        uni.$showMsg('组盘成功!')
                        this.barcode = "";
                        this.matInfos = [];
                        this.sns = [];
                        this.matTotal = [];
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    uni.showToast.show({
                        title: err.message,
                        type: 'error'
                    })
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 30px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/productoutbound/productoutbound.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,315 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0" style="width: 95%;">
                <view style="margin-top: 10px;margin-left: 20px;">
                    <u-sticky offset-top="0" zIndex="999" bgColor="#fff" style="width: 100%;">
                        <view style="background-color: #fff; padding-bottom: 20rpx;">
                            <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
                            <uni-forms ref="formData" label-width="120">
                                <uni-forms-item label="出库地址" style="background-color: #fff;">
                                    <uni-easyinput type="text" maxlength="25" :focus="true" v-model="outAddress"
                                        placeholder="请输入出库地址" ref='midInput' />
                                </uni-forms-item>
                            </uni-forms>
                        </view>
                    </u-sticky>
                    <uni-list class="body">
                        <uni-list-item direction="column" v-for="(item,index) in stockInfo" :key="item.id">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <checkbox @click="click(item)"></checkbox>
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">托盘号:{{item.barcode}}</view>
                                        <view class="uni-note">货位编号:{{item.locationNo}}</view>
                                        <view class="uni-note">物料编码:{{item.matCode}}</view>
                                        <view class="uni-note">物料名称:{{item.matName}}</view>
                                        <view class="uni-note">安规:{{item.safety_regulations}}</view>
                                        <view class="uni-note">数量:{{item.quantity}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                    <view style="background-color: #fff; padding: 20rpx,20rpx;" class="footerxy">
                        <u-sticky offset-top="80%" zIndex="999">
                            <button @click="outbound()" type="primary" size="default">出库确认</button>
                        </u-sticky>
                    </view>
                </view>
            </view>
            <view v-if="current === 1" style="width: 95%;">
                <uni-forms label-width="120" style="margin-top: 20px;margin-left: 20px;">
                    <uni-forms-item label="出库库位">
                        <uni-easyinput type="text" :focus="!focus" @input="getMatInfo" v-model="startpoint"
                            placeholder="请输入出库库位" ref='midInput' />
                    </uni-forms-item>
                    <uni-forms-item label="出库站点">
                        <uni-easyinput type="text" :focus="focus" v-model="endpoint" placeholder="请输入出库站点"
                            ref='midInput' />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="manualOutbound" type="primary" size="default"
                            style="margin-top: 2%;">发送任务</button>
                    </uni-forms-item>
                </uni-forms>
                <uni-list class="body">
                    <uni-list-item direction="column" v-for="(item,index) in matInfos" :key="index">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">序号:{{index}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">物料编号:{{item.mater_code}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">物料名称:{{item.mater_name}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">安规:{{item.safety}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">产品条码:{{item.product_barcode}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                items: ['手动出库', '指定出库'],
                current: 0,
                stockInfo: [],
                outItems: [],
                outAddress: "",
                pageNo: 1,
                searchValue: "",
                focus: false,
                startpoint: "",
                endpoint: "",
                matInfos: [],
            }
        },
        onLoad(res) {
            this.getData();
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        methods: {
            onClickItem(e) {
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                }
            },
            search() {
                this.$nextTick(() => {
                    this.pageNo = 1;
                    this.getData();
                })
            },
            getData() {
                var postData = {
                    MainData: {
                        system: "KB",
                        matCode: this.searchValue
                    },
                    Extra: this.pageNo
                }
                this.$u.post('/api/VV_StockProduct/GetStockInfo', postData).then((res) => {
                    if (res.status) {
                        if (res.data) {
                            if (this.pageNo == 1) {
                                this.stockInfo = res.data;
                            } else {
                                this.stockInfo = this.stockInfo.concat(res.data);
                            }
                        } else {
                            this.$refs.uToast.show({
                                title: res.message,
                            });
                        }
                    } else {
                        this.stockInfo = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            getMatInfo() {
                this.$nextTick(() => {
                    if (this.startpoint != "") {
                        if (this.startpoint.length == 20) {
                            var postData = {
                                MainData: {
                                    locationCode: this.startpoint
                                }
                            }
                            this.$u.post('/api/StockOperate/GetProductMatInfo', postData).then(res => {
                                if (res.status) {
                                    this.matInfos = res.data;
                                    this.focus = true;
                                } else {
                                    this.$refs.uToast.show({
                                        title: res.message,
                                        type: "error"
                                    });
                                    return;
                                }
                            })
                        } else {
                            this.$refs.uToast.show({
                                title: "库位号扫描错误",
                                type: "error"
                            });
                            return;
                        }
                    }
                })
            },
            manualOutbound() {
                if (this.startpoint == "") {
                    this.$refs.uToast.show({
                        title: "请输入起始地址",
                        type: "error"
                    });
                    return;
                }
                if (this.endpoint == "") {
                    this.$refs.uToast.show({
                        title: "请输入出库地址",
                        type: "error"
                    });
                    return;
                }
                if (this.matInfos.length == 0) {
                    this.$refs.uToast.show({
                        title: "无库存信息",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "locationCode": this.startpoint,
                        "endPoint": this.endpoint
                    },
                }
                this.$u.post('/api/Outbound/ProductOutboundByLocation', postData).then((res) => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "出库成功",
                            type: "success"
                        });
                        this.startpoint = "";
                        this.endPoint = "";
                        this.matInfos = [];
                    } else {
                        this.$refs.uToast.show({
                            title: "出库失败" + res.message,
                            type: "error"
                        });
                    }
                })
            },
            outbound() {
                if (this.outItems.length == 0) {
                    this.$refs.uToast.show({
                        title: "请选择要出库的数据",
                        type: "error"
                    });
                    return;
                }
                if (this.outItems.length > 1) {
                    this.$refs.uToast.show({
                        title: "请选择一条要出库的数据",
                        type: "error"
                    });
                    return;
                }
                if (this.outAddress == "") {
                    this.$refs.uToast.show({
                        title: "请输入出库地址",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "locationCode": this.outItems[0].locationNo,
                        "endPoint": this.outAddress
                    },
                }
                this.$u.post('/api/Outbound/ProductOutboundByLocation', postData).then((res) => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "出库成功",
                            type: "success"
                        });
                        this.outAddress = "";
                        this.outItems = [];
                        this.stockInfo = [];
                        this.pageNo = 1;
                        this.search();
                    } else {
                        this.$refs.uToast.show({
                            title: "出库失败" + res.message,
                            type: "error"
                        });
                    }
                })
            },
            click(e) {
                if (this.outItems.find(x => x.barcode == e.barcode)) {
                    this.outItems.map((item, index) => {
                        if (item.barcode == e.barcode) {
                            this.outItems.splice(index, 1);
                        }
                    })
                } else {
                    this.outItems.push(e);
                }
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .footer {
        // padding-top: 50%;
    }
    .footerxy {
        width: 100%;
        height: 140rpx;
        text-align: center;
        position: fixed;
        /*1、【relative】相对定位;2、【absolute】绝对定位;3、【fixed】固定定位;4、【static】默认值;5、【sticky】粘性定位。*/
        left: 0px;
        /*定位:离页面左边0px的位置*/
        bottom: 0px;
        /*定位:离页面底部0px的位置*/
        padding-top: 20rpx;
        margin-left: 20px;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/rawhandoutbound/handoutbound.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,255 @@
<template>
    <view>
        <u-sticky offset-top="0" zIndex="999" bgColor="#fff" style="width: 100%;">
            <view style="background-color: #fff; padding-bottom: 20rpx;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
                <uni-forms ref="formData" label-width="120">
                    <uni-forms-item label="出库地址" style="background-color: #fff;">
                        <uni-easyinput type="text" maxlength="25" :focus="true" v-model="outAddress"
                            placeholder="请输入出库地址" ref='midInput' />
                    </uni-forms-item>
                </uni-forms>
            </view>
        </u-sticky>
        <uni-list class="body">
            <uni-list-item direction="column" v-for="(item,index) in stockInfo" :key="item.id">
                <template v-slot:body>
                    <view class="uni-list-box">
                        <checkbox @click="click(item)"></checkbox>
                        <view class="uni-content">
                            <view class="uni-title-sub uni-ellipsis-2">托盘号:{{item.barcode}}</view>
                            <view class="uni-note">货位编号:{{item.locationNo}}</view>
                            <view class="uni-note">物料编码:{{item.matCode}}</view>
                            <view class="uni-note">物料名称:{{item.matName}}</view>
                            <view class="uni-note">数量:{{item.quantity}}</view>
                        </view>
                    </view>
                </template>
            </uni-list-item>
        </uni-list>
        <view style="background-color: #fff; padding: 20rpx,20rpx;" class="footerxy">
            <u-sticky offset-top="80%" zIndex="999">
                <button @click="outbound()" type="primary" size="default">出库确认</button>
            </u-sticky>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                stockInfo: [],
                outItems: [],
                outAddress: "",
                pageNo: 1,
                searchValue: ""
            }
        },
        onLoad(res) {
            this.getData();
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        methods: {
            search() {
                this.$nextTick(() => {
                    this.pageNo = 1;
                    this.getData();
                })
            },
            getData() {
                var postData = {
                    MainData: {
                        system: "ZB",
                        matCode: this.searchValue
                    },
                    Extra: this.pageNo
                }
                this.$u.post('/api/VV_StockGroup/GetStockInfo', postData).then((res) => {
                    if (res.status) {
                        if (res.data) {
                            if (this.pageNo == 1) {
                                this.stockInfo = res.data;
                            } else {
                                this.stockInfo = this.stockInfo.concat(res.data);
                            }
                        }else{
                            this.$refs.uToast.show({
                                title: res.message,
                            });
                        }
                    }else{
                        this.stockInfo = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            outbound() {
                if (this.outItems.length == 0) {
                    this.$refs.uToast.show({
                        title: "请选择要出库的数据",
                        type: "error"
                    });
                    return;
                }
                if (this.outItems.length > 1) {
                    this.$refs.uToast.show({
                        title: "请选择一条要出库的数据",
                        type: "error"
                    });
                    return;
                }
                if (this.outAddress == "") {
                    this.$refs.uToast.show({
                        title: "请输入出库地址",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "id": this.outItems[0].id,
                        "endPoint": this.outAddress
                    },
                }
                this.$u.post('/api/Outbound/HandOutbound', postData).then((res) => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "出库成功",
                            type: "success"
                        });
                        this.outAddress = "";
                        this.outItems = [];
                        this.stockInfo = [];
                        this.pageNo = 1;
                        this.search();
                    } else {
                        this.$refs.uToast.show({
                            title: "出库失败" + res.message,
                            type: "error"
                        });
                    }
                })
            },
            click(e) {
                if (this.outItems.find(x => x.barcode == e.barcode)) {
                    this.outItems.map((item, index) => {
                        if (item.barcode == e.barcode) {
                            this.outItems.splice(index, 1);
                        }
                    })
                } else {
                    this.outItems.push(e);
                }
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 60px;
        text-align: center;
        z-index: 999;
        left: 40px;
        height: 20%;
    }
    .footer {
        // padding-top: 30%;
    }
    .body {
        padding-bottom: 80px;
        background-color: #f1f3f4;
    }
    .footerxy {
        width: 100%;
        height: 140rpx;
        text-align: center;
        position: fixed;
        /*1、【relative】相对定位;2、【absolute】绝对定位;3、【fixed】固定定位;4、【static】默认值;5、【sticky】粘性定位。*/
        left: 0px;
        /*定位:离页面左边0px的位置*/
        bottom: 0px;
        /*定位:离页面底部0px的位置*/
        padding-top: 20rpx;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/rawhandoutbound/kbhandoutbound.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,254 @@
<template>
    <view>
        <u-sticky offset-top="0" zIndex="999" bgColor="#fff" style="width: 100%;">
            <view style="background-color: #fff; padding-bottom: 20rpx;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
                <uni-forms ref="formData" label-width="120">
                    <uni-forms-item label="出库地址" style="background-color: #fff;">
                        <uni-easyinput type="text" maxlength="25" :focus="true" v-model="outAddress"
                            placeholder="请输入出库地址" ref='midInput' />
                    </uni-forms-item>
                </uni-forms>
            </view>
        </u-sticky>
        <uni-list class="body">
            <uni-list-item direction="column" v-for="(item,index) in stockInfo" :key="item.id">
                <template v-slot:body>
                    <view class="uni-list-box">
                        <checkbox @click="click(item)"></checkbox>
                        <view class="uni-content">
                            <view class="uni-title-sub uni-ellipsis-2">托盘号:{{item.barcode}}</view>
                            <view class="uni-note">货位编号:{{item.locationNo}}</view>
                            <view class="uni-note">物料编码:{{item.matCode}}</view>
                            <view class="uni-note">物料名称:{{item.matName}}</view>
                            <view class="uni-note">数量:{{item.quantity}}</view>
                        </view>
                    </view>
                </template>
            </uni-list-item>
        </uni-list>
        <view style="background-color: #fff; padding: 20rpx,20rpx;" class="footer">
            <u-sticky offset-top="80%" zIndex="999">
                <button @click="outbound()" type="primary" size="default" style="margin-top: 2%;">出库确认</button>
            </u-sticky>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                stockInfo: [],
                outItems: [],
                outAddress: "",
                pageNo: 1,
                searchValue: ""
            }
        },
        onLoad(res) {
            this.getData();
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        methods: {
            search() {
                this.$nextTick(() => {
                    this.pageNo = 1;
                    this.getData();
                })
            },
            getData() {
                var postData = {
                    MainData: {
                        system: "KB",
                        matCode: this.searchValue
                    },
                    Extra: this.pageNo
                }
                this.$u.post('/api/VV_StockGroup/GetStockInfo', postData).then((res) => {
                    if (res.status) {
                        if (res.data) {
                            if (this.pageNo == 1) {
                                this.stockInfo = res.data;
                            } else {
                                this.stockInfo = this.stockInfo.concat(res.data);
                            }
                        } else {
                            this.$refs.uToast.show({
                                title: res.message,
                            });
                        }
                    } else {
                        this.stockInfo = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            outbound() {
                if (this.outItems.length == 0) {
                    this.$refs.uToast.show({
                        title: "请选择要出库的数据",
                        type: "error"
                    });
                    return;
                }
                if (this.outItems.length > 1) {
                    this.$refs.uToast.show({
                        title: "请选择一条要出库的数据",
                        type: "error"
                    });
                    return;
                }
                if (this.outAddress == "") {
                    this.$refs.uToast.show({
                        title: "请输入出库地址",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "id": this.outItems[0].id,
                        "endPoint": this.outAddress
                    },
                }
                this.$u.post('/api/Outbound/HandOutbound', postData).then((res) => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "出库成功",
                            type: "success"
                        });
                        this.outAddress = "";
                        this.outItems = [];
                        // this.stockInfo.map((x, index) => {
                        //     this.stockInfo.splice(index, 1)
                        // })
                        this.stockInfo = [];
                        this.pageNo = 1;
                        this.search();
                    } else {
                        this.$refs.uToast.show({
                            title: "出库失败" + res.message,
                            type: "error"
                        });
                    }
                })
            },
            click(e) {
                if (this.outItems.find(x => x.barcode == e.barcode)) {
                    this.outItems.map((item, index) => {
                        if (item.barcode == e.barcode) {
                            this.outItems.splice(index, 1);
                        }
                    })
                } else {
                    this.outItems.push(e);
                }
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 60px;
        text-align: center;
        z-index: 999;
        left: 40px;
        height: 20%;
    }
    .body {
        padding-bottom: 80px;
        background-color: #f1f3f4;
    }
    .footer {
        width: 100%;
        height: 140rpx;
        text-align: center;
        position: fixed;
        /*1、【relative】相对定位;2、【absolute】绝对定位;3、【fixed】固定定位;4、【static】默认值;5、【sticky】粘性定位。*/
        left: 0px;
        /*定位:离页面左边0px的位置*/
        bottom: 0px;
        /*定位:离页面底部0px的位置*/
        padding-top: 10rpx;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/rawhandoutbound/manualoutbound.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,194 @@
<template>
    <view>
        <view class="header">
            <uni-forms label-width="120">
                <uni-forms-item>
                    <uni-easyinput type="text" @input="inputChange()" v-model="locationCode" placeholder="请扫码"
                        ref='midInput' :focus="true" />
                </uni-forms-item>
                <uni-forms-item>
                    <button @click="submit" type="primary" size="default" style="margin-top: 2%;">出库</button>
                </uni-forms-item>
            </uni-forms>
        </view>
        <uni-list class="footer">
            <uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
                <template v-slot:body>
                    <view class="uni-list-box">
                        <view class="uni-content">
                            <!-- <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">内箱标签:{{item.innerBoxCode}}</view> -->
                            <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">物料编码:{{item.matCode}}
                            </view>
                            <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">物料名称:{{item.matName}}
                            </view>
                            <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">数量:{{item.matQty}}
                            </view>
                        </view>
                    </view>
                </template>
            </uni-list-item>
        </uni-list>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                locationCode: "",
                matInfo: []
            }
        },
        onLoad(res) {
            //this.hideboard();
        },
        methods: {
            submit() {
                if (this.locationCode.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫码",
                        type: "error"
                    })
                    return;
                }
                var param = {
                    MainData: {
                        "locationCode": this.locationCode
                    }
                };
                this.$u.post('/api/StockOperate/ManualOutbound', param).then(resdt => {
                    if (resdt.status) {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "success"
                        })
                        this.locationCode = "";
                        this.matInfo = [];
                    } else {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChange(e) {
                this.$nextTick(() => {
                    if (this.locationCode.length == 0) {
                        return;
                    }
                    this.matInfo = [];
                    var param = {
                        MainData: {
                            "locationCode": this.locationCode
                        }
                    }
                    this.$u.post('/api/StockOperate/GetStockByLocationCode', param).then(result => {
                        if (result.status) {
                            this.matInfo = result.data;
                        } else {
                            this.$refs.uToast.show({
                                title: result.message,
                                type: "error"
                            })
                        }
                    })
                })
            },
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        // padding-top: 30%;
    }
    .header {
        width: 100%;
        height: 150px;
        background-color: #ffffff;
        padding: 20rpx 40rpx;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/rawhandoutbound/rawhandoutbound.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,611 @@
<template>
    <view>
        <u-sticky offset-top="1" zIndex="999" bgColor="#fff">
            <view style="background-color: #fff; padding-bottom: 20px;">
                <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
                </uni-segmented-control>
            </view>
        </u-sticky>
        <view v-if="current === 0" class="headerstyle">
            <view class="itemstyle">
                <u-sticky offset-top="90" zIndex="999" bgColor="#fff">
                    <view style="background-color: #fff; ">
                        <uni-search-bar @confirm="zbsearch" v-model="zbsearchValue"></uni-search-bar>
                        <uni-forms ref="formData" label-width="120">
                            <!-- <uni-forms-item label="楼层" style="background-color: #fff;width: 90%;margin-left: 5%;">
                                <uni-data-select v-model="floor" :localdata="floorrange"></uni-data-select>
                            </uni-forms-item> -->
                            <uni-forms-item label="出库地址" style="background-color: #fff;width: 90%;margin-left: 5%;">
                                <uni-easyinput type="text" maxlength="25" :focus="true" v-model="zboutAddress"
                                    placeholder="请输入出库地址" ref='midInput' />
                            </uni-forms-item>
                            <uni-forms-item></uni-forms-item>
                        </uni-forms>
                    </view>
                </u-sticky>
                <uni-list class="body">
                    <uni-list-item direction="column" v-for="(item,index) in zbstockInfo" :key="index">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <checkbox @click="zbclick(item)"></checkbox>
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">托盘号:{{item.barcode}}</view>
                                    <view class="uni-note">货位编号:{{item.locationNo}}</view>
                                    <view class="uni-note">物料编码:{{item.matCode}}</view>
                                    <view class="uni-note">物料名称:{{item.matName}}</view>
                                    <view class="uni-note">数量:{{item.quantity}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
                <view style="background-color: #fff; padding: 20rpx,20rpx;" class="footerxy">
                    <u-sticky offset-top="80%" zIndex="999">
                        <button @click="zboutbound" type="primary" size="default">出库确认</button>
                    </u-sticky>
                </view>
            </view>
        </view>
        <view v-if="current === 1" class="headerstyle">
            <view class="itemstyle" style="margin: 20px 5%;width: 90%;">
                <uni-forms label-width="120">
                    <uni-forms-item>
                        <uni-easyinput type="text" @input="inputChange" v-model="locationCode" placeholder="请扫码"
                            ref='midInput' :focus="true" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="submit" type="primary" size="default" style="margin-top: 2%;">出库</button>
                    </uni-forms-item>
                </uni-forms>
                <uni-list class="footer">
                    <uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">
                                        ç‰©æ–™ç¼–码:{{item.matCode}}
                                    </view>
                                    <view class="uni-title-sub uni-ellipsis-2">
                                        ç‰©æ–™åç§°ï¼š{{item.matName}}
                                    </view>
                                    <view class="uni-title-sub uni-ellipsis-2">
                                        æ•°é‡ï¼š{{item.matQty}}
                                    </view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <view v-if="current === 2" class="headerstyle">
            <view class="itemstyle">
                <u-sticky offset-top="90" zIndex="999" bgColor="#fff">
                    <view style="background-color: #fff;">
                        <uni-search-bar @confirm="kbsearch" v-model="kbsearchValue"></uni-search-bar>
                        <uni-forms ref="formData" label-width="120">
                            <uni-forms-item label="出库地址" style="background-color: #fff;width: 90%;margin-left: 5%;">
                                <uni-easyinput type="text" maxlength="25" :focus="true" v-model="kboutAddress"
                                    placeholder="请输入出库地址" ref='midInput' />
                            </uni-forms-item>
                            <uni-forms-item></uni-forms-item>
                        </uni-forms>
                    </view>
                </u-sticky>
                <uni-list class="body">
                    <uni-list-item direction="column" v-for="(item,index) in kbstockInfo" :key="item.id">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <checkbox @click="kbclick(item)"></checkbox>
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">托盘号:{{item.barcode}}</view>
                                    <view class="uni-note">货位编号:{{item.locationNo}}</view>
                                    <view class="uni-note">物料编码:{{item.matCode}}</view>
                                    <view class="uni-note">物料名称:{{item.matName}}</view>
                                    <view class="uni-note">数量:{{item.quantity}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
                <view style="background-color: #fff; padding: 20rpx,20rpx;" class="footerxy">
                    <u-sticky offset-top="80%" zIndex="999">
                        <button @click="kboutbound" type="primary" size="default">出库确认</button>
                    </u-sticky>
                </view>
            </view>
        </view>
        <view v-if="current === 3" class="headerstyle">
            <view class="itemstyle">
                <uni-forms style="margin-top: 30px;margin-left: 5%;width: 90%;" label-width="120">
                    <uni-forms-item label="楼层">
                        <uni-data-select v-model="printFloor" :localdata="printFloorRange"></uni-data-select>
                    </uni-forms-item>
                    <uni-forms-item label="内箱标签">
                        <uni-easyinput type="text" :focus="tagFocus" v-model="tag" placeholder="请扫描内箱标签" ref='midInput'
                            @input="tagInput" />
                    </uni-forms-item>
                    <uni-forms-item :label="tagmatCode"></uni-forms-item>
                    <!-- <uni-forms-item :label="tagmatName"></uni-forms-item> -->
                    <uni-forms-item :label="tagQty"></uni-forms-item>
                    <uni-forms-item label="拆分数量">
                        <uni-easyinput type="number" v-model="number" placeholder="请输入拆分数量" ref='midInput'
                            :focus="numberFocus" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="printTag" type="primary" size="default" style="margin-top: 2%;">打印标签</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    import { config } from '../../common/config.js'
    export default {
        data() {
            return {
                items: ['栈板手动出库', '栈板指定出库', '库宝手动出库', '内箱拆分'],
                current: 0,
                zbstockInfo: [],
                zboutItems: [],
                zboutAddress: "",
                zbpageNo: 1,
                zbsearchValue: "",
                kbstockInfo: [],
                kboutItems: [],
                kboutAddress: "",
                kbpageNo: 1,
                kbsearchValue: "",
                locationCode: "",
                matInfo: null,
                tagFocus: true,
                numberFocus: false,
                tag: "",
                number: 0,
                tagmatCode: "物料编码:",
                tagmatName: "物料名称:",
                tagQty: "包装数量:",
                printFloor: "",
                printFloorRange: [],
            }
        },
        mounted() {
            this.printFloorRange = config.printFloorRange;
            if(config.printFloor){
                this.printFloor = config.outboundFloor;
            }
        },
        onLoad(res) {
            this.zbgetData();
        },
        onReachBottom() {
            if (this.current === 0) {
                this.zbpageNo += 1;
                this.zbgetData();
            } else if (this.current === 2) {
                this.kbpageNo += 1;
                this.kbgetData();
            }
        },
        methods: {
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current === 0) {
                        this.zbgetData();
                    } else if (this.current === 2) {
                        this.kbgetData();
                    }
                }
            },
            printTag() {
                if (this.tag == "") {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                if (this.number <= 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        tag: this.tag,
                        number: this.number,
                        floor: this.printFloor
                    }
                }
                this.$u.post('/api/StockOperate/PrintTag', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "打印成功",
                            type: "success"
                        })
                        this.tagmatCode = "物料编码:";
                        this.tagQty = "包装数量:";
                        this.tag = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            tagInput() {
                this.$nextTick(() => {
                    var tagInfos = this.tag.split('|');
                    if (tagInfos.length == 7) {
                        this.tagmatCode = "物料编码:" + tagInfos[1];
                        this.tagQty = "物料数量:" + tagInfos[5];
                    } else {
                    }
                    this.numberFocus = true;
                })
            },
            submit() {
                if (this.locationCode.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫码",
                        type: "error"
                    })
                    return;
                }
                var param = {
                    MainData: {
                        "locationCode": this.locationCode
                    }
                };
                this.$u.post('/api/StockOperate/ManualOutbound', param).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "success"
                        })
                        this.locationCode = "";
                        this.matInfo = [];
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChange(e) {
                this.$nextTick(() => {
                    if (this.locationCode == "") {
                        this.matInfo = [];
                        return;
                    }
                    // this.matInfo = [];
                    var param = {
                        MainData: {
                            "locationCode": this.locationCode
                        }
                    }
                    this.$u.post('/api/StockOperate/GetStockByLocationCode', param).then(result => {
                        if (result.status) {
                            this.matInfo = result.data;
                            console.log(this.matInfo);
                        } else {
                            this.$refs.uToast.show({
                                title: result.message,
                                type: "error"
                            })
                        }
                    })
                })
            },
            zbsearch() {
                this.$nextTick(() => {
                    this.zbpageNo = 1;
                    this.zbgetData();
                })
            },
            zbgetData() {
                var postData = {
                    MainData: {
                        system: "ZB",
                        matCode: this.zbsearchValue
                    },
                    Extra: this.zbpageNo
                }
                this.$u.post('/api/VV_StockGroup/GetStockInfo', postData).then((res) => {
                    if (res.status) {
                        if (res.data) {
                            if (this.zbpageNo == 1) {
                                this.zbstockInfo = res.data;
                            } else {
                                this.zbstockInfo = this.zbstockInfo.concat(res.data);
                            }
                        } else {
                            this.$refs.uToast.show({
                                title: res.message,
                            });
                        }
                    } else {
                        this.zbstockInfo = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            zboutbound() {
                if (this.zboutItems.length == 0) {
                    this.$refs.uToast.show({
                        title: "请选择要出库的数据",
                        type: "error"
                    });
                    return;
                }
                if (this.zboutItems.length > 1) {
                    this.$refs.uToast.show({
                        title: "请选择一条要出库的数据",
                        type: "error"
                    });
                    return;
                }
                if (this.zboutAddress == "") {
                    this.$refs.uToast.show({
                        title: "请输入出库地址",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "id": this.zboutItems[0].id,
                        "endPoint": this.zboutAddress
                    },
                }
                this.$u.post('/api/Outbound/HandOutbound', postData).then((res) => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "出库成功",
                            type: "success"
                        });
                        this.zboutAddress = "";
                        this.zboutItems = [];
                        this.zbstockInfo = [];
                        this.zbpageNo = 1;
                        this.zbsearch();
                    } else {
                        this.$refs.uToast.show({
                            title: "出库失败" + res.message,
                            type: "error"
                        });
                    }
                })
            },
            zbclick(e) {
                if (this.zboutItems.find(x => x.barcode == e.barcode)) {
                    this.zboutItems.map((item, index) => {
                        if (item.barcode == e.barcode) {
                            this.zboutItems.splice(index, 1);
                        }
                    })
                } else {
                    this.zboutItems.push(e);
                }
            },
            kbsearch() {
                this.$nextTick(() => {
                    this.kbpageNo = 1;
                    this.kbgetData();
                })
            },
            kbgetData() {
                var postData = {
                    MainData: {
                        system: "kb",
                        matCode: this.kbsearchValue
                    },
                    Extra: this.kbpageNo
                }
                this.$u.post('/api/VV_StockGroup/GetStockInfo', postData).then((res) => {
                    if (res.status) {
                        if (res.data) {
                            if (this.kbpageNo == 1) {
                                this.kbstockInfo = res.data;
                            } else {
                                this.kbstockInfo = this.kbstockInfo.concat(res.data);
                            }
                        } else {
                            this.$refs.uToast.show({
                                title: res.message,
                            });
                        }
                    } else {
                        this.kbstockInfo = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            kboutbound() {
                if (this.kboutItems.length == 0) {
                    this.$refs.uToast.show({
                        title: "请选择要出库的数据",
                        type: "error"
                    });
                    return;
                }
                if (this.kboutItems.length > 1) {
                    this.$refs.uToast.show({
                        title: "请选择一条要出库的数据",
                        type: "error"
                    });
                    return;
                }
                if (this.kboutAddress == "") {
                    this.$refs.uToast.show({
                        title: "请输入出库地址",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "id": this.kboutItems[0].id,
                        "endPoint": this.kboutAddress
                    },
                }
                this.$u.post('/api/Outbound/HandOutbound', postData).then((res) => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "出库成功",
                            type: "success"
                        });
                        this.kboutAddress = "";
                        this.kboutItems = [];
                        this.kbstockInfo = [];
                        this.kbpageNo = 1;
                        this.kbsearch();
                    } else {
                        this.$refs.uToast.show({
                            title: "出库失败" + res.message,
                            type: "error"
                        });
                    }
                })
            },
            kbclick(e) {
                if (this.kboutItems.find(x => x.barcode == e.barcode)) {
                    this.kboutItems.map((item, index) => {
                        if (item.barcode == e.barcode) {
                            this.kboutItems.splice(index, 1);
                        }
                    })
                } else {
                    this.kboutItems.push(e);
                }
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .itemstyle {
        // margin-top: 30px;
        // margin-left: 5%;
    }
    .headerstyle {
        width: 100%;
    }
    .body {
        padding-bottom: 80px;
        background-color: #f1f3f4;
    }
    .footerxy {
        width: 100%;
        height: 140rpx;
        text-align: center;
        position: fixed;
        /*1、【relative】相对定位;2、【absolute】绝对定位;3、【fixed】固定定位;4、【static】默认值;5、【sticky】粘性定位。*/
        left: 0px;
        /*定位:离页面左边0px的位置*/
        bottom: 0px;
        /*定位:离页面底部0px的位置*/
        padding-top: 20rpx;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/raworderboxing/inboundorder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,173 @@
<template>
    <view>
        <u-sticky>
            <view style="background-color: #ffffff;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
            </view>
        </u-sticky>
        <uni-list :border="true">
            <uni-list-item direction="column" clickable @click="groupClick(item.inboundOrderNo)" link
                :to="page+item.inboundOrderNo" v-for="item in allReceivingOrders" :key="item.inboundOrderNo">
                <template v-slot:body>
                    <uni-group margin-top="20">
                        <view> å•号:{{item.inboundOrderNo}} </view>
                        <view> åˆ›å»ºäºº:{{item.creater}} </view>
                        <view> æ—¥æœŸ:{{item.createDate}} </view>
                    </uni-group>
                </template>
            </uni-list-item>
        </uni-list>
        <uni-load-more :status="status" v-if="loadVisible"></uni-load-more>
        <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                page: "/pages/raworderboxing/raworderboxing?orderNo=",
                loadVisible: false,
                searchValue: "",
                status: "more",
                allReceivingOrders: [],
                pageNo: 1,
                scrollTop: 0
            }
        },
        onLoad(res) {
            this.getData();
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        onPageScroll(e) {
            this.scrollTop = e.scrollTop;
        },
        methods: {
            search(res) {
                this.getData();
            },
            groupClick() {
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.searchValue,
                        pageNo: this.pageNo
                    },
                }
                this.$u.post('/api/InboundOrder/GetInboundOrders', postData).then((res) => {
                    if (res.status) {
                        if (res.data.length > 0) {
                            if (this.searchValue == '') {
                                this.allReceivingOrders = this.allReceivingOrders.concat(res.data);
                                // this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            } else {
                                this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            }
                        } else {
                            this.status = 'noMore';
                            //this.allReceivingOrders = [];
                            this.loadVisible = true;
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/raworderboxing/orderboxing.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,353 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0">
                <uni-forms style="margin-top: 30px;margin-left: 20px;width: 100%;" label-width="180">
                    <uni-forms-item :label="label">
                    </uni-forms-item>
                    <uni-forms-item label="托盘条码:">
                        <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="true" v-model="barcode"
                            @input="barcodeInput" />
                    </uni-forms-item>
                    <uni-forms-item label="内箱标签:">
                        <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="focus" v-model="materSn"
                            @input="snInput" />
                    </uni-forms-item>
                    <!-- <uni-forms-item style="display: none;" label="内箱标签:">
                        <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="!focus" />
                    </uni-forms-item> -->
                    <uni-forms-item>
                        <checkbox checked="check">是否满盘</checkbox>
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="submit" type="primary" size="default" style="margin-top: 2%;">组盘</button>
                    </uni-forms-item>
                </uni-forms>
                <uni-list class="footer">
                    <uni-list-item direction="column" v-for="item in matTotal" :key="item.matCode">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                    <uni-list-item direction="column" v-for="(item,index) in matInfos" :key="item.sn">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                    @click="deleteList(item.sn)">
                                </uni-icons>
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">订单号:{{item.orderNo}}</view>
                                    <view class="uni-note">物料编码:{{item.matCode}}</view>
                                    <!-- <view class="uni-note">生产日期:{{item.matProductionDate}}</view> -->
                                    <view class="uni-note">数量:{{item.matQty}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
            <view v-if="current === 1">
                <uni-forms style="margin-top: 30px;margin-left: 20px;width: 100%;" label-width="120">
                    <uni-forms-item label="托盘条码">
                        <uni-easyinput type="text" :focus="!addressFocus" v-model="inboundBarcode" placeholder="请扫描托盘条码"
                            ref='midInput' @input="inputChangebarcode" />
                    </uni-forms-item>
                    <uni-forms-item label="地址条码">
                        <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                            :focus="addressFocus" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库确认</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
            <view v-if="current === 2">
                <uni-list :border="true">
                    <uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="index">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view style="font-size: 18px;">单据号:{{orderNo}}</view>
                                    <view style="font-size: 18px;">物料编码:{{item.matCode}}</view>
                                    <view style="font-size: 18px;">物料名称:{{item.matName}}</view>
                                    <view style="font-size: 18px;">数量:{{item.totalQty}}</view>
                                    <view style="font-size: 18px;">单位:{{item.matUnit}}</view>
                                    <view style="font-size: 18px;">组盘数量:{{item.boxQty}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                items: ['组盘', '入库', '单据信息'],
                current: 0,
                matTotal: [],
                matInfos: [],
                orderNo: "",
                label: "",
                orderInfo: [],
                focus: false,
                barcode: "",
                materSn: "",
                sns: [],
                addressFocus: false,
                inboundBarcode: "",
                address: "",
                check: true
            }
        },
        onShow() {},
        onLoad(res) {
            this.focus = false;
            this.addressFocus = false;
            this.orderNo = res.orderNo;
            this.label = "单据编号:" + this.orderNo;
            this.getData();
        },
        methods: {
            voiceSpeech(src) {
                innerAudioContext.src = src; // '../../static/success.mp3';
                innerAudioContext.play();
            },
            updateFocus() {
                this.$nextTick(() => {
                    // this.materSn = '';
                    if (!this.focus) {
                        this.focus = true;
                    }
                });
            },
            barcodeFocus() {
                this.barcode = '';
                if (this.focus) {
                    this.focus = false;
                }
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.orderNo
                    },
                }
                this.$u.post('/api/ErpOrder/GetReceivingOrderInfo', postData).then((res) => {
                    if (res.status) {
                        this.orderInfo = res.data;
                        if (this.orderInfo.length > 3) {
                            this.loadVisible = true;
                        }
                    }
                })
            },
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current == 2) {
                        this.getData();
                    }
                }
            },
            barcodeInput() {
                this.$nextTick(function(x) {
                    if (this.barcode.length > 0) {
                        if (this.barcode.substring(0, 1) == 'A' || this.barcode.substring(0, 2) == 'TP') {
                            this.focus = true;
                        } else {
                            this.$refs.uToast.show({
                                title: "扫码错误,请扫描托盘码",
                                type: "error"
                            })
                        }
                    }
                })
            },
            snInput() {
                this.$nextTick(() => {
                    if (this.materSn != "") {
                        this.focus = false;
                        var matSn = this.materSn;
                        setTimeout(() => {
                            this.materSn = "";
                        }, 10);
                        var matInfo = matSn.split('|');
                        if (matInfo.length == 7) {
                            var matObj = {
                                matCode: matInfo[1],
                                matProductionDate: matInfo[3],
                                matQty: matInfo[5],
                                orderNo: matInfo[6],
                                sn: matSn
                            }
                            var temp = this.matInfos.find(x => x.orderNo == matObj.orderNo);
                            if (!temp) {
                                var tmp = this.matTotal.find(x => x.matCode == matObj.matCode);
                                if (!tmp) {
                                    this.matTotal.push({
                                        matCode: matObj.matCode,
                                        matQuantity: parseInt(matObj.matQty)
                                    })
                                } else {
                                    tmp.matQuantity += parseInt(matObj.matQty);
                                }
                                this.sns.push(matSn);
                                this.matInfos.push(matObj);
                                setTimeout(this.updateFocus,200);
                                setTimeout(()=>{
                                    this.voiceSpeech('../../static/success.mp3');
                                },100);
                            } else {
                                this.$refs.uToast.show({
                                    title: "扫码重复",
                                    type: "error"
                                })
                                setTimeout(this.updateFocus,200);
                                setTimeout(()=>{
                                    this.voiceSpeech('../../static/fail.mp3');
                                },100);
                            }
                        } else {
                            this.$refs.uToast.show({
                                title: "扫码错误,请扫描正确内箱码",
                                type: "error"
                            })
                            setTimeout(this.updateFocus,200);
                            setTimeout(()=>{
                                this.voiceSpeech('../../static/fail.mp3');
                            },100);
                        }
                    }
                })
            },
            inbound() {
                var postData = {
                    MainData: {
                        "barcode": this.inboundBarcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/RequestInbound', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.inboundBarcode = "";
                        this.address = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.addressFocus = false;
                this.$nextTick(function(x) {
                    if (this.inboundBarcode != '') {
                        this.addressFocus = true;
                    }
                })
            },
            deleteList(res) {
                var sn = '';
                this.matInfos.map((item, index) => {
                    if (item.sn == res) {
                        this.matInfos.splice(index, 1);
                        sn = item.sn;
                        var tmp = this.matTotal.find(x => x.matCode == item.matCode);
                        if (tmp) {
                            tmp.matQuantity -= parseInt(item.matQty);
                        } else {
                        }
                    }
                })
                this.sns.map((item, index) => {
                    if (item == res) {
                        this.sns.splice(index, 1);
                    }
                })
            },
            submit() {
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: 'error'
                    })
                    return;
                }
                if (this.sns.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: 'error'
                    })
                    return;
                }
                this.$u.post('/api/Bill_group_stock/PDA_ScanInStock', {
                    MainData: {
                        "pallet_barcode": this.barcode,
                        "orderNo": this.orderNo,
                        "isFull": this.check
                    },
                    DelKeys: this.sns
                }).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "组盘成功",
                            type: "success"
                        })
                        this.barcode = "";
                        this.matInfos = [];
                        this.sns = [];
                        this.matTotal = [];
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .footer {
        // padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/raworderboxing/raworderboxing.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,504 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view class="content">
            <view v-if="current === 0" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="180">
                        <uni-forms-item :label="label">
                        </uni-forms-item>
                        <uni-forms-item label="托盘条码:">
                            <uni-easyinput type="text" placeholder="请扫描托盘条码" ref='midInput' :focus="!focus"
                                v-model="barcode" @input="barcodeInput" />
                        </uni-forms-item>
                        <uni-forms-item label="内箱标签:">
                            <uni-easyinput type="text" placeholder="请扫描内箱标签" ref='midInput' :focus="focus"
                                v-model="materSn" @input="snInput" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <checkbox checked="check">是否满盘</checkbox>
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="submit" type="primary" size="default" style="margin-top: 2%;">组盘</button>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list>
                        <uni-list-item direction="column" v-for="item in matTotal" :key="item.matCode">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                        <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                        <uni-list-item direction="column" v-for="(item,index) in matInfos" :key="item.sn">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <uni-icons type="trash" size="22" style="position: absolute;right: 5%;"
                                        @click="deleteList(item.sn)">
                                    </uni-icons>
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">订单号:{{item.orderNo}}</view>
                                        <view class="uni-note">物料编码:{{item.matCode}}</view>
                                        <view class="uni-note">数量:{{item.matQty}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 1" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="!addressFocus" v-model="inboundBarcode"
                                placeholder="请扫描托盘条码" ref='midInput' @input="inputChangebarcode" />
                        </uni-forms-item>
                        <uni-forms-item label="地址条码">
                            <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                                :focus="addressFocus" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库确认</button>
                        </uni-forms-item>
                    </uni-forms>
                </view>
            </view>
            <view v-if="current === 2" class="headerstyle">
                <view class="itemstyle">
                    <uni-list :border="true">
                        <uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view style="font-size: 18px;">单据号:{{orderNo}}</view>
                                        <view style="font-size: 18px;">物料编码:{{item.materielCode}}</view>
                                        <!-- <view style="font-size: 18px;">物料名称:{{item.matName}}</view> -->
                                        <view style="font-size: 18px;">数量:{{item.orderQuantity}}</view>
                                        <view style="font-size: 18px;">单位:{{item.unit}}</view>
                                        <view style="font-size: 18px;">组盘数量:{{item.receiptQuantity}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 3" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item>
                            <uni-easyinput type="text" @input="releaseboxInput" v-model="value" placeholder="请扫码"
                                ref='midInput' :focus="true" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="releasebox" type="primary" size="default">解盘</button>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list>
                        <uni-list-item direction="column" v-if="value2">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">托盘号:{{value2}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                        <uni-list-item direction="column" v-for="item in matTotal" :key="item.matCode">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                        <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                        <uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                            ç‰©æ–™ç¼–码:{{item.matCode}}
                                        </view>
                                        <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                            ç‰©æ–™åç§°ï¼š{{item.matName}}
                                        </view>
                                        <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                            æ•°é‡ï¼š{{item.matQty}}
                                        </view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                items: ['组盘', '入库', '单据信息'],//, '解盘'
                current: 0,
                matTotal: [],
                matInfos: [],
                orderNo: "",
                label: "",
                orderInfo: [],
                focus: false,
                barcode: "",
                materSn: "",
                sns: [],
                addressFocus: false,
                inboundBarcode: "",
                address: "",
                check: true,
                value: "",
                matInfo: [],
                value2: "",
                matTotals:[]
            }
        },
        onShow() {},
        onLoad(res) {
            this.focus = false;
            this.addressFocus = false;
            this.orderNo = res.orderNo;
            this.label = "单据编号:" + this.orderNo;
            this.getData();
        },
        methods: {
            voiceSpeech(src) {
                innerAudioContext.src = src; // '../../static/success.mp3';
                innerAudioContext.play();
            },
            //解盘
            releasebox(){
                if (this.value.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫码",
                        type: "error"
                    })
                    return;
                }
                var param;
                var matInfo = this.value.split('|');
                if (matInfo.length == 7) {
                    param = {
                        MainData: {
                            "innerCode": this.value
                        }
                    }
                } else {
                    param = {
                        MainData: {
                            "barcode": this.value
                        }
                    }
                }
                this.$u.post('/api/StockOperate/ReleaseAllBox', param).then(resdt => {
                    if (resdt.status) {
                        uni.$showMsg('解盘成功!')
                        this.value = "";
                        this.matInfo = [];
                        this.matTotals = [];
                        this.value2 = "";
                    } else {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "error"
                        })
                    }
                })
            },
            releaseboxInput(){
                this.$nextTick(() => {
                    if (this.value.length == 0) {
                        return;
                    }
                    var matInfo = this.value.split('|');
                    this.matInfo = [];
                    if (matInfo.length == 7) {
                        this.$u.post('/api/StockOperate/GetStockInfoByInnerCode', {
                            MainData: {
                                "innerCode": this.value
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    } else {
                        this.$u.post('/api/StockOperate/GetStockInfoByBarcode', {
                            MainData: {
                                "barcode": this.value
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    }
                })
            },
            updateFocus() {
                this.$nextTick(() => {
                    this.materSn = '';
                    if (!this.focus) {
                        this.focus = true;
                    }
                });
            },
            barcodeFocus() {
                this.barcode = '';
                if (this.focus) {
                    this.focus = false;
                }
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.orderNo
                    },
                }
                this.$u.post('/api/InboundOrderDetail/GetInboundOrderDetails', postData).then((res) => {
                    if (res.status) {
                        this.orderInfo = res.data;
                        if (this.orderInfo.length > 3) {
                            this.loadVisible = true;
                        }
                    }
                })
            },
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current == 2) {
                        this.getData();
                    }
                }
            },
            barcodeInput() {
                this.$nextTick(function(x) {
                    if (this.barcode.length > 0) {
                        // if (this.barcode.substring(0, 1) == 'A' || this.barcode.substring(0, 2) == 'TP') {
                            this.focus = true;
                        // } else {
                        //     this.$refs.uToast.show({
                        //         title: "扫码错误,请扫描托盘码",
                        //         type: "error"
                        //     })
                        // }
                    }
                })
            },
            snInput() {
                this.$nextTick(() => {
                    if (this.materSn != "") {
                        this.focus = false;
                        var matSn = this.materSn;
                        setTimeout(() => {
                            this.materSn = "";
                        }, 10);
                        var matInfo = matSn.split('|');
                        if (matInfo.length == 7) {
                            var matObj = {
                                matCode: matInfo[1],
                                matProductionDate: matInfo[3],
                                matQty: matInfo[5],
                                orderNo: matInfo[6],
                                sn: matSn
                            }
                            var temp = this.matInfos.find(x => x.orderNo == matObj.orderNo);
                            if (!temp) {
                                var tmp = this.matTotal.find(x => x.matCode == matObj.matCode);
                                if (!tmp) {
                                    this.matTotal.push({
                                        matCode: matObj.matCode,
                                        matQuantity: parseInt(matObj.matQty)
                                    })
                                } else {
                                    tmp.matQuantity += parseInt(matObj.matQty);
                                }
                                this.sns.push(matSn);
                                this.matInfos.push(matObj);
                                setTimeout(this.updateFocus, 200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/success.mp3');
                                }, 100);
                            } else {
                                this.$refs.uToast.show({
                                    title: "扫码重复",
                                    type: "error"
                                })
                                setTimeout(this.updateFocus, 200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/fail.mp3');
                                }, 100);
                            }
                        } else {
                            this.$refs.uToast.show({
                                title: "扫码错误,请扫描正确内箱码",
                                type: "error"
                            })
                            setTimeout(this.updateFocus, 200);
                            setTimeout(() => {
                                this.voiceSpeech('../../static/fail.mp3');
                            }, 100);
                        }
                    }
                })
            },
            inbound() {
                var postData = {
                    MainData: {
                        "barcode": this.inboundBarcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/RequestInbound', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.inboundBarcode = "";
                        this.address = "";
                        setTimeout(()=>{
                            this.addressFocus = false;
                        },200);
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.addressFocus = false;
                this.$nextTick(function(x) {
                    if (this.inboundBarcode != '') {
                        this.addressFocus = true;
                    }
                })
            },
            deleteList(res) {
                var sn = '';
                this.matInfos.map((item, index) => {
                    if (item.sn == res) {
                        this.matInfos.splice(index, 1);
                        sn = item.sn;
                        var tmp = this.matTotal.find(x => x.matCode == item.matCode);
                        if (tmp) {
                            tmp.matQuantity -= parseInt(item.matQty);
                        } else {
                        }
                    }
                })
                this.sns.map((item, index) => {
                    if (item == res) {
                        this.sns.splice(index, 1);
                    }
                })
            },
            submit() {
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "请扫描托盘条码",
                        type: 'error'
                    })
                    return;
                }
                if (this.sns.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: 'error'
                    })
                    return;
                }
                this.$u.post('/api/InboundOrder/MaterielGroup', {
                    MainData: {
                        "pallet_barcode": this.barcode,
                        "orderNo": this.orderNo,
                        "isFull": this.check
                    },
                    DelKeys: this.sns
                }).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "组盘成功",
                            type: "success"
                        })
                        this.focus = false;
                        this.barcode = "";
                        this.matInfos = [];
                        this.sns = [];
                        this.matTotal = [];
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 30px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/raworderboxing/releaseboxing.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,237 @@
<template>
    <view>
        <view class="header">
            <uni-forms label-width="120">
                <uni-forms-item>
                    <uni-easyinput type="text" @input="inputChange()" v-model="value" placeholder="请扫码" ref='midInput'
                        :focus="true" />
                </uni-forms-item>
                <uni-forms-item>
                    <button @click="submit" type="primary" size="default" style="margin-top: 2%;">解盘</button>
                </uni-forms-item>
            </uni-forms>
        </view>
        <uni-list class="footer">
            <uni-list-item direction="column" v-if="value2">
                <label>{{value2}}</label>
            </uni-list-item>
            <uni-list-item direction="column" v-for="item in matTotal" :key="item.matCode">
                <template v-slot:body>
                    <view class="uni-list-box">
                        <view class="uni-content">
                            <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                            <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                        </view>
                    </view>
                </template>
            </uni-list-item>
            <uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
                <template v-slot:body>
                    <view class="uni-list-box">
                        <view class="uni-content">
                            <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">物料编码:{{item.matCode}}
                            </view>
                            <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">物料名称:{{item.matName}}
                            </view>
                            <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">数量:{{item.matQty}}
                            </view>
                        </view>
                    </view>
                </template>
            </uni-list-item>
        </uni-list>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                value: "",
                matInfo: [],
                value2: "",
                matTotal:[]
            }
        },
        onLoad(res) {
            //this.hideboard();
        },
        methods: {
            submit() {
                if (this.value.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫码",
                        type: "error"
                    })
                    return;
                }
                var param;
                var matInfo = this.value.split('|');
                if (matInfo.length == 7) {
                    param = {
                        MainData: {
                            "innerCode": this.value
                        }
                    }
                } else {
                    param = {
                        MainData: {
                            "barcode": this.value
                        }
                    }
                }
                this.$u.post('/api/StockOperate/ReleaseAllBox', param).then(resdt => {
                    if (resdt.status) {
                        uni.$showMsg('解盘成功!')
                        this.value = "";
                        this.matInfo = [];
                    } else {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChange(e) {
                this.$nextTick(() => {
                    if (this.value.length == 0) {
                        return;
                    }
                    var matInfo = this.value.split('|');
                    this.matInfo = [];
                    if (matInfo.length == 7) {
                        this.$u.post('/api/StockOperate/GetStockInfoByInnerCode', {
                            MainData: {
                                "innerCode": this.value
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotal = res.data.stockTotal;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    } else {
                        this.$u.post('/api/StockOperate/GetStockInfoByBarcode', {
                            MainData: {
                                "barcode": this.value
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotal = res.data.stockTotal;
                                // console.log(res.data);
                                // console.log(this.matTotal);
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    }
                })
            },
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        // padding-top: 30%;
    }
    .header {
        width: 100%;
        height: 150px;
        background-color: #ffffff;
        padding: 20rpx 40rpx;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/receiveorder/multiplereceiveorder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,199 @@
<template>
    <view>
        <u-sticky>
            <view style="background-color: #ffffff;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
            </view>
            <view>
                <navigator :url="page+codes" >
                    <button type="primary">确认</button>
                </navigator>
            </view>
        </u-sticky>
        <uni-list :border="true">
            <uni-list-item direction="column" v-for="(item,index) in allReceivingOrders" :key="item.receive_no">
                <template v-slot:body>
                    <uni-group margin-top="20">
                        <view>
                            <checkbox @click="click(item.receive_no)" ></checkbox> é¢†æ–™å•号:{{item.receive_no}}
                        </view>
                        <view style="margin-left: 30px;"> å·¥å•号:{{item.receive_code}} </view>
                        <!-- <view> æ—¥æœŸ:{{item.purchase_date}} </view> -->
                    </uni-group>
                </template>
            </uni-list-item>
        </uni-list>
        <uni-load-more :status="status" v-if="loadVisible"></uni-load-more>
        <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                page: "/pages/receiveorder/multiplereceiveorderout?receiveCodes=",
                loadVisible: false,
                searchValue: "",
                status: "more",
                allReceivingOrders: [],
                pageNo: 1,
                scrollTop: 0,
                receiveCodes: [],
                codes:""
            }
        },
        onShow() {
            this.pageNo = 1;
            this.getData();
        },
        onLoad(res) {
            this.pageNo = 1;
            this.getData();
        },
        onPageScroll(e) {
            this.scrollTop = e.scrollTop;
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        methods: {
            search(res) {
                this.pageNo = 1;
                this.getData();
            },
            click(e) {
                if (this.receiveCodes.find(x => x == e)) {
                    this.receiveCodes.map((item, index) => {
                        if (item == e) {
                            this.receiveCodes.splice(index, 1);
                        }
                    })
                } else {
                    this.receiveCodes.push(e);
                }
                this.codes = encodeURIComponent(JSON.stringify(this.receiveCodes));
            },
            gotoOut() {
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.searchValue,
                        pageNo: this.pageNo
                    },
                }
                this.$u.post('/api/ErpOrder/GetReceiveOrders', postData).then((res) => {
                    if (res.status) {
                        if (res.data) {
                            if (this.searchValue == '') {
                                this.allReceivingOrders = this.allReceivingOrders.concat(res.data);
                                // this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            } else {
                                this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            }
                        } else {
                            this.status = 'noMore';
                            this.allReceivingOrders = [];
                            this.loadVisible = true;
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/receiveorder/multiplereceiveorderout.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,597 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view>
            <view v-if="current === 0" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="单据编号:">
                            <uni-data-select v-model="orderNo"
                                :localdata="orderNosRange"></uni-data-select></uni-forms-item>
                        </uni-forms-item>
                        <uni-forms-item label="单据类型:生产领料单"></uni-forms-item>
                        <uni-forms-item label="内箱码:">
                            <uni-easyinput type="text" placeholder="请扫描内箱码" ref='midInput' :focus="true"
                                v-model="innerCode" @input="innercodeInput" />
                        </uni-forms-item>
                        <uni-forms-item :label="matCode"></uni-forms-item>
                        <uni-forms-item :label="matName"></uni-forms-item>
                        <uni-forms-item :label="currentQty"></uni-forms-item>
                        <uni-forms-item :label="orderQty"></uni-forms-item>
                        <uni-forms-item :label="scanQty"></uni-forms-item>
                    </uni-forms>
                </view>
            </view>
            <view v-if="current === 1" class="headerstyle">
                <view class="itemstyle">
                    <u-sticky>
                        <view style="background-color: #ffffff;">
                            <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
                        </view>
                    </u-sticky>
                    <uni-forms label-width="120">
                        <uni-forms-item label="区域"><uni-data-select v-model="value"
                                :localdata="range"></uni-data-select></uni-forms-item>
                        <uni-forms-item label="楼层"><uni-data-select v-model="floor"
                                :localdata="floorrange"></uni-data-select></uni-forms-item>
                    </uni-forms>
                    <uni-list :border="true">
                        <uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <button type="primary" style="position: absolute;right: 1%;" size="mini"
                                        @click="outbound(item.matCode)">出库</button>
                                    <view class="uni-content">
                                        <view style="font-size: 18px;">物料编码:{{item.matCode}}</view>
                                        <!-- <view style="font-size: 18px;">单据号:{{orderNo}}</view> -->
                                        <view style="font-size: 18px;">物料名称:{{item.matName}}</view>
                                        <view style="font-size: 18px;">单据数量:{{item.totalQty}}</view>
                                        <view style="font-size: 18px;">已分配数量:{{item.processQty}}</view>
                                        <view style="font-size: 18px;">出库数量:{{item.outQty}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
            <view v-if="current === 2" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="楼层">
                            <uni-data-select v-model="printfloor"
                                :localdata="printfloorrange"></uni-data-select></uni-forms-item>
                        <uni-forms-item label="内箱标签">
                            <uni-easyinput type="text" :focus="tagFocus" v-model="tag" placeholder="请扫描内箱标签"
                                ref='midInput' @input="tagInput" />
                        </uni-forms-item>
                        <uni-forms-item :label="tagmatCode"></uni-forms-item>
                        <uni-forms-item :label="tagmatName"></uni-forms-item>
                        <uni-forms-item :label="tagQty"></uni-forms-item>
                        <uni-forms-item label="拆分数量">
                            <uni-easyinput type="number" v-model="number" placeholder="请输入拆分数量" ref='midInput'
                                :focus="numberFocus" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="printTag" type="primary" size="default"
                                style="margin-top: 2%;">打印标签</button>
                        </uni-forms-item>
                    </uni-forms>
                </view>
            </view>
            <view v-if="current === 3" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item label="托盘条码">
                            <uni-easyinput type="text" :focus="!istrue" v-model="barcode" placeholder="请扫描托盘条码"
                                ref='midInput' @input="inputChangebarcode" />
                        </uni-forms-item>
                        <uni-forms-item label="地址条码">
                            <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                                :focus="istrue" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库</button>
                        </uni-forms-item>
                    </uni-forms>
                </view>
            </view>
            <view v-if="current === 4" class="headerstyle">
                <view class="itemstyle">
                    <uni-forms label-width="120">
                        <uni-forms-item>
                            <uni-easyinput type="text" @input="releaseboxInput" v-model="releasevalue" placeholder="请扫码"
                                ref='midInput' :focus="releasefocus" />
                        </uni-forms-item>
                        <uni-forms-item>
                            <button @click="releasebox" type="primary" size="default"
                                style="margin-top: 2%;">解盘</button>
                        </uni-forms-item>
                    </uni-forms>
                    <uni-list>
                        <uni-list-item direction="column" v-if="value2">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">托盘号:{{value2}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                        <uni-list-item direction="column" v-for="item in matTotals" :key="item.matCode">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                        <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                        <uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
                            <template v-slot:body>
                                <view class="uni-list-box">
                                    <view class="uni-content">
                                        <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                            ç‰©æ–™ç¼–码:{{item.matCode}}
                                        </view>
                                        <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                            ç‰©æ–™åç§°ï¼š{{item.matName}}
                                        </view>
                                        <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                            æ•°é‡ï¼š{{item.matQty}}
                                        </view>
                                    </view>
                                </view>
                            </template>
                        </uni-list-item>
                    </uni-list>
                </view>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    import {
        config
    } from '../../common/config';
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                items: ['条码扫描', '明细', '拆分', '入库'],
                current: 0,
                orderNo: "",
                orderInfo: [],
                label: "",
                innerCode: "",
                matCode: "物料编码:",
                matName: "物料名称:",
                orderQty: "需求数量:",
                currentQty: "已扫数量:",
                scanQty: "累计数量:",
                tagFocus: true,
                numberFocus: false,
                tag: "",
                number: "",
                tagmatCode: "物料编码:",
                tagmatName: "物料名称:",
                tagQty: "包装数量:",
                value: "KB",
                range: [],
                floor: "",
                floorrange: [],
                orderNos: [],
                orderNosRange: [],
                printfloor: "",
                printfloorrange: [],
                releasefocus: true,
                releasevalue: "",
                matInfo: [],
                matTotals: [],
                value2: "",
                searchValue: ""
            }
        },
        mounted() {
            this.printfloorrange = config.printFloorRange;
            this.floorrange = config.outboundFloorRange;
            if (config.outboundFloor) {
                this.floor = config.outboundFloor;
            }
            if (config.printFloor) {
                this.printfloor = config.printFloor;
            }
            this.range = config.warehouseRange;
            this.endTypeRange = config.outboundAreaRange;
            if (config.outboundArea) {
                this.endType = config.outboundArea;
            }
            if (config.warehouseArea) {
                this.value = config.warehouseArea;
            }
        },
        onLoad(res) {
            this.orderNos = JSON.parse(decodeURIComponent(res.receiveCodes));
            for (var i = 0; i < this.orderNos.length; i++) {
                this.orderNosRange.push({
                    value: this.orderNos[i],
                    text: this.orderNos[i]
                });
            }
        },
        methods: {
            voiceSpeech(src) {
                innerAudioContext.src = src; // '../../static/success.mp3';
                innerAudioContext.play();
            },
            updateFocus() {
                this.$nextTick(() => {
                    this.innerCode = '';
                    if (!this.focus) {
                        this.focus = true;
                    }
                });
            },
            search() {
                this.getData();
            },
            releasebox() {
                if (this.releasevalue.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫码",
                        type: "error"
                    })
                    return;
                }
                var param;
                var matInfo = this.releasevalue.split('|');
                if (matInfo.length == 7) {
                    param = {
                        MainData: {
                            "innerCode": this.releasevalue
                        }
                    }
                } else {
                    param = {
                        MainData: {
                            "barcode": this.releasevalue
                        }
                    }
                }
                this.$u.post('/api/StockOperate/ReleaseAllBox', param).then(resdt => {
                    if (resdt.status) {
                        uni.$showMsg('解盘成功!')
                        this.releasevalue = "";
                        this.matInfo = [];
                        this.matTotals = [];
                        this.value2 = "";
                    } else {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "error"
                        })
                    }
                })
            },
            releaseboxInput() {
                this.$nextTick(() => {
                    if (this.releasevalue.length == 0) {
                        return;
                    }
                    var matInfo = this.releasevalue.split('|');
                    this.matInfo = [];
                    if (matInfo.length == 7) {
                        this.$u.post('/api/StockOperate/GetStockInfoByInnerCode', {
                            MainData: {
                                "innerCode": this.releasevalue
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    } else {
                        this.$u.post('/api/StockOperate/GetStockInfoByBarcode', {
                            MainData: {
                                "barcode": this.releasevalue
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    }
                })
            },
            inbound() {
                if (this.barcode.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描托盘号",
                        type: "error"
                    })
                    return;
                }
                if (this.address.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描地址条码",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        "barcode": this.barcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/RequestInbound', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.barcode = "";
                        this.address = "";
                        this.istrue = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.istrue = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.istrue = true;
                    }
                })
            },
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current == 1) {
                        this.getData();
                    }
                }
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNos: JSON.stringify(this.orderNos),
                        searchValue: this.searchValue
                    },
                }
                this.$u.post('/api/ErpOrder/GetReceiveOrderInfos', postData).then((res) => {
                    if (res.status) {
                        this.orderInfo = res.data;
                        if (this.orderInfo.length > 3) {
                            this.loadVisible = true;
                        }
                    }
                })
            },
            innercodeInput() {
                this.$nextTick(() => {
                    if (this.innerCode == "") {
                        return;
                    }
                    if (this.orderNo == "") {
                        this.$refs.uToast.show({
                            title: "请选择领料单",
                            type: "error"
                        })
                        this.innerCode = "";
                        return;
                    }
                    var innerCode = this.innerCode;
                    setTimeout(() => {
                        this.innerCode = "";
                    }, 10);
                    if (innerCode.split('|').length == 7) {
                        var postData = {
                            MainData: {
                                orderNo: this.orderNo,
                                scanValue: innerCode
                            },
                        }
                        this.$u.post('/api/ErpOrder/UpdateReceiveOrder', postData).then((res) => {
                            if (res.status) {
                                this.matCode = "物料编码:" + res.data.matCode;
                                this.matName = "物料名称:" + res.data.matName;
                                this.orderQty = "需求数量:" + res.data.orderQty;
                                this.currentQty = "已扫数量:" + res.data.currentQty;
                                this.scanQty = "累计数量:" + res.data.scanQty;
                                if (res.message) {
                                    this.$refs.uToast.show({
                                        title: res.message,
                                        type: "error"
                                    })
                                    // setTimeout(this.updateFocus,200);
                                    setTimeout(() => {
                                        this.voiceSpeech('../../static/fail.mp3');
                                    }, 100);
                                    return;
                                }
                                // setTimeout(this.updateFocus,200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/success.mp3');
                                }, 100);
                            } else {
                                // this.innerCode = "";
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                                // setTimeout(this.updateFocus,200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/fail.mp3');
                                }, 100);
                            }
                        })
                    } else {
                        // this.innerCode = "";
                        this.$refs.uToast.show({
                            title: "内箱码扫描错误",
                            type: "error"
                        })
                        // setTimeout(this.updateFocus,200);
                        setTimeout(() => {
                            this.voiceSpeech('../../static/fail.mp3');
                        }, 100);
                    }
                    // this.innerCode = "";
                })
            },
            tagInput() {
                this.$nextTick(() => {
                    var tagInfos = this.tag.split('|');
                    if (tagInfos.length == 7) {
                        this.tagmatCode = "物料编码:" + tagInfos[1];
                        this.tagQty = "物料数量:" + tagInfos[5];
                    } else {
                    }
                    this.numberFocus = true;
                })
            },
            printTag() {
                if (this.tag == "") {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                if (this.number <= 0) {
                    this.$refs.uToast.show({
                        title: "请输入数量",
                        type: "error"
                    })
                    return;
                }
                if (this.printfloor.length <= 0) {
                    this.$refs.uToast.show({
                        title: "请选择楼层",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        tag: this.tag,
                        number: this.number,
                        floor: this.printfloor
                    }
                }
                this.$u.post('/api/StockOperate/PrintTag', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "打印成功",
                            type: "success"
                        })
                        this.tagmatCode = "物料编码:";
                        this.tagQty = "包装数量:";
                        this.tag = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            outbound(code) {
                if (this.floor == "") {
                    this.$refs.uToast.show({
                        title: "请选择楼层",
                        type: "error"
                    })
                    return;
                }
                if(this.value == ""){
                    this.$refs.uToast.show({
                        title: "请选择区域",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        matCode: code,
                        orderNos: JSON.stringify(this.orderNos),
                        system: this.value,
                        floor: this.floor
                    }
                }
                this.$u.post('/api/ErpOrder/ReceiveOrdersOutbound', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "成功",
                            type: "success"
                        })
                        this.getData();
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/receiveorder/receiveorder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,180 @@
<template>
    <view>
        <u-sticky>
            <view style="background-color: #ffffff;">
                <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
            </view>
        </u-sticky>
        <uni-list :border="true">
            <uni-list-item direction="column" clickable @click="groupClick(item.receiveOrderNo)" link
                :to="page+item.receiveOrderNo" v-for="item in allReceivingOrders" :key="item.receiveOrderNo">
                <template v-slot:body>
                    <uni-group margin-top="20">
                        <view> æ”¶è´§å•号:{{item.receiveOrderNo}} </view>
                        <!-- <view> è®¢å•类型:{{item.receiveOrderType}} </view>
                        <view> è®¢å•状态:{{item.receiveOrderStatus}} </view> -->
                        <view> ä¾›åº”商代号:{{item.suppliersId}} </view>
                    </uni-group>
                </template>
            </uni-list-item>
        </uni-list>
        <uni-load-more :status="status" v-if="loadVisible"></uni-load-more>
        <u-back-top :scroll-top="scrollTop" top="400"></u-back-top>
    </view>
</template>
<script>
    export default {
        data() {
            return {
                page: "/pages/receiveorder/receiveorderoutbound?orderNo=",
                loadVisible: false,
                searchValue: "",
                status: "more",
                allReceivingOrders: [],
                pageNo: 1,
                scrollTop: 0
            }
        },
        onLoad(res) {
            this.getData();
        },
        onPageScroll(e) {
            this.scrollTop = e.scrollTop;
        },
        onReachBottom() {
            this.pageNo += 1;
            this.getData();
        },
        methods: {
            search(res) {
                this.pageNo = 1;
                this.getData();
            },
            groupClick() {
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.searchValue,
                        pageNo: this.pageNo
                    },
                }
                this.$u.post('/api/ReceiveOrder/GetReceiveOrders', postData).then((res) => {
                    if (res.status) {
                        if(res.data.length > 0){
                            if (this.searchValue == '') {
                                this.allReceivingOrders = this.allReceivingOrders.concat(res.data);
                                // this.allReceivingOrders = res.data;
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            } else {
                                // this.allReceivingOrders = res.data;
                                if(postData.MainData.pageNo==1){
                                    this.allReceivingOrders = [];
                                }
                                this.allReceivingOrders = this.allReceivingOrders.concat(res.data);
                                if (this.allReceivingOrders.length > 3) {
                                    this.loadVisible = true;
                                } else {
                                    this.loadVisible = false;
                                }
                            }
                        }else{
                            this.status = 'noMore';
                            //this.allReceivingOrders = [];
                            this.loadVisible = true;
                        }
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        display: flex;
        position: fixed;
        width: 100%;
        top: 10px;
        text-align: center;
        z-index: 999;
        left: 30px;
        height: 20%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/receiveorder/receiveorderoutbound.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,620 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view v-if="current === 0" class="headerstyle">
            <view class="itemstyle">
                <uni-forms style="margin-left: 2%;margin-top: 20px;" label-width="180">
                    <uni-forms-item :label="label" style="margin-top: -20px;"></uni-forms-item>
                    <uni-forms-item label="单据类型:生产领料单" style="margin-top: -20px;"></uni-forms-item>
                    <uni-forms-item label="内箱码:" style="margin-top: -20px;">
                        <uni-easyinput type="text" placeholder="请扫描内箱码" ref='midInput' :focus="focus"
                            v-model="innerCode" @input="innercodeInput" />
                    </uni-forms-item>
                    <uni-forms-item :label="matCode" style="margin-top: -20px;"></uni-forms-item>
                    <uni-forms-item :label="matName" style="margin-top: -20px;"></uni-forms-item>
                    <uni-forms-item :label="currentQty" style="margin-top: -20px;"></uni-forms-item>
                    <uni-forms-item :label="orderQty" style="margin-top: -20px;"></uni-forms-item>
                    <uni-forms-item :label="scanQty" style="margin-top: -20px;"></uni-forms-item>
                    <uni-forms-item :label="remaindQty" style="margin-top: -20px;"></uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 1" class="headerstyle">
            <view class="itemstyle">
                <u-sticky>
                    <!-- <view style="background-color: #ffffff;">
                        <uni-search-bar @confirm="search" v-model="searchValue"></uni-search-bar>
                    </view> -->
                </u-sticky>
                <!-- <uni-forms label-width="180">
                    <uni-forms-item label="区域">
                        <uni-data-select v-if="show" v-model="value" :localdata="range"></uni-data-select>
                    </uni-forms-item>
                    <uni-forms-item label="楼层">
                        <uni-data-select v-if="show" v-model="floor" :localdata="floorrange"></uni-data-select>
                    </uni-forms-item>
                    <uni-forms-item label="出库区域">
                        <uni-data-select v-if="show" v-model="endType" :localdata="endTypeRange"></uni-data-select>
                    </uni-forms-item>
                </uni-forms> -->
                <uni-list :border="true">
                    <uni-list-item direction="column" v-for="(item,index) in orderInfo" :key="item.dtlId">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <!-- <button class="button" type="primary" style="position: absolute;right: 1%;" size="mini"
                                    @click="inputDialogToggle(item.matCode)"><text
                                        class="button-text">出库</text></button> -->
                                <!-- <button type="primary" style="position: absolute;right: 1%;" size="mini"
                                    @click="outbound(item.matCode)">出库</button> -->
                                <view class="uni-content">
                                    <view style="font-size: 18px;">收货单号:{{orderNo}}</view>
                                    <view style="font-size: 18px;">采购单号:{{item.purchaseOrderNo}}</view>
                                    <view style="font-size: 18px;">物料编号:{{item.materielCode}}</view>
                                    <view style="font-size: 18px;">批次号:{{item.lotNo}}</view>
                                    <view style="font-size: 18px;">收货数量:{{item.receivedQuantity}}</view>
                                    <view style="font-size: 18px;">是否质检:{{item.ifInspection==1?"是":"否"}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
            <view>
                <!-- è¾“入框示例 -->
                <uni-popup ref="inputDialog" type="dialog">
                    <uni-popup-dialog ref="inputClose" mode="input" title="输入内容" :value="outNum" placeholder="请输入内容"
                        @confirm="outbound"></uni-popup-dialog>
                </uni-popup>
            </view>
        </view>
        <view v-if="current === 2" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item label="楼层">
                        <uni-data-select v-if="show" v-model="printfloor"
                            :localdata="printfloorrange"></uni-data-select>
                    </uni-forms-item>
                    <uni-forms-item label="内箱标签">
                        <uni-easyinput type="text" :focus="tagFocus" v-model="tag" placeholder="请扫描内箱标签" ref='midInput'
                            @input="tagInput" />
                    </uni-forms-item>
                    <uni-forms-item :label="tagmatCode"></uni-forms-item>
                    <uni-forms-item :label="tagmatName"></uni-forms-item>
                    <uni-forms-item :label="tagQty"></uni-forms-item>
                    <uni-forms-item label="拆分数量">
                        <uni-easyinput type="number" v-model="number" placeholder="请输入拆分数量" ref='midInput'
                            :focus="numberFocus" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="printTag" type="primary" size="default" style="margin-top: 2%;">打印标签</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 3" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item label="托盘条码">
                        <uni-easyinput type="text" :focus="!istrue" v-model="barcode" placeholder="请扫描托盘条码"
                            ref='midInput' @input="inputChangebarcode" />
                    </uni-forms-item>
                    <uni-forms-item label="地址条码">
                        <uni-easyinput type="text" v-model="address" placeholder="请扫描地址条码" ref='midInput'
                            :focus="istrue" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="inbound" type="primary" size="default" style="margin-top: 2%;">入库</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 4" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item>
                        <uni-easyinput type="text" @input="releaseboxInput" v-model="releasevalue" placeholder="请扫码"
                            ref='midInput' :focus="releasefocus" />
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="releasebox" type="primary" size="default" style="margin-top: 2%;">解盘</button>
                    </uni-forms-item>
                </uni-forms>
                <uni-list>
                    <uni-list-item direction="column" v-if="value2">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">托盘号:{{value2}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                    <uni-list-item direction="column" v-for="item in matTotals" :key="item.matCode">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">数量:{{item.matQuantity}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                    <uni-list-item direction="column" v-for="(item,index) in matInfo" :key="index">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                        ç‰©æ–™ç¼–码:{{item.matCode}}
                                    </view>
                                    <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                        ç‰©æ–™åç§°ï¼š{{item.matName}}
                                    </view>
                                    <view class="uni-title-sub uni-ellipsis-2" style="font-size: 1.1em;">
                                        æ•°é‡ï¼š{{item.matQty}}
                                    </view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    import {
        config
    } from '../../common/config';
    const innerAudioContext = uni.createInnerAudioContext();
    export default {
        data() {
            return {
                show: true,
                items: ['扫描', '明细'], //, '拆分', '入库', '解盘'
                current: 0,
                orderNo: "",
                orderInfo: [],
                label: "",
                innerCode: "",
                matCode: "物料编码:",
                matName: "物料名称:",
                orderQty: "需求数量:",
                currentQty: "已扫数量:",
                scanQty: "累计数量:",
                remaindQty: "剩余数量:",
                tagFocus: true,
                numberFocus: false,
                focus: true,
                tag: "",
                number: "",
                tagmatCode: "物料编码:",
                tagmatName: "物料名称:",
                tagQty: "包装数量:",
                value: "",
                range: [],
                floor: "",
                floorrange: [],
                printfloor: "",
                printfloorrange: [],
                barcode: "",
                address: "",
                istrue: false,
                outNum: 0,
                itemCode: "",
                releasefocus: true,
                releasevalue: "",
                matInfo: [],
                matTotals: [],
                value2: "",
                searchValue: "",
                endType: "",
                endTypeRange: []
            }
        },
        onLoad(res) {
            this.range = config.warehouseRange;
            this.endTypeRange = config.outboundAreaRange;
            if (config.outboundArea) {
                this.endType = config.outboundArea;
            }
            if (config.warehouseArea) {
                this.value = config.warehouseArea;
            }
            this.orderNo = res.orderNo;
            this.label = "单据编号:" + this.orderNo;
            this.getData();
        },
        mounted() {
            this.printfloorrange = config.printFloorRange;
            this.floorrange = config.outboundFloorRange;
            if (config.outboundFloor) {
                this.floor = config.outboundFloor;
            }
            if (config.printFloor) {
                this.printfloor = config.printFloor;
            }
        },
        methods: {
            inputDialogToggle(itemCode) {
                this.itemCode = itemCode;
                this.$refs.inputDialog.open()
            },
            voiceSpeech(src) {
                innerAudioContext.src = src; // '../../static/success.mp3';
                innerAudioContext.play();
            },
            search() {
                this.getData();
            },
            releasebox() {
                if (this.releasevalue.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫码",
                        type: "error"
                    })
                    return;
                }
                var param;
                var matInfo = this.releasevalue.split('|');
                if (matInfo.length == 7) {
                    param = {
                        MainData: {
                            "innerCode": this.releasevalue
                        }
                    }
                } else {
                    param = {
                        MainData: {
                            "barcode": this.releasevalue
                        }
                    }
                }
                this.$u.post('/api/StockOperate/ReleaseAllBox', param).then(resdt => {
                    if (resdt.status) {
                        uni.$showMsg('解盘成功!')
                        this.releasevalue = "";
                        this.matInfo = [];
                        this.matTotals = [];
                        this.value2 = "";
                    } else {
                        this.$refs.uToast.show({
                            title: resdt.message,
                            type: "error"
                        })
                    }
                })
            },
            releaseboxInput() {
                this.$nextTick(() => {
                    if (this.releasevalue.length == 0) {
                        return;
                    }
                    var matInfo = this.releasevalue.split('|');
                    this.matInfo = [];
                    if (matInfo.length == 7) {
                        this.$u.post('/api/StockOperate/GetStockInfoByInnerCode', {
                            MainData: {
                                "innerCode": this.releasevalue
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    } else {
                        this.$u.post('/api/StockOperate/GetStockInfoByBarcode', {
                            MainData: {
                                "barcode": this.releasevalue
                            }
                        }).then(res => {
                            if (res.status) {
                                this.matInfo = res.data.stockInfo;
                                this.matTotals = res.data.stockTotal;
                                this.value2 = res.data.barcode;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                            }
                        })
                    }
                })
            },
            updateFocus() {
                this.$nextTick(() => {
                    this.innerCode = '';
                    if (!this.focus) {
                        this.focus = true;
                    }
                });
            },
            inbound() {
                if (this.barcode.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描托盘号",
                        type: "error"
                    })
                    return;
                }
                if (this.address.length == 0) {
                    this.$refs.uToast.show({
                        title: "请扫描地址条码",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        "barcode": this.barcode,
                        "startPoint": this.address
                    }
                }
                this.$u.post('/api/Inbound/RequestInbound', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg(res.message);
                        this.barcode = "";
                        this.address = "";
                        this.istrue = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
            inputChangebarcode() {
                this.istrue = false;
                this.$nextTick(function(x) {
                    if (this.barcode != '') {
                        this.istrue = true;
                    }
                })
            },
            onClickItem(e) {
                this.focus = false;
                this.addressFocus = false;
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                    if (this.current == 1) {
                        this.getData();
                    }
                }
            },
            getData() {
                var postData = {
                    MainData: {
                        orderNo: this.orderNo,
                        searchValue: this.searchValue
                    },
                }
                this.$u.post('/api/ReceiveOrderDetail/GetReceiveOrderInfos', postData).then((res) => {
                    if (res.status) {
                        this.orderInfo = res.data;
                        if (this.orderInfo.length > 3) {
                            this.loadVisible = true;
                        }
                    }
                })
            },
            innercodeInput() {
                this.$nextTick(() => {
                    if (this.innerCode == "") {
                        return;
                    }
                    var innerCode = this.innerCode;
                    setTimeout(() => {
                        this.innerCode = "";
                    }, 10);
                    // if (innerCode.split('|').length == 7) {
                    var postData = {
                        MainData: {
                            orderNo: this.orderNo,
                            scanValue: innerCode
                        },
                    }
                    this.$u.post('/api/ReceiveOrderDetail/AddReceiveOrderDetail?serNum=' + innerCode +
                        '&orderNo=' + this.orderNo, postData).then((res) => {
                        if (res.status) {
                            var remaind = parseInt(res.data.orderQty) - parseInt(res.data.scanQty);
                            this.matCode = "物料编码:" + res.data.matCode;
                            this.matName = "物料名称:" + res.data.matName;
                            this.orderQty = "需求数量:" + res.data.orderQty;
                            this.currentQty = "已扫数量:" + res.data.currentQty;
                            this.scanQty = "累计数量:" + res.data.scanQty;
                            this.remaindQty = "剩余数量:" + remaind;
                            if (res.message) {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                })
                                // setTimeout(this.updateFocus,200);
                                setTimeout(() => {
                                    this.voiceSpeech('../../static/fail.mp3');
                                }, 100);
                                return;
                            }
                            // setTimeout(this.updateFocus,200);
                            setTimeout(() => {
                                this.voiceSpeech('../../static/success.mp3');
                            }, 100);
                        } else {
                            // this.innerCode = "";
                            this.$refs.uToast.show({
                                title: res.message,
                                type: "error"
                            })
                            // setTimeout(this.updateFocus,200);
                            setTimeout(() => {
                                this.voiceSpeech('../../static/fail.mp3');
                            }, 100);
                        }
                    })
                    // } else {
                    //     // this.innerCode = "";
                    //     this.$refs.uToast.show({
                    //         title: "内箱码扫描错误",
                    //         type: "error"
                    //     })
                    //     // setTimeout(this.updateFocus,200);
                    //     setTimeout(() => {
                    //         this.voiceSpeech('../../static/fail.mp3');
                    //     }, 100);
                    // }
                    // this.innerCode = "";
                })
            },
            tagInput() {
                this.$nextTick(() => {
                    var tagInfos = this.tag.split('|');
                    if (tagInfos.length == 7) {
                        this.tagmatCode = "物料编码:" + tagInfos[1];
                        this.tagQty = "物料数量:" + tagInfos[5];
                    } else {
                        this.$refs.uToast.show({
                            title: "内箱码扫描错误",
                            type: "error"
                        })
                    }
                    this.numberFocus = true;
                })
            },
            printTag() {
                if (this.tag == "") {
                    this.$refs.uToast.show({
                        title: "请扫描内箱标签",
                        type: "error"
                    })
                    return;
                }
                if (this.number <= 0) {
                    this.$refs.uToast.show({
                        title: "请输入数量",
                        type: "error"
                    })
                    return;
                }
                if (this.printfloor.length <= 0) {
                    this.$refs.uToast.show({
                        title: "请选择楼层",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        tag: this.tag,
                        number: this.number,
                        floor: this.printfloor
                    }
                }
                this.$u.post('/api/StockOperate/PrintTag', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "打印成功",
                            type: "success"
                        })
                        this.tagmatCode = "物料编码:";
                        this.tagQty = "包装数量:";
                        this.tag = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            },
            outbound(val) {
                if (this.floor == "") {
                    this.$refs.uToast.show({
                        title: "请选择楼层",
                        type: "error"
                    })
                    return;
                }
                if (this.value == "") {
                    this.$refs.uToast.show({
                        title: "请选择区域",
                        type: "error"
                    })
                    return;
                }
                if (this.endType == "") {
                    this.$refs.uToast.show({
                        title: "请选择出库区域",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        matCode: this.itemCode,
                        orderNo: this.orderNo,
                        system: this.value,
                        floor: this.floor,
                        outNum: val,
                        endType: this.endType
                    }
                }
                this.$u.post('/api/ErpOrder/ReceiveOrderOutbound', postData).then(res => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: "成功",
                            type: "success"
                        })
                        this.getData();
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/relocation/relocation.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,157 @@
<template>
    <view>
        <!-- <uni-forms ref="formData" :modelValue="formData" label-width="120"> -->
        <uni-forms class="customcss" label-width="120">
            <uni-forms-item label="起点库位">
                <uni-easyinput type="text" :focus="locationFocus" v-model="fromLocationNo" placeholder="请输入起点库位"
                    ref='midInput' @input="locationNoinputChange()" />
            </uni-forms-item>
            <uni-forms-item label="终点库位">
                <uni-easyinput type="text" :focus="!locationFocus" v-model="toLocationNo" placeholder="请输入终点库位"
                    ref='midInput' />
            </uni-forms-item>
            <uni-forms-item>
                <button @click="submit" type="primary" size="default" style="margin-top: 2%;">移库</button>
            </uni-forms-item>
        </uni-forms>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                fromLocationNo: "",
                toLocationNo: "",
                locationFocus: true
            }
        },
        onLoad(res) {
        },
        methods: {
            submit() {
                if(this.fromLocationNo == ''){
                    this.$refs.uToast.show({
                        title: "起点库位不能为空",
                        type: "error"
                    });
                    return;
                }
                if(this.toLocationNo == ''){
                    this.$refs.uToast.show({
                        title: "终点库位不能为空",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "fromLocation": this.fromLocationNo,
                        "toLocation": this.toLocationNo
                    },
                }
                this.$u.post('/api/Relocation/RelocationTask', postData).then((res) => {
                    if (res.status) {
                        this.items = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "success"
                        });
                        this.fromLocationNo = "";
                        this.toLocationNo = "";
                        this.locationFocus = true;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            locationNoinputChange(){
                this.locationFocus = false;
                this.$nextTick(function(x) {
                    if (this.fromLocationNo != '') {
                        this.locationFocus = false;
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        background-color: #fff;
        padding: 20rpx 40rpx;
        width: 100%;
    }
    .footer {
        padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/stock/bindstock.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,159 @@
<template>
    <view>
        <!-- <uni-forms ref="formData" :modelValue="formData" label-width="120"> -->
        <uni-forms class="customcss" label-width="120">
            <uni-forms-item label="货位编号">
                <uni-easyinput type="text" :focus="!barcodefocus" v-model="locationNo" @confirm="submit" placeholder="请输入货位编号"
                    ref='midInput' @input="locationNoinputChange()"  />
            </uni-forms-item>
            <uni-forms-item label="托盘条码">
                <uni-easyinput type="text" :focus="barcodefocus" v-model="barcode" placeholder="请扫描托盘条码" @confirm="submit" ref='midInput'/>
            </uni-forms-item>
            <uni-forms-item>
                <button @click="submit" type="primary" size="default" style="margin-top: 2%;">手动绑定</button>
            </uni-forms-item>
        </uni-forms>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                locationNo: "",
                barcode: '',
                barcodefocus: false,
            }
        },
        onLoad(res) {
            uni.hideKeyboard();
        },
        methods: {
            submit() {
                if (this.locationNo == "") {
                    this.$refs.uToast.show({
                        title: "货位号不能为空",
                        type: "error"
                    });
                    return;
                }
                if (this.barcode == "") {
                    this.$refs.uToast.show({
                        title: "托盘号不能为空",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "locationNo": this.locationNo,
                        "barcode": this.barcode
                    },
                }
                this.$u.post('/api/StockOperate/BindStock', postData).then((res) => {
                    if (res.status) {
                        this.items = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "success"
                        });
                        this.locationNo = "";
                        this.barcode = "";
                        this.barcodefocus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            locationNoinputChange() {
                this.barcodefocus = false;
                this.$nextTick(function(x) {
                    if (this.locationNo != '') {
                        this.barcodefocus = true;
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        background-color: #fff;
        padding: 20rpx 40rpx;
        width: 100%;
    }
    .footer {
        // padding-top: 50%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/stock/releasestock.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,200 @@
<template>
    <view >
        <uni-forms label-width="120" class="customcss">
            <uni-forms-item label="货位编号">
                <uni-easyinput type="text" v-model="locationNo" :focus="!barcodefocus" placeholder="请输入货位编号"
                    @input="locationNoinputChange()" ref='midInput'/>
            </uni-forms-item>
            <uni-forms-item>
                <button @click="submit" type="primary" size="default" style="margin-top: 2%;">解除绑定</button>
            </uni-forms-item>
        </uni-forms>
        <uni-list class="footer">
            <uni-list-item direction="column" v-for="item in stockInfo" :key="item.matCode">
                <template v-slot:body>
                    <view class="uni-list-box">
                        <view class="uni-content">
                            <view class="uni-title-sub uni-ellipsis-2">容器编号:{{item.palletCode}}</view>
                            <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                            <view class="uni-title-sub uni-ellipsis-2">物料名称:{{item.mater_name}}</view>
                            <view class="uni-title-sub uni-ellipsis-2">数量:{{item.quantity}}</view>
                            <view class="uni-title-sub uni-ellipsis-2">货位编号:{{item.locationCode}}</view>
                        </view>
                    </view>
                </template>
            </uni-list-item>
        </uni-list>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                locationNo: "",
                barcode: '',
                barcodefocus: false,
                stockInfo: []
            }
        },
        onLoad(res) {
        },
        methods: {
            submit() {
                if (this.locationNo == "") {
                    this.$refs.uToast.show({
                        title: "货位号不能为空",
                        type: "error"
                    });
                    return;
                }
                var _this = this;
                var isDelete = false;
                uni.showModal({
                    title: "提示",
                    cancelText:'否',
                    confirmText:'是',
                    confirmColor:'blue',
                    content: "是否删除库存?",
                    showCancel: true,
                    success: function(res) {
                        if (res.confirm) {
                            isDelete = true;
                        } else if (res.cancel) {
                            isDelete = false;
                        }
                        _this.releaseStock(isDelete);
                    }
                });
            },
            releaseStock(isDelete) {
                var postData = {
                    MainData: {
                        "locationNo": this.locationNo,
                        "barcode": this.barcode
                    },
                    Extra: isDelete
                }
                this.$u.post('/api/StockOperate/ReleaseStock', postData).then((res) => {
                    if (res.status) {
                        this.items = [];
                        this.stockInfo = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "success"
                        });
                        this.locationNo = "";
                        this.barcode = "";
                        this.barcodefocus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            updateFocus() {
            },
            locationNoinputChange() {
                this.$nextTick(function(x) {
                    if (this.locationNo != '') {
                        var postData = {
                            MainData: {
                                "locationCode": this.locationNo
                            },
                        }
                        this.$u.post('/api/VV_StockGroup/GetStockInfoByLocationNo', postData).then((res) => {
                            if (res.status) {
                                this.stockInfo = res.data;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                });
                            }
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        background-color: #fff;
        padding: 20rpx 40rpx;
        width: 100%;
    }
    .footer {
        // padding-top: 20%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/stock/stock.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,224 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view v-if="current === 0" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120">
                    <uni-forms-item label="货位编号">
                        <uni-easyinput type="text" :focus="!bindbarcodefocus" v-model="bindlocationNo" placeholder="请输入货位编号"
                            ref='midInput' @input="bindinputChange"  />
                    </uni-forms-item>
                    <uni-forms-item label="托盘条码">
                        <uni-easyinput type="text" :focus="bindbarcodefocus" v-model="bindbarcode" placeholder="请扫描托盘条码"ref='midInput'/>
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="bindstock" type="primary" size="default" style="margin-top: 2%;">手动绑定</button>
                    </uni-forms-item>
                </uni-forms>
            </view>
        </view>
        <view v-if="current === 1" class="headerstyle">
            <view class="itemstyle">
                <uni-forms label-width="120" class="customcss">
                    <uni-forms-item label="货位编号">
                        <uni-easyinput type="text" v-model="locationNo" :focus="!barcodefocus" placeholder="请输入货位编号"
                            @input="locationNoinputChange" ref='midInput'/>
                    </uni-forms-item>
                    <uni-forms-item>
                        <button @click="submit" type="primary" size="default" style="margin-top: 2%;">解除绑定</button>
                    </uni-forms-item>
                </uni-forms>
                <uni-list class="footer">
                    <uni-list-item direction="column" v-for="item in stockInfo" :key="item.matCode">
                        <template v-slot:body>
                            <view class="uni-list-box">
                                <view class="uni-content">
                                    <view class="uni-title-sub uni-ellipsis-2">容器编号:{{item.palletCode}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">物料编码:{{item.matCode}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">物料名称:{{item.mater_name}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">数量:{{item.quantity}}</view>
                                    <view class="uni-title-sub uni-ellipsis-2">货位编号:{{item.locationCode}}</view>
                                </view>
                            </view>
                        </template>
                    </uni-list-item>
                </uni-list>
            </view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                items: ['库存绑定', '库存解绑'],
                current: 0,
                bindlocationNo: "",
                bindbarcode: '',
                bindbarcodefocus: false,
                locationNo: "",
                barcode: '',
                barcodefocus: false,
                stockInfo: []
            }
        },
        onLoad(res) {},
        methods: {
            onClickItem(e) {
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                }
            },
            bindstock() {
                if (this.bindlocationNo == "") {
                    this.$refs.uToast.show({
                        title: "货位号不能为空",
                        type: "error"
                    });
                    return;
                }
                if (this.bindbarcode == "") {
                    this.$refs.uToast.show({
                        title: "托盘号不能为空",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "locationNo": this.bindlocationNo,
                        "barcode": this.bindbarcode
                    },
                }
                this.$u.post('/api/StockOperate/BindStock', postData).then((res) => {
                    if (res.status) {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "success"
                        });
                        this.bindlocationNo = "";
                        this.bindbarcode = "";
                        this.bindbarcodefocus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            bindinputChange() {
                this.bindbarcodefocus = false;
                this.$nextTick(function(x) {
                    if (this.bindlocationNo != '') {
                        this.bindbarcodefocus = true;
                    }
                })
            },
            submit() {
                if (this.locationNo == "") {
                    this.$refs.uToast.show({
                        title: "货位号不能为空",
                        type: "error"
                    });
                    return;
                }
                var _this = this;
                var isDelete = false;
                uni.showModal({
                    title: "提示",
                    cancelText:'否',
                    confirmText:'是',
                    confirmColor:'blue',
                    content: "是否删除库存?",
                    showCancel: true,
                    success: function(res) {
                        if (res.confirm) {
                            isDelete = true;
                        } else if (res.cancel) {
                            isDelete = false;
                        }
                        _this.releaseStock(isDelete);
                    }
                });
            },
            releaseStock(isDelete) {
                var postData = {
                    MainData: {
                        "locationNo": this.locationNo,
                        "barcode": this.barcode
                    },
                    Extra: isDelete
                }
                this.$u.post('/api/StockOperate/ReleaseStock', postData).then((res) => {
                    if (res.status) {
                        this.stockInfo = [];
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "success"
                        });
                        this.locationNo = "";
                        this.barcode = "";
                        this.barcodefocus = false;
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        });
                    }
                })
            },
            locationNoinputChange() {
                this.$nextTick(function(x) {
                    if (this.locationNo != '') {
                        var postData = {
                            MainData: {
                                "locationCode": this.locationNo
                            },
                        }
                        this.$u.post('/api/VV_StockGroup/GetStockInfoByLocationNo', postData).then((res) => {
                            if (res.status) {
                                this.stockInfo = res.data;
                            } else {
                                this.$refs.uToast.show({
                                    title: res.message,
                                    type: "error"
                                });
                            }
                        })
                    }
                })
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/taskInfo/cancelTask.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,181 @@
<template>
    <view>
        <uni-list class="footer">
            <uni-list-item direction="column" v-for="item in taskInfos" :key="item.taskNo">
                <template v-slot:body>
                    <view class="uni-list-box">
                        <checkbox @click="click(item)"></checkbox>
                        <view class="uni-content">
                            <view class="uni-title-sub uni-ellipsis-2">任务号:{{item.taskNo}}</view>
                            <view class="uni-note">托盘号:{{item.barcode}}</view>
                            <view class="uni-note">起点:{{item.startPoint}}</view>
                            <view class="uni-note">终点:{{item.endPoint}}</view>
                        </view>
                    </view>
                </template>
            </uni-list-item>
        </uni-list>
        <view style="background-color: #fff; padding: 20rpx,20rpx;" class="customcss">
            <u-sticky offset-top="80%" >
                <button type="primary" @click="cancelTask()">取消任务</button>
            </u-sticky>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                taskInfos: [],
                items: [],
            }
        },
        onLoad(res) {
            this.getData();
        },
        methods: {
            getData() {
                this.$u.post('/api/Dt_agvtask/GetTaskInfos', null).then((res) => {
                    if (res.status) {
                        this.taskInfos = res.data;
                    }
                })
            },
            cancelTask() {
                if (this.items.length == 0) {
                    this.$refs.uToast.show({
                        title: "请选择要取消的数据",
                        type: "error"
                    });
                    return;
                }
                if (this.items.length > 1) {
                    this.$refs.uToast.show({
                        title: "请选择一条要取消的数据",
                        type: "error"
                    });
                    return;
                }
                var postData = {
                    MainData: {
                        "taskNo": this.items[0].taskNo,
                    },
                }
                this.$u.post('/api/Dt_agvtask/CancelTask', postData).then((res) => {
                    if (res.status) {
                        this.items = [];
                        this.$refs.uToast.show({
                            title: "取消成功",
                            type: "success"
                        });
                        this.getData();
                    } else {
                        this.$refs.uToast.show({
                            title: "取消失败" + res.message,
                            type: "error"
                        });
                    }
                })
            },
            click(e) {
                if (this.items.find(x => x.taskNo == e.taskNo)) {
                    this.items.map((item, index) => {
                        if (item.taskNo == e.taskNo) {
                            this.items.splice(index, 1);
                        }
                    })
                } else {
                    this.items.push(e);
                }
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
    .customcss {
        width: 100%;
        height: 140rpx;
        text-align: center;
        position: fixed;
        /*1、【relative】相对定位;2、【absolute】绝对定位;3、【fixed】固定定位;4、【static】默认值;5、【sticky】粘性定位。*/
        left: 0px;
        /*定位:离页面左边0px的位置*/
        bottom: 0px;
        /*定位:离页面底部0px的位置*/
        padding-top: 20rpx;
    }
    .footer {
        // padding-top: 20%;
        padding-bottom: 72px;
        background-color: #f1f3f4;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/template/tabtemplate.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
<template>
    <view>
        <uni-segmented-control :current="current" :values="items" @clickItem="onClickItem">
        </uni-segmented-control>
        <view v-if="current === 0" class="headerstyle">
            <view class="itemstyle"></view>
        </view>
        <view v-if="current === 1" class="headerstyle">
            <view class="itemstyle"></view>
        </view>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                items: ['半成品组盘', '库存绑定'],
                current: 0,
            }
        },
        onLoad(res) {},
        methods: {
            onClickItem(e) {
                if (this.current !== e.currentIndex) {
                    this.current = e.currentIndex;
                }
            }
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    .content {
        display: flex;
        height: 150px;
    }
    .content-text {
        font-size: 14px;
        color: #666;
    }
    .itemstyle {
        margin-top: 20px;
        margin-left: 5%;
    }
    .headerstyle {
        width: 90%;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/test/acrossfloor.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,138 @@
<template>
    <view style="padding: 5%;">
        <!-- <uni-forms ref="formData" :modelValue="formData" label-width="120"> -->
        <uni-forms label-width="120">
            <uni-forms-item label="起点">
                <uni-easyinput type="text" :focus="true" v-model="startpoint" placeholder="请输入起点地址" ref='midInput' />
            </uni-forms-item>
            <uni-forms-item label="终点">
                <uni-easyinput type="text" v-model="endpoint" placeholder="请输入终点地址" ref='midInput' />
            </uni-forms-item>
        </uni-forms>
        <button @click="submit" type="primary" size="default" style="margin-top: 2%;">发送任务</button>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                istrue: false,
                startpoint: '',
                endpoint: ""
            }
        },
        onLoad(res) {
            // // this.formData.status=res.status
            // this.formData.outID = res.outID
        },
        methods: {
            submit() {
                if(this.startpoint.length == 0){
                    this.$refs.uToast.show({
                        title: "请输入起点",
                        type: "error"
                    })
                    return;
                }
                if(this.endpoint.length == 0){
                    this.$refs.uToast.show({
                        title: "请输入终点",
                        type: "error"
                    })
                    return;
                }
                var postData = {
                    MainData: {
                        "startPoint": this.startpoint,
                        "endPoint": this.endpoint
                    }
                }
                this.$u.post('/api/Dt_agvtask/AcrossFloorTask', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg("任务发送成功");
                        this.startpoint = "";
                        this.endpoint = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/pages/test/qianfushitest.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
<template>
    <view style="padding: 5%;">
        <!-- <uni-forms ref="formData" :modelValue="formData" label-width="120"> -->
        <uni-forms label-width="120">
            <uni-forms-item label="起点">
                <uni-easyinput type="text" :focus="true" v-model="startpoint" placeholder="请输入起点地址" ref='midInput' />
            </uni-forms-item>
            <uni-forms-item label="终点">
                <uni-easyinput type="text" v-model="endpoint" placeholder="请输入终点地址" ref='midInput' />
            </uni-forms-item>
        </uni-forms>
        <button @click="submit" type="primary" size="default" style="margin-top: 2%;">发送任务</button>
        <u-toast ref="uToast" />
    </view>
</template>
<script>
    export default {
        data() {
            return {
                istrue: false,
                startpoint: '',
                endpoint: ""
            }
        },
        onLoad(res) {
            // // this.formData.status=res.status
            // this.formData.outID = res.outID
        },
        methods: {
            submit() {
                var postData = {
                    MainData: {
                        "startPoint": this.startpoint,
                        "endPoint": this.endpoint
                    }
                }
                this.$u.post('/api/standart/sendtask', postData).then(res => {
                    if (res.status) {
                        uni.$showMsg("任务发送成功");
                        this.startpoint = "";
                        this.endpoint = "";
                    } else {
                        this.$refs.uToast.show({
                            title: res.message,
                            type: "error"
                        })
                    }
                }).catch(err => {
                    this.$refs.uToast.show({
                        title: err.message,
                        type: "error"
                    })
                })
            },
        }
    }
</script>
<style lang="scss">
    @import '@/common/uni-ui.scss';
    page {
        display: flex;
        flex-direction: column;
        box-sizing: border-box;
        background-color: #efeff4;
        min-height: 100%;
        height: auto;
    }
    .tips {
        color: #67c23a;
        font-size: 14px;
        line-height: 40px;
        text-align: center;
        background-color: #f0f9eb;
        height: 0;
        opacity: 0;
        transform: translateY(-100%);
        transition: all 0.3s;
    }
    .tips-ani {
        transform: translateY(0);
        height: 40px;
        opacity: 1;
    }
    .content {
        width: 100%;
        display: flex;
    }
    .list-picture {
        width: 100%;
        height: 145px;
    }
    .thumb-image {
        width: 100%;
        height: 100%;
    }
    .ellipsis {
        display: flex;
        overflow: hidden;
    }
    .uni-ellipsis-1 {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .uni-ellipsis-2 {
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
</style>
´úÂë¹ÜÀí/»´°²PDA/static/center-selected.png
´úÂë¹ÜÀí/»´°²PDA/static/center.png
´úÂë¹ÜÀí/»´°²PDA/static/fail.mp3
Binary files differ
´úÂë¹ÜÀí/»´°²PDA/static/favicon.ico
´úÂë¹ÜÀí/»´°²PDA/static/index-selected.png
´úÂë¹ÜÀí/»´°²PDA/static/index.png
´úÂë¹ÜÀí/»´°²PDA/static/login_bottom_bg.jpg
´úÂë¹ÜÀí/»´°²PDA/static/login_top2.jpg
´úÂë¹ÜÀí/»´°²PDA/static/login_top3.png
´úÂë¹ÜÀí/»´°²PDA/static/logo.png
´úÂë¹ÜÀí/»´°²PDA/static/repeat.mp3
Binary files differ
´úÂë¹ÜÀí/»´°²PDA/static/success.mp3
Binary files differ
´úÂë¹ÜÀí/»´°²PDA/template.h5.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <link rel="shortcut icon" type="image/x-icon" href="static/favicon.ico">
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <title>
            <%= htmlWebpackPlugin.options.title %>
        </title>
        <script>
            document.addEventListener('DOMContentLoaded', function() {
                document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
            })
        </script>
        <link rel="stylesheet" href="<%= BASE_URL %>static/index.css" />
    </head>
    <body>
        <noscript>
            <strong>本站点必须要开启JavaScript才能运行</strong>
        </noscript>
        <div id="app"></div>
    </body>
</html>
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/README.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
TuniaoUi for uniApp v1.0.0 | by å›¾é¸Ÿ 2021-09-01
仅供开发,如作它用所承受的法律责任一概与作者无关
*使用TuniaoUi开发扩展与插件时,请注明基于tuniao字眼
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/components/tn-action-sheet/tn-action-sheet.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,202 @@
<template>
  <view v-if="value" class="tn-action-sheet-class tn-action-sheet">
    <tn-popup
      v-model="value"
      mode="bottom"
      length="auto"
      :popup="false"
      :borderRadius="borderRadius"
      :maskCloseable="maskCloseable"
      :safeAreaInsetBottom="safeAreaInsetBottom"
      :zIndex="elZIndex"
      @close="close"
    >
      <!-- æç¤ºä¿¡æ¯ -->
      <view
        v-if="tips.text"
        class="tn-action-sheet__tips tn-border-solid-bottom"
        :style="[tipsStyle]"
      >
        {{tips.text}}
      </view>
      <!-- æŒ‰é’®åˆ—表 -->
      <block v-for="(item, index) in list" :key="index">
        <view
          class="tn-action-sheet__item tn-text-ellipsis"
          :class="[ index < list.length - 1 ? 'tn-border-solid-bottom' : '']"
          :style="[itemStyle(index)]"
          hover-class="tn-hover-class"
          :hover-stay-time="150"
          @tap="itemClick(index)"
          @touchmove.stop.prevent
        >
          <text>{{item.text}}</text>
          <text v-if="item.subText" class="tn-action-sheet__item__subtext tn-text-ellipsis">{{item.subText}}</text>
        </view>
      </block>
      <!-- å–消按钮 -->
      <block v-if="cancelBtn">
        <view class="tn-action-sheet__cancel--gab"></view>
        <view
          class="tn-action-sheet__cancel tn-action-sheet__item"
          hover-class="tn-hover-class"
          :hover-stay-time="150"
          @tap="close"
        >{{cancelText}}</view>
      </block>
    </tn-popup>
  </view>
</template>
<script>
  export default {
    name: 'tn-action-sheet',
    props: {
      // é€šè¿‡v-model控制弹出和收起
      value: {
        type: Boolean,
        default: false
      },
      // æŒ‰é’®æ–‡å­—数组,可以自定义颜色和字体大小
      // return [{
      //     text: '确定',
      //  subText: '这是一个确定按钮',
      //     color: '',
      //     fontSize: '',
      //  disabled: true
      // }]
      list: {
        type: Array,
        default() {
          return []
        }
      },
      // é¡¶éƒ¨æç¤ºæ–‡å­—
      tips: {
        type: Object,
        default() {
          return {
            text: '',
            color: '',
            fontSize: 26
          }
        }
      },
      // å¼¹å‡ºçš„顶部圆角值
      borderRadius: {
        type: Number,
        default: 0
      },
      // ç‚¹å‡»é®ç½©å¯ä»¥å…³é—­
      maskCloseable: {
        type: Boolean,
        default: true
      },
      // åº•部取消按钮
      cancelBtn: {
        type: Boolean,
        default: true
      },
      // åº•部取消按钮的文字
      cancelText: {
        type: String,
        default: '取消'
      },
      // å¼€å¯åº•部安全区域
      // åœ¨iPhoneX机型底部添加一定的内边距
      safeAreaInsetBottom: {
        type: Boolean,
        default: false
      },
      // z-index值
      zIndex: {
        type: Number,
        default: 0
      }
    },
    computed: {
      // é¡¶éƒ¨æç¤ºæ ·å¼
      tipsStyle() {
        let style = {}
        if (this.tips.color) style.color = this.tips.color
        if (this.tips.fontSize) style.fontSize = this.tips.fontSize + 'rpx'
        return style
      },
      // æ“ä½œé¡¹ç›®çš„æ ·å¼
      itemStyle() {
        return (index) => {
          let style = {}
          if (this.list[index].color) style.color = this.list[index].color
          if (this.list[index].fontSize) style.fontSize = this.list[index].fontSize + 'rpx'
          // é€‰é¡¹è¢«ç¦ç”¨çš„æ ·å¼
          if (this.list[index].disabled) style.color = '#AAAAAA'
          return style
        }
      },
      elZIndex() {
        return this.zIndex ? this.zIndex : this.$t.zIndex.popup
      }
    },
    methods: {
      // ç‚¹å‡»å–消按钮
      close() {
        // å‘送input事件,并不会作用于父组件,而是要设置组件内部通过props传递的value参数
        this.popupClose();
        this.$emit('close');
      },
      // å…³é—­å¼¹çª—
      popupClose() {
        this.$emit('input', false)
      },
      // ç‚¹å‡»å¯¹åº”çš„item
      itemClick(index) {
        // å¦‚果是禁用项则不进行操作
        if (this.list[index].disabled) return
        this.$emit('click', index)
        this.popupClose()
      }
    }
  }
</script>
<style lang="scss" scoped>
  .tn-action-sheet {
    &__tips {
      font-size: 26rpx;
      text-align: center;
      padding: 34rpx 0;
      line-height: 1;
      color: $tn-content-color;
    }
    &__item {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      font-size: 32rpx;
      padding: 34rpx 0;
      &__subtext {
        font-size: 24rpx;
        color: $tn-content-color;
        margin-top: 20rpx;
      }
    }
    &__cancel {
      color: $tn-font-color;
      &--gab {
        height: 12rpx;
        background-color: #eaeaec;
      }
    }
  }
</style>
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/components/tn-avatar-group/tn-avatar-group.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
<template>
  <view class="tn-avatar-group-class tn-avatar-group">
    <view v-for="(item, index) in lists" :key="index" class="tn-avatar-group__item" :style="[itemStyle(index)]">
      <tn-avatar
        :src="item.src || ''"
        :text="item.text || ''"
        :icon="item.icon || ''"
        :size="size"
        :shape="shape"
        :imgMode="imgMode"
        :border="true"
        backgroundColor="rgba(255, 255, 255, 0.4)"
        :borderSize="4"
      ></tn-avatar>
    </view>
  </view>
</template>
<script>
  export default {
    name: 'tn-avatar-group',
    props: {
      // å¤´åƒåˆ—表
      lists: {
        type: Array,
        default() {
          return []
        }
      },
      // å¤´åƒç±»åž‹
      // square å¸¦åœ†è§’正方形 circle åœ†å½¢
      shape: {
        type: String,
        default: 'circle'
      },
      // å¤§å°
      // sm å°å¤´åƒ lg å¤§å¤´åƒ xl åŠ å¤§å¤´åƒ
      // å¦‚果为其他则认为是直接设置大小
      size: {
        type: [Number, String],
        default: ''
      },
      // å½“设置为显示头像信息时,
      // å›¾ç‰‡çš„裁剪模式
      imgMode: {
        type: String,
        default: 'aspectFill'
      },
      // å¤´åƒä¹‹é—´çš„遮挡比例
      // 0.4 ä»£è¡¨ 40%
      gap: {
        type: Number,
        default: 0.4
      }
    },
    computed: {
      itemStyle() {
        return (index) => {
          let style = {}
          if (this._checkSizeIsInline()) {
            switch(this.size) {
              case 'sm':
                style.marginLeft = index != 0 ? `${-48 * this.gap}rpx` : ''
                break
              case 'lg':
                style.marginLeft = index != 0 ? `${-96 * this.gap}rpx` : ''
                break
              case 'xl':
                style.marginLeft = index != 0 ? `${-128 * this.gap}rpx` : ''
                break
            }
          } else {
            const size = Number(this.size.replace(/(px|rpx)/g, '')) || 64
            style.marginLeft = index != 0 ? `-${size * this.gap}rpx` : ''
          }
          return style
        }
      }
    },
    data() {
      return {
      }
    },
    methods: {
      // æ£€æŸ¥æ˜¯å¦ä½¿ç”¨å†…置的大小进行设置
      _checkSizeIsInline() {
        if (/(xs|sm|md|lg|xl|xxl)/.test(this.size)) return true
        else return false
      }
    }
  }
</script>
<style lang="scss" scoped>
  .tn-avatar-group {
    display: flex;
    flex-direction: row;
    &__item {
      position: relative;
    }
  }
</style>
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/components/tn-avatar/tn-avatar.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,298 @@
<template>
  <view
    class="tn-avatar-class tn-avatar"
    :class="[backgroundColorClass,avatarClass]"
    :style="[avatarStyle]"
    @tap="click"
  >
    <image
      v-if="showImg"
      class="tn-avatar__img"
      :class="[imgClass]"
      :src="src"
      :mode="imgMode || 'aspectFill'"
      @error="loadImageError"
    ></image>
    <view v-else class="tn-avatar__text" >
      <view v-if="text">{{ text }}</view>
      <view v-else :class="[`tn-icon-${icon}`]"></view>
    </view>
    <!-- è§’æ ‡ -->
    <tn-badge
      v-if="badge && (badgeIcon || badgeText)"
      :radius="badgeSize"
      :backgroundColor="badgeBgColor"
      :fontColor="badgeColor"
      :fontSize="badgeSize - 8"
      :absolute="true"
      :top="badgePosition[0]"
      :right="badgePosition[1]"
    >
      <view v-if="badgeIcon && badgeText === ''">
        <view :class="[`tn-icon-${badgeIcon}`]"></view>
      </view>
      <view v-else>
        {{ badgeText }}
      </view>
    </tn-badge>
  </view>
</template>
<script>
  import componentsColorMixin from '../../libs/mixin/components_color.js'
  export default {
    mixins: [componentsColorMixin],
    name: 'tn-avatar',
    props: {
      // åºå·
      index: {
        type: [Number, String],
        default: 0
      },
      // å¤´åƒç±»åž‹
      // square å¸¦åœ†è§’正方形 circle åœ†å½¢
      shape: {
        type: String,
        default: 'circle'
      },
      // å¤§å°
      // sm å°å¤´åƒ lg å¤§å¤´åƒ xl åŠ å¤§å¤´åƒ
      // å¦‚果为其他则认为是直接设置大小
      size: {
        type: [Number, String],
        default: ''
      },
      // æ˜¯å¦æ˜¾ç¤ºé˜´å½±
      shadow: {
        type: Boolean,
        default: false
      },
      // æ˜¯å¦æ˜¾ç¤ºè¾¹æ¡†
      border: {
        type: Boolean,
        default: false
      },
      // è¾¹æ¡†é¢œè‰²
      borderColor: {
        type: String,
        default: 'rgba(0, 0, 0, 0.1)'
      },
      // è¾¹æ¡†å¤§å°, rpx
      borderSize: {
        type: Number,
        default: 2
      },
      // å¤´åƒè·¯å¾„
      src: {
        type: String,
        default: ''
      },
      // æ–‡å­—
      text: {
        type: String,
        default: ''
      },
      // å›¾æ ‡
      icon: {
        type: String,
        default: ''
      },
      // å½“设置为显示头像信息时,
      // å›¾ç‰‡çš„裁剪模式
      imgMode: {
        type: String,
        default: 'aspectFill'
      },
      // æ˜¯å¦æ˜¾ç¤ºè§’æ ‡
      badge: {
        type: Boolean,
        default: false
      },
      // è®¾ç½®æ˜¾ç¤ºè§’标后,角标大小
      badgeSize: {
        type: Number,
        default: 0
      },
      // è§’标背景颜色
      badgeBgColor: {
        type: String,
        default: '#AAAAAA'
      },
      // è§’标字体颜色
      badgeColor: {
        type: String,
        default: '#FFFFFF'
      },
      // è§’标图标
      badgeIcon: {
        type: String,
        default: ''
      },
      // è§’标文字,优先级比icon高
      badgeText: {
        type: String,
        default: ''
      },
      // è§’标坐标
      // [top, right]
      badgePosition: {
        type: Array,
        default() {
          return [0, 0]
        }
      }
    },
    data() {
      return {
        // å›¾ç‰‡æ˜¾ç¤ºæ˜¯å¦å‘生错误
        imgLoadError: false
      }
    },
    computed: {
      showImg() {
        // å¦‚果设置了图片地址,则为显示图片,否则为显示文本
        return this.text === '' && this.icon === ''
      },
      avatarClass() {
        let clazz = ''
        clazz += ` tn-avatar--${this.shape}`
        if (this._checkSizeIsInline()) {
          clazz += ` tn-avatar--${this.size}`
        }
        if (this.shadow) {
          clazz += ' tn-avatar--shadow'
        }
        return clazz
      },
      avatarStyle() {
        let style = {}
        if (this.backgroundColorStyle) {
          style.background = this.backgroundColorStyle
        } else if (this.shadow && this.showImg) {
          style.backgroundImage = `url(${this.src})`
        }
        if (this.border) {
          style.border = `${this.borderSize}rpx solid ${this.borderColor}`
        }
        if (!this._checkSizeIsInline()) {
          style.width = this.size
          style.height = this.size
        }
        return style
      },
      imgClass() {
        let clazz = ''
        clazz += ` tn-avatar__img--${this.shape}`
        return clazz
      }
    },
    methods: {
      // åŠ è½½å›¾ç‰‡å¤±è´¥
      loadImageError() {
        this.imgLoadError = true
      },
      // ç‚¹å‡»äº‹ä»¶
      click() {
        this.$emit("click", this.index)
      },
      // æ£€æŸ¥æ˜¯å¦ä½¿ç”¨å†…置的大小进行设置
      _checkSizeIsInline() {
        if (/^(xs|sm|md|lg|xl|xxl)$/.test(this.size)) return true
        else return false
      }
    }
  }
</script>
<style lang="scss" scoped>
  .tn-avatar {
    /* #ifndef APP-NVUE */
    display: inline-flex;
    /* #endif */
    margin: 0;
    padding: 0;
    text-align: center;
    align-items: center;
    justify-content: center;
    background-color: $tn-font-holder-color;
    // color: #FFFFFF;
    white-space: nowrap;
    position: relative;
    width: 64rpx;
    height: 64rpx;
    z-index: 1;
    &--sm {
      width: 48rpx;
      height: 48rpx;
    }
    &--lg {
      width: 96rpx;
      height: 96rpx;
    }
    &--xl {
      width: 128rpx;
      height: 128rpx;
    }
    &--square {
      border-radius: 10rpx;
    }
    &--circle {
      border-radius: 5000rpx;
    }
    &--shadow {
      position: relative;
      &::after {
        content: " ";
        display: block;
        background: inherit;
        filter: blur(10rpx);
        position: absolute;
        width: 100%;
        height: 100%;
        top: 10rpx;
        left: 10rpx;
        z-index: -1;
        opacity: 0.4;
        transform-origin: 0 0;
        border-radius: inherit;
        transform: scale(1, 1);
      }
    }
    &__img {
      width: 100%;
      height: 100%;
      &--square {
        border-radius: 10rpx;
      }
      &--circle {
        border-radius: 5000rpx;
      }
    }
    &__text {
      display: flex;
      flex-direction: row;
      align-items: center;
      justify-content: center;
    }
  }
</style>
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/components/tn-badge/tn-badge.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,173 @@
<template>
  <view
    class="tn-badge-class tn-badge"
    :class="[
      backgroundColorClass,
      fontColorClass,
      badgeClass
    ]"
    :style="[badgeStyle]"
    @click="handleClick"
  >
    <slot v-if="!dot"></slot>
  </view>
</template>
<script>
  import componentsColorMixin from '../../libs/mixin/components_color.js'
  export default {
    mixins: [componentsColorMixin],
    name: 'tn-badge',
    props: {
      // åºå·
      index: {
        type: [Number, String],
        default: '0'
      },
      // å¾½ç« çš„大小 rpx
      radius: {
        type: Number,
        default: 0
      },
      // å†…边距
      padding: {
        type: String,
        default: ''
      },
      // å¤–边距
      margin: {
        type: String,
        default: ''
      },
      // æ˜¯å¦ä¸ºä¸€ä¸ªç‚¹
      dot: {
        type: Boolean,
        default: false
      },
      // æ˜¯å¦ä½¿ç”¨ç»å¯¹å®šä½
      absolute: {
        type: Boolean,
        default: false
      },
      // top
      top: {
        type: [String, Number],
        default: ''
      },
      // right
      right: {
        type: [String, Number],
        default: ''
      },
      // å±…中 å¯¹é½å³ä¸Šè§’
      translateCenter: {
        type: Boolean,
        default: true
      }
    },
    computed: {
      badgeClass() {
        let clazz = ''
        if (this.dot) {
          clazz += ' tn-badge--dot'
        }
        if (this.absolute) {
          clazz += ' tn-badge--absolute'
          if (this.translateCenter) {
            clazz += ' tn-badge--center-position'
          }
        }
        return clazz
      },
      badgeStyle() {
        let style = {}
        if (this.radius !== 0) {
          style.width = this.radius + 'rpx'
          style.height = this.radius + 'rpx'
          style.lineHeight = this.radius + 'rpx'
          // style.borderRadius = (this.radius * 8) + 'rpx'
        }
        if (this.padding) {
          style.padding = this.padding
        }
        if (this.margin) {
          style.margin = this.margin
        }
        if (this.fontColorStyle) {
          style.color = this.fontColorStyle
        }
        if (this.fontSize) {
          style.fontSize = this.fontSize + this.fontUnit
        }
        if (this.backgroundColorStyle) {
          style.backgroundColor = this.backgroundColorStyle
        }
        if (this.top) {
          style.top = this.$t.string.getLengthUnitValue(this.top)
        }
        if (this.right) {
          style.right = this.$t.string.getLengthUnitValue(this.right)
        }
        return style
      },
    },
    data() {
      return {
      }
    },
    methods: {
      // å¤„理点击事件
      handleClick() {
        this.$emit('click', {
          index: Number(this.index)
        })
        this.$emit('tap', {
          index: Number(this.index)
        })
      },
    }
  }
</script>
<style lang="scss" scoped>
  .tn-badge {
    width: auto;
    height: auto;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 10;
    font-size: 20rpx;
    background-color: #FFFFFF;
    // color: #FFFFFF;
    border-radius: 100rpx;
    padding: 4rpx 8rpx;
    line-height: initial;
    &--dot {
      width: 8rpx;
      height: 8rpx;
      border-radius: 50%;
      padding: 0;
    }
    &--absolute {
      position: absolute;
      top: 0;
      right: 0;
    }
    &--center-position {
      transform: translate(50%, -50%);
    }
  }
</style>
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/components/tn-button/tn-button.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,302 @@
<template>
  <button
    class="tn-btn-class tn-btn"
    :class="[
      buttonClass,
      backgroundColorClass,
      fontColorClass
    ]"
    :style="[buttonStyle]"
    hover-class="tn-hover"
    :loading="loading"
    :disabled="disabled"
    :form-type="formType"
    :open-type="openType"
    @getuserinfo="handleGetUserInfo"
    @getphonenumber="handleGetPhoneNumber"
    @contact="handleContact"
    @error="handleError"
    @tap="handleClick"
  >
    <slot></slot>
  </button>
</template>
<script>
  import componentsColorMixin from '../../libs/mixin/components_color.js'
  export default {
    mixins: [componentsColorMixin],
    name: "tn-button",
    // è§£å†³å†å¾®ä¿¡å°ç¨‹åºç§ï¼Œè‡ªå®šä¹‰æŒ‰é’®æ— æ³•触发bindsubmit
    behaviors: ['wx://form-field-button'],
    props: {
      // æŒ‰é’®ç´¢å¼•,用于区分多个按钮
      index: {
        type: [Number, String],
        default: 0
      },
      // æŒ‰é’®å½¢çж default é»˜è®¤ round åœ†è§’ icon å›¾æ ‡æŒ‰é’®
      shape: {
        type: String,
        default: 'default'
      },
      // æ˜¯å¦åŠ é˜´å½±
      shadow: {
        type: Boolean,
        default: false
      },
      // å®½åº¦ rpx或%
      width: {
        type: String,
        default: 'auto'
      },
      // é«˜åº¦ rpx或%
      height: {
        type: String,
        default: ''
      },
      // æŒ‰é’®çš„尺寸 sm lg
      size: {
        type: String,
        default: ''
      },
      // å­—体是否加粗
      fontBold: {
        type: Boolean,
        default: false
      },
      padding: {
        type: String,
        default: '0 30rpx'
      },
      // å¤–边距 ä¸Žcss的margin参数用法相同
      margin: {
        type: String,
        default: ''
      },
      // æ˜¯å¦é•‚空
      plain: {
        type: Boolean,
        default: false
      },
      // å½“plain=true时,是否显示边框
      border: {
        type: Boolean,
        default: true
      },
      // å½“plain=true时,是否加粗显示边框
      borderBold: {
        type: Boolean,
        default: false
      },
      // æ˜¯å¦ç¦ç”¨
      disabled: {
        type: Boolean,
        default: false
      },
      // æ˜¯å¦æ˜¾ç¤ºåŠ è½½å›¾æ ‡
      loading: {
        type: Boolean,
        default: false
      },
      // è§¦å‘form表单的事件类型
      formType: {
        type: String,
        default: ''
      },
      // å¼€æ”¾èƒ½åŠ›
      openType: {
        type: String,
        default: ''
      },
      // æ˜¯å¦é˜»æ­¢é‡å¤ç‚¹å‡»(默认间隔是200ms)
      blockRepeatClick: {
        type: Boolean,
        default: false
      }
    },
    computed: {
      // æ ¹æ®ä¸åŒçš„参数动态生成class
      buttonClass() {
        let clazz = ''
        // æŒ‰é’®å½¢çж
        switch (this.shape) {
          case 'icon':
          case 'round':
            clazz += ' tn-round'
            break
        }
        // é˜´å½±
        if (this.shadow) {
          if (this.backgroundColorClass !== '' && this.backgroundColorClass.indexOf('tn-bg') != -1) {
            const color = this.backgroundColor.slice(this.backgroundColor.lastIndexOf('-') + 1)
            clazz += ` tn-shadow-${color}`
          } else {
            clazz += ' tn-shadow-blur'
          }
        }
        // å­—体加粗
        if (this.fontBold) {
          clazz += ' tn-text-bold'
        }
        // è®¾ç½®ä¸ºé•‚空并且设置镂空便可才进行设置
        if (this.plain) {
          clazz += ' tn-btn--plain'
          if (this.border) {
            clazz += ' tn-border-solid'
            if (this.borderBold) {
              clazz += ' tn-bold-border'
            }
            if (this.backgroundColor !== '' && this.backgroundColor.includes('tn-bg')) {
              const color = this.backgroundColor.slice(this.backgroundColor.lastIndexOf('-') + 1)
              clazz += ` tn-border-${color}`
            }
          }
        }
        return clazz
      },
      // æŒ‰é’®çš„æ ·å¼
      buttonStyle() {
        let style = {}
        switch(this.size) {
          case 'sm':
            style.padding = '0 20rpx'
            style.fontSize = '22rpx'
            style.height = this.height || '48rpx'
            break
          case 'lg':
            style.padding = '0 40rpx'
            style.fontSize = '32rpx'
            style.height = this.height || '80rpx'
            break
          default :
            style.padding = '0 30rpx'
            style.fontSize = '28rpx'
            style.height = this.height || '64rpx'
        }
        // æ˜¯å¦æ‰‹åŠ¨è®¾ç½®äº†å†…è¾¹è·
        if (this.padding) {
          style.padding = this.padding
        }
        // æ˜¯å¦æ‰‹åŠ¨è®¾ç½®å¤–è¾¹è·
        if (this.margin) {
          style.margin = this.margin
        }
        // æ˜¯å¦æ‰‹åŠ¨è®¾ç½®äº†å­—ä½“å¤§å°
        if (this.fontSize) {
          style.fontSize = this.fontSize + this.fontUnit
        }
        style.width = this.shape === 'icon' ? style.height : this.width
        style.padding = this.shape === 'icon' ? '0' : style.padding
        if (this.fontColorStyle) {
          style.color = this.fontColorStyle
        }
        if (!this.backgroundColorClass) {
          if (this.plain) {
            style.borderColor = this.backgroundColorStyle || '#080808'
          } else {
            style.backgroundColor = this.backgroundColorStyle || '#FFFFFF'
          }
        }
        // è®¾ç½®é˜´å½±
        if (this.shadow && !this.backgroundColorClass) {
          if (this.backgroundColorStyle.indexOf('#') != -1) {
            style.boxShadow = `6rpx 6rpx 8rpx ${(this.backgroundColorStyle || '#000000')}10`
          } else if (this.backgroundColorStyle.indexOf('rgb') != -1 || this.backgroundColorStyle.indexOf('rgba') != -1 || !this.backgroundColorStyle) {
            style.boxShadow = `6rpx 6rpx 8rpx ${(this.backgroundColorStyle || 'rgba(0, 0, 0, 0.1)')}`
          }
        }
        return style
      },
    },
    data() {
      return {
        // ä¸Šæ¬¡ç‚¹å‡»çš„æ—¶é—´
        clickTime: 0,
        // ä¸¤æ¬¡ç‚¹å‡»é˜²æŠ–的间隔时间
        clickIntervalTime: 200
      }
    },
    methods: {
      // æŒ‰é’®ç‚¹å‡»äº‹ä»¶
      handleClick() {
        if (this.disabled) {
          return
        }
        if (this.blockRepeatClick) {
          const nowTime = new Date().getTime()
          if (nowTime - this.clickTime <= this.clickIntervalTime) {
            return
          }
          this.clickTime = nowTime
          setTimeout(() => {
            this.clickTime = 0
          }, this.clickIntervalTime)
        }
        this.$emit('click', {
          index: Number(this.index)
        })
        // å…¼å®¹tap事件
        this.$emit('tap', {
          index: Number(this.index)
        })
      },
      handleGetUserInfo({ detail = {} } = {}) {
          this.$emit('getuserinfo', detail);
      },
      handleContact({ detail = {} } = {}) {
          this.$emit('contact', detail);
      },
      handleGetPhoneNumber({ detail = {} } = {}) {
          this.$emit('getphonenumber', detail);
      },
      handleError({ detail = {} } = {}) {
          this.$emit('error', detail);
      },
    }
  }
</script>
<style lang="scss" scoped>
  .tn-btn {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    line-height: 1;
    text-align: center;
    text-decoration: none;
    overflow: visible;
    transform: translate(0rpx, 0rpx);
    // background-color: $tn-mai
    border-radius: 12rpx;
    // color: $tn-font-color;
    margin: 0;
    &--plain {
      background-color: transparent !important;
      background-image: none;
      &.tn-round {
        border-radius: 1000rpx !important;
      }
    }
  }
</style>
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/components/tn-calendar/tn-calendar.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,707 @@
<template>
  <tn-popup
    v-model="value"
    mode="bottom"
    :popup="false"
    length="auto"
    :borderRadius="borderRadius"
    :safeAreaInsetBottom="safeAreaInsetBottom"
    :maskCloseable="maskCloseable"
    :closeBtn="closeBtn"
    :zIndex="elIndex"
    @close="close"
  >
    <view class="tn-calendar-class tn-calendar">
      <!-- å¤´éƒ¨ -->
      <view class="tn-calendar__header">
        <view v-if="!$slots.tooltip || !$slots.$tooltip" class="tn-calendar__header__text">
          {{ toolTips }}
        </view>
        <view v-else>
          <slot name="tooltip"></slot>
        </view>
      </view>
      <!-- æ“ä½œæç¤ºä¿¡æ¯ -->
      <view class="tn-calendar__action">
        <view v-if="changeYear" class="tn-calendar__action__icon" :style="{backgroundColor: yearArrowColor}" @tap.stop="changeYearHandler(false)">
          <view><text class="tn-icon-left"></text></view>
        </view>
        <view v-if="changeMonth" class="tn-calendar__action__icon" :style="{backgroundColor: monthArrowColor}" @tap.stop="changeMonthHandler(false)">
          <view><text class="tn-icon-left"></text></view>
        </view>
        <view class="tn-calendar__action__text">{{ dateTitle }}</view>
        <view v-if="changeMonth" class="tn-calendar__action__icon" :style="{backgroundColor: monthArrowColor}" @tap.stop="changeMonthHandler(true)">
          <view><text class="tn-icon-right"></text></view>
        </view>
        <view v-if="changeYear" class="tn-calendar__action__icon" :style="{backgroundColor: yearArrowColor}" @tap.stop="changeYearHandler(true)">
          <view><text class="tn-icon-right"></text></view>
        </view>
      </view>
      <!-- æ˜ŸæœŸä¸­æ–‡æ ‡è¯† -->
      <view class="tn-calendar__week-day-zh">
        <view v-for="(item,index) in weekDayZh" :key="index" class="tn-calendar__week-day-zh__text">{{ item }}</view>
      </view>
      <!-- æ—¥åކ䏻体 -->
      <view class="tn-calendar__content">
        <!-- å‰ç½®ç©ºç™½éƒ¨åˆ† -->
        <block v-for="(item, index) in weekdayArr" :key="index">
          <view class="tn-calendar__content__item"></view>
        </block>
        <view
          v-for="(item, index) in daysArr"
          :key="index"
          class="tn-calendar__content__item"
          :class="{
            'tn-hover': disabledChoose(year, month, index + 1),
            'tn-calendar__content--start-date': (mode === 'range' && startDate == `${year}-${month}-${index+1}`) || mode === 'date',
            'tn-calendar__content--end-date': (mode === 'range' && endDate == `${year}-${month}-${index+1}`) || mode === 'date'
          }"
          :style="{
            backgroundColor: colorValue(index, 'bg')
          }"
          @tap.stop="dateClick(index)"
        >
          <view class="tn-calendar__content__item__text" :style="{color: colorValue(index, 'text')}">
            <view>{{ item.day }}</view>
          </view>
          <view class="tn-calendar__content__item__tips" :style="{color: item.color}">
            {{ item.bottomInfo }}
          </view>
        </view>
        <view class="tn-calendar__content__month--bg">{{ month }}</view>
      </view>
      <!-- åº•部 -->
      <view class="tn-calendar__bottom">
        <view class="tn-calendar__bottom__choose">
          <text>{{ mode === 'date' ? activeDate : startDate }}</text>
          <text v-if="endDate">至{{ endDate }}</text>
        </view>
        <view class="tn-calendar__bottom__btn" :style="{backgroundColor: btnColor}" @click="handleBtnClick(false)">
          <view class="tn-calendar__bottom__btn--text">确定</view>
        </view>
      </view>
    </view>
  </tn-popup>
</template>
<script>
  import Calendar from '../../libs/utils/calendar.js'
  export default {
    name: 'tn-calendar',
    props: {
      // åŒå‘绑定控制组件弹出与收起
      value: {
        type: Boolean,
        default: false
      },
      // æ¨¡å¼
      // date -> å•日期 range -> æ—¥æœŸèŒƒå›´
      mode: {
        type: String,
        default: 'date'
      },
      // æ˜¯å¦å…è®¸åˆ‡æ¢å¹´ä»½
      changeYear: {
        type: Boolean,
        default: true
      },
      // æ˜¯å¦å…è®¸åˆ‡æ¢æœˆä»½
      changeMonth: {
        type: Boolean,
        default: true
      },
      // å¯åˆ‡æ¢çš„æœ€å¤§å¹´ä»½
      maxYear: {
        type: [Number, String],
        default: 2100
      },
      // å¯åˆ‡æ¢çš„æœ€å°å¹´ä»½
      minYear: {
        type: [Number, String],
        default: 1970
      },
      // æœ€å°æ—¥æœŸ(不在范围被不允许选择)
      minDate: {
        type: String,
        default: '1970-01-01'
      },
      // æœ€å¤§æ—¥æœŸï¼Œå¦‚果为空则默认为今天
      maxDate: {
        type: String,
        default: ''
      },
      // åˆ‡æ¢æœˆä»½æŒ‰é’®çš„颜色
      monthArrowColor: {
        type: String,
        default: '#AAAAAA'
      },
      // åˆ‡æ¢å¹´ä»½æŒ‰é’®çš„颜色
      yearArrowColor: {
        type: String,
        default: '#C8C8C8'
      },
      // é»˜è®¤å­—体颜色
      color: {
        type: String,
        default: '#080808'
      },
      // é€‰ä¸­|起始结束日期背景颜色
      activeBgColor: {
        type: String,
        default: '#01BEFF'
      },
      // é€‰ä¸­|起始结束日期文字颜色
      activeColor: {
        type: String,
        default: '#FFFFFF'
      },
      // èŒƒå›´æ—¥æœŸå†…的背景颜色
      rangeBgColor: {
        type: String,
        default: '#E6E6E655'
      },
      // èŒƒå›´æ—¥æœŸå†…的文字颜色
      rangeColor: {
        type: String,
        default: '#01BEFF'
      },
      // èµ·å§‹æ—¥æœŸæ˜¾ç¤ºçš„æ–‡å­—,mode=range时生效
      startText: {
        type: String,
        default: '开始'
      },
      // ç»“束日期显示的文字,mode=range时生效
      endText: {
        type: String,
        default: '结束'
      },
      // æŒ‰é’®èƒŒæ™¯é¢œè‰²
      btnColor: {
        type: String,
        default: '#01BEFF'
      },
      // å†œåŽ†æ–‡å­—çš„é¢œè‰²
      lunarColor: {
        type: String,
        default: '#AAAAAA'
      },
      // é€‰ä¸­æ—¥æœŸæ˜¯å¦æœ‰é€‰ä¸­æ•ˆæžœ
      isActiveCurrent: {
        type: Boolean,
        default: true
      },
      // åˆ‡æ¢å¹´æœˆæ˜¯å¦è§¦å‘事件,mode=date时生效
      isChange: {
        type: Boolean,
        default: false
      },
      // æ˜¯å¦æ˜¾ç¤ºå†œåކ
      showLunar: {
        type: Boolean,
        default: true
      },
      // é¡¶éƒ¨æç¤ºæ–‡å­—
      toolTips: {
        type: String,
        default: '请选择日期'
      },
      // æ˜¾ç¤ºåœ†è§’的大小
      borderRadius: {
        type: Number,
        default: 8
      },
      // æ˜¯å¦å¼€å¯åº•部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距
      safeAreaInsetBottom: {
          type: Boolean,
          default: false
      },
      // æ˜¯å¦å¯ä»¥é€šè¿‡ç‚¹å‡»é®ç½©è¿›è¡Œå…³é—­
      maskCloseable: {
          type: Boolean,
          default: true
      },
      // zIndex
      zIndex: {
        type: Number,
        default: 0
      },
      // æ˜¯å¦æ˜¾ç¤ºå…³é—­æŒ‰é’®
      closeBtn: {
        type: Boolean,
        default: false
      },
    },
    computed: {
      dateChange() {
        return `${this.mode}-${this.minDate}-${this.maxDate}`
      },
      elIndex() {
        return this.zIndex ? this.zIndex : this.$t.zIndex.popup
      },
      colorValue() {
        return (index, type) => {
          let color = type === 'bg' ? '' : this.color
          let day = index + 1
          let date = `${this.year}-${this.month}-${day}`
          let timestamp = new Date(date.replace(/\-/g,'/')).getTime()
          let start = this.startDate.replace(/\-/g,'/')
          let end = this.endDate.replace(/\-/g,'/')
          if ((this.mode === 'date' && this.isActiveCurrent && this.activeDate == date) || this.startDate == date || this.endDate == date) {
            color = type === 'bg' ? this.activeBgColor : this.activeColor
          } else if (this.endDate && timestamp > new Date(start).getTime() && timestamp < new Date(end).getTime()) {
            color = type === 'bg' ? this.rangeBgColor : this.rangeColor
          }
          return color
        }
      }
    },
    data() {
      return {
        // æ˜ŸæœŸå‡ ï¼Œ1-7
        weekday: 1,
        weekdayArr: [],
        // æ˜ŸæœŸå¯¹åº”的中文
        weekDayZh: ['日','一','二','三','四','五','六'],
        // å½“前月有多少天
        days: 0,
        daysArr: [],
        year: 2021,
        month: 0,
        day: 0,
        startYear: 0,
        startMonth: 0,
        startDay: 0,
        endYear: 0,
        endMonth: 0,
        endDay: 0,
        today: '',
        activeDate: '',
        startDate: '',
        endDate: '',
        min: null,
        max: null,
        // æ—¥æœŸæ ‡é¢˜
        dateTitle: '',
        // æ ‡è®°æ˜¯å¦å·²ç»é€‰æ‹©äº†å¼€å§‹æ—¥æœŸ
        chooseStart: false
      }
    },
    watch: {
      dateChange() {
        this.init()
      }
    },
    created() {
      this.init()
    },
    methods: {
      // åˆå§‹åŒ–
      init() {
        let now = new Date()
        this.year = now.getFullYear()
        this.month = now.getMonth() + 1
        this.day = now.getDate()
        this.today = `${this.year}-${this.month}-${this.day}`
        this.activeDate = this.today
        this.min = this.initDate(this.minDate)
        this.max = this.initDate(this.maxDate || this.today)
        this.startDate = ''
        this.startYear = 0
        this.startMonth = 0
        this.startDay = 0
        this.endDate = ''
        this.endYear = 0
        this.endMonth = 0
        this.endDay = 0
        this.chooseStart = false
        this.changeData()
      },
      // åˆ‡æ¢æœˆä»½
      changeMonthHandler(add) {
        if (add) {
          let month = this.month + 1
          let year = month > 12 ? this.year + 1 : this.year
          if (!this.checkRange(year)) {
            this.month = month > 12 ? 1 : month
            this.year = year
            this.changeData()
          }
        } else {
          let month = this.month - 1
          let year = month < 1 ? this.year - 1 : this.year
          if (!this.checkRange(year)) {
            this.month = month < 1 ? 12 : month
            this.year = year
            this.changeData()
          }
        }
      },
      // åˆ‡æ¢å¹´ä»½
      changeYearHandler(add) {
        let year = add ? this.year + 1 : this.year - 1
        if (!this.checkRange(year)) {
          this.year = year
          this.changeData()
        }
      },
      // æ—¥æœŸç‚¹å‡»äº‹ä»¶
      dateClick(day) {
        day += 1
        if (!this.disabledChoose(this.year, this.month, day)) {
          this.day = day
          let date = `${this.year}-${this.month}-${day}`
          if (this.mode === 'date') {
            this.activeDate = date
          } else {
            let startTimeCompare = new Date(date.replace(/\-/g,'/')).getTime() < new Date(this.startDate.replace(/\-/g,'/')).getTime()
            if (!this.chooseStart || startTimeCompare) {
              this.startDate = date
              this.startYear = this.year
              this.startMonth = this.month
              this.startDay = this.day
              this.endYear = 0
              this.endMonth = 0
              this.endDay = 0
              this.endDate = ''
              this.activeDate = ''
              this.chooseStart = true
            } else {
              this.endDate = date
              this.endYear = this.year
              this.endMonth = this.month
              this.endDay = this.day
              this.chooseStart = false
            }
          }
          this.daysArr = this.handleDaysArr()
        }
      },
      // ä¿®æ”¹æ—¥æœŸæ•°æ®
      changeData() {
        this.days = this.getMonthDay(this.year, this.month)
        this.daysArr = this.handleDaysArr()
        this.weekday = this.getMonthFirstWeekDay(this.year, this.month)
        this.weekdayArr = this.generateArray(1, this.weekday)
        this.dateTitle = `${this.year}å¹´${this.month}月`
        if (this.isChange && this.mode === 'date') {
          this.handleBtnClick(true)
        }
      },
      // å¤„理按钮点击
      handleBtnClick(show) {
        if (!show) {
          this.close()
        }
        if (this.mode === 'date') {
          let arr = this.activeDate.split('-')
          let year = this.isChange ? this.year : Number(arr[0])
          let month = this.isChange ? this.month : Number(arr[1])
          let day = this.isChange ? this.day : Number(arr[2])
          let days = this.getMonthDay(year, month)
          let result = `${year}-${this.formatNumber(month)}-${this.formatNumber(day)}`
          let weekText = this.getWeekText(result)
          let isToday = false
          if (`${year}-${month}-${day}` === this.today) {
            isToday = true
          }
          this.$emit('change', {
            year,
            month,
            day,
            days,
            week: weekText,
            isToday,
            date: result,
            // æ˜¯å¦ä¸ºåˆ‡æ¢å¹´æœˆæ“ä½œ
            switch: show
          })
        } else {
          if (!this.startDate || !this.endDate) return
          let startMonth = this.formatNumber(this.startMonth)
          let startDay = this.formatNumber(this.startDay)
          let startDate = `${this.startYear}-${startMonth}-${startDay}`
          let startWeek = this.getWeekText(startDate)
          let endMonth = this.formatNumber(this.endMonth)
          let endDay = this.formatNumber(this.endDay)
          let endDate = `${this.endYear}-${endMonth}-${endDay}`
          let endWeek = this.getWeekText(endDate)
          this.$emit('change', {
            startYear: this.startYear,
            startMonth: this.startMonth,
            startDay: this.startDay,
            startDate,
            startWeek,
            endYear: this.endYear,
            endMonth: this.endMonth,
            endDay: this.endDay,
            endDate,
            endWeek
          })
        }
      },
      // åˆ¤æ–­æ˜¯å¦å…è®¸é€‰æ‹©
      disabledChoose(year, month, day) {
        let flag = true
        let date = `${year}/${month}/${day}`
        let min = `${this.min.year}/${this.min.month}/${this.min.day}`
        let max = `${this.max.year}/${this.max.month}/${this.max.day}`
        let timestamp = new Date(date).getTime()
        if (timestamp >= new Date(min).getTime() && timestamp <= new Date(max).getTime()) {
          flag = false
        }
        return flag
      },
      // æ£€æŸ¥æ˜¯å¦åœ¨æ—¥æœŸèŒƒå›´å†…
      checkRange(year) {
        let overstep = false
        if (year < this.minYear || year > this.maxYear) {
          uni.showToast({
            title: '所选日期超出范围',
            icon: 'none'
          })
          overstep = true
        }
        return overstep
      },
      // å¤„理日期
      initDate(date) {
        let fdate = date.split('-')
        return {
          year: Number(fdate[0] || 1970),
          month: Number(fdate[1] || 1),
          day: Number(fdate[2] || 1)
        }
      },
      // å¤„理日期数组
      handleDaysArr() {
        let days = this.generateArray(1, this.days)
        let daysArr = days.map((item) => {
          let bottomInfo = this.showLunar ? Calendar.solar2lunar(this.year, this.month, item).IDayCn : ''
          let color = this.showLunar ? this.lunarColor : this.activeColor
          if (
            (this.mode === 'date' && this.day == item) ||
            (this.mode === 'range' && (this.startDay == item || this.endDay == item))
          ) {
            color = this.activeColor
          }
          if (this.mode === 'range') {
            if (this.startDay == item && this.startDay != this.endDay) {
              bottomInfo = this.startText
            }
            if (this.endDay == item) {
              bottomInfo = this.endText
            }
          }
          return {
            day: item,
            color: color,
            bottomInfo: bottomInfo
          }
        })
        return daysArr
      },
      // èŽ·å–å¯¹åº”æœˆæœ‰å¤šå°‘å¤©
      getMonthDay(year, month) {
        return new Date(year, month, 0).getDate()
      },
      // èŽ·å–å¯¹åº”æœˆçš„ç¬¬ä¸€å¤©æ—¶æ˜ŸæœŸå‡ 
      getMonthFirstWeekDay(year, month) {
        return new Date(`${year}/${month}/01 00:00:00`).getDay()
      },
      // èŽ·å–å¯¹åº”æ˜ŸæœŸçš„æ–‡æœ¬
      getWeekText(date) {
        date = new Date(`${date.replace(/\-/g, '/')} 00:00:00`)
        let week = date.getDay()
        return '星期' + this.weekDayZh[week]
      },
      // ç”Ÿæˆæ—¥æœŸå¤©æ•°æ•°ç»„
      generateArray(start, end) {
        return Array.from(new Array(end + 1).keys()).slice(start)
      },
      // æ ¼å¼åŒ–æ•°å­—
      formatNumber(num) {
        return num < 10 ? '0' + num : num + ''
      },
      // å…³é—­çª—口
      close() {
        this.$emit('input', false)
      }
    }
  }
</script>
<style lang="scss" scoped>
  .tn-calendar {
    color: $tn-font-color;
    &__header {
      width: 100%;
      box-sizing: border-box;
      font-size: 30rpx;
      background-color: #FFFFFF;
      color: $tn-main-color;
      &__text {
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: center;
        margin-top: 30rpx;
        padding: 0 60rpx;
      }
    }
    &__action {
      display: flex;
      flex-direction: row;
      justify-content: center;
      align-items: center;
      padding: 40rpx 0 40rpx 0;
      &__icon {
        display: flex;
        align-items: center;
        justify-content: center;
        margin: 0 16rpx;
        width: 32rpx;
        height: 32rpx;
        font-size: 20rpx;
        // line-height: 32rpx;
        border-radius: 50%;
        color: #FFFFFF;
      }
      &__text {
        padding: 0 16rpx;
        color: $tn-font-color;
        font-size: 32rpx;
        font-weight: bold;
      }
    }
    &__week-day-zh {
      display: flex;
      flex-direction: row;
      align-items: center;
      justify-content: center;
      padding: 12rpx 0;
      overflow: hidden;
      box-shadow: 16rpx 6rpx 8rpx 0 #E6E6E6;
      margin-bottom: 2rpx;
      &__text {
        flex: 1;
        text-align: center;
      }
    }
    &__content {
      display: flex;
      flex-direction: row;
      flex-wrap: wrap;
      width: 100%;
      padding: 12rpx 0;
      box-sizing: border-box;
      background-color: #F7F7F7;
      position: relative;
      &__item {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        width: 14.2857%;
        padding: 12rpx 0;
        margin: 6rpx 0;
        overflow: hidden;
        position: relative;
        z-index: 2;
        // box-shadow: inset 0rpx 0rpx 22rpx 4rpx rgba(255,255,255, 0.52);
        &__text {
          display: flex;
          flex-direction: column;
          align-items: center;
          justify-content: center;
          height: 80rpx;
          font-size: 32rpx;
          position: relative;
        }
        &__tips {
          position: absolute;
          width: 100%;
          line-height: 24rpx;
          left: 0;
          bottom: 8rpx;
          text-align: center;
          z-index: 2;
          transform-origin: center center;
          transform: scale(0.8);
        }
      }
      &--start-date {
        border-top-left-radius: 8rpx;
        border-bottom-left-radius: 8rpx;
      }
      &--end-date {
        border-top-right-radius: 8rpx;
        border-bottom-right-radius: 8rpx;
      }
      &__month {
        &--bg {
          position: absolute;
          font-size: 200rpx;
          line-height: 200rpx;
          left: 50%;
          top: 50%;
          transform: translate(-50%, -50%);
          color: $tn-font-holder-color;
          z-index: 1;
        }
      }
    }
    &__bottom {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      width: 100%;
      background-color: #F7F7F7;
      padding: 0 40rpx 30rpx;
      box-sizing: border-box;
      font-size: 24rpx;
      color: $tn-font-sub-color;
      &__choose {
        height: 50rpx;
      }
      &__btn {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 100%;
        height: 60rpx;
        border-radius: 40rpx;
        color: #FFFFFF;
        font-size: 28rpx;
      }
    }
  }
</style>
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/components/tn-car-keyboard/tn-car-keyboard.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,320 @@
<template>
  <view class="tn-car-keyboard-class tn-car-keyboard" @touchmove.stop.prevent="() => {}">
    <view class="tn-car-keyboard__grids">
      <view
        v-for="(data, index) in inputCarNumber ? endKeyBoardList : areaList"
        :key="index"
        class="tn-car-keyboard__grids__item"
      >
        <view
          v-for="(sub_data, sub_index) in data"
          :key="sub_index"
          class="tn-car-keyboard__grids__btn"
          :class="{'tn-car-keyboard__grids__btn--disabled': sub_data === 'I'}"
          :hover-class="sub_data !== 'I' ? 'tn-car-keyboard--hover' : ''"
          :hover-stay-time="100"
          @tap="click(index, sub_index)"
        >
          {{ sub_data }}
        </view>
      </view>
      <view
        class="tn-car-keyboard__back"
        hover-class="tn-hover-class"
        :hover-stay-time="150"
        @touchstart.stop="backspaceClick"
        @touchend="clearTimer"
      >
        <view class="tn-icon-left-arrow tn-car-keyboard__back__icon"></view>
      </view>
      <view
        class="tn-car-keyboard__change"
        hover-class="tn-car-keyboard--hover"
        :hover-stay-time="150"
        @tap="changeMode"
      >
        <text class="tn-car-keyboard__mode--zh" :class="[`tn-car-keyboard__mode--${!inputCarNumber ? 'active' : 'inactive'}`]">中</text>
        /
        <text class="tn-car-keyboard__mode--en" :class="[`tn-car-keyboard__mode--${inputCarNumber ? 'active' : 'inactive'}`]">英</text>
      </view>
    </view>
  </view>
</template>
<script>
  export default {
    name: 'tn-car-keyboard',
    props: {
      // æ˜¯å¦æ‰“乱键盘顺序
      randomEnabled: {
        type: Boolean,
        default: false
      },
      // åˆ‡æ¢ä¸­è‹±æ–‡è¾“å…¥
      switchEnMode: {
        type: Boolean,
        default: false
      }
    },
    computed: {
      areaList() {
        let data = [
          '京',
          '沪',
          '粤',
          'æ´¥',
          '冀',
          '豫',
          '云',
          'è¾½',
          '黑',
          '湘',
          '皖',
          '鲁',
          '苏',
          '浙',
          'èµ£',
          '鄂',
          '桂',
          '甘',
          '晋',
          '陕',
          '蒙',
          '吉',
          '闽',
          'è´µ',
          '渝',
          '川',
          '青',
          '琼',
          '宁',
          '藏',
          '港',
          'æ¾³',
          '新',
          '使',
          'å­¦',
          '临',
          'è­¦'
        ]
        // æ‰“乱顺序
        if (this.randomEnabled) data = this.$t.array.random(data)
        // åˆ‡å‰²äºŒç»´æ•°ç»„
        let showData = []
        showData[0] = data.slice(0, 10)
        showData[1] = data.slice(10, 20)
        showData[2] = data.slice(20, 30)
        showData[3] = data.slice(30, 37)
        return showData
      },
      endKeyBoardList() {
        let data = [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          0,
          'Q',
          'W',
          'E',
          'R',
          'T',
          'Y',
          'U',
          'I',
          'O',
          'P',
          'A',
          'S',
          'D',
          'F',
          'G',
          'H',
          'J',
          'K',
          'L',
          'Z',
          'X',
          'C',
          'V',
          'B',
          'N',
          'M'
        ]
        // æ‰“乱顺序
        if (this.randomEnabled) data = this.$t.array.random(data)
        // åˆ‡å‰²äºŒç»´æ•°ç»„
        let showData = []
        showData[0] = data.slice(0, 10)
        showData[1] = data.slice(10, 20)
        showData[2] = data.slice(20, 29)
        showData[3] = data.slice(29, 36)
        return showData
      }
    },
    data() {
      return {
        // æ ‡è®°æ˜¯å¦è¾“入车牌号码
        inputCarNumber: false,
        // é•¿æŒ‰å¤šæ¬¡åˆ é™¤äº‹ä»¶ç›‘听
        longPressDeleteTimer: null
      }
    },
    watch:{
      switchEnMode: {
        handler(value) {
          if (value) {
            this.inputCarNumber = true
          } else {
            this.inputCarNumber = false
          }
        },
        immediate: true
      }
    },
    methods: {
      // ç‚¹å‡»é”®ç›˜æŒ‰é’®
      click(i, j) {
        let value = ''
        // æ ¹æ®ä¸åŒæ¨¡å¼èŽ·å–ä¸åŒæ•°ç»„çš„å€¼
        if (this.inputCarNumber) value = this.endKeyBoardList[i][j]
        else value = this.areaList[i][j]
        // è½¦ç‰Œé‡Œä¸åŒ…含I
        if (value === 'I') return
        this.$emit('change', value)
      },
      // ä¿®æ”¹è¾“入模式
      // ä¸­æ–‡/英文
      changeMode() {
        this.inputCarNumber = !this.inputCarNumber
      },
      // ç‚¹å‡»é€€æ ¼
      backspaceClick() {
        this.$emit('backspace')
        this.clearTimer()
        this.longPressDeleteTimer = setInterval(() => {
          this.$emit('backspace')
        }, 250)
      },
      // æ¸…空定时器
      clearTimer() {
        if (this.longPressDeleteTimer) {
          clearInterval(this.longPressDeleteTimer)
          this.longPressDeleteTimer = null
        }
      }
    }
  }
</script>
<style lang="scss" scoped>
  .tn-car-keyboard {
    position: relative;
    padding: 24rpx 0;
    background-color: #E6E6E6;
    &__grids {
      &__item {
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: center;
      }
      &__btn {
        display: inline-flex;
        justify-content: center;
        flex: 0 0 64rpx;
        width: 62rpx;
        height: 80rpx;
        font-size: 38rpx;
        line-height: 80rpx;
        font-weight: 500;
        text-decoration: none;
        text-align: center;
        background-color: #FFFFFF;
        margin: 8rpx 5rpx;
        border-radius: 8rpx;
        box-shadow: 0 2rpx 0rpx $tn-box-shadow-color;
        &--disabled {
          opacity: 0.6;
        }
      }
    }
    &__back {
      display: flex;
      flex-direction: row;
      align-items: center;
      justify-content: center;
      position: absolute;
      width: 96rpx;
      height: 80rpx;
      right: 22rpx;
      bottom: 32rpx;
      background-color: #E6E6E6;
      border-radius: 8rpx;
      box-shadow: 0 2rpx 0rpx $tn-box-shadow-color;
    }
    &__change {
      display: flex;
      flex-direction: row;
      align-items: center;
      justify-content: center;
      position: absolute;
      width: 96rpx;
      height: 80rpx;
      left: 22rpx;
      bottom: 32rpx;
      line-height: 1;
      background-color: #FFFFFF;
      border-radius: 8rpx;
      box-shadow: 0 2rpx 0rpx $tn-box-shadow-color;
    }
    &__mode {
      &--zh {
        transform: translateY(-10rpx);
      }
      &--en {
        transform: translateY(10rpx);
      }
      &--active {
        color: $tn-main-color;
        font-size: 30rpx;
      }
      &--inactive {
        &.tn-car-keyboard__mode--zh {
          transform: scale(0.85) translateY(-10rpx);
        }
      }
      &--inactive {
        &.tn-car-keyboard__mode--en {
          transform: scale(0.85) translateY(10rpx);
        }
      }
    }
    &--hover {
      background-color: #E6E6E6 !important;
    }
  }
</style>
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/components/tn-cascade-selection/tn-cascade-selection.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,654 @@
<template>
  <view class="tn-cascade-selection tn-cascade-selection-class">
    <scroll-view
      class="selection__scroll-view"
      :class="[{'tn-border-solid-bottom': headerLine}]"
      :style="[scrollViewStyle]"
      scroll-x
      scroll-with-animation
      :scroll-into-view="scrollViewId"
    >
      <view class="selection__header" :class="[backgroundColorClass]" :style="[headerStyle]">
        <view
          v-for="(item, index) in selectedArr"
          :key="index"
          :id="`select__${index}`"
          class="selection__header__item"
          :class="[headerItemClass(index)]"
          :style="[headerItemStyle(index)]"
          @tap.stop="clickNav(index)"
        >
          {{ item.text }}
          <view
            v-if="index===currentTab && showActiveLine"
            class="selection__header__line"
            :style="{backgroundColor: activeLineColor}"
          ></view>
        </view>
      </view>
    </scroll-view>
    <swiper
      class="selection__list"
      :class="[backgroundColorClass]"
      :style="[listStyle]"
      :current="currentTab"
      :duration="300"
      @change="switchTab"
    >
      <swiper-item
        v-for="(item, index) in selectedArr"
        :key="index"
      >
        <scroll-view
          class="selection__list__item"
          :style="{height: selectionContainerHeight + 'rpx'}"
          scroll-y
          :scroll-into-view="item.scrollViewId"
        >
          <view class="selection__list__item--first"></view>
          <view
            v-for="(subItem, subIndex) in item.list"
            :key="subIndex"
            :id="`select__${subIndex}`"
            class="selection__list__item__cell"
            :style="[itemStyle]"
            @tap="change(index, subIndex, subItem)"
          >
            <view
              v-if="item.index === subIndex"
              class="selection__list__item__icon tn-icon-success"
              :style="[itemIconStyle]"
            ></view>
            <image
              v-if="subItem.src"
              class="selection__list__item__image"
              :style="[itemImageStyle]"
              :src="subItem.src"
            ></image>
            <view
              class="selection__list__item__title"
              :class="[{'tn-text-bold': item.index === subIndex && itemActiveBold}]"
              :style="[itemTitleStyle(index, subIndex)]"
            >
              {{ subItem.text }}
            </view>
            <view
              v-if="subItem.subText"
              class="selection__list__item__title--sub"
              :style="[itemSubTitleStyle]"
            >
              {{ subItem.subText }}
            </view>
          </view>
        </scroll-view>
      </swiper-item>
    </swiper>
  </view>
</template>
<script>
  import componentsColorMixin from '../../libs/mixin/components_color.js'
  export default {
    name: 'tn-cascade-selection',
    mixins: [ componentsColorMixin ],
    props: {
      // å¦‚果下一级是请求返回,则为第一级数据,否则为所有数据
      /* {
        text: '', // æ ‡é¢˜
        subText: '', // å­æ ‡é¢˜
        src: '', // å›¾ç‰‡åœ°å€
        value: 0, // é€‰ä¸­çš„值
        children: [
          {
            text: '',
            subText: '',
            value: 0,
            children: []
          }
        ]
      } */
      list: {
        type: Array,
        default() {
          return []
        }
      },
      // é»˜è®¤é€‰ä¸­å€¼
      // ['value1','value2','value3']
      defaultValue: {
        type: Array,
        default() {
          return []
        }
      },
      // å­é›†æ•°æ®é€šè¿‡è¯·æ±‚来获取
      request: {
        type: Boolean,
        default: false
      },
      // request为true时生效, èŽ·å–åˆ°çš„å­é›†æ•°æ®
      receiveData: {
        type: Array,
        default() {
          return []
        }
      },
      // æ˜¾ç¤ºheader底部细线
      headerLine: {
        type: Boolean,
        default: true
      },
      // header背景颜色
      headerBgColor: {
        type: String,
        default: ''
      },
      // é¡¶éƒ¨æ ‡ç­¾æ é«˜åº¦,单位rpx
      tabsHeight: {
        type: Number,
        default: 88
      },
      // é»˜è®¤æ˜¾ç¤ºæ–‡å­—
      text: {
        type: String,
        default: '请选择'
      },
      // é€‰ä¸­çš„颜色
      activeColor: {
        type: String,
        default: '#01BEFF'
      },
      // é€‰ä¸­åŽåŠ ç²—
      activeBold: {
        type: Boolean,
        default: true
      },
      // é€‰ä¸­æ˜¾ç¤ºåº•部线条
      showActiveLine: {
        type: Boolean,
        default: true
      },
      // çº¿æ¡é¢œè‰²
      activeLineColor: {
        type: String,
        default: '#01BEFF'
      },
      // icon大小,单位rpx
      activeIconSize: {
        type: Number,
        default: 0
      },
      // icon颜色
      activeIconColor: {
        type: String,
        default: '#01BEFF'
      },
      // item图片宽度, å•位rpx
      itemImgWidth: {
        type: Number,
        default: 0
      },
      // item图片高度, å•位rpx
      itemImgHeight: {
        type: Number,
        default: 0
      },
      // item图片圆角
      itemImgRadius: {
        type: String,
        default: '50%'
      },
      // item text颜色
      itemTextColor: {
        type: String,
        default: ''
      },
      // item text选中颜色
      itemActiveTextColor: {
        type: String,
        default: ''
      },
      // item text选中加粗
      itemActiveBold: {
        type: Boolean,
        default: true
      },
      // item text文字大小, å•位rpx
      itemTextSize: {
        type: Number,
        default: 0
      },
      // item subText颜色
      itemSubTextColor: {
        type: String,
        default: ''
      },
      // item subText字体大小, å•位rpx
      itemSubTextSize: {
        type: Number,
        default: 0
      },
      // item样式
      itemStyle: {
        type: Object,
        default() {
          return {}
        }
      },
      // selection选项容器高度, å•位rpx
      selectionContainerHeight: {
        type: Number,
        default: 300
      }
    },
    computed: {
      scrollViewStyle() {
        let style = {}
        if (this.headerBgColor) {
          style.backgroundColor = this.headerBgColor
        }
        return style
      },
      headerStyle() {
        let style = {}
        style.height = `${this.tabsHeight}rpx`
        if (this.backgroundColorStyle) {
          style.backgroundColor = this.backgroundColorStyle
        }
        return style
      },
      headerItemClass() {
        return (index) => {
          let clazz = ''
          if (index !== this.currentTab) {
            clazz += ` ${this.fontColorClass}`
          } else {
            if (this.activeBold) {
              clazz += ' tn-text-bold'
            }
          }
          return clazz
        }
      },
      headerItemStyle() {
        return (index) => {
          let style = {}
          style.color = index === this.currentTab ? this.activeColor : (this.fontColorStyle ? this.fontColorStyle : '')
          if (this.fontSizeStyle) {
            style.fontSize = this.fontSizeStyle
          }
          return style
        }
      },
      listStyle() {
        let style = {}
        style.height = `${this.selectionContainerHeight}rpx`
        if (this.backgroundColorStyle) {
          style.color = this.backgroundColorStyle
        }
        return style
      },
      itemIconStyle() {
        let style = {}
        if (this.activeIconColor) {
          style.color = this.activeIconColor
        }
        if (this.activeIconSize) {
          style.fontSize = this.activeIconSize + 'rpx'
        }
        return style
      },
      itemImageStyle() {
        let style = {}
        if (this.itemImgWidth) {
          style.width = this.itemImgWidth + 'rpx'
        }
        if (this.itemImgHeight) {
          style.height = this.itemImgHeight + 'rpx'
        }
        if (this.itemImgRadius) {
          style.borderRadius = this.itemImgRadius
        }
        return style
      },
      itemTitleStyle() {
        return (index, subIndex) => {
          let style = {}
          if (index === subIndex) {
            if (this.itemActiveTextColor) {
              style.color = this.itemActiveTextColor
            }
          } else {
            if (this.itemTextColor) {
              style.color = this.itemTextColor
            }
          }
          if (this.itemTextSize) {
            style.fontSize = this.itemTextSize + 'rpx'
          }
          return style
        }
      },
      itemSubTitleStyle() {
        let style = {}
        if (this.itemSubTextColor) {
          style.color = this.itemSubTextColor
        }
        if (this.itemSubTextSize) {
          style.fontSize = this.itemSubTextSize + 'rpx'
        }
        return {}
      }
    },
    watch: {
      list(val) {
        this.initData(val, -1)
      },
      defaultValue(val) {
        this.setDefaultValue(val)
      },
      receiveData(val) {
        this.addSubData(val, this.currentTab)
      },
    },
    data() {
      return {
        // å½“前选中的子集
        currentTab: 0,
        // tabs栏scrollView滚动的位置
        scrollViewId: 'select__0',
        // é€‰é¡¹æ•°ç»„
        selectedArr: []
      }
    },
    created() {
      this.setDefaultValue(this.defaultValue)
    },
    methods: {
      // åˆå§‹åŒ–数据
      initData(data, index) {
        if (!data || data.length === 0) return
        if (this.request) {
          // ç¬¬ä¸€çº§æ•°æ®
          this.addSubData(data, index)
        } else {
          this.addSubData(this.getItemList(index, -1), index)
        }
      },
      // é‡ç½®æ•°æ®
      reset() {
        this.initData(this.list, -1)
      },
      // æ»šåŠ¨åˆ‡æ¢
      switchTab(e) {
        this.currentTab = e.detail.current
        this.checkSelectPosition()
      },
      // ç‚¹å‡»æ ‡é¢˜åˆ‡æ¢
      clickNav(index) {
        if (this.currentTab !== index) {
          this.currentTab = index
        }
      },
      // åˆ—表数据发生改变
      change(index, subIndex, subItem) {
        let item = this.selectedArr[index]
        if (item.index === subIndex) return
        item.index = subIndex
        item.text = subItem.text
        item.subText = subItem.subText || ''
        item.value = subItem.value
        item.src = subItem.src || ''
        this.$emit('change', {
          index: index,
          subIndex: subIndex,
          ...subItem
        })
        // å¦‚果不是异步加载,则取出对应的数据
        if (!this.request) {
          let data = this.getItemList(index, subIndex)
          this.addSubData(data, index)
        }
      },
      // è®¾ç½®é»˜è®¤çš„æ•°æ®
      setDefaultValue(val) {
        let defaultValues = val || []
        if (defaultValues.length > 0) {
          this.selectedArr = this.getItemListWithValues(JSON.parse(JSON.stringify(this.list)), defaultValues)
          if (!this.selectedArr) return
          this.currentTab = this.selectedArr.length - 1
          this.$nextTick(() => {
            this.checkSelectPosition()
          })
          // defaultItemList.map((item) => {
          //   item.scrollViewId = `select__${item.index}`
          // })
          // this.selectedArr = defaultItemList
          // this.currentTab = defaultItemList.length - 1
          // this.$nextTick(() => {
          //   this.checkSelectPosition()
          // })
        } else {
          this.initData(this.list, -1)
        }
      },
      // èŽ·å–å¯¹åº”é€‰é¡¹çš„item数据
      getItemList(index, subIndex) {
        let list = []
        let arr = JSON.parse(JSON.stringify(this.list))
        // åˆå§‹åŒ–数据
        if (index === -1) {
          list = this.removeChildren(arr)
        } else {
          // åˆ¤æ–­ç¬¬ä¸€é¡¹æ˜¯å¦å·²ç»é€‰æ‹©
          let value = this.selectedArr[0].index
          value = value === -1 ? subIndex : value
          list = arr[value].children || []
          if (index > 0) {
            for (let i = 1; i < index + 1; i++) {
              // èŽ·å–å½“å‰æ•°æ®é€‰ä¸­çš„åºå·
              let val = index === i ? subIndex : this.selectedArr[i].index
              list = list[val].children || []
              if (list.length === 0) break
            }
          }
          list = this.removeChildren(list)
        }
        return list
      },
      // æ ¹æ®æ•°ç»„中的值获取对应的item数据
      getItemListWithValues(data, values) {
        const defaultValues = JSON.parse(JSON.stringify(values))
        if (!defaultValues || defaultValues.length === 0) return
        // å–出第一个值所对应的item
        const itemIndex = data.findIndex((item) => {
          return item.value === defaultValues[0]
        })
        if (itemIndex === -1) return
        const item = data[itemIndex]
        item.index = itemIndex
        item.scrollViewId = `select__${itemIndex}`
        item.list = this.removeChildren(JSON.parse(JSON.stringify(data)))
        // åˆ¤æ–­æ˜¯å¦åªæœ‰1个值
        if (defaultValues.length === 1 || (!item.hasOwnProperty('children') || item.children.length === 0)) {
          return this.removeChildren([item])
        } else {
          let selectItemList = []
          const children = item.children
          selectItemList.push(item)
          // ç§»é™¤å·²ç»èŽ·å–çš„å€¼
          defaultValues.splice(0, 1)
          const childrenValue = this.getItemListWithValues(children, defaultValues)
          selectItemList = selectItemList.concat(childrenValue)
          return this.removeChildren(selectItemList)
        }
      },
      // åˆ é™¤å­å…ƒç´ 
      removeChildren(data) {
        let list = data.map((item) => {
          if (item.hasOwnProperty('children')) {
            delete item['children']
          }
          return item
        })
        return list
      },
      // æ–°å¢žå­é›†æ•°æ®æ—¶å¤„理
      addSubData(data, index) {
        // åˆ¤æ–­æ˜¯å¦å·²ç»å®Œæˆé€‰æ‹©æ•°æ®æˆ–者为初始化数据
        if (!data || data.length === 0) {
          if (index == -1) return
          // å®Œæˆé€‰æ‹©
          let arr = this.selectedArr
          // å¦‚果当前选中项的序号比已选数据的长度小,则表示当前重新选择了数据
          if (index < arr.length - 1) {
            let newArr = arr.slice(0, index + 1)
            this.selectedArr = newArr
          }
          let result = JSON.parse(JSON.stringify(this.selectedArr))
          let lastItem = result[result.length - 1] || {}
          let text = ''
          result.map(item => {
            text += item.text
            delete item['list']
            delete item['scrollViewId']
            return item
          })
          this.$emit('complete', {
            result: result,
            value: lastItem.value,
            text: text,
            subText: lastItem.subText,
            src: lastItem.src
          })
        } else {
          // é‡ç½®æ•°æ®
          let item = [{
            text: this.text,
            subText: '',
            value: '',
            src: '',
            index: -1,
            scrollViewId: 'select__0',
            list: data
          }]
          // åˆå§‹åŒ–数据
          if (index === -1) {
            this.selectedArr = item
          } else {
            // æ‹¼æŽ¥æ–°æ—§æ•°æ®å¹¶ä¸”判断是否为重新选择了数据(如果为重新选择了数据则重置之后的选项数据)
            let retainArr = this.selectedArr.slice(0, index + 1)
            this.selectedArr = retainArr.concat(item)
          }
          this.$nextTick(() => {
            this.currentTab = this.selectedArr.length - 1
          })
        }
      },
      // æ£€æŸ¥å½“前选中项,并将选项设置位置信息
      checkSelectPosition() {
        let item = this.selectedArr[this.currentTab]
        item.scrollViewId = 'select__0'
        this.$nextTick(() => {
          setTimeout(() => {
            // è®¾ç½®å½“前数据滚动到的位置
            let val = item.index < 2 ? 0 : Number(item.index - 2)
            item.scrollViewId = `select__${val}`
          }, 10)
        })
        // è®¾ç½®é€‰é¡¹æ»šåŠ¨åˆ°æ‰€åœ¨çš„ä½ç½®
        if (this.currentTab > 1) {
          this.scrollViewId = `select__${this.currentTab - 1}`
        } else {
          this.scrollViewId = `select__0`
        }
      }
    }
  }
</script>
<style lang="scss" scoped>
  .tn-cascade-selection {
    width: 100%;
  }
  .selection {
    &__scroll-view {
      background-color: #FFFFFF;
    }
    &__header {
      width: 100%;
      display: flex;
      align-items: center;
      position: relative;
      &__item {
        max-width: 240rpx;
        padding: 15rpx 30rpx;
        flex-shrink: 0;
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
        position: relative;
      }
      &__line {
        width: 60rpx;
        height: 6rpx;
        border-radius: 4rpx;
        position: absolute;
        bottom: 0;
        right: 0;
        left: 50%;
        transform: translateX(-50%);
      }
    }
    &__list {
      background-color: #FFFFFF;
      &__item {
        &--first {
          width: 100%;
          height: 20rpx;
        }
        &__cell {
          width: 100%;
          display: flex;
          align-items: center;
          padding: 20rpx 30rpx;
        }
        &__icon {
          margin-right: 12rpx;
          font-size: 24rpx;
        }
        &__image {
          width: 40rpx;
          height: 40rpx;
          margin-right: 12rpx;
          flex-shrink: 0;
        }
        &__title {
          word-break: break-all;
          color: #333333;
          font-size: 28rpx;
          &--sub {
            margin-left: 20rpx;
            word-break: break-all;
            color: $tn-font-sub-color;
            font-size: 24rpx;
          }
        }
      }
    }
  }
</style>
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/components/tn-checkbox-group/tn-checkbox-group.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,134 @@
<template>
  <view class="tn-checkbox-group-class tn-checkbox-group">
    <slot></slot>
  </view>
</template>
<script>
  import Emitter from '../../libs/utils/emitter.js'
  export default {
    mixins: [ Emitter ],
    name: 'tn-checkbox-group',
    props: {
      value: {
        type: Array,
        default() {
          return []
        }
      },
      // å¯ä»¥é€‰ä¸­å¤šå°‘个checkbox
      max: {
        type: Number,
        default: 999
      },
      // è¡¨å•提交时的标识符
      name: {
        type: String,
        default: ''
      },
      // ç¦ç”¨é€‰æ‹©
      disabled: {
        type: Boolean,
        default: false
      },
      // ç¦ç”¨ç‚¹å‡»æ ‡ç­¾è¿›è¡Œé€‰æ‹©
      disabledLabel: {
        type: Boolean,
        default: false
      },
      // é€‰æ‹©æ¡†çš„形状 square æ–¹å½¢ circle åœ†å½¢
      shape: {
        type: String,
        default: 'square'
      },
      // é€‰ä¸­æ—¶çš„颜色
      activeColor: {
        type: String,
        default: '#01BEFF'
      },
      // ç»„件大小
      size: {
        type: Number,
        default: 34
      },
      // æ¯ä¸ªcheckbox占的宽度
      width: {
        type: String,
        default: 'auto'
      },
      // æ˜¯å¦æ¢è¡Œ
      wrap: {
        type: Boolean,
        default: false
      },
      // å›¾æ ‡å¤§å°
      iconSize: {
        type: Number,
        default: 20
      }
    },
    computed: {
      // è¿™é‡Œcomputed的变量,都是子组件tn-checkbox需要用到的,由于头条小程序的兼容性差异,子组件无法实时监听父组件参数的变化
      // æ‰€ä»¥éœ€è¦æ‰‹åŠ¨é€šçŸ¥å­ç»„ä»¶ï¼Œè¿™é‡Œè¿”å›žä¸€ä¸ªparentData变量,供watch监听,在其中去通知每一个子组件重新从父组件(tn-checkbox-group)
      // æ‹‰å–父组件新的变化后的参数
      parentData() {
        return [this.value, this.disabled, this.disabledLabel, this.shape, this.activeColor, this.size, this.width, this.wrap, this.iconSize]
      }
    },
    data() {
      return {
      }
    },
    watch: {
      // å½“父组件中的子组件需要共享的参数发生了变化,手动通知子组件
      parentData() {
        if (this.children.length) {
          this.children.map(child => {
            // åˆ¤æ–­å­ç»„ä»¶(tn-checkbox)如果有updateParentData方法的话,子组件重新从父组件拉取了最新的值
            typeof(child.updateParentData) === 'function' && child.updateParentData()
          })
        }
      }
    },
    created() {
      this.children = []
    },
    methods: {
      initValue(values) {
        this.$emit('input', values)
      },
      // è§¦å‘事件
      emitEvent() {
        let values = []
        this.children.map(child => {
          if (child.checkValue) values.push(child.name)
        })
        this.$emit('change', values)
        this.$emit('input', values)
        // å‘出事件,用于在表单组件中嵌入checkbox的情况,进行验证
        // ç”±äºŽå¤´æ¡å°ç¨‹åºæ‰§è¡Œè¿Ÿé’ï¼Œæ•…需要用几十毫秒的延时
        setTimeout(() => {
            // å°†å½“前的值发送到 tn-form-item è¿›è¡Œæ ¡éªŒ
            this.dispatch('tn-form-item', 'on-form-change', values)
        }, 60)
      }
    }
  }
</script>
<style lang="scss" scoped>
  .tn-checkbox-group {
    /* #ifndef MP || APP-NVUE */
    display: inline-flex;
    flex-wrap: wrap;
    /* #endif */
    &::after {
      content: " ";
      display: table;
      clear: both;
    }
  }
</style>
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/components/tn-checkbox/tn-checkbox.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,328 @@
<template>
  <view class="tn-checkbox-class tn-checkbox" :style="[checkboxStyle]">
    <view
      class="tn-checkbox__icon-wrap"
      :class="[iconClass]"
      :style="[iconStyle]"
      @tap="toggle"
    >
      <view class="tn-checkbox__icon-wrap__icon" :class="[`tn-icon-${iconName}`]"></view>
    </view>
    <view
      class="tn-checkbox__label"
      :class="[labelClass]"
      :style="{
        fontSize: labelSize ? labelSize + 'rpx' : ''
      }"
      @tap="onClickLabel"
    >
      <slot></slot>
    </view>
  </view>
</template>
<script>
  export default {
    name: 'tn-checkbox',
    props: {
      // checkbox名称
      name: {
        type: [String, Number],
        default: ''
      },
      // æ˜¯å¦ä¸ºé€‰ä¸­çŠ¶æ€
      value: {
        type: Boolean,
        default: false
      },
      // ç¦ç”¨é€‰æ‹©
      disabled: {
        type: Boolean,
        default: false
      },
      // ç¦ç”¨ç‚¹å‡»æ ‡ç­¾è¿›è¡Œé€‰æ‹©
      disabledLabel: {
        type: Boolean,
        default: false
      },
      // é€‰æ‹©æ¡†çš„形状 square æ–¹å½¢ circle åœ†å½¢
      shape: {
        type: String,
        default: ''
      },
      // é€‰ä¸­æ—¶çš„颜色
      activeColor: {
        type: String,
        default: ''
      },
      // ç»„件大小
      size: {
        type: Number,
        default: 0
      },
      // å›¾æ ‡åç§°
      iconName: {
        type: String,
        default: 'success'
      },
      // å›¾æ ‡å¤§å°
      iconSize: {
        type: Number,
        default: 0
      },
      // label的字体大小
      labelSize: {
        type: Number,
        default: 0
      }
    },
    computed: {
      // æ˜¯å¦ç¦ç”¨é€‰ä¸­ï¼Œçˆ¶ç»„件的禁用会覆盖当前的禁用状态
      isDisabled() {
        return this.disabled ? this.disabled : (this.parent ? this.parentData.disabled : false)
      },
      // æ˜¯å¦ç¦ç”¨ç‚¹å‡»label选中,父组件的禁用会覆盖当前的禁用状态
      isDisabledLabel() {
        return this.disabledLabel ? this.disabledLabel : (this.parent ? this.parentData.disabledLabel : false)
      },
      // å°ºå¯¸
      checkboxSize() {
        return this.size ? this.size : (this.parent ? this.parentData.size : 34)
      },
      // æ¿€æ´»æ—¶çš„颜色
      elAvtiveColor() {
        return this.activeColor ? this.activeColor : (this.parent ? this.parentData.activeColor : '#01BEFF')
      },
      // å½¢çж
      elShape() {
        return this.shape ? this.shape : (this.parent ? this.parentData.shape : 'square')
      },
      iconClass() {
        let clazz = ''
        clazz += (' tn-checkbox__icon-wrap--' + this.elShape)
        if (this.checkValue) clazz += ' tn-checkbox__icon-wrap--checked'
        if (this.isDisabled) clazz += ' tn-checkbox__icon-wrap--disabled'
        if (this.value && this.isDisabled) clazz += ' tn-checkbox__icon-wrap--disabled--checked'
        return clazz
      },
      iconStyle() {
        let style = {}
        // åˆ¤æ–­æ˜¯å¦ç”¨æˆ·æ‰‹åŠ¨ç¦ç”¨å’Œä¼ é€’çš„å€¼
        if (this.elAvtiveColor && this.checkValue && !this.isDisabled) {
          style.borderColor = this.elAvtiveColor
          style.backgroundColor = this.elAvtiveColor
        }
        // checkbox内部的勾选图标,如果选中状态,为白色,否则为透明色即可
        style.color = this.checkValue ? '#FFFFFF' : 'transparent'
        style.width = this.checkboxSize + 'rpx'
        style.height = style.width
        style.fontSize = (this.iconSize ? this.iconSize : (this.parent ? this.parentData.iconSize : 20)) + 'rpx'
        return style
      },
      checkboxStyle() {
        let style = {}
        if (this.parent && this.parentData.width) {
          // #ifdef MP
          // å„家小程序因为它们特殊的编译结构,使用float布局
          style.float = 'left';
          // #endif
          // #ifndef MP
          // H5和APP使用flex布局
          style.flex = `0 0 ${this.parentData.width}`;
          // #endif
        }
        if(this.parent && this.parentData.wrap) {
            style.width = '100%';
            // #ifndef MP
            // H5和APP使用flex布局,将宽度设置100%,即可自动换行
            style.flex = '0 0 100%';
            // #endif
        }
        return style
      },
      labelClass() {
        let clazz = ''
        if (this.isDisabled) {
          clazz += ' tn-checkbox__label--disabled'
        }
        return clazz
      }
    },
    data() {
      return {
        // å½“前checkbox的value值
        checkValue: false,
        parentData: {
          value: null,
          max: null,
          disabled: null,
          disabledLabel: null,
          shape: null,
          activeColor: null,
          size: null,
          width: null,
          wrap: null,
          iconSize: null
        }
      }
    },
    watch: {
      value(val) {
        this.checkValue = val
      }
    },
    created() {
      // æ”¯ä»˜å®å°ç¨‹åºä¸æ”¯æŒprovide/inject,所以使用这个方法获取整个父组件,在created定义,避免循环应用
      // this.parent = this.$t.$parent.call(this, 'tn-checkbox-group')
      // // å¦‚果存在u-checkbox-group,将本组件的this塞进父组件的children中
      // this.parent && this.parent.children.push(this)
      // // åˆå§‹åŒ–父组件的value值
      // this.parent && this.parent.emitEvent()
      this.updateParentData()
      this.parent && this.parent.children.push(this)
    },
    methods: {
      updateCheckValue() {
        // æ›´æ–°å½“前checkbox的选中状态
        this.checkValue = (this.parent && this.parentData.value.includes(this.name)) || this.value === true
        if (this.parent) {
          if (this.value && !this.parentData.value.includes(this.name)) {
            this.parentData.value.push(this.name)
            this.parent.initValue(this.parentData.value)
          }
        }
      },
      updateParentData() {
        this.getParentData('tn-checkbox-group')
        this.updateCheckValue()
      },
      onClickLabel() {
        if (!this.isDisabled && !this.isDisabledLabel) {
          this.setValue()
        }
      },
      toggle() {
        if (!this.isDisabled) {
          this.setValue()
        }
      },
      emitEvent() {
        this.$emit('change', {
          name: this.name,
          value: !this.checkValue
        })
        if (this.parent) {
          this.checkValue = !this.checkValue
          // æ‰§è¡Œçˆ¶ç»„ä»¶tn-checkbox-group的事件方法
          // ç­‰å¾…下一个周期再执行,因为this.$emit('input')作用于父组件,再反馈到子组件内部,需要时间
          setTimeout(() => {
            if(this.parent.emitEvent) this.parent.emitEvent();
          }, 80)
        }
      },
      // è®¾ç½®input的值,通过v-modal绑定组件的值
      setValue() {
        // åˆ¤æ–­æ˜¯å¦ä¸ºå¯é€‰é¡¹ç»„
        if (this.parent) {
          // åè½¬çŠ¶æ€
          if (this.checkValue === true) {
            this.emitEvent()
            // this.$emit('input', !this.checkValue)
          } else {
            // è¶…出最大可选项,弹出提示
            if (this.parentData.value.length >= this.parentData.max) {
              return this.$t.message.toast(`最多可选${this.parent.max}项`)
            }
            // å¦‚果原来为未选中状态,需要选中的数量少于父组件中设置的max值,才可以选中
            this.emitEvent();
            // this.$emit('input', !this.checkValue);
          }
        } else {
          // åªæœ‰ä¸€ä¸ªå¯é€‰é¡¹
          this.emitEvent()
          this.$emit('input', !this.checkValue)
        }
      }
    }
  }
</script>
<style lang="scss" scoped>
  .tn-checkbox {
    /* #ifndef APP-NVUE */
    display: inline-flex;
    /* #endif */
    align-items: center;
    overflow: hidden;
    user-select: none;
    line-height: 1.8;
    &__icon-wrap {
      color: $tn-font-color;
      flex: none;
      display: flex;
      flex-direction: row;
      align-items: center;
      justify-content: center;
      box-sizing: border-box;
      width: 42rpx;
      height: 42rpx;
      color: transparent;
      text-align: center;
      transition-property: color, border-color, background-color;
      border: 1px solid $tn-font-sub-color;
      transition-duration: 0.2s;
      /* #ifdef MP-TOUTIAO */
      // å¤´æ¡å°ç¨‹åºå…¼å®¹æ€§é—®é¢˜ï¼Œéœ€è¦è®¾ç½®è¡Œé«˜ä¸º0,否则图标偏下
      &__icon {
          line-height: 0;
      }
      /* #endif */
      &--circle {
        border-radius: 100%;
      }
      &--square {
        border-radius: 6rpx;
      }
      &--checked {
        color: #FFFFFF;
        background-color: $tn-main-color;
        border-color: $tn-main-color;
      }
      &--disabled {
        background-color: $tn-font-holder-color;
        border-color: $tn-font-sub-color;
      }
      &--disabled--checked {
        color: $tn-font-sub-color !important;
      }
    }
    &__label {
      word-wrap: break-word;
      margin-left: 10rpx;
      margin-right: 24rpx;
      color: $tn-font-color;
      font-size: 30rpx;
      &--disabled {
        color: $tn-font-sub-color;
      }
    }
  }
</style>
´úÂë¹ÜÀí/»´°²PDA/tuniao-ui/components/tn-circle-progress/tn-circle-progress.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,223 @@
<template>
  <view
    class="tn-circle-progress-class tn-circle-progress"
    :style="{
      width: widthPx + 'px',
      height: widthPx + 'px'
    }"
  >
    <!-- æ”¯ä»˜å®å°ç¨‹åºä¸æ”¯æŒcanvas-id属性,必须用id属性 -->
    <!-- é»˜è®¤åœ†çޝ -->
    <canvas
      class="tn-circle-progress__canvas-bg"
      :canvas-id="elBgId"
      :id="elBgId"
      :style="{
        width: widthPx + 'px',
        height: widthPx + 'px'
      }"
    ></canvas>
    <!-- è¿›åº¦åœ†çޝ -->
    <canvas
      class="tn-circle-progress__canvas"
      :canvas-id="elId"
      :id="elId"
      :style="{
        width: widthPx + 'px',
        height: widthPx + 'px'
      }"
    ></canvas>
    <view class="tn-circle-progress__content">
      <slot v-if="$slots.default || $slots.$default"></slot>
      <view v-else-if="showPercent" class="tn-circle-progress__content__percent">{{ percent + '%' }}</view>
    </view>
  </view>
</template>
<script>
  export default {
    name: 'tn-circle-progress',
    props: {
      // è¿›åº¦ï¼ˆç™¾åˆ†æ¯”)
      percent: {
        type: Number,
        default: 0,
        validator: val => {
          return val >= 0 && val <= 100
        }
      },
      // åœ†çŽ¯çº¿å®½
      borderWidth: {
        type: Number,
        default: 14
      },
      // æ•´ä½“圆的宽度
      width: {
        type: Number,
        default: 200
      },
      // æ˜¯å¦æ˜¾ç¤ºæ¡çº¹
      striped: {
        type: Boolean,
        default: false
      },
      // æ¡çº¹æ˜¯å¦è¿åЍ
      stripedActive: {
        type: Boolean,
        default: true
      },
      // æ¿€æ´»éƒ¨åˆ†é¢œè‰²
      activeColor: {
        type: String,
        default: '#01BEFF'
      },
      // éžæ¿€æ´»éƒ¨åˆ†é¢œè‰²
      inactiveColor: {
        type: String,
        default: '#f0f0f0'
      },
      // æ˜¯å¦æ˜¾ç¤ºè¿›åº¦æ¡å†…部百分比值
      showPercent: {
        type: Boolean,
        default: false
      },
      // åœ†çŽ¯æ‰§è¡ŒåŠ¨ç”»çš„æ—¶é—´ï¼Œms
      duration: {
        type: Number,
        default: 1500
      }
    },
    data() {
      return {
        // å¾®ä¿¡å°ç¨‹åºä¸­ä¸èƒ½ä½¿ç”¨this.$t.uuid()形式动态生成id值,否则会报错
        // #ifdef MP-WEIXIN
        elBgId: 'tCircleProgressBgId',
        elId: 'tCircleProgressElId',
        // #endif
        // #ifndef MP-WEIXIN
        elBgId: this.$t.uuid(),
        elId: this.$t.uuid(),
        // #endif
        // æ´»åŠ¨åœ†ä¸Šä¸‹æ–‡
        progressContext: null,
        // è½¬æ¢æˆpx为单位的背景宽度
        widthPx: uni.upx2px(this.width || 200),
        // è½¬æ¢æˆpx为单位的圆环宽度
        borderWidthPx: uni.upx2px(this.borderWidth || 14),
        // canvas画圆的起始角度,默认为-90度,顺时针
        startAngle: -90 * Math.PI / 180,
        // åŠ¨æ€ä¿®æ”¹è¿›åº¦å€¼çš„æ—¶å€™ï¼Œä¿å­˜è¿›åº¦å€¼çš„å˜åŒ–å‰åŽå€¼
        newPercent: 0,
        oldPercent: 0
      }
    },
    watch: {
      percent(newVal, oldVal = 0) {
        if (newVal > 100) newVal = 100
        if (oldVal < 0) oldVal = 0
        this.newPercent = newVal
        this.oldPercent = oldVal
        setTimeout(() => {
            // æ— è®ºæ˜¯ç™¾åˆ†æ¯”值增加还是减少,需要操作还是原来的旧的百分比值
            // å°†æ­¤å€¼å‡å°‘或者新增到新的百分比值
            this.drawCircleByProgress(oldVal)
        }, 50)
      }
    },
    created() {
      // èµ‹å€¼ï¼Œç”¨äºŽåŠ è½½åŽç¬¬ä¸€ä¸ªç”»åœ†ä½¿ç”¨
      this.newPercent = this.percent;
      this.oldPercent = 0;
    },
    mounted() {
      setTimeout(() => {
          this.drawProgressBg()
          this.drawCircleByProgress(this.oldPercent)
      }, 50)
    },
    methods: {
      // ç»˜åˆ¶è¿›åº¦æ¡èƒŒæ™¯
      drawProgressBg() {
        let ctx = uni.createCanvasContext(this.elBgId, this)
        // è®¾ç½®çº¿å®½
        ctx.setLineWidth(this.borderWidthPx)
        // è®¾ç½®é¢œè‰²
        ctx.setStrokeStyle(this.inactiveColor)
        ctx.beginPath()
        let radius = this.widthPx / 2
        ctx.arc(radius, radius, radius - this.borderWidthPx, 0, 360 * Math.PI / 180, false)
        ctx.stroke()
        ctx.draw()
      },
      // ç»˜åˆ¶åœ†å¼§çš„进度
      drawCircleByProgress(progress) {
        // å¦‚果已经存在则拿来使用
        let ctx = this.progressContext
        if (!ctx) {
          ctx =uni.createCanvasContext(this.elId, this)
          this.progressContext = ctx
        }
        ctx.setLineCap('round')
        // è®¾ç½®çº¿æ¡å®½åº¦å’Œé¢œè‰²
        ctx.setLineWidth(this.borderWidthPx)
        ctx.setStrokeStyle(this.activeColor)
        // å°†æ€»è¿‡æ¸¡æ—¶é—´é™¤ä»¥100,得出每修改百分之一进度所需的时间
        let preSecondTime = Math.floor(this.duration / 100)
        // ç»“束角的计算依据为:将2π分为100份,乘以当前的进度值,得出终止点的弧度值,加起始角,为整个圆从默认的
        let endAngle = ((360 * Math.PI / 180) / 100) * progress + this.startAngle
        let radius = this.widthPx / 2
        ctx.beginPath()
        ctx.arc(radius, radius, radius - this.borderWidthPx, this.startAngle, endAngle, false)
        ctx.stroke()
        ctx.draw()
        // å¦‚果变更后新值大于旧值,意味着增大了百分比
        if (this.newPercent > this.oldPercent) {
          // æ¯æ¬¡é€’增百分之一
          progress++
          // å¦‚果新增后的值,大于需要设置的值百分比值,停止继续增加
          if (progress > this.newPercent) return
        } else {
          progress--
          if (progress < this.newPercent) return
        }
        setTimeout(() => {
          // å®šæ—¶å™¨ï¼Œæ¯æ¬¡æ“ä½œé—´éš”为time值,为了让进度条有动画效果
          this.drawCircleByProgress(progress)
        }, preSecondTime)
      }
    }
  }
</script>
<style lang="scss" scoped>
  .tn-circle-progress {
    position: relative;
    /* #ifndef APP-NVUE */
    display: inline-flex;
    /* #endif */
    align-items: center;
    justify-content: center;
    background-color: transparent;
    &__canvas {
      position: absolute;
      &-bg {
        position: absolute;
      }
    }
    &__content {
      display: flex;
      align-items: center;
      justify-content: center;
      &__percent {
        font-size: 28rpx;
      }
    }
  }
</style>
在上述文件截断后对比
代码管理/淮安PDA/tuniao-ui/components/tn-collapse-item/tn-collapse-item.vue 代码管理/淮安PDA/tuniao-ui/components/tn-collapse/tn-collapse.vue 代码管理/淮安PDA/tuniao-ui/components/tn-color-icon/tn-color-icon.vue 代码管理/淮安PDA/tuniao-ui/components/tn-column-notice/tn-column-notice.vue 代码管理/淮安PDA/tuniao-ui/components/tn-count-down/tn-count-down.vue 代码管理/淮安PDA/tuniao-ui/components/tn-count-scroll/tn-count-scroll.vue 代码管理/淮安PDA/tuniao-ui/components/tn-count-to/tn-count-to.vue 代码管理/淮安PDA/tuniao-ui/components/tn-cropper/index.wxs 代码管理/淮安PDA/tuniao-ui/components/tn-cropper/tn-cropper.vue 代码管理/淮安PDA/tuniao-ui/components/tn-custom-swiper-item/index.wxs 代码管理/淮安PDA/tuniao-ui/components/tn-custom-swiper-item/tn-custom-swiper-item.vue 代码管理/淮安PDA/tuniao-ui/components/tn-custom-swiper/tn-custom-swiper.vue 代码管理/淮安PDA/tuniao-ui/components/tn-drag/index.wxs 代码管理/淮安PDA/tuniao-ui/components/tn-drag/tn-drag.vue 代码管理/淮安PDA/tuniao-ui/components/tn-empty/tn-empty.vue 代码管理/淮安PDA/tuniao-ui/components/tn-fab/tn-fab.vue 代码管理/淮安PDA/tuniao-ui/components/tn-form-item/tn-form-item.vue 代码管理/淮安PDA/tuniao-ui/components/tn-form/tn-form.vue 代码管理/淮安PDA/tuniao-ui/components/tn-goods-nav/tn-goods-nav.vue 代码管理/淮安PDA/tuniao-ui/components/tn-grid-item/tn-grid-item.vue 代码管理/淮安PDA/tuniao-ui/components/tn-grid/tn-grid.vue 代码管理/淮安PDA/tuniao-ui/components/tn-image-upload-drag/tn-image-upload-drag.vue 代码管理/淮安PDA/tuniao-ui/components/tn-image-upload/tn-image-upload.vue 代码管理/淮安PDA/tuniao-ui/components/tn-index-anchor/tn-index-anchor.vue 代码管理/淮安PDA/tuniao-ui/components/tn-index-list/tn-index-list.vue 代码管理/淮安PDA/tuniao-ui/components/tn-input/tn-input.vue 代码管理/淮安PDA/tuniao-ui/components/tn-keyboard/tn-keyboard.vue 代码管理/淮安PDA/tuniao-ui/components/tn-landscape/tn-landscape.vue 代码管理/淮安PDA/tuniao-ui/components/tn-lazy-load/tn-lazy-load.vue 代码管理/淮安PDA/tuniao-ui/components/tn-line-progress/tn-line-progress.vue 代码管理/淮安PDA/tuniao-ui/components/tn-list-cell/tn-list-cell.vue 代码管理/淮安PDA/tuniao-ui/components/tn-list-view/tn-list-view.vue 代码管理/淮安PDA/tuniao-ui/components/tn-load-more/tn-load-more.vue 代码管理/淮安PDA/tuniao-ui/components/tn-loading/tn-loading.vue 代码管理/淮安PDA/tuniao-ui/components/tn-modal/tn-modal.vue 代码管理/淮安PDA/tuniao-ui/components/tn-nav-bar/tn-nav-bar.vue 代码管理/淮安PDA/tuniao-ui/components/tn-notice-bar/tn-notice-bar.vue 代码管理/淮安PDA/tuniao-ui/components/tn-number-box/tn-number-box.vue 代码管理/淮安PDA/tuniao-ui/components/tn-number-keyboard/tn-number-keyboard.vue 代码管理/淮安PDA/tuniao-ui/components/tn-picker/tn-picker.vue 代码管理/淮安PDA/tuniao-ui/components/tn-popup/tn-popup.vue 代码管理/淮安PDA/tuniao-ui/components/tn-radio-group/tn-radio-group.vue 代码管理/淮安PDA/tuniao-ui/components/tn-radio/tn-radio.vue 代码管理/淮安PDA/tuniao-ui/components/tn-rate/tn-rate.vue 代码管理/淮安PDA/tuniao-ui/components/tn-read-more/tn-read-more.vue 代码管理/淮安PDA/tuniao-ui/components/tn-row-notice/tn-row-notice.vue 代码管理/淮安PDA/tuniao-ui/components/tn-scroll-list/tn-scroll-list.vue 代码管理/淮安PDA/tuniao-ui/components/tn-scroll-view/tn-scroll-view.vue 代码管理/淮安PDA/tuniao-ui/components/tn-select/tn-select.vue 代码管理/淮安PDA/tuniao-ui/components/tn-sign-board/tn-sign-board.vue 代码管理/淮安PDA/tuniao-ui/components/tn-skeleton/tn-skeleton.vue 代码管理/淮安PDA/tuniao-ui/components/tn-slider/tn-slider.vue 代码管理/淮安PDA/tuniao-ui/components/tn-stack-swiper/index-h5.wxs 代码管理/淮安PDA/tuniao-ui/components/tn-stack-swiper/index.wxs 代码管理/淮安PDA/tuniao-ui/components/tn-stack-swiper/tn-stack-swiper.vue 代码管理/淮安PDA/tuniao-ui/components/tn-steps/tn-steps.vue 代码管理/淮安PDA/tuniao-ui/components/tn-sticky/tn-sticky.vue 代码管理/淮安PDA/tuniao-ui/components/tn-subsection/tn-subsection.vue 代码管理/淮安PDA/tuniao-ui/components/tn-swipe-action-item/index.wxs 代码管理/淮安PDA/tuniao-ui/components/tn-swipe-action-item/tn-swipe-action-item.vue 代码管理/淮安PDA/tuniao-ui/components/tn-swipe-action/tn-swipe-action.vue 代码管理/淮安PDA/tuniao-ui/components/tn-swiper/tn-swiper.vue 代码管理/淮安PDA/tuniao-ui/components/tn-switch/tn-switch.vue 代码管理/淮安PDA/tuniao-ui/components/tn-tabbar/tn-tabbar.vue 代码管理/淮安PDA/tuniao-ui/components/tn-table/tn-table.vue 代码管理/淮安PDA/tuniao-ui/components/tn-tabs-swiper/tn-tabs-swiper.vue 代码管理/淮安PDA/tuniao-ui/components/tn-tabs/tn-tabs.vue 代码管理/淮安PDA/tuniao-ui/components/tn-tag/tn-tag.vue 代码管理/淮安PDA/tuniao-ui/components/tn-td/tn-td.vue 代码管理/淮安PDA/tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue 代码管理/淮安PDA/tuniao-ui/components/tn-time-line-item/tn-time-line-item.vue_bk 代码管理/淮安PDA/tuniao-ui/components/tn-time-line/tn-time-line.vue 代码管理/淮安PDA/tuniao-ui/components/tn-time-line/tn-time-line.vue_bk 代码管理/淮安PDA/tuniao-ui/components/tn-tips/tn-tips.vue 代码管理/淮安PDA/tuniao-ui/components/tn-toast/tn-toast.vue 代码管理/淮安PDA/tuniao-ui/components/tn-tr/tn-tr.vue 代码管理/淮安PDA/tuniao-ui/components/tn-tree-node/tn-tree-node.vue 代码管理/淮安PDA/tuniao-ui/components/tn-tree-view/tn-tree-view.vue 代码管理/淮安PDA/tuniao-ui/components/tn-verification-code-input/tn-verification-code-input.vue 代码管理/淮安PDA/tuniao-ui/components/tn-verification-code/tn-verification-code.vue 代码管理/淮安PDA/tuniao-ui/components/tn-waterfall/tn-waterfall.vue 代码管理/淮安PDA/tuniao-ui/iconfont.css 代码管理/淮安PDA/tuniao-ui/index.js 代码管理/淮安PDA/tuniao-ui/index.scss 代码管理/淮安PDA/tuniao-ui/libs/config/color.js 代码管理/淮安PDA/tuniao-ui/libs/config/zIndex.js 代码管理/淮安PDA/tuniao-ui/libs/css/color.scss 代码管理/淮安PDA/tuniao-ui/libs/css/main.scss 代码管理/淮安PDA/tuniao-ui/libs/css/style.h5.scss 代码管理/淮安PDA/tuniao-ui/libs/css/style.mp.scss 代码管理/淮安PDA/tuniao-ui/libs/function/$parent.js 代码管理/淮安PDA/tuniao-ui/libs/function/array.js 代码管理/淮安PDA/tuniao-ui/libs/function/color.js 代码管理/淮安PDA/tuniao-ui/libs/function/colorUtils.js 代码管理/淮安PDA/tuniao-ui/libs/function/deepClone.js 代码管理/淮安PDA/tuniao-ui/libs/function/message.js 代码管理/淮安PDA/tuniao-ui/libs/function/messageUtils.js 代码管理/淮安PDA/tuniao-ui/libs/function/number.js 代码管理/淮安PDA/tuniao-ui/libs/function/string.js 代码管理/淮安PDA/tuniao-ui/libs/function/test.js 代码管理/淮安PDA/tuniao-ui/libs/function/updateCustomBarInfo.js 代码管理/淮安PDA/tuniao-ui/libs/function/uuid.js 代码管理/淮安PDA/tuniao-ui/libs/mixin/components_color.js 代码管理/淮安PDA/tuniao-ui/libs/mixin/mixin.js 代码管理/淮安PDA/tuniao-ui/libs/mixin/mpShare.js 代码管理/淮安PDA/tuniao-ui/libs/mixin/touch.js 代码管理/淮安PDA/tuniao-ui/libs/utils/area.js 代码管理/淮安PDA/tuniao-ui/libs/utils/async-validator.js 代码管理/淮安PDA/tuniao-ui/libs/utils/calendar.js 代码管理/淮安PDA/tuniao-ui/libs/utils/city.js 代码管理/淮安PDA/tuniao-ui/libs/utils/emitter.js 代码管理/淮安PDA/tuniao-ui/libs/utils/province.js 代码管理/淮安PDA/tuniao-ui/theme.scss 代码管理/淮安PDA/uni.scss 代码管理/淮安PDA/uni_modules/uni-badge/changelog.md 代码管理/淮安PDA/uni_modules/uni-badge/components/uni-badge/uni-badge.vue 代码管理/淮安PDA/uni_modules/uni-badge/package.json 代码管理/淮安PDA/uni_modules/uni-badge/readme.md 代码管理/淮安PDA/uni_modules/uni-card/changelog.md 代码管理/淮安PDA/uni_modules/uni-card/components/uni-card/uni-card.vue 代码管理/淮安PDA/uni_modules/uni-card/package.json 代码管理/淮安PDA/uni_modules/uni-card/readme.md 代码管理/淮安PDA/uni_modules/uni-combox/changelog.md 代码管理/淮安PDA/uni_modules/uni-combox/components/uni-combox/uni-combox.vue 代码管理/淮安PDA/uni_modules/uni-combox/package.json 代码管理/淮安PDA/uni_modules/uni-combox/readme.md 代码管理/淮安PDA/uni_modules/uni-data-checkbox/changelog.md 代码管理/淮安PDA/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue 代码管理/淮安PDA/uni_modules/uni-data-checkbox/package.json 代码管理/淮安PDA/uni_modules/uni-data-checkbox/readme.md 代码管理/淮安PDA/uni_modules/uni-data-select/changelog.md 代码管理/淮安PDA/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue 代码管理/淮安PDA/uni_modules/uni-data-select/package.json 代码管理/淮安PDA/uni_modules/uni-data-select/readme.md 代码管理/淮安PDA/uni_modules/uni-easyinput/changelog.md 代码管理/淮安PDA/uni_modules/uni-easyinput/components/uni-easyinput/common.js 代码管理/淮安PDA/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue 代码管理/淮安PDA/uni_modules/uni-easyinput/package.json 代码管理/淮安PDA/uni_modules/uni-easyinput/readme.md 代码管理/淮安PDA/uni_modules/uni-forms/changelog.md 代码管理/淮安PDA/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue 代码管理/淮安PDA/uni_modules/uni-forms/components/uni-forms/uni-forms.vue 代码管理/淮安PDA/uni_modules/uni-forms/components/uni-forms/utils.js 代码管理/淮安PDA/uni_modules/uni-forms/components/uni-forms/validate.js 代码管理/淮安PDA/uni_modules/uni-forms/package.json 代码管理/淮安PDA/uni_modules/uni-forms/readme.md 代码管理/淮安PDA/uni_modules/uni-group/changelog.md 代码管理/淮安PDA/uni_modules/uni-group/components/uni-group/uni-group.vue 代码管理/淮安PDA/uni_modules/uni-group/package.json 代码管理/淮安PDA/uni_modules/uni-group/readme.md 代码管理/淮安PDA/uni_modules/uni-icons/changelog.md 代码管理/淮安PDA/uni_modules/uni-icons/components/uni-icons/icons.js 代码管理/淮安PDA/uni_modules/uni-icons/components/uni-icons/uni-icons.vue 代码管理/淮安PDA/uni_modules/uni-icons/components/uni-icons/uni.ttf 代码管理/淮安PDA/uni_modules/uni-icons/components/uni-icons/uniicons.css 代码管理/淮安PDA/uni_modules/uni-icons/components/uni-icons/uniicons.ttf 代码管理/淮安PDA/uni_modules/uni-icons/package.json 代码管理/淮安PDA/uni_modules/uni-icons/readme.md 代码管理/淮安PDA/uni_modules/uni-id/changelog.md 代码管理/淮安PDA/uni_modules/uni-id/package.json 代码管理/淮安PDA/uni_modules/uni-id/readme.md 代码管理/淮安PDA/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/LICENSE.md 代码管理/淮安PDA/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/index.js 代码管理/淮安PDA/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package-lock.json 代码管理/淮安PDA/uni_modules/uni-id/uniCloud/cloudfunctions/common/uni-id/package.json 代码管理/淮安PDA/uni_modules/uni-list/changelog.md 代码管理/淮安PDA/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue 代码管理/淮安PDA/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss 代码管理/淮安PDA/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue 代码管理/淮安PDA/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue 代码管理/淮安PDA/uni_modules/uni-list/components/uni-list/uni-list.vue 代码管理/淮安PDA/uni_modules/uni-list/components/uni-list/uni-refresh.vue 代码管理/淮安PDA/uni_modules/uni-list/components/uni-list/uni-refresh.wxs 代码管理/淮安PDA/uni_modules/uni-list/package.json 代码管理/淮安PDA/uni_modules/uni-list/readme.md 代码管理/淮安PDA/uni_modules/uni-load-more/changelog.md 代码管理/淮安PDA/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json 代码管理/淮安PDA/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js 代码管理/淮安PDA/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json 代码管理/淮安PDA/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json 代码管理/淮安PDA/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue 代码管理/淮安PDA/uni_modules/uni-load-more/package.json 代码管理/淮安PDA/uni_modules/uni-load-more/readme.md 代码管理/淮安PDA/uni_modules/uni-nav-bar/changelog.md 代码管理/淮安PDA/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue 代码管理/淮安PDA/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue 代码管理/淮安PDA/uni_modules/uni-nav-bar/package.json 代码管理/淮安PDA/uni_modules/uni-nav-bar/readme.md 代码管理/淮安PDA/uni_modules/uni-popup/changelog.md 代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js 代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue 代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue 代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue 代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/i18n/en.json 代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/i18n/index.js 代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json 代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json 代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/keypress.js 代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/popup.js 代码管理/淮安PDA/uni_modules/uni-popup/components/uni-popup/uni-popup.vue 代码管理/淮安PDA/uni_modules/uni-popup/package.json 代码管理/淮安PDA/uni_modules/uni-popup/readme.md 代码管理/淮安PDA/uni_modules/uni-scss/changelog.md 代码管理/淮安PDA/uni_modules/uni-scss/index.scss 代码管理/淮安PDA/uni_modules/uni-scss/package.json 代码管理/淮安PDA/uni_modules/uni-scss/readme.md 代码管理/淮安PDA/uni_modules/uni-scss/styles/index.scss 代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_border.scss 代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_color.scss 代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_radius.scss 代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_space.scss 代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_styles.scss 代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_text.scss 代码管理/淮安PDA/uni_modules/uni-scss/styles/setting/_variables.scss 代码管理/淮安PDA/uni_modules/uni-scss/styles/tools/functions.scss 代码管理/淮安PDA/uni_modules/uni-scss/theme.scss 代码管理/淮安PDA/uni_modules/uni-scss/variables.scss 代码管理/淮安PDA/uni_modules/uni-search-bar/changelog.md 代码管理/淮安PDA/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json 代码管理/淮安PDA/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js 代码管理/淮安PDA/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json 代码管理/淮安PDA/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json 代码管理/淮安PDA/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue 代码管理/淮安PDA/uni_modules/uni-search-bar/package.json 代码管理/淮安PDA/uni_modules/uni-search-bar/readme.md 代码管理/淮安PDA/uni_modules/uni-segmented-control/changelog.md 代码管理/淮安PDA/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue 代码管理/淮安PDA/uni_modules/uni-segmented-control/package.json 代码管理/淮安PDA/uni_modules/uni-segmented-control/readme.md 代码管理/淮安PDA/uni_modules/uni-transition/changelog.md 代码管理/淮安PDA/uni_modules/uni-transition/components/uni-transition/createAnimation.js 代码管理/淮安PDA/uni_modules/uni-transition/components/uni-transition/uni-transition.vue 代码管理/淮安PDA/uni_modules/uni-transition/package.json 代码管理/淮安PDA/uni_modules/uni-transition/readme.md 代码管理/淮安PDA/unpackage/cache/apk/apkurl 代码管理/淮安PDA/unpackage/cache/apk/cmManifestCache.json 代码管理/淮安PDA/unpackage/cache/certdata 代码管理/淮安PDA/unpackage/cache/cloudcertificate/certini 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/.manifest/icon-android-hdpi.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/.manifest/icon-android-xhdpi.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/.manifest/icon-android-xxhdpi.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/.manifest/icon-android-xxxhdpi.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappchooselocation.js 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniapperror.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappes6.js 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappopenlocation.js 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniapppicker.js 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappquill.js 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappquillimageresize.js 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappscan.js 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappsuccess.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/__uniappview.html 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/app-config-service.js 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/app-config.js 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/app-service.js 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/app-view.js 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/manifest.json 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/center-selected.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/center.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/fail.mp3 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/favicon.ico 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/index-selected.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/index.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/login_bottom_bg.jpg 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/login_top2.jpg 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/login_top3.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/logo.png 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/repeat.mp3 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/static/success.mp3 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/uni_modules/uni-icons/components/uni-icons/uniicons.ttf 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/view.css 代码管理/淮安PDA/unpackage/cache/wgt/__UNI__BFEF6BA/view.umd.min.js 代码管理/淮安PDA/unpackage/res/icons/1024x1024.png 代码管理/淮安PDA/unpackage/res/icons/120x120.png 代码管理/淮安PDA/unpackage/res/icons/144x144.png 代码管理/淮安PDA/unpackage/res/icons/152x152.png 代码管理/淮安PDA/unpackage/res/icons/167x167.png 代码管理/淮安PDA/unpackage/res/icons/180x180.png 代码管理/淮安PDA/unpackage/res/icons/192x192.png 代码管理/淮安PDA/unpackage/res/icons/20x20.png 代码管理/淮安PDA/unpackage/res/icons/29x29.png 代码管理/淮安PDA/unpackage/res/icons/40x40.png 代码管理/淮安PDA/unpackage/res/icons/58x58.png 代码管理/淮安PDA/unpackage/res/icons/60x60.png 代码管理/淮安PDA/unpackage/res/icons/72x72.png 代码管理/淮安PDA/unpackage/res/icons/76x76.png 代码管理/淮安PDA/unpackage/res/icons/80x80.png 代码管理/淮安PDA/unpackage/res/icons/87x87.png 代码管理/淮安PDA/unpackage/res/icons/96x96.png 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappchooselocation.js 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniapperror.png 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappes6.js 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappopenlocation.js 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniapppicker.js 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappquill.js 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappquillimageresize.js 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappscan.js 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappsuccess.png 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/__uniappview.html 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/app-config-service.js 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/app-config.js 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/app-service.js 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/app-view.js 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/manifest.json 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/center-selected.png 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/center.png 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/favicon.ico 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/index-selected.png 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/index.png 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/login_bottom_bg.jpg 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/login_top2.jpg 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/login_top3.png 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/static/logo.png 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/uni_modules/uni-icons/components/uni-icons/uniicons.ttf 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/view.css 代码管理/淮安PDA/unpackage/resources/__UNI__BFEF6BA/www/view.umd.min.js 代码管理/淮安PDA/uview-ui/LICENSE 代码管理/淮安PDA/uview-ui/README.md 代码管理/淮安PDA/uview-ui/components/u-action-sheet/u-action-sheet.vue 代码管理/淮安PDA/uview-ui/components/u-alert-tips/u-alert-tips.vue 代码管理/淮安PDA/uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue 代码管理/淮安PDA/uview-ui/components/u-avatar-cropper/weCropper.js 代码管理/淮安PDA/uview-ui/components/u-avatar/u-avatar.vue 代码管理/淮安PDA/uview-ui/components/u-back-top/u-back-top.vue 代码管理/淮安PDA/uview-ui/components/u-badge/u-badge.vue 代码管理/淮安PDA/uview-ui/components/u-button/u-button.vue 代码管理/淮安PDA/uview-ui/components/u-calendar/u-calendar.vue 代码管理/淮安PDA/uview-ui/components/u-car-keyboard/u-car-keyboard.vue 代码管理/淮安PDA/uview-ui/components/u-card/u-card.vue 代码管理/淮安PDA/uview-ui/components/u-cell-group/u-cell-group.vue 代码管理/淮安PDA/uview-ui/components/u-cell-item/u-cell-item.vue 代码管理/淮安PDA/uview-ui/components/u-checkbox-group/u-checkbox-group.vue 代码管理/淮安PDA/uview-ui/components/u-checkbox/u-checkbox.vue 代码管理/淮安PDA/uview-ui/components/u-circle-progress/u-circle-progress.vue 代码管理/淮安PDA/uview-ui/components/u-col/u-col.vue 代码管理/淮安PDA/uview-ui/components/u-collapse-item/u-collapse-item.vue 代码管理/淮安PDA/uview-ui/components/u-collapse/u-collapse.vue 代码管理/淮安PDA/uview-ui/components/u-column-notice/u-column-notice.vue 代码管理/淮安PDA/uview-ui/components/u-count-down/u-count-down.vue 代码管理/淮安PDA/uview-ui/components/u-count-to/u-count-to.vue 代码管理/淮安PDA/uview-ui/components/u-divider/u-divider.vue 代码管理/淮安PDA/uview-ui/components/u-dropdown-item/u-dropdown-item.vue 代码管理/淮安PDA/uview-ui/components/u-dropdown/u-dropdown.vue 代码管理/淮安PDA/uview-ui/components/u-empty/u-empty.vue 代码管理/淮安PDA/uview-ui/components/u-field/u-field.vue 代码管理/淮安PDA/uview-ui/components/u-form-item/u-form-item.vue 代码管理/淮安PDA/uview-ui/components/u-form/u-form.vue 代码管理/淮安PDA/uview-ui/components/u-full-screen/u-full-screen.vue 代码管理/淮安PDA/uview-ui/components/u-gap/u-gap.vue 代码管理/淮安PDA/uview-ui/components/u-grid-item/u-grid-item.vue 代码管理/淮安PDA/uview-ui/components/u-grid/u-grid.vue 代码管理/淮安PDA/uview-ui/components/u-icon/u-icon.vue 代码管理/淮安PDA/uview-ui/components/u-image/u-image.vue 代码管理/淮安PDA/uview-ui/components/u-index-anchor/u-index-anchor.vue 代码管理/淮安PDA/uview-ui/components/u-index-list/u-index-list.vue 代码管理/淮安PDA/uview-ui/components/u-input/u-input.vue 代码管理/淮安PDA/uview-ui/components/u-keyboard/u-keyboard.vue 代码管理/淮安PDA/uview-ui/components/u-lazy-load/u-lazy-load.vue 代码管理/淮安PDA/uview-ui/components/u-line-progress/u-line-progress.vue 代码管理/淮安PDA/uview-ui/components/u-line/u-line.vue 代码管理/淮安PDA/uview-ui/components/u-link/u-link.vue 代码管理/淮安PDA/uview-ui/components/u-loading-page/u-loading-page.vue 代码管理/淮安PDA/uview-ui/components/u-loading/u-loading.vue 代码管理/淮安PDA/uview-ui/components/u-loadmore/u-loadmore.vue 代码管理/淮安PDA/uview-ui/components/u-mask/u-mask.vue 代码管理/淮安PDA/uview-ui/components/u-message-input/u-message-input.vue 代码管理/淮安PDA/uview-ui/components/u-modal/u-modal.vue 代码管理/淮安PDA/uview-ui/components/u-navbar/u-navbar.vue 代码管理/淮安PDA/uview-ui/components/u-no-network/u-no-network.vue 代码管理/淮安PDA/uview-ui/components/u-notice-bar/u-notice-bar.vue 代码管理/淮安PDA/uview-ui/components/u-number-box/u-number-box.vue 代码管理/淮安PDA/uview-ui/components/u-number-keyboard/u-number-keyboard.vue 代码管理/淮安PDA/uview-ui/components/u-parse/libs/CssHandler.js 代码管理/淮安PDA/uview-ui/components/u-parse/libs/MpHtmlParser.js 代码管理/淮安PDA/uview-ui/components/u-parse/libs/config.js 代码管理/淮安PDA/uview-ui/components/u-parse/libs/handler.wxs 代码管理/淮安PDA/uview-ui/components/u-parse/libs/trees.vue 代码管理/淮安PDA/uview-ui/components/u-parse/u-parse.vue 代码管理/淮安PDA/uview-ui/components/u-picker/u-picker.vue 代码管理/淮安PDA/uview-ui/components/u-popup/u-popup.vue 代码管理/淮安PDA/uview-ui/components/u-radio-group/u-radio-group.vue 代码管理/淮安PDA/uview-ui/components/u-radio/u-radio.vue 代码管理/淮安PDA/uview-ui/components/u-rate/u-rate.vue 代码管理/淮安PDA/uview-ui/components/u-read-more/u-read-more.vue 代码管理/淮安PDA/uview-ui/components/u-row-notice/u-row-notice.vue 代码管理/淮安PDA/uview-ui/components/u-row/u-row.vue 代码管理/淮安PDA/uview-ui/components/u-search/u-search.vue 代码管理/淮安PDA/uview-ui/components/u-section/u-section.vue 代码管理/淮安PDA/uview-ui/components/u-select/u-select.vue 代码管理/淮安PDA/uview-ui/components/u-skeleton/u-skeleton.vue 代码管理/淮安PDA/uview-ui/components/u-slider/u-slider.vue 代码管理/淮安PDA/uview-ui/components/u-steps/u-steps.vue 代码管理/淮安PDA/uview-ui/components/u-sticky/u-sticky.vue 代码管理/淮安PDA/uview-ui/components/u-subsection/u-subsection.vue 代码管理/淮安PDA/uview-ui/components/u-swipe-action/u-swipe-action.vue 代码管理/淮安PDA/uview-ui/components/u-swiper/u-swiper.vue 代码管理/淮安PDA/uview-ui/components/u-switch/u-switch.vue 代码管理/淮安PDA/uview-ui/components/u-tabbar/u-tabbar.vue 代码管理/淮安PDA/uview-ui/components/u-table/u-table.vue 代码管理/淮安PDA/uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue 代码管理/淮安PDA/uview-ui/components/u-tabs/u-tabs.vue 代码管理/淮安PDA/uview-ui/components/u-tag/u-tag.vue 代码管理/淮安PDA/uview-ui/components/u-td/u-td.vue 代码管理/淮安PDA/uview-ui/components/u-th/u-th.vue 代码管理/淮安PDA/uview-ui/components/u-time-line-item/u-time-line-item.vue 代码管理/淮安PDA/uview-ui/components/u-time-line/u-time-line.vue 代码管理/淮安PDA/uview-ui/components/u-toast/u-toast.vue 代码管理/淮安PDA/uview-ui/components/u-top-tips/u-top-tips.vue 代码管理/淮安PDA/uview-ui/components/u-tr/u-tr.vue 代码管理/淮安PDA/uview-ui/components/u-upload/u-upload.vue 代码管理/淮安PDA/uview-ui/components/u-verification-code/u-verification-code.vue 代码管理/淮安PDA/uview-ui/components/u-waterfall/u-waterfall.vue 代码管理/淮安PDA/uview-ui/iconfont.css 代码管理/淮安PDA/uview-ui/index.js 代码管理/淮安PDA/uview-ui/index.scss 代码管理/淮安PDA/uview-ui/libs/config/config.js 代码管理/淮安PDA/uview-ui/libs/config/zIndex.js 代码管理/淮安PDA/uview-ui/libs/css/color.scss 代码管理/淮安PDA/uview-ui/libs/css/common.scss 代码管理/淮安PDA/uview-ui/libs/css/style.components.scss 代码管理/淮安PDA/uview-ui/libs/css/style.h5.scss 代码管理/淮安PDA/uview-ui/libs/css/style.mp.scss 代码管理/淮安PDA/uview-ui/libs/css/style.nvue.scss 代码管理/淮安PDA/uview-ui/libs/css/style.vue.scss 代码管理/淮安PDA/uview-ui/libs/function/$parent.js 代码管理/淮安PDA/uview-ui/libs/function/addUnit.js 代码管理/淮安PDA/uview-ui/libs/function/bem.js 代码管理/淮安PDA/uview-ui/libs/function/color.js 代码管理/淮安PDA/uview-ui/libs/function/colorGradient.js 代码管理/淮安PDA/uview-ui/libs/function/debounce.js 代码管理/淮安PDA/uview-ui/libs/function/deepClone.js 代码管理/淮安PDA/uview-ui/libs/function/deepMerge.js 代码管理/淮安PDA/uview-ui/libs/function/getParent.js 代码管理/淮安PDA/uview-ui/libs/function/guid.js 代码管理/淮安PDA/uview-ui/libs/function/md5.js 代码管理/淮安PDA/uview-ui/libs/function/queryParams.js 代码管理/淮安PDA/uview-ui/libs/function/random.js 代码管理/淮安PDA/uview-ui/libs/function/randomArray.js 代码管理/淮安PDA/uview-ui/libs/function/route.js 代码管理/淮安PDA/uview-ui/libs/function/sys.js 代码管理/淮安PDA/uview-ui/libs/function/test.js 代码管理/淮安PDA/uview-ui/libs/function/throttle.js 代码管理/淮安PDA/uview-ui/libs/function/timeFormat.js 代码管理/淮安PDA/uview-ui/libs/function/timeFrom.js 代码管理/淮安PDA/uview-ui/libs/function/toast.js 代码管理/淮安PDA/uview-ui/libs/function/trim.js 代码管理/淮安PDA/uview-ui/libs/function/type2icon.js 代码管理/淮安PDA/uview-ui/libs/mixin/mixin.js 代码管理/淮安PDA/uview-ui/libs/mixin/mpShare.js 代码管理/淮安PDA/uview-ui/libs/request/index.js 代码管理/淮安PDA/uview-ui/libs/store/index.js 代码管理/淮安PDA/uview-ui/libs/util/area.js 代码管理/淮安PDA/uview-ui/libs/util/async-validator.js 代码管理/淮安PDA/uview-ui/libs/util/city.js 代码管理/淮安PDA/uview-ui/libs/util/emitter.js 代码管理/淮安PDA/uview-ui/libs/util/province.js 代码管理/淮安PDA/uview-ui/package.json 代码管理/淮安PDA/uview-ui/theme.scss 代码管理/淮安PDA/vue.config.js