Commit 369bc5f8 authored by 我在何方's avatar 我在何方

添加收款单UI

parents ffbd8b5c ac06cc73
//==本JS是加载Lodop插件或Web打印服务CLodop/Lodop7的综合示例,可直接使用,建议理解后融入自己程序==
//用双端口加载主JS文件Lodop.js(或CLodopfuncs.js兼容老版本)以防其中某端口被占:
var MainJS ="CLodopfuncs.js",
URL_WS1 = "ws://localhost:8000/"+MainJS, //ws用8000/18000
URL_WS2 = "ws://localhost:18000/"+MainJS,
URL_HTTP1 = "http://localhost:8000/"+MainJS, //http用8000/18000
URL_HTTP2 = "http://localhost:18000/"+MainJS,
URL_HTTP3 = "https://localhost.lodop.net:8443/"+MainJS; //https用8000/8443
var CreatedOKLodopObject, CLodopIsLocal, LoadJsState;
//==判断是否需要CLodop(那些不支持插件的浏览器):==
function needCLodop() {
try {
var ua = navigator.userAgent;
if (ua.match(/Windows\sPhone/i) ||
ua.match(/iPhone|iPod|iPad/i) ||
ua.match(/Android/i) ||
ua.match(/Edge\D?\d+/i))
return true;
var verTrident = ua.match(/Trident\D?\d+/i);
var verIE = ua.match(/MSIE\D?\d+/i);
var verOPR = ua.match(/OPR\D?\d+/i);
var verFF = ua.match(/Firefox\D?\d+/i);
var x64 = ua.match(/x64/i);
if ((!verTrident) && (!verIE) && (x64)) return true;
else if (verFF) {
verFF = verFF[0].match(/\d+/);
if ((verFF[0] >= 41) || (x64)) return true;
} else if (verOPR) {
verOPR = verOPR[0].match(/\d+/);
if (verOPR[0] >= 32) return true;
} else if ((!verTrident) && (!verIE)) {
var verChrome = ua.match(/Chrome\D?\d+/i);
if (verChrome) {
verChrome = verChrome[0].match(/\d+/);
if (verChrome[0] >= 41) return true;
}
}
return false;
} catch (err) {
return true;
}
}
//==检查加载成功与否,如没成功则用http(s)再试==
//==低版本CLODOP6.561/Lodop7.043及前)用本方法==
function checkOrTryHttp() {
if (window.CLODOP2015_7028) {
LoadJsState = "complete";
return true;
}
if (LoadJsState == "loadingB" || LoadJsState == "complete") return;
LoadJsState = "loadingB";
var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
var JS1 = document.createElement("script")
,JS2 = document.createElement("script")
,JS3 = document.createElement("script");
JS1.src = URL_HTTP1;
JS2.src = URL_HTTP2;
JS3.src = URL_HTTP3;
JS1.onload = JS2.onload = JS3.onload = JS2.onerror = JS3.onerror=function(){LoadJsState = "complete";}
JS1.onerror = function(e) {
if (window.location.protocol !== 'https:')
head.insertBefore(JS2, head.firstChild); else
head.insertBefore(JS3, head.firstChild);
}
head.insertBefore(JS1,head.firstChild);
}
//==加载Lodop对象的主过程:==
(function loadCLodop(){
if (!needCLodop()) return;
CLodopIsLocal = !!((URL_WS1 + URL_WS2).match(/\/\/localho|\/\/127.0.0./i));
LoadJsState = "loadingA";
if (!window.WebSocket && window.MozWebSocket) window.WebSocket=window.MozWebSocket;
//ws方式速度快(小于200ms)且可避免CORS错误,但要求Lodop版本足够新:
try {
var WSK1=new WebSocket(URL_WS1);
WSK1.onopen = function(e) { setTimeout("checkOrTryHttp();",200); }
WSK1.onmessage = function(e) {if (!window.CLODOP2015_7028) eval(e.data);}
WSK1.onerror = function(e) {
var WSK2=new WebSocket(URL_WS2);
WSK2.onopen = function(e) {setTimeout("checkOrTryHttp();",200);}
WSK2.onmessage = function(e) {if (!window.CLODOP2015_7028) eval(e.data);}
WSK2.onerror= function(e) {checkOrTryHttp();}
}
} catch(e){
checkOrTryHttp();
}
})();
//==获取LODOP对象主过程,判断是否安装、需否升级:==
function getLodop(oOBJECT, oEMBED) {
var strFontTag = "<br><font color='#FF00FF'>打印控件";
var strLodopInstall = strFontTag + "未安装!点击这里<a href='install_lodop32.exe' target='_self'>执行安装</a>";
var strLodopUpdate = strFontTag + "需要升级!点击这里<a href='install_lodop32.exe' target='_self'>执行升级</a>";
var strLodop64Install = strFontTag + "未安装!点击这里<a href='install_lodop64.exe' target='_self'>执行安装</a>";
var strLodop64Update = strFontTag + "需要升级!点击这里<a href='install_lodop64.exe' target='_self'>执行升级</a>";
var strCLodopInstallA = "<br><font color='#FF00FF'>Web打印服务CLodop未安装启动,点击这里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>下载执行安装</a>";
var strCLodopInstallB = "<br>(若此前已安装过,可<a href='CLodop.protocol:setup' target='_self'>点这里直接再次启动</a>)";
var strCLodopUpdate = "<br><font color='#FF00FF'>Web打印服务CLodop需升级!点击这里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>执行升级</a>";
var strLodop7FontTag = "<br><font color='#FF00FF'>Web打印服务Lodop7";
var strLodop7HrefX86 = "点击这里<a href='Lodop7_Linux_X86_64.tar.gz' target='_self'>下载安装</a>(下载后解压,点击lodop文件开始执行)";
var strLodop7HrefARM = "点击这里<a href='Lodop7_Linux_ARM64.tar.gz' target='_self'>下载安装</a>(下载后解压,点击lodop文件开始执行)";
var strLodop7Install_X86 = strLodop7FontTag + "未安装启动," + strLodop7HrefX86;
var strLodop7Install_ARM = strLodop7FontTag + "未安装启动," + strLodop7HrefARM;
var strLodop7Update_X86 = strLodop7FontTag + "需升级," + strLodop7HrefX86;
var strLodop7Update_ARM = strLodop7FontTag + "需升级," + strLodop7HrefARM;
var strInstallOK = ",成功后请刷新本页面或重启浏览器。</font>";
var LODOP;
try {
var isWinIE = (/MSIE/i.test(navigator.userAgent)) || (/Trident/i.test(navigator.userAgent));
var isWinIE64 = isWinIE && (/x64/i.test(navigator.userAgent));
var isLinuxX86 = (/Linux/i.test(navigator.platform)) && (/x86/i.test(navigator.platform));
var isLinuxARM = (/Linux/i.test(navigator.platform)) && (/aarch/i.test(navigator.platform));
if (needCLodop() || isLinuxX86 || isLinuxARM) {
try {
LODOP = window.CLODOP2015_7028;
} catch (err) {}
if (!LODOP && LoadJsState !== "complete") {
if (!LoadJsState)
alert("未曾加载Lodop主JS文件,请先调用loadCLodop过程."); else
alert("网页还没下载完毕,请稍等一下再操作." + LoadJsState);
return;
}
var strAlertMessage;
if (!LODOP) {
if (isLinuxX86)
strAlertMessage = strLodop7Install_X86;
else if (isLinuxARM)
strAlertMessage = strLodop7Install_ARM;
else
strAlertMessage = strCLodopInstallA + (CLodopIsLocal ? strCLodopInstallB : "");
document.body.innerHTML = strAlertMessage + strInstallOK + document.body.innerHTML;
return;
} else {
if (isLinuxX86 && LODOP.CVERSION < "7.0.4.3")
strAlertMessage = strLodop7Update_X86;
else if (isLinuxARM && LODOP.CVERSION < "7.0.4.3")
strAlertMessage = strLodop7Update_ARM;
else if (CLODOP.CVERSION < "6.5.6.6")
strAlertMessage = strCLodopUpdate;
if (strAlertMessage)
document.body.innerHTML = strAlertMessage + strInstallOK + document.body.innerHTML;
}
} else {
//==如果页面有Lodop插件就直接使用,否则新建:==
if (oOBJECT || oEMBED) {
if (isWinIE)
LODOP = oOBJECT;
else
LODOP = oEMBED;
} else if (!CreatedOKLodopObject) {
LODOP = document.createElement("object");
LODOP.setAttribute("width", 0);
LODOP.setAttribute("height", 0);
LODOP.setAttribute("style", "position:absolute;left:0px;top:-100px;width:0px;height:0px;");
if (isWinIE)
LODOP.setAttribute("classid", "clsid:2105C259-1E0C-4534-8141-A753534CB4CA");
else
LODOP.setAttribute("type", "application/x-print-lodop");
document.documentElement.appendChild(LODOP);
CreatedOKLodopObject = LODOP;
} else
LODOP = CreatedOKLodopObject;
//==Lodop插件未安装时提示下载地址:==
if ((!LODOP) || (!LODOP.VERSION)) {
document.body.innerHTML = (isWinIE64 ? strLodop64Install : strLodopInstall) + strInstallOK + document.body.innerHTML;
return LODOP;
}
if (LODOP.VERSION < "6.2.2.6") {
document.body.innerHTML = (isWinIE64 ? strLodop64Update : strLodopUpdate) + strInstallOK + document.body.innerHTML;
}
}
//===如下空白位置适合调用统一功能(如注册语句、语言选择等):=======================
LODOP.SET_LICENSES("江西省晨尚科技有限公司","9D5CB0779D3B7FF8B70BD2F896DA5312","","");
//===============================================================================
return LODOP;
} catch (err) {
alert("getLodop出错:" + err);
}
}
......@@ -18,6 +18,16 @@ export function updateCurrencyEcash(data) {
})
}
// 更新E-Cash汇率单位
export function updateCurrencyEcashAll(data) {
console.log(data);
return request({
url: '/ecw/currency-ecash/updateAll',
method: 'put',
data: data
})
}
// 删除E-Cash汇率单位
export function deleteCurrencyEcash(id) {
return request({
......
......@@ -51,6 +51,14 @@ export function getCustomerContactsPage(query) {
})
}
// 获得客户联系人下拉列表
export function getCustomerContactsSelect(query) {
return request({
url: '/ecw/customer-contacts/select',
method: 'get',
params: query
})
}
// 导出客户联系人 Excel
export function exportCustomerContactsExcel(query) {
return request({
......
......@@ -52,3 +52,35 @@ export function exportOrderExcel(query) {
responseType: 'blob'
})
}
// 打印标签
export function printTag(id) {
return request({
url: '/order/print/orderTagPrint?orderId=' + id,
method: 'get',
})
}
//根据订单号获得订单费用申请列表
export function feeApplicationListByOrderId(query){
return request({
url:'/order/fee-application/listByOrderId',
method: 'get',
params: query,
})
}
//费用申请提交
export function feeApplicationCreate(data){
return request({
url:'order/fee-application/create',
method:'post',
data:data,
})
}
// 创建特殊
export function specialNeedCreate(data){
return request({
url:'ecw/order-special-need/create',
method:'post',
data:data,
})
}
......@@ -69,3 +69,12 @@ export function batchUpdateProduct(data) {
data: data
})
}
// 计算单种运输方式的商品费用(单个商品也做数组传参)
export function calculationPrice(data){
return request({
url: '/product/line/price/calculation',
method: 'post',
data: data
})
}
\ No newline at end of file
......@@ -53,68 +53,85 @@ export function exportUserExcel(query) {
responseType: 'blob'
})
}
//操作日志
export function operationLogApi(query){
export function operationLogApi(query) {
return request({
url:'/member/user/operation-log/page',
method:'get',
params:query,
url: '/member/user/operation-log/page',
method: 'get',
params: query,
})
}
//更新证书
export function seTupdateBackletter(data){
return request({
url:'/member/user/update-backletter',
method:'put',
data:data
export function seTupdateBackletter(data) {
return request({
url: '/member/user/update-backletter',
method: 'put',
data: data
})
})
}
//获取指定用户的实名认证信息
export function memberGetAuthIdcardInfo(query){
export function memberGetAuthIdcardInfo(query) {
return request({
url:'/member/user/get-auth-idcard-info',
method:'get',
params:query,
url: '/member/user/get-auth-idcard-info',
method: 'get',
params: query,
})
}
//获取指定企业认证信息
export function memberGetAuthEnterpriseInfo(query){
export function memberGetAuthEnterpriseInfo(query) {
return request({
url:'/member/user/get-auth-enterprise-info',
method:'get',
params:query,
url: '/member/user/get-auth-enterprise-info',
method: 'get',
params: query,
})
}
//身份证审核
export function memberUserAuditIdCard(query){
export function memberUserAuditIdCard(query) {
return request({
url:'/member/user/audit-idcard',
method :'get',
params:query,
url: '/member/user/audit-idcard',
method: 'get',
params: query,
})
}
}
//企业认证审核
export function memberUserAuditEnterprise(query){
return request({
url:'/member/user/audit-enterprise',
method:'get',
params:query,
})
export function memberUserAuditEnterprise(query) {
return request({
url: '/member/user/audit-enterprise',
method: 'get',
params: query,
})
}
//修改身份证
export function memberUserUpdateIdCard(data){
export function memberUserUpdateIdCard(data) {
return request({
url:'/member/user/update-idcard',
method:'put',
url: '/member/user/update-idcard',
method: 'put',
data: data
})
}
}
// 修改企业
export function memberUserUpdateEnterprise(data){
return request({
url:'/member/user/update-enterprise',
method:'put',
data:data,
})
export function memberUserUpdateEnterprise(data) {
return request({
url: '/member/user/update-enterprise',
method: 'put',
data: data,
})
}
//修改状态
export function setUserUpdateStatus(data) {
return request({
url:'/member/user/update-status',
method:'put',
data:data,
})
}
<template>
<div>
<el-select v-model="formData.country">
<el-option v-for="(item) in treeList" :value="item.id" :label="item.titleZh" :key="item.id" />
</el-select>
<el-select v-model="formData.province">
<el-option v-for="(item) in provinceList" :value="item.id" :label="item.titleZh" :key="item.id" />
</el-select>
<el-select v-model="formData.city">
<el-option v-for="(item) in cityList" :value="item.id" :label="item.titleZh" :key="item.id" />
</el-select>
</div>
</template>
<script>
import { getListTree } from "@/api/ecw/region";
export default {
data(){
return {
formData:{
},
treeList: [],
provinceList: [],
cityList:[]
}
},
watch:{
'formData.city'(city){
this.$emit('cityChange', city)
},
'formData.country'(country){
this.$emit('countryChange', country)
this.treeList.forEach(item => {
if(item.id == country){
this.provinceList = item.children || []
}
})
},
'formData.province'(province){
this.$emit('provinceChange', province)
this.provinceList.forEach(item => {
if(item.id == province){
this.cityList = item.children || []
}
})
}
},
created(){
getListTree({treeType: 1}).then(response => {
this.treeList = response.data
})
}
}
</script>
\ No newline at end of file
<template>
<el-select
v-model="index"
filterable
clearable
remote
reserve-keyword
placeholder="请输入关键词"
:remote-method="remoteMethod"
:loading="loading">
<el-option
v-for="(item, index) in list"
:key="item.id"
:label="`${item.contactsName}(${item.customerName})`"
:value="index">
</el-option>
</el-select>
</template>
<script>
import {getCustomerContactsSelect, getCustomerContacts} from '@/api/ecw/customerContacts'
export default {
props:{
value: [String, Number]
},
data(){
return {
index: null,
list:[],
loading: false,
size: 20
}
},
watch:{
index(val){
this.$emit('input', val !== null ? this.list[val].customerContactsId: null)
this.$emit('change', val !== null ? this.list[val]: null)
},
value(val){
this.init()
}
},
created(){
this.init()
},
methods:{
init(){
if(!this.value) return
let index = this.list.findIndex(item => item.customerContactsId == this.value)
if(index < 0){
getCustomerContacts(this.value).then(res => {
this.list.unshift(res.data)
this.index = 0
})
}
},
remoteMethod(keyword){
let params = {
size: this.size
}
params.searchKey = keyword
this.loading = true
getCustomerContactsSelect(params)
.then(res => this.list = res.data)
.finally(() => this.loading = false)
}
}
}
</script>
\ No newline at end of file
......@@ -6,12 +6,14 @@
remote
reserve-keyword
placeholder="请输入商品关键词"
:disabled="disabled"
:remote-method="remoteMethod"
:loading="loading">
<el-option
v-for="(item, index) in list"
:key="item.id"
:label="item.titleZh"
:value="index">
</el-option>
</el-select>
......@@ -22,19 +24,23 @@ import {getProduct, getProductPage} from '@/api/ecw/product'
export default {
props:{
productType: [String, Number],
value: [String, Number]
value: [String, Number],
disabled: Boolean
},
data(){
return {
index: {},
index: null,
list:[],
loading: false
}
},
watch:{
index(val){
this.$emit('input', val !== null ? this.list[val].id : null)
this.$emit('change', val !== null ? this.list[val] : null)
let productId = val !== '' && val !== null ? this.list[val].id : null
console.log('index val', val, productId)
this.$emit('input', productId)
this.$emit('change', val != '' && val !== null ? this.list[val] : null)
},
value(val){
console.log('初始化内容', val)
......
......@@ -199,6 +199,7 @@ export default {
cursor: pointer;
transition: 0.5s;
box-shadow: #bfbfbf 3px 3px 14px 0;
user-select: none;
}
.warehouse-block:hover{
opacity: 0.9;
......@@ -227,6 +228,7 @@ export default {
display: flex;
flex-direction: column;
gap: 1px;
user-select: none;
}
.position-item{
width: 100%;
......
......@@ -283,6 +283,67 @@ export const constantRoutes = [
},
]
},
{
path: '/order',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: 'associated-order/:orderId(\\d+)',
component: (resolve) => import('@/views/ecw/order/associatedOrder'),
props: true,
name: 'associatedOrder',
meta: {title: '关联订单', icon: '', activeMenu: '/order/associatedOrder'}
},
{
path: 'add-associated-order/:orderId',
component:()=>import('@/views/ecw/order/addAssociatedOrder'),
props: true,
name:'addAssociatedOrder',
meta:{
title:'添加关联订单',
icon:'',
activeMenu:'/order/addAssociatedOrder'
}
},
{
path:'single-application/:orderId',
component:()=>import('@/views/ecw/order/singleApplication'),
props: true,
name: 'singleApplication',
meta: {
title: '调仓申请',
icon: '',
activeMenu: '/order/singleApplication'
}
},
{
path: 'batch-single-application/:orderId',
component:()=> import('@/views/ecw/order/batchSingleApplication'),
name: 'batchSingleApplication',
meta: {
title: '批量调仓申请',
icon:'',
activeMenu: '/order/batchSingleApplication'
}
},
{
path: 'fee-application/:orderId',
component:()=> import('@/views/ecw/order/feeApplication'),
name: 'feeApplication',
props: true,
meta: {
title: '费用申请',
icon:'',
activeMenu: '/order/feeApplication'
}
}
],
},
{
path: '/boxSea',
component: Layout,
......@@ -298,17 +359,10 @@ export const constantRoutes = [
}, */
{
path: 'shippingSea/:boxId(\\d+)',
component: (resolve) => import('@/views/ecw/box/shipping/shippingSea'),
component: (resolve) => import('@/views/ecw/box/shippingSea/shippingSea'),
props: true,
name: 'shippingSea',
meta: {title: '海运出货操作', icon: '', activeMenu: '/shipment/boxSea'}
},
{
path: 'shippingSea/preinstall/:boxId(\\d+)',
component: (resolve) => import('@/views/ecw/box/shipping/preinstall'),
props: true,
name: 'preinstall',
meta: {title: '出货安排(预装)', icon: '', activeMenu: '/shipment/boxSea'}
}
]
},
......
......@@ -97,6 +97,9 @@ export const DICT_TYPE = {
ECW_OFFER_TYPE: 'offer_type', // 跟进类型
ECW_OFFER_METHOD: 'offer_method', // 跟进方式
ECW_RECEIPT_STATE: 'receipt_state',//收款单状态
ECW_SUING_METHOD: 'suing_method', // 出单方式
ECW_HARVEST_METHOD: 'harvest_method', // 收货方式
ECW_PAY_ADVANCE: 'pay_advance', // 是否预付
//--------ecw---------
CUSTOMER_STATUS: 'customer_status',
CUSTOMER_SOURCE: 'customer_source',
......@@ -124,7 +127,7 @@ export const DICT_TYPE = {
COMMISSION_TYPE: 'commission_type',//佣金类型
COMMISSION_DARK_TYPE: 'commission_dark_type',//暗涌类型
COMMISSION_CURRENCY_TYPE: 'commission_currency_type',//佣金货币类型
COMMISSION_UNIT: 'commission_unit',//佣金货物单位
// COMMISSION_UNIT: 'commission_unit',//佣金货物单位
ECW_PORT_TYPE: 'port_type', //港口类型
CERTIFICATE_TYPE: 'certificate_type',//证件类型
//customer
......@@ -142,6 +145,13 @@ export const DICT_TYPE = {
ORDER_EXCEPTION_STATUS:'order_exception_status',//异常订单状态
PAYMENT_TYPE:'payment_type',//收款类型
ECASH_INIT:'ecash_init', //e-cash
FEE_TYPE:'fee_type',
PAY_TYPE:'pay_type',
RECEIVE_FLAG:'receive_flag',
COMDINED_VALUE_ADDED_FEE:'combined_value_added_fee',
ORDER_SPECIAL_NEEDS:'order_special_needs'
}
/**
......
......@@ -19,3 +19,4 @@ const lodop = function(){
})
}
export default lodop
......@@ -101,11 +101,11 @@
<el-form-item label="英文内容" prop="contentEn">
<editor v-model="form.contentEn" :min-height="150"/>
</el-form-item>
<el-form-item label="WEB端广告图片" prop="bannerUrlWeb">
<el-form-item label="WEB端广告图片(建议尺寸210*902)" prop="bannerUrlWeb">
<el-col :span="8">
<el-input v-model="form.bannerUrlWeb" placeholder="请上传WEB端广告图片" />
</el-col>
<el-upload action="#" :http-request="requestUpload" :show-file-list="false" :before-upload="beforeUploadWeb">
<el-button size="small">
上传图片
......@@ -113,7 +113,7 @@
</el-button>
</el-upload>
</el-form-item>
<el-form-item label="APP端广告图片" prop="bannerUrlApp">
<el-form-item label="APP端广告图片(建议尺寸688*294)" prop="bannerUrlApp">
<el-col :span="8">
<el-input v-model="form.bannerUrlApp" placeholder="请上传APP端广告图片" />
</el-col>
......
<template>
<div>
<el-form ref="agentForm" :rules="rules" :model="agent" label-width="120px">
<el-form ref="agentForm" :model="agentObj" label-width="120px">
<el-form-item label="代理商Agent">
<el-select v-model="agent.agent" placeholder="请选择代理商">
<el-select v-model="agentObj.agent" placeholder="请选择代理商">
</el-select>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit">提交</el-button>
<el-button @click="cancel">保存</el-button>
<el-button type="primary" @click="onSubmit">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
</el-row>
</div>
</template>
<script>
/**
* agent
*/
export default {
name: "agent",
data() {
return {
agent: {},
// agent对象
agentObj: {},
};
},
methods: {
/** 提交 */
onSubmit() {
this.$refs["agentForm"].validate((valid) => {
if (valid) {
......@@ -29,6 +35,7 @@ export default {
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
......
<template>
<div>
<el-form ref="arrivalForm" :rules="rules" :model="arrivalObj" label-width="120px">
<el-form-item label="预计到港时间">{{arrivalObj.expectedTime}}</el-form-item>
<el-form-item label="实际到港时间">
<el-date-picker type="datetime" placeholder="请选择日期" v-model="arrivalObj.actualTime"></el-date-picker>
</el-form-item>
<el-form-item label="确认到港" prop="confirmTime">
<el-date-picker type="datetime" placeholder="请选择日期" v-model="arrivalObj.confirmTime">
</el-date-picker>
<p class="message-area" v-show="showMsg">请确认是否有异常,如有异常请进行异常登记</p>
</el-form-item>
<el-form-item label="卸港时间">
<el-date-picker type="date" placeholder="请选择日期" v-model="arrivalObj.dischargeTime"></el-date-picker>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
<el-button type="primary" @click="exceptionReg" :disabled="!showMsg">异常登记</el-button>
</el-row>
<!-- 对话框 -->
<el-dialog custom-class="shipping-dialog" title="票异常" :visible.sync="dialogVisible" width="700px" :modal-append-to-body=false append-to-body destroy-on-close>
<regError @closeDialog="dialogVisible = false" />
</el-dialog>
</div>
</template>
<script>
import regError from "./regError";
import dayjs from "dayjs";
/**
* 到港
*/
export default {
name: "arrival",
components: {
regError,
},
data() {
return {
// 到港对象
arrivalObj: {
expectedTime: "2022-07-18",
},
// 校验
rules: {
actualTime: [{ required: true, message: "必填", trigger: "change" }],
},
// 弹窗配置
dialogVisible: false,
// 提示消息
showMsg: false,
};
},
watch: {
// 预计到港时间
"arrivalObj.expectedTime"(val) {
this.compareDate(val, this.arrivalObj.confirmTime);
},
// 确认到港时间
"arrivalObj.confirmTime"(val) {
this.compareDate(this.arrivalObj.expectedTime, val);
},
},
methods: {
// 时间比较
compareDate(expectedTime, confirmTime) {
this.showMsg = false;
let date1 = null,
date2 = null;
if (expectedTime) date1 = dayjs(expectedTime);
if (confirmTime) date2 = dayjs(confirmTime);
if (date1 && date2) {
const days = date2.date() - date1.date();
if (days > 5) {
this.showMsg = true;
}
}
},
// 异常登记
exceptionReg() {
this.dialogVisible = true;
},
/** 提交 */
onSubmit() {
this.$refs["arrivalForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
},
};
</script>
<style lang="scss" scoped>
.message-area {
margin: 0;
color: red;
}
</style>
<template>
<div>
<el-form ref="bargeForm" :model="bargeObj" label-width="80px">
<el-form-item label="驳船">
<el-radio-group v-model="bargeObj.status">
<el-radio v-for="item in bargeStatus" :key="item.value" :label="item.value">{{item.label}}</el-radio>
</el-radio-group>
</el-form-item>
<div v-show="bargeObj.status === '2'">
<el-row>
<el-col :span="12">
<el-form-item label="驳船预计开船时间" label-width="130px">
<el-date-picker type="date" placeholder="请选择日期" v-model="bargeObj.expectedTime"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="通知人" label-width="80px">
<el-select v-model="bargeObj.feedTimePerson" placeholder="请选择通知人">
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="驳船实际开船时间" label-width="130px">
<el-date-picker type="date" placeholder="请选择日期" v-model="bargeObj.actualTime"></el-date-picker>
</el-form-item>
</div>
</el-form>
<el-row class="operate-button">
<el-button type="primary">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
</el-row>
</div>
</template>
<script>
/**
* 驳船
*/
export default {
name: "barge",
data() {
return {
// 驳船对象
bargeObj: {},
// 驳船
bargeStatus: [
{
value: "1",
label: "无驳船",
},
{
value: "2",
label: "有驳船",
},
],
};
},
methods: {
/** 提交 */
onSubmit() {
this.$refs["bargeForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
},
};
</script>
<style lang="scss" scoped>
</style>
<template>
<div>
<el-form ref="blCopyForm" :model="blCopyObj" label-width="120px">
<el-form-item label="提单Copy">
<el-upload action="" :file-list="blCopyObj.fileList">
<el-button size="small" type="primary">选择文件</el-button>
</el-upload>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
</el-row>
</div>
</template>
<script>
/**
* 提单copy
*/
export default {
name: "blCopy",
data() {
return {
// 提单copy对象
blCopyObj: {
fileList: [],
},
};
},
methods: {
/** 提交 */
onSubmit() {
this.$refs["blCopyForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
},
};
</script>
<style lang="scss" scoped>
</style>
<template>
<div>
<el-form ref="bookingForm" :rules="rules" :model="booking" label-width="140px" class="booking-form">
<el-form ref="bookingForm" :rules="rules" :model="booking" label-width="140px">
<el-form-item label="SO NO">
<el-input v-model="booking.soNo"></el-input>
<el-input v-model="booking.soNo" placeholder="请输入SO NO"></el-input>
</el-form-item>
<el-form-item label="船公司类型">
<el-select v-model="booking.type" placeholder="请选择船公司类型">
......@@ -34,12 +34,12 @@
</el-form-item>
<el-row>
<el-col span="12">
<el-col :span="12">
<el-form-item label="预计开船时间" prop="time">
<el-date-picker type="date" placeholder="请选择日期" v-model="booking.departureTime"></el-date-picker>
</el-form-item>
</el-col>
<el-col span="12">
<el-col :span="12">
<el-form-item label="通知人" label-width="80px">
<el-select v-model="booking.feedTimePerson" placeholder="请选择通知人">
</el-select>
......@@ -48,12 +48,12 @@
</el-row>
<el-row>
<el-col span="12">
<el-col :span="12">
<el-form-item label="预计提单补料时间">
<el-date-picker type="date" placeholder="请选择日期" v-model="booking.feedTime"></el-date-picker>
</el-form-item>
</el-col>
<el-col span="12">
<el-col :span="12">
<el-form-item label="通知人" label-width="80px">
<el-select v-model="booking.feedTimePerson" placeholder="请选择通知人">
</el-select>
......@@ -62,12 +62,12 @@
</el-row>
<el-row>
<el-col span="12">
<el-col :span="12">
<el-form-item label="预计报关时间">
<el-date-picker type="date" placeholder="请选择日期" v-model="booking.declarationTime"></el-date-picker>
</el-form-item>
</el-col>
<el-col span="12">
<el-col :span="12">
<el-form-item label="通知人" label-width="80px">
<el-select v-model="booking.feedTimePerson" placeholder="请选择通知人">
</el-select>
......@@ -76,12 +76,12 @@
</el-row>
<el-row>
<el-col span="12">
<el-col :span="12">
<el-form-item label="预计截关时间">
<el-date-picker type="date" placeholder="请选择日期" v-model="booking.cutOffTime"></el-date-picker>
</el-form-item>
</el-col>
<el-col span="12">
<el-col :span="12">
<el-form-item label="通知人" label-width="80px">
<el-select v-model="booking.feedTimePerson" placeholder="请选择通知人">
</el-select>
......@@ -92,25 +92,32 @@
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit">提交</el-button>
<el-button @click="cancel">取消</el-button>
<el-button @click="cancel">关闭</el-button>
</el-row>
</div>
</template>
<script>
/**
* 订舱
*/
export default {
name: "booking",
data() {
return {
// 船公司类型
types: ["PIL", "MSK", "CMA", "COSCO", "ZIM", "ONE", "OOCL", "MSC", "HPL"],
// 订舱对象
booking: {},
// 校验
rules: {
time: [{ required: true, message: "请选择时间", trigger: "change" }],
time: [{ required: true, message: "必填", trigger: "change" }],
},
};
},
methods: {
/** 提交 */
onSubmit() {
this.$refs["bookingForm"].validate((valid) => {
if (valid) {
......@@ -118,6 +125,7 @@ export default {
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
......
<template>
<div>
<el-form ref="cabinetForm" :rules="rules" :model="cabinet" label-width="80px">
<el-form-item label="到仓时间">
<el-date-picker type="date" placeholder="请选择日期" v-model="cabinet.arrivalTime"></el-date-picker>
</el-form-item>
<el-form-item label="仓库">
<el-select v-model="cabinet.warehouse" placeholder="请选择仓库">
</el-select>
</el-form-item>
<el-form-item label="装柜时间" prop="time">
<el-date-picker type="date" placeholder="请选择日期" v-model="cabinet.cabinetTime"></el-date-picker>
</el-form-item>
<el-form-item label="出仓时间">
<el-date-picker type="date" placeholder="请选择日期" v-model="cabinet.outTime"></el-date-picker>
</el-form-item>
<el-form-item label="装柜图片">
<el-upload action="" :limit="1" :file-list="cabinet.fileList">
<el-button size="small" type="primary">选择文件</el-button>
</el-upload>
</el-form-item>
</el-form>
<!-- 开始装柜 -->
<el-dialog title="开始装柜" :visible.sync="dialogVisible" fullscreen :modal-append-to-body=false append-to-body destroy-on-close>
<startPacking />
</el-dialog>
<!-- 操作 -->
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit">保存</el-button>
<el-button type="success">封柜</el-button>
<el-button @click="cancel">关闭</el-button>
<el-button type="danger" @click="startCabinet">开始装柜</el-button>
</el-row>
</div>
</template>
<script>
import startPacking from "./startPacking.vue";
/**
* 装柜
*/
export default {
name: "cabinet",
components: { startPacking },
props: {
boxId: String,
},
data() {
return {
// 弹窗
dialogVisible: false,
// 装柜对象
cabinet: {
fileList: [],
},
// 校验
rules: {
time: [{ required: true, message: "请选择时间", trigger: "change" }],
},
};
},
methods: {
/** 提交 */
onSubmit() {
this.$refs["cabinetForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
/** 开始装柜 */
startCabinet() {
this.dialogVisible = true;
},
},
};
</script>
<style lang="scss" scoped>
</style>
<template>
<div class="startPacking">
<el-card>
<el-row class="content-area">
<!-- 左侧 -->
<el-col :span="6" class="left-area">
<el-row v-for="item in testData" :key="item.key" class="title-info">
<div>
<p>{{item.title}}</p>
</div>
<div>
<p>111</p>
<p>111</p>
<p>111</p>
</div>
</el-row>
</el-col>
<!-- 右侧 -->
<el-col :span="18" class="right-area">
<!-- 操作 -->
<el-row class="table-title">
<div>当前装柜:第一部分</div>
<div>
<el-input v-model="qrCode" placeholder="请输入二维码/条码编号"></el-input>
<el-button type="primary">确定</el-button>
<el-button type="primary" @click="handlerClick('batchInput','批量输入')">批量输入</el-button>
<el-button type="primary" @click="handlerClick('correction','装柜纠错')">装柜纠错</el-button>
<el-button type="primary" @click="handlerClick('correctionOrder','批量装柜纠错')">批量装柜纠错</el-button>
</div>
</el-row>
<!-- 表格 -->
<el-row>
<el-table v-loading="loading" :data="listData">
<el-table-column label="序号" type="index" width="50" />
<el-table-column label="订单号" align="center" prop="selfNo">
<template slot-scope="scope">
<a href="javascript:void(0);" class="order-href" @click="orderClick(scope.row)">{{ scope.row.selfNo }}</a>
</template>
</el-table-column>
<el-table-column label="货物信息" align="center" prop="cubNo" />
<el-table-column label="计划箱数" align="center" prop="cabinetId" />
<el-table-column label="实装箱数" align="center" prop="transportType" />
<el-table-column label="体积" align="center" prop="squareNumber" />
<el-table-column label="重量" align="center" prop="weight" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="primary" size="small">移出</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
</el-col>
</el-row>
</el-card>
<!-- 统计 -->
<el-row>
<el-col :span="6" class="totle-info">
<div>
<p>总计:</p>
<p>111</p>
</div>
<div>
<p>容量:</p>
<p>111</p>
</div>
<div>已装0箱</div>
</el-col>
</el-row>
<!-- 操作 -->
<el-row class="button-area">
<el-button type="primary" @click="handlerClick('supplementOrder','补单')">补单</el-button>
<el-button type="primary">申请封柜</el-button>
<el-button type="primary" @click="handlerClick('modifyCabinet','修改柜信息')">修改柜信息</el-button>
<el-button type="primary">封柜审核中</el-button>
</el-row>
<!-- 对话框 -->
<el-dialog custom-class="shipping-dialog" :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" :fullscreen="dialogConfig.fullscreen" :width="dialogConfig.width" :modal-append-to-body=false append-to-body destroy-on-close>
<!-- 已装未装订单 -->
<template v-if="dialogConfig.type === 'orderTable'">
<el-table :data="[]">
<el-table-column label="已装" align="center" prop="selfNo" />
<el-table-column label="未装" align="center" prop="cubNo" />
</el-table>
</template>
<!-- 补单 -->
<template v-if="dialogConfig.type === 'supplementOrder'">
<supplementOrder />
</template>
<!-- 修改柜信息 -->
<template v-if="dialogConfig.type === 'modifyCabinet'">
<el-form ref="modifyForm" :rules="rules" :model="modifyCabinetObj" label-width="80px">
<el-form-item label="起运仓库" prop="warehouse">
<el-select v-model="modifyCabinetObj.warehouse" placeholder="请选择起运仓库">
</el-select>
</el-form-item>
<el-form-item label="预计时间" prop="estimatedTime">
<el-date-picker type="date" placeholder="请选择日期" v-model="modifyCabinetObj.estimatedTime"></el-date-picker>
</el-form-item>
<el-form-item label="选择柜型" prop="cabinetType">
<el-select v-model="modifyCabinetObj.cabinetType" placeholder="请选择柜型">
</el-select>
</el-form-item>
<el-form-item label="柜号">
<el-input v-model="modifyCabinetObj.cabinetNo" placeholder="请输入柜号" clearable />
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit('modifyForm')">下一步</el-button>
<el-button @click="closeDialog">取消</el-button>
</el-row>
</template>
<!-- 装柜纠错 -->
<template v-if=" dialogConfig.type === 'correction'">
<el-form ref="correctionForm" :rules="rules" :model="correctionObj" label-position="top">
<el-form-item label="装柜纠错(二维码/条形码编号)" prop="qrCode">
<el-input v-model="correctionObj.qrCode" placeholder="请输入二维码/条形码编号" clearable />
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit('correctionForm')">提交</el-button>
<el-button @click="closeDialog">取消</el-button>
</el-row>
</template>
<!-- 批量装柜纠错(订单号) -->
<template v-if=" dialogConfig.type === 'correctionOrder'">
<el-form ref="orderForm" :rules="rules" :model="orderObj" label-position="top">
<el-form-item label="装柜纠错(订单号)" prop="orderNo">
<el-input v-model="orderObj.orderNo" placeholder="请输入订单号" clearable />
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit('orderForm')">提交</el-button>
<el-button @click="closeDialog">取消</el-button>
</el-row>
</template>
<!-- 装柜批量输入 -->
<template v-if=" dialogConfig.type === 'batchInput'">
<el-form ref="batchForm" :rules="rules" :model="batchObj" label-position="top">
<el-form-item label="" prop="qrCode">
<el-input type="textarea" :rows="3" v-model="batchObj.qrCode" placeholder="请输入,多个以逗号分隔" clearable />
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit('batchForm')">提交</el-button>
<el-button @click="closeDialog">取消</el-button>
</el-row>
</template>
</el-dialog>
</div>
</template>
<script>
import supplementOrder from "./supplementOrder.vue";
/**
* 开始装柜
*/
export default {
name: "startPacking",
components: {
supplementOrder,
},
data() {
return {
// laoding
loading: false,
// 二维码/条码编号
qrCode: "",
// 表格数据
listData: [
{
selfNo: "111aaa",
cubNo: "11111111111111111111111111",
},
{
selfNo: "111aaa",
cubNo: "11111111111111111111111111",
},
],
// 左侧数据
testData: [
{
key: 1,
title: "第一部分",
},
{
key: 2,
title: "第二部分",
},
],
// 弹窗配置
dialogConfig: {
title: "",
dialogVisible: false,
width: "30%",
type: "",
fullscreen: false,
},
// 批量输入
batchObj: {},
// 批量纠错(订单号)
orderObj: {},
// 纠错
correctionObj: {},
// 修改柜信息
modifyCabinetObj: {},
// 修改柜信息校验
rules: {
warehouse: [{ required: true, message: "必填", trigger: "change" }],
estimatedTime: [{ required: true, message: "必填", trigger: "change" }],
cabinetType: [{ required: true, message: "必填", trigger: "change" }],
qrCode: [{ required: true, message: "必填", trigger: "change" }],
orderNo: [{ required: true, message: "必填", trigger: "change" }],
},
};
},
methods: {
/** 点击事件统一入口 */
handlerClick(type, title) {
this.shwoDialog({ type, title });
},
/** 表格订单号点击 */
orderClick(row) {
this.shwoDialog({
type: "orderTable",
title: row.selfNo,
});
},
/** 弹窗事件 */
shwoDialog(config) {
this.$set(this.dialogConfig, "title", config.title);
this.$set(this.dialogConfig, "type", config.type);
switch (config.type) {
case "orderTable":
case "modifyCabinet":
this.$set(this.dialogConfig, "fullscreen", false);
break;
case "supplementOrder":
this.$set(this.dialogConfig, "fullscreen", true);
break;
}
this.$set(this.dialogConfig, "dialogVisible", true);
},
/** 关闭弹窗 */
closeDialog() {
this.$set(this.dialogConfig, "dialogVisible", false);
},
/** 修改提交 */
onSubmit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
},
};
</script>
<style lang="scss" scoped>
.startPacking {
p {
margin: 0;
}
.content-area {
display: flex;
.left-area {
border-right: 3px solid #e6ebf5;
padding-right: 10px;
.title-info {
height: 100px;
> div:first-child {
font-size: 16px;
background-color: #f2f2f2;
line-height: 30px;
text-align: center;
}
> :last-child {
display: flex;
> p {
margin-right: 10px;
color: #4f9cdd;
}
}
}
}
.right-area {
padding-left: 10px;
.table-title {
display: flex;
align-items: center;
margin-bottom: 10px;
> div:first-child {
flex: 1;
font-size: 16px;
}
> div:last-child {
display: flex;
> .el-input {
margin-right: 10px;
}
}
}
.order-href {
color: #4f9cdd;
}
}
}
.totle-info {
font-size: 20px;
margin-top: 15px;
> div {
display: flex;
margin-bottom: 5px;
}
}
.button-area {
text-align: center;
}
}
</style>
<template>
<div class="supplementOrder">
<el-card>
<!-- 内容区 -->
<el-row class="content-area">
<!-- 左侧 -->
<el-col :span="6" class="left-area">
<el-row>
<el-button type="primary">新增</el-button>
<el-button type="primary">删除</el-button>
</el-row>
<el-row v-for="item in testData" :key="item.key" class="title-info">
<div>
<p>{{item.title}}</p>
</div>
<div>
<p>111</p>
<p>111</p>
<p>111</p>
<div>
<i class="el-icon-delete"></i>
</div>
</div>
</el-row>
</el-col>
<!-- 右侧 -->
<el-col :span="18" class="right-area">
<el-row class="right-title">
<div>货物筛选</div>
<div>当前装柜:第一部分</div>
<div>可预装方数:111m³,重量:22KG</div>
</el-row>
<!-- 搜索工作栏 -->
<el-row>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="始发地">111</el-form-item>
<el-form-item label="目的地" prop="destination">
<el-select v-model="queryParams.destination" placeholder="请选择目的地">
</el-select>
</el-form-item>
<el-form-item label="订单号" prop="orderNo">
<el-input v-model="queryParams.orderNo" placeholder="请输入订单号" clearable />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search">搜索</el-button>
</el-form-item>
</el-form>
</el-row>
<!-- 表格 -->
<el-row>
<el-row class="table-title">
<div>EC1111111</div>
<div>发往:xxxxxxxxxx</div>
<div>我司全代</div>
<div>入仓时间:1111111</div>
<div>
<div>[全部预装]</div>
<div>[收起]</div>
</div>
</el-row>
<el-table v-loading="loading" :data="listData">
<el-table-column label="序号" type="index" width="50" />
<el-table-column label="订单号" align="center" prop="selfNo" />
<el-table-column label="货物信息" align="center" prop="cubNo" />
<el-table-column label="计划箱数" align="center" prop="cabinetId" />
<el-table-column label="实装箱数" align="center" prop="transportType" />
<el-table-column label="体积" align="center" prop="squareNumber" />
<el-table-column label="重量" align="center" prop="weight" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="primary" size="small">预装</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<!-- 分页 -->
<el-pagination background layout="prev, pager, next" :total="1000"></el-pagination>
</el-col>
</el-row>
</el-card>
<el-row>
<el-col :span="6" class="totle-info">
<div>
<p>总计:</p>
<p>111</p>
</div>
<div>
<p>容量:</p>
<p>111</p>
</div>
</el-col>
</el-row>
<el-row class="button-area">
<el-button type="primary">完成</el-button>
</el-row>
</div>
</template>
<script>
/**
* 补单
*/
export default {
name: "supplementOrder",
data() {
return {
// loading
loading: false,
// 二维码/条码编号
cabinetNo: "",
// 表格数据
listData: [
{
selfNo: "111aaa",
cubNo: "11111111111111111111111111",
},
{
selfNo: "111aaa",
cubNo: "11111111111111111111111111",
},
],
// 左侧数据
testData: [
{
key: 1,
title: "第一部分",
},
{
key: 2,
title: "第二部分",
},
],
// 查询参数
queryParams: {},
};
},
methods: {},
};
</script>
<style lang="scss" scoped>
.supplementOrder {
p {
margin: 0;
}
.content-area {
display: flex;
.left-area {
border-right: 3px solid #e6ebf5;
padding-right: 10px;
.title-info {
margin-top: 10px;
height: auto;
> div:first-child {
font-size: 16px;
background-color: #f2f2f2;
line-height: 30px;
text-align: center;
}
> :last-child {
display: flex;
align-items: center;
> p {
margin-right: 10px;
color: #4f9cdd;
}
> div {
flex: 1;
text-align: right;
> i {
cursor: pointer;
color: red;
}
}
}
}
}
.right-area {
padding-left: 10px;
.right-title {
display: flex;
align-items: center;
margin-bottom: 10px;
font-size: 16px;
> div:first-child {
font-size: 18px;
}
> div:first-child + div {
margin-left: 20px;
}
> div:last-child {
flex: 1;
text-align: right;
font-size: 18px;
color: red;
}
}
.table-title {
display: flex;
line-height: 30px;
background-color: #4f9cdd;
color: #fff;
> div {
margin-left: 10px;
}
> div:last-child {
flex: 1;
display: flex;
justify-content: flex-end;
> div {
margin-right: 10px;
}
}
}
.el-pagination {
margin-top: 10px;
padding: 0;
text-align: right;
}
}
}
.totle-info {
font-size: 20px;
margin-top: 15px;
> div {
display: flex;
margin-bottom: 5px;
}
}
.button-area {
text-align: center;
}
}
</style>
<template>
<div>
<el-form ref="cDocForm" :model="cDocObj" label-width="100px">
<el-row>
<el-col :span="12">
<el-form-item label="出单方式">
<el-select v-model="cDocObj.method" placeholder="请选择出单方式">
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电放时间">
<el-date-picker type="date" placeholder="请选择日期" v-model="cDocObj.dischargeTime"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="寄送时间">
<el-date-picker type="date" placeholder="请选择日期" v-model="cDocObj.deliveryTime"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="快递单号">
<el-input v-model="cDocObj.courierNumber" placeholder="请输入快递单号"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="电放凭证附件">
<el-upload action="" :file-list="cDocObj.fileList">
<el-button size="small" type="primary">选择文件</el-button>
</el-upload>
</el-form-item>
<el-form-item label="agent list">
<el-radio-group v-model="cDocObj.agent">
<el-radio v-for="item in status" :key="item.value" :label="item.value">{{item.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-date-picker type="date" placeholder="请选择日期" v-model="cDocObj.agenTime"></el-date-picker>
</el-form-item>
<el-form-item>
<el-upload action="" :file-list="cDocObj.agentFileList">
<el-button size="small" type="primary">选择文件</el-button>
</el-upload>
</el-form-item>
<el-form-item label="soncap">
<el-radio-group v-model="cDocObj.soncap">
<el-radio v-for="item in status" :key="item.value" :label="item.value">{{item.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-date-picker type="date" placeholder="请选择日期" v-model="cDocObj.soncapTime"></el-date-picker>
</el-form-item>
<el-form-item>
<el-upload action="" :file-list="cDocObj.soncapFileList">
<el-button size="small" type="primary">选择文件</el-button>
</el-upload>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
</el-row>
</div>
</template>
<script>
/**
* 清关文件
*/
export default {
name: "clrDocument",
data() {
return {
// 清关文件对象
cDocObj: {
fileList: [],
},
// 出单方式
method: [
{
value: "1",
label: "正本",
},
{
value: "2",
label: "电放",
},
],
// 选项
status: [
{
value: "1",
label: "无需",
},
{
value: "2",
label: "已做",
},
],
};
},
methods: {
/** 提交 */
onSubmit() {
this.$refs["cDocForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
},
};
</script>
<style lang="scss" scoped>
</style>
<template>
<div>
<el-form ref="cusClearanceForm" :rules="rules" :model="cusClearanceObj" label-width="120px">
<el-form-item label="清关代理">{{cusClearanceObj.agent}}</el-form-item>
<el-form-item label="预计清关时间" prop="expectedTime">
<el-date-picker type="date" placeholder="请选择日期" v-model="cusClearanceObj.expectedTime"></el-date-picker>
</el-form-item>
<el-form-item label="清关时间" prop="confirmTime">
<el-date-picker type="datetime" placeholder="请选择日期" v-model="cusClearanceObj.confirmTime"></el-date-picker>
<p class="message-area" v-show="showMsg">清关时间与预计时间不符,如有异常请登记</p>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
<el-button type="primary" @click="exceptionReg" :disabled="!showMsg">异常登记</el-button>
</el-row>
<!-- 对话框 -->
<el-dialog custom-class="shipping-dialog" title="票异常" :visible.sync="dialogVisible" width="700px" :modal-append-to-body=false append-to-body destroy-on-close>
<regError @closeDialog="dialogVisible = false" />
</el-dialog>
</div>
</template>
<script>
import regError from "./regError";
import dayjs from "dayjs";
/**
* 清关
*/
export default {
name: "cusClearance",
components: {
regError,
},
data() {
return {
// 清关对象
cusClearanceObj: {
agent: "test111",
},
// 校验
rules: {
expectedTime: [{ required: true, message: "必填", trigger: "change" }],
confirmTime: [{ required: true, message: "必填", trigger: "change" }],
},
// 弹窗配置
dialogVisible: false,
// 提示消息
showMsg: false,
};
},
watch: {
// 预计清关时间
"cusClearanceObj.expectedTime"(val) {
this.compareDate(val, this.cusClearanceObj.confirmTime);
},
// 清关时间
"cusClearanceObj.confirmTime"(val) {
this.compareDate(this.cusClearanceObj.expectedTime, val);
},
},
methods: {
// 时间比较
compareDate(expectedTime, confirmTime) {
this.showMsg = false;
let date1 = null,
date2 = null;
if (expectedTime) date1 = dayjs(expectedTime);
if (confirmTime) date2 = dayjs(confirmTime);
if (date1 && date2 && date2 !== date1) {
this.showMsg = true;
}
},
// 异常登记
exceptionReg() {
this.dialogVisible = true;
},
/** 提交 */
onSubmit() {
this.$refs["cusClearanceForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
},
};
</script>
<style lang="scss" scoped>
.message-area {
margin: 0;
color: red;
}
</style>
<template>
<div>
<el-form ref="cusDeclarationForm" :rules="rules" :model="cusDeclaration" label-width="120px">
<el-form-item label="单证要求">我司全代 <el-button type="primary" style="margin-left:10px;" @click="downloadVGM">VGM声明</el-button>
</el-form-item>
<el-form-item label="柜重" prop="cabinetWeight">
<el-input v-model="cusDeclaration.cabinetWeight" placeholder="请输入柜重" clearable />
</el-form-item>
<el-form-item label="货重" prop="cargoWeight">
<el-input v-model="cusDeclaration.cargoWeight" placeholder="请输入货重" clearable />
</el-form-item>
<el-form-item label="VGM重量(柜重+货重)">
<el-input v-model="cusDeclaration.vgmWeight" placeholder="请输入VGM重量" clearable />
</el-form-item>
<el-form-item label="报关方式" prop="method">
<el-select v-model="cusDeclaration.method" placeholder="请选择报关方式">
<el-option v-for="item in methods" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="正常报关订单">
</el-form-item>
<el-form-item label="报关公司名称">
<el-select v-model="cusDeclaration.companyName" placeholder="请选择报关公司名称">
</el-select>
</el-form-item>
<el-form-item label="截关时间">
<el-date-picker type="date" placeholder="请选择日期" v-model="cusDeclaration.cutTime"></el-date-picker>
</el-form-item>
<el-form-item label="状态">
<el-radio-group v-model="cusDeclaration.status">
<el-radio v-for="item in status" :key="item.value" :label="item.value">{{item.label}}</el-radio>
</el-radio-group>
</el-form-item>
<!-- 查验 -->
<div v-show="cusDeclaration.status === '3'">
<el-form-item label="查验">
<el-radio-group v-model="cusDeclaration.check">
<el-radio v-for="item in checkItems" :key="item.value" :label="item.value">{{item.label}}</el-radio>
</el-radio-group>
</el-form-item>
</div>
<!-- 退场 -->
<div v-show="cusDeclaration.check === '1' || cusDeclaration.check === '2'">
<el-form-item label="查验时间">
<el-date-picker type="date" placeholder="请选择日期" v-model="cusDeclaration.checkTime"></el-date-picker>
</el-form-item>
<el-form-item label="查验前图片">
<el-upload action="" :limit="1" :file-list="cusDeclaration.checkFile">
<el-button size="small" type="primary">选择文件</el-button>
</el-upload>
</el-form-item>
<el-form-item label="新封条">
<el-input v-model="cusDeclaration.newSeal" placeholder="请输入新封条" clearable />
</el-form-item>
</div>
<!-- 放行 -->
<el-form-item label="放行时间" v-show="cusDeclaration.status === '2' || cusDeclaration.check === '2'">
<el-date-picker type="date" placeholder="请选择日期" v-model="cusDeclaration.releaseTime"></el-date-picker>
</el-form-item>
<el-form-item label="装箱单">
<el-button type="primary">下载装箱单</el-button>
</el-form-item>
<el-form-item label="报关单">
<el-button type="primary">下载所有报关单</el-button>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
<el-button type="primary" @click="extraCost">额外费用</el-button>
</el-row>
<!-- 对话框 -->
<el-dialog custom-class="shipping-dialog customsClearance" :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" width="700px" :modal-append-to-body=false append-to-body destroy-on-close>
<el-row>
<el-row>
<el-form label-width="100px">
<el-form-item label="订单号" class="two-element">
<el-input v-model="orderNo" placeholder="请输入订单号" clearable />
<el-button type="primary" icon="el-icon-search"></el-button>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-table :data="[{}]">
<el-table-column label="订单号" align="center" prop="selfNo" />
<el-table-column label="报关费用" align="center" prop="orderFees">
<template slot-scope="scope">
<el-input v-model="scope.row.orderFees" placeholder="请输入内容" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="primary" size="small">确定</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row class="cost-title">
<div>额外费用订单</div>
<div>
<el-button size="small">重置</el-button>
</div>
</el-row>
<el-row>
<el-table :data="[{}]">
<el-table-column type="selection" width="55" />
<el-table-column label="订单号" align="center" prop="selfNo" />
<el-table-column label="报关费用" align="center" prop="customsFees">
<template slot-scope="scope">
<el-input v-model="scope.row.customsFees" placeholder="请输入内容" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="primary" size="small">修改</el-button>
<el-button size="small">重置</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
</el-row>
</el-dialog>
</div>
</template>
<script>
/**
* 报关
*/
export default {
name: "cusDeclaration",
data() {
return {
// 报关方式
methods: [
{
value: "1",
label: "整柜买单报关",
},
{
value: "2",
label: "整柜正常报关",
},
{
value: "3",
label: "买单报关+正常报关",
},
],
// 状态
status: [
{
value: "1",
label: "报关中",
},
{
value: "2",
label: "放行",
},
{
value: "3",
label: "查验",
},
],
// check
checkItems: [
{
value: "1",
label: "退场",
},
{
value: "2",
label: "部分退场",
},
{
value: "3",
label: "查验后放行",
},
],
// 报关对象
cusDeclaration: {},
// 校验
rules: {
cabinetWeight: [{ required: true, message: "必填", trigger: "change" }],
cargoWeight: [{ required: true, message: "必填", trigger: "change" }],
method: [{ required: true, message: "必填", trigger: "change" }],
},
// 弹窗配置
dialogConfig: {
title: "",
dialogVisible: false,
},
// 订单号
orderNo: "",
};
},
watch: {
"cusDeclaration.status"(val) {
if (val !== "3") {
this.$set(this.cusDeclaration, "check", "");
}
},
},
methods: {
/** 提交 */
onSubmit() {
this.$refs["cusDeclarationForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
// 下载VGM
downloadVGM() {
window.open(
"http://pdatest.groupage.cn//apivue/boxTrack/vgmExport?token=930b11a41d9ca06f306d157f336a5dcb&id=1752"
);
},
// 额外费用
extraCost() {
this.$set(this.dialogConfig, "title", "自编号");
this.$set(this.dialogConfig, "dialogVisible", true);
},
},
};
</script>
<style lang="scss">
.customsClearance {
.cost-title {
display: flex;
align-items: center;
margin: 20px 0;
border-left: 5px solid gray;
> div:first-child {
margin-left: 10px;
}
> div:last-child {
flex: 1;
text-align: right;
}
}
}
</style>
<template>
<div class="app-departure">
<el-form ref="departureForm" :rules="rules" :model="departureObj" label-width="120px">
<el-form-item label="预计开船时间">
</el-form-item>
<el-form-item label="实际开船时间">
<el-date-picker type="datetime" placeholder="请选择日期" v-model="departureObj.actualTime"></el-date-picker>
<p class="message-area">订单状态与短信通知,将到指定时间更新与发送</p>
<p class="message-area" v-show="showMsg">实际开船实际与预计时间不符</p>
</el-form-item>
<el-form-item label="预期到港时间" prop="arrivalTime">
<el-date-picker type="date" placeholder="请选择日期" v-model="departureObj.arrivalTime">
</el-date-picker>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
<el-button type="primary" @click="exceptionReg" :disabled="!showMsg">异常登记</el-button>
</el-row>
<!-- 对话框 -->
<el-dialog custom-class="shipping-dialog" title="票异常" :visible.sync="dialogVisible" width="700px" :modal-append-to-body=false append-to-body destroy-on-close>
<regError @closeDialog="dialogVisible = false" />
</el-dialog>
</div>
</template>
<script>
import regError from "./regError";
/**
* 起运
*/
export default {
name: "departure",
components: { regError },
data() {
return {
// 起运对象
departureObj: {},
// 校验
rules: {
arrivalTime: [{ required: true, message: "必填", trigger: "change" }],
},
// 弹窗配置
dialogVisible: false,
// 提示消息
showMsg: false,
};
},
watch: {
// 实际开船时间
"departureObj.actualTime"(val) {
this.compareDate(val, this.departureObj.arrivalTime);
},
// 预计到港时间
"departureObj.arrivalTime"(val) {
this.compareDate(this.departureObj.actualTime, val);
},
},
methods: {
// 时间比较
compareDate(actualTime, arrivalTime) {
this.showMsg = false;
let date1 = null,
date2 = null;
if (actualTime) date1 = new Date(actualTime);
if (arrivalTime) date2 = new Date(arrivalTime);
if (date1 && date2 && date1 > date2) {
this.showMsg = true;
}
},
// 异常登记
exceptionReg() {
this.dialogVisible = true;
},
/** 提交 */
onSubmit() {
this.$refs["departureForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
},
};
</script>
<style lang="scss" scoped>
.app-departure {
.message-area {
margin: 0;
color: red;
}
}
</style>
<template>
<div class="app-container preinstall">
<div class="preinstall">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
......@@ -215,6 +215,9 @@
import { DICT_TYPE } from "@/utils/dict";
import { getWarehouseList } from "@/api/ecw/warehouse";
/**
* 预装
*/
export default {
name: "preinstall",
components: {},
......@@ -248,21 +251,22 @@ export default {
operatorData: {
operator: null,
},
// 校验
rules: {
operator: [
{ required: true, message: "请选择目的地操作员", trigger: "change" },
{ required: true, message: "必填", trigger: "change" },
],
},
};
},
computed: {
// 始发地
/** 始发地 */
exportWarehouseList() {
return this.warehouseList.filter(
(item) => item.tradeType == "2" || item.type == "3"
);
},
// 目的地
/** 目的地 */
importWarehouseList() {
return this.warehouseList.filter(
(item) => item.tradeType == "1" || item.type == "3"
......@@ -270,6 +274,7 @@ export default {
},
},
created() {
// 查询仓库数据
getWarehouseList().then((res) => (this.warehouseList = res.data));
// this.getList();
},
......
<template>
<div>
<el-form ref="errorForm" :model="errorObj" label-width="140px">
<el-form-item label="操作步骤">
<el-select v-model="errorObj.step" placeholder="请选择操作步骤">
</el-select>
</el-form-item>
<el-form-item label="票异常">
<el-select v-model="errorObj.ticketError" placeholder="请选择票异常">
</el-select>
</el-form-item>
<el-form-item label="异常情况">
<el-input v-model="errorObj.description" type="textarea" rows="2" placeholder="请输入异常情况"></el-input>
</el-form-item>
<el-form-item label="异常时间" prop="arrivalTime" class="two-element">
<el-date-picker type="date" placeholder="请选择日期" v-model="errorObj.errorStart"></el-date-picker>
<el-date-picker type="date" placeholder="请选择日期" v-model="errorObj.errorend"></el-date-picker>
</el-form-item>
<el-form-item label="是否更新订单状态">
<el-radio-group v-model="errorObj.updateOrder">
<el-radio v-for="item in status" :key="item.value" :label="item.value">{{item.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="中文内容">
<el-input v-model="errorObj.chContent" type="textarea" rows="2" placeholder="请输入中文内容"></el-input>
</el-form-item>
<el-form-item label="英文内容">
<el-input v-model="errorObj.enContent" type="textarea" rows="2" placeholder="请输入英文内容"></el-input>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="$emit('closeDialog')">关闭</el-button>
</el-row>
</div>
</template>
<script>
/**
* 异常登记
*/
export default {
name: "regError",
data() {
return {
// 异常对象
errorObj: {},
// 是否更新订单动态
status: [
{
value: "1",
label: "",
},
{
value: "2",
label: "",
},
],
};
},
watch: {},
methods: {
/** 提交 */
onSubmit() {
this.$refs["errorForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
},
};
</script>
<style lang="scss" scoped>
</style>
<template>
<div>
<el-form ref="shipForm" :model="shipObj" label-width="80px">
<el-form-item label="状态">
<el-radio-group v-model="shipObj.status">
<el-radio v-for="item in status" :key="item.value" :label="item.value">{{item.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="配船时间" v-show="shipObj.status === '2'">
<el-date-picker type="date" placeholder="请选择日期" v-model="shipObj.shipTime"></el-date-picker>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
</el-row>
</div>
</template>
<script>
/**
* 配船
*/
export default {
name: "ship",
data() {
return {
// 配船对象
shipObj: {},
// 状态
status: [
{
value: "1",
label: "免配",
},
{
value: "2",
label: "已配",
},
],
};
},
methods: {
/** 提交 */
onSubmit() {
this.$refs["shipForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
},
};
</script>
<style lang="scss" scoped>
</style>
<template>
<div>
<el-form ref="subMaterialForm" :model="subMaterialObj" label-width="140px">
<el-form-item label="代理商AGENT">
<el-select v-model="subMaterialObj.agent" placeholder="请选择供应商">
</el-select>
</el-form-item>
<el-form-item label="提单号M/BL NO." class="two-element">
<el-input v-model="subMaterialObj.billNo" placeholder="请输入提单号"></el-input>
<el-button type="primary">提单确认邮件</el-button>
</el-form-item>
<el-form-item label="SO NO.">
<el-input v-model="subMaterialObj.soNo" placeholder="请输入SO NO"></el-input>
</el-form-item>
<el-form-item label="装货港">
<el-select v-model="subMaterialObj.loadingPort" placeholder="请选择装货港">
</el-select>
</el-form-item>
<el-form-item label="目的港">
<el-select v-model="subMaterialObj.destination" placeholder="请选择目的港">
</el-select>
</el-form-item>
<el-form-item label="船公司">
<el-select v-model="subMaterialObj.shippingCompany" placeholder="请选择船公司">
</el-select>
</el-form-item>
<el-form-item label="托运人">
<el-select v-model="subMaterialObj.shipper" placeholder="请选择托运人">
</el-select>
</el-form-item>
<el-form-item label="收货人">
<el-select v-model="subMaterialObj.consignee" placeholder="请选择收货人">
</el-select>
</el-form-item>
<el-form-item label="通知方">
<el-select v-model="subMaterialObj.notifyParty" placeholder="请选择通知方">
</el-select>
</el-form-item>
<el-form-item label="Mark & No.">
<el-input v-model="subMaterialObj.markNo"></el-input>
</el-form-item>
<el-form-item label="包装数量与单位" class="two-element">
<el-input v-model="subMaterialObj.quantity" placeholder="请输入包装数量"></el-input>
<el-select v-model="subMaterialObj.unit" placeholder="请选择单位">
</el-select>
</el-form-item>
<el-form-item label="毛重(KGS)">
<el-input v-model="subMaterialObj.grossWeight" placeholder="请输入毛重(KGS)"></el-input>
</el-form-item>
<el-form-item label="立方数(CBM)">
<el-input v-model="subMaterialObj.mesaurement" placeholder="请输入立方数(CBM)"></el-input>
</el-form-item>
<el-form-item label="货物描述">
<el-input v-model="subMaterialObj.description" placeholder="请输入货物描述"></el-input>
</el-form-item>
<el-form-item label="柜号/封条">
<el-input v-model="subMaterialObj.container" placeholder="请输入柜号/封条"></el-input>
</el-form-item>
<el-form-item label="柜型">
111
</el-form-item>
<el-form-item label="出单方式">
<el-radio-group v-model="subMaterialObj.billingMethod">
<el-radio v-for="item in method" :key="item.value" :label="item.value">{{item.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="subMaterialObj.remark" type="textarea" rows="2" placeholder="请输入备注"></el-input>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
</el-row>
</div>
</template>
<script>
/**
* 提单补料
*/
export default {
name: "subMaterial",
data() {
return {
// 提单补料对象
subMaterialObj: {
markNo: "N/M",
},
// 出单方式
method: [
{
value: "1",
label: "正本",
},
{
value: "2",
label: "电放",
},
],
};
},
methods: {
/** 提交 */
onSubmit() {
this.$refs["subMaterialForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
},
};
</script>
<style lang="scss">
</style>
......@@ -15,33 +15,38 @@
<el-date-picker type="date" placeholder="请选择日期" v-model="trailer.trailerTime"></el-date-picker>
</el-form-item>
<el-form-item label="车牌">
<el-input v-model="trailer.licensePlate"></el-input>
<el-input v-model="trailer.licensePlate" placeholder="请输入车牌"></el-input>
</el-form-item>
<el-form-item label="司机">
<el-input v-model="trailer.driver"></el-input>
<el-input v-model="trailer.driver" placeholder="请输入司机"></el-input>
</el-form-item>
<el-form-item label="司机联系方式">
<el-input v-model="trailer.telephone"></el-input>
<el-input v-model="trailer.telephone" placeholder="请输入司机联系方式"></el-input>
</el-form-item>
<el-form-item label="货柜号">
<el-input v-model="trailer.containerNumber"></el-input>
<el-input v-model="trailer.containerNumber" placeholder="请输入货柜号"></el-input>
</el-form-item>
<el-form-item label="封条">
<el-input v-model="trailer.seal"></el-input>
<el-input v-model="trailer.seal" placeholder="请输入封条"></el-input>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary" @click="onSubmit">提交</el-button>
<el-button @click="cancel">取消</el-button>
<el-button type="primary" @click="onSubmit">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
</el-row>
</div>
</template>
<script>
/**
* 拖车
*/
export default {
name: "trailer",
data() {
return {
// 状态
status: [
{
value: "1",
......@@ -56,13 +61,16 @@ export default {
label: "已还柜",
},
],
// 拖车对象
trailer: {},
// 校验
rules: {
time: [{ required: true, message: "请选择时间", trigger: "change" }],
time: [{ required: true, message: "必填", trigger: "change" }],
},
};
},
methods: {
/** 提交 */
onSubmit() {
this.$refs["trailerForm"].validate((valid) => {
if (valid) {
......@@ -70,6 +78,7 @@ export default {
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
......
<template>
<div>
<el-form ref="unloadingForm" :model="unloadingObj" label-width="100px">
<el-form-item label="网点">
<el-select v-model="unloadingObj.outlets" placeholder="请选择网点">
</el-select>
</el-form-item>
<el-form-item label="到仓时间">
<el-date-picker type="date" placeholder="请选择日期" v-model="unloadingObj.warehouseTime"></el-date-picker>
</el-form-item>
<el-form-item label="卸柜时间">
<el-date-picker type="datetime" placeholder="请选择日期" v-model="unloadingObj.unloadingTime"></el-date-picker>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="primary">保存</el-button>
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="cancel">关闭</el-button>
<el-button type="danger" @click="startUnloading">开始卸柜</el-button>
</el-row>
<!-- 开始卸柜 -->
<el-dialog title="开始卸柜" :visible.sync="dialogVisible" fullscreen :modal-append-to-body=false append-to-body destroy-on-close>
<startUnloading />
</el-dialog>
</div>
</template>
<script>
import startUnloading from "./startUnloading.vue";
/**
* 卸柜
*/
export default {
name: "unloading",
components: { startUnloading },
data() {
return {
// 清关对象
unloadingObj: {
agent: "test111",
},
// 弹窗状态
dialogVisible: false,
};
},
watch: {},
methods: {
/** 提交 */
onSubmit() {
this.$refs["unloadingForm"].validate((valid) => {
if (valid) {
// TODO 判断是否已经卸柜
this.$message.warning("请先通过卸柜审批");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
// 开始卸柜
startUnloading() {
this.dialogVisible = true;
},
},
};
</script>
<style lang="scss" scoped>
</style>
<template>
<div class="app-startUnloading">
<!-- 自编号 -->
<el-row class="number-area">
<p class="label-font">自编号:</p>
<p class="label-font">CNG2510</p>
<el-input v-model="labelNo" placeholder="请输入标签号"></el-input>
<div>
<el-button>批量输入</el-button>
<el-button>一键卸柜</el-button>
</div>
</el-row>
<!-- 当前部分 -->
<el-row class="number-area">
<p class="label-font">当前部分:</p>
<el-select v-model="currPart" placeholder="请选择当前部分">
</el-select>
<p>
<span>13箱</span>
<span>10.83m3</span>
<span>210kg</span>
</p>
</el-row>
<!-- 表格 -->
<el-row>
<el-table v-loading="loading" :data="list">
<el-table-column label="序号" type="index" width="50" />
<!-- <el-table-column label="订单号" align="center" prop="selfNo">
<template slot-scope="scope">
<a href="javascript:void(0);" class="order-href" @click="orderClick(scope.row)">{{ scope.row.selfNo }}</a>
</template>
</el-table-column> -->
<el-table-column label="订单号" align="center" prop="cubNo" />
<el-table-column label="商品信息" align="center" prop="cubNo" />
<el-table-column label="实装箱数" align="center" prop="cabinetId" />
<el-table-column label="卸柜箱数" align="center" prop="transportType" />
<el-table-column label="清关状态" align="center" prop="squareNumber" />
<el-table-column label="体积" align="center" prop="weight" />
<el-table-column label="重量" align="center" prop="weight" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="danger" size="small" @click="openError">异常</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<!-- 总计 -->
<el-row>
<div>
<p>
<span>总计:</span>
<span>33箱子</span>
<span>10.83m3</span>
<span>210kg</span>
</p>
</div>
<div>
<p>
<span>已卸:</span>
<span>16</span>
</p>
</div>
</el-row>
<el-row>
<el-button type="success">卸柜完成</el-button>
</el-row>
<!-- 对话框 -->
<el-dialog custom-class="shipping-dialog" title="异常" :visible.sync="dialogVisible" width="500px" :modal-append-to-body=false append-to-body destroy-on-close>
<unloadingError @closeDialog="dialogVisible = false" />
</el-dialog>
</div>
</template>
<script>
import unloadingError from "./unloadingError.vue";
/**
* 开始卸柜
*/
export default {
name: "startUnloading",
components: { unloadingError },
data() {
return {
// 标签号
labelNo: "",
// 当前部分
currPart: "",
// loading
loading: false,
// 表格数据
list: [{}],
// 弹窗配置
dialogVisible: false,
};
},
watch: {},
methods: {
/** 提交 */
onSubmit() {
this.$refs["unloadingForm"].validate((valid) => {
if (valid) {
// TODO 判断是否已经卸柜
this.$message.warning("请先通过卸柜审批");
}
});
},
/** 取消 */
cancel() {
this.$emit("closeDialog");
},
// 打开异常
openError() {
this.dialogVisible = true;
},
},
};
</script>
<style lang="scss" scoped>
.app-startUnloading {
p {
margin: 0;
> span {
margin-right: 5px;
}
}
.el-row {
margin-bottom: 15px;
}
.label-font {
font-size: 16px;
font-weight: bolder;
}
.number-area {
display: flex;
align-items: center;
> * {
margin-right: 10px;
}
> .el-input {
width: 200px;
}
}
}
</style>
<template>
<div>
<el-form ref="errorForm" :model="errorObj" label-width="100px">
<el-form-item label="异常">
<el-radio-group v-model="errorObj.errorStatus">
</el-radio-group>
</el-form-item>
<el-form-item label="品名">
<el-select v-model="errorObj.goodName" placeholder="请选择品名">
</el-select>
</el-form-item>
<el-form-item label="件数">
<el-input-number v-model="errorObj.pieces" controls-position="right" :min="1"></el-input-number>
</el-form-item>
<el-form-item label="异常详情">
<el-input v-model="errorObj.details" type="textarea" rows="2" placeholder="请输入异常详情"></el-input>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button type="success" @click="onSubmit">提交</el-button>
<el-button @click="$emit('closeDialog')">关闭</el-button>
</el-row>
</div>
</template>
<script>
/**
* 卸柜异常
*/
export default {
name: "unloadingError",
data() {
return {
// 异常对象
errorObj: {},
};
},
methods: {
/** 提交 */
onSubmit() {
this.$refs["errorForm"].validate((valid) => {
if (valid) {
alert("submit!");
}
});
},
},
};
</script>
<style lang="scss" scoped>
</style>
<template>
<div>
<!-- 海运流程图 -->
<el-scrollbar :vertical="true" style="width: 100%;" viewClass="shipping-chart">
<div v-for="(nodes,index) in chartData['sea']" :key="index" class="chart-nodes">
<div>
<div class="node-area">
<div v-for="node in nodes" :key="node.title" @click="nodeClick(node)" class="node-div">
<template v-if="!node.unNode">
<img :src="node.imgSrc" alt="">
<p>{{node.title}}</p>
</template>
<template v-else-if="node.unNode">
<el-button type="primary" @click="nodeClick(node)">AGENT</el-button>
<el-button type="primary" @click="nodeClick(node)" style="width:100px;">{{node.title}}</el-button>
</template>
</div>
</div>
<div class="chart-arrow" v-if="index !== (chartData['sea'].length-1)">
<div class="arrow-area" v-if="index !== (chartData['sea'].length-1)">
<img src="@/assets/images/shipping/jt-start.png" alt="">
</div>
</div>
</el-scrollbar>
<el-dialog :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" :width="dialogConfig.width" destroy-on-close>
<booking @closeDialog="closeDialog" v-if="dialogConfig.type === 'booking'" />
<trailer @closeDialog="closeDialog" v-if="dialogConfig.type === 'trailer'" />
<preinstall v-if="dialogConfig.type === 'preinstall'" />
<agentWidget @closeDialog="closeDialog" v-if="dialogConfig.type === 'agent'" />
<!-- 弹窗 -->
<el-dialog custom-class="shipping-dialog" :title="dialogConfig.title" :visible.sync="dialogConfig.dialogVisible" :width="dialogConfig.width" :fullscreen="dialogConfig.fullscreen" :close-on-click-modal=false :modal-append-to-body=false append-to-body destroy-on-close>
<component v-bind:is="currentComponent" @closeDialog="closeDialog"></component>
</el-dialog>
</div>
</template>
<script>
import booking from "./booking";
import trailer from "./trailer";
import preinstall from "./preinstall";
import agentWidget from "./agent";
import bookingWidget from "./nodePage/booking.vue";
import trailerWidget from "./nodePage/trailer.vue";
import preinstallWidget from "./nodePage/preinstall.vue";
import agentWidget from "./nodePage/agent.vue";
import cabinetWidget from "./nodePage/cabinet/index.vue";
import cusDeclarationWidget from "./nodePage/cusDeclaration.vue";
import shipWidget from "./nodePage/ship.vue";
import subMaterialWidget from "./nodePage/subMaterial.vue";
import bargeWidget from "./nodePage/barge.vue";
import departureWidget from "./nodePage/departure.vue";
import blCopyWidget from "./nodePage/blCopy.vue";
import clrDocumentWidget from "./nodePage/clrDocument.vue";
import arrivalWidget from "./nodePage/arrival.vue";
import cusClearanceWidget from "./nodePage/cusClearance.vue";
import unloadingWidget from "./nodePage/unloading/index.vue";
/**
* 海运流程图
*/
export default {
name: "shippingChart",
components: { booking, trailer, preinstall, agentWidget },
components: {
bookingWidget,
trailerWidget,
preinstallWidget,
agentWidget,
cabinetWidget,
cusDeclarationWidget,
shipWidget,
subMaterialWidget,
bargeWidget,
departureWidget,
blCopyWidget,
clrDocumentWidget,
arrivalWidget,
cusClearanceWidget,
unloadingWidget,
},
props: {
shippingType: String,
boxId: String,
},
data() {
return {
// 弹窗配置
dialogConfig: {
dialogVisible: false,
title: "",
width: "30%",
type: "",
width: "",
fullscreen: false,
},
// 流程图节点
chartData: {
sea: [
[
......@@ -72,7 +103,7 @@ export default {
{
unNode: true,
type: "agent",
title: "代理商设置",
title: "AGENT",
},
],
[
......@@ -86,7 +117,7 @@ export default {
{
title: "报关",
imgSrc: require("@/assets/images/shipping/bg-start.png"),
type: "customsDeclaration",
type: "cusDeclaration",
},
{
title: "配船",
......@@ -114,10 +145,20 @@ export default {
},
],
[
{
/* {
title: "清关文件",
imgSrc: require("@/assets/images/shipping/qg-start.png"),
type: "clearanceDocument",
}, */
{
unNode: true,
type: "blCopy",
title: "提单Copy",
},
{
unNode: true,
type: "clrDocument",
title: "清关文件",
},
],
[
......@@ -131,7 +172,7 @@ export default {
{
title: "清关",
imgSrc: require("@/assets/images/shipping/qg-start.png"),
type: "customsClearance",
type: "cusClearance",
},
],
[
......@@ -150,33 +191,41 @@ export default {
],
],
},
// 当前组件
currentComponent: "",
};
},
methods: {
/** 关闭弹窗 */
closeDialog() {
this.$set(this.dialogConfig, "dialogVisible", false);
},
setCommonAttr(node) {
this.$set(this.dialogConfig, "dialogVisible", true);
this.$set(this.dialogConfig, "title", node.title);
this.$set(this.dialogConfig, "type", node.type);
},
/** 节点点击 */
nodeClick(node) {
console.log(node);
this.currentComponent = `${node.type}Widget`;
this.$set(this.dialogConfig, "width", "500px");
this.$set(this.dialogConfig, "title", node.title);
this.$set(this.dialogConfig, "fullscreen", false);
switch (node.type) {
// 订舱
case "booking":
this.$set(this.dialogConfig, "width", "40%");
this.setCommonAttr(node);
// 驳船
case "barge":
// 清关文件
case "clrDocument":
this.$set(this.dialogConfig, "width", "700px");
break;
case "trailer":
// AGENT
case "agent":
this.$set(this.dialogConfig, "width", "25%");
this.setCommonAttr(node);
this.$set(this.dialogConfig, "title", "代理商设置");
break;
// 预装
case "preinstall":
this.$router.push(`/boxSea/shippingSea/preinstall/${this.boxId}`);
this.$set(this.dialogConfig, "fullscreen", true);
this.$set(this.dialogConfig, "title", "出货安排(预装)");
break;
}
this.$set(this.dialogConfig, "dialogVisible", true);
},
},
};
......@@ -192,18 +241,24 @@ export default {
display: flex;
align-items: center;
justify-content: center;
.node-div {
margin-top: 10px;
cursor: pointer;
p {
margin-top: -10px;
margin-bottom: 0px;
text-align: center;
.node-area {
display: flex;
flex-direction: column;
align-items: center;
.node-div {
margin-top: 10px;
cursor: pointer;
p {
margin-top: -10px;
margin-bottom: 0px;
text-align: center;
}
}
}
}
.chart-arrow {
margin: 0 10px;
.arrow-area {
margin: 0 10px;
}
}
}
</style>
......@@ -5,6 +5,8 @@
<div style="display: flex; justify-content: space-between;align-items: flex-end;">
<h2>海运出货操作</h2>
</div>
<!-- 信息 -->
<el-card style="margin-top: 15px">
<el-descriptions :column="5" border>
<el-descriptions-item label="自编号"></el-descriptions-item>
......@@ -15,6 +17,7 @@
</el-descriptions>
</el-card>
<!-- 海运流程图 -->
<div class="shipping-flow">
<shippingChart :boxId="boxId" />
</div>
......@@ -24,8 +27,10 @@
</template>
<script>
import shippingChart from "./shippingChart";
import shippingChart from "../shippingSea/seaProcess";
/**
* 海运操作主页面
*/
export default {
name: "shippingSea",
components: {
......@@ -40,7 +45,10 @@ export default {
<style lang="scss">
.shipping-flow {
margin-top: 5px;
// 页面内元素弹框form控件宽度设置
}
// 海运操作统一弹窗样式
.shipping-dialog {
// 页面内元素弹窗form控件宽度设置
.el-form-item__content {
> div {
width: 100%;
......@@ -49,5 +57,13 @@ export default {
.operate-button {
text-align: center;
}
.two-element{
.el-form-item__content {
display: flex;
> :last-child {
margin-left: 10px;
}
}
}
}
</style>
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="中文名称" prop="titleZh">
<el-input v-model="queryParams.titleZh" placeholder="请输入中文名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="英文名称" prop="titleEn">
<el-input v-model="queryParams.titleEn" placeholder="请输入英文名称" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="货币符号" prop="fuhao">
<el-input v-model="queryParams.fuhao" placeholder="请输入货币符号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="用户状态" clearable style="width: 240px">
<el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<!-- <el-form-item label="汇率" prop="huilv">-->
<!-- <el-input v-model="queryParams.huilv" placeholder="请输入汇率" clearable @keyup.enter.native="handleQuery"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="排序" prop="aorder">-->
<!-- <el-input v-model="queryParams.aorder" placeholder="请输入排序" clearable @keyup.enter.native="handleQuery"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="" prop="createAt">-->
<!-- <el-input v-model="queryParams.createAt" placeholder="请输入" clearable @keyup.enter.native="handleQuery"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="" prop="updateAt">-->
<!-- <el-input v-model="queryParams.updateAt" placeholder="请输入" clearable @keyup.enter.native="handleQuery"/>-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['ecw:currency:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['ecw:currency:export']">导出</el-button>
<el-button type="warning" plain icon="el-icon-plus" size="mini" @click="handleUpdate"
v-hasPermi="['ecw:currency:update']">修改
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="" align="center" prop="id" />
<el-table-column label="中文名称" align="center" prop="titleZh" />
<el-table-column label="英文名称" align="center" prop="titleEn" />
<el-table-column label="货币符号" align="center" prop="fuhao" />
<el-table-column label="状态" align="center" prop="show" >
<template slot-scope="scope">
<el-switch v-model="scope.row.status" :active-value="0" :inactive-value="1" @change="handleStatusChange(scope.row)" />
</template>
</el-table-column>
<el-table-column label="汇率" align="center" prop="huilv" />
<el-table-column label="排序" align="center" prop="aorder" />
<el-table-column label="" align="center" prop="createAt" width="180">
<el-table-column label="金额" align="center" prop="fromFee">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createAt) }}</span>
<span>{{scope.row.fromFee}}{{ scope.row.fromCurrency | currencyDataFilter(currencyDictDatas) }}</span>
</template>
</el-table-column>
<el-table-column label="" align="center" prop="updateAt" width="180">
<el-table-column label="" align="center">=</el-table-column>
<el-table-column label="兑换金额" align="center">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateAt) }}</span>
<el-input v-show="showFlag" v-model="scope.row.toFee" type="text" @blur="updateEcash(scope.row)"></el-input>
<span v-show="!showFlag">{{ scope.row.toFee}}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column label="兑换货币类型" align="center" prop="toCurrency">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ecw:currency:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['ecw:currency:delete']">删除</el-button>
<span>{{ scope.row.toCurrency | currencyDataFilter(currencyDictDatas) }}</span>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<el-card>
<el-form ref="retForm" :model="retForm">
<el-form-item label="有效时间(尼日利亚)">
<el-col :span="3">
<el-date-picker type="datetime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
v-model="retForm.nrlyStartTime"
style="width: 100%;" @change="changeDictData1"></el-date-picker>
</el-col>
<el-col :span="1" align="center">-</el-col>
<el-col :span="3">
<el-date-picker type="datetime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
v-model="retForm.nrlyEndTime" @change="changeDictData2"
style="width: 100%;"></el-date-picker>
</el-col>
</el-form-item>
</el-form>
<el-form>
<el-form-item label="有效时间(北京)">
<el-col :span="3">
<el-date-picker type="datetime" :disable="showFlag" value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss" @change="changeDictData3"
v-model="retForm.bjStartTime"
style="width: 100%;"></el-date-picker>
</el-col>
<el-col align="center" :span="1">-</el-col>
<el-col :span="3">
<el-date-picker type="datetime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
v-model="retForm.bjEndTime" @change="changeDictData4"
style="width: 100%;"></el-date-picker>
</el-col>
</el-form-item>
</el-form>
<el-form :inline="true">
<el-form-item label="过期提示语:" prop="remark">
<el-input v-model="retForm.remark" type="textarea" @change="changeDictData5"></el-input>
</el-form-item>
</el-form>
</el-card>
<!-- &lt;!&ndash; 分页组件 &ndash;&gt;-->
<!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"-->
<!-- @pagination="getList"/>-->
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="中文名称" prop="titleZh">
<el-input v-model="form.titleZh" placeholder="请输入中文名称" />
<el-form-item label="金额" prop="fromFee">
<el-input v-model="form.fromFee" placeholder="请输入金额"/>
</el-form-item>
<el-form-item label="英文名称" prop="titleEn">
<el-input v-model="form.titleEn" placeholder="请输入英文名称" />
<el-form-item label="货币类型" prop="fromCurrency">
<el-select v-model="form.fromCurrency" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMISSION_CURRENCY_TYPE)" :key="parseInt(dict.value)"
:label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item label="货币符号" prop="fuhao">
<el-input v-model="form.fuhao" placeholder="请输入货币符号" />
<el-form-item label="兑换金额" prop="toFee">
<el-input v-model="form.toFee" placeholder="请输入兑换金额"/>
</el-form-item>
<!-- <el-form-item label="状态" prop="show">-->
<!-- <el-input v-model="form.show" placeholder="请输入状态" />-->
<!-- </el-form-item>-->
<el-form-item label="汇率" prop="huilv">
<el-input v-model="form.huilv" placeholder="请输入汇率" />
<el-form-item label="兑换货币类型" prop="toCurrency">
<el-select v-model="form.toCurrency" clearable>
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.COMMISSION_CURRENCY_TYPE)" :key="parseInt(dict.value)"
:label="dict.label" :value="parseInt(dict.value)"/>
</el-select>
</el-form-item>
<el-form-item label="开始时间(尼日利亚)" prop="nrlyStartTime">
<el-date-picker v-model="form.nrlyStartTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
type="datetime" placeholder="选择开始时间"></el-date-picker>
</el-form-item>
<el-form-item label="结束时间(尼日利亚)" prop="nrlyEndTime">
<el-date-picker v-model="form.nrlyEndTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
type="datetime" placeholder="选择结束时间"></el-date-picker>
</el-form-item>
<el-form-item label="开始时间(北京)" prop="bjStartTime">
<el-date-picker v-model="form.bjStartTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
type="datetime" placeholder="选择开始时间"></el-date-picker>
</el-form-item>
<el-form-item label="结束时间(北京)" prop="bjEndTime">
<el-date-picker v-model="form.bjEndTime" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss"
type="datetime" placeholder="选择结束时间"></el-date-picker>
</el-form-item>
<el-form-item label="排序" prop="aorder">
<el-input v-model="form.aorder" placeholder="请输入排序" />
<el-form-item label="过期提示语" prop="remark">
<el-input v-model="form.remark" type="textarea"></el-input>
</el-form-item>
<!-- <el-form-item label="" prop="createAt">-->
<!-- <el-input v-model="form.createAt" placeholder="请输入" />-->
......@@ -120,163 +131,238 @@
</template>
<script>
import { createCurrencyEcash, updateCurrencyEcash, deleteCurrencyEcash, getCurrencyEcash, getCurrencyEcashPage, exportCurrencyEcashExcel } from "@/api/ecw/currencyEcash";
import {CommonStatusEnum} from "@/utils/constants";
import {changeUserStatus} from "@/api/system/user";
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
import {
createCurrencyEcash,
updateCurrencyEcash,
deleteCurrencyEcash,
updateCurrencyEcashAll,
getCurrencyEcash,
getCurrencyEcashPage,
exportCurrencyEcashExcel
} from "@/api/ecw/currencyEcash";
import {CommonStatusEnum} from "@/utils/constants";
import {changeUserStatus} from "@/api/system/user";
import {DICT_TYPE, getDictDatas, getDictData} from "@/utils/dict";
export default {
name: "CurrencyEcash",
components: {
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// E-Cash汇率单位列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
dateRangeCreateTime: [],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
titleZh: null,
titleEn: null,
fuhao: null,
status: null,
huilv: null,
aorder: null,
},
// 表单参数
form: {},
// 表单校验
rules: {
},
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 处理查询参数
let params = {...this.queryParams};
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
// 执行查询
getCurrencyEcashPage(params).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
titleZh: undefined,
titleEn: undefined,
fuhao: undefined,
status: undefined,
huilv: undefined,
aorder: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.dateRangeCreateTime = [];
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加E-Cash汇率单位";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getCurrencyEcash(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改E-Cash汇率单位";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
if (this.form.id != null) {
updateCurrencyEcash(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
export default {
name: "CurrencyEcash",
components: {},
filters: {
currencyDataFilter(e, currencyDictDatas) {
if (e) return currencyDictDatas.find(item => item.value == e).label
},
ecashDataFilter(e, ecashDatas) {
if (e) return ecashDatas.find(item => item.value == e).label
}
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// E-Cash汇率单位列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
dateRangeCreateTime: [],
showFlag: false,
nrlyStartTime: getDictData(DICT_TYPE.ECASH_INIT, 1).label,
nrlyEndTime: getDictData(DICT_TYPE.ECASH_INIT, 2).label,
bjStartTime: getDictData(DICT_TYPE.ECASH_INIT, 3).label,
bjEndTime: getDictData(DICT_TYPE.ECASH_INIT, 4).label,
remark: getDictData(DICT_TYPE.ECASH_INIT, 5).label,
startTime: "",
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
titleZh: null,
titleEn: null,
fuhao: null,
status: null,
huilv: null,
aorder: null,
},
retForm: {},
updForm: {},
// 表单参数
form: {},
// 表单校验
rules: {},
statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
currencyDictDatas: getDictDatas(DICT_TYPE.COMMISSION_CURRENCY_TYPE),
ecashDatas: getDictDatas(DICT_TYPE.ECASH_INIT),
};
},
created() {
this.getList();
});
return;
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
// 处理查询参数
let params = {...this.queryParams};
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
// 执行查询
getCurrencyEcashPage(params).then(response => {
this.list = response.data.list;
this.retForm = response.data.list[0];
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
titleZh: undefined,
titleEn: undefined,
fuhao: undefined,
status: undefined,
huilv: undefined,
aorder: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.dateRangeCreateTime = [];
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加E-Cash汇率单位";
},
/** 修改按钮操作 */
handleUpdate() {
this.showFlag = true;
// this.reset();
// const id = row.id;
// getCurrencyEcash(id).then(response => {
// this.form = response.data;
// this.open = true;
// this.title = "修改E-Cash汇率单位";
// });
},
updateEcash(row) {
updateCurrencyEcash(row).then(response => {
this.$modal.msgSuccess("修改成功");
this.getList();
this.showFlag = false;
});
},
changeDictData1(value) {
this.updForm.nrlyStartTime = value;
updateCurrencyEcashAll(this.updForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.getList();
this.showFlag = false;
});
},
changeDictData2(value) {
this.updForm.nrlyEndTime = value;
updateCurrencyEcashAll(this.updForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.getList();
this.showFlag = false;
});
},
changeDictData3(value) {
this.updForm.bjStartTime = value;
updateCurrencyEcashAll(this.updForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.getList();
this.showFlag = false;
});
},
changeDictData4(value) {
this.updForm.bjEndTime = value;
updateCurrencyEcashAll(this.updForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.getList();
this.showFlag = false;
});
},
changeDictData5(value) {
this.updForm.remark = value;
updateCurrencyEcashAll(this.updForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.getList();
this.showFlag = false;
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
// 修改的提交
// if (this.form.id != null) {
// updateCurrencyEcash(this.form).then(response => {
// this.$modal.msgSuccess("修改成功");
// this.open = false;
// this.getList();
// });
// return;
// }
// 添加的提交
createCurrencyEcash(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除E-Cash汇率单位编号为"' + id + '"的数据项?').then(function () {
return deleteCurrencyEcash(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
// 执行导出
this.$modal.confirm('是否确认导出所有E-Cash汇率单位数据项?').then(() => {
this.exportLoading = true;
return exportCurrencyEcashExcel(params);
}).then(response => {
this.$download.excel(response, '${table.classComment}.xls');
this.exportLoading = false;
}).catch(() => {
});
}
}
// 添加的提交
createCurrencyEcash(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除E-Cash汇率单位编号为"' + id + '"的数据项?').then(function() {
return deleteCurrencyEcash(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
// 执行导出
this.$modal.confirm('是否确认导出所有E-Cash汇率单位数据项?').then(() => {
this.exportLoading = true;
return exportCurrencyEcashExcel(params);
}).then(response => {
this.$download.excel(response, '${table.classComment}.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
};
</script>
......@@ -86,12 +86,12 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="primary">核销</el-button>
<el-button size="mini" type="primary">反核销</el-button>
<el-button size="mini" type="primary">开票</el-button>
<el-button v-if="scope.row.state==1" size="mini" type="primary">核销</el-button>
<el-button v-if="scope.row.state>1" size="mini" type="primary">反核销</el-button>
<el-button v-if="scope.row.state==3" size="mini" type="primary">开票</el-button>
<el-button size="mini" @click="handleAdd(scope.row.id)">编辑</el-button>
<el-button size="mini" type="danger">删除</el-button>
<el-button size="mini" type="primary">打印</el-button>
<el-button size="mini" type="primary" @click="toprint(scope.row.id)">打印</el-button>
<el-button size="mini" type="success" @click="open=true">导出订单</el-button>
</template>
</el-table-column>
......@@ -186,6 +186,9 @@
handleAdd(id) {
return this.$router.push('creatCollection?id='+id)
},
toprint(id){
return this.$router.push('printVoucher?id='+id)
},
submitForm(){
this.open = false;
},
......
<template>
<div class="add-associated-order">
<h1 class="title">订单号:ECP0013123N 选择订单</h1>
<el-divider></el-divider>
<el-form inline label-width="85px" label-position="left">
<el-form-item label="订单号">
<div class="content"></div>
</el-form-item>
<el-form-item label="唛头">
<div class="content"></div>
</el-form-item>
<el-form-item label="商品类型">
<div class="content"></div>
</el-form-item>
<el-form-item label="商品名称">
<div class="content"></div>
</el-form-item>
<el-form-item label="运输方式">
<div class="content"></div>
</el-form-item>
<el-form-item label="出货渠道">
<div class="content"></div>
</el-form-item>
<el-form-item label="客户名称">
<div class="content"></div>
</el-form-item>
<el-form-item label="客户手机号">
<div class="content"></div>
</el-form-item>
<el-form-item label="商品特性">
<div class="content"></div>
</el-form-item>
<el-form-item>
<el-button>查询</el-button>
<el-button>重置</el-button>
</el-form-item>
</el-form>
<h1 class="title">
未加入关联订单列表
</h1>
<el-divider></el-divider>
<el-table>
<el-table-column
type="selection"
width="55"
></el-table-column>
<el-table-column label="序号"></el-table-column>
<el-table-column label="订单号"></el-table-column>
<el-table-column label="唛头"></el-table-column>
<el-table-column label="商品名列表"></el-table-column>
<el-table-column label="货物特性"></el-table-column>
<el-table-column label="货物材质"></el-table-column>
<el-table-column label="货物数据"></el-table-column>
<el-table-column label="入仓时间"></el-table-column>
<el-table-column label="状态"></el-table-column>
<el-table-column label="操作人"></el-table-column>
<el-table-column label="操作时间"></el-table-column>
<el-table-column label="操作"></el-table-column>
</el-table>
<el-row style="margin-top: 40px">
<el-col>
<el-button type="primary">
批量加入关联
</el-button>
<el-button>
取消
</el-button>
</el-col>
</el-row>
</div>
</template>
<script>
//添加关联订单
export default {
name: "addAssociatedOrder"
}
</script>
<style scoped lang="scss">
.add-associated-order{
padding: 20px;
box-sizing: border-box;
.title{
font-size: 30px;
font-weight: 600;
text-align: left;
}
.el-form{
.content{
width: 300px;
}
}
}
</style>
<template>
<div class="associated-order">
<h1 class="title">
关联订单-{{orderDetails.orderNo}}
</h1>
<el-divider></el-divider>
<orde-details-form :details ="orderDetails" ></orde-details-form>
<el-divider></el-divider>
<el-form inline label-width="100px">
<el-form-item label="订单号"><div class="content">
<el-input></el-input>
</div></el-form-item>
<el-form-item label="唛头"><div class="content">
<el-input></el-input>
</div></el-form-item>
<el-form-item label="商品类型"><div class="content">
<el-input></el-input>
</div></el-form-item>
<el-form-item label="商品名称"><div class="content">
<el-input></el-input>
</div></el-form-item>
<el-form-item label="运输方式"><div class="content">
<el-input></el-input>
</div></el-form-item>
<el-form-item label="出货渠道"><div class="content">
<el-input></el-input>
</div></el-form-item>
<el-form-item label="客户名称"><div class="content">
<el-input></el-input>
</div></el-form-item>
<el-form-item label="客户手机号"><div class="content">
<el-input></el-input>
</div></el-form-item>
<el-form-item label="商品特性"><div class="content">
<el-input></el-input>
</div></el-form-item>
<el-form-item><div class="content">
<el-button>查询</el-button>
<el-button>重置</el-button>
</div></el-form-item>
</el-form>
<el-divider></el-divider>
<div style="display: flex;align-items: center;">
<h1 class="title">
已加入关联订单列表
</h1>
<div style="flex: 1;margin-left: 20px;">
<el-button type="primary">批量移出</el-button>
</div>
<div>
<el-button type="primary">添加关联订单</el-button>
</div>
</div>
<el-table>
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column label="序号"></el-table-column>
<el-table-column label="订单号"></el-table-column>
<el-table-column label="唛头"></el-table-column>
<el-table-column label="商品名列表"></el-table-column>
<el-table-column label="货物特性"></el-table-column>
<el-table-column label="货物材质"></el-table-column>
<el-table-column label="货物数据"></el-table-column>
<el-table-column label="入仓时间"></el-table-column>
<el-table-column label="状态"></el-table-column>
<el-table-column label="操作人"></el-table-column>
<el-table-column label="操作时间"></el-table-column>
<el-table-column label="操作"></el-table-column>
</el-table>
</div>
</template>
<script>
//关联订单
import ordeDetailsForm from "@/views/ecw/order/components/ordeDetailsForm";
import {getOrder} from "@/api/ecw/order";
export default {
name: "associatedOrder",
props:{
orderId:[String,Boolean]
},
components:{
ordeDetailsForm
},
data(){
return {
orderDetails:{}
}
},
created() {
getOrder(this.orderId).then( r =>{
if(r.code === 0){
this.orderDetails = r.data;
}
})
},
}
</script>
<style scoped lang="scss">
.associated-order{
padding: 20px;
box-sizing: border-box;
.title{
font-size: 30px;
font-weight: 600;
}
}
</style>
<template>
<div class="batch-single-application">
<h1 class="title">批量调仓申请</h1>
<el-table>
<el-table-column label="订单编号"></el-table-column>
<el-table-column label="唛头"></el-table-column>
<el-table-column label="已到箱数/总箱数"></el-table-column>
<el-table-column label="下单统计"></el-table-column>
<el-table-column label="入仓统计"></el-table-column>
<el-table-column label="运输方式"></el-table-column>
<el-table-column label="出货渠道"></el-table-column>
<el-table-column label="始发仓"></el-table-column>
<el-table-column label="目的地"></el-table-column>
<el-table-column label="送货时间"></el-table-column>
</el-table>
<div style="display: flex;justify-content:center; margin-top: 20px">
<div style="width: 300px;height: 50px;border: 1px solid; margin: 0 10px"></div>
<div style="width: 300px;height: 50px;border: 1px solid;"></div>
</div>
<el-divider></el-divider>
<h1 class="title">
审批流程
</h1>
<div style="height: 100px"></div>
<el-form label-width="200px">
<el-form-item label="抄送"></el-form-item>
<el-form-item label="抄送人"></el-form-item>
</el-form>
<div style="text-align: center">
<el-button style="margin-right: 50px">提交申请</el-button>
<el-button>取消</el-button>
</div>
</div>
</template>
<script>
export default {
name: "batchSingleApplication"
}
</script>
<style scoped lang="scss">
.batch-single-application{
padding: 20px;
box-sizing: border-box;
.title{
font-weight: 600;
}
}
</style>
<template>
<el-dialog :title="title" visible :before-close="closeDialog">
<div class="" v-if="step == 'form'">
<el-form ref="form" :model="form" label-position="left" label-width="100px">
<el-form-item v-if="detail" label="订单号">
<el-input v-model="detail.orderNo" readonly></el-input>
</el-form-item>
<el-form-item label="起始标签" prop="start" required>
<el-input v-model.number="form.start" type="number"></el-input>
</el-form-item>
<el-form-item label="结束标签" prop="end" required>
<el-input v-model.number="form.end" type="number" :max="detail ? detail.num : 1"></el-input>
</el-form-item>
<el-form-item label="">
<el-button type="primary" @click="showPreview">去打印</el-button>
</el-form-item>
</el-form>
</div>
<template v-if="step=='preview'">
<div style="width: 80mm; margin: 0 auto;" id="order-print-tag" v-if="detail">
<div style="float: left; width: 28mm; border-bottom: 0.2mm solid #333; border-right: 0.2mm solid #333; " >
<img :src="detail.url" alt="ECP0063704N-1" style="width: 26mm" />
<p style=" text-align: center; height: 5mm; font-size: 3mm; -webkit-margin-before: 0em; -webkit-margin-after: 0em; margin-top: 0mm; " >
{{detail.orderNo}}-{{currentNo}}
</p>
<p style="margin-top: -1mm; text-align: center">
<span style="text-align: center; font-weight: 600; font-size: 6mm" >{{currentNo}}</span>
</p>
</div>
<div style="float: left; width: 50mm; margin-bottom: 2mm">
<p style=" padding-top: 0px; border-bottom: 0.2mm solid #333; text-align: center; line-height: 6mm; padding: 0px; padding-bottom: 2.5mm; margin: 0px; font-weight: 600; font-size: 6mm; " >
{{detail.orderNo}}
</p>
<p style=" padding: 0px; border-bottom: 0.2mm solid #333; text-align: center; line-height: 6mm; padding: 0px; padding-top: 2.6mm; padding-bottom: 2.6mm; margin: 0px; font-weight: 600; font-size: 6mm; " >
{{detail.marks}}
</p>
<p style=" padding: 0px; border-bottom: 0.2mm solid #333; text-align: center; line-height: 6mm; padding: 0px; margin: 0px; font-size: 5mm; text-transform: uppercase; padding-top: 3.5mm; padding-bottom: 2.5mm; " >
{{detail.startTitleEn}} --&gt;
<label style="font-weight: 600; font-size: 5.5mm">{{detail.destTitleEn}} </label>
</p>
<p style=" padding: 0px; padding-top: 2.7mm; padding-bottom: 2.7mm; padding-left: 3mm; float: left; width: 29%; border-bottom: 0.2mm solid #333; text-align: center; line-height: 6mm; font-size: 4mm; text-transform: uppercase; margin: 0px; " >
LCL
</p>
<p style=" padding: 0px; padding-top: 2.7mm; padding-bottom: 2.7mm; padding-left: 4mm; float: left; border-left: 0.2mm solid #333; border-bottom: 0.2mm solid #333; text-align: center; line-height: 6mm; margin: 0px; font-size: 5mm; text-transform: uppercase; font-weight: 500; " >
{{detail.inTime|parseTime('{y}-{m}-{d}')}}
</p>
</div>
<div style="width: 76mm">
<p style="text-align: center">
<label
style="font-size: 5mm; font-weight: 600; padding-right: 1mm"
>E&amp;C</label
>{{detail.foot}}
</p>
</div>
</div>
<div style="text-align:center;">
<el-button type="primary" @click="print">确定打印</el-button>
</div>
</template>
</el-dialog>
</template>
<script>
import {printTag} from '@/api/ecw/order'
import {parseTime} from '@/utils/ruoyi'
import lodop from '@/utils/lodop'
export default {
filters: {parseTime},
props:{
orderId: [String, Number]
},
data(){
return {
show: false,
detail: null,
step: 'form',
form:{
start: 1,
end: 1
},
currentNo: 1
}
},
computed:{
title(){
let t = '打印标签'
if(this.detail){
t += '-' + this.detail.orderNo
}
return t
}
},
created(){
this.show = true
this.loadData()
},
methods:{
loadData(){
printTag(this.orderId).then(res => {
this.$set(this, 'detail', res.data[0])
})
},
closeDialog(){
console.log('关闭')
this.show = false
this.$emit('close');
},
showPreview(){
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
this.currentNo = this.form.start
this.step = 'preview'
})
},
print(){
lodop().then(LODOP => {
LODOP.PRINT_INIT(this.title);
LODOP.SET_PRINT_STYLE("FontSize",18);
LODOP.SET_PRINT_STYLE("Bold",1);
// LODOP.ADD_PRINT_TEXT(50,231,260,39,"打印页面部分内容");
for(let i = this.form.start; i <= this.form.end; i ++){
LODOP.ADD_PRINT_HTM(88,200,350,600, document.getElementById("order-print-tag").innerHTML);
LODOP.PRINT();
}
this.$alert('已发起打印任务');
// LODOP.PREVIEW(); // 预览
/* LODOP.PRINTA(); // 选择打印机
// 直接打印 */
console.log('打印哦')
}).catch(err => {
console.error('lodop异常', err)
alert('请检查LODOP打印控件是否安装并启动');
})
}
}
}
</script>
\ No newline at end of file
<template>
<div>
<el-descriptions class="margin-top" border :column="4">
<el-descriptions-item label="唛头">{{details.marks}}</el-descriptions-item>
<el-descriptions-item label="已到箱数/总箱数">{{details.sumQuantity}}/{{details.sumNum}}</el-descriptions-item>
<el-descriptions-item label="订单状态">{{details.status}}</el-descriptions-item>
<el-descriptions-item label="送货日期">{{}}</el-descriptions-item>
<el-descriptions-item label="运输方式">{{details.transportId}}</el-descriptions-item>
<el-descriptions-item label="出货渠道">{{details.channelId}}</el-descriptions-item>
<el-descriptions-item label="始发地">{{details.logisticsInfoDto.startWarehouseId}}</el-descriptions-item>
<el-descriptions-item label="目的地">{{details.logisticsInfoDto.destWarehouseId}}</el-descriptions-item>
<el-descriptions-item label="发货人姓名">{{details.consignorVO.customerId}}</el-descriptions-item>
<el-descriptions-item label="发货人公司">{{details.consignorVO.company}}</el-descriptions-item>
<el-descriptions-item label="发货人电话">{{details.consignorVO.phone}}</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
<el-descriptions-item label="收货人姓名">{{details.consigneeVO.customerId}}</el-descriptions-item>
<el-descriptions-item label="收货人公司">{{details.consigneeVO.company}}</el-descriptions-item>
<el-descriptions-item label="收货人电话">{{details.consigneeVO.phone}}</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
</el-descriptions>
</div>
</template>
<script>
export default {
props:{
details:{
type:Object,
default:()=>{
return {
logisticsInfoDto:undefined,
consignorVO:undefined,
consigneeVO:undefined,
}
}
},
},
name: "ordeDetailsForm",
}
</script>
<template>
<div>
<el-dialog :before-close="()=>{
clearFrom();$emit('update:show',false)
}" center width="80%" :visible.sync="show">
<div class="content">
<el-form label-width="180px" label-position="left">
<el-form-item label="特殊要求">
<dict-selector v-model="form.advanceType" formType="radio" :type="DICT_TYPE.ORDER_SPECIAL_NEEDS" ></dict-selector>
</el-form-item>
<el-form-item label="特殊要求备注"><el-input type="textarea" style="width: 300px;" v-model="form.todoDetail"></el-input></el-form-item>
<el-form-item label="内陆运费垫付预计金额" v-if="form.advanceType == 6">
<el-input style="width: 300px;" v-model="form.transFee">
<div style="width: 100px;" slot="append" >
<dict-selector v-model="form.transCurrency" :type="DICT_TYPE.COMMISSION_CURRENCY_TYPE" ></dict-selector>
</div>
</el-input>
</el-form-item>
<el-form-item label="付款类型" v-if="form.advanceType == 6">
<div style="width: 300px;">
<dict-selector v-model="form.payType" :type="DICT_TYPE.PAY_TYPE" ></dict-selector>
</div>
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="submit">提交</el-button>
<el-button @click="clearFrom();$emit('update:show',false)">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { getDictDatas, DICT_TYPE } from '@/utils/dict';
import {specialNeedCreate} from "@/api/ecw/order";
export default {
name: "specialNeeds",
created() {
this.clearFrom()
},
props:{
orderId:{
type:[String,Number],
},
show:Boolean,
},
data(){
return{
getDictDatas,
DICT_TYPE,
form:{},
}
},
methods:{
clearFrom(){
this.form = {
advanceType:undefined,
advanceWho: undefined,
payType: undefined,
todoDetail: undefined,
transCurrency: undefined,
transFee: undefined
}
},
submit(){
specialNeedCreate(this.form).then(r=>{
console.log(r)
if(r.code === 0){
this.clearFrom();
this.$emit('update:show',false)
}
})
},
},
watch:{
orderId(val){
this.form.orderId = val;
},
'form.advanceType'(val){
this.form.transFee = undefined;
this.form.transCurrency = undefined;
this.form.payType = undefined;
}
}
}
</script>
<style scoped lang="scss">
</style>
......@@ -7,57 +7,55 @@
<el-descriptions :column="3" border>
<el-descriptions-item label="*发货人" >
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="consignorId" required error="发货人不能为空">
<customer-selector v-model="form.consignorId" @change="consignor = $event" />
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="consignorContactsId" required error="发货人不能为空">
<customer-contact-selector v-model="form.consignorContactsId" @change="consignorContact = $event" />
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="发货人">
{{consignor.name || ''}}
</el-descriptions-item>
<el-descriptions-item label="手机号">
{{consignor.defaultContactPhone || ''}}
<el-descriptions-item label="电话">
{{consignorContact.phoneNew || ''}}
</el-descriptions-item>
<el-descriptions-item label="发货人公司">
{{consignor.company || ''}}
</el-descriptions-item>
<el-descriptions-item label="客户来源">
{{consignor.source || ''}}
</el-descriptions-item>
<el-descriptions-item label="社交软件">
暂缺字段数据
{{consignorContact.customerName || ''}}
</el-descriptions-item>
<el-descriptions-item label="联系地址">
{{consignor.address || ''}}
<el-descriptions-item label="Email">
{{consignorContact.email || ''}}
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="3" border>
<el-descriptions-item label="*收货人">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="consigneeId" required error="收货人不能为空">
<customer-selector v-model="form.consigneeId" @change="consignee = $event" />
<el-descriptions-item label="*发货人" >
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="consigneeContactsId" required error="发货人不能为空">
<customer-contact-selector v-model="form.consigneeContactsId" @change="consigneeContact = $event" />
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="收货人">
{{consignee.name || ''}}
</el-descriptions-item>
<el-descriptions-item label="手机号">
{{consignee.defaultContactPhone || ''}}
<el-descriptions-item label="电话">
{{consigneeContact.phoneNew || ''}}
</el-descriptions-item>
<el-descriptions-item label="货人公司">
{{consignee.company || ''}}
<el-descriptions-item label="货人公司">
{{consigneeContact.customerName || ''}}
</el-descriptions-item>
<el-descriptions-item label="客户来源">
{{consignee.source || ''}}
<el-descriptions-item label="Email">
{{consigneeContact.email || ''}}
</el-descriptions-item>
<el-descriptions-item label="社交软件">
暂缺字段数据
</el-descriptions>
<el-descriptions :column="3" border>
<el-descriptions-item label="*运输方式">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="transportId" required error="请选择运输方式">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="form.transportId" />
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="联系地址">
{{consignee.address || ''}}
<el-descriptions-item label="出货渠道">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="channelId" :required="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass == 'channel'" error="请选择出货渠道">
<selector
:disabled="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, form.transportId).cssClass != 'channel'"
v-model="form.channelId"
:options="channelList"
value-field="channelId"
label-field="nameZh"
></selector>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="3" border>
<el-descriptions :column="2" border>
<el-descriptions-item label="*始发城市">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="departureId" required error="始发地必选">
<el-select v-model="form.departureId" placeholder="请选择始发地">
......@@ -72,12 +70,27 @@
</el-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="*请选择线路" :span="2">
<el-row :gutter="10">
<el-col :span="12">
<el-input :value="getRouterNameById(form.lineId)" readonly placeholder="请在右侧选择线路"></el-input>
</el-col>
<el-col :span="12">
<select size="5" v-model="form.lineId" style="min-width: 300px">
<template v-for="item in routerList">
<option :value="item.id" :key="item.id">{{item.startTitleZh}} >> {{item.destTitleZh}}</option>
</template>
</select>
</el-col>
</el-row>
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card class="mt-10">
<div slot="header" class="card-title">
<div class="card-name">商品信息</div>
<el-button type="primary" size="mini" icon="el-icon-plus" @click="addProduct"></el-button>
<el-button type="primary" size="mini" @click="addProduct(null)">添加货物</el-button>
<el-button type="primary" size="mini">批量添加货物</el-button>
</div>
<el-table :data="productList" border>
<el-table-column label="序号" width="60px" fixed>
......@@ -85,194 +98,173 @@
{{scope.$index + 1}}
</template>
</el-table-column>
<el-table-column label="中文名" width="160px">
<el-table-column label="中文名" width="160px">
<template slot-scope="{row}">
<product-selector v-model="row.prodId" @change="row.goodsType = $event.typeId" />
<product-selector v-model="row.prodId" @change="row.goodsType = $event ? $event.typeId : null" :disabled="!form.lineId" />
</template>
</el-table-column>
<el-table-column label="英文名" width="160px">
<el-table-column label="英文名" width="160px">
<template slot-scope="{row}">
<product-selector v-model="row.prodId" @change="row.goodsType = $event.typeId" />
<product-selector v-model="row.prodId" @change="row.goodsType =$event ? $event.typeId : null" :disabled="!form.lineId" />
</template>
</el-table-column>
<el-table-column label="商品类型" width="160px">
<!-- <el-table-column label="商品类型" width="160px">
<template slot-scope="{row}">
<selector disabled v-model="row.goodsType" :options="productAttrList" label-field="attrName" value-field="id"></selector>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="品牌" width="100px">
<template slot-scope="{row}">
<dict-selector v-model="row.brand" :type="DICT_TYPE.ECW_IS_BRAND" formatter="bool" defaultable @input="getProductFee(row)" />
<dict-selector v-model="row.brand" :type="DICT_TYPE.ECW_IS_BRAND" defaultable @input="calculationPrice(row)" :disabled="!form.lineId" />
</template>
</el-table-column>
<el-table-column label="件数" width="90px">
<template slot-scope="{row}">
<el-input v-model.number="row.num" />
<el-input v-model.number="row.num" :disabled="!form.lineId" />
</template>
</el-table-column>
<el-table-column label="包装单位">
<template slot-scope="{row}">
<dict-selector v-model="row.unit" :type="DICT_TYPE.ECW_PACKAGE_TYPE" defaultable />
<dict-selector v-model="row.unit" :type="DICT_TYPE.ECW_PACKAGE_TYPE" defaultable :disabled="!form.lineId" />
</template>
</el-table-column>
<el-table-column label="箱规(m)" width="120px">
<el-table-column label="数量">
<template slot-scope="{row}">
<el-input v-model="row.boxGauge" @input="calcVolume(row)" />
<el-input v-model="row.quantity" type="number" :disabled="!form.lineId" />
</template>
</el-table-column>
<el-table-column label="总体积(m³)" width="100px">
<!-- <el-table-column label="箱规(m)" width="120px">
<template slot-scope="{row}">
<el-input v-model="row.boxGauge" @input="calcVolume(row)" />
</template>
</el-table-column> -->
<el-table-column label="体积(m³)" width="100px">
<template slot-scope="{row}">
<el-input v-model="row.volume" />
<el-input v-model="row.volume" :disabled="!form.lineId" />
</template>
</el-table-column>
<el-table-column label="重量(kg)" width="100px">
<el-table-column label="重量(kg)" width="100px">
<template slot-scope="{row}">
<el-input v-model="row.weight" />
<el-input v-model="row.weight" :disabled="!form.lineId" />
</template>
</el-table-column>
<el-table-column label="货值(RMB)" width="100px">
<template slot-scope="{row}">
<el-input v-model="row.worth" />
<el-input v-model="row.worth" :disabled="!form.lineId" />
</template>
</el-table-column>
<el-table-column label="商品特性" width="250px">
<template slot-scope="{row}">
<el-checkbox-group v-model="row.prodAttrArr" @change="onProductAttrChange(row, $event)">
<el-checkbox-group v-model="row.prodAttrArr" @change="onProductAttrChange(row, $event); calculationPrice(row)" :disabled="!form.lineId">
<el-checkbox v-for="item in productAttrList" :label="item.id" :key="item.id">{{item.attrName}}</el-checkbox>
</el-checkbox-group>
</template>
</el-table-column>
<el-table-column label="运输方式" width="150px">
<template slot-scope="{row}">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="row.transportId"
@input="onTransportChange(row,$event)" formatter="number" />
</template>
</el-table-column>
<el-table-column label="出货渠道" width="150px">
<template slot-scope="{row}">
<selector
:disabled="getDictData(DICT_TYPE.ECW_TRANSPORT_TYPE, row.transportId).cssClass != 'channel'"
v-model="row.channelId"
:options="channelList"
value-field="channelId"
label-field="nameZh"
@input="onChannelChange(row)"
></selector>
</template>
</el-table-column>
<el-table-column label="线路" width="200px">
<template slot-scope="{row}">
<selector
v-model="row.lineId"
:options="routerList"
@input="onLineChange(row)"
clearable
:label-field="(item, index) => item.startTitleZh + ' >> ' + item.destTitleZh" value-field="id"></selector>
</template>
</el-table-column>
<el-table-column label="运费" width="200px">
<template slot-scope="{row}">
<template v-if="row.fee">
<template v-if="row.fee && row.fee.charging == 1">
全包价:{{row.fee.freight}} {{currentcyMap[row.fee.freightCurrency]}} / {{unitMap[row.fee.freightVolume]}}
</template>
<template v-else-if="row.fee">
<div>
运费:{{row.fee.seaFreight}} {{currentMap[row.fee.seaFreightCurrency]}} / {{unitMap[row.fee.seaFreightVolume]}}
运费:{{row.fee.freight}} {{currentcyMap[row.fee.freightCurrency]}} / {{unitMap[row.fee.freightVolume]}}
</div>
<div>
清关费:{{row.fee.clearanceFreight}} {{currentMap[row.fee.clearanceFreightCurrency]}} / {{unitMap[row.fee.clearanceFreightVolume]}}
清关费:{{row.fee.clearanceFee}} {{currentcyMap[row.fee.clearanceFeeCurrency]}} / {{unitMap[row.fee.clearanceFeeVolume]}}
</div>
</template>
</template>
</el-table-column>
<el-table-column label="操作" width="180px" fixed="right">
<el-table-column label="是否预付">
<template slot-scope="{row}">
<dict-tag v-if="row.fee" :type="DICT_TYPE.ECW_PAY_ADVANCE" :value="row.fee.isPayAdvance" />
</template>
</el-table-column>
<el-table-column label="操作" width="80px" fixed="right">
<template slot-scope="scope">
<el-button size="mini" type="danger" @click="delProduct(scope.$index)">删除</el-button>
<!-- <el-button size="mini" type="primary" @click="showMorePrice($index)">更多报价</el-button> -->
<!-- <el-button size="mini" type="primary" @click="getProductFee(scope.row)">计算</el-button> -->
</template>
</el-table-column>
</el-table>
<!--
</el-card>
<el-card class="mt-10"> -->
<div class="card-title" style="padding:20px 0;">费用小</div>
<div class="card-title" style="padding:20px 0;"></div>
<el-descriptions :column="4" border>
<el-descriptions-item label="总件数">
{{sum.totalNum || 0}}
</el-descriptions-item>
<!-- <el-descriptions-item label="总体积">
<el-descriptions-item label="总体积">
{{sum.totalVolume || 0}}m³
</el-descriptions-item>
<el-descriptions-item label="总重量">
{{sum.totalWeight || 0}}kg
</el-descriptions-item> -->
<el-descriptions-item label="总货值">
{{sum.totalWorth || 0}}人民币
</el-descriptions-item>
<el-descriptions-item label="数量">
{{sum.totalWorth || 0}}
</el-descriptions-item>
<el-descriptions-item label="总货值(RMB)">
{{sum.totalWorth || 0}}元
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card class="mt-10">
<div class="card-title" slot="header">预计费用</div>
<el-descriptions :column="5" border>
<el-descriptions-item label="保价费">
{{fee.insuranceFee || 0}}人民币
{{fee.insuranceFee || 0}} 人民币
</el-descriptions-item>
<!-- <el-descriptions-item label="总运费">
<div>{{fee.seaNGN || 0}}拉</div>
<el-descriptions-item label="总运费">
<div>{{fee.seaNGN || 0}}</div>
<div>{{fee.seaRMB || 0}}人民币</div>
<div>{{fee.seaUSD || 0}}美元</div>
</el-descriptions-item>
<!--代收货款,只有非控货订单、并且线路开通了代收货款后,才显示是否代收货款选项-->
<el-descriptions-item label="总清关费">
<div>{{fee.clearanceNGN || 0}}泰拉</div>
<div>{{fee.clearanceNGN || 0}}奈拉</div>
<div>{{fee.clearanceRMB || 0}}人民币</div>
<div>{{fee.clearanceUSD || 0}}美元</div>
</el-descriptions-item>
<el-descriptions-item label="其他费用">
<!--TODO 缺少其他费用字段-->
<el-input v-model="form.collectionProxy" placeholder="" style="width:200px"></el-input>
<selector v-model="form.collectionProxyCurrency" :options="currencyList" label-field="titleZh" value-field="id" defaultable style="width:100px" />
</el-descriptions-item>
<el-descriptions-item label="原价" :span="2">
<!--TODO 缺少字段-->
<div>{{fee.clearanceNGN || 0}}奈拉</div>
<div>{{fee.clearanceRMB || 0}}人民币</div>
<div>{{fee.clearanceUSD || 0}}美元</div>
</el-descriptions-item>
</el-descriptions>
<div class="card-title" style="padding:20px 0;">优惠信息</div>
<el-row v-for="(item, index) in getDictDatas(DICT_TYPE.ECW_COUPON_TYPE)" :key="item.value">
<el-col :span="2">{{index+1}}.{{item.label}}</el-col>
<el-col :span="4">
<el-select placeholder="">
</el-select>
</el-col>
<el-col :span="2">-10美元</el-col>
<el-col :span="5">有效期:永久有效</el-col>
</el-row>
<el-descriptions :column="1" border>
<el-descriptions-item label="优惠合计">
1233.1美元
</el-descriptions-item>
<el-descriptions-item label="预计费用">
<div>{{fee.seaNGN + fee.clearanceNGN}}泰拉</div>
<div>{{fee.seaRMB + fee.clearanceRMB + fee.insuranceFee }}人民币</div>
<div>{{fee.seaUSD + fee.clearanceUSD}}美元</div>
</el-descriptions-item> -->
</el-descriptions-item>
</el-descriptions>
</el-card>
<template v-for="(item, index) in transportList" >
<el-card class="mt-10" :key="index" v-if="item._enabled" :data-enabled="item._enabled">
<div class="card-title" slot="header">{{item.label}}</div>
<el-form-item v-for="(router, routerIndex) in item.routers" :key="routerIndex" :label="item.label.substr(0, 2) + '线路' + (routerIndex + 1)">
<el-col :span="12">
{{getRouterNameById(router.lineId)}}
</el-col>
<el-col :span="12" v-if="router.channelId">
出货渠道{{routerIndex + 1}}: {{getChannelNameById(router.channelId)}}
</el-col>
</el-form-item>
<el-form-item label="是否双清" v-if="[2,3,4].indexOf(+item.transportId) > -1">
<dict-selector v-model="item.doubleClear" form-type="radio" :type="DICT_TYPE.ECW_DOUBLE_CLEAR" />
</el-form-item>
<el-form-item label="航空公司" v-if="[3,4].indexOf(+item.transportId) > -1">
<el-select placeholder="" v-model="item.airlineCompany">
</el-select>
</el-form-item>
<el-form-item label="船公司" v-if="[2].indexOf(+item.transportId) > -1">
<el-select placeholder="" v-model="item.airlineCompany">
</el-select>
</el-form-item>
<el-form-item label="清关证书" v-if="[2,3,4].indexOf(+item.transportId) > -1">
<dict-selector v-model="item.customsClearCert" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
</el-form-item>
<el-form-item label="清关证书备注" v-if="[2,3,4].indexOf(+item.transportId) > -1">
<el-input v-model="item.remarks" ></el-input>
</el-form-item>
<el-form-item label="是否拆包" v-if="[3,4].indexOf(+item.transportId) > -1">
<dict-selector v-model="item.isUnpack" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
</el-form-item>
<el-form-item label="单票立刻转运" v-if="[3,4].indexOf(+item.transportId) > -1">
<dict-selector v-model="item.isSingleTicketTransport" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
<span style="margin-left:10px">注:若只有一件,货到仓库立即发,选“是”,多件需仓库集运待发,选“否”</span>
</el-form-item>
<el-form-item label="包装类型" v-if="[3,4].indexOf(+item.transportId) > -1">
<dict-selector v-model="item.packageType" form-type="checkbox" :type="DICT_TYPE.ECW_PACKAGE_TYPE" multiple />
</el-form-item>
<el-form-item label="包装要求备注" v-if="[3,4].indexOf(+item.transportId) > -1">
<el-input v-model="item.packageRemarks" ></el-input>
</el-form-item>
</el-card>
</template>
<el-card class="mt-10">
<div class="card-title" slot="header">通用</div>
......@@ -280,52 +272,57 @@
<el-descriptions-item label="唛头">
<el-input v-model="form.marks" placeholder=""></el-input>
</el-descriptions-item>
<el-descriptions-item label="报关方式">
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="form.customsType" form-type="radio" />
</el-descriptions-item>
<el-descriptions-item label="预计结束时间">
<el-date-picker v-model="form.stopTime" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-descriptions-item>
<el-descriptions-item label="是否控货">
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" v-model="form.control" form-type="radio" />
</el-descriptions-item>
<el-descriptions-item label="竞争对手">
<el-input v-model="form.competitor" placeholder=""></el-input>
<!--代收货款,只有非控货订单、并且线路开通了代收货款后,才显示是否代收货款选项-->
<el-descriptions-item label="是否代收货款">
<dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" formatter="bool" v-model="form.isCollection" form-type="radio" />
</el-descriptions-item>
<el-descriptions-item label="重要程度">
<el-rate v-model="form.importance"></el-rate>
<el-descriptions-item label="代收货款金额">
<el-input v-model="form.collectionProxy" placeholder="" style="width:200px"></el-input>
<selector v-model="form.collectionProxyCurrency" :options="currencyList" label-field="titleZh" value-field="id" defaultable style="width:100px" />
</el-descriptions-item>
<el-descriptions-item label="价格有效时间">
<el-date-picker v-model="form.startTime" placeholder="" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
-
<el-date-picker v-model="form.endTime" placeholder="" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
<el-descriptions-item label="单证报关" :span="2">
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="form.customsType" form-type="radio" />
</el-descriptions-item>
<el-descriptions-item label="交货方式">
<!--
接口要求数据为整数,所以增加trade_type类型的字典,用1234代码以下不同类型
FOB(离岸价),CIF(到岸价),CNF(成本加运费),EXW(出厂价)
-->
<dict-selector :type="DICT_TYPE.ECW_TRADE_TYPE" fomtter="number" v-model="form.tradeType" />
<el-input v-model="form.tradeAdress" placeholder=""></el-input>
<el-descriptions-item label="出单方式">
<dict-selector :type="DICT_TYPE.ECW_SUING_METHOD" v-model="form.issuingMethod" form-type="radio" />
</el-descriptions-item>
<!-- <el-descriptions-item label="总运费" :span="2">
<el-descriptions-item label="送货日期">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="deliveryDate" required error="送货日期不能为空">
<el-date-picker v-model="form.deliveryDate" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="总清关费" :span="2">
<el-descriptions-item label="入仓类型">
<dict-selector :type="DICT_TYPE.ECW_WAREHOUSING_TYPE" v-model="form.warehouseType" />
</el-descriptions-item>
<el-descriptions-item label="收货方式">
<dict-selector :type="DICT_TYPE.ECW_HARVEST_METHOD" v-model="form.harvestMethod" />
</el-descriptions-item>
<el-descriptions-item label="收货地区" :span="2">
<area-selector
@countryChange="onAreaChange('country', $event)"
@provinceChange="onAreaChange('province', $event)"
@cityChange="onAreaChange('city', $event)"
></area-selector>
</el-descriptions-item>
<el-descriptions-item label="收货详细地址" :span="2">
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="consigneeAddress" required error="收货详细地址不能为空">
<el-input v-model="form.consigneeAddress" placeholder=""></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="总价格" :span="2">
</el-descriptions-item> -->
<!-- <el-descriptions-item label="佣金类型" :span="2">
<dict-selector :type="DICT_TYPE.COMMISSION_TYPE" form-type="radio" fomtter="number" v-model="form.commissionType" defaultable />
</el-descriptions-item> -->
<el-descriptions-item label="付款人" :span="2">
<dict-selector :type="DICT_TYPE.DRAWEE" v-model="form.drawee" form-type="radio" />
<dict-selector :type="DICT_TYPE.DRAWEE" v-model="form.drawee" defaultable form-type="radio" />
</el-descriptions-item>
<el-descriptions-item v-if="form.drawee==3" label="费用类型" :span="2">
<template v-for="(item,index) in customDraweeVOList" v-key="index">
<el-form-item :label="item.name" >
<el-form-item :label="item.name" :key="index" >
<dict-selector :type="DICT_TYPE.DRAWEE" :filter="(e) => e.value == '1' || e.value == '2'" v-model="item.value" form-type="radio" />
</el-form-item>
</template>
......@@ -333,6 +330,48 @@
</el-descriptions>
</el-card>
<el-card class="mt-10" v-if="transport">
<div class="card-title" slot="header">{{transport.label}}</div>
<el-form-item label="快递单号">
<el-input v-model="form.number" placeholder="请输入购买商品的快递单号"></el-input>
</el-form-item>
<el-form-item label="是否双清" v-if="[2,3,4].indexOf(+form.transportId) > -1">
<dict-selector v-model="form.doubleClear" form-type="radio" :type="DICT_TYPE.ECW_DOUBLE_CLEAR" />
</el-form-item>
<el-form-item label="航空公司" v-if="[3,4].indexOf(+form.transportId) > -1">
<!--待查询备选数据-->
<el-select placeholder="" v-model="form.airlineCompany">
</el-select>
</el-form-item>
<el-form-item label="船公司" v-if="[2].indexOf(+form.transportId) > -1">
<el-select placeholder="" v-model="form.shippingCompany">
</el-select>
</el-form-item>
<el-form-item label="清关证书" v-if="[2,3,4].indexOf(+form.transportId) > -1">
<dict-selector v-model="form.customsClearCert" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
</el-form-item>
<el-form-item label="清关证书备注" v-if="[2,3,4].indexOf(+form.transportId) > -1">
<el-input v-model="form.remarks" ></el-input>
</el-form-item>
<el-form-item label="是否拆包" v-if="[3,4].indexOf(+form.transportId) > -1">
<dict-selector v-model="form.isUnpack" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
</el-form-item>
<el-form-item label="单票立刻转运" v-if="[3,4].indexOf(+form.transportId) > -1">
<dict-selector v-model="form.isSingleTicketTransport" form-type="radio" :type="DICT_TYPE.INFRA_BOOLEAN_STRING" fomatter="bool" />
<span style="margin-left:10px">注:若只有一件,货到仓库立即发,选“是”,多件需仓库集运待发,选“否”</span>
</el-form-item>
<el-form-item label="特殊要求" >
<dict-selector v-model="form.packageType" form-type="checkbox" :type="DICT_TYPE.ECW_PACKAGE_TYPE" multiple />
</el-form-item>
<el-form-item label="特殊要求备注">
<el-input v-model="form.packageRemarks" ></el-input>
</el-form-item>
</el-card>
<el-form-item label="">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="$router.back()">取 消</el-button>
......@@ -342,23 +381,26 @@
</template>
<script>
import { createOrder, updateOrder, getOrder, getProductFeeList, getProductFee } from "@/api/ecw/order";
import { createOrder, updateOrder, getOrder, getProductFeeList } from "@/api/ecw/order";
import ProductSelector from '@/components/ProductSelector'
import {getProductAttrList} from '@/api/ecw/productAttr'
import {getChannelList} from '@/api/ecw/channel'
import Selector from '@/components/Selector'
import CustomerSelector from '@/components/CustomerSelector'
import CustomerContactSelector from '@/components/CustomerContactSelector'
import {openedRouterList as getOpenedRouterList} from '@/api/ecw/warehouse'
import {getTradeCityList} from '@/api/ecw/region'
import {getDictData} from '@/utils/dict'
import {getDictData, getDictDatas} from '@/utils/dict'
import Fee from '@/components/Fee'
import {getCurrencyList} from '@/api/ecw/currency'
import {getUnitList} from '@/api/ecw/unit'
import { getDictDatas } from '@/utils/dict';
import { getCustomer } from '@/api/ecw/customer';
import { getListTree } from "@/api/ecw/region";
import AreaSelector from '@/components/AreaSelector'
import {calculationPrice} from '@/api/ecw/product'
export default {
name: "OrderEdit",
components: {
ProductSelector, Selector, CustomerSelector, Fee
ProductSelector, Selector, CustomerContactSelector, Fee, AreaSelector
},
data() {
return {
......@@ -371,18 +413,16 @@ export default {
draweeList: [],
// 遮罩层
loading: true,
// 是否显示弹出层
/* dateRangeStopTime: [],
dateRangeStartTime: [],
dateRangeEndTime: [],
dateRangeCreateTime: [], */
productList:[], // 商品信息
productAttrList:[], // 商品属性
channelList: [], // 出货取到
routerList: [],
tradeCityList: [],
consignor: {}, // 发货人
consignee:{}, // 收货人
treeList: [],
consignorContact: {}, // 发货联系人
consigneeContact:{}, // 收货联系人
consignee: null,
consignor: null,
transportList: [],
currencyList:[],
unitList:[],
......@@ -393,10 +433,7 @@ export default {
},
// 表单校验
rules: {
/* number: [{ required: true, message: "报价单号不能为空", trigger: "blur" }],
consignorId: [{ required: true, message: "客户id,发货人不能为空", trigger: "blur" }],
consigneeId: [{ required: true, message: "收货人id不能为空", trigger: "blur" }],
sendstatus: [{ required: true, message: "站内信状态,0未发送,1已发送不能为空", trigger: "blur" }], */
}
};
},
......@@ -410,35 +447,10 @@ export default {
getDictData(){
return (type, value) => getDictData(type, value) || {}
},
// 被启用的货运方式
/* enbedTransports(){
let transports = []
this.transportList.forEach(item => {
let disabled = true
let lineIds = []
let channelIds = []
let routers = []
this.productList.forEach(prod => {
if(prod.offerTransportId == item.transportId){
disabled = false
routers.push({
lineId: prod.lineId,
channelId: prod.channelId
})
if(prod.lineId)lineIds.push(prod.lineId)
if(prod.channelId)channelIds.push(prod.channelId)
}
})
if(!disabled){
item._disabled = disabled
item.routers = routers
item.lineIds = lineIds.join(',')
item.channelIds = channelIds.join(',')
transports.push(item)
}
})
return transports
}, */
getDictDatas(){
return getDictDatas
},
// 根据线路id显示线路名称
getRouterNameById(){
return routerId => {
......@@ -456,7 +468,11 @@ export default {
return this.channelList.find(item => item.channelId == channelId) ?. nameZh
}
},
currentMap(){
// 当前运输方式
transport(){
return this.transportList.find(item => item.value == this.form.transportId)
},
currentcyMap(){
let map = {}
this.currencyList.forEach(item => {
map[item.id] = item.titleZh
......@@ -496,19 +512,32 @@ export default {
'form.objectiveId'(){
this.getOpenedRouterList()
},
// 发货联系人发生变化获取发货客户
consignorContact(){
this.getConsignor()
},
// 收货联系人发生变化获取收货客户
consigneeContact(){
this.getConsignee()
},
productList(){
console.log('计算运费')
}
},
created() {
getProductAttrList().then(res => this.productAttrList = res.data)
getChannelList().then(res => this.channelList = res.data)
getTradeCityList().then(res => this.tradeCityList = res.data)
getCurrencyList().then(res => this.currencyList = res.data)
getUnitList().then(res => this.unitList = res.data)
this.getDictDatas(this.DICT_TYPE.ECW_TRANSPORT_TYPE).forEach(res => {
this.transportList = this.getDictDatas(this.DICT_TYPE.ECW_TRANSPORT_TYPE)
/* .forEach(res => {
this.transportList.push({
transportId: +res.value, // 转为整形
label: res.label,
})
})
}) */
if(this.$route.query.id){
getOffer(this.$route.query.id).then(res => {
......@@ -545,72 +574,51 @@ export default {
}else this.addProduct()
},
methods: {
onTransportChange(row, val){
this.getProductFee(row)
if(this.getDictData(this.DICT_TYPE.ECW_TRANSPORT_TYPE, val).cssClass != 'channel') row.channelId = null
this.updateEnabledTransports()
onAreaChange(type, val){
this.$set(this.form, type, val)
},
onLineChange(row){
this.getProductFee(row)
this.updateEnabledTransports()
// 获取发货人
getConsignor(){
if(!this.consignorContact){
this.consignor = null
}
getCustomer(this.consignorContact.customerId).then(res => {
this.consignor = res.data
})
},
onChannelChange(row){
this.getProductFee(row)
// 获取收货人
getConsignee(){
if(!this.consigneeContact){
this.consignee = null
}
getCustomer(this.consigneeContact.customerId).then(res => {
this.consignee = res.data
})
},
onProductAttrChange(row, attr){
console.log(attr)
this.getProductFee(row)
this.calculationPrice(row)
/* // 需要强制刷新,否则勾选框不更新
this.$forceUpdate() */
},
// 更新运输方式
updateEnabledTransports(){
let enabled = {}
this.productList.forEach(prod => {
if(prod.transportId){
if(!enabled[prod.transportId]){
enabled[prod.transportId] = {
// transportId: prod.transportId,
lineIdSet: new Set(),
channelIdSet: new Set(),
routers:[]
}
}
if(prod.lineId){
enabled[prod.transportId].lineIdSet.add(prod.lineId)
}
if(prod.channelId){
enabled[prod.transportId].channelIdSet.add(prod.channelId)
}
if(prod.lineId && enabled[prod.transportId].routers.findIndex(item => { item.lineId == prod.lineId && item.channelId == prod.channelId }) < 0){
enabled[prod.transportId].routers.push({
lineId: prod.lineId,
channelId: prod.channelId
})
}
}
})
console.log(JSON.stringify(enabled))
let enabledTransportIds = Object.keys(enabled).map(item => +item)
this.transportList.forEach(transport => {
this.$set(transport, '_enabled', enabledTransportIds.indexOf(transport.transportId) > -1 && enabled[transport.transportId].routers.length)
if(transport._enabled){
Object.assign(transport, enabled[transport.transportId])
}
})
},
addProduct(data){
this.productList.push(data || {prodAttrArr:[]})
},
// 计算商品运费
getProductFee(row){
if(!row.prodId || !row.transportId || !row.lineId || !row.num || !row.weight)return false
calculationPrice(row){
console.log('calculationPrice', row)
if(!row.prodId || !this.form.transportId || !this.form.lineId)return false
if(row.prodAttrArr){
row.prodAttrIds = row.prodAttrArr.join(',')
}
getProductFeeList(row).then(res => {
this.$set(row, 'fee', res.data[0] || {})
calculationPrice({
lineId: this.form.lineId,
transportId: this.form.transportId,
channelId: this.form.channelId,
prodConditionParamList: [row]
}).then(res => {
this.$set(row, 'fee', res.data.prodCostDtoList[0] || {})
})
},
// 获取路线
......@@ -653,6 +661,7 @@ export default {
this.productList.map(item => {
item.prodAttrIds = item.prodAttrArr.join(',')
item.brandType = item.brand ? 1 : 0
})
this.transportList.map(item => {
if(item._enabled){
......@@ -664,7 +673,7 @@ export default {
if (this.form.orderNo != null) {
let data = Object.assign({}, this.form, {
customDraweeVOList: this.customDraweeVOList,
transportUpdateReqVOList: this.transportList.filter(item => item._enabled),
// transportUpdateReqVOList: this.transportList.filter(item => item._enabled),
orderItemVOList: this.productList
})
updateOrder(data).then(response => {
......@@ -673,9 +682,13 @@ export default {
});
return;
}
let data = Object.assign({}, this.form, {
let data = Object.assign({
consigneeId: this.consignee.id,
consignorId: this.consignor.id,
customerId: this.consignor.id
}, this.form, {
customDraweeVOList: this.customDraweeVOList,
transportUpdateReqVOList: this.transportList.filter(item => item._enabled),
// transportUpdateReqVOList: this.transportList.filter(item => item._enabled),
orderItemVOList: this.productList
})
// 添加的提交
......
<template>
<div class="fee-application">
<h1>费用申请-{{orderDetails.orderNo}}
</h1>
<el-divider></el-divider>
<el-form label-width="100px" inline>
<el-form-item label="订单号:"><div class="content">
{{orderDetails.orderNo}}
</div></el-form-item>
<el-form-item label="发货人:"><div class="content">{{orderDetails.consignorVO.name}}</div></el-form-item>
<el-form-item label="唛头"><div class="content">{{orderDetails.marks}}</div></el-form-item>
<el-form-item> <el-button @click="addCost">添加申请</el-button></el-form-item>
</el-form>
<el-table :data="list">
<el-table-column label="序号" type="index"></el-table-column>
<el-table-column label="费用类型">
<template v-slot:default="scope">
<dict-selector :type="DICT_TYPE.FEE_TYPE" v-model="scope.row.feeType" />
</template>
</el-table-column>
<el-table-column label="金额">
<template v-slot:default = 'scope'>
<el-input v-model="scope.row.applicationFee" ></el-input>
</template>
</el-table-column>
<el-table-column label="货币类型">
<template v-slot:default = 'scope'>
<dict-selector :type="DICT_TYPE.COMMISSION_CURRENCY_TYPE" v-model="scope.row.applicationFeeCurrency" />
</template>
</el-table-column>
<el-table-column label="付款类型">
<template v-slot:default = 'scope'>
<dict-selector :type="DICT_TYPE.PAY_TYPE" v-model="scope.row.payType" />
</template>
</el-table-column>
<el-table-column label="备注">
<template v-slot:default="scope">
<el-input v-model="scope.row.remarks" type="textarea"></el-input>
</template>
</el-table-column>
<el-table-column label="确认收款">
<template v-slot:default ="scope">
<dict-tag :type="DICT_TYPE.RECEIVE_FLAG" :value="scope.row.receiveFlag" />
</template>
</el-table-column>
<el-table-column label="申请人">
<template v-slot:default ="scope">
{{scope.row.status == 0 ?'未提交': scope.row.applicationAuthor}}
</template>
</el-table-column>
<el-table-column label="审核人">
<template v-slot:default ="scope">
{{scope.row.status == 0 ?'未提交': scope.row.shenhe}}
</template>
</el-table-column>
<el-table-column label="操作">
<template v-slot:default = 'scope'>
<el-button type="text" v-if="scope.row.status !== 0">{{status[scope.row.status]}}</el-button>
<el-button type="text" v-if="scope.row.status === 2">修改</el-button>
</template>
</el-table-column>
</el-table>
<div style="text-align: center;margin-top: 20px;">
<el-button style="margin-right: 30px;" @click="submit">提交</el-button>
<el-button>取消</el-button>
</div>
</div>
</template>
<script>
import {getOrder, feeApplicationListByOrderId, feeApplicationCreate} from "@/api/ecw/order";
import { getDictDatas, DICT_TYPE } from '@/utils/dict';
import Template from "@/views/cms/template";
let status = {0:'未提交',1:'审核中',2:'审核通过',3:'审核不通'}
export default {
name: "feeApplication",
components: {Template},
props:{
orderId:[Number, String],
},
data(){
return {
orderDetails:{},
list:[],
DICT_TYPE,
getDictDatas,
status
}
},
created() {
getOrder(this.orderId).then(r =>{
this.orderDetails = r.data
})
this.feeApplicationFn();
},
methods:{
feeApplicationFn(){
feeApplicationListByOrderId({orderId:this.orderId}).then(r => {
console.log(r)
})
},
addCost(){
this.list.push(
{
orderId:this.orderId,
feeType:undefined,//费用申请类型
applicationFee:undefined,//金额
applicationFeeCurrency:undefined,// 费用申请货币类型
remarks:undefined,
receiveFlag:0,
applicationAuthor:undefined,
shenhe:undefined,
status:0,
}
)
},
submit(){
feeApplicationCreate(this.list[0]).then(r=>{
console.log(r);
})
}
}
}
</script>
<style scoped lang="scss">
.fee-application {
padding: 0 20px;
h1{
font-weight: 600;
font-size: 20px;
}
.content{
width: 200px;
}
}
</style>
......@@ -145,8 +145,15 @@
v-hasPermi="['ecw:order:update']">入仓</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ecw:order:update']">退仓</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="$router.push('/order/special?id=' + scope.row.orderId)"
v-hasPermi="['ecw:order:update']">特价</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['ecw:order:delete']">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="printTagOrderId=scope.row.orderId"
v-hasPermi="['ecw:order:delete']">打印标签</el-button>
<el-button type="text" size="mini" @click="$router.push(`/order/fee-application/${scope.row.orderId}`)">费用申请</el-button>
<el-button type="text" size="mini" @click="orderId = scope.row.orderId;isShow = true" >特殊</el-button>
<el-button type="text" size="mini" @click="$router.push(`/order/associated-order/${scope.row.orderId}`)" >关联</el-button>
</template>
</el-table-column>
</el-table>
......@@ -185,6 +192,12 @@
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- <el-dialog :title="'打印标签'" visible.sync="showPrintTag">
</el-dialog> -->
<print-tag v-if="printTagOrderId !== null" :order-id="printTagOrderId" @close="printTagOrderId=null" />
<special-needs :show.sync="isShow" :order-id="orderId" ></special-needs>
</div>
</template>
......@@ -193,13 +206,16 @@ import Selector from '@/components/Selector'
import ProductSelector from '@/components/ProductSelector'
import { getProductAttrList } from '@/api/ecw/productAttr'
import CustomerSelector from '@/components/CustomerSelector'
import specialNeeds from '@/views/ecw/order/components/specialNeeds';
import { getTradeCityList } from '@/api/ecw/region'
import { createOrder, updateOrder, deleteOrder, getOrder, getOrderPage, exportOrderExcel } from "@/api/ecw/order";
import { getDictDatas, DICT_TYPE } from '@/utils/dict';
import PrintTag from './components/PrintTag'
export default {
name: "Order",
components: {
CustomerSelector, ProductSelector, Selector
CustomerSelector, ProductSelector, Selector,specialNeeds,PrintTag
},
filters: {
cargoControlStatusFilter(e, cargoControlStatusList) {
......@@ -252,60 +268,7 @@ export default {
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
orderNo: null,
number: null,
tidanNo: null,
parentNumber: null,
oldNumbers: null,
transportId: null,
lineId: null,
channelId: null,
orderType: null,
userId: null,
marks: null,
productRecord: null,
isCargoControl: null,
cargoControlStatus: null,
customsType: null,
upFile: null,
payType: null,
status: null,
isDel: null,
collectionProxy: null,
isCollection: null,
zhongPao: null,
wVolume: null,
vWeight: null,
weightUnit: null,
warehouseType: null,
countryAbbreviation: null,
countryCode: null,
sendsms: null,
commissionId: null,
documentsFile: null,
remarks: null,
isTodoOrder: null,
advanceType: null,
transFee: null,
transCurrency: null,
plateFee: null,
boxFee: null,
todoDetail: null,
advanceWho: null,
toDepartureId: null,
sumNum: null,
sumVolume: null,
sumWeight: null,
weightRatio: null,
customerId: null,
wareId: null,
areaId: null,
locationId: null,
locationName: null,
sumValue: null,
valuationFee: null,
cost: null,
pageSize: 10
},
// 表单参数
form: {},
......@@ -327,6 +290,10 @@ export default {
denominator: '', //重货比分母
dateFilterType: '', //日期筛选类别
dateFilter: [], //筛选日期
printTagOrderId: null, // 显示打印标签的订单号
isShow:false,//特殊显示
orderId:undefined,
};
},
computed: {
......@@ -343,6 +310,9 @@ export default {
getTradeCityList().then(res => this.tradeCityList = res.data)
},
methods: {
printTag(item){
},
/** 查询列表 */
getList() {
this.loading = true;
......
<template>
<div class="single-application">
<h1 class="title">
调仓申请-EC00123132N
</h1>
<el-divider></el-divider>
<h1>订单信息</h1>
<orde-details-form></orde-details-form>
<el-divider></el-divider>
<h1>货物信息</h1>
<el-table border >
<el-table-column label="序号"></el-table-column>
<el-table-column label="品名">
<template v-slot:default = "scope">
</template>
</el-table-column>
<el-table-column label="填单货物属性">
<template v-slot:default = "scope"></template>
</el-table-column>
<el-table-column label="入库货物属性">
<template v-slot:default = "scope"></template>
</el-table-column>
<el-table-column label="入库统计">
<template v-slot:default = "scope"></template>
</el-table-column>
<el-table-column label="收款货物属性">
<template v-slot:default = "scope"></template>
</el-table-column>
<el-table-column label="最后操作时间">
<template v-slot:default = "scope"></template>
</el-table-column>
<el-table-column label="状态"></el-table-column>
</el-table>
<el-row style="margin-top: 20px;line-height: 3;" type="flex" justify="center" align="center">
<el-col :span="3">
<div>
从 广州仓 调至
</div>
</el-col>
<el-col :span="3">
<el-input></el-input>
</el-col>
</el-row>
<el-divider></el-divider>
<h1>审批流程</h1>
<div style="height: 50px"></div>
<el-form label-width="100px">
<el-form-item label="抄送"></el-form-item>
<el-form-item label="抄送人"></el-form-item>
</el-form>
<div style="text-align:center">
<el-button style="margin-right: 50px">提交申请</el-button>
<el-button>取消</el-button>
</div>
</div>
</template>
<script>
import ordeDetailsForm from "@/views/ecw/order/components/ordeDetailsForm";
export default {
name: "singleApplication",
components: {ordeDetailsForm}
}
</script>
<style scoped lang="scss">
.single-application{
padding: 20px;
box-sizing: border-box;
.title{
font-size: 30px;
font-weight: 600;
}
.el-form {
.content{
min-width:230px ;
max-width: 300px;
}
}
}
</style>
<template>
<div class="app-container">
<el-card>
<div slot="header" class="card-title">申请特价</div>
<!-- 列表 -->
<div class="offer-header">
<span style="font-size: 15px;">订单号:{{ offer.number }}</span>
</div>
<el-table v-loading="loading" :data="offer.offerProdRespVOList">
<el-table-column label="序号" align="center" prop="id" type="index"></el-table-column>
<el-table-column
prop="prodTitleZh"
label="品名">
<template v-slot="{row}">
{{ row.prodTitleZh }}/{{ row.prodTitleEn }}
</template>
</el-table-column>
<el-table-column
prop="prodAttrIds"
label="填单货物属性">
<template v-slot="{row}">
{{ getProductNamesByIds(row.prodAttrIds) }}
</template>
</el-table-column>
<el-table-column
prop="address"
label="入库货物属性">
<template v-slot="{row}">
品牌:{{ row.brand ? '' : '' }}<br>
箱数:{{ row.num }}<br>
体积:{{ row.volume }}<br>
重量:{{ row.weight }}Kg
</template>
</el-table-column>
<el-table-column
prop="updateTime"
:formatter="(_, __, v) => parseTime(v)"
label="最后操作时间">
</el-table-column>
<el-table-column
label="原价">
<template v-slot="{row}">
运费:{{ row.originalSeaFreight }} {{ currentMap[row.seaFreightCurrency] }}/{{ unitMap[row.seaFreightVolume] }}
<br>
清关费:{{ row.originalClearanceFreight }} {{ currentMap[row.clearanceFreightCurrency] }}/{{ unitMap[row.clearanceFreightVolume] }}
</template>
</el-table-column>
<el-table-column
prop="address"
label="成本价">
<template v-slot="{row}">
运费:{{ row.seaFreight }} {{ currentMap[row.seaFreightCurrency] }}/{{ unitMap[row.seaFreightVolume] }}
<br>
清关费:{{ row.clearanceFreight }} {{ currentMap[row.clearanceFreightCurrency] }}/{{ unitMap[row.clearanceFreightVolume] }}
</template>
</el-table-column>
<el-table-column
prop="address"
label="销售价">
<template v-slot="{row}">
运费:{{ row.seaFreight }} {{ currentMap[row.seaFreightCurrency] }}/{{ unitMap[row.seaFreightVolume] }}
<br>
清关费:{{ row.clearanceFreight }} {{ currentMap[row.clearanceFreightCurrency] }}/{{ unitMap[row.clearanceFreightVolume] }}
</template>
</el-table-column>
<el-table-column
prop="status"
:formatter="(v) => ['取消报价', '特价审批中', '需求确认(草稿)', '跟进中', '赢单', '输单', '报价完成', '审批通过', '审批拒绝'][v.status]"
label="审核状态">
</el-table-column>
<el-table-column
prop="address"
label="操作">
<template v-slot="{row}">
<el-button size="mini" type="text" v-hasPermi="['ecw:offer:update']" @click="$router.push(`/offer/discount/${row.offerProdId}?offerId=${row.offerId}`)">优惠申请</el-button>
<!-- <el-button size="mini" type="text" v-hasPermi="['ecw:offer:update']">佣金规则</el-button>-->
<!-- <el-button size="mini" type="text" v-hasPermi="['ecw:offer:update']">管理折扣</el-button>-->
</template>
</el-table-column>
</el-table>
<div style="text-align: center;margin-top: 80px">
<el-button type="primary">申请重货优惠</el-button>
<el-button type="primary">申请泡货优惠</el-button>
<el-button type="primary">关闭窗口</el-button>
</div>
</el-card>
</div>
</template>
<script>
import {DICT_TYPE, getDictDataLabel} from '@/utils/dict'
import {getUnitList} from "@/api/ecw/unit"
import {getCurrencyList} from "@/api/ecw/currency"
import {getProductAttrList} from "@/api/ecw/productAttr"
import { parseTime } from '@/utils/ruoyi'
import {getOrder} from "@/api/ecw/order"
export default {
name: "OrderSpecial",
components: {
},
props: {
offerId: String
},
data() {
return {
parseTime,
DICT_TYPE,
getDictDataLabel,
// 遮罩层
loading: true,
list: [],
total:0,
params:{
page:1,
rows:20,
offerId:0,
type:2
},
relationId:0,
creatorName:'test',
offer: {
number: '',
offerProdRespVOList: []
},
unitList:[],
currencyList:[],
productAttrList:[],
};
},
created() {
if(this.offerId){
this.params.offerId = this.offerId
this.getOrder()
}
getUnitList().then(res => this.unitList = res.data)
getCurrencyList().then(res => this.currencyList = res.data)
getProductAttrList().then(res => this.productAttrList = res.data)
},
methods: {
getOrder(){
this.loading = true
getOrder(this.offerId).then(response => {
this.loading = false
this.offer = response.data
})
},
getProductNamesByIds(ids){
const result = []
ids.split(',').forEach(e => {
this.productAttrList.forEach(f => {
if (parseInt(e) === f.id) {
result.push(f.attrName)
}
})
})
return result.join(',')
}
},
computed: {
currentMap(){
let map = {}
this.currencyList.forEach(item => {
map[item.id] = item.titleZh
})
return map
},
unitMap(){
let map = {}
this.unitList.forEach(item => {
map[item.id] = item.titleZh
})
return map
}
}
};
</script>
<style>
.card-title{
font-size: 18px;
font-weight: bold;
}
.offer-header{
padding-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
}
</style>
......@@ -87,7 +87,7 @@ export default {
data() {
return {
DICT_TYPE,
opened: true,
opened: false,
form: {
material: undefined,
time: 0
......
......@@ -56,8 +56,8 @@
label="操作">
<template v-slot="{row}">
<el-button size="mini" type="text" @click="handleWarehousing(row.prodId)">入仓</el-button>
<el-button size="mini" type="text">追加</el-button>
<el-button size="mini" type="text">退仓</el-button>
<el-button size="mini" type="text" @click="handleWarehousing(row.prodId)">追加</el-button>
<el-button size="mini" type="text" @click="handleWarehousingReturn(row)">退仓</el-button>
</template>
</el-table-column>
</el-table>
......@@ -203,6 +203,24 @@ export default {
handleWarehousing(id) {
this.warehousingId = id
this.warehousingVisible = true
},
handleWarehousingReturn(item){
this.$confirm(item.prodTitleZh + '退仓后不可恢复,是否确认退仓?', '确定要退仓?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
console.log(item.id)
this.$message({
type: 'success',
message: '删除成功!'
});
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
}
}
}
......
......@@ -74,6 +74,7 @@
<el-button size="mini" type="text" @click="operationLogFn(scope.row)">操作日志</el-button>
<el-button v-if="scope.row.identityAuditStatus !== 0 && scope.row.identityAuditStatus !== undefined" size="mini" type="text" @click="identityFn(scope.row , '1')">身份证</el-button>
<el-button v-if="scope.row.enterpriseAuditStatus !== 0 && scope.row.enterpriseAuditStatus !== undefined" size="mini" type="text" @click="identityFn(scope.row, '2')">营业执照</el-button>
<el-button size="mini" type="text" @click="deleteFn(scope.row)">删 除</el-button>
</template>
</el-table-column>
</el-table>
......@@ -224,7 +225,7 @@ import {
memberGetAuthEnterpriseInfo,
memberUserAuditIdCard,
memberUserUpdateIdCard,
memberUserUpdateEnterprise
memberUserUpdateEnterprise, setUserUpdateStatus
} from "@/api/member/user";
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
import FileUpload from "@/components/FileUpload"
......@@ -315,6 +316,18 @@ export default {
this.getList();
},
methods: {
deleteFn(row){
console.log(row)
this.$modal.confirm(`是否要删除昵称为${row.nickname}的会员`).then(function (){
return deleteUser(row.id)
}).then( res => {
if(res.code === 0) this.getList(); this.$message.success('删除成功')
}).catch(() =>{
this.$message.success('删除失败')
}
)
},
//导出
exportFn(){
this.$modal.confirm('是否确认导出所有用户数据项?').then(() => {
......@@ -329,8 +342,7 @@ export default {
handleStatusChange(row) {
let text = row.status === CommonStatusEnum.ENABLE ? "启用" : "停用";
this.$modal.confirm('确认要"' + text + '""' + row.nickname + '"用户吗?').then(function() {
// return changeUserStatus(row.id, row.status);
return
return setUserUpdateStatus({id:row.id,status:row.status})
}).then(() => {
this.$modal.msgSuccess(text + "成功");
}).catch(function() {
......@@ -422,7 +434,7 @@ export default {
seTupdateBackletter({userId:this.publicObj.id,backLetter:this.guaranteeUrl}).then(r=>{
if(r.code === 0){
this.guaranteeShow = false;
this.guaranteeUrl = true;
this.guaranteeUrl = '';
this.$message.success('保存成功');
}
})
......
......@@ -35,6 +35,7 @@
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="短信签名" align="center" prop="signature" />
<el-table-column label="英文短信签名" align="center" prop="signatureEn" />
<el-table-column label="渠道编码" align="center" prop="code">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE" :value="scope.row.code"/>
......@@ -73,6 +74,9 @@
<el-form-item label="短信签名" prop="signature">
<el-input v-model="form.signature" placeholder="请输入短信签名" />
</el-form-item>
<el-form-item label="英文短信签名" prop="signatureEn">
<el-input v-model="form.signatureEn" placeholder="请输入英文短信签名" />
</el-form-item>
<el-form-item label="渠道编码" prop="code">
<el-input v-model="form.code" placeholder="请输入渠道编码" />
</el-form-item>
......@@ -138,6 +142,7 @@ export default {
// 表单校验
rules: {
signature: [{ required: true, message: "短信签名不能为空", trigger: "blur" }],
signatureEn: [{ required: true, message: "英文短信签名不能为空", trigger: "blur" }],
code: [{ required: true, message: "渠道编码不能为空", trigger: "blur" }],
status: [{ required: true, message: "启用状态不能为空", trigger: "blur" }],
apiKey: [{ required: true, message: "短信 API 的账号不能为空", trigger: "blur" }],
......@@ -171,6 +176,7 @@ export default {
this.form = {
id: undefined,
signature: undefined,
signatureEn: undefined,
code: undefined,
status: undefined,
remark: undefined,
......
......@@ -21,6 +21,9 @@
<el-form-item label="短信 API 的模板编号" prop="apiTemplateId">
<el-input v-model="queryParams.apiTemplateId" placeholder="请输入短信 API 的模板编号" clearable size="small" @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="短信 API 的模板编号" prop="apiTemplateIdEn">
<el-input v-model="queryParams.apiTemplateIdEn" placeholder="请输入英文短信 API 的模板编号" clearable size="small" @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="短信渠道" prop="channelId">
<el-select v-model="queryParams.channelId" placeholder="请选择短信渠道" clearable>
<el-option v-for="channel in channelOptions"
......@@ -55,7 +58,8 @@
<el-table v-loading="loading" :data="list">
<el-table-column label="模板编码" align="center" prop="code" />
<el-table-column label="模板名称" align="center" prop="name" />
<el-table-column label="模板内容" align="center" prop="content" width="300" />
<el-table-column label="中文API模板编号" align="center" prop="apiTemplateId" width="120" />
<el-table-column label="中文模板内容" align="center" prop="content" width="200" />
<el-table-column label="短信类型" align="center" prop="type">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE" :value="scope.row.type"/>
......@@ -66,8 +70,8 @@
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="短信 API 的模板编号" align="center" prop="apiTemplateId" width="180" />
<el-table-column label="英文API模板编号" align="center" prop="apiTemplateIdEn" width="120" />
<el-table-column label="英文模板内容" align="center" prop="contentEn" width="100" />
<el-table-column label="短信渠道" align="center" width="120">
<template slot-scope="scope">
<div>{{ formatChannelSignature(scope.row.channelId) }}</div>
......@@ -79,6 +83,8 @@
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-share" @click="handleSendSms(scope.row)"
......@@ -116,18 +122,26 @@
<el-form-item label="模板名称" prop="name">
<el-input v-model="form.name" placeholder="请输入模板名称" />
</el-form-item>
<el-form-item label="模板内容" prop="content">
<el-input type="textarea" v-model="form.content" placeholder="请输入模板内容" />
</el-form-item>
<el-form-item label="开启状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="短信 API 模板编号" prop="apiTemplateId">
<el-form-item label="中文短信API模板编号" prop="apiTemplateId">
<el-input v-model="form.apiTemplateId" placeholder="请输入短信 API 的模板编号" />
</el-form-item>
<el-form-item label="模板内容" prop="content">
<el-input type="textarea" v-model="form.content" placeholder="请输入模板内容" />
</el-form-item>
<el-form-item label="英文短信API模板编号" prop="apiTemplateIdEn">
<el-input v-model="form.apiTemplateIdEn" placeholder="请输入英文短信API模板编号" />
</el-form-item>
<el-form-item label="英文模板内容" prop="contentEn">
<el-input type="textarea" v-model="form.contentEn" placeholder="请输入英文模板内容" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
......@@ -144,6 +158,22 @@
<el-form-item label="模板内容" prop="content">
<el-input v-model="sendSmsForm.content" type="textarea" placeholder="请输入模板内容" readonly />
</el-form-item>
<el-form-item label="英文模板内容" prop="contentEn">
<el-input v-model="sendSmsForm.contentEn" type="textarea" placeholder="请输入英文模板内容" readonly />
</el-form-item>
<!-- <el-table-column-->
<!-- prop="areaCode"-->
<!-- label="区号">-->
<!-- <template v-slot:header>-->
<!-- 区号 <span style="color: #ff0000">*</span>-->
<!-- </template>-->
<!--&lt;!&ndash; <template v-slot="{row}">&ndash;&gt;-->
<!-- <el-select v-model="areaCode" placeholder="请选择区号" filterable>-->
<!-- <el-option v-for="(item, index) in countryList"-->
<!-- :key="index" :label="item.nameShort + item.nameZh + '(' + item.tel + ')'" :value="item.tel" />-->
<!-- </el-select>-->
<!--&lt;!&ndash; </template>&ndash;&gt;-->
<!-- </el-table-column>-->
<el-form-item label="手机号" prop="mobile">
<el-input v-model="sendSmsForm.mobile" placeholder="请输入手机号" />
</el-form-item>
......@@ -164,6 +194,7 @@
import { createSmsTemplate, updateSmsTemplate, deleteSmsTemplate, getSmsTemplate, getSmsTemplatePage,
exportSmsTemplateExcel, sendSms } from "@/api/system/sms/smsTemplate";
import { getSimpleSmsChannels } from "@/api/system/sms/smsChannel";
import {getCountryListAll} from "@/api/ecw/country";
export default {
name: "SmsTemplate",
......@@ -193,6 +224,7 @@ export default {
code: null,
content: null,
apiTemplateId: null,
apiTemplateIdEn: null,
channelId: null,
},
// 表单参数
......@@ -204,11 +236,15 @@ export default {
code: [{ required: true, message: "模板编码不能为空", trigger: "blur" }],
name: [{ required: true, message: "模板名称不能为空", trigger: "blur" }],
content: [{ required: true, message: "模板内容不能为空", trigger: "blur" }],
apiTemplateId: [{ required: true, message: "短信 API 的模板编号不能为空", trigger: "blur" }],
contentEn: [{ required: true, message: "英文模板内容不能为空", trigger: "blur" }],
apiTemplateId: [{ required: true, message: "中文短信API的模板编号不能为空", trigger: "blur" }],
apiTemplateIdEn: [{ required: true, message: "英文短信API的模板编号不能为空", trigger: "blur" }],
channelId: [{ required: true, message: "短信渠道编号不能为空", trigger: "change" }],
},
// 短信渠道
channelOptions: [],
countryList: [],
areaCode:"",
// 发送短信
sendSmsOpen: false,
sendSmsForm: {
......@@ -227,6 +263,10 @@ export default {
getSimpleSmsChannels().then(response => {
this.channelOptions = response.data;
})
getCountryListAll().then(r => {
this.countryList = r.data
})
},
methods: {
/** 查询列表 */
......@@ -343,6 +383,7 @@ export default {
this.resetSendSms(row);
// 设置参数
this.sendSmsForm.content = row.content;
this.sendSmsForm.contentEn = row.contentEn;
this.sendSmsForm.params = row.params;
this.sendSmsForm.templateCode = row.code;
this.sendSmsForm.templateParams = row.params.reduce(function(obj, item) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment