emis-frontend/src/views/emis/emisTmsScanRecord/arrivalAndDispathScan.vue
2024-06-03 19:18:45 +08:00

611 lines
20 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-row :gutter="0">
<el-form ref="form" size="mini" :model="form" :rules="rules" label-width="80px">
<el-col :span="6">
<el-form-item :label="$t('派件员')" prop="dispatchOrSendManCode"><span slot="label">
<span style="color: red">{{$t('派件员')}}</span>
</span>
<EmisUserSimplePicker v-model="form.dispatchOrSendManCode" postCode="RSD" @onChange="onStaffSelect" ></EmisUserSimplePicker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="扫描单号" prop="billCode" label-width="70px">
<span slot="label">
<span style="color: red">{{$t('扫描单号')}}</span>
</span>
<el-input v-model="form.billCode" clearable="" placeholder="单号输入后按回车" @keyup.enter.native="handleScanInput" >
<i slot="suffix" class="iconfont">&#xe656;</i>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :label="$t('上一站')" prop="preOrNextStation">
<EmisGetPreSitePicker v-model="form.preOrNextStation" @onChange="onSiteSelect" ></EmisGetPreSitePicker>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="重量" prop="scanWeight" label-width="60px">
<el-input v-model="form.scanWeight" placeholder="扫描重量" >
<span slot="suffix">KG</span>
</el-input>
</el-form-item>
</el-col>
</el-form>
</el-row>
<div slot="toolbar">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
size="mini"
:disabled="multiple"
@click="handleScanUpload"
v-hasPermi="['emis:emisTmsScanRecord:add']"
>上传</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="clearSelectionBatch"
v-hasPermi="['emis:emisTmsScanRecord:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
size="mini"
@click="handleBatchScan"
v-hasPermi="['emis:emisTmsScanRecord:batchScan']"
>批量扫描</el-button>
</el-col>
</el-row>
</div>
<xd-table v-loading="loading"
border stripe
ref="multipleTable"
size="small"
:queryParams="queryParams"
:data="emisTmsScanRecordList"
:total="emisTmsScanRecordList.length"
@selection-change="handleSelectionChange"
v-if="tableHeight" :height="tableHeight + 'px'"
>
<!-- <el-table ref="multipleTable" border stripe v-loading="loading" :data="emisTmsScanRecordList" @selection-change="handleSelectionChange"> -->
<el-table-column type="selection" width="55" align="center" />
<el-table-column :label="$t('扫描单号')" align="center" prop="billCode" min-width="150" />
<el-table-column :label="$t('扫描类型')" align="center" prop="scanType" min-width="100" >
<template slot-scope="scope">
<dict-tag :options="dict.type.emis_scan_type" :value="scope.row.scanType"/>
</template>
</el-table-column>
<el-table-column :label="$t('扫描网点')" align="center" prop="scanSite" min-width="100" />
<el-table-column :label="$t('扫描员')" align="center" prop="scanMan" min-width="150" />
<el-table-column :label="$t('扫描时间')" align="center" prop="scanDate" min-width="170" >
<template slot-scope="scope">
<span>{{ parseTime(scope.row.scanDate) }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('上一站')" align="center" prop="preOrNextStation" min-width="100" />
<el-table-column :label="$t('派件员')" align="center" prop="dispatchOrSendMan" min-width="100" />
<el-table-column :label="$t('重量')" align="center" prop="scanWeight" min-width="100" />
</xd-table>
<el-dialog :title="titleBatch" :visible.sync="openBatch" width="50%" v-dialogDrag :close-on-click-modal="false" append-to-body>
<el-form ref="formBatch" :model="formBatch" :rules="rulesBatch" size="mini" label-width="60px">
<el-row>
<el-col :span="24">
<el-form-item :label="$t('运单号')" prop="billCode">
<el-input v-model="formBatch.billCode" type="textarea" :rows="8" placeholder="运单号" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer" style="text-align:center">
<el-button type="primary" @click="submitFormBatch">确 定</el-button>
<el-button @click="cancelBatch">取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { doScan } from "@/api/emis/emisTmsScanRecord";
import EmisUserSimplePicker from '@/views/emis/EmisBaseTools/EmisUserSimplePicker.vue';
import EmisGetPreSitePicker from '@/views/emis/EmisBaseTools/EmisGetPreSitePicker.vue';
export default {
name: "ArrivalAndDispathScan",
props:{
id:undefined
},
components: { EmisUserSimplePicker,EmisGetPreSitePicker },
dicts: ['emis_scan_type'],
data() {
return {
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
checkedDetail:[],
// 遮罩层
loading: false,
// 表单参数
form: {},
titleBatch: "",
formBatch: {},
openBatch:false,
dataMap:new Map(),
emisTmsScanRecordList: [],
queryParams:{},
tableHeight: 200,
// 是否显示弹出层
open: false,
// 表单校验
rules: {
// billCode: [
// { required: true, message: "billCode不能为空", trigger: "blur" }
// ],
// id: [
// { required: true, message: "id不能为空", trigger: "blur" }
// ],
},
rulesBatch: {
// id: [
// { required: true, message: "id不能为空", trigger: "blur" }
// ],
}
};
},
watch: {
"id": {
handler (newValue, oldValue) {
this.id = newValue;
this.initData();
},
deep: true
}
},
created() {
this.reset();
this.form.scanSiteCode=this.$store.getters.ownerSiteCode;
this.form.scanSite=this.$store.getters.ownerSiteName;
this.form.scanMan=this.$store.getters.empName;
this.form.scanManCode=this.$store.getters.empCode;
this.form.recordMan=this.$store.getters.empName;
this.form.recordManCode=this.$store.getters.empCode;
this.$nextTick(function() {
let form = this.$refs.form.$el;
let tableH = form.offsetHeight+265;
this.tableHeight = window.innerHeight - tableH;
});
console.log(this.form)
},
methods: {
getRowSelect(row, column, event) {
// dosomething
},
onStaffSelect(item){
this.form.dispatchOrSendMan=item.empName || this.$store.getters.empName;
this.form.dispatchOrSendManCode=item.empCode || this.$store.getters.empCode;
},
getRowsSelect(arr) {
this.form.ids= arr.map(item=>item.id)
},
handleBatchScan(){
this.formBatch = {
billCode: null,
}
this.titleBatch="批量扫描";
this.openBatch=true;
},
clearSelectionBatch(){
let newList =[];
console.log(this.ids)
this.emisTmsScanRecordList.forEach(item=>{
if(this.ids.indexOf(item.billCode+item.scanType) == -1){
newList.push(item);
}else{
this.dataMap[item.billCode+item.scanType]=null;
}
});
this.emisTmsScanRecordList = newList;
},
cancelBatch(){
this.openBatch=false;
},
onSiteSelect(){
this.form.preOrNextStation=item.startSiteName;
this.form.preOrNextStationCode=item.startSite;
},
submitFormBatch(){
if(this.formBatch.billCode==null || this.formBatch.billCode==''){
this.$message.error("输入单号后回车");
return;
}
if(this.form.dispatchOrSendManCode==null || this.form.dispatchOrSendManCode==''){
this.$message.error("请选择派件员");
return;
}
let bcList=this.formBatch.billCode.trim().split(/[;\;\,\,\n]/)||[];
let scanWeight = this.form.scanWeight
let dispatchOrSendMan = this.form.dispatchOrSendMan;
let dispatchOrSendManCode = this.form.dispatchOrSendManCode;
// let scList=bcList.map(function(code) {
// return {
// billCode:code,
// scanWeight:scanWeight,
// // scanWeight:null,
// dispatchOrSendManCode: dispatchOrSendManCode
// }
// }
// )
let haveCode = null;
let dm = this.dataMap;
let scList=bcList.map(function(code) {
if(dm[code+"30"] || dm[code+"40"]){
haveCode = code;
return;
}
return {
billCode:code,
scanWeight:scanWeight,
// scanWeight:null,
dispatchOrSendManCode: dispatchOrSendManCode
}
})
if(haveCode){
this.$message.error("重复扫描:"+haveCode);
this.playNoticeTone(1);
return;//终止批量扫描逻辑
}
// 到件批量
let scanArrivalInfo = {
scanType:"30",
opType:1,
scanData:scList
};
doScan(scanArrivalInfo).then(response => {
if(!response.data.scanResult || response.data.scanResult.length == 0){
this.$message.error("未查到单号");
return;
}
for (let index = 0; index < response.data.scanResult.length; index++) {
let scanRstItem = response.data.scanResult[index];
console.log(scanRstItem);
if(scanRstItem.result != 'success'){
this.$modal.msgError(scanRstItem.message);
return;
}
// this.form.scanType = '10';
this.form.scanDate = new Date();
let record =Object.assign({}, this.form)
record.billCode=scanRstItem.billCode;
record.scanType = "30";
record.dispatchOrSendMan = null;
record.dispatchOrSendManCode = null;
let indexBillCode=record.billCode;
this.dataMap[indexBillCode+record.scanType]=record;
this.emisTmsScanRecordList.push(record);
}
});
// 派件批量
let scanDispathInfo = {
scanType:"40",
opType:1,
scanData:scList
};
doScan(scanDispathInfo).then(response => {
if(!response.data.scanResult || response.data.scanResult.length == 0){
this.$message.error("未查到单号");
return;
}
for (let index = 0; index < response.data.scanResult.length; index++) {
let scanRstItem = response.data.scanResult[index];
console.log(scanRstItem);
if(scanRstItem.result != 'success'){
this.$modal.msgError(scanRstItem.message);
return;
}
// this.form.scanType = '10';
this.form.scanDate = new Date();
let record =Object.assign({}, this.form)
record.billCode=scanRstItem.billCode;
record.scanType = "40";
record.dispatchOrSendMan = dispatchOrSendMan;
record.dispatchOrSendManCode = dispatchOrSendManCode;
let indexBillCode=record.billCode;
this.dataMap[indexBillCode+record.scanType]=record;
this.emisTmsScanRecordList.push(record);
}
});
this.openBatch=false;
},
// 表单重置
reset() {
this.form = {
id: null,
billCode: null,
scanType: null,
preOrNextStation: null,
preOrNextStationCode: null,
preOrNextStationPhone: null,
preOrNextManCode: null,
preOrNextManPhone: null,
scanDate: null,
scanManCode: null,
scanManPhone: null,
scanMan: null,
preOrNextMan: null,
scanSite: null,
scanSiteCode: null,
scanSitePhone: null,
scanWeight: null,
weight: null,
dispatchOrSendMan: null,
dispatchOrSendManCode: null,
dispatchOrSendManPhone: null,
signDate: null,
signMan: null,
signSite: null,
signSiteCode: null,
recordMan: null,
recordManCode: null,
recordManPhone: null,
recordSiteCode: null,
truckMan: null,
truckCode: null,
dataFrom: null,
picUrl: null,
status: null,
delFlag: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null,
updateSite: null,
createSite: null
};
this.resetForm("form");
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.billCode+item.scanType)
this.selection = selection;
this.single = selection.length!==1
this.multiple = !selection.length
// this.checkedDetail = selection;
// if (selection.length > 1) {
// this.$refs.multipleTable.clearSelection();
// this.$refs.multipleTable.toggleRowSelection(selection.pop());
// } else {
// //将选中行存入缓存中
// this.checkedDetail = selection;
// }
},
// 扫描上传
async handleScanUpload(){
var selData = this.selection;
let newList = Array.from(this.emisTmsScanRecordList);
let dataMap = this.dataMap;
let scanArrivalData=[];
let scanDispathData=[];
selData.forEach(item=>{
if (item.scanType=="30") {
scanArrivalData.push(
{
billCode:item.billCode,
scanWeight:item.scanWeight,
scanDate:item.scanDate || new Date(),
}
);
}else if(item.scanType=="40") {
scanDispathData.push(
{
billCode:item.billCode,
scanWeight:item.scanWeight,
dispatchOrSendManCode:item.dispatchOrSendManCode,
scanDate:item.scanDate || new Date(),
}
);
}
});
// 到件扫描上传
let scanArrivalInfo = {scanType:"30",opType:2,scanData:scanArrivalData}
console.log(scanArrivalInfo)
if(scanArrivalData.length > 0){
let res = await doScan(scanArrivalInfo);
// console.log(response);
let scanRstItem = res.data.scanResult[0];
// console.log(scanRstItem);
if(scanRstItem.result != 'success'){
this.$modal.msgError(scanRstItem.message);
return;
}
scanArrivalData.forEach((item) => {
newList = newList.map(function(nitem){
if(nitem && item.billCode == nitem.billCode && nitem.scanType == "30"){
dataMap[item.billCode+"30"]=null;
return null;
}else{
return nitem;
}
})
this.ids.splice(this.ids.indexOf(item.billCode+"30"),1)
})
this.$modal.msgSuccess("到件扫描上传"+scanRstItem.message);
}
// 派件扫描上传
let scanDispathInfo = {scanType:"40",opType:2,scanData:scanDispathData}
console.log(scanDispathInfo)
if(scanDispathData.length > 0){
let res = await doScan(scanDispathInfo);
let scanRstItem = res.data.scanResult[0];
console.log(scanRstItem);
if(scanRstItem.result != 'success'){
this.$modal.msgError(scanRstItem.message);
return;
}
scanDispathData.forEach((item) => {
newList = newList.map(function(nitem){
if(nitem && item.billCode == nitem.billCode && nitem.scanType == "40"){
dataMap[item.billCode+"40"]=null;
return null;
}else{
return nitem;
}
})
this.ids.splice(this.ids.indexOf(item.billCode+"40"),1)
})
this.$modal.msgSuccess("派件扫描上传"+scanRstItem.message);
}
this.dataMap = dataMap;
console.log(this.emisTmsScanRecordList)
this.emisTmsScanRecordList = newList.filter(function(item) {
return item !== null;
});
},
handleScanInput(){
if(this.form.billCode==null || this.form.billCode==''){
this.$message.error("输入单号后回车");
return;
}
if(this.form.dispatchOrSendManCode==null || this.form.dispatchOrSendManCode==''){
this.$message.error("请选择派件员");
return;
}
if(this.dataMap[this.form.billCode+"30"]){
this.$message.error("到件重复扫描");
this.playNoticeTone(1);
return;
}
if(this.dataMap[this.form.billCode+"40"]){
this.$message.error("派件重复扫描");
this.playNoticeTone(1);
return;
}
let dispatchOrSendMan = this.form.dispatchOrSendMan;
let dispatchOrSendManCode = this.form.dispatchOrSendManCode;
// 到件扫描
let scanArrivalInfo = {
scanType:"30",
opType:1,
scanData:[
{
billCode:this.form.billCode,
scanWeight:this.form.scanWeight,
dispatchOrSendManCode:dispatchOrSendManCode
}
]
};
doScan(scanArrivalInfo).then(response => {
console.log(response);
let scanRstItem = response.data.scanResult[0];
console.log(scanRstItem);
if(scanRstItem.result != 'success'){
this.$modal.msgError(scanRstItem.message);
return;
}
// this.form.scanType = '10';
this.form.scanDate = new Date();
let record =Object.assign({}, this.form)
record.billCode=scanRstItem.billCode;
record.scanType = '30';
record.dispatchOrSendMan=null;
record.dispatchOrSendManCode=null;
console.log(record)
let indexBillCode=record.billCode;
this.dataMap[indexBillCode+record.scanType]=record;
this.emisTmsScanRecordList.push(record);
});
// 派件扫描
let scanDispathInfo = {
scanType:"40",
opType:1,
scanData:[
{
billCode:this.form.billCode,
scanWeight:this.form.scanWeight,
dispatchOrSendManCode:dispatchOrSendManCode
}
]
};
doScan(scanDispathInfo).then(response => {
console.log(response);
let scanRstItem = response.data.scanResult[0];
console.log(scanRstItem);
if(scanRstItem.result != 'success'){
this.$modal.msgError(scanRstItem.message);
return;
}
// this.form.scanType = '10';
this.form.scanDate = new Date();
let record =Object.assign({}, this.form)
record.billCode=scanRstItem.billCode;
record.scanType = '40';
record.dispatchOrSendMan = dispatchOrSendMan;
record.dispatchOrSendManCode = dispatchOrSendManCode;
console.log(record)
let indexBillCode=record.billCode;
this.dataMap[indexBillCode+record.scanType]=record;
this.emisTmsScanRecordList.push(record);
});
this.form.billCode =null;
},
}
};
</script>