作者 朱兆平

合并分支 'master_dev' 到 'master'

Master dev



查看合并请求 !25
... ... @@ -39,3 +39,26 @@ export const selectNameList = params => { return axios.get(`${baseServiceURL}/ma
//多车定位
export const queryMulVel = params => { return axios.get(`${baseServiceURL}/map/location/queryMulVel`, { params: params }); };
//车载运单查询列表
export const selectNewInventroyrecords = params => { return axios.get(`${baseServiceURL}/wms/vehicleWaybill/selectNewInventroyrecords`, { params: params }); };
//车载运单新增
export const addVehicleWaybill = params => { return http.post(`${baseServiceURL}/wms/vehicleWaybill/addVehicleWaybill`, params); };
//车载运单删除
export const delVehicleWaybill = params => { return axios.get(`${baseServiceURL}/wms/vehicleWaybill/delVehicleWaybill`, { params: params }); };
//车载运单更新
export const ediVehicleWaybill = params => { return http.post(`${baseServiceURL}/wms/vehicleWaybill/ediVehicleWaybill`, params); };
//车辆派单
export const paidan = params => { return http.post(`${baseServiceURL}/wms/vehicleWaybill/paidan`, params); };
//查询车载派单记录列表
export const selectByDispatchList = params => { return axios.get(`${baseServiceURL}/wms/tracker/selectByDispatchList`, { params: params }); };
//手动新增车载派单记录
export const addTracker = params => { return http.post(`${baseServiceURL}/wms/tracker/addTracker`, params); };
//根据派单号查询运单列表
export const selectListByDispatch = params => { return axios.get(`${baseServiceURL}/wms/vehicleWaybill/selectListByDispatch`, { params: params }); };
//上传EXCEL
export const UploadExcel = params => { return http.postExcelData(`${baseServiceURL}/wms/vehicleWaybill/upload`, params); };
//车载货物图片上传
export const uploadGoodsImage = params => { return http.postExcelData(`${baseServiceURL}/wms/vehicleWaybill/uploadGoodsImage`, params); };
//查询货物图片列表
export const selectPicsByDispatch = params => { return axios.get(`${baseServiceURL}/wms/vehicleWaybill/selectPicsByDispatch`, { params: params }); };
... ...
... ... @@ -48,6 +48,16 @@ export default {
}
})
},
postExcelData(url, data) {
return axios({
method: 'POST', // 请求协议
url: url, // 请求的地址
data: data, // post 请求的数据
headers: {
'Content-Type': 'multipart/form-data'
}
})
},
get(url, params) {
return axios({
method: 'GET',
... ...
import Minio from 'minio';
const minioClient = new Minio.Client({
endPoint: 'http://47.99.102.169',
port: 9000,
useSSL: false,
accessKey: 'ruitai',
secretKey: 'vmvnv1v2',
});
export default minioClient;
... ...
... ... @@ -112,6 +112,8 @@ import myTask from './views/technological/myTask.vue'
import definition from './views/technological/definition.vue'
//仓库场站管理
import Tracker from './views/deploy/Tracker.vue'
import VehicleWaybill from './views/deploy/VehicleWaybill.vue'
import vehicle from './views/deploy/vehicle.vue'
import trajectory from './views/deploy/trajectory.vue'
import attendance from './views/deploy/attendance.vue'
... ... @@ -573,6 +575,8 @@ let routes = [
name: '仓库场站管理',
iconCls:'el-icon-goods',
children:[
{path:'/Tracker',component:Tracker,name:'派单记录'},
{path:'/VehicleWaybill',component:VehicleWaybill,name:'车载运单'},
{path:'/vehicle',component:vehicle,name:'车辆定位'},
{path:'/trajectory',component:trajectory,name:'车辆轨迹'},
{path:'/attendance',component:attendance,name:'出勤历史'},
... ...
<template>
<div>
<div>
<el-descriptions class="margin-top" title="车辆信息" :column="3" :size="size" border>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-user"></i>
司机
</template>
{{carinfo.veOwnerName}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-mobile-phone"></i>
手机号
</template>
{{carinfo.ownerInsideTel}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-truck"></i>
车号
</template>
{{carinfo.domesticLisenceNo}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-tickets"></i>
驾驶证有效期
</template>
<el-tag size="small">{{carinfo.veFactoryDate}}</el-tag>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-shopping-cart-full"></i>
车自重
</template>
{{carinfo.selfWt}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-office-building"></i>
地址
</template>
{{carinfo.proposer}}
</el-descriptions-item>
</el-descriptions>
</div>
<div style="margin-top: 10px">
<el-descriptions class="margin-top" title="派单列表" :column="3" :size="size" border></el-descriptions>
<el-table
ref="multipleTable"
:data="tableData"
tooltip-effect="dark"
style="width: 100%"
>
<el-table-column
prop="dispatch"
label="派单号"
width="150">
</el-table-column>
<el-table-column
prop="awba"
label="主单号"
width="105">
</el-table-column>
<el-table-column
prop="awbh"
label="分单号"
width="140">
</el-table-column>
<el-table-column
prop="deststation"
label="目的港"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="pcs"
label="件数"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="weight"
label="毛重"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="vol"
label="体积"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="charge"
label="应收"
show-overflow-tooltip>
</el-table-column>
</el-table>
</div>
<div style="margin-top: 10px">
<el-descriptions class="margin-top" title="车辆跟踪" :column="3" :size="size" border>
<template slot="extra">
<el-button type="primary" size="small" @click="addRecords">添加记录</el-button>
</template>
</el-descriptions>
<div>
<el-timeline :reverse="reverse">
<el-timeline-item
v-for="(activity, index) in activities"
:key="index"
:timestamp="activity.opertime">
<span style="color: #5BB75B;font-weight: bold">状态:</span>{{activity.status}}--<span style="color: #5BB75B;font-weight: bold">跟踪信息:</span>{{activity.info}}
</el-timeline-item>
</el-timeline>
</div>
</div>
<div>
<el-dialog
title="添加车辆跟进信息"
:visible.sync="dialogVisible"
width="30%"
:before-close="handleClose">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<el-form-item label="派单号" prop="dispatch">
<el-input v-model="ruleForm.dispatch" disabled></el-input>
</el-form-item>
<el-form-item label="跟进状态" prop="status">
<el-select v-model="ruleForm.status" placeholder="请选择状态" style="width: 100%">
<el-option label="待装" value="待装"></el-option>
<el-option label="在途" value="在途"></el-option>
<el-option label="已到未卸" value="已到未卸"></el-option>
<el-option label="已完成" value="已完成"></el-option>
</el-select>
</el-form-item>
<el-form-item label="跟进信息" prop="info">
<el-input v-model="ruleForm.info"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm')">保存</el-button>
<el-button @click="resetForm('ruleForm')">取消</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
<div>
<el-descriptions class="margin-top" title="货物照片" :column="3" :size="size" border>
<template slot="extra">
<el-upload
class="upload-demo"
action=""
:http-request="uploadRequest"
:on-change="handleChange"
:on-success="handleSuccess"
:on-error="handleError"
:before-upload="beforeUpload"
multiple
accept="image/*"
>
<el-button size="small" type="success">上传照片</el-button>
</el-upload>
</template>
</el-descriptions>
<div>
<el-image
v-for="(url, index) in validUrls"
:key="index"
:src="url"
style="width: 200px; height: 200px; margin: 10px;"
:preview-src-list="validUrls"
/>
</div>
</div>
</div>
</template>
<script>
import {list} from "../../api/road_verecord/verecord";
import {
selectListByDispatch,
selectByDispatchList,
addTracker,
uploadGoodsImage,
selectPicsByDispatch
} from "../../api/consigner/vehicle";
export default {
data() {
return{
ruleForm:{
dispatch: "",
id: "",
info: "",
opertime: "",
status: ""
},
rules:{
status: [
{ required: true, message: '请选择跟进状态', trigger: 'change' }
],
},
reverse: false,
activities: [],
validUrls:[],
routerinfo:{},
carinfo:{},
size: 'medium',
tableData:[],
dialogVisible: false
}
},
methods:{
getImgList(){
selectPicsByDispatch({dispatch:this.routerinfo.dispatch}).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error('获取消息收发记录,失败!')
}
if(res.data.urls && res.data.urls.trim() !== ''){
this.validUrls= res.data.urls
.split(',')
.filter(url => url.trim() !== '');
}
}).catch(error => {
// 关闭加载
this.$message.error(error.toString())
})
},
beforeUpload(file) {
const isImage = file.type.startsWith('image/');
if (!isImage) {
this.$message.error('只能上传图片文件!');
}
return isImage;
},
handleChange(file, fileList) {
console.log(file, fileList);
},
handleSuccess(response, file, fileList) {
console.log('Upload successful:', response);
},
handleError(err, file, fileList) {
console.error('Upload failed:', err);
},
uploadRequest({ file, onSuccess, onError }) {
const formData = new FormData();
formData.append('file', file);
formData.append('dispatch',this.routerinfo.dispatch);
uploadGoodsImage(formData).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error(res.msg);
}
this.$message.success(res.msg);
this.getImgList();
onSuccess(response.data); // 调用 onSuccess 回调通知上传成功
}).catch(error => {
// 关闭加载
this.$message.error(error.toString())
onError(error); // 调用 onError 回调通知上传失败
})
},
//添加跟踪记录
addRecords(){
this.ruleForm.dispatch=this.routerinfo.dispatch;
this.dialogVisible=true;
},
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
addTracker(this.ruleForm).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error('跟进信息添加,失败!')
}
this.$message.success('跟进信息添加,成功!')
this.dialogVisible = false;
this.getRecords();
}).catch(error => {
// 关闭加载
this.$message.warning('跟进信息添加,失败!')
})
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.dialogVisible = false;
this.$refs[formName].resetFields();
},
//查询跟踪记录
getRecords(){
selectByDispatchList({dispatch:this.routerinfo.dispatch}).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error('获取消息收发记录,失败!')
}
// 获取列表数据
this.activities=res.data;
}).catch(error => {
// 关闭加载
this.$message.error(error.toString())
})
},
//查询派单列表
getLists() {
selectListByDispatch({dispatch:this.routerinfo.dispatch}).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error('获取消息收发记录,失败!')
}
// 获取列表数据
this.tableData=res.data;
}).catch(error => {
// 关闭加载
this.$message.error(error.toString())
})
},
getDefault(){
if(this.$route.query!=null){
this.routerinfo=this.$route.query.jilu;
}
},
//查询车辆信息
getReCord() {
let para = {
pageSize: 1,
limitSize: 10,
trailerFrameNo: this.$route.query.jilu.licenseno,
veState: '',
veClassFlag: '',
userId: ''
};
list(para).then((res) => {
if(res.data.data.list.length!==0){
this.carinfo = res.data.data.list[0];
}else{
this.$message.warning('无对应车辆信息!')
}
}).catch((error) => {
this.$message.warning('车辆查询,失败!')
});
},
getMess(){
if(this.routerinfo!=null && this.routerinfo.length!==0){
this.getReCord();
this.getLists();
}
},
handleClose(done) {
this.$confirm('确认关闭?')
.then(_ => {
done();
})
.catch(_ => {});
},
},
activated() {
this.getDefault();
this.getMess();
this.getRecords();
this.getImgList();
}
}
</script>
... ...
<template>
<div>
<div>
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="主单号">
<el-input v-model="formInline.awba" placeholder="主单号"></el-input>
</el-form-item>
<el-form-item label="车号">
<el-input v-model="formInline.licenseno" placeholder="车号"></el-input>
</el-form-item>
<el-form-item>
<div class="block">
<span class="demonstration">日期</span>
<el-date-picker
v-model="value2"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss"
:picker-options="pickerOptions">
</el-date-picker>
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getLists">查询</el-button>
</el-form-item>
<el-form-item>
<el-button type="success" @click="addVehicle">新增</el-button>
</el-form-item>
<el-form-item>
<el-button type="danger" @click="onPaidan">派单</el-button>
</el-form-item>
<el-form-item>
<el-form-item>
<el-upload
class="upload-demo"
action=""
:before-upload="beforeUpload"
:http-request="uploadFile"
:show-file-list="false"
>
<el-button size="small" type="primary">导入运单</el-button>
</el-upload>
</el-form-item>
<el-button type="success" @click="exportToExcel">导出 Excel</el-button>
</el-form-item>
</el-form>
</div>
<div>
<el-table
ref="multipleTable"
:data="tableData"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column
prop="customer"
label="客户名称"
width="120">
</el-table-column>
<el-table-column
prop="taketime"
label="日期"
width="120">
</el-table-column>
<el-table-column
prop="orig"
label="始发地"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="dest"
label="目的地"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="licenseno"
label="车号"
width="90">
<template slot-scope="scope">
<a type="text" style="color: #409eff;text-decoration: underline" class="tableInline"
@click="getReCord(scope.row)">{{scope.row.licenseno}}</a>
</template>
</el-table-column>
<el-table-column
prop="dispatch"
label="派单号"
width="150">
<template slot-scope="scope">
<router-link :to="{name:'派单记录', query:{jilu:scope.row}}">
<a>
{{scope.row.dispatch}}
</a>
</router-link>
</template>
</el-table-column>
<el-table-column
prop="awbh"
label="分单号"
width="140">
</el-table-column>
<el-table-column
prop="awba"
label="主单号"
width="110">
</el-table-column>
<el-table-column
prop="deststation"
label="目的港"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="pcs"
label="件数"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="weight"
label="毛重"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="vol"
label="体积"
show-overflow-tooltip>
</el-table-column>
<el-table-column
prop="charge"
label="应收"
show-overflow-tooltip>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="100">
<template slot-scope="scope">
<el-button @click="ediVehicle(scope.row)" type="text" size="small">编辑</el-button>
<el-button @click="delVehicleWaybill(scope.row.id)" type="text" size="small">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div>
<div class="block">
<el-row>
<el-col :span="14">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="formInline.pageNum"
:page-sizes="[20, 30, 40, 100]"
:page-size="formInline.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</el-col>
</el-row>
</div>
</div>
<div>
<el-dialog
:title="'车载运单'+textMap[dialogStatus]"
:visible.sync="dialogVisible"
width="75%"
:before-close="handleClose">
<el-form :inline="true" label-width="80px" :model="submitForm"
class="demo-form-inline">
<el-form-item label="客户名称">
<el-select v-model="submitForm.customer"
@click.native="getUsers"
default-first-option
:loading="loading" clearable placeholder="请选择"
style="width: 157px">
<el-option
v-for="item in usernames"
:key="item.roleName"
:label="item.roleName"
:value="item.roleName"
:disabled="item.disabled">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="日期">
<div class="block">
<el-date-picker
style="width: 157px"
v-model="submitForm.taketime"
type="date"
format="yyyy-MM-dd"
placeholder="选择日期">
</el-date-picker>
</div>
</el-form-item>
<el-form-item label="始发地">
<el-input v-model="submitForm.orig" placeholder="始发地"></el-input>
</el-form-item>
<el-form-item label="目的地">
<el-input v-model="submitForm.dest" placeholder="目的地"></el-input>
</el-form-item>
<el-form-item label="车号">
<el-input v-model="submitForm.licenseno" placeholder="车号"></el-input>
</el-form-item>
<el-form-item label="派单号">
<el-input v-model="submitForm.dispatch" placeholder="派单号"></el-input>
</el-form-item>
<el-form-item label="分单号">
<el-input v-model="submitForm.awbh" placeholder="分单号"></el-input>
</el-form-item>
<el-form-item label="主单号">
<el-input v-model="submitForm.awba" placeholder="主单号"></el-input>
</el-form-item>
<el-form-item label="目的港">
<el-input v-model="submitForm.deststation" placeholder="目的港"></el-input>
</el-form-item>
<el-form-item label="件数">
<el-input v-model="submitForm.pcs" placeholder="件数"></el-input>
</el-form-item>
<el-form-item label="毛重">
<el-input v-model="submitForm.weight" placeholder="毛重"></el-input>
</el-form-item>
<el-form-item label="体积">
<el-input v-model="submitForm.vol" placeholder="体积"></el-input>
</el-form-item>
<el-form-item label="应收">
<el-input v-model="submitForm.charge" placeholder="应收"></el-input>
</el-form-item>
<el-form-item label="危险品">
<el-select v-model="submitForm.isdangerous" style="width: 157px">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="尺寸">
<el-input v-model="submitForm.means" placeholder="尺寸"></el-input>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="submitForm.remark" placeholder="备注"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer" style="margin-right: 50px">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogStatus==='create'?addVehicleWaybill():ediVehicleWaybill()">确 定</el-button>
</span>
</el-dialog>
</div>
<div>
<el-dialog
title="派单申请"
:visible.sync="PDdialogVisible"
width="30%"
:before-close="handleClose">
<el-form :model="PDForm" :rules="rules" ref="PDForm" label-width="100px" :label-position="labelPosition"
class="demo-ruleForm">
<el-form-item label="车号" prop="licenseno">
<el-input v-model="PDForm.licenseno"></el-input>
</el-form-item>
<el-form-item label="派单号" prop="dispatch">
<el-input v-model="PDForm.dispatch"></el-input>
</el-form-item>
<el-form-item label="始发地" prop="orig">
<el-input v-model="PDForm.orig"></el-input>
</el-form-item>
<el-form-item label="目的地" prop="dest">
<el-input v-model="PDForm.dest"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitPDForm('PDForm')">派单</el-button>
<el-button @click="resetForm('PDForm')">取消</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
<div>
<el-dialog
:visible.sync="CardialogVisible"
width="65%"
:before-close="handleClose">
<el-descriptions class="margin-top" title="车辆信息" :column="3" :size="size" border>
<template slot="extra">
<el-button type="primary" @click="CardialogVisible = false">关闭</el-button>
</template>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-user"></i>
司机
</template>
{{carinfo.veOwnerName}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-mobile-phone"></i>
手机号
</template>
{{carinfo.ownerInsideTel}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-truck"></i>
车号
</template>
{{carinfo.domesticLisenceNo}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-tickets"></i>
驾驶证有效期
</template>
<el-tag size="small">{{carinfo.veFactoryDate}}</el-tag>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-shopping-cart-full"></i>
车自重
</template>
{{carinfo.selfWt}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-office-building"></i>
地址
</template>
{{carinfo.proposer}}
</el-descriptions-item>
</el-descriptions>
</el-dialog>
</div>
</div>
</template>
<script>
import {
getUserList,
addVehicleWaybill,
delVehicleWaybill,
ediVehicleWaybill,
selectNewInventroyrecords,
paidan,
UploadExcel
} from "../../api/consigner/vehicle";
import {list} from "../../api/road_verecord/verecord";
import XLSX from 'xlsx';
import { saveAs } from 'file-saver';
export default {
data() {
return {
size: 'medium',
PDForm: {
licenseno: '',
orig: '',
dest: '',
dispatch: ''
},
rules: {
licenseno: [
{required: true, message: '请输入车号', trigger: 'blur'},
{min: 3, max: 15, message: '长度在 3 到 15 个字符', trigger: 'blur'}
],
dispatch: [
{required: true, message: '请输入派单号', trigger: 'blur'},
{min: 3, max: 17, message: '长度在 3 到 17 个字符', trigger: 'blur'}
],
orig: [
{required: true, message: '请输入始发地', trigger: 'blur'},
{min: 2, max: 100, message: '长度在 2 到 100 个字符', trigger: 'blur'}
],
dest: [
{required: true, message: '请输入目的地', trigger: 'blur'},
{min: 2, max: 100, message: '长度在 3 到 100 个字符', trigger: 'blur'}
],
},
labelPosition: 'left',
tableData: [],
multipleSelection: [],
formInline: {
awba: '',
licenseno: '',
starttime: '',
endtime: '',
pageNum: 1,
pageSize: 20
},
dialogStatus: '',
loading: false,
listLoading: false,
value2: '',
total: 0,
pickerOptions: {
shortcuts: [{
text: '最近一周',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近一个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近三个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit('pick', [start, end]);
}
}]
},
currentPage4: 4,
submitForm: {
awba: "",
awbh: "",
charge: 0,
createtime: "",
customer: "",
dest: "",
deststation: "",
dispatch: "",
id: "",
isdangerous: 0,
licenseno: "",
means: "",
orig: "",
pcs: 0,
pic: "",
relevance: "",
remark: "",
remark1: "",
remark2: "",
taketime: "",
vol: 0,
weight: 0
},
dialogVisible: false,
PDdialogVisible: false,
CardialogVisible: false,
usernames: [],
options: [
{
value: 0,
label: '否'
}, {
value: 1,
label: '是'
}
],
textMap: {
update: '编辑',
create: '新增'
},
carinfo: {
domesticLisenceNo: '',
veOwnerName: '',
ownerInsideTel: '',
proposer: '',
selfWt: '',
veFactoryDate: '',
veTon: '',
trailerLicenseNo: '',
trailerFrameNo: ''
},
}
},
methods: {
//导入运单excel
beforeUpload(file) {
// 检查文件类型
const isExcel = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.type === 'application/vnd.ms-excel';
if (!isExcel) {
this.$message.error('上传文件只能是 Excel 格式!');
return false; // 取消文件上传
}
return true; // 允许上传
},
uploadFile({ file, onSuccess, onError }){
// 生成 FormData 对象
const formData = new FormData();
formData.append('file', file);
UploadExcel(formData).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error(res.msg);
}
this.$message.success(res.msg);
this.getLists();
onSuccess(response.data); // 调用 onSuccess 回调通知上传成功
}).catch(error => {
// 关闭加载
this.$message.error(error.toString())
onError(error); // 调用 onError 回调通知上传失败
})
},
//导出excel
exportToExcel() {
if(this.multipleSelection.length!==0){
const headers = {
customer: '客户名称',
taketime: '日期',
orig: '始发地',
dest: '目的地',
licenseno: '车号',
awba: '主单',
awbh: '分单',
deststation: '目的港',
pcs: '件数',
weight: '毛重',
vol: '体积',
means: '尺寸',
charge: '应收'
};
// Filter data to include only specified columns
const filteredData = this.multipleSelection.map(row => {
const newRow = {};
for (const key in headers) {
newRow[headers[key]] = row[key];
}
return newRow;
});
// Convert to worksheet and workbook
const ws = XLSX.utils.json_to_sheet(filteredData, { header: Object.values(headers) });
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
const wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
saveAs(new Blob([wbout], { type: 'application/octet-stream' }), new Date().toLocaleString()+'.xlsx');
}else{
this.$message.warning('请先勾选要导出的数据!');
}
},
//查询车牌号
getReCord(row) {
let para = {
pageSize: 1,
limitSize: 10,
trailerFrameNo: row.licenseno,
veState: '',
veClassFlag: '',
userId: ''
};
list(para).then((res) => {
if(res.data.data.list.length!==0){
this.carinfo = res.data.data.list[0];
this.CardialogVisible=true;
}else{
this.$message.warning('无对应车辆信息!')
}
}).catch((error) => {
this.$message.warning('车辆查询,失败!')
});
},
//提交派单表单申请
submitPDForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.multipleSelection.forEach(item => {
item.licenseno = this.PDForm.licenseno;
item.orig = this.PDForm.orig;
item.dest = this.PDForm.dest;
item.dispatch = this.PDForm.dispatch;
});
paidan(this.multipleSelection).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error('车辆派单,失败!')
}
this.$message.success('车辆派单,成功!')
this.PDdialogVisible = false;
}).catch(error => {
// 关闭加载
this.$message.warning('车辆派单,失败!')
})
} else {
return false;
}
});
},
//生成派单号
getCurrentFormattedDate() {
const now = new Date();
const pad = (num) => num.toString().padStart(2, '0');
const yyyy = now.getFullYear();
const MM = pad(now.getMonth() + 1);
const dd = pad(now.getDate());
const HH = pad(now.getHours());
const mm = pad(now.getMinutes());
const ss = pad(now.getSeconds());
const SSS = now.getMilliseconds().toString().padStart(3, '0');
return `${yyyy}${MM}${dd}${HH}${mm}${ss}${SSS}`;
},
//派单取消提交
resetForm(formName) {
this.$refs[formName].resetFields();
this.PDdialogVisible = false;
},
//更新车载运单
ediVehicleWaybill() {
ediVehicleWaybill(this.submitForm).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error('更新车载运单,失败!')
}
this.$message.success('更新车载运单,成功!')
this.dialogVisible = false;
this.getLists();
}).catch(error => {
// 关闭加载
this.$message.warning('更新车载运单,失败!')
})
},
//删除车载运单
delVehicleWaybill(id) {
// 弹框询问是否删除?
this.$confirm('此操作永久删除该消息收发记录, 是否继续?', '警告', {
confirmButtonText: '确定删除',
cancelButtonText: '取消',
type: 'warning'
}
).then(() => {
delVehicleWaybill({id: id}).then((response) => {
const res = response.data
this.$message.success(res.msg)
this.getLists();
}).catch(error => {
this.$message.error('删除车载运单,失败!')
})
}).catch(() => {
})
},
//新增车载运单
addVehicleWaybill() {
addVehicleWaybill(this.submitForm).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error('新增车载运单,失败!')
}
this.$message.success('新增车载运单,成功!')
this.dialogVisible = false;
this.getLists();
}).catch(error => {
// 关闭加载
this.$message.warning('新增车载运单,失败!')
})
},
//查询列表
getLists() {
if (this.value2 !== null) {
this.formInline.starttime = this.value2[0];
this.formInline.endtime = this.value2[1];
}
selectNewInventroyrecords(this.formInline).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error('获取消息收发记录,失败!')
}
// 获取列表数据
this.tableData = res.data.list
// 获取列表的总记录数
this.total = res.data.total
this.$message.success('获取消息收发记录,成功!');
this.formInline.endtime = '';
this.formInline.starttime = '';
}).catch(error => {
// 关闭加载
this.$message.error(error.toString())
})
},
onPaidan() {
if (this.multipleSelection.length !== 0) {
this.PDdialogVisible = true;
this.PDForm.dispatch = this.getCurrentFormattedDate();
} else {
this.$message.error('请选勾取要派车的运单信息!');
}
},
//新增
addVehicle() {
this.dialogVisible = true;
this.dialogStatus = 'create';
this.getUsers();
},
//编辑
ediVehicle(row) {
this.dialogVisible = true;
this.dialogStatus = 'update';
this.submitForm = row;
},
//翻页
handleSizeChange(val) {
this.formInline.pageSize = val;
this.getLists();
},
handleCurrentChange(val) {
this.formInline.pageNum = val;
this.getLists();
},
//多选选中
handleSelectionChange(val) {
this.multipleSelection = val;
console.log(this.multipleSelection)
},
//Dialog关闭提示
handleClose(done) {
this.$confirm('确认关闭?')
.then(_ => {
done();
})
.catch(_ => {
});
},
//获取用户名列表
getUsers() {
let para = {orgtype: "C", pageSize: 1, pageNum: 10000};
this.listLoading = true;
getUserList(para).then((res) => {
this.usernames = res.data.data.list;
}).catch((error) => {
this.$message.error(error.toString());
}).finally(() => {
this.listLoading = false;
});
},
},
mounted() {
this.getLists();
}
}
</script>
... ...