sunChengjie преди 1 година
родител
ревизия
df72ead9e3
променени са 7 файла, в които са добавени 185 реда и са изтрити 62 реда
  1. 1 1
      src/App.vue
  2. 32 0
      src/api/index.js
  3. 8 9
      src/pages/components/Sented.vue
  4. 15 5
      src/pages/components/Waitsent.vue
  5. 6 3
      src/pages/new/batched.vue
  6. 19 8
      src/pages/new/removal.vue
  7. 104 36
      src/pages/new/storage.vue

+ 1 - 1
src/App.vue

@@ -21,7 +21,7 @@ export default {
 	},
 
 	async created() {
-		window.localStorage.setItem('scanUrl', location.href.split('#')[0])
+		window.localStorage.setItem('CourierScanUrl', location.href.split('#')[0])
 		// this.$http.post(this.$store.state.host + "/weixin/getWxConfig", {
 		// 	url: window.location.href.split('#')[0]
 		// }, {

+ 32 - 0
src/api/index.js

@@ -167,6 +167,38 @@ export function getWxConfig(data) {
     })
 }
 
+//快件出库-调用扫码后的校验 - 如果返回为空-不在派送范围    
+export function appPermissionChecks(data) {
+    return request({
+        url: '/tianzong/express/appPermissionChecks',
+        method: 'post',
+        data: data,
+        emulateJSON: true
+    })
+}
+
+// 首先获取打印机 判断打印机的数量,如果没有提示, 如果只有一个直接进入打印,如果有多个打印机弹框让用户选择然后在进入打印,
+//获取打印机
+export function getListOfPrinters(data) {
+    return request({
+        url: '/tianzong/printer/getListOfPrinters',
+        method: 'post',
+        data: data,
+        emulateJSON: true
+    })
+}
+
+// 入库打印标签
+export function storagePrintSmallTab(data) {
+    return request({
+        url: '/tianzong/printer/storagePrintSmallTab',
+        method: 'post',
+        data: data,
+        emulateJSON: true
+    })
+}
+
+
 
 
 

+ 8 - 9
src/pages/components/Sented.vue

@@ -8,14 +8,12 @@
             <template v-slot="slotProps">
                 <div class="onther" v-for="(item, index) in slotProps.list" :key="index">
                     <div class="onther-top">
-                        <div style="font-size: 12px;">批次号:{{ item.dispatchBatchNo
-                            }}
-                        </div>
+                        <div style="font-size: 12px;">批次号:{{ item.dispatchBatchNo }}</div>
                         <div class="jindu">派送进度 {{ item.signed }}/{{ item.sumAnd }}</div>
                     </div>
                     <div class="onther-middel">
                         <div class="onther-middel-text">
-                            <div class="onther-middel-text-style">批次完成时间:{{ item.time }}</div>
+                            <div class="onther-middel-text-style">批次完成时间:{{ item.signatureTime }}</div>
                         </div>
                     </div>
                     <div class="onther-bottom">
@@ -46,13 +44,14 @@
                         </span>
                         <!-- <span style="color: #1989fa;">查看</span> -->
                     </div>
-                    <div class="batch-middel-text-style">签收时间:{{ item.signatureTime == undefined ? '' :
+                    <div style="width: 100%;" class="batch-middel-text-style">签收时间:{{ item.signatureTime }}
+                        <!-- {{ item.signatureTime == undefined ? '' :
                         item.signatureTime.date.year }}-{{ item.signatureTime == undefined ? '' :
                             item.signatureTime.date.month }}-{{ item.signatureTime == undefined ? '' :
                             item.signatureTime.date.day }} {{ item.signatureTime == undefined ? '' :
                             item.signatureTime.time.hour }}:{{ item.signatureTime == undefined ? '' :
                             item.signatureTime.time.minute }}:{{ item.signatureTime == undefined ? '' :
-                            item.signatureTime.time.second }}
+                            item.signatureTime.time.second }} -->
                     </div>
                 </div>
                 <div style="display: flex; padding-top: 5px;">
@@ -91,12 +90,12 @@ export default {
             }
             const res = await appOutboundInquiry({ ...parmas }, { emulateJSON: true })
             res.data = res.data.map((item) => {
-                const date = item.signatureTime.date
-                const time = item.signatureTime.time
+                // const date = item.signatureTime.date
+                // const time = item.signatureTime.time
                 return {
                     ...item,
                     openCard: false,
-                    time: `${date.year}-${date.month}-${date.day} ${time.hour}:${time.minute}:${time.second}`
+                    // time: `${date.year}-${date.month}-${date.day} ${time.hour}:${time.minute}:${time.second}`
                 }
             })
             return res

+ 15 - 5
src/pages/components/Waitsent.vue

@@ -20,9 +20,14 @@
                         <div class="batch-middel" v-for="(unfold, index) in item.list" :key="index">
                             <div class="batch-middel-text">
                                 <div class="batch-middel-text-style"
-                                    style="text-align: left; width: 100%; margin-left: -6px;">【{{
-                                        unfold.expressCompany }}】运单号:{{
-                                        unfold.expressNo }}</div>
+                                    style="text-align: left; width: 100%; margin-left: -6px; display: flex;justify-content: space-between; align-items: center;">
+                                    <div> 【{{ unfold.expressCompany }}】运单号:{{ unfold.expressNo }}</div>
+                                    <div
+                                        :style="{ color: unfold.expressStatus == 0 ? '#00c4b8' : (unfold.expressStatus == 1 ? '#4fc1f1' : (unfold.expressStatus == 2 ? '#fbc015' : '#ee0a24')) }">
+                                        {{ unfold.expressStatus == 0 ? '已入库' : `${unfold.expressStatus == 1 ? '派送中' :
+                                            `${unfold.expressStatus == 2 ? '已签收' : '滞留件'}`}` }}</div>
+
+                                </div>
                                 <div style="display: flex; justify-content:  space-between; flex-wrap: wrap;">
                                     <div class="batch-middel-text-style">收件人:{{ unfold.recipient }}</div>
                                     <div class="batch-middel-text-style">部门:{{ unfold.departmentId }}</div>
@@ -50,7 +55,9 @@
                     </div>
 
                     <div @click="onUnfold(item)" class="batch-bottom">
-                        {{ item.openCard ? "收起....." : "展开....." }}
+                        <div v-if="item.sumAnd !== 1">
+                            {{ item.openCard ? "收起....." : "展开....." }}
+                        </div>
                     </div>
 
                 </div>
@@ -216,7 +223,9 @@ export default {
                 this.$toast('滞留完成')
                 this.retention = false
             }
+            this.otherCause = ''
             this.$refs.scrollRefresh.onRefresh()
+
         },
         // 原因
         onRetention(value) {
@@ -261,11 +270,12 @@ export default {
             if (res.code == 0) {
                 this.$toast('签收完成')
                 this.receiving = false
-                this.$refs.scrollRefresh.onRefresh()
             } else {
                 this.$toast('签收失败')
             }
             this.uploader = []
+            this.$refs.scrollRefresh.onRefresh()
+
         },
         // 展开
         async onUnfold(waite) {

+ 6 - 3
src/pages/new/batched.vue

@@ -3,8 +3,10 @@
         <div>
             <div style="padding-top: 15px;">批次号生成</div>
             <div class="number">{{ BatDispatchBatchNo }}</div>
-            <div class="wenzi">批次内包含以下快件:</div>
+            <div class="wenzi">没有进入批次的数据:</div>
             <div class="middle-box" style="">
+                <van-cell v-for="(item, index) in noCodeList" :key="index" :value="item" />
+                <div>批次内包含以下快件:</div>
                 <van-cell v-for="(item, index) in list" :key="index" :value="item" />
             </div>
         </div>
@@ -19,10 +21,11 @@
 <script>
 export default {
     name: 'batched',
-    props: ['isRemoval', 'BatDispatchBatchNo', 'codesList'],
+    props: ['isRemoval', 'BatDispatchBatchNo', 'codesList', 'noCodesList'],
     data() {
         return {
-            list: this.codesList,
+            noCodeList: this.noCodesList,//没有进入批次的数据
+            list: this.codesList.filter(item => !this.noCodesList.includes(item))
         };
     },
     mounted() {

+ 19 - 8
src/pages/new/removal.vue

@@ -16,13 +16,13 @@
             </div>
             <van-button @click="onBatch" class="build" type="info">生成批次</van-button>
         </div>
-        <Batched :codesList="codesList" :BatDispatchBatchNo="BatDispatchBatchNo" :isRemoval="isRemoval"
-            @isRemoval="iemoval" v-else></Batched>
+        <Batched :codesList="codesList" :noCodesList="noCodesList" :BatDispatchBatchNo="BatDispatchBatchNo"
+            :isRemoval="isRemoval" @isRemoval="iemoval" v-else></Batched>
     </div>
 </template>
 
 <script>
-import { appDeliveryPersonDeliveries } from '../../api';
+import { appDeliveryPersonDeliveries, appPermissionChecks } from '../../api/index';
 import { Toast } from 'vant'
 import Batched from './batched.vue'
 import { getCompanyExpressNo } from "@/utils/utils"
@@ -39,18 +39,15 @@ export default {
     data() {
         return {
             titlename: "快件出库",
-            // codes: ['SF676444932923', 'SF23123123123', 'SF202303221917'],
             codes: [],
             keyWorld: "",//快递单号的值
             isRemoval: true,
             BatDispatchBatchNo: '',//传过去的生成的快递单号
             codesList: [],//传过去的数据
             floorId: '',//楼层id
+            noCodesList: [],//没有进入批次的数据
         };
     },
-    mounted() {
-        // this.floorId = this.$store.state.user.expressScope
-    },
     methods: {
         onImg() {
             wx.scanQRCode({
@@ -62,6 +59,7 @@ export default {
                         let result1 = res.resultStr.split(",");
                         result = result1[result1.length - 1];
                     }
+                    this.iconCheck(result)
                     this.callback(result)
                 },
                 error: function (res) {
@@ -69,6 +67,15 @@ export default {
                 }
             });
         },
+        async iconCheck(result) {
+            const res = await appPermissionChecks({ expressNo: result, deliveryPeopleId: localStorage.getItem('courierUserId') })
+            if (Object.keys(res.data).length > 0) {
+                this.callback(res.data.expressNo)
+            } else {
+                Toast('不在派送范围')
+            }
+        },
+
         onSearch() {
             if (this.keyWorld == '') {
                 return Toast('快递单号不能为空')
@@ -102,10 +109,14 @@ export default {
             }
             const res = await appDeliveryPersonDeliveries({ ...data }, { emulateJSON: true })
             if (res.msg == 'success') {
-                this.isRemoval = false
+
                 this.BatDispatchBatchNo = data.dispatchBatchNo
                 this.codesList = this.codes
                 console.log(data.dispatchBatchNo, 'data.dispatchBatchNo')
+                this.isRemoval = false
+                if (res.data.length > 0) {
+                    this.noCodesList = res.data
+                }
             } else {
                 this.$toast('生成批次错误')
             }

+ 104 - 36
src/pages/new/storage.vue

@@ -1,12 +1,11 @@
 <template>
     <div>
         <div class="container">
-            <van-form class="formStyle" @submit="onSubmit">
+            <van-form class="formStyle" @submit="onSubmit" ref="formRef">
                 <div class="formStyle-top">
                     <van-field style="width: 100%;" v-model="object.expressNo" name="expressNo" label="快递单号"
                         placeholder="快递单号" :rules="[{ required: true }]" />
                     <img class="formStyle-top-img" @click="wxScanCodeB()" src="@/assets/user/u4.png" alt="">
-
                 </div>
 
                 <van-field readonly clickable name="expressCompany" label="快递公司" :value="object.value"
@@ -60,9 +59,12 @@
                 <van-field v-model="object.remark" label="快递备注" name="remark" placeholder="请输入快递备注" />
 
                 <div
-                    style=" display: flex; justify-content: space-around; background-color: #fff;  padding: 10px 20px;">
-                    <van-button size="small" style="border-radius: 5px; width: 100vw; " block type="info"
-                        native-type="submit">保存并打印小标签并添加下一个</van-button>
+                    style=" display: flex; justify-content: space-between; background-color: #fff;  padding: 10px 20px;">
+                    <van-button size="small" style="border-radius: 5px; width: 50vw; " block type="info"
+                        @click="printerGo" native-type="button">保存/打印小标签并添加下一个</van-button>
+
+                    <van-button size="small" style="border-radius: 5px; width: 35vw;" block type="info"
+                        native-type="submit">保存并添加下一个</van-button>
                 </div>
             </van-form>
         </div>
@@ -76,8 +78,9 @@
             <div style="height: calc(100vh - 105px); overflow-y: auto;">
                 <van-cell-group class="vanPopup" @click="onGroup(item)" v-for="(item, index) in searchKeyList"
                     :key="index" inset>
-                    <van-cell :value="item.phone" />
-                    <van-cell :value="item.NAME" />
+                    <van-cell style="font-size: 16px;">{{ item.phone }}--{{ item.NAME }}</van-cell>
+                    <!-- < :value="item.phone" />
+                    <van-cell :value="item.NAME" /> -->
                     <!-- <van-cell title="收件人部门" :value="item.departmentName" />
                     <van-cell title="所属收发室" :value="item.mailRoomName" />
                     <van-cell title="收件人楼层" :value="item.mailFloor" />
@@ -90,16 +93,26 @@
                 退出
             </van-button>
         </van-popup>
+
+        <!-- 打印机选择器 -->
+        <van-popup v-model="printerShow" position="bottom">
+            <van-picker show-toolbar :columns="getPrintersList" @confirm="onPrinter" @cancel="printerShow = false">
+                <template v-slot:option="value">
+                    {{ value.printerName }}
+                </template>
+            </van-picker>
+        </van-popup>
     </div>
 </template>
 
 <script>
-import { appGetEmployeeInfoByPhone, appGeLogisticsList, appSaveExpressRecord, getSysUserInfoByUserIdAPI } from '@/api/index'
+import { appGetEmployeeInfoByPhone, appGeLogisticsList, appSaveExpressRecord, getSysUserInfoByUserIdAPI, getListOfPrinters, storagePrintSmallTab } from '@/api/index'
 import { Toast } from 'vant';
 import wx from "weixin-jsapi";
 export default {
     data() {
         return {
+            gfg: {},
             isCompany: '否',
             inputValue: '',//输入手机号后四位聚焦
             phoneShow: false, //输入手机号后弹出搜索
@@ -112,7 +125,7 @@ export default {
                 radio: '文件',
                 payMoney: '',//应付金额
                 expressNo: '',//快递单号
-                value4: '货架A', //货架信息
+                value4: '', //货架信息
                 value: '', //快递公司
             },
             value14: '',//添加下一个的货架信息
@@ -120,11 +133,16 @@ export default {
             ischeckDisabled: false,//到付是否必填
             isdisabled: true,//是否选中多选
             showPicker: false, //快递公司
-            shelfs: ['货架A', '货架B', '货架C'], //收发室
+            shelfs: [], //收发室
             shelf: false, //收发室
-            pattern: /^[0-9]*$/,
+            pattern: /^\d*\.?\d+$/, // 有问题
             floorId: '',
-
+            shelfsss: [],//
+            getPrintersList: [],//打印机获取数据
+            printerShow: false,//打印机出现
+            printerName: '',//选中的打印机名称
+            printerId: '',//选中的打印机id
+            value14: '',
         };
     },
     mounted() {
@@ -132,6 +150,7 @@ export default {
         this.floorId = this.$store.state.user.expressScope
     },
     methods: {
+
         // 快递单号
         wxScanCodeB() {
             wx.scanQRCode({
@@ -169,11 +188,14 @@ export default {
         // 选择快递公司
         async onShowPicker() {
             const res = await appGeLogisticsList({ page: '', limit: '' }, { emulateJSON: true })
-            this.GeLogisticsList = res.data.map((item) => {
-                return item.expressCompany
-            })
-            this.GeLogisticsList.unshift(this.$store.state.user.company)
-
+            if (res.msg == 'success') {
+                this.GeLogisticsList = res.data.map((item) => {
+                    return item.expressCompany
+                })
+                this.GeLogisticsList.unshift(this.$store.state.user.company)
+            } else {
+                Toast('系统异常')
+            }
             this.showPicker = true
         },
         // 选择快递公司
@@ -195,33 +217,22 @@ export default {
             this.shelf = false;
         },
 
+
         // 提交
         async onSubmit(values) {
-
-            if (!this.pattern.test(this.object.payMoney)) {
-                return this.$toast('到付金额只能输入数字')
+            if (this.checkbox == true) {
+                if (!this.pattern.test(this.object.payMoney)) {
+                    this.$toast('到付金额只能输入数字')
+                    throw '到付金额只能输入数字'
+                }
             }
 
-            // const phone = values.phone.split(",")[0]
             const params = {
-
                 isCompany: this.isCompany,
                 mailRoomId: this.onGroupObject.ROOM_ID,//收发室Id
-                // payMoney,
                 userId: this.onGroupObject.USER_ID,//收件人userID
-                // shelfInformation,
-                // expressNo,
-                // mailRoom,
-                // departmentId,
-                // sendSeat,
-                // isPayOnDelivery,
-                // expressType,
-                // expressQuantity,
-                // expressCompany,
-                // phone
-                // remark,
-            }
 
+            }
             const originalObj = {
                 isPayOnDelivery: values.isPayOnDelivery == true ? '是' : '否',
             };
@@ -229,7 +240,6 @@ export default {
                 ...values,
                 ...originalObj
             }
-            console.log(value, '==========================value ')
             const res = await appSaveExpressRecord({ ...params, ...value, departmentId: this.onGroupObject.departmentName }, { emulateJSON: true })
             this.value14 = this.object.value4
             console.log(res[0], 'res===')
@@ -255,13 +265,69 @@ export default {
 
             } else if (res.msg == 'already') {
                 this.$toast('该账号已添加过')
+                throw '该账号已添加过'
             } else if (res.msg == 'PermissionControl') {
                 this.$toast('不在揽收范围')
+                throw '不在揽收范围'
             } else if (res.code == 444) {
                 this.$toast(res.error)
+                throw res.error
             }
             this.object.value4 = this.value14
         },
+        // 保存/打印小标签并添加下一个
+        async printerGo() {
+            const getPrinters = await getListOfPrinters({})
+            if (getPrinters.code == 0) {
+                const qwe = {
+                    IMEI: "8672970676795912",
+                    companyId: "990b526776e74ff9ab141ff28e09f0922",
+                    correspondingRoles: "揽件员2",
+                    id: 72,
+                    printerName: "禁魔石打印机2",
+                    recordDate: "2024-04-12 15:10:12.4282",
+                    shareCode: "9077782",
+                    st: "12",
+                    type: "12",
+                    useTheId: "11392",
+                }     //脏数据
+                getPrinters.data.push(qwe)
+                this.getPrintersList = getPrinters.data.map((item) => {
+                    return { printerName: item.printerName, id: item.id }
+                })
+                this.printerShow = true
+            } else {
+                Toast('系统异常')
+            }
+
+        },
+        // 打印机弹框确认
+        async onPrinter(e) {
+            console.log(e, 'eeeeeeeeeeeeeee')
+            const toask = this.$toast.loading({
+                duration: 0, // 持续展示 toast
+                forbidClick: true,
+                message: '加载中',
+            });
+            this.printerName = e.printerName;
+            this.printerId = e.id;
+
+            // 开始走打印机面单
+            const formData = this.$refs.formRef.getValues();
+            try {
+                await this.onSubmit(formData)
+                const res = await storagePrintSmallTab({ expressNo: formData.expressNo, id: e.id })
+                if (res.msg == 'success') {
+                    Toast('打印成功')
+
+                }
+                console.log(res, '最后')
+                this.printerShow = false;
+            } catch (error) {
+
+            }
+            toask.clear();
+        },
         // 到付change
         onCheckboxChange() {
             this.isdisabled = !this.isdisabled
@@ -269,6 +335,8 @@ export default {
         // 获取用户信息
         async getUser() {
             const res = await getSysUserInfoByUserIdAPI({ userId: localStorage.getItem("courierUserId") })
+            this.shelfs = res.sysUserInfo.shelf.split(',');
+
             this.$store.state.user = res.sysUserInfo
             console.log(this.$store.state.user, 'this.$state.state.user')
         }