作者 xudada

制单

... ... @@ -79,6 +79,17 @@ export default {
}
});
},
getPDF(url, params) {
return axios({
method: 'GET',
url: url,
responseType: 'blob',
params: params,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
},
put(url, params){
return axios({
method: 'PUT',
... ...
import http from "../http";
import axios from "axios";
let baseUrl = 'zhidan-service'
//pdf导出
export const extPdf = params => { return http.getPDF(`${baseUrl}/zhidan/extpdf`, params); };
//excel导出
export const extExcel = params => { return http.getPDF(`${baseUrl}/zhidan/extexcel`, params); };
//导入excel
export const importExcel = params => { return http.postExcelData(`${baseUrl}/zhidan/importexcel`, params); };
//查询列表
export const selectLists = params => { return axios.get(`${baseUrl}/zhidan/selectLists`, { params: params }); };
//费率新增
export const addRate = params =>{return http.post(`${baseUrl}/rate/addRate`, params);};
//费率删除
export const delRate = params => { return axios.get(`${baseUrl}/rate/delRate`, { params: params }); };
//费率更新
export const ediRate = params =>{return http.post(`${baseUrl}/rate/ediRate`, params);};
//费率查询
export const selectRate = params => { return axios.get(`${baseUrl}/rate/selectRate`, { params: params }); };
... ...
... ... @@ -197,6 +197,10 @@ import satellite from "./views/deploy/satellite";
import ExortOrder from './views/exportorder/Exportorder.vue'
import CustomerConfig from './views/exportorder/CustomerConfig.vue'
/*制单管理*/
import ZhiDan from './views/zhidan/zhidan.vue'
import Rate from './views/zhidan/rate.vue'
let routes = [
{
path: '/login',
... ... @@ -231,6 +235,16 @@ let routes = [
]
},
{
path: '/zhidan',
component: HomeNew,
name: '制单管理',
iconCls: 'el-icon-collection',
children: [
{path: '/ZhiDan', component: ZhiDan, name: '制单信息'},
{path: '/Rate', component: Rate, name: '费率设置'}
]
},
{
path: '/',
component: HomeNew,
name: 'Charts',
... ...
<template>
<div>
<el-row :gutter="24">
<el-col :span="4">
<el-input size="medium" v-model="query.carrier" onkeyup="this.value=this.value.toUpperCase()" placeholder="承运人二字码"></el-input>
</el-col>
<el-col :span="4">
<el-input size="medium" v-model="query.dest" onkeyup="this.value=this.value.toUpperCase()" placeholder="目的港"></el-input>
</el-col>
<el-col :span="2">
<el-button size="medium" @click="getList" type="primary">查询</el-button>
</el-col>
<el-col :span="2">
<el-button size="medium" @click="add" type="primary">新增</el-button>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-table
:data="tableData"
border
style="width: 100%">
<el-table-column
prop="carrier"
label="承运人二字码"
width="120">
</el-table-column>
<el-table-column
prop="dest"
label="目的港"
width="120">
</el-table-column>
<el-table-column
prop="destrate"
label="目的港费率"
width="120">
</el-table-column>
<el-table-column
prop="mycname"
label="燃油费类型"
width="120">
</el-table-column>
<el-table-column
prop="myc"
label="燃油费率"
width="120">
</el-table-column>
<el-table-column
prop="sccname"
label="战险类型"
width="120">
</el-table-column>
<el-table-column
prop="scc"
label="战险费率"
width="120">
</el-table-column>
<el-table-column
prop="zhidanfei"
label="制单费"
width="120">
</el-table-column>
<el-table-column
prop="cgc"
label="信息传输费"
width="120">
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="100">
<template slot-scope="scope">
<el-button @click="handleClick(scope.row)" type="text" size="small">编辑</el-button>
<el-button @click="deleteClick(scope.row)" type="text" size="small">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
<el-col :span="24">
<div class="block">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="query.pageNum"
:page-sizes="[10, 20, 30, 40]"
:page-size="query.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</el-col>
</el-row>
<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="dest">
<el-input v-model="ruleForm.dest" onkeyup="this.value=this.value.toUpperCase()"></el-input>
</el-form-item>
<el-form-item label="目的港费率" prop="destrate">
<el-input v-model="ruleForm.destrate" type="number"></el-input>
</el-form-item>
<el-form-item label="承运人二字码" prop="carrier">
<el-input v-model="ruleForm.carrier" onkeyup="this.value=this.value.toUpperCase()"></el-input>
</el-form-item>
<el-form-item label="燃油费类型:" prop="mycname">
<el-input v-model="ruleForm.mycname" onkeyup="this.value=this.value.toUpperCase()"></el-input>
</el-form-item>
<el-form-item label="燃油费率" prop="myc">
<el-input v-model="ruleForm.myc" type="number"></el-input>
</el-form-item>
<el-form-item label="战险类型" prop="sccname">
<el-input v-model="ruleForm.sccname" onkeyup="this.value=this.value.toUpperCase()"></el-input>
</el-form-item>
<el-form-item label="战险费率" prop="scc">
<el-input v-model="ruleForm.scc" type="number"></el-input>
</el-form-item>
<el-form-item label="制单费" prop="zhidanfei">
<el-input v-model="ruleForm.zhidanfei" type="number"></el-input>
</el-form-item>
<el-form-item label="信息传输费" prop="cgc">
<el-input v-model="ruleForm.cgc" type="number"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="dialogStatus==='create'?addForm('ruleForm'):ediForm('ruleForm')">保存</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
import {addRate,delRate,ediRate,selectRate} from "../../api/zhidan/zhidan";
export default {
data(){
return{
ruleForm: {
id:'',
carrier: '',
dest:'',
destrate:0,
myc:0,
scc:0,
zhidanfei:0,
mycname:'',
sccname:'',
cgc:0,
},
rules: {
},
query:{
carrier:'',
dest:'',
pageNum:1,
pageSize:20
},
total:0,
tableData:[],
dialogVisible:false,
dialogStatus: '',
}
},
mounted() {
this.getList();
},
methods:{
addForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
addRate(this.ruleForm).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error('费率新增,失败!')
}
this.$message.success('费率新增,成功!')
this.dialogVisible = false;
this.getList();
}).catch(error => {
// 关闭加载
this.$message.warning('费率新增,失败!')
})
} else {
console.log('error submit!!');
return false;
}
});
},
ediForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
ediRate(this.ruleForm).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error('费率更新,失败!')
}
this.$message.success('费率更新,成功!')
this.dialogVisible = false;
this.getList();
}).catch(error => {
// 关闭加载
this.$message.warning('费率更新,失败!')
})
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
add(){
this.ruleForm={
id:'',
carrier: '',
dest:'',
destrate:0,
myc:0,
scc:0,
zhidanfei:0,
mycname:'',
sccname:'',
cgc:0,
}
this.dialogVisible=true;
this.dialogStatus='create';
},
handleClose(done) {
this.$confirm('确认关闭?')
.then(_ => {
done();
})
.catch(_ => {});
},
handleClick(row) {
this.dialogVisible=true;
this.dialogStatus='update';
this.ruleForm=row;
},
deleteClick(row) {
this.$confirm('此操作永久删除该消息收发记录, 是否继续?', '警告', {
confirmButtonText: '确定删除',
cancelButtonText: '取消',
type: 'warning'
}
).then(() => {
delRate({id: row.id}).then((response) => {
const res = response.data
this.$message.success(res.msg)
this.getList();
}).catch(error => {
this.$message.error('删除配置,失败!')
})
}).catch(() => {
})
},
handleSizeChange(val) {
this.query.pageSize=val;
this.getList();
},
handleCurrentChange(val) {
this.query.pageNum=val;
this.getList();
},
getList(){
selectRate(this.query).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('获取消息收发记录,成功!');
}).catch(error => {
// 关闭加载
this.$message.error(error.toString())
})
},
validateUppercaseInput() {
// 使用正则表达式来匹配非大写字母,并替换为空字符串
this.uppercaseInput = this.uppercaseInput.replace(/[^A-Z]/g, '');
}
}
}
</script>
... ...
<template>
<div>
<el-row :gutter="24">
<el-col :span="4">
<el-input size="medium" v-model="query.waybill" placeholder="运单号"></el-input>
</el-col>
<el-col :span="9">
<el-date-picker
size="medium"
v-model="value2"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right">
</el-date-picker>
</el-col>
<el-col :span="2">
<el-button size="medium" @click="getList" type="primary">查询</el-button>
</el-col>
<el-col :span="2">
<el-upload
class="upload-demo"
action=""
:before-upload="beforeUpload"
:http-request="impExcel"
:show-file-list="false">
<el-button size="medium" type="success">导入数据</el-button>
</el-upload>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-table
:data="tableData"
border
style="width: 100%">
<el-table-column
prop="waybill"
label="运单号"
width="120">
</el-table-column>
<!--<el-table-column
prop="fhl"
label="分单号"
width="120">
</el-table-column>-->
<el-table-column
prop="flightno"
label="航班号"
width="120">
</el-table-column>
<el-table-column
prop="flightdate"
label="航班日期"
width="150">
</el-table-column>
<el-table-column
prop="pcs"
label="件数"
width="120">
</el-table-column>
<el-table-column
prop="weight"
label="重量"
width="120">
</el-table-column>
<el-table-column
prop="feweifht"
label="计费重"
width="120">
</el-table-column>
<el-table-column
prop="vol"
label="体积"
width="120">
</el-table-column>
<el-table-column
prop="descr"
label="品名"
width="120">
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="160">
<template slot-scope="scope">
<el-button @click="handlePdf(scope.row)" type="text" size="small">下载PDF</el-button>
<el-button @click="handleExcel(scope.row)" type="text" size="small">下载EXCEL</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
<el-col :span="24">
<el-pagination
size="medium"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="query.pageNum"
:page-sizes="[100, 200, 300, 400]"
:page-size="query.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</el-col>
</el-row>
</div>
</template>
<script>
import {selectLists,extPdf,extExcel,importExcel} from "../../api/zhidan/zhidan";
export default {
data(){
return{
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]);
}
}
]
},
query:{
waybill:'',
starttime:'',
endtime:'',
pageNum:1,
pageSize:20
},
value2:'',
tableData: [],
total:0,
}
},
mounted() {
this.getList();
},
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; // 允许上传
},
impExcel({ file, onSuccess, onError }){
// 生成 FormData 对象
const formData = new FormData();
formData.append('file', file);
importExcel(formData).then((response) => {
const res = response.data
if (res.code !== '200') {
return this.$message.error(res.msg);
}
this.$message.success(res.msg);
this.getList();
onSuccess(response.data); // 调用 onSuccess 回调通知上传成功
}).catch(error => {
// 关闭加载
this.$message.error(error.toString())
onError(error); // 调用 onError 回调通知上传失败
})
},
getList(){
if(this.value2 !== null && this.value2 !== ""){
this.query.starttime=this.value2[0];
this.query.endtime=this.value2[1];
}
selectLists(this.query).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('获取消息收发记录,成功!');
}).catch(error => {
// 关闭加载
this.$message.error(error.toString())
})
},
handlePdf(row) {
extPdf({id: row.id}).then(response => {
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', row.waybill+'.pdf'); // 动态设置文件名
document.body.appendChild(link);
link.click();
document.body.removeChild(link); // 清理临时链接
window.URL.revokeObjectURL(url); // 清理URL对象
}).catch(error => {
console.error('Error downloading PDF:', error);
});
},
handleExcel(row) {
extExcel({id: row.id}).then(response => {
if (!response || !response.data) {
console.error('Response data is empty or not a Blob.');
return;
}
const blob = new Blob([response.data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
const tempFile = URL.createObjectURL(blob);
fetch(tempFile)
.then(res => res.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', row.waybill+'.xlsx');
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
})
.catch(error => {
console.error('Error creating temporary file:', error);
});
window.URL.revokeObjectURL(tempFile);
}).catch(error => {
console.error('Error downloading Excel:', error);
});
},
handleSizeChange(val) {
this.query.pageSize=val;
this.getList();
},
handleCurrentChange(val) {
this.query.pageNum=val;
this.getList();
}
}
}
</script>
... ...