运营段修改
This commit is contained in:
parent
2cc637b129
commit
e4397049ee
425
index.html
425
index.html
@ -1,214 +1,235 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="renderer" content="webkit" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<title>瑷胜科技管理系统</title>
|
||||
<!--[if lt IE 11
|
||||
]><script>
|
||||
window.location.href = '/html/ie.html';
|
||||
</script><!
|
||||
[endif]-->
|
||||
<style>
|
||||
html,
|
||||
body,
|
||||
#app {
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="renderer" content="webkit" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<title>瑷胜科技管理系统</title>
|
||||
<!--[if lt IE 11
|
||||
]><script>
|
||||
window.location.href = '/html/ie.html';
|
||||
</script><!
|
||||
[endif]-->
|
||||
<style>
|
||||
html,
|
||||
body,
|
||||
#app {
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.chromeframe {
|
||||
margin: 0.2em 0;
|
||||
background: #ccc;
|
||||
color: #000;
|
||||
padding: 0.2em 0;
|
||||
}
|
||||
|
||||
#loader-wrapper {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 999999;
|
||||
}
|
||||
|
||||
#loader {
|
||||
display: block;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
margin: -75px 0 0 -75px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-webkit-animation: spin 2s linear infinite;
|
||||
-ms-animation: spin 2s linear infinite;
|
||||
-moz-animation: spin 2s linear infinite;
|
||||
-o-animation: spin 2s linear infinite;
|
||||
animation: spin 2s linear infinite;
|
||||
z-index: 1001;
|
||||
}
|
||||
|
||||
#loader:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-webkit-animation: spin 3s linear infinite;
|
||||
-moz-animation: spin 3s linear infinite;
|
||||
-o-animation: spin 3s linear infinite;
|
||||
-ms-animation: spin 3s linear infinite;
|
||||
animation: spin 3s linear infinite;
|
||||
}
|
||||
|
||||
#loader:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
bottom: 15px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-moz-animation: spin 1.5s linear infinite;
|
||||
-o-animation: spin 1.5s linear infinite;
|
||||
-ms-animation: spin 1.5s linear infinite;
|
||||
-webkit-animation: spin 1.5s linear infinite;
|
||||
animation: spin 1.5s linear infinite;
|
||||
}
|
||||
|
||||
@-webkit-keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
.chromeframe {
|
||||
margin: 0.2em 0;
|
||||
background: #ccc;
|
||||
color: #000;
|
||||
padding: 0.2em 0;
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
#loader-wrapper {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 999999;
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
#loader {
|
||||
display: block;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
margin: -75px 0 0 -75px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-webkit-animation: spin 2s linear infinite;
|
||||
-ms-animation: spin 2s linear infinite;
|
||||
-moz-animation: spin 2s linear infinite;
|
||||
-o-animation: spin 2s linear infinite;
|
||||
animation: spin 2s linear infinite;
|
||||
z-index: 1001;
|
||||
#loader-wrapper .loader-section {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 51%;
|
||||
height: 100%;
|
||||
background: #7171c6;
|
||||
z-index: 1000;
|
||||
-webkit-transform: translateX(0);
|
||||
-ms-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section.section-left {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section.section-right {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper .loader-section.section-left {
|
||||
-webkit-transform: translateX(-100%);
|
||||
-ms-transform: translateX(-100%);
|
||||
transform: translateX(-100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper .loader-section.section-right {
|
||||
-webkit-transform: translateX(100%);
|
||||
-ms-transform: translateX(100%);
|
||||
transform: translateX(100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
}
|
||||
|
||||
.loaded #loader {
|
||||
opacity: 0;
|
||||
-webkit-transition: all 0.3s ease-out;
|
||||
transition: all 0.3s ease-out;
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper {
|
||||
visibility: hidden;
|
||||
-webkit-transform: translateY(-100%);
|
||||
-ms-transform: translateY(-100%);
|
||||
transform: translateY(-100%);
|
||||
-webkit-transition: all 0.3s 1s ease-out;
|
||||
transition: all 0.3s 1s ease-out;
|
||||
}
|
||||
|
||||
.no-js #loader-wrapper {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.no-js h1 {
|
||||
color: #222222;
|
||||
}
|
||||
|
||||
#loader-wrapper .load_title {
|
||||
font-family: 'Open Sans';
|
||||
color: #fff;
|
||||
font-size: 19px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
z-index: 9999999999999;
|
||||
position: absolute;
|
||||
top: 60%;
|
||||
opacity: 1;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
#loader-wrapper .load_title span {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
font-size: 13px;
|
||||
color: #fff;
|
||||
opacity: 0.5;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.difyChatbotConfig = {
|
||||
token: 'ri85V8MYF4Ld0s95',
|
||||
baseUrl: 'http://localhost:801',
|
||||
systemVariables: {
|
||||
// user_id: 'YOU CAN DEFINE USER ID HERE',
|
||||
// conversation_id: 'YOU CAN DEFINE CONVERSATION ID HERE, IT MUST BE A VALID UUID',
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script src="http://localhost:801/embed.min.js" id="ri85V8MYF4Ld0s95" defer></script>
|
||||
<style>
|
||||
#dify-chatbot-bubble-button {
|
||||
background-color: #1c64f2 !important;
|
||||
}
|
||||
|
||||
#loader:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-webkit-animation: spin 3s linear infinite;
|
||||
-moz-animation: spin 3s linear infinite;
|
||||
-o-animation: spin 3s linear infinite;
|
||||
-ms-animation: spin 3s linear infinite;
|
||||
animation: spin 3s linear infinite;
|
||||
}
|
||||
#dify-chatbot-bubble-window {
|
||||
width: 24rem !important;
|
||||
height: 40rem !important;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
#loader:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
left: 15px;
|
||||
right: 15px;
|
||||
bottom: 15px;
|
||||
border-radius: 50%;
|
||||
border: 3px solid transparent;
|
||||
border-top-color: #fff;
|
||||
-moz-animation: spin 1.5s linear infinite;
|
||||
-o-animation: spin 1.5s linear infinite;
|
||||
-ms-animation: spin 1.5s linear infinite;
|
||||
-webkit-animation: spin 1.5s linear infinite;
|
||||
animation: spin 1.5s linear infinite;
|
||||
}
|
||||
|
||||
@-webkit-keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes spin {
|
||||
0% {
|
||||
-webkit-transform: rotate(0deg);
|
||||
-ms-transform: rotate(0deg);
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-ms-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 51%;
|
||||
height: 100%;
|
||||
background: #7171c6;
|
||||
z-index: 1000;
|
||||
-webkit-transform: translateX(0);
|
||||
-ms-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section.section-left {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
#loader-wrapper .loader-section.section-right {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper .loader-section.section-left {
|
||||
-webkit-transform: translateX(-100%);
|
||||
-ms-transform: translateX(-100%);
|
||||
transform: translateX(-100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper .loader-section.section-right {
|
||||
-webkit-transform: translateX(100%);
|
||||
-ms-transform: translateX(100%);
|
||||
transform: translateX(100%);
|
||||
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
}
|
||||
|
||||
.loaded #loader {
|
||||
opacity: 0;
|
||||
-webkit-transition: all 0.3s ease-out;
|
||||
transition: all 0.3s ease-out;
|
||||
}
|
||||
|
||||
.loaded #loader-wrapper {
|
||||
visibility: hidden;
|
||||
-webkit-transform: translateY(-100%);
|
||||
-ms-transform: translateY(-100%);
|
||||
transform: translateY(-100%);
|
||||
-webkit-transition: all 0.3s 1s ease-out;
|
||||
transition: all 0.3s 1s ease-out;
|
||||
}
|
||||
|
||||
.no-js #loader-wrapper {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.no-js h1 {
|
||||
color: #222222;
|
||||
}
|
||||
|
||||
#loader-wrapper .load_title {
|
||||
font-family: 'Open Sans';
|
||||
color: #fff;
|
||||
font-size: 19px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
z-index: 9999999999999;
|
||||
position: absolute;
|
||||
top: 60%;
|
||||
opacity: 1;
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
#loader-wrapper .load_title span {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
font-size: 13px;
|
||||
color: #fff;
|
||||
opacity: 0.5;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">
|
||||
<div id="loader-wrapper">
|
||||
<div id="loader"></div>
|
||||
<div class="loader-section section-left"></div>
|
||||
<div class="loader-section section-right"></div>
|
||||
<div class="load_title">正在加载系统资源,请耐心等待</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
<body>
|
||||
<div id="app">
|
||||
<div id="loader-wrapper">
|
||||
<div id="loader"></div>
|
||||
<div class="loader-section section-left"></div>
|
||||
<div class="loader-section section-right"></div>
|
||||
<div class="load_title">正在加载系统资源,请耐心等待</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -50,6 +50,7 @@
|
||||
"vue-cropper": "1.1.1",
|
||||
"vue-i18n": "10.0.5",
|
||||
"vue-json-pretty": "2.4.0",
|
||||
"vue-qr": "^4.0.9",
|
||||
"vue-router": "4.4.5",
|
||||
"vue-types": "5.1.3",
|
||||
"vxe-table": "4.5.22"
|
||||
|
@ -18,3 +18,5 @@ onMounted(() => {
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
@ -38,10 +38,6 @@ export const getLogisticsOrder = (id: string | number): AxiosPromise<InquiryQuot
|
||||
// });
|
||||
// };
|
||||
|
||||
/**
|
||||
* 新增物流订单
|
||||
* @param data
|
||||
*/
|
||||
export const addLogisticsOrder = (data: LogisticsOrderForm) => {
|
||||
return request({
|
||||
url: '/amz/logisticsOrder',
|
||||
@ -50,6 +46,17 @@ export const addLogisticsOrder = (data: LogisticsOrderForm) => {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询快到期的物流订单
|
||||
* @param data
|
||||
*/
|
||||
export const queryLogisticsOrder = () => {
|
||||
return request({
|
||||
url: '/amz/logisticsOrder/query',
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 创建物流订单
|
||||
* @param data
|
||||
@ -84,3 +91,5 @@ export const delLogisticsOrder = (id: string | number | Array<string | number>)
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
@ -159,6 +159,8 @@ export interface LogisticsOrderQuery extends PageQuery {
|
||||
*/
|
||||
logisticsChannel?: string;
|
||||
|
||||
channelId?: string | number;
|
||||
|
||||
/**
|
||||
* 目的地仓库名称或编码
|
||||
*/
|
||||
|
@ -120,3 +120,15 @@ export const delLogisticsQuote = (id: string | number | Array<string | number>)
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 报表
|
||||
* @param data
|
||||
*/
|
||||
export const queryLogisticsQuoteReport = (queryData: any) => {
|
||||
return request({
|
||||
url: '/amz/logisticsQuote/report',
|
||||
method: 'post',
|
||||
data: queryData
|
||||
});
|
||||
};
|
||||
|
63
src/api/amz/purchaseOrder/index.ts
Normal file
63
src/api/amz/purchaseOrder/index.ts
Normal file
@ -0,0 +1,63 @@
|
||||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import { PurchaseOrderVO, PurchaseOrderForm, PurchaseOrderQuery } from '@/api/amz/purchaseOrder/types';
|
||||
|
||||
/**
|
||||
* 查询采购单主列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
|
||||
export const listPurchaseOrder = (query?: PurchaseOrderQuery): AxiosPromise<PurchaseOrderVO[]> => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrder/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询采购单主详细
|
||||
* @param orderSn
|
||||
*/
|
||||
export const getPurchaseOrder = (orderSn: string | number): AxiosPromise<PurchaseOrderVO> => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrder/' + orderSn,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增采购单主
|
||||
* @param data
|
||||
*/
|
||||
export const addPurchaseOrder = (data: PurchaseOrderForm) => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrder',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改采购单主
|
||||
* @param data
|
||||
*/
|
||||
export const updatePurchaseOrder = (data: PurchaseOrderForm) => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrder',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除采购单主
|
||||
* @param orderSn
|
||||
*/
|
||||
export const delPurchaseOrder = (orderSn: string | number | Array<string | number>) => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrder/' + orderSn,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
760
src/api/amz/purchaseOrder/types.ts
Normal file
760
src/api/amz/purchaseOrder/types.ts
Normal file
@ -0,0 +1,760 @@
|
||||
export interface PurchaseOrderVO {
|
||||
/**
|
||||
* 采购单号
|
||||
*/
|
||||
orderSn: string;
|
||||
|
||||
/**
|
||||
* 自定义单号
|
||||
*/
|
||||
customOrderSn: string;
|
||||
|
||||
/**
|
||||
* 供应商ID
|
||||
*/
|
||||
supplierId: string | number;
|
||||
|
||||
/**
|
||||
* 供应商名称
|
||||
*/
|
||||
supplierName: string;
|
||||
|
||||
/**
|
||||
* 采购店铺名称
|
||||
*/
|
||||
storeName: string;
|
||||
|
||||
/**
|
||||
* 采购员ID
|
||||
*/
|
||||
optUid: string | number;
|
||||
|
||||
/**
|
||||
* 审核人姓名
|
||||
*/
|
||||
auditorRealname: string;
|
||||
|
||||
/**
|
||||
* 操作人姓名
|
||||
*/
|
||||
optRealname: string;
|
||||
|
||||
/**
|
||||
* 最后操作人姓名
|
||||
*/
|
||||
lastRealname: string;
|
||||
|
||||
/**
|
||||
* 下单时间
|
||||
*/
|
||||
orderTime: string;
|
||||
|
||||
/**
|
||||
* 应付货款(手工)
|
||||
*/
|
||||
payment: string;
|
||||
|
||||
/**
|
||||
* 审核人员ID
|
||||
*/
|
||||
auditorUid: string | number;
|
||||
|
||||
/**
|
||||
* 审核时间
|
||||
*/
|
||||
auditorTime: string;
|
||||
|
||||
/**
|
||||
* 最后操作人员ID
|
||||
*/
|
||||
lastUid: string | number;
|
||||
|
||||
/**
|
||||
* 最后操作时间
|
||||
*/
|
||||
lastTime: string;
|
||||
|
||||
/**
|
||||
* 作废原因
|
||||
*/
|
||||
reason: string;
|
||||
|
||||
/**
|
||||
* 是否含税:0 否,1 是
|
||||
*/
|
||||
isTax: number;
|
||||
|
||||
/**
|
||||
* 采购单状态:-1 作废, 3 待提交, 1 待下单, 2 待签收, 9 完成, 121 待审核, 122 驳回, 124 作废
|
||||
*/
|
||||
status: number;
|
||||
|
||||
/**
|
||||
* 状态说明
|
||||
*/
|
||||
statusText: string;
|
||||
|
||||
/**
|
||||
* 支付状态说明
|
||||
*/
|
||||
payStatusText: string;
|
||||
|
||||
/**
|
||||
* 到货状态:1 未到货, 2 部分到货, 3 全部到货
|
||||
*/
|
||||
statusShipped: number;
|
||||
|
||||
/**
|
||||
* 到货状态说明
|
||||
*/
|
||||
statusShippedText: string;
|
||||
|
||||
/**
|
||||
* 货物总价
|
||||
*/
|
||||
amountTotal: number;
|
||||
|
||||
/**
|
||||
* 总金额
|
||||
*/
|
||||
totalPrice: number;
|
||||
|
||||
/**
|
||||
* 币种符号
|
||||
*/
|
||||
icon: string;
|
||||
|
||||
/**
|
||||
* 付款状态:0 未申请, 1 已申请, 2 部分付款, 3 已付款
|
||||
*/
|
||||
payStatus: number;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
remark: string;
|
||||
|
||||
/**
|
||||
* 其他费用
|
||||
*/
|
||||
otherFee: number;
|
||||
|
||||
/**
|
||||
* 其他费用币种
|
||||
*/
|
||||
otherCurrency: string;
|
||||
|
||||
/**
|
||||
* 费用分摊方式:0 不分摊, 1 按金额, 2 按数量
|
||||
*/
|
||||
feePartType: number;
|
||||
|
||||
/**
|
||||
* 运费
|
||||
*/
|
||||
shippingPrice: number;
|
||||
|
||||
/**
|
||||
* 运费币种
|
||||
*/
|
||||
shippingCurrency: string;
|
||||
|
||||
/**
|
||||
* 采购币种
|
||||
*/
|
||||
purchaseCurrency: string;
|
||||
|
||||
/**
|
||||
* 采购汇率
|
||||
*/
|
||||
purchaseRate: number;
|
||||
|
||||
/**
|
||||
* 采购总量
|
||||
*/
|
||||
quantityTotal: number;
|
||||
|
||||
/**
|
||||
* 仓库ID
|
||||
*/
|
||||
wid: string | number;
|
||||
|
||||
/**
|
||||
* 仓库名称
|
||||
*/
|
||||
wareHouseName: string;
|
||||
|
||||
/**
|
||||
* 仓库名(备份)
|
||||
*/
|
||||
wareHouseBakName: string;
|
||||
|
||||
/**
|
||||
* 入库量
|
||||
*/
|
||||
quantityEntry: number;
|
||||
|
||||
/**
|
||||
* 实际采购量
|
||||
*/
|
||||
quantityReal: number;
|
||||
|
||||
/**
|
||||
* 待到货量
|
||||
*/
|
||||
quantityReceive: number;
|
||||
|
||||
/**
|
||||
* 采购方ID
|
||||
*/
|
||||
purchaserId: string | number;
|
||||
|
||||
/**
|
||||
* 联系人
|
||||
*/
|
||||
contactPerson: string;
|
||||
|
||||
/**
|
||||
* 联系方式
|
||||
*/
|
||||
contactNumber: string;
|
||||
|
||||
/**
|
||||
* 结算方式:7 现结, 8 月结
|
||||
*/
|
||||
settlementMethod: number;
|
||||
|
||||
/**
|
||||
* 结算描述
|
||||
*/
|
||||
settlementDescription: string;
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*/
|
||||
paymentMethod: number;
|
||||
|
||||
/**
|
||||
* 交货天数
|
||||
*/
|
||||
estDlvDays: number;
|
||||
|
||||
/**
|
||||
* 订单状态
|
||||
*/
|
||||
orderStatus: string;
|
||||
|
||||
/**
|
||||
* 交货时间
|
||||
*/
|
||||
deliveryTime: string;
|
||||
|
||||
/**
|
||||
* 订单交付变动天数
|
||||
*/
|
||||
dlvTimeVar: number;
|
||||
}
|
||||
|
||||
export interface PurchaseOrderForm extends BaseEntity {
|
||||
/**
|
||||
* 采购单号
|
||||
*/
|
||||
orderSn?: string;
|
||||
|
||||
/**
|
||||
* 自定义单号
|
||||
*/
|
||||
customOrderSn?: string;
|
||||
|
||||
/**
|
||||
* 供应商ID
|
||||
*/
|
||||
supplierId?: string | number;
|
||||
|
||||
/**
|
||||
* 供应商名称
|
||||
*/
|
||||
supplierName?: string;
|
||||
|
||||
/**
|
||||
* 采购员ID
|
||||
*/
|
||||
optUid?: string | number;
|
||||
|
||||
/**
|
||||
* 审核人姓名
|
||||
*/
|
||||
auditorRealname?: string;
|
||||
|
||||
/**
|
||||
* 操作人姓名
|
||||
*/
|
||||
optRealname?: string;
|
||||
|
||||
/**
|
||||
* 最后操作人姓名
|
||||
*/
|
||||
lastRealname?: string;
|
||||
|
||||
/**
|
||||
* 下单时间
|
||||
*/
|
||||
orderTime?: string;
|
||||
|
||||
/**
|
||||
* 应付货款(手工)
|
||||
*/
|
||||
payment?: string;
|
||||
|
||||
/**
|
||||
* 审核人员ID
|
||||
*/
|
||||
auditorUid?: string | number;
|
||||
|
||||
/**
|
||||
* 审核时间
|
||||
*/
|
||||
auditorTime?: string;
|
||||
|
||||
/**
|
||||
* 最后操作人员ID
|
||||
*/
|
||||
lastUid?: string | number;
|
||||
|
||||
/**
|
||||
* 最后操作时间
|
||||
*/
|
||||
lastTime?: string;
|
||||
|
||||
/**
|
||||
* 作废原因
|
||||
*/
|
||||
reason?: string;
|
||||
|
||||
/**
|
||||
* 是否含税:0 否,1 是
|
||||
*/
|
||||
isTax?: number;
|
||||
|
||||
/**
|
||||
* 采购单状态:-1 作废, 3 待提交, 1 待下单, 2 待签收, 9 完成, 121 待审核, 122 驳回, 124 作废
|
||||
*/
|
||||
status?: number;
|
||||
|
||||
/**
|
||||
* 状态说明
|
||||
*/
|
||||
statusText?: string;
|
||||
|
||||
/**
|
||||
* 支付状态说明
|
||||
*/
|
||||
payStatusText?: string;
|
||||
|
||||
/**
|
||||
* 到货状态:1 未到货, 2 部分到货, 3 全部到货
|
||||
*/
|
||||
statusShipped?: number;
|
||||
|
||||
/**
|
||||
* 到货状态说明
|
||||
*/
|
||||
statusShippedText?: string;
|
||||
|
||||
/**
|
||||
* 货物总价
|
||||
*/
|
||||
amountTotal?: number;
|
||||
|
||||
/**
|
||||
* 总金额
|
||||
*/
|
||||
totalPrice?: number;
|
||||
|
||||
/**
|
||||
* 币种符号
|
||||
*/
|
||||
icon?: string;
|
||||
|
||||
/**
|
||||
* 付款状态:0 未申请, 1 已申请, 2 部分付款, 3 已付款
|
||||
*/
|
||||
payStatus?: number;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
remark?: string;
|
||||
|
||||
/**
|
||||
* 其他费用
|
||||
*/
|
||||
otherFee?: number;
|
||||
|
||||
/**
|
||||
* 其他费用币种
|
||||
*/
|
||||
otherCurrency?: string;
|
||||
|
||||
/**
|
||||
* 费用分摊方式:0 不分摊, 1 按金额, 2 按数量
|
||||
*/
|
||||
feePartType?: number;
|
||||
|
||||
/**
|
||||
* 运费
|
||||
*/
|
||||
shippingPrice?: number;
|
||||
|
||||
/**
|
||||
* 运费币种
|
||||
*/
|
||||
shippingCurrency?: string;
|
||||
|
||||
/**
|
||||
* 采购币种
|
||||
*/
|
||||
purchaseCurrency?: string;
|
||||
|
||||
/**
|
||||
* 采购汇率
|
||||
*/
|
||||
purchaseRate?: number;
|
||||
|
||||
/**
|
||||
* 采购总量
|
||||
*/
|
||||
quantityTotal?: number;
|
||||
|
||||
/**
|
||||
* 仓库ID
|
||||
*/
|
||||
wid?: string | number;
|
||||
|
||||
/**
|
||||
* 仓库名称
|
||||
*/
|
||||
wareHouseName?: string;
|
||||
|
||||
/**
|
||||
* 仓库名(备份)
|
||||
*/
|
||||
wareHouseBakName?: string;
|
||||
|
||||
/**
|
||||
* 入库量
|
||||
*/
|
||||
quantityEntry?: number;
|
||||
|
||||
/**
|
||||
* 实际采购量
|
||||
*/
|
||||
quantityReal?: number;
|
||||
|
||||
/**
|
||||
* 待到货量
|
||||
*/
|
||||
quantityReceive?: number;
|
||||
|
||||
/**
|
||||
* 采购方ID
|
||||
*/
|
||||
purchaserId?: string | number;
|
||||
|
||||
/**
|
||||
* 联系人
|
||||
*/
|
||||
contactPerson?: string;
|
||||
|
||||
/**
|
||||
* 联系方式
|
||||
*/
|
||||
contactNumber?: string;
|
||||
|
||||
/**
|
||||
* 结算方式:7 现结, 8 月结
|
||||
*/
|
||||
settlementMethod?: number;
|
||||
|
||||
/**
|
||||
* 结算描述
|
||||
*/
|
||||
settlementDescription?: string;
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*/
|
||||
paymentMethod?: number;
|
||||
|
||||
/**
|
||||
* 交货天数
|
||||
*/
|
||||
estDlvDays?: number;
|
||||
|
||||
/**
|
||||
* 订单状态
|
||||
*/
|
||||
orderStatus?: string;
|
||||
|
||||
/**
|
||||
* 交货时间
|
||||
*/
|
||||
deliveryTime?: string;
|
||||
|
||||
/**
|
||||
* 订单交付变动天数
|
||||
*/
|
||||
dlvTimeVar?: number;
|
||||
}
|
||||
|
||||
export interface PurchaseOrderQuery extends PageQuery {
|
||||
/**
|
||||
* 采购单号
|
||||
*/
|
||||
orderSn?: string;
|
||||
|
||||
/**
|
||||
* 自定义单号
|
||||
*/
|
||||
customOrderSn?: string;
|
||||
|
||||
/**
|
||||
* 供应商ID
|
||||
*/
|
||||
supplierId?: string | number;
|
||||
|
||||
/**
|
||||
* 供应商名称
|
||||
*/
|
||||
supplierName?: string;
|
||||
|
||||
/**
|
||||
* 采购员ID
|
||||
*/
|
||||
optUid?: string | number;
|
||||
|
||||
/**
|
||||
* 审核人姓名
|
||||
*/
|
||||
auditorRealname?: string;
|
||||
|
||||
/**
|
||||
* 操作人姓名
|
||||
*/
|
||||
optRealname?: string;
|
||||
|
||||
/**
|
||||
* 最后操作人姓名
|
||||
*/
|
||||
lastRealname?: string;
|
||||
|
||||
/**
|
||||
* 下单时间
|
||||
*/
|
||||
orderTime?: string;
|
||||
|
||||
/**
|
||||
* 应付货款(手工)
|
||||
*/
|
||||
payment?: string;
|
||||
|
||||
/**
|
||||
* 审核人员ID
|
||||
*/
|
||||
auditorUid?: string | number;
|
||||
|
||||
/**
|
||||
* 审核时间
|
||||
*/
|
||||
auditorTime?: string;
|
||||
|
||||
/**
|
||||
* 最后操作人员ID
|
||||
*/
|
||||
lastUid?: string | number;
|
||||
|
||||
/**
|
||||
* 最后操作时间
|
||||
*/
|
||||
lastTime?: string;
|
||||
|
||||
/**
|
||||
* 作废原因
|
||||
*/
|
||||
reason?: string;
|
||||
|
||||
/**
|
||||
* 是否含税:0 否,1 是
|
||||
*/
|
||||
isTax?: number;
|
||||
|
||||
/**
|
||||
* 采购单状态:-1 作废, 3 待提交, 1 待下单, 2 待签收, 9 完成, 121 待审核, 122 驳回, 124 作废
|
||||
*/
|
||||
status?: number;
|
||||
|
||||
/**
|
||||
* 状态说明
|
||||
*/
|
||||
statusText?: string;
|
||||
|
||||
/**
|
||||
* 支付状态说明
|
||||
*/
|
||||
payStatusText?: string;
|
||||
|
||||
/**
|
||||
* 到货状态:1 未到货, 2 部分到货, 3 全部到货
|
||||
*/
|
||||
statusShipped?: number;
|
||||
|
||||
/**
|
||||
* 到货状态说明
|
||||
*/
|
||||
statusShippedText?: string;
|
||||
|
||||
/**
|
||||
* 货物总价
|
||||
*/
|
||||
amountTotal?: number;
|
||||
|
||||
/**
|
||||
* 总金额
|
||||
*/
|
||||
totalPrice?: number;
|
||||
|
||||
/**
|
||||
* 币种符号
|
||||
*/
|
||||
icon?: string;
|
||||
|
||||
/**
|
||||
* 付款状态:0 未申请, 1 已申请, 2 部分付款, 3 已付款
|
||||
*/
|
||||
payStatus?: number;
|
||||
|
||||
/**
|
||||
* 其他费用
|
||||
*/
|
||||
otherFee?: number;
|
||||
|
||||
/**
|
||||
* 其他费用币种
|
||||
*/
|
||||
otherCurrency?: string;
|
||||
|
||||
/**
|
||||
* 费用分摊方式:0 不分摊, 1 按金额, 2 按数量
|
||||
*/
|
||||
feePartType?: number;
|
||||
|
||||
/**
|
||||
* 运费
|
||||
*/
|
||||
shippingPrice?: number;
|
||||
|
||||
/**
|
||||
* 运费币种
|
||||
*/
|
||||
shippingCurrency?: string;
|
||||
|
||||
/**
|
||||
* 采购币种
|
||||
*/
|
||||
purchaseCurrency?: string;
|
||||
|
||||
/**
|
||||
* 采购汇率
|
||||
*/
|
||||
purchaseRate?: number;
|
||||
|
||||
/**
|
||||
* 采购总量
|
||||
*/
|
||||
quantityTotal?: number;
|
||||
|
||||
/**
|
||||
* 仓库ID
|
||||
*/
|
||||
wid?: string | number;
|
||||
|
||||
/**
|
||||
* 仓库名称
|
||||
*/
|
||||
wareHouseName?: string;
|
||||
|
||||
/**
|
||||
* 仓库名(备份)
|
||||
*/
|
||||
wareHouseBakName?: string;
|
||||
|
||||
/**
|
||||
* 入库量
|
||||
*/
|
||||
quantityEntry?: number;
|
||||
|
||||
/**
|
||||
* 实际采购量
|
||||
*/
|
||||
quantityReal?: number;
|
||||
|
||||
/**
|
||||
* 待到货量
|
||||
*/
|
||||
quantityReceive?: number;
|
||||
|
||||
/**
|
||||
* 采购方ID
|
||||
*/
|
||||
purchaserId?: string | number;
|
||||
|
||||
/**
|
||||
* 联系人
|
||||
*/
|
||||
contactPerson?: string;
|
||||
|
||||
/**
|
||||
* 联系方式
|
||||
*/
|
||||
contactNumber?: string;
|
||||
|
||||
/**
|
||||
* 结算方式:7 现结, 8 月结
|
||||
*/
|
||||
settlementMethod?: number;
|
||||
|
||||
/**
|
||||
* 结算描述
|
||||
*/
|
||||
settlementDescription?: string;
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*/
|
||||
paymentMethod?: number;
|
||||
|
||||
/**
|
||||
* 交货天数
|
||||
*/
|
||||
estDlvDays?: number;
|
||||
|
||||
/**
|
||||
* 订单状态
|
||||
*/
|
||||
orderStatus?: string;
|
||||
|
||||
/**
|
||||
* 交货时间
|
||||
*/
|
||||
deliveryTime?: string;
|
||||
|
||||
/**
|
||||
* 订单交付变动天数
|
||||
*/
|
||||
dlvTimeVar?: number;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
}
|
63
src/api/amz/sendOrder/index.ts
Normal file
63
src/api/amz/sendOrder/index.ts
Normal file
@ -0,0 +1,63 @@
|
||||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import { SendOrderVO, SendOrderForm, SendOrderQuery } from '@/api/amz/sendOrder/types';
|
||||
|
||||
/**
|
||||
* 查询供应商创建的发货单列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
|
||||
export const listSendOrder = (query?: SendOrderQuery): AxiosPromise<SendOrderVO[]> => {
|
||||
return request({
|
||||
url: '/amz/sendOrder/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询供应商创建的发货单详细
|
||||
* @param id
|
||||
*/
|
||||
export const getSendOrder = (id: string | number): AxiosPromise<SendOrderVO> => {
|
||||
return request({
|
||||
url: '/amz/sendOrder/' + id,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增供应商创建的发货单
|
||||
* @param data
|
||||
*/
|
||||
export const addSendOrder = (data: SendOrderForm) => {
|
||||
return request({
|
||||
url: '/amz/sendOrder',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改供应商创建的发货单
|
||||
* @param data
|
||||
*/
|
||||
export const updateSendOrder = (data: SendOrderForm) => {
|
||||
return request({
|
||||
url: '/amz/sendOrder',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除供应商创建的发货单
|
||||
* @param id
|
||||
*/
|
||||
export const delSendOrder = (id: string | number | Array<string | number>) => {
|
||||
return request({
|
||||
url: '/amz/sendOrder/' + id,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
191
src/api/amz/sendOrder/types.ts
Normal file
191
src/api/amz/sendOrder/types.ts
Normal file
@ -0,0 +1,191 @@
|
||||
export interface SendOrderVO {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
id: string | number;
|
||||
|
||||
/**
|
||||
* 采购单号
|
||||
*/
|
||||
orderSn: string;
|
||||
|
||||
/**
|
||||
* 发货日期
|
||||
*/
|
||||
sendDate: string;
|
||||
|
||||
/**
|
||||
* 采购店铺
|
||||
*/
|
||||
storeName: string;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
productName: string;
|
||||
|
||||
/**
|
||||
* 发货数量
|
||||
*/
|
||||
quantitySend: number;
|
||||
|
||||
/**
|
||||
* 单箱产品数量
|
||||
*/
|
||||
quantityPerBox: number;
|
||||
|
||||
/**
|
||||
* 箱数
|
||||
*/
|
||||
boxCount: number;
|
||||
|
||||
/**
|
||||
* 箱子尺寸
|
||||
*/
|
||||
boxDimensions: string;
|
||||
|
||||
/**
|
||||
* 单箱重量
|
||||
*/
|
||||
weightPerBox: number;
|
||||
|
||||
/**
|
||||
* 实际采购店铺
|
||||
*/
|
||||
realStoreName: string;
|
||||
|
||||
/**
|
||||
* 发货状态(pending=未发货,confirm=确认发货, processing=发货中,completed=发货完成)
|
||||
*/
|
||||
sendStatus: string;
|
||||
|
||||
}
|
||||
|
||||
export interface SendOrderForm extends BaseEntity {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
id?: string | number;
|
||||
|
||||
/**
|
||||
* 采购单号
|
||||
*/
|
||||
orderSn?: string;
|
||||
|
||||
/**
|
||||
* 发货日期
|
||||
*/
|
||||
sendDate?: string;
|
||||
|
||||
/**
|
||||
* 采购店铺
|
||||
*/
|
||||
storeName?: string;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
productName?: string;
|
||||
|
||||
/**
|
||||
* 发货数量
|
||||
*/
|
||||
quantitySend?: number;
|
||||
|
||||
/**
|
||||
* 单箱产品数量
|
||||
*/
|
||||
quantityPerBox?: number;
|
||||
|
||||
/**
|
||||
* 箱数
|
||||
*/
|
||||
boxCount?: number;
|
||||
|
||||
/**
|
||||
* 箱子尺寸
|
||||
*/
|
||||
boxDimensions?: string;
|
||||
|
||||
/**
|
||||
* 单箱重量
|
||||
*/
|
||||
weightPerBox?: number;
|
||||
|
||||
/**
|
||||
* 实际采购店铺
|
||||
*/
|
||||
realStoreName?: string;
|
||||
|
||||
/**
|
||||
* 发货状态(pending=未发货,confirm=确认发货, processing=发货中,completed=发货完成)
|
||||
*/
|
||||
sendStatus?: string;
|
||||
|
||||
}
|
||||
|
||||
export interface SendOrderQuery extends PageQuery {
|
||||
|
||||
/**
|
||||
* 采购单号
|
||||
*/
|
||||
orderSn?: string;
|
||||
|
||||
/**
|
||||
* 发货日期
|
||||
*/
|
||||
sendDate?: string;
|
||||
|
||||
/**
|
||||
* 采购店铺
|
||||
*/
|
||||
storeName?: string;
|
||||
|
||||
/**
|
||||
* 产品名称
|
||||
*/
|
||||
productName?: string;
|
||||
|
||||
/**
|
||||
* 发货数量
|
||||
*/
|
||||
quantitySend?: number;
|
||||
|
||||
/**
|
||||
* 单箱产品数量
|
||||
*/
|
||||
quantityPerBox?: number;
|
||||
|
||||
/**
|
||||
* 箱数
|
||||
*/
|
||||
boxCount?: number;
|
||||
|
||||
/**
|
||||
* 箱子尺寸
|
||||
*/
|
||||
boxDimensions?: string;
|
||||
|
||||
/**
|
||||
* 单箱重量
|
||||
*/
|
||||
weightPerBox?: number;
|
||||
|
||||
/**
|
||||
* 实际采购店铺
|
||||
*/
|
||||
realStoreName?: string;
|
||||
|
||||
/**
|
||||
* 发货状态(pending=未发货,confirm=确认发货, processing=发货中,completed=发货完成)
|
||||
*/
|
||||
sendStatus?: string;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
}
|
||||
|
||||
|
||||
|
63
src/api/amz/shipForward/index.ts
Normal file
63
src/api/amz/shipForward/index.ts
Normal file
@ -0,0 +1,63 @@
|
||||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import { ShipForwardVO, ShipForwardForm, ShipForwardQuery } from '@/api/amz/shipForward/types';
|
||||
|
||||
/**
|
||||
* 查询货件转发列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
|
||||
export const listShipForward = (query?: ShipForwardQuery): AxiosPromise<ShipForwardVO[]> => {
|
||||
return request({
|
||||
url: '/amz/shipForward/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询货件转发详细
|
||||
* @param id
|
||||
*/
|
||||
export const getShipForward = (id: string | number): AxiosPromise<ShipForwardVO> => {
|
||||
return request({
|
||||
url: '/amz/shipForward/' + id,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增货件转发
|
||||
* @param data
|
||||
*/
|
||||
export const addShipForward = (data: ShipForwardForm) => {
|
||||
return request({
|
||||
url: '/amz/shipForward',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改货件转发
|
||||
* @param data
|
||||
*/
|
||||
export const updateShipForward = (data: ShipForwardForm) => {
|
||||
return request({
|
||||
url: '/amz/shipForward',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除货件转发
|
||||
* @param id
|
||||
*/
|
||||
export const delShipForward = (id: string | number | Array<string | number>) => {
|
||||
return request({
|
||||
url: '/amz/shipForward/' + id,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
260
src/api/amz/shipForward/types.ts
Normal file
260
src/api/amz/shipForward/types.ts
Normal file
@ -0,0 +1,260 @@
|
||||
export interface ShipForwardVO {
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
id: string | number;
|
||||
|
||||
/**
|
||||
* 采购单号
|
||||
*/
|
||||
orderSn: string;
|
||||
|
||||
/**
|
||||
* 采购店铺名称
|
||||
*/
|
||||
storeName: string;
|
||||
|
||||
/**
|
||||
* 产品唯一标识码
|
||||
*/
|
||||
sku: string;
|
||||
|
||||
/**
|
||||
* 产品全称
|
||||
*/
|
||||
productName: string;
|
||||
|
||||
/**
|
||||
* 实际发货数量
|
||||
*/
|
||||
quantitySend: number;
|
||||
|
||||
/**
|
||||
* 发货供应商名称
|
||||
*/
|
||||
outSupplierName: string;
|
||||
|
||||
/**
|
||||
* 发货供应商系统ID
|
||||
*/
|
||||
outSupplierId: string | number;
|
||||
|
||||
/**
|
||||
* 收货供应商名称
|
||||
*/
|
||||
inSupplierName: string;
|
||||
|
||||
/**
|
||||
* 收货供应商系统ID
|
||||
*/
|
||||
inSupplierId: string | number;
|
||||
|
||||
/**
|
||||
* 计划发货起始时间
|
||||
*/
|
||||
shipmentStart: string;
|
||||
|
||||
/**
|
||||
* 计划发货截止时间
|
||||
*/
|
||||
shipmentEnd: string;
|
||||
|
||||
/**
|
||||
* 订单跟进人姓名
|
||||
*/
|
||||
trackerName: string;
|
||||
|
||||
/**
|
||||
* 订单跟进人系统ID
|
||||
*/
|
||||
trackerId: string | number;
|
||||
|
||||
/**
|
||||
* 转发状态(pending=未转发,processing=转发中,completed=转发完成)
|
||||
*/
|
||||
fwdStatus: string;
|
||||
|
||||
/**
|
||||
* 发货时间
|
||||
*/
|
||||
sendTime: string;
|
||||
|
||||
/**
|
||||
* 采购单子项ID
|
||||
*/
|
||||
orderDetailId?: string | number;
|
||||
}
|
||||
|
||||
export interface ShipForwardForm extends BaseEntity {
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
id?: string | number;
|
||||
|
||||
/**
|
||||
* 采购单号
|
||||
*/
|
||||
orderSn?: string;
|
||||
|
||||
/**
|
||||
* 采购店铺名称
|
||||
*/
|
||||
storeName?: string;
|
||||
|
||||
/**
|
||||
* 产品唯一标识码
|
||||
*/
|
||||
sku?: string;
|
||||
|
||||
/**
|
||||
* 产品全称
|
||||
*/
|
||||
productName?: string;
|
||||
|
||||
/**
|
||||
* 实际发货数量
|
||||
*/
|
||||
quantitySend?: number;
|
||||
|
||||
/**
|
||||
* 发货供应商名称
|
||||
*/
|
||||
outSupplierName?: string;
|
||||
|
||||
/**
|
||||
* 发货供应商系统ID
|
||||
*/
|
||||
outSupplierId?: string | number;
|
||||
|
||||
/**
|
||||
* 收货供应商名称
|
||||
*/
|
||||
inSupplierName?: string;
|
||||
|
||||
/**
|
||||
* 收货供应商系统ID
|
||||
*/
|
||||
inSupplierId?: string | number;
|
||||
|
||||
/**
|
||||
* 计划发货起始时间
|
||||
*/
|
||||
shipmentStart?: string;
|
||||
|
||||
/**
|
||||
* 计划发货截止时间
|
||||
*/
|
||||
shipmentEnd?: string;
|
||||
|
||||
/**
|
||||
* 订单跟进人姓名
|
||||
*/
|
||||
trackerName?: string;
|
||||
|
||||
/**
|
||||
* 订单跟进人系统ID
|
||||
*/
|
||||
trackerId?: string | number;
|
||||
|
||||
/**
|
||||
* 转发状态(pending=未转发,processing=转发中,completed=转发完成)
|
||||
*/
|
||||
fwdStatus?: string;
|
||||
|
||||
/**
|
||||
* 发货时间
|
||||
*/
|
||||
sendTime?: string;
|
||||
|
||||
/**
|
||||
* 采购单子项ID
|
||||
*/
|
||||
orderDetailId?: string | number;
|
||||
/**
|
||||
* 请求类型
|
||||
*/
|
||||
type?: string;
|
||||
}
|
||||
|
||||
export interface ShipForwardQuery extends PageQuery {
|
||||
/**
|
||||
* 采购单号
|
||||
*/
|
||||
orderSn?: string;
|
||||
|
||||
/**
|
||||
* 采购店铺名称
|
||||
*/
|
||||
storeName?: string;
|
||||
|
||||
/**
|
||||
* 产品唯一标识码
|
||||
*/
|
||||
sku?: string;
|
||||
|
||||
/**
|
||||
* 产品全称
|
||||
*/
|
||||
productName?: string;
|
||||
|
||||
/**
|
||||
* 实际发货数量
|
||||
*/
|
||||
quantitySend?: number;
|
||||
|
||||
/**
|
||||
* 发货供应商名称
|
||||
*/
|
||||
outSupplierName?: string;
|
||||
|
||||
/**
|
||||
* 发货供应商系统ID
|
||||
*/
|
||||
outSupplierId?: string | number;
|
||||
|
||||
/**
|
||||
* 收货供应商名称
|
||||
*/
|
||||
inSupplierName?: string;
|
||||
|
||||
/**
|
||||
* 收货供应商系统ID
|
||||
*/
|
||||
inSupplierId?: string | number;
|
||||
|
||||
/**
|
||||
* 计划发货起始时间
|
||||
*/
|
||||
shipmentStart?: string;
|
||||
|
||||
/**
|
||||
* 计划发货截止时间
|
||||
*/
|
||||
shipmentEnd?: string;
|
||||
|
||||
/**
|
||||
* 订单跟进人姓名
|
||||
*/
|
||||
trackerName?: string;
|
||||
|
||||
/**
|
||||
* 订单跟进人系统ID
|
||||
*/
|
||||
trackerId?: string | number;
|
||||
|
||||
/**
|
||||
* 转发状态(pending=未转发,processing=转发中,completed=转发完成)
|
||||
*/
|
||||
fwdStatus?: string;
|
||||
|
||||
/**
|
||||
* 发货时间
|
||||
*/
|
||||
sendTime?: string;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
type: string;
|
||||
}
|
@ -12,6 +12,14 @@ export function authBinding(source: string, tenantId: string) {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export function authBindingWechat() {
|
||||
return request({
|
||||
url: '/auth/generate-auth-url',
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
// 解绑账号
|
||||
export function authUnlock(authId: string) {
|
||||
return request({
|
||||
|
@ -1,9 +1,10 @@
|
||||
import {DeptTreeVO, DeptVO} from './../dept/types';
|
||||
import { DeptTreeVO, DeptVO } from './../dept/types';
|
||||
import { RoleVO } from '@/api/system/role/types';
|
||||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import { UserForm, UserQuery, UserVO, UserInfoVO } from './types';
|
||||
import { parseStrEmpty } from '@/utils/asinkj';
|
||||
import { PostVO } from '@/api/system/post/types';
|
||||
|
||||
/**
|
||||
* 查询用户列表
|
||||
@ -209,6 +210,17 @@ export const deptTreeSelect = (): AxiosPromise<DeptTreeVO[]> => {
|
||||
});
|
||||
};
|
||||
|
||||
export const roleSelectPost = (roleIds?: (number | string)[]): AxiosPromise<UserVO[]> => {
|
||||
return request({
|
||||
url: '/system/user/roleSelect',
|
||||
method: 'post',
|
||||
data: {
|
||||
// POST 请求使用 data 传递参数
|
||||
roleIds: roleIds
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
export default {
|
||||
listUser,
|
||||
getUser,
|
||||
|
184
src/components/ChannelCascader/index.vue
Normal file
184
src/components/ChannelCascader/index.vue
Normal file
@ -0,0 +1,184 @@
|
||||
<!-- ChannelCascader.vue -->
|
||||
<template>
|
||||
<el-cascader
|
||||
v-model="selectedValue"
|
||||
:props="cascaderProps"
|
||||
:placeholder="placeholder"
|
||||
:options="groupedChannels"
|
||||
:filterable="filterable"
|
||||
:disabled="disabled"
|
||||
:show-all-levels="false"
|
||||
@change="handleChange"
|
||||
clearable
|
||||
>
|
||||
<template #default="{ node, data }">
|
||||
<div class="flex items-center">
|
||||
<span>{{ data.label }}</span>
|
||||
<span v-if="node.isLeaf" class="ml-2 text-gray-400 text-sm">
|
||||
{{ data.code }}
|
||||
<!-- 根据实际字段显示渠道编码 -->
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-cascader>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, watch, onMounted } from 'vue';
|
||||
import { listAllLogisticsChannel } from '@/api/amz/logisticsChannel';
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: [String, Number, Array],
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '请选择物流渠道'
|
||||
},
|
||||
filterable: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
disabled: Boolean
|
||||
});
|
||||
|
||||
const emit = defineEmits(['update:modelValue', 'change']);
|
||||
|
||||
const groupedChannels = ref([]);
|
||||
const selectedValue = ref(props.modelValue);
|
||||
|
||||
const cascaderProps = {
|
||||
emitPath: false
|
||||
};
|
||||
|
||||
// 监听外部值变化
|
||||
watch(
|
||||
() => props.modelValue,
|
||||
(newVal) => {
|
||||
selectedValue.value = newVal;
|
||||
}
|
||||
);
|
||||
|
||||
// 初始化加载数据
|
||||
onMounted(async () => {
|
||||
await loadChannels();
|
||||
});
|
||||
|
||||
const loadChannels = async () => {
|
||||
try {
|
||||
const res = await listAllLogisticsChannel();
|
||||
groupedChannels.value = transformChannels(res.rows); // 注意这里使用 res.rows
|
||||
} catch (error) {
|
||||
console.error('物流渠道加载失败:', error);
|
||||
ElMessage.error('渠道数据加载失败');
|
||||
}
|
||||
};
|
||||
|
||||
// 定义映射关系,将编码转换为中文标签
|
||||
const countryMap = {
|
||||
us: '美国',
|
||||
cn: '中国',
|
||||
jp: '日本',
|
||||
kr: '韩国',
|
||||
sg: '新加坡',
|
||||
de: '德国',
|
||||
fr: '法国',
|
||||
gb: '英国',
|
||||
it: '意大利',
|
||||
es: '西班牙',
|
||||
ru: '俄罗斯',
|
||||
ca: '加拿大',
|
||||
au: '澳大利亚',
|
||||
in: '印度',
|
||||
br: '巴西',
|
||||
za: '南非',
|
||||
mx: '墨西哥'
|
||||
};
|
||||
|
||||
const shippingMethodMap = {
|
||||
air: '空运',
|
||||
sea: '海运'
|
||||
// 可扩展其他运输方式
|
||||
};
|
||||
|
||||
function transformChannels(channels) {
|
||||
const result = [];
|
||||
const countryGroups = {}; // 按国家缓存顶级节点
|
||||
|
||||
channels.forEach((channel) => {
|
||||
const { country, shippingMethod, channelName, id } = channel;
|
||||
|
||||
// 处理国家节点
|
||||
const countryValue = country;
|
||||
const countryLabel = countryMap[country] || country;
|
||||
if (!countryGroups[countryValue]) {
|
||||
countryGroups[countryValue] = {
|
||||
value: countryValue,
|
||||
label: countryLabel,
|
||||
children: []
|
||||
};
|
||||
result.push(countryGroups[countryValue]);
|
||||
}
|
||||
|
||||
// 处理运输方式节点
|
||||
const methodValue = shippingMethod;
|
||||
const methodLabel = shippingMethodMap[shippingMethod] || shippingMethod;
|
||||
let methodNode = countryGroups[countryValue].children.find((m) => m.value === methodValue);
|
||||
if (!methodNode) {
|
||||
methodNode = {
|
||||
value: methodValue,
|
||||
label: methodLabel,
|
||||
children: []
|
||||
};
|
||||
countryGroups[countryValue].children.push(methodNode);
|
||||
}
|
||||
|
||||
// 添加渠道节点
|
||||
methodNode.children.push({
|
||||
value: id,
|
||||
label: channelName
|
||||
});
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// // 数据结构转换方法
|
||||
// const transformData = (items) => {
|
||||
// return items.map((item) => ({
|
||||
// channelId: item.id, // 假设你的返回字段是 id
|
||||
// channelName: item.name, // 假设你的返回字段是 name
|
||||
// code: item.code, // 额外携带的渠道编码
|
||||
// children: item.children ? transformData(item.children) : undefined
|
||||
// }));
|
||||
// };
|
||||
|
||||
const handleChange = (value) => {
|
||||
console.log('handleChange', value);
|
||||
console.log('groupedChannels.value', groupedChannels.value);
|
||||
emit('update:modelValue', value);
|
||||
|
||||
const node = findNode(value, groupedChannels.value);
|
||||
if (node != null) {
|
||||
emit('change', {
|
||||
value,
|
||||
node: findNode(value, groupedChannels.value).label
|
||||
});
|
||||
} else {
|
||||
emit('change', {
|
||||
value,
|
||||
node: null
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 递归查找节点
|
||||
const findNode = (value, options) => {
|
||||
for (const item of options) {
|
||||
if (item.value === value) return item;
|
||||
if (item.children) {
|
||||
const found = findNode(value, item.children);
|
||||
if (found) return found;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
</script>
|
259
src/components/FbaPlanFileUpload/index.vue
Normal file
259
src/components/FbaPlanFileUpload/index.vue
Normal file
@ -0,0 +1,259 @@
|
||||
<template>
|
||||
<div class="upload-file">
|
||||
<el-upload
|
||||
ref="fileUploadRef"
|
||||
multiple
|
||||
:action="uploadFileUrl"
|
||||
:before-upload="handleBeforeUpload"
|
||||
:file-list="fileList"
|
||||
:limit="limit"
|
||||
:on-error="handleUploadError"
|
||||
:on-exceed="handleExceed"
|
||||
:on-success="handleUploadSuccess"
|
||||
:show-file-list="false"
|
||||
:headers="headers"
|
||||
class="upload-file-uploader"
|
||||
>
|
||||
<!-- 上传按钮 -->
|
||||
<el-button plain icon="Plus" type="danger">导入文件</el-button>
|
||||
</el-upload>
|
||||
<!-- 上传提示 -->
|
||||
<div v-if="showTip" class="el-upload__tip">
|
||||
请上传
|
||||
<template v-if="fileSize">
|
||||
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
|
||||
</template>
|
||||
<template v-if="fileType">
|
||||
格式为 <b style="color: #f56c6c">{{ fileType.join('/') }}</b>
|
||||
</template>
|
||||
的文件
|
||||
</div>
|
||||
<!-- 文件列表 -->
|
||||
<transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
|
||||
<li v-for="(file, index) in fileList" :key="file.uid" class="el-upload-list__item ele-upload-list__item-content">
|
||||
<el-link :href="`${file.url}`" :underline="false" target="_blank">
|
||||
<span class="el-icon-document"> {{ getFileName(file.name) }} </span>
|
||||
</el-link>
|
||||
<div class="ele-upload-list__item-content-action">
|
||||
<el-button type="danger" link @click="handleDelete(index)">删除</el-button>
|
||||
</div>
|
||||
</li>
|
||||
</transition-group>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { propTypes } from '@/utils/propTypes';
|
||||
import { delOss, listByIds } from '@/api/system/oss';
|
||||
import { globalHeaders } from '@/utils/request';
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: [String, Object, Array],
|
||||
default: () => []
|
||||
},
|
||||
// 数量限制
|
||||
limit: propTypes.number.def(5),
|
||||
// 大小限制(MB)
|
||||
fileSize: propTypes.number.def(5),
|
||||
// 文件类型, 例如['png', 'jpg', 'jpeg']
|
||||
fileType: propTypes.array.def(['doc', 'xls', 'ppt', 'txt', 'pdf']),
|
||||
// 是否显示提示
|
||||
isShowTip: propTypes.bool.def(true),
|
||||
onFinished: {
|
||||
type: Function,
|
||||
default: () => {}
|
||||
}
|
||||
});
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const emit = defineEmits(['update:modelValue']);
|
||||
const number = ref(0);
|
||||
const uploadList = ref<any[]>([]);
|
||||
|
||||
const baseUrl = import.meta.env.VITE_APP_BASE_API;
|
||||
const uploadFileUrl = ref(baseUrl + '/amz/shipmentPlan/importData'); // 上传文件服务器地址
|
||||
const headers = ref(globalHeaders());
|
||||
|
||||
const fileList = ref<any[]>([]);
|
||||
const showTip = computed(() => props.isShowTip && (props.fileType || props.fileSize));
|
||||
|
||||
const fileUploadRef = ref<ElUploadInstance>();
|
||||
|
||||
watch(
|
||||
() => props.modelValue,
|
||||
async (val) => {
|
||||
if (val) {
|
||||
let temp = 1;
|
||||
// 首先将值转为数组
|
||||
let list: any[] = [];
|
||||
if (Array.isArray(val)) {
|
||||
list = val;
|
||||
} else {
|
||||
const res = await listByIds(val);
|
||||
list = res.data.map((oss) => {
|
||||
return {
|
||||
name: oss.originalName,
|
||||
url: oss.url,
|
||||
ossId: oss.ossId
|
||||
};
|
||||
});
|
||||
}
|
||||
// 然后将数组转为对象数组
|
||||
fileList.value = list.map((item) => {
|
||||
item = { name: item.name, url: item.url, ossId: item.ossId };
|
||||
item.uid = item.uid || new Date().getTime() + temp++;
|
||||
return item;
|
||||
});
|
||||
} else {
|
||||
fileList.value = [];
|
||||
return [];
|
||||
}
|
||||
},
|
||||
{ deep: true, immediate: true }
|
||||
);
|
||||
|
||||
// 上传前校检格式和大小
|
||||
const handleBeforeUpload = (file: any) => {
|
||||
// 校检文件类型
|
||||
if (props.fileType.length) {
|
||||
const fileName = file.name.split('.');
|
||||
const fileExt = fileName[fileName.length - 1];
|
||||
const isTypeOk = props.fileType.indexOf(fileExt) >= 0;
|
||||
if (!isTypeOk) {
|
||||
proxy?.$modal.msgError(`文件格式不正确, 请上传${props.fileType.join('/')}格式文件!`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 校检文件名是否包含特殊字符
|
||||
if (file.name.includes(',')) {
|
||||
proxy?.$modal.msgError('文件名不正确,不能包含英文逗号!');
|
||||
return false;
|
||||
}
|
||||
// 校检文件大小
|
||||
if (props.fileSize) {
|
||||
const isLt = file.size / 1024 / 1024 < props.fileSize;
|
||||
if (!isLt) {
|
||||
proxy?.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
proxy?.$modal.loading('正在上传文件,请稍候...');
|
||||
number.value++;
|
||||
return true;
|
||||
};
|
||||
|
||||
// 文件个数超出
|
||||
const handleExceed = () => {
|
||||
proxy?.$modal.msgError(`上传文件数量不能超过 ${props.limit} 个!`);
|
||||
};
|
||||
|
||||
// 上传失败
|
||||
const handleUploadError = () => {
|
||||
proxy?.$modal.msgError('上传文件失败');
|
||||
|
||||
number.value--;
|
||||
if (number.value === 0) {
|
||||
props.onFinished({
|
||||
success: false,
|
||||
fileList: fileList.value,
|
||||
response: null
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 上传成功回调
|
||||
const handleUploadSuccess = (res: any, file: UploadFile) => {
|
||||
if (res.code === 200) {
|
||||
// uploadList.value.push({
|
||||
// name: res.data.fileName,
|
||||
// url: res.data.url,
|
||||
// ossId: res.data.ossId
|
||||
// });
|
||||
// uploadedSuccessfully();
|
||||
proxy?.$modal.msgSuccess('上传文件成功');
|
||||
} else {
|
||||
// number.value--;
|
||||
// proxy?.$modal.closeLoading();
|
||||
// proxy?.$modal.msgError(res.msg);
|
||||
// fileUploadRef.value?.handleRemove(file);
|
||||
// uploadedSuccessfully();
|
||||
proxy?.$modal.msgError('上传文件失败');
|
||||
}
|
||||
proxy?.$modal.closeLoading();
|
||||
|
||||
number.value--;
|
||||
if (number.value === 0) {
|
||||
props.onFinished({
|
||||
success: res.code === 200,
|
||||
fileList: fileList.value,
|
||||
response: res
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 删除文件
|
||||
const handleDelete = (index: number) => {
|
||||
let ossId = fileList.value[index].ossId;
|
||||
delOss(ossId);
|
||||
fileList.value.splice(index, 1);
|
||||
emit('update:modelValue', listToString(fileList.value));
|
||||
};
|
||||
|
||||
// 上传结束处理
|
||||
const uploadedSuccessfully = () => {
|
||||
if (number.value > 0 && uploadList.value.length === number.value) {
|
||||
fileList.value = fileList.value.filter((f) => f.url !== undefined).concat(uploadList.value);
|
||||
uploadList.value = [];
|
||||
number.value = 0;
|
||||
emit('update:modelValue', listToString(fileList.value));
|
||||
proxy?.$modal.closeLoading();
|
||||
}
|
||||
};
|
||||
|
||||
// 获取文件名称
|
||||
const getFileName = (name: string) => {
|
||||
// 如果是url那么取最后的名字 如果不是直接返回
|
||||
if (name.lastIndexOf('/') > -1) {
|
||||
return name.slice(name.lastIndexOf('/') + 1);
|
||||
} else {
|
||||
return name;
|
||||
}
|
||||
};
|
||||
|
||||
// 对象转成指定字符串分隔
|
||||
const listToString = (list: any[], separator?: string) => {
|
||||
let strs = '';
|
||||
separator = separator || ',';
|
||||
list.forEach((item) => {
|
||||
if (item.ossId) {
|
||||
strs += item.ossId + separator;
|
||||
}
|
||||
});
|
||||
return strs != '' ? strs.substring(0, strs.length - 1) : '';
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.upload-file-uploader {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.upload-file-list .el-upload-list__item {
|
||||
border: 1px solid #e4e7ed;
|
||||
line-height: 2;
|
||||
margin-bottom: 10px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.upload-file-list .ele-upload-list__item-content {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.ele-upload-list__item-content-action .el-link {
|
||||
margin-right: 10px;
|
||||
}
|
||||
</style>
|
@ -25,8 +25,8 @@
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<el-form-item label="用户名称" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" />
|
||||
<el-form-item label="用户登录名" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户登录名" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号码" prop="phonenumber">
|
||||
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable @keyup.enter="handleQuery" />
|
||||
@ -61,8 +61,8 @@
|
||||
>
|
||||
<vxe-column type="checkbox" width="50" align="center" />
|
||||
<vxe-column key="userId" title="用户编号" align="center" field="userId" />
|
||||
<vxe-column key="userName" title="用户名称" align="center" field="userName" />
|
||||
<vxe-column key="nickName" title="用户昵称" align="center" field="nickName" />
|
||||
<vxe-column key="userName" title="用户登录名" align="center" field="userName" />
|
||||
<vxe-column key="nickName" title="用户名称" align="center" field="nickName" />
|
||||
<vxe-column key="deptName" title="部门" align="center" field="deptName" />
|
||||
<vxe-column key="phonenumber" title="手机号码" align="center" field="phonenumber" width="120" />
|
||||
<vxe-column key="status" title="状态" align="center">
|
||||
|
@ -1,15 +1,17 @@
|
||||
<template>
|
||||
<section class="app-main">
|
||||
<router-view v-slot="{ Component, route }">
|
||||
<transition v-if="!route.meta.noCache" :enter-active-class="animante" mode="out-in">
|
||||
<keep-alive v-if="!route.meta.noCache" :include="tagsViewStore.cachedViews">
|
||||
<component :is="Component" v-if="!route.meta.link" :key="route.path" />
|
||||
</keep-alive>
|
||||
</transition>
|
||||
<transition v-if="route.meta.noCache" :enter-active-class="animante" mode="out-in">
|
||||
<component :is="Component" v-if="!route.meta.link && route.meta.noCache" :key="route.path" />
|
||||
</transition>
|
||||
</router-view>
|
||||
<el-watermark :font="font" :content="userNick">
|
||||
<router-view v-slot="{ Component, route }">
|
||||
<transition v-if="!route.meta.noCache" :enter-active-class="animante" mode="out-in">
|
||||
<keep-alive v-if="!route.meta.noCache" :include="tagsViewStore.cachedViews">
|
||||
<component :is="Component" v-if="!route.meta.link" :key="route.path" />
|
||||
</keep-alive>
|
||||
</transition>
|
||||
<transition v-if="route.meta.noCache" :enter-active-class="animante" mode="out-in">
|
||||
<component :is="Component" v-if="!route.meta.link && route.meta.noCache" :key="route.path" />
|
||||
</transition>
|
||||
</router-view>
|
||||
</el-watermark>
|
||||
<iframe-toggle />
|
||||
</section>
|
||||
</template>
|
||||
@ -17,12 +19,35 @@
|
||||
<script setup name="AppMain" lang="ts">
|
||||
import useSettingsStore from '@/store/modules/settings';
|
||||
import useTagsViewStore from '@/store/modules/tagsView';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
|
||||
import IframeToggle from './IframeToggle/index.vue';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const route = useRoute();
|
||||
const tagsViewStore = useTagsViewStore();
|
||||
const userStore = useUserStore();
|
||||
|
||||
const font = reactive({
|
||||
color: 'rgba(0, 0, 0, .06)'
|
||||
});
|
||||
|
||||
const currentUser = userStore.currentUser;
|
||||
|
||||
const userNick = computed(() => {
|
||||
// if (roles.includes('superadmin')) {
|
||||
// return '超级管理员';
|
||||
// } else if (roles.includes('wuliu')) {
|
||||
// return '物流商';
|
||||
// } else if (roles.includes('yunying')) {
|
||||
// return '运营';
|
||||
// } else if (roles.includes('manager')) {
|
||||
// return '管理员';
|
||||
// } else {
|
||||
// return '普通用户';
|
||||
// }
|
||||
return currentUser.userName;
|
||||
});
|
||||
// 随机动画集合
|
||||
const animante = ref<string>('');
|
||||
const animationEnable = ref(useSettingsStore().animationEnable);
|
||||
@ -40,16 +65,16 @@ watch(
|
||||
);
|
||||
|
||||
onMounted(() => {
|
||||
addIframe()
|
||||
})
|
||||
addIframe();
|
||||
});
|
||||
|
||||
watchEffect((route) => {
|
||||
addIframe()
|
||||
})
|
||||
addIframe();
|
||||
});
|
||||
|
||||
function addIframe() {
|
||||
if (route.meta.link) {
|
||||
useTagsViewStore().addIframeView(route)
|
||||
useTagsViewStore().addIframeView(route);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
@ -24,8 +24,11 @@
|
||||
</el-select>
|
||||
|
||||
<!-- <header-search id="header-search" class="right-menu-item" /> -->
|
||||
<div class="pull-right mr-5">
|
||||
<el-tag type="warning" class="role-name">{{ userNick }}</el-tag>
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
<el-tag type="warning" class="role-name">{{ roleNmae }}</el-tag>
|
||||
<el-tag type="success" class="role-name">{{ roleNmae }}</el-tag>
|
||||
</div>
|
||||
<search-menu ref="searchMenuRef" />
|
||||
<el-tooltip content="搜索" effect="dark" placement="bottom">
|
||||
@ -111,6 +114,8 @@ const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
const userId = ref(userStore.userId);
|
||||
const roles = userStore.roles;
|
||||
const currentUser = userStore.currentUser;
|
||||
|
||||
const companyName = ref(undefined);
|
||||
const tenantList = ref<TenantVO[]>([]);
|
||||
// 是否切换了租户
|
||||
@ -123,17 +128,33 @@ const searchMenuRef = ref<InstanceType<typeof SearchMenu>>();
|
||||
console.log('roles', roles);
|
||||
|
||||
const roleNmae = computed(() => {
|
||||
if (roles.includes('superadmin')) {
|
||||
return '超级管理员';
|
||||
} else if (roles.includes('wuliu')) {
|
||||
return '物流商';
|
||||
} else if (roles.includes('yunying')) {
|
||||
return '运营';
|
||||
} else if (roles.includes('manager')) {
|
||||
return '管理员';
|
||||
} else {
|
||||
return '普通用户';
|
||||
}
|
||||
// if (roles.includes('superadmin')) {
|
||||
// return '超级管理员';
|
||||
// } else if (roles.includes('wuliu')) {
|
||||
// return '物流商';
|
||||
// } else if (roles.includes('yunying')) {
|
||||
// return '运营';
|
||||
// } else if (roles.includes('manager')) {
|
||||
// return '管理员';
|
||||
// } else {
|
||||
// return '普通用户';
|
||||
// }
|
||||
return currentUser.roles[0].roleName;
|
||||
});
|
||||
|
||||
const userNick = computed(() => {
|
||||
// if (roles.includes('superadmin')) {
|
||||
// return '超级管理员';
|
||||
// } else if (roles.includes('wuliu')) {
|
||||
// return '物流商';
|
||||
// } else if (roles.includes('yunying')) {
|
||||
// return '运营';
|
||||
// } else if (roles.includes('manager')) {
|
||||
// return '管理员';
|
||||
// } else {
|
||||
// return '普通用户';
|
||||
// }
|
||||
return currentUser.nickName;
|
||||
});
|
||||
const openSearchMenu = () => {
|
||||
searchMenuRef.value?.openSearch();
|
||||
|
@ -31,15 +31,19 @@ import './permission';
|
||||
// 国际化
|
||||
import i18n from '@/lang/index';
|
||||
|
||||
|
||||
|
||||
// vxeTable
|
||||
import VXETable from 'vxe-table';
|
||||
import 'vxe-table/lib/style.css';
|
||||
|
||||
VXETable.config({
|
||||
zIndex: 999999
|
||||
});
|
||||
|
||||
// 修改 el-dialog 默认点击遮照为不关闭
|
||||
import { ElDialog } from 'element-plus';
|
||||
|
||||
ElDialog.props.closeOnClickModal.default = false;
|
||||
|
||||
const app = createApp(App);
|
||||
@ -51,6 +55,7 @@ app.use(store);
|
||||
app.use(i18n);
|
||||
app.use(VXETable);
|
||||
app.use(plugins);
|
||||
|
||||
// 自定义指令
|
||||
directive(app);
|
||||
|
||||
|
@ -4,6 +4,7 @@ import { login as loginApi, logout as logoutApi, getInfo as getUserInfo } from '
|
||||
import { LoginData } from '@/api/types';
|
||||
import defAva from '@/assets/images/profile.jpg';
|
||||
import store from '@/store';
|
||||
import { UserVO } from '@/api/system/user/types';
|
||||
|
||||
export const useUserStore = defineStore('user', () => {
|
||||
const token = ref(getToken());
|
||||
@ -14,6 +15,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
const avatar = ref('');
|
||||
const roles = ref<Array<string>>([]); // 用户角色编码集合 → 判断路由权限
|
||||
const permissions = ref<Array<string>>([]); // 用户权限编码集合 → 判断按钮权限
|
||||
const currentUser = ref<UserVO>(<UserVO>{});
|
||||
|
||||
/**
|
||||
* 登录
|
||||
@ -41,7 +43,9 @@ export const useUserStore = defineStore('user', () => {
|
||||
|
||||
if (data.roles && data.roles.length > 0) {
|
||||
// 验证返回的roles是否是一个非空数组
|
||||
|
||||
roles.value = data.roles;
|
||||
console.log('非空数组roles', roles.value);
|
||||
permissions.value = data.permissions;
|
||||
} else {
|
||||
roles.value = ['ROLE_DEFAULT'];
|
||||
@ -51,6 +55,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
avatar.value = profile;
|
||||
userId.value = user.userId;
|
||||
tenantId.value = user.tenantId;
|
||||
currentUser.value = user;
|
||||
return Promise.resolve();
|
||||
}
|
||||
return Promise.reject(err);
|
||||
@ -77,6 +82,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
avatar,
|
||||
roles,
|
||||
permissions,
|
||||
currentUser,
|
||||
login,
|
||||
getInfo,
|
||||
logout,
|
||||
@ -85,6 +91,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
});
|
||||
|
||||
export default useUserStore;
|
||||
|
||||
// 非setup
|
||||
export function useUserStoreHook() {
|
||||
return useUserStore(store);
|
||||
|
4
src/types/global.d.ts
vendored
4
src/types/global.d.ts
vendored
@ -53,6 +53,7 @@ declare global {
|
||||
/** 其他参数 */
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
/**
|
||||
* 字典数据 数据配置
|
||||
*/
|
||||
@ -80,7 +81,9 @@ declare global {
|
||||
form: T;
|
||||
queryParams: D;
|
||||
rules: ElFormRules;
|
||||
rules2?: ElFormRules;
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询参数
|
||||
*/
|
||||
@ -88,6 +91,7 @@ declare global {
|
||||
pageNum: number;
|
||||
pageSize: number;
|
||||
}
|
||||
|
||||
declare interface LayoutSetting {
|
||||
/**
|
||||
* 是否显示顶部导航
|
||||
|
@ -2,8 +2,8 @@
|
||||
<el-row>
|
||||
<el-dialog v-model="visible" title="选择用户" width="800px" top="5vh" append-to-body>
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<el-form-item label="用户名称" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" />
|
||||
<el-form-item label="用户登录名" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户登录名" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号码" prop="phonenumber">
|
||||
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable @keyup.enter="handleQuery" />
|
||||
@ -26,8 +26,8 @@
|
||||
:header-cell-class-name="headerCellClassName"
|
||||
>
|
||||
<el-table-column type="selection" width="55"></el-table-column>
|
||||
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="用户登录名" prop="userName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="用户名称" prop="nickName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
|
@ -4,18 +4,18 @@
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<el-form-item label="询价单号" prop="inquiryNo">
|
||||
<el-input v-model="queryParams.inquiryNo" placeholder="请输入询价单号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发起人id" prop="requesterId">
|
||||
<el-input v-model="queryParams.requesterId" placeholder="请输入发起人id" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="询价单号" prop="inquiryNo">-->
|
||||
<!-- <el-input v-model="queryParams.inquiryNo" placeholder="请输入询价单号" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="发起人id" prop="requesterId">-->
|
||||
<!-- <el-input v-model="queryParams.requesterId" placeholder="请输入发起人id" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="目的地" prop="destination">
|
||||
<el-input v-model="queryParams.destination" placeholder="请输入目的地" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="运输方式" prop="transportChannel">
|
||||
<el-input v-model="queryParams.transportChannel" placeholder="请输入运输方式" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="运输方式" prop="transportChannel">-->
|
||||
<!-- <el-input v-model="queryParams.transportChannel" placeholder="请输入运输方式" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="报价截止时间" prop="deadline">
|
||||
<el-date-picker
|
||||
clearable
|
||||
@ -25,30 +25,31 @@
|
||||
placeholder="请选择报价截止时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="渠道ID" prop="channelId">
|
||||
<el-input v-model="queryParams.channelId" placeholder="请输入渠道ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="渠道ID" prop="channelId">-->
|
||||
<!-- <el-input v-model="queryParams.channelId" placeholder="请输入渠道ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="渠道名称" prop="channelName">
|
||||
<el-input v-model="queryParams.channelName" placeholder="请输入渠道名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="报价有效的开始日期" prop="effectiveStartTime">
|
||||
<el-date-picker
|
||||
clearable
|
||||
v-model="queryParams.effectiveStartTime"
|
||||
type="date"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="请选择报价有效的开始日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="报价有效的结束日期" prop="effectiveEndTime">
|
||||
<el-date-picker
|
||||
clearable
|
||||
v-model="queryParams.effectiveEndTime"
|
||||
type="date"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="请选择报价有效的结束日期"
|
||||
/>
|
||||
<!-- <el-input v-model="queryParams.channelName" placeholder="请输入渠道名称" clearable @keyup.enter="handleQuery" />-->
|
||||
<channel-cascader v-model="queryParams.channelId" @change="handleChannelChange" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="报价有效的开始日期" prop="effectiveStartTime">-->
|
||||
<!-- <el-date-picker-->
|
||||
<!-- clearable-->
|
||||
<!-- v-model="queryParams.effectiveStartTime"-->
|
||||
<!-- type="date"-->
|
||||
<!-- value-format="YYYY-MM-DD"-->
|
||||
<!-- placeholder="请选择报价有效的开始日期"-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="报价有效的结束日期" prop="effectiveEndTime">-->
|
||||
<!-- <el-date-picker-->
|
||||
<!-- clearable-->
|
||||
<!-- v-model="queryParams.effectiveEndTime"-->
|
||||
<!-- type="date"-->
|
||||
<!-- value-format="YYYY-MM-DD"-->
|
||||
<!-- placeholder="请选择报价有效的结束日期"-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
@ -286,7 +287,10 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="后端物流类型" prop="backLogisticsType">
|
||||
<el-input v-model="quoteForm.backLogisticsType" placeholder="请输入后端物流类型" />
|
||||
<!-- <el-input v-model="quoteForm.backLogisticsType" placeholder="请输入后端物流类型" />-->
|
||||
<el-select v-model="quoteForm.backLogisticsType" clearable placeholder="请输入后端物流类型">
|
||||
<el-option v-for="dict in back_logistics_type" :key="dict.value" :label="dict.label" :value="dict.label" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
@ -318,6 +322,8 @@ const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
const { biz_shipping_method } = toRefs<any>(proxy?.useDict('biz_shipping_method'));
|
||||
|
||||
const { back_logistics_type } = toRefs<any>(proxy?.useDict('back_logistics_type'));
|
||||
|
||||
const inquiryRequestList = ref<InquiryRequestVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
@ -431,6 +437,12 @@ const options = ref([
|
||||
}
|
||||
]);
|
||||
|
||||
const handleChannelChange = ({ value, node }) => {
|
||||
console.log('选中渠道ID:', value);
|
||||
console.log('完整渠道信息:', node);
|
||||
// 可以访问 node.code 等附加信息
|
||||
};
|
||||
|
||||
/** 查询物流询价列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
@ -546,7 +558,7 @@ const submitQuoteForm = async () => {
|
||||
quoteDialog.visible = false;
|
||||
}
|
||||
} else {
|
||||
ElMessageBox.confirm('价格没有竞争力,问他是否需要修改价格?', '提示', {
|
||||
ElMessageBox.confirm('价格没有竞争力,是否需要修改价格?', '提示', {
|
||||
confirmButtonText: '确认提交',
|
||||
cancelButtonText: '修改价格',
|
||||
type: 'warning'
|
||||
|
@ -14,7 +14,8 @@
|
||||
<el-input v-model="queryParams.logisticsProviderName" placeholder="请输入物流商名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物流渠道" prop="logisticsChannel">
|
||||
<el-input v-model="queryParams.logisticsChannel" placeholder="请输入物流渠道" clearable @keyup.enter="handleQuery" />
|
||||
<!-- <el-input v-model="queryParams.logisticsChannel" placeholder="请输入物流渠道" clearable @keyup.enter="handleQuery" />-->
|
||||
<channel-cascader v-model="selectedChannelId" @change="handleChannelChange" />
|
||||
</el-form-item>
|
||||
<el-form-item label="仓库名称" prop="destination">
|
||||
<el-input v-model="queryParams.destination" placeholder="请输入目的地仓库名称或编码" clearable @keyup.enter="handleQuery" />
|
||||
@ -251,6 +252,14 @@ const orderData = ref({
|
||||
order: ''
|
||||
});
|
||||
|
||||
const selectedChannelId = ref('');
|
||||
const handleChannelChange = ({ value, node }) => {
|
||||
console.log('选中渠道ID:', value);
|
||||
console.log('完整渠道信息:', node);
|
||||
// 可以访问 node.code 等附加信息
|
||||
queryParams.value.channelName = node;
|
||||
};
|
||||
|
||||
// 表格配置-------
|
||||
const hotSettings = ref({
|
||||
licenseKey: 'non-commercial-and-evaluation',
|
||||
@ -573,9 +582,11 @@ const data = reactive<PageData<LogisticsOrderForm, LogisticsOrderQuery>>({
|
||||
logisticsChannel: undefined,
|
||||
destination: undefined,
|
||||
boxQuantity: undefined,
|
||||
channelName: undefined,
|
||||
shipmentQuantity: undefined,
|
||||
amazonShelfDate: undefined,
|
||||
shelfTimeliness: undefined,
|
||||
channelId: undefined,
|
||||
params: {}
|
||||
},
|
||||
queryDetailParams: {
|
||||
|
475
src/views/amz/logisticsQuoteReport/index.vue
Normal file
475
src/views/amz/logisticsQuoteReport/index.vue
Normal file
@ -0,0 +1,475 @@
|
||||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="180px">
|
||||
<el-form-item label="目的地" prop="destination">
|
||||
<el-input v-model="queryParams.destination" placeholder="请输入目的地" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="报价生效日期" prop="quoteDate">
|
||||
<el-date-picker
|
||||
v-model="queryParams.quoteDate"
|
||||
type="daterange"
|
||||
range-separator="到"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:size="'default'"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasRoles="['superadmin']" v-hasPermi="['amz:logisticsQuote:add']"-->
|
||||
<!-- >新增-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button-->
|
||||
<!-- type="success"-->
|
||||
<!-- plain-->
|
||||
<!-- icon="Edit"-->
|
||||
<!-- :disabled="single"-->
|
||||
<!-- @click="handleUpdate()"-->
|
||||
<!-- v-hasRoles="['superadmin']"-->
|
||||
<!-- v-hasPermi="['amz:logisticsQuote:edit']"-->
|
||||
<!-- >修改-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button-->
|
||||
<!-- type="danger"-->
|
||||
<!-- plain-->
|
||||
<!-- icon="Delete"-->
|
||||
<!-- :disabled="multiple"-->
|
||||
<!-- @click="handleDelete()"-->
|
||||
<!-- v-hasRoles="['superadmin']"-->
|
||||
<!-- v-hasPermi="['amz:logisticsQuote:remove']"-->
|
||||
<!-- >删除-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" icon="Refresh" @click="handleQuery">刷新数据</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table :data="tableData" v-loading="loading">
|
||||
<template #empty>
|
||||
<span>没有相关数据</span>
|
||||
</template>
|
||||
|
||||
<!-- 固定列 -->
|
||||
<el-table-column prop="物流商名称" label="物流商名称" />
|
||||
|
||||
<!-- 动态多级表头 -->
|
||||
<template v-for="col in dynamicColumns" :key="col.label">
|
||||
<el-table-column v-if="col.children" :label="col.label" align="center">
|
||||
<el-table-column v-for="child in col.children" :key="child.prop" :prop="child.prop" :label="child.label" sortable align="right">
|
||||
<template #default="{ row }">
|
||||
<span v-if="child.prop.endsWith('_报价')">
|
||||
{{ row[child.prop] && row[child.prop] != 0 ? `${row[child.prop]}元` : '-' }}
|
||||
</span>
|
||||
<span v-else-if="child.prop.endsWith('_时效')">
|
||||
{{ row[child.prop] && row[child.prop] != 0 ? `${row[child.prop]}天` : '-' }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
</template>
|
||||
</el-table>
|
||||
</el-card>
|
||||
|
||||
<!-- 添加或修改物流报价对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="logisticsQuoteFormRef" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="主键ID" prop="id">
|
||||
<el-input v-model="form.id" placeholder="请输入主键ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="物流商用户ID" prop="userId">
|
||||
<el-input v-model="form.userId" placeholder="请输入物流商用户ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="目的地" prop="destination">
|
||||
<el-input v-model="form.destination" placeholder="请输入目的地" />
|
||||
</el-form-item>
|
||||
<el-form-item label="渠道名称" prop="channelName">
|
||||
<el-input v-model="form.channelName" placeholder="请输入渠道名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="基础价格" prop="price">
|
||||
<el-input v-model="form.price" placeholder="请输入基础价格" />
|
||||
</el-form-item>
|
||||
<el-form-item label="时效" prop="leadTime">
|
||||
<el-input v-model="form.leadTime" placeholder="请输入时效" />
|
||||
</el-form-item>
|
||||
<el-form-item label="附加费" prop="surcharge">
|
||||
<el-input v-model="form.surcharge" placeholder="请输入附加费" />
|
||||
</el-form-item>
|
||||
<el-form-item label="报价生效日期" prop="quoteDate">
|
||||
<el-date-picker clearable v-model="form.quoteDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择报价生效日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="报价备注" prop="remark">
|
||||
<el-input v-model="form.remark" placeholder="请输入报价备注" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="form.unit" placeholder="请输入单位" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="LogisticsQuote" lang="ts">
|
||||
import {
|
||||
listLogisticsQuote,
|
||||
getLogisticsQuote,
|
||||
delLogisticsQuote,
|
||||
addLogisticsQuote,
|
||||
updateLogisticsQuote,
|
||||
getTodayQuoteStatus,
|
||||
queryLogisticsQuoteReport
|
||||
} from '@/api/amz/logisticsQuote';
|
||||
import { LogisticsQuoteVO, LogisticsQuoteQuery, LogisticsQuoteForm } from '@/api/amz/logisticsQuote/types';
|
||||
import type { Column, TabsPaneContext } from 'element-plus';
|
||||
|
||||
import { useRoute } from 'vue-router';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
const { biz_channel_type } = toRefs<any>(proxy?.useDict('biz_channel_type'));
|
||||
import { getConfigKey } from '@/api/system/config';
|
||||
|
||||
const { sys_yes_no } = toRefs<any>(proxy?.useDict('sys_yes_no'));
|
||||
|
||||
const logisticsQuoteList = ref<LogisticsQuoteVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(false);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const logisticsQuoteFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: LogisticsQuoteForm = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
destination: undefined,
|
||||
channelName: undefined,
|
||||
price: undefined,
|
||||
leadTime: undefined,
|
||||
surcharge: undefined,
|
||||
quoteDate: undefined,
|
||||
isSubmitted: undefined,
|
||||
remark: undefined,
|
||||
channelType: undefined,
|
||||
channelId: undefined,
|
||||
isDdp: undefined,
|
||||
unit: undefined
|
||||
};
|
||||
const data = reactive<PageData<LogisticsQuoteForm, LogisticsQuoteQuery>>({
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
userId: undefined,
|
||||
destination: undefined,
|
||||
channelName: undefined,
|
||||
price: undefined,
|
||||
leadTime: undefined,
|
||||
surcharge: undefined,
|
||||
quoteDate: [new Date(), new Date()],
|
||||
isSubmitted: undefined,
|
||||
channelType: undefined,
|
||||
channelId: undefined,
|
||||
isDdp: undefined,
|
||||
unit: undefined,
|
||||
params: {}
|
||||
},
|
||||
rules: {
|
||||
id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }],
|
||||
userId: [{ required: true, message: '物流商用户ID不能为空', trigger: 'blur' }],
|
||||
destination: [{ required: true, message: '目的地不能为空', trigger: 'blur' }],
|
||||
channelName: [{ required: true, message: '渠道名称不能为空', trigger: 'blur' }],
|
||||
price: [{ required: true, message: '基础价格不能为空', trigger: 'blur' }],
|
||||
leadTime: [{ required: true, message: '时效不能为空', trigger: 'blur' }],
|
||||
surcharge: [{ required: true, message: '附加费不能为空', trigger: 'blur' }],
|
||||
quoteDate: [{ required: true, message: '报价生效日期不能为空', trigger: 'blur' }],
|
||||
isSubmitted: [{ required: true, message: '提交状态不能为空', trigger: 'blur' }],
|
||||
remark: [{ required: true, message: '报价备注不能为空', trigger: 'blur' }],
|
||||
channelType: [{ required: true, message: '渠道类型不能为空', trigger: 'change' }],
|
||||
channelId: [{ required: true, message: '渠道ID不能为空', trigger: 'blur' }],
|
||||
isDdp: [{ required: true, message: '是否双清包税不能为空', trigger: 'blur' }],
|
||||
unit: [{ required: true, message: '单位不能为空', trigger: 'blur' }]
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
const tableData = ref([]);
|
||||
const dynamicColumns = ref([]);
|
||||
|
||||
const queryData = ref<any>({
|
||||
quoteStartDate: '',
|
||||
destination: '',
|
||||
quoteEndDate: ''
|
||||
});
|
||||
|
||||
/** 查询物流报价列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
console.log('queryData=' + queryData.value);
|
||||
const res = await queryLogisticsQuoteReport(queryData.value);
|
||||
console.log('res', res);
|
||||
|
||||
dynamicColumns.value = generateColumns(res.data);
|
||||
console.log('dynamicColumns=', dynamicColumns.value);
|
||||
tableData.value = res.data;
|
||||
setTimeout(() => {
|
||||
loading.value = false;
|
||||
}, 500);
|
||||
};
|
||||
|
||||
// 生成动态表头
|
||||
// const generateColumns = (data) => {
|
||||
// const allKeys = data.reduce((acc, cur) => {
|
||||
// Object.keys(cur).forEach((key) => {
|
||||
// if (key !== '供应商名称') acc.add(key);
|
||||
// });
|
||||
// return acc;
|
||||
// }, new Set());
|
||||
// return Array.from(allKeys);
|
||||
// };
|
||||
|
||||
// const generateColumns = (data) => {
|
||||
// // 获取所有非物流商名称的字段,并过滤空值
|
||||
// const allKeys = [...new Set(data.flatMap((item) => Object.keys(item).filter((k) => k !== '物流商名称' && item[k] !== '')))];
|
||||
//
|
||||
// // 提取渠道基础名(去除_报价/_时效)
|
||||
// const baseNames = [...new Set(allKeys.map((key) => (key as string).replace(/_(报价|时效)$/, '')))];
|
||||
//
|
||||
// // 结构化排序
|
||||
// const sortedChannels = baseNames
|
||||
// .map((fullName) => {
|
||||
// // 处理带编号的渠道名(如"美国-空运-香港红单UPS_时效")
|
||||
// const parts = fullName.split('-');
|
||||
// const country = parts[0];
|
||||
// const method = parts[1];
|
||||
// const channel = parts.slice(2).join('-').replace(/_$/, ''); // 处理结尾的下划线
|
||||
// return { country, method, channel, fullName };
|
||||
// })
|
||||
// .sort((a, b) => {
|
||||
// const countryOrder = ['美国', '英国', '日本']; // 自定义国家排序
|
||||
// const methodOrder = ['空运', '海运', '陆运'];
|
||||
//
|
||||
// const countryCompare = countryOrder.indexOf(a.country) - countryOrder.indexOf(b.country);
|
||||
// const methodCompare = methodOrder.indexOf(a.method) - methodOrder.indexOf(b.method);
|
||||
// const channelCompare = a.channel.localeCompare(b.channel);
|
||||
//
|
||||
// return countryCompare || methodCompare || channelCompare;
|
||||
// });
|
||||
//
|
||||
// // 生成最终列顺序
|
||||
// const channelColumns = sortedChannels.flatMap(({ fullName }) => [`${fullName}_报价`, `${fullName}_时效`]);
|
||||
//
|
||||
// return ['物流商名称', ...channelColumns, ...allKeys.filter((k) => !(k as string).includes('_报价') && !(k as string).includes('_时效'))];
|
||||
// };
|
||||
|
||||
const generateColumns = (data) => {
|
||||
// 提取所有带_报价/_时效的字段
|
||||
const dynamicFields = [...new Set(data.flatMap((item) => Object.keys(item).filter((k) => k.includes('_报价') || k.includes('_时效'))))];
|
||||
console.log('dynamicFields=', dynamicFields);
|
||||
// 结构化处理(示例处理逻辑)
|
||||
const channelMap = dynamicFields.reduce((acc, field) => {
|
||||
const [baseName, type] = (field as string).split(/(?=_报价|_时效)/);
|
||||
const [country, method, ...channelParts] = baseName.split('-');
|
||||
const channel = channelParts.join('-');
|
||||
|
||||
if (!acc[baseName]) {
|
||||
acc[baseName] = {
|
||||
country,
|
||||
method,
|
||||
channel,
|
||||
children: []
|
||||
};
|
||||
}
|
||||
acc[baseName].children.push({
|
||||
prop: field,
|
||||
label: type.replace('_', '') // 移除下划线
|
||||
});
|
||||
return acc;
|
||||
}, {});
|
||||
console.log('channelMap=', channelMap);
|
||||
|
||||
// 排序逻辑(保持原有排序规则)
|
||||
const sortedChannels = Object.values(channelMap).sort((a, b) => {
|
||||
const countryOrder = ['美国', '英国', '日本'];
|
||||
const methodOrder = ['空运', '海运', '陆运'];
|
||||
|
||||
const countryCompare = countryOrder.indexOf(a.country) - countryOrder.indexOf(b.country);
|
||||
const methodCompare = methodOrder.indexOf(a.method) - methodOrder.indexOf(b.method);
|
||||
return countryCompare || methodCompare || a.channel.localeCompare(b.channel);
|
||||
});
|
||||
|
||||
// 生成最终列结构
|
||||
return [
|
||||
{ label: '物流商名称', prop: '物流商名称' },
|
||||
...sortedChannels.map((channel) => ({
|
||||
label: `${channel.country}-${channel.method}-${channel.channel}`,
|
||||
children: channel.children.sort((a, b) => a.label.localeCompare(b.label)) // 保证报价在前
|
||||
}))
|
||||
];
|
||||
};
|
||||
|
||||
const checkStatus = async () => {
|
||||
const res2 = await getTodayQuoteStatus();
|
||||
console.log(res2);
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
logisticsQuoteFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
console.log('handleQuery', queryParams.value.quoteDate);
|
||||
if (queryParams.value.quoteDate) {
|
||||
queryData.value = {
|
||||
quoteStartDate: queryParams.value.quoteDate[0],
|
||||
destination: queryParams.value.destination,
|
||||
quoteEndDate: queryParams.value.quoteDate[1]
|
||||
};
|
||||
} else {
|
||||
queryData.value = {
|
||||
quoteStartDate: '',
|
||||
destination: queryParams.value.destination,
|
||||
quoteEndDate: ''
|
||||
};
|
||||
}
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
setTimeout(() => {
|
||||
loading.value = false;
|
||||
}, 500);
|
||||
};
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
};
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: LogisticsQuoteVO[]) => {
|
||||
ids.value = selection.map((item) => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
};
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = '添加物流报价';
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: LogisticsQuoteVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getLogisticsQuote(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改物流报价';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
logisticsQuoteFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.id) {
|
||||
await updateLogisticsQuote(form.value).finally(() => (buttonLoading.value = false));
|
||||
} else {
|
||||
await addLogisticsQuote(form.value).finally(() => (buttonLoading.value = false));
|
||||
}
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: LogisticsQuoteVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除物流报价编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
||||
await delLogisticsQuote(_ids);
|
||||
proxy?.$modal.msgSuccess('删除成功');
|
||||
await getList();
|
||||
};
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download(
|
||||
'amz/logisticsQuote/export',
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`logisticsQuote_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
const activeName = ref('first');
|
||||
|
||||
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
||||
console.log(tab, event);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
// if (res) {
|
||||
// queryParams.value.destination = res;
|
||||
// }
|
||||
// getList();
|
||||
});
|
||||
onUpdated(() => {
|
||||
const route = useRoute();
|
||||
console.log('res333=', route.query);
|
||||
|
||||
console.log('res333=', route.query.destination);
|
||||
if (route.query.destination) {
|
||||
queryParams.value.destination = route.query.destination as string;
|
||||
}
|
||||
});
|
||||
</script>
|
898
src/views/amz/purchaseOrder/index.vue
Normal file
898
src/views/amz/purchaseOrder/index.vue
Normal file
@ -0,0 +1,898 @@
|
||||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<!-- <el-form-item label="采购单号" prop="orderSn">-->
|
||||
<!-- <el-input v-model="queryParams.orderSn" placeholder="请输入采购单号" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="自定义单号" prop="customOrderSn">-->
|
||||
<!-- <el-input v-model="queryParams.customOrderSn" placeholder="请输入自定义单号" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="供应商ID" prop="supplierId">-->
|
||||
<!-- <el-input v-model="queryParams.supplierId" placeholder="请输入供应商ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="供应商名称" prop="supplierName">-->
|
||||
<!-- <el-input v-model="queryParams.supplierName" placeholder="请输入供应商名称" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="采购员ID" prop="optUid">-->
|
||||
<!-- <el-input v-model="queryParams.optUid" placeholder="请输入采购员ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="审核人姓名" prop="auditorRealname">-->
|
||||
<!-- <el-input v-model="queryParams.auditorRealname" placeholder="请输入审核人姓名" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="操作人姓名" prop="optRealname">-->
|
||||
<!-- <el-input v-model="queryParams.optRealname" placeholder="请输入操作人姓名" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="最后操作人姓名" prop="lastRealname">-->
|
||||
<!-- <el-input v-model="queryParams.lastRealname" placeholder="请输入最后操作人姓名" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="下单时间" prop="orderTime">-->
|
||||
<!-- <el-date-picker clearable-->
|
||||
<!-- v-model="queryParams.orderTime"-->
|
||||
<!-- type="date"-->
|
||||
<!-- value-format="YYYY-MM-DD"-->
|
||||
<!-- placeholder="请选择下单时间"-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="应付货款" prop="payment">-->
|
||||
<!-- <el-input v-model="queryParams.payment" placeholder="请输入应付货款" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="审核人员ID" prop="auditorUid">-->
|
||||
<!-- <el-input v-model="queryParams.auditorUid" placeholder="请输入审核人员ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="审核时间" prop="auditorTime">-->
|
||||
<!-- <el-date-picker clearable-->
|
||||
<!-- v-model="queryParams.auditorTime"-->
|
||||
<!-- type="date"-->
|
||||
<!-- value-format="YYYY-MM-DD"-->
|
||||
<!-- placeholder="请选择审核时间"-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="最后操作人员ID" prop="lastUid">-->
|
||||
<!-- <el-input v-model="queryParams.lastUid" placeholder="请输入最后操作人员ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="最后操作时间" prop="lastTime">-->
|
||||
<!-- <el-date-picker clearable-->
|
||||
<!-- v-model="queryParams.lastTime"-->
|
||||
<!-- type="date"-->
|
||||
<!-- value-format="YYYY-MM-DD"-->
|
||||
<!-- placeholder="请选择最后操作时间"-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="作废原因" prop="reason">-->
|
||||
<!-- <el-input v-model="queryParams.reason" placeholder="请输入作废原因" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="是否含税:0 否,1 是" prop="isTax">-->
|
||||
<!-- <el-input v-model="queryParams.isTax" placeholder="请输入是否含税:0 否,1 是" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="状态说明" prop="statusText">-->
|
||||
<!-- <el-input v-model="queryParams.statusText" placeholder="请输入状态说明" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="支付状态说明" prop="payStatusText">-->
|
||||
<!-- <el-input v-model="queryParams.payStatusText" placeholder="请输入支付状态说明" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="到货状态:1 未到货, 2 部分到货, 3 全部到货" prop="statusShipped">-->
|
||||
<!-- <el-input v-model="queryParams.statusShipped" placeholder="请输入到货状态:1 未到货, 2 部分到货, 3 全部到货" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="到货状态说明" prop="statusShippedText">-->
|
||||
<!-- <el-input v-model="queryParams.statusShippedText" placeholder="请输入到货状态说明" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="货物总价" prop="amountTotal">-->
|
||||
<!-- <el-input v-model="queryParams.amountTotal" placeholder="请输入货物总价" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="总金额" prop="totalPrice">-->
|
||||
<!-- <el-input v-model="queryParams.totalPrice" placeholder="请输入总金额" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="币种符号" prop="icon">-->
|
||||
<!-- <el-input v-model="queryParams.icon" placeholder="请输入币种符号" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="其他费用" prop="otherFee">-->
|
||||
<!-- <el-input v-model="queryParams.otherFee" placeholder="请输入其他费用" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="其他费用币种" prop="otherCurrency">-->
|
||||
<!-- <el-input v-model="queryParams.otherCurrency" placeholder="请输入其他费用币种" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="运费" prop="shippingPrice">-->
|
||||
<!-- <el-input v-model="queryParams.shippingPrice" placeholder="请输入运费" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="运费币种" prop="shippingCurrency">-->
|
||||
<!-- <el-input v-model="queryParams.shippingCurrency" placeholder="请输入运费币种" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="采购币种" prop="purchaseCurrency">-->
|
||||
<!-- <el-input v-model="queryParams.purchaseCurrency" placeholder="请输入采购币种" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="采购汇率" prop="purchaseRate">-->
|
||||
<!-- <el-input v-model="queryParams.purchaseRate" placeholder="请输入采购汇率" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="采购总量" prop="quantityTotal">-->
|
||||
<!-- <el-input v-model="queryParams.quantityTotal" placeholder="请输入采购总量" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="仓库ID" prop="wid">-->
|
||||
<!-- <el-input v-model="queryParams.wid" placeholder="请输入仓库ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="仓库名称" prop="wareHouseName">-->
|
||||
<!-- <el-input v-model="queryParams.wareHouseName" placeholder="请输入仓库名称" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="仓库名(备份)" prop="wareHouseBakName">-->
|
||||
<!-- <el-input v-model="queryParams.wareHouseBakName" placeholder="请输入仓库名(备份)" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="入库量" prop="quantityEntry">-->
|
||||
<!-- <el-input v-model="queryParams.quantityEntry" placeholder="请输入入库量" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="实际采购量" prop="quantityReal">-->
|
||||
<!-- <el-input v-model="queryParams.quantityReal" placeholder="请输入实际采购量" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="待到货量" prop="quantityReceive">-->
|
||||
<!-- <el-input v-model="queryParams.quantityReceive" placeholder="请输入待到货量" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="采购方ID" prop="purchaserId">-->
|
||||
<!-- <el-input v-model="queryParams.purchaserId" placeholder="请输入采购方ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="联系人" prop="contactPerson">-->
|
||||
<!-- <el-input v-model="queryParams.contactPerson" placeholder="请输入联系人" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="联系方式" prop="contactNumber">-->
|
||||
<!-- <el-input v-model="queryParams.contactNumber" placeholder="请输入联系方式" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="结算方式:7 现结, 8 月结" prop="settlementMethod">-->
|
||||
<!-- <el-input v-model="queryParams.settlementMethod" placeholder="请输入结算方式:7 现结, 8 月结" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="结算描述" prop="settlementDescription">-->
|
||||
<!-- <el-input v-model="queryParams.settlementDescription" placeholder="请输入结算描述" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="支付方式" prop="paymentMethod">-->
|
||||
<!-- <el-input v-model="queryParams.paymentMethod" placeholder="请输入支付方式" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="交货天数" prop="estDlvDays">
|
||||
<el-input v-model="queryParams.estDlvDays" placeholder="请输入交货天数" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="订单状态" prop="orderStatus">-->
|
||||
<!-- <el-select v-model="queryParams.orderStatus" placeholder="请选择订单状态" clearable>-->
|
||||
<!-- <el-option v-for="dict in vendor_order_status" :key="dict.value" :label="dict.label" :value="dict.value" />-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="交货时间" prop="deliveryTime">
|
||||
<el-date-picker clearable v-model="queryParams.deliveryTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择交货时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="订单交付变动天数" prop="dlvTimeVar">
|
||||
<el-input v-model="queryParams.dlvTimeVar" placeholder="请输入订单交付变动天数" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['amz:purchaseOrder:add']">新增 </el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:purchaseOrder:edit']"
|
||||
>修改
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:purchaseOrder:remove']"
|
||||
>删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:purchaseOrder:export']">导出 </el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" :data="purchaseOrderList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="expand">
|
||||
<template #default="props">
|
||||
<el-card shadow="never">
|
||||
<!-- <template #header>-->
|
||||
<!-- <div class="card-header">-->
|
||||
<!-- <span>产品明细</span>-->
|
||||
<!-- </div>-->
|
||||
<!-- </template>-->
|
||||
|
||||
<el-table v-loading="loading" :data="props.row.items" :border="true" size="small" :header-cell-style="{ fontSize: '10px' }">
|
||||
<!-- <el-table-column label="关联采购单号" align="center" prop="orderSn" />-->
|
||||
<!-- <el-table-column label="仓库ID" align="center" prop="wid" />-->
|
||||
<el-table-column label="仓库名称" align="center" prop="wareHouseName" />
|
||||
<!-- <el-table-column label="采购计划号" align="center" prop="planSn" />-->
|
||||
<!-- <el-table-column label="本地产品ID" align="center" prop="productId" />-->
|
||||
<el-table-column label="品名" align="center" prop="productName" />
|
||||
<!-- <el-table-column label="SKU" align="center" prop="sku" width="200px" />-->
|
||||
<!-- <el-table-column label="FNSKU" align="center" prop="fnsku" width="90px" />-->
|
||||
<!-- <el-table-column label="店铺ID" align="center" prop="sid" width="70px" />-->
|
||||
<!-- <el-table-column label="型号" align="center" prop="model" />-->
|
||||
<!-- <el-table-column label="含税单价" align="center" prop="price" />-->
|
||||
<!-- <el-table-column label="价税合计" align="center" prop="amount" />-->
|
||||
<!-- <el-table-column label="计划采购量" align="center" prop="quantityPlan" />-->
|
||||
<el-table-column label="实际采购量" align="center" prop="quantityReal" width="110px" />
|
||||
<!-- <el-table-column label="到货入库量" align="center" prop="quantityEntry" />-->
|
||||
<!-- <el-table-column label="待到货量" align="center" prop="quantityReceive" />-->
|
||||
<!-- <el-table-column label="退货数" align="center" prop="quantityReturn" />-->
|
||||
<!-- <el-table-column label="换货量" align="center" prop="quantityExchange" />-->
|
||||
<!-- <el-table-column label="质检量" align="center" prop="quantityQc" />-->
|
||||
<!-- <el-table-column label="待质检量" align="center" prop="quantityQcPrepare" />-->
|
||||
<!-- <el-table-column label="期待到货时间" align="center" prop="expectArriveTime" width="180">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span>{{ parseTime(scope.row.expectArriveTime, '{y}-{m}-{d}') }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<!-- <el-table-column label="箱数" align="center" prop="casesNum" />-->
|
||||
<!-- <el-table-column label="单箱数量" align="center" prop="quantityPerCase" />-->
|
||||
<!-- <el-table-column label="是否删除:0 否,1 是" align="center" prop="isDelete" />-->
|
||||
<!-- <el-table-column label="税率" align="center" prop="taxRate" />-->
|
||||
<!-- <el-table-column label="SPU" align="center" prop="spu" />-->
|
||||
<!-- <el-table-column label="款名" align="center" prop="spuName" />-->
|
||||
</el-table>
|
||||
</el-card>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column type="selection" width="55" align="center" />-->
|
||||
<el-table-column label="采购单号" align="center" prop="orderSn" />
|
||||
<!-- <el-table-column label="自定义单号" align="center" prop="customOrderSn" />-->
|
||||
<!-- <el-table-column label="供应商ID" align="center" prop="supplierId" />-->
|
||||
<el-table-column label="供应商名称" align="center" prop="supplierName" />
|
||||
<el-table-column label="店铺名称" align="center" prop="storeName" />
|
||||
<!-- <el-table-column label="采购员ID" align="center" prop="optUid" />-->
|
||||
<!-- <el-table-column label="审核人姓名" align="center" prop="auditorRealname" />-->
|
||||
<!-- <el-table-column label="操作人姓名" align="center" prop="optRealname" />-->
|
||||
<!-- <el-table-column label="最后操作人姓名" align="center" prop="lastRealname" />-->
|
||||
<el-table-column label="下单时间" align="center" prop="orderTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.orderTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="应付货款" align="center" prop="payment" />-->
|
||||
<!-- <el-table-column label="审核人员ID" align="center" prop="auditorUid" />-->
|
||||
<!-- <el-table-column label="审核时间" align="center" prop="auditorTime" width="180">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span>{{ parseTime(scope.row.auditorTime, '{y}-{m}-{d}') }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="最后操作人员ID" align="center" prop="lastUid" />-->
|
||||
<!-- <el-table-column label="最后操作时间" align="center" prop="lastTime" width="180">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span>{{ parseTime(scope.row.lastTime, '{y}-{m}-{d}') }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="作废原因" align="center" prop="reason" />-->
|
||||
<!-- <el-table-column label="是否含税" align="center" prop="isTax" />-->
|
||||
<!-- <el-table-column label="采购单状态" align="center" prop="status" />-->
|
||||
<!-- <el-table-column label="状态说明" align="center" prop="statusText" />-->
|
||||
<!-- <el-table-column label="支付状态说明" align="center" prop="payStatusText" />-->
|
||||
<!-- <el-table-column label="到货状态" align="center" prop="statusShipped" />-->
|
||||
<!-- <el-table-column label="到货状态说明" align="center" prop="statusShippedText" />-->
|
||||
<!-- <el-table-column label="货物总价" align="center" prop="amountTotal" />-->
|
||||
<!-- <el-table-column label="总金额" align="center" prop="totalPrice" />-->
|
||||
<!-- <el-table-column label="币种符号" align="center" prop="icon" />-->
|
||||
<!-- <el-table-column label="付款状态" align="center" prop="payStatus" />-->
|
||||
|
||||
<!-- <el-table-column label="其他费用" align="center" prop="otherFee" />-->
|
||||
<!-- <el-table-column label="其他费用币种" align="center" prop="otherCurrency" />-->
|
||||
<!-- <el-table-column label="费用分摊方式" align="center" prop="feePartType" />-->
|
||||
<!-- <el-table-column label="运费" align="center" prop="shippingPrice" />-->
|
||||
<!-- <el-table-column label="运费币种" align="center" prop="shippingCurrency" />-->
|
||||
<!-- <el-table-column label="采购币种" align="center" prop="purchaseCurrency" />-->
|
||||
<!-- <el-table-column label="采购汇率" align="center" prop="purchaseRate" />-->
|
||||
<!-- <el-table-column label="采购总量" align="center" prop="quantityTotal" />-->
|
||||
<!-- <el-table-column label="仓库ID" align="center" prop="wid" />-->
|
||||
<!-- <el-table-column label="仓库名称" align="center" prop="wareHouseName" />-->
|
||||
<!-- <el-table-column label="仓库名(备份)" align="center" prop="wareHouseBakName" />-->
|
||||
<!-- <el-table-column label="入库量" align="center" prop="quantityEntry" />-->
|
||||
<el-table-column label="实际采购量" align="center" prop="quantityReal" />
|
||||
<!-- <el-table-column label="待到货量" align="center" prop="quantityReceive" />-->
|
||||
<!-- <el-table-column label="采购方ID" align="center" prop="purchaserId" />-->
|
||||
<!-- <el-table-column label="联系人" align="center" prop="contactPerson" />-->
|
||||
<!-- <el-table-column label="联系方式" align="center" prop="contactNumber" />-->
|
||||
<!-- <el-table-column label="结算方式" align="center" prop="settlementMethod" />-->
|
||||
<!-- <el-table-column label="结算描述" align="center" prop="settlementDescription" />-->
|
||||
<!-- <el-table-column label="支付方式" align="center" prop="paymentMethod" />-->
|
||||
<el-table-column label="交货天数" align="center" prop="estDlvDays" />
|
||||
<el-table-column label="订单状态" align="center" prop="orderStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="vendor_order_status" :value="scope.row.orderStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="交货时间" align="center" prop="deliveryTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.deliveryTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="订单交付变动天数" align="center" prop="dlvTimeVar" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<!-- <el-tooltip content="修改" placement="top">-->
|
||||
<!-- <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['amz:purchaseOrder:edit']"></el-button>-->
|
||||
<!-- </el-tooltip>-->
|
||||
|
||||
<el-button size="small" link type="primary" @click="handleConfirm(scope.row)" v-hasPermi="['amz:purchaseOrder:remove']"> 确认 </el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
<!-- 添加或修改采购单主对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="purchaseOrderFormRef" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="form.orderSn" placeholder="请输入采购单号" disabled />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="自定义单号" prop="customOrderSn">-->
|
||||
<!-- <el-input v-model="form.customOrderSn" placeholder="请输入自定义单号" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="供应商ID" prop="supplierId">-->
|
||||
<!-- <el-input v-model="form.supplierId" placeholder="请输入供应商ID" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="供应商名称" prop="supplierName">-->
|
||||
<!-- <el-input v-model="form.supplierName" placeholder="请输入供应商名称" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="采购员ID" prop="optUid">-->
|
||||
<!-- <el-input v-model="form.optUid" placeholder="请输入采购员ID" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="审核人姓名" prop="auditorRealname">-->
|
||||
<!-- <el-input v-model="form.auditorRealname" placeholder="请输入审核人姓名" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="操作人姓名" prop="optRealname">-->
|
||||
<!-- <el-input v-model="form.optRealname" placeholder="请输入操作人姓名" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="最后操作人姓名" prop="lastRealname">-->
|
||||
<!-- <el-input v-model="form.lastRealname" placeholder="请输入最后操作人姓名" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="下单时间" prop="orderTime">-->
|
||||
<!-- <el-date-picker clearable v-model="form.orderTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择下单时间">-->
|
||||
<!-- </el-date-picker>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="应付货款" prop="payment">-->
|
||||
<!-- <el-input v-model="form.payment" placeholder="请输入应付货款" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="审核人员ID" prop="auditorUid">-->
|
||||
<!-- <el-input v-model="form.auditorUid" placeholder="请输入审核人员ID" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="审核时间" prop="auditorTime">-->
|
||||
<!-- <el-date-picker clearable v-model="form.auditorTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择审核时间">-->
|
||||
<!-- </el-date-picker>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="最后操作人员ID" prop="lastUid">-->
|
||||
<!-- <el-input v-model="form.lastUid" placeholder="请输入最后操作人员ID" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="最后操作时间" prop="lastTime">-->
|
||||
<!-- <el-date-picker clearable v-model="form.lastTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择最后操作时间">-->
|
||||
<!-- </el-date-picker>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="作废原因" prop="reason">-->
|
||||
<!-- <el-input v-model="form.reason" type="textarea" placeholder="请输入内容" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="是否含税" prop="isTax">-->
|
||||
<!-- <el-input v-model="form.isTax" placeholder="请输入是否含税:0 否,1 是" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="状态说明" prop="statusText">-->
|
||||
<!-- <el-input v-model="form.statusText" placeholder="请输入状态说明" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="支付状态说明" prop="payStatusText">-->
|
||||
<!-- <el-input v-model="form.payStatusText" placeholder="请输入支付状态说明" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="到货状态" prop="statusShipped">-->
|
||||
<!-- <el-input v-model="form.statusShipped" placeholder="请输入到货状态:1 未到货, 2 部分到货, 3 全部到货" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="到货状态说明" prop="statusShippedText">-->
|
||||
<!-- <el-input v-model="form.statusShippedText" placeholder="请输入到货状态说明" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="货物总价" prop="amountTotal">-->
|
||||
<!-- <el-input v-model="form.amountTotal" placeholder="请输入货物总价" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="总金额" prop="totalPrice">-->
|
||||
<!-- <el-input v-model="form.totalPrice" placeholder="请输入总金额" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="币种符号" prop="icon">-->
|
||||
<!-- <el-input v-model="form.icon" placeholder="请输入币种符号" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="备注" prop="remark">-->
|
||||
<!-- <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="其他费用" prop="otherFee">-->
|
||||
<!-- <el-input v-model="form.otherFee" placeholder="请输入其他费用" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="其他费用币种" prop="otherCurrency">-->
|
||||
<!-- <el-input v-model="form.otherCurrency" placeholder="请输入其他费用币种" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="运费" prop="shippingPrice">-->
|
||||
<!-- <el-input v-model="form.shippingPrice" placeholder="请输入运费" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="运费币种" prop="shippingCurrency">-->
|
||||
<!-- <el-input v-model="form.shippingCurrency" placeholder="请输入运费币种" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="采购币种" prop="purchaseCurrency">-->
|
||||
<!-- <el-input v-model="form.purchaseCurrency" placeholder="请输入采购币种" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="采购汇率" prop="purchaseRate">-->
|
||||
<!-- <el-input v-model="form.purchaseRate" placeholder="请输入采购汇率" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="采购总量" prop="quantityTotal">-->
|
||||
<!-- <el-input v-model="form.quantityTotal" placeholder="请输入采购总量" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="仓库ID" prop="wid">-->
|
||||
<!-- <el-input v-model="form.wid" placeholder="请输入仓库ID" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="仓库名称" prop="wareHouseName">-->
|
||||
<!-- <el-input v-model="form.wareHouseName" placeholder="请输入仓库名称" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="仓库名(备份)" prop="wareHouseBakName">-->
|
||||
<!-- <el-input v-model="form.wareHouseBakName" placeholder="请输入仓库名(备份)" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="入库量" prop="quantityEntry">-->
|
||||
<!-- <el-input v-model="form.quantityEntry" placeholder="请输入入库量" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="实际采购量" prop="quantityReal">-->
|
||||
<!-- <el-input v-model="form.quantityReal" placeholder="请输入实际采购量" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="待到货量" prop="quantityReceive">-->
|
||||
<!-- <el-input v-model="form.quantityReceive" placeholder="请输入待到货量" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="采购方ID" prop="purchaserId">-->
|
||||
<!-- <el-input v-model="form.purchaserId" placeholder="请输入采购方ID" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="联系人" prop="contactPerson">-->
|
||||
<!-- <el-input v-model="form.contactPerson" placeholder="请输入联系人" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="联系方式" prop="contactNumber">-->
|
||||
<!-- <el-input v-model="form.contactNumber" placeholder="请输入联系方式" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="结算方式" prop="settlementMethod">-->
|
||||
<!-- <el-input v-model="form.settlementMethod" placeholder="请输入结算方式:7 现结, 8 月结" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="结算描述" prop="settlementDescription">-->
|
||||
<!-- <el-input v-model="form.settlementDescription" type="textarea" placeholder="请输入内容" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="支付方式" prop="paymentMethod">-->
|
||||
<!-- <el-input v-model="form.paymentMethod" placeholder="请输入支付方式" />-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
<el-form-item label="订单状态" prop="orderStatus">
|
||||
<el-select v-model="form.orderStatus" placeholder="请选择订单状态" disabled>
|
||||
<el-option v-for="dict in vendor_order_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="交货时间" prop="deliveryTime">
|
||||
<el-date-picker
|
||||
clearable
|
||||
v-model="form.deliveryTime"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择交货时间"
|
||||
disabled
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="交货天数" prop="estDlvDays">
|
||||
<!-- <el-input v-model="form.estDlvDays" placeholder="请输入交货天数" />-->
|
||||
<el-input-number v-model="form.estDlvDays" :min="0" :max="100" @change="delevAction()">
|
||||
<template #suffix>
|
||||
<span>天</span>
|
||||
</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="订单交付变动天数" prop="dlvTimeVar">
|
||||
<el-input v-model="form.dlvTimeVar" placeholder="请输入订单交付变动天数" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确认订单</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="PurchaseOrder" lang="ts">
|
||||
import { listPurchaseOrder, getPurchaseOrder, delPurchaseOrder, addPurchaseOrder, updatePurchaseOrder } from '@/api/amz/purchaseOrder';
|
||||
import { PurchaseOrderVO, PurchaseOrderQuery, PurchaseOrderForm } from '@/api/amz/purchaseOrder/types';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { vendor_order_status } = toRefs<any>(proxy?.useDict('vendor_order_status'));
|
||||
|
||||
const purchaseOrderList = ref<PurchaseOrderVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const purchaseOrderFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: PurchaseOrderForm = {
|
||||
orderSn: undefined,
|
||||
customOrderSn: undefined,
|
||||
supplierId: undefined,
|
||||
supplierName: undefined,
|
||||
optUid: undefined,
|
||||
auditorRealname: undefined,
|
||||
optRealname: undefined,
|
||||
lastRealname: undefined,
|
||||
orderTime: undefined,
|
||||
payment: undefined,
|
||||
auditorUid: undefined,
|
||||
auditorTime: undefined,
|
||||
lastUid: undefined,
|
||||
lastTime: undefined,
|
||||
reason: undefined,
|
||||
isTax: undefined,
|
||||
status: undefined,
|
||||
statusText: undefined,
|
||||
payStatusText: undefined,
|
||||
statusShipped: undefined,
|
||||
statusShippedText: undefined,
|
||||
amountTotal: undefined,
|
||||
totalPrice: undefined,
|
||||
icon: undefined,
|
||||
payStatus: undefined,
|
||||
remark: undefined,
|
||||
otherFee: undefined,
|
||||
otherCurrency: undefined,
|
||||
feePartType: undefined,
|
||||
shippingPrice: undefined,
|
||||
shippingCurrency: undefined,
|
||||
purchaseCurrency: undefined,
|
||||
purchaseRate: undefined,
|
||||
quantityTotal: undefined,
|
||||
wid: undefined,
|
||||
wareHouseName: undefined,
|
||||
wareHouseBakName: undefined,
|
||||
quantityEntry: undefined,
|
||||
quantityReal: undefined,
|
||||
quantityReceive: undefined,
|
||||
purchaserId: undefined,
|
||||
contactPerson: undefined,
|
||||
contactNumber: undefined,
|
||||
settlementMethod: undefined,
|
||||
settlementDescription: undefined,
|
||||
paymentMethod: undefined,
|
||||
estDlvDays: undefined,
|
||||
orderStatus: undefined,
|
||||
deliveryTime: undefined,
|
||||
dlvTimeVar: undefined
|
||||
};
|
||||
const data = reactive<PageData<PurchaseOrderForm, PurchaseOrderQuery>>({
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderSn: undefined,
|
||||
customOrderSn: undefined,
|
||||
supplierId: undefined,
|
||||
supplierName: undefined,
|
||||
optUid: undefined,
|
||||
auditorRealname: undefined,
|
||||
optRealname: undefined,
|
||||
lastRealname: undefined,
|
||||
orderTime: undefined,
|
||||
payment: undefined,
|
||||
auditorUid: undefined,
|
||||
auditorTime: undefined,
|
||||
lastUid: undefined,
|
||||
lastTime: undefined,
|
||||
reason: undefined,
|
||||
isTax: undefined,
|
||||
status: undefined,
|
||||
statusText: undefined,
|
||||
payStatusText: undefined,
|
||||
statusShipped: undefined,
|
||||
statusShippedText: undefined,
|
||||
amountTotal: undefined,
|
||||
totalPrice: undefined,
|
||||
icon: undefined,
|
||||
payStatus: undefined,
|
||||
otherFee: undefined,
|
||||
otherCurrency: undefined,
|
||||
feePartType: undefined,
|
||||
shippingPrice: undefined,
|
||||
shippingCurrency: undefined,
|
||||
purchaseCurrency: undefined,
|
||||
purchaseRate: undefined,
|
||||
quantityTotal: undefined,
|
||||
wid: undefined,
|
||||
wareHouseName: undefined,
|
||||
wareHouseBakName: undefined,
|
||||
quantityEntry: undefined,
|
||||
quantityReal: undefined,
|
||||
quantityReceive: undefined,
|
||||
purchaserId: undefined,
|
||||
contactPerson: undefined,
|
||||
contactNumber: undefined,
|
||||
settlementMethod: undefined,
|
||||
settlementDescription: undefined,
|
||||
paymentMethod: undefined,
|
||||
estDlvDays: undefined,
|
||||
orderStatus: 'ord_unconfirmed',
|
||||
deliveryTime: undefined,
|
||||
dlvTimeVar: undefined,
|
||||
params: {}
|
||||
},
|
||||
rules: {
|
||||
// orderSn: [{ required: true, message: '采购单号不能为空', trigger: 'blur' }],
|
||||
// customOrderSn: [{ required: true, message: '自定义单号不能为空', trigger: 'blur' }],
|
||||
// supplierId: [{ required: true, message: '供应商ID不能为空', trigger: 'blur' }],
|
||||
// supplierName: [{ required: true, message: '供应商名称不能为空', trigger: 'blur' }],
|
||||
// optUid: [{ required: true, message: '采购员ID不能为空', trigger: 'blur' }],
|
||||
// auditorRealname: [{ required: true, message: '审核人姓名不能为空', trigger: 'blur' }],
|
||||
// optRealname: [{ required: true, message: '操作人姓名不能为空', trigger: 'blur' }],
|
||||
// lastRealname: [{ required: true, message: '最后操作人姓名不能为空', trigger: 'blur' }],
|
||||
// orderTime: [{ required: true, message: '下单时间不能为空', trigger: 'blur' }],
|
||||
// payment: [{ required: true, message: '应付货款不能为空', trigger: 'blur' }],
|
||||
// auditorUid: [{ required: true, message: '审核人员ID不能为空', trigger: 'blur' }],
|
||||
// auditorTime: [{ required: true, message: '审核时间不能为空', trigger: 'blur' }],
|
||||
// lastUid: [{ required: true, message: '最后操作人员ID不能为空', trigger: 'blur' }],
|
||||
// lastTime: [{ required: true, message: '最后操作时间不能为空', trigger: 'blur' }],
|
||||
// reason: [{ required: true, message: '作废原因不能为空', trigger: 'blur' }],
|
||||
// isTax: [{ required: true, message: '是否含税:0 否,1 是不能为空', trigger: 'blur' }],
|
||||
// status: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '采购单状态:-1 作废, 3 待提交, 1 待下单, 2 待签收, 9 完成, 121 待审核, 122 驳回, 124 作废不能为空',
|
||||
// trigger: 'change'
|
||||
// }
|
||||
// ],
|
||||
// statusText: [{ required: true, message: '状态说明不能为空', trigger: 'blur' }],
|
||||
// payStatusText: [{ required: true, message: '支付状态说明不能为空', trigger: 'blur' }],
|
||||
// statusShipped: [{ required: true, message: '到货状态:1 未到货, 2 部分到货, 3 全部到货不能为空', trigger: 'blur' }],
|
||||
// statusShippedText: [{ required: true, message: '到货状态说明不能为空', trigger: 'blur' }],
|
||||
// amountTotal: [{ required: true, message: '货物总价不能为空', trigger: 'blur' }],
|
||||
// totalPrice: [{ required: true, message: '总金额不能为空', trigger: 'blur' }],
|
||||
// icon: [{ required: true, message: '币种符号不能为空', trigger: 'blur' }],
|
||||
// payStatus: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '付款状态:0 未申请, 1 已申请, 2 部分付款, 3 已付款不能为空',
|
||||
// trigger: 'change'
|
||||
// }
|
||||
// ],
|
||||
// remark: [{ required: true, message: '备注不能为空', trigger: 'blur' }],
|
||||
// otherFee: [{ required: true, message: '其他费用不能为空', trigger: 'blur' }],
|
||||
// otherCurrency: [{ required: true, message: '其他费用币种不能为空', trigger: 'blur' }],
|
||||
// feePartType: [{ required: true, message: '费用分摊方式:0 不分摊, 1 按金额, 2 按数量不能为空', trigger: 'change' }],
|
||||
// shippingPrice: [{ required: true, message: '运费不能为空', trigger: 'blur' }],
|
||||
// shippingCurrency: [{ required: true, message: '运费币种不能为空', trigger: 'blur' }],
|
||||
// purchaseCurrency: [{ required: true, message: '采购币种不能为空', trigger: 'blur' }],
|
||||
// purchaseRate: [{ required: true, message: '采购汇率不能为空', trigger: 'blur' }],
|
||||
// quantityTotal: [{ required: true, message: '采购总量不能为空', trigger: 'blur' }],
|
||||
// wid: [{ required: true, message: '仓库ID不能为空', trigger: 'blur' }],
|
||||
// wareHouseName: [{ required: true, message: '仓库名称不能为空', trigger: 'blur' }],
|
||||
// wareHouseBakName: [{ required: true, message: '仓库名(备份)不能为空', trigger: 'blur' }],
|
||||
// quantityEntry: [{ required: true, message: '入库量不能为空', trigger: 'blur' }],
|
||||
// quantityReal: [{ required: true, message: '实际采购量不能为空', trigger: 'blur' }],
|
||||
// quantityReceive: [{ required: true, message: '待到货量不能为空', trigger: 'blur' }],
|
||||
// purchaserId: [{ required: true, message: '采购方ID不能为空', trigger: 'blur' }],
|
||||
// contactPerson: [{ required: true, message: '联系人不能为空', trigger: 'blur' }],
|
||||
// contactNumber: [{ required: true, message: '联系方式不能为空', trigger: 'blur' }],
|
||||
// settlementMethod: [{ required: true, message: '结算方式:7 现结, 8 月结不能为空', trigger: 'blur' }],
|
||||
// settlementDescription: [{ required: true, message: '结算描述不能为空', trigger: 'blur' }],
|
||||
// paymentMethod: [{ required: true, message: '支付方式不能为空', trigger: 'blur' }],
|
||||
// dlvTimeVar: [{ required: true, message: '订单交付变动天数不能为空', trigger: 'blur' }]
|
||||
// deliveryTime: [{ required: true, message: '交货时间不能为空', trigger: 'blur' }],
|
||||
estDlvDays: [{ required: true, message: '交货天数不能为空', trigger: 'blur' }],
|
||||
orderStatus: [{ required: true, message: '订单状态不能为空', trigger: 'change' }]
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
/** 查询采购单主列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listPurchaseOrder(queryParams.value);
|
||||
purchaseOrderList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
purchaseOrderFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
const delevAction = () => {
|
||||
form.value.deliveryTime = getDateAfterTwoDays(form.value.estDlvDays);
|
||||
console.log('form.value', form.value.deliveryTime);
|
||||
};
|
||||
|
||||
const getDateAfterTwoDays = (dayNum: number): string => {
|
||||
const date = new Date(); // 获取当前时间
|
||||
date.setDate(date.getDate() + dayNum); // 增加 2 天
|
||||
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需加 1
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
const hours = String(date.getHours()).padStart(2, '0');
|
||||
const minutes = String(date.getMinutes()).padStart(2, '0');
|
||||
const seconds = String(date.getSeconds()).padStart(2, '0');
|
||||
|
||||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
||||
};
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
};
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: PurchaseOrderVO[]) => {
|
||||
ids.value = selection.map((item) => item.orderSn);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
};
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = '添加采购单主';
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: PurchaseOrderVO) => {
|
||||
reset();
|
||||
const _orderSn = row?.orderSn || ids.value[0];
|
||||
const res = await getPurchaseOrder(_orderSn);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改采购单主';
|
||||
};
|
||||
|
||||
const handleConfirm = async (row?: PurchaseOrderVO) => {
|
||||
// reset();
|
||||
// const _orderSn = row?.orderSn || ids.value[0];
|
||||
// const res = await getPurchaseOrder(_orderSn);
|
||||
// Object.assign(form.value, res.data);
|
||||
// dialog.visible = true;
|
||||
// dialog.title = '修改采购单主';
|
||||
console.log('row', row);
|
||||
reset();
|
||||
const _orderSn = row?.orderSn || ids.value[0];
|
||||
const res = await getPurchaseOrder(_orderSn);
|
||||
Object.assign(form.value, res.data);
|
||||
form.value.orderStatus = 'ord_confirmed';
|
||||
dialog.visible = true;
|
||||
dialog.title = '确认订单';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
form.value.deliveryTime = getDateAfterTwoDays(form.value.estDlvDays);
|
||||
purchaseOrderFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.orderSn) {
|
||||
await updatePurchaseOrder(form.value).finally(() => (buttonLoading.value = false));
|
||||
} else {
|
||||
await addPurchaseOrder(form.value).finally(() => (buttonLoading.value = false));
|
||||
}
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: PurchaseOrderVO) => {
|
||||
const _orderSns = row?.orderSn || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除采购单主编号为"' + _orderSns + '"的数据项?').finally(() => (loading.value = false));
|
||||
await delPurchaseOrder(_orderSns);
|
||||
proxy?.$modal.msgSuccess('删除成功');
|
||||
await getList();
|
||||
};
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download(
|
||||
'amz/purchaseOrder/export',
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`purchaseOrder_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
||||
<style scoped>
|
||||
/* 展开行容器 */
|
||||
:deep(.el-table__expanded-cell) {
|
||||
background: #ebf3ff !important;
|
||||
padding: 0 !important;
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
/* 内嵌表格容器 */
|
||||
:deep(.el-table__expanded-cell) .el-table {
|
||||
--el-table-bg-color: #ebf3ff !important;
|
||||
--el-table-tr-bg-color: #ebf3ff !important;
|
||||
--el-table-header-bg-color: #cfe2ff !important; /* 表头变量 */
|
||||
--el-table-header-text-color: #2c3e50 !important; /* 新增文字颜色 */
|
||||
}
|
||||
|
||||
/* 表格主体容器 */
|
||||
:deep(.el-table__expanded-cell) .el-table__body-wrapper {
|
||||
background: #ebf3ff !important;
|
||||
}
|
||||
|
||||
/* 表头单元格精准控制 */
|
||||
:deep(.el-table__expanded-cell) .el-table__header th {
|
||||
background-color: #cfe2ff !important; /* 覆盖默认背景 */
|
||||
border-bottom: 2px solid #a6c5ff !important; /* 表头下边框 */
|
||||
}
|
||||
|
||||
/* 表头文字样式 */
|
||||
:deep(.el-table__expanded-cell) .el-table__header .cell {
|
||||
color: #1a2b3c !important;
|
||||
font-weight: 600; /* 加粗字体 */
|
||||
}
|
||||
|
||||
/* 单元格背景 */
|
||||
:deep(.el-table__expanded-cell) .el-table__body tr td {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
/* 消除卡片干扰 */
|
||||
:deep(.el-card) {
|
||||
background: transparent !important;
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
/* 内嵌表格hover效果 */
|
||||
:deep(.el-table__expanded-cell) .el-table__body tr:hover > td {
|
||||
background-color: #d3e3ff !important;
|
||||
}
|
||||
|
||||
/* 表头hover状态 */
|
||||
:deep(.el-table__expanded-cell) .el-table__header tr:hover th {
|
||||
background-color: #b6d4ff !important;
|
||||
}
|
||||
|
||||
/* 表头排序按钮颜色 */
|
||||
:deep(.el-table__expanded-cell) .el-table__header .sort-caret.ascending {
|
||||
border-bottom-color: #1a2b3c;
|
||||
}
|
||||
|
||||
:deep(.el-table__expanded-cell) .el-table__header .sort-caret.descending {
|
||||
border-top-color: #1a2b3c;
|
||||
}
|
||||
</style>
|
1204
src/views/amz/purchaseOrderConfirm/index.vue
Normal file
1204
src/views/amz/purchaseOrderConfirm/index.vue
Normal file
File diff suppressed because it is too large
Load Diff
380
src/views/amz/sendOrder/index.vue
Normal file
380
src/views/amz/sendOrder/index.vue
Normal file
@ -0,0 +1,380 @@
|
||||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="120px">
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="queryParams.orderSn" placeholder="请输入采购单号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货日期" prop="sendDate">
|
||||
<el-date-picker clearable v-model="queryParams.sendDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择发货日期" />
|
||||
</el-form-item>
|
||||
<el-form-item label="采购店铺" prop="storeName">
|
||||
<el-input v-model="queryParams.storeName" placeholder="请输入采购店铺" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品名称" prop="productName">
|
||||
<el-input v-model="queryParams.productName" placeholder="请输入产品名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货数量" prop="quantitySend">
|
||||
<el-input v-model="queryParams.quantitySend" placeholder="请输入发货数量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单箱产品数量" prop="quantityPerBox">
|
||||
<el-input v-model="queryParams.quantityPerBox" placeholder="请输入单箱产品数量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="箱数" prop="boxCount">
|
||||
<el-input v-model="queryParams.boxCount" placeholder="请输入箱数" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="箱子尺寸" prop="boxDimensions">-->
|
||||
<!-- <el-input v-model="queryParams.boxDimensions" placeholder="请输入箱子尺寸" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="单箱重量" prop="weightPerBox">
|
||||
<el-input v-model="queryParams.weightPerBox" placeholder="请输入单箱重量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实际采购店铺" prop="realStoreName">
|
||||
<el-input v-model="queryParams.realStoreName" placeholder="请输入实际采购店铺" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货状态" prop="sendStatus">
|
||||
<el-select v-model="queryParams.sendStatus" placeholder="请选择发货状态" clearable>
|
||||
<el-option v-for="dict in send_status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['amz:sendOrder:add']">新增 </el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:sendOrder:edit']"
|
||||
>修改
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:sendOrder:remove']"
|
||||
>删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:sendOrder:export']"> 导出 </el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" :data="sendOrderList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<!-- <el-table-column label="主键ID" align="center" prop="id" />-->
|
||||
<el-table-column label="采购单号" align="center" prop="orderSn" />
|
||||
<el-table-column label="发货日期" align="center" prop="sendDate" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.sendDate, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="采购店铺" align="center" prop="storeName" />
|
||||
<el-table-column label="产品名称" align="center" prop="productName" />
|
||||
<el-table-column label="发货数量" align="center" prop="quantitySend" />
|
||||
<el-table-column label="单箱产品数量" align="center" prop="quantityPerBox" />
|
||||
<el-table-column label="箱数" align="center" prop="boxCount" />
|
||||
<el-table-column label="箱子尺寸" align="center" prop="boxDimensions" />
|
||||
<el-table-column label="单箱重量" align="center" prop="weightPerBox" />
|
||||
<el-table-column label="实际采购店铺" align="center" prop="realStoreName" />
|
||||
<el-table-column label="发货状态" align="center" prop="sendStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="send_status" :value="scope.row.sendStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['amz:sendOrder:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['amz:sendOrder:remove']"></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
<!-- 添加或修改供应商创建的发货单对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="sendOrderFormRef" :model="form" :rules="rules" label-width="120px">
|
||||
<!-- <el-form-item label="主键ID" prop="id">-->
|
||||
<!-- <el-input v-model="form.id" placeholder="请输入主键ID" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="form.orderSn" placeholder="请输入采购单号" @blur="blurAction" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货日期" prop="sendDate">
|
||||
<el-date-picker clearable v-model="form.sendDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择发货日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="采购店铺" prop="storeName">-->
|
||||
<!-- <el-input v-model="form.storeName" placeholder="请输入采购店铺" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="产品名称" prop="productName">
|
||||
<el-input v-model="form.productName" placeholder="请输入产品名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货数量" prop="quantitySend">
|
||||
<el-input v-model="form.quantitySend" placeholder="请输入发货数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单箱产品数量" prop="quantityPerBox">
|
||||
<el-input v-model="form.quantityPerBox" placeholder="请输入单箱产品数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="箱数" prop="boxCount">
|
||||
<el-input v-model="form.boxCount" placeholder="请输入箱数" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="箱子尺寸" prop="boxDimensions">-->
|
||||
<!-- <el-input v-model="form.boxDimensions" placeholder="请输入箱子尺寸" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="箱子尺寸" prop="boxDimensions">
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-input v-model="plength" placeholder="请输入长" />
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-input v-model="pwidth" placeholder="请输入宽" />
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-input v-model="pheight" placeholder="请输入高" />
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
<el-form-item label="单箱重量" prop="weightPerBox">
|
||||
<el-input v-model="form.weightPerBox" placeholder="请输入单箱重量" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="实际采购店铺" prop="realStoreName">-->
|
||||
<!-- <el-input v-model="form.realStoreName" placeholder="请输入实际采购店铺" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="发货状态" prop="sendStatus">-->
|
||||
<!-- <el-select v-model="form.sendStatus" placeholder="请选择发货状态">-->
|
||||
<!-- <el-option v-for="dict in send_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="SendOrder" lang="ts">
|
||||
import { listSendOrder, getSendOrder, delSendOrder, addSendOrder, updateSendOrder } from '@/api/amz/sendOrder';
|
||||
import { SendOrderVO, SendOrderQuery, SendOrderForm } from '@/api/amz/sendOrder/types';
|
||||
import { getPurchaseOrder } from '@/api/amz/purchaseOrder';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { send_status } = toRefs<any>(proxy?.useDict('send_status'));
|
||||
|
||||
const sendOrderList = ref<SendOrderVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
const plength = ref<string | number>();
|
||||
const pheight = ref<string | number>();
|
||||
const pwidth = ref<string | number>();
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const sendOrderFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: SendOrderForm = {
|
||||
id: undefined,
|
||||
orderSn: undefined,
|
||||
sendDate: undefined,
|
||||
storeName: undefined,
|
||||
productName: undefined,
|
||||
quantitySend: undefined,
|
||||
quantityPerBox: undefined,
|
||||
boxCount: undefined,
|
||||
boxDimensions: undefined,
|
||||
weightPerBox: undefined,
|
||||
realStoreName: undefined,
|
||||
sendStatus: undefined
|
||||
};
|
||||
const data = reactive<PageData<SendOrderForm, SendOrderQuery>>({
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderSn: undefined,
|
||||
sendDate: undefined,
|
||||
storeName: undefined,
|
||||
productName: undefined,
|
||||
quantitySend: undefined,
|
||||
quantityPerBox: undefined,
|
||||
boxCount: undefined,
|
||||
boxDimensions: undefined,
|
||||
weightPerBox: undefined,
|
||||
realStoreName: undefined,
|
||||
sendStatus: undefined,
|
||||
params: {}
|
||||
},
|
||||
rules: {
|
||||
orderSn: [{ required: true, message: '采购单号不能为空', trigger: 'blur' }],
|
||||
sendDate: [{ required: true, message: '发货日期不能为空', trigger: 'blur' }],
|
||||
storeName: [{ required: true, message: '采购店铺不能为空', trigger: 'blur' }],
|
||||
productName: [{ required: true, message: '产品名称不能为空', trigger: 'blur' }],
|
||||
quantitySend: [{ required: true, message: '发货数量不能为空', trigger: 'blur' }],
|
||||
quantityPerBox: [{ required: true, message: '单箱产品数量不能为空', trigger: 'blur' }],
|
||||
boxCount: [{ required: true, message: '箱数不能为空', trigger: 'blur' }],
|
||||
boxDimensions: [
|
||||
{
|
||||
required: true,
|
||||
message: '长宽高都不能为空',
|
||||
validator: (rule, value, callback) => {
|
||||
if (!plength.value || !pwidth.value || !pheight.value) {
|
||||
callback(new Error('长宽高都不能为空'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
weightPerBox: [{ required: true, message: '单箱重量不能为空', trigger: 'blur' }],
|
||||
realStoreName: [{ required: true, message: '实际采购店铺不能为空', trigger: 'blur' }],
|
||||
sendStatus: [{ required: true, message: '发货状态不能为空', trigger: 'change' }]
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
/** 查询供应商创建的发货单列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listSendOrder(queryParams.value);
|
||||
sendOrderList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
sendOrderFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
};
|
||||
|
||||
const blurAction = async () => {
|
||||
if (!isPOFormat(form.value.orderSn)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// const res = await getPurchaseOrder(form.value.orderSn);
|
||||
// Object.assign(form.value, res.data);
|
||||
// form.value.quantitySend = res.data.quantityReal;
|
||||
// console.log('res', res);
|
||||
};
|
||||
|
||||
const isPOFormat = (input: string): boolean => {
|
||||
const poRegex = /^PO\d+$/;
|
||||
return poRegex.test(input);
|
||||
};
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: SendOrderVO[]) => {
|
||||
ids.value = selection.map((item) => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
};
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = '添加供应商创建的发货单';
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: SendOrderVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getSendOrder(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改供应商创建的发货单';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
form.value.boxDimensions = `${pwidth.value} x ${pheight.value} x ${plength.value}`;
|
||||
sendOrderFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.id) {
|
||||
await updateSendOrder(form.value).finally(() => (buttonLoading.value = false));
|
||||
} else {
|
||||
await addSendOrder(form.value).finally(() => (buttonLoading.value = false));
|
||||
}
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: SendOrderVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除供应商创建的发货单编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
||||
await delSendOrder(_ids);
|
||||
proxy?.$modal.msgSuccess('删除成功');
|
||||
await getList();
|
||||
};
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download(
|
||||
'amz/sendOrder/export',
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`sendOrder_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
333
src/views/amz/sendOrderConfirm/index.vue
Normal file
333
src/views/amz/sendOrderConfirm/index.vue
Normal file
@ -0,0 +1,333 @@
|
||||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="120px">
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="queryParams.orderSn" placeholder="请输入采购单号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货日期" prop="sendDate">
|
||||
<el-date-picker clearable v-model="queryParams.sendDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择发货日期" />
|
||||
</el-form-item>
|
||||
<el-form-item label="采购店铺" prop="storeName">
|
||||
<el-input v-model="queryParams.storeName" placeholder="请输入采购店铺" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品名称" prop="productName">
|
||||
<el-input v-model="queryParams.productName" placeholder="请输入产品名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货数量" prop="quantitySend">
|
||||
<el-input v-model="queryParams.quantitySend" placeholder="请输入发货数量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单箱产品数量" prop="quantityPerBox">
|
||||
<el-input v-model="queryParams.quantityPerBox" placeholder="请输入单箱产品数量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="箱数" prop="boxCount">
|
||||
<el-input v-model="queryParams.boxCount" placeholder="请输入箱数" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="箱子尺寸" prop="boxDimensions">
|
||||
<el-input v-model="queryParams.boxDimensions" placeholder="请输入箱子尺寸" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单箱重量" prop="weightPerBox">
|
||||
<el-input v-model="queryParams.weightPerBox" placeholder="请输入单箱重量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实际采购店铺" prop="realStoreName">
|
||||
<el-input v-model="queryParams.realStoreName" placeholder="请输入实际采购店铺" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货状态" prop="sendStatus">
|
||||
<el-select v-model="queryParams.sendStatus" placeholder="请选择发货状态" clearable>
|
||||
<el-option v-for="dict in send_status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['amz:sendOrder:add']">新增 </el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:sendOrder:edit']"
|
||||
>修改
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:sendOrder:remove']"
|
||||
>删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:sendOrder:export']"> 导出 </el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" :data="sendOrderList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<!-- <el-table-column label="主键ID" align="center" prop="id" />-->
|
||||
<el-table-column label="采购单号" align="center" prop="orderSn" />
|
||||
<el-table-column label="发货日期" align="center" prop="sendDate" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.sendDate, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="采购店铺" align="center" prop="storeName" />
|
||||
<el-table-column label="产品名称" align="center" prop="productName" />
|
||||
<el-table-column label="发货数量" align="center" prop="quantitySend" />
|
||||
<el-table-column label="单箱产品数量" align="center" prop="quantityPerBox" />
|
||||
<el-table-column label="箱数" align="center" prop="boxCount" />
|
||||
<el-table-column label="箱子尺寸" align="center" prop="boxDimensions" />
|
||||
<el-table-column label="单箱重量" align="center" prop="weightPerBox" />
|
||||
<el-table-column label="实际采购店铺" align="center" prop="realStoreName" />
|
||||
<el-table-column label="发货状态" align="center" prop="sendStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="send_status" :value="scope.row.sendStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['amz:sendOrder:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['amz:sendOrder:remove']"></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
<!-- 添加或修改供应商创建的发货单对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="sendOrderFormRef" :model="form" :rules="rules" label-width="120px">
|
||||
<el-form-item label="主键ID" prop="id">
|
||||
<el-input v-model="form.id" placeholder="请输入主键ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="form.orderSn" placeholder="请输入采购单号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货日期" prop="sendDate">
|
||||
<el-date-picker clearable v-model="form.sendDate" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择发货日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="采购店铺" prop="storeName">
|
||||
<el-input v-model="form.storeName" placeholder="请输入采购店铺" />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品名称" prop="productName">
|
||||
<el-input v-model="form.productName" placeholder="请输入产品名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货数量" prop="quantitySend">
|
||||
<el-input v-model="form.quantitySend" placeholder="请输入发货数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单箱产品数量" prop="quantityPerBox">
|
||||
<el-input v-model="form.quantityPerBox" placeholder="请输入单箱产品数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="箱数" prop="boxCount">
|
||||
<el-input v-model="form.boxCount" placeholder="请输入箱数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="箱子尺寸" prop="boxDimensions">
|
||||
<el-input v-model="form.boxDimensions" placeholder="请输入箱子尺寸" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单箱重量" prop="weightPerBox">
|
||||
<el-input v-model="form.weightPerBox" placeholder="请输入单箱重量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实际采购店铺" prop="realStoreName">
|
||||
<el-input v-model="form.realStoreName" placeholder="请输入实际采购店铺" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货状态" prop="sendStatus">
|
||||
<el-select v-model="form.sendStatus" placeholder="请选择发货状态">
|
||||
<el-option v-for="dict in send_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="SendOrder" lang="ts">
|
||||
import { listSendOrder, getSendOrder, delSendOrder, addSendOrder, updateSendOrder } from '@/api/amz/sendOrder';
|
||||
import { SendOrderVO, SendOrderQuery, SendOrderForm } from '@/api/amz/sendOrder/types';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { send_status } = toRefs<any>(proxy?.useDict('send_status'));
|
||||
|
||||
const sendOrderList = ref<SendOrderVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const sendOrderFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: SendOrderForm = {
|
||||
id: undefined,
|
||||
orderSn: undefined,
|
||||
sendDate: undefined,
|
||||
storeName: undefined,
|
||||
productName: undefined,
|
||||
quantitySend: undefined,
|
||||
quantityPerBox: undefined,
|
||||
boxCount: undefined,
|
||||
boxDimensions: undefined,
|
||||
weightPerBox: undefined,
|
||||
realStoreName: undefined,
|
||||
sendStatus: undefined
|
||||
};
|
||||
const data = reactive<PageData<SendOrderForm, SendOrderQuery>>({
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderSn: undefined,
|
||||
sendDate: undefined,
|
||||
storeName: undefined,
|
||||
productName: undefined,
|
||||
quantitySend: undefined,
|
||||
quantityPerBox: undefined,
|
||||
boxCount: undefined,
|
||||
boxDimensions: undefined,
|
||||
weightPerBox: undefined,
|
||||
realStoreName: undefined,
|
||||
sendStatus: undefined,
|
||||
params: {}
|
||||
},
|
||||
rules: {
|
||||
orderSn: [{ required: true, message: '采购单号不能为空', trigger: 'blur' }],
|
||||
sendDate: [{ required: true, message: '发货日期不能为空', trigger: 'blur' }],
|
||||
storeName: [{ required: true, message: '采购店铺不能为空', trigger: 'blur' }],
|
||||
productName: [{ required: true, message: '产品名称不能为空', trigger: 'blur' }],
|
||||
quantitySend: [{ required: true, message: '发货数量不能为空', trigger: 'blur' }],
|
||||
quantityPerBox: [{ required: true, message: '单箱产品数量不能为空', trigger: 'blur' }],
|
||||
boxCount: [{ required: true, message: '箱数不能为空', trigger: 'blur' }],
|
||||
boxDimensions: [{ required: true, message: '箱子尺寸不能为空', trigger: 'blur' }],
|
||||
weightPerBox: [{ required: true, message: '单箱重量不能为空', trigger: 'blur' }],
|
||||
realStoreName: [{ required: true, message: '实际采购店铺不能为空', trigger: 'blur' }],
|
||||
sendStatus: [{ required: true, message: '发货状态不能为空', trigger: 'change' }]
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
/** 查询供应商创建的发货单列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listSendOrder(queryParams.value);
|
||||
sendOrderList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
sendOrderFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
};
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: SendOrderVO[]) => {
|
||||
ids.value = selection.map((item) => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
};
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = '添加供应商创建的发货单';
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: SendOrderVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getSendOrder(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改供应商创建的发货单';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
sendOrderFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.id) {
|
||||
await updateSendOrder(form.value).finally(() => (buttonLoading.value = false));
|
||||
} else {
|
||||
await addSendOrder(form.value).finally(() => (buttonLoading.value = false));
|
||||
}
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: SendOrderVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除供应商创建的发货单编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
||||
await delSendOrder(_ids);
|
||||
proxy?.$modal.msgSuccess('删除成功');
|
||||
await getList();
|
||||
};
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download(
|
||||
'amz/sendOrder/export',
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`sendOrder_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
593
src/views/amz/shipForward/index.vue
Normal file
593
src/views/amz/shipForward/index.vue
Normal file
@ -0,0 +1,593 @@
|
||||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="100px">
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="queryParams.orderSn" placeholder="请输入采购单号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="店铺名称" prop="storeName">
|
||||
<el-input v-model="queryParams.storeName" placeholder="请输入采购店铺名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="sku" prop="sku">
|
||||
<el-input v-model="queryParams.sku" placeholder="请输入产品唯一标识码" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品全称" prop="productName">
|
||||
<el-input v-model="queryParams.productName" placeholder="请输入产品全称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实际发货数量" prop="quantitySend">
|
||||
<el-input v-model="queryParams.quantitySend" placeholder="请输入实际发货数量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货方" prop="outSupplierName">
|
||||
<el-input v-model="queryParams.outSupplierName" placeholder="请输入发货供应商名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货方ID" prop="outSupplierId">
|
||||
<el-input v-model="queryParams.outSupplierId" placeholder="请输入发货供应商系统ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="收货方" prop="inSupplierName">
|
||||
<el-input v-model="queryParams.inSupplierName" placeholder="请输入收货供应商名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="收货方ID" prop="inSupplierId">
|
||||
<el-input v-model="queryParams.inSupplierId" placeholder="请输入收货供应商系统ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="跟单姓名" prop="trackerName">
|
||||
<el-input v-model="queryParams.trackerName" placeholder="请输入跟单人" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="跟单ID" prop="trackerId">
|
||||
<el-input v-model="queryParams.trackerId" placeholder="请输入跟单id" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货时间" prop="sendTime">
|
||||
<el-date-picker clearable v-model="queryParams.sendTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择发货时间" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['amz:shipForward:add']">新增 </el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:shipForward:edit']"
|
||||
>修改
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:shipForward:remove']"
|
||||
>删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:shipForward:export']">导出 </el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" :data="shipForwardList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
|
||||
<el-table-column label="采购单号" align="center" prop="orderSn" />
|
||||
<el-table-column label="采购店铺名称" align="center" prop="storeName" />
|
||||
<el-table-column label="SKU" align="center" prop="sku" />
|
||||
<el-table-column label="产品全称" align="center" prop="productName" />
|
||||
<el-table-column label="实际发货数量" align="center" prop="quantitySend" />
|
||||
<el-table-column label="发货方" align="center" prop="outSupplierName" />
|
||||
<!-- <el-table-column label="发货供应商系统ID" align="center" prop="outSupplierId" />-->
|
||||
<el-table-column label="收货方" align="center" prop="inSupplierName" />
|
||||
<!-- <el-table-column label="收货供应商系统ID" align="center" prop="inSupplierId" />-->
|
||||
<el-table-column label="计划发货起始时间" align="center" prop="shipmentStart" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.shipmentStart, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="计划发货截止时间" align="center" prop="shipmentEnd" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.shipmentEnd, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="跟单人" align="center" prop="trackerName" />
|
||||
<!-- <el-table-column label="跟单id" align="center" prop="trackerId" />-->
|
||||
<el-table-column label="转发状态" align="center" prop="fwdStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="forward_status" :value="scope.row.fwdStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发货时间" align="center" prop="sendTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.sendTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['amz:shipForward:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['amz:shipForward:remove']"></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
<!-- 添加或修改货件转发对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="800px" append-to-body>
|
||||
<el-form ref="shipForwardFormRef" :model="form" :rules="rules" label-width="100px">
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="form.orderSn" placeholder="请输入采购单号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="店铺名称" prop="storeName">
|
||||
<el-input v-model="form.storeName" placeholder="请输入采购店铺名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="SKU" prop="sku">
|
||||
<el-input v-model="form.sku" placeholder="请输入产品唯一标识码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品全称" prop="productName">
|
||||
<el-input v-model="form.productName" placeholder="请输入产品全称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货数量" prop="quantitySend">
|
||||
<el-input v-model="form.quantitySend" placeholder="请输入实际发货数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货方" prop="outSupplierName">
|
||||
<el-input v-model="form.outSupplierName" placeholder="请输入发货供应商名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货方ID" prop="outSupplierId">
|
||||
<el-input v-model="form.outSupplierId" placeholder="请输入发货供应商系统ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="收货方" prop="inSupplierName">
|
||||
<el-input v-model="form.inSupplierName" placeholder="请输入收货供应商名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="收货方ID" prop="inSupplierId">
|
||||
<el-input v-model="form.inSupplierId" placeholder="请输入收货供应商系统ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货区间" prop="shipmentStart">
|
||||
<el-date-picker
|
||||
v-model="intervalDate"
|
||||
type="daterange"
|
||||
range-separator="到"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:size="'small'"
|
||||
@change="intervalAction"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="跟单人" prop="trackerName">
|
||||
<el-input v-model="form.trackerName" placeholder="请输入跟单人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="跟单id" prop="trackerId">
|
||||
<el-input v-model="form.trackerId" placeholder="请输入跟单id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货时间" prop="sendTime">
|
||||
<el-date-picker clearable v-model="form.sendTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择发货时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :title="orderDialog.title" v-model="orderDialog.visible" width="1500px" append-to-body>
|
||||
<el-card shadow="never">
|
||||
<!-- <template #header>-->
|
||||
<!-- <el-row :gutter="10" class="mb8">-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['amz:purchaseOrder:add']"> 新增 </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:purchaseOrder:edit']"-->
|
||||
<!-- >修改-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:purchaseOrder:remove']"-->
|
||||
<!-- >删除-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:purchaseOrder:export']">导出 </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <right-toolbar v-model:showSearch="showSearch" @queryTable="getOrderList"></right-toolbar>-->
|
||||
<!-- </el-row>-->
|
||||
<!-- </template>-->
|
||||
|
||||
<el-table v-loading="orderLoading" :data="purchaseOrderList" @selection-change="handleSelectionChange">
|
||||
<!-- <el-table-column type="selection" width="55" align="center" />-->
|
||||
<el-table-column label="采购单号" align="center" prop="orderSn" />
|
||||
<!-- <el-table-column label="自定义单号" align="center" prop="customOrderSn" />-->
|
||||
<!-- <el-table-column label="供应商ID" align="center" prop="supplierId" />-->
|
||||
<el-table-column label="供应商名称" align="center" prop="supplierName" />
|
||||
<el-table-column label="店铺名称" align="center" prop="storeName" />
|
||||
<!-- <el-table-column label="采购员ID" align="center" prop="optUid" />-->
|
||||
<!-- <el-table-column label="审核人姓名" align="center" prop="auditorRealname" />-->
|
||||
<!-- <el-table-column label="操作人姓名" align="center" prop="optRealname" />-->
|
||||
<!-- <el-table-column label="最后操作人姓名" align="center" prop="lastRealname" />-->
|
||||
<el-table-column label="下单时间" align="center" prop="orderTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.orderTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="应付货款" align="center" prop="payment" />-->
|
||||
<!-- <el-table-column label="审核人员ID" align="center" prop="auditorUid" />-->
|
||||
<!-- <el-table-column label="审核时间" align="center" prop="auditorTime" width="180">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span>{{ parseTime(scope.row.auditorTime, '{y}-{m}-{d}') }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="最后操作人员ID" align="center" prop="lastUid" />-->
|
||||
<!-- <el-table-column label="最后操作时间" align="center" prop="lastTime" width="180">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span>{{ parseTime(scope.row.lastTime, '{y}-{m}-{d}') }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="作废原因" align="center" prop="reason" />-->
|
||||
<!-- <el-table-column label="是否含税" align="center" prop="isTax" />-->
|
||||
<!-- <el-table-column label="采购单状态" align="center" prop="status" />-->
|
||||
<!-- <el-table-column label="状态说明" align="center" prop="statusText" />-->
|
||||
<!-- <el-table-column label="支付状态说明" align="center" prop="payStatusText" />-->
|
||||
<!-- <el-table-column label="到货状态" align="center" prop="statusShipped" />-->
|
||||
<!-- <el-table-column label="到货状态说明" align="center" prop="statusShippedText" />-->
|
||||
<!-- <el-table-column label="货物总价" align="center" prop="amountTotal" />-->
|
||||
<!-- <el-table-column label="总金额" align="center" prop="totalPrice" />-->
|
||||
<!-- <el-table-column label="币种符号" align="center" prop="icon" />-->
|
||||
<!-- <el-table-column label="付款状态" align="center" prop="payStatus" />-->
|
||||
|
||||
<!-- <el-table-column label="其他费用" align="center" prop="otherFee" />-->
|
||||
<!-- <el-table-column label="其他费用币种" align="center" prop="otherCurrency" />-->
|
||||
<!-- <el-table-column label="费用分摊方式" align="center" prop="feePartType" />-->
|
||||
<!-- <el-table-column label="运费" align="center" prop="shippingPrice" />-->
|
||||
<!-- <el-table-column label="运费币种" align="center" prop="shippingCurrency" />-->
|
||||
<!-- <el-table-column label="采购币种" align="center" prop="purchaseCurrency" />-->
|
||||
<!-- <el-table-column label="采购汇率" align="center" prop="purchaseRate" />-->
|
||||
<!-- <el-table-column label="采购总量" align="center" prop="quantityTotal" />-->
|
||||
<!-- <el-table-column label="仓库ID" align="center" prop="wid" />-->
|
||||
<!-- <el-table-column label="仓库名称" align="center" prop="wareHouseName" />-->
|
||||
<!-- <el-table-column label="仓库名(备份)" align="center" prop="wareHouseBakName" />-->
|
||||
<!-- <el-table-column label="入库量" align="center" prop="quantityEntry" />-->
|
||||
<el-table-column label="实际采购量" align="center" prop="quantityReal" />
|
||||
<!-- <el-table-column label="待到货量" align="center" prop="quantityReceive" />-->
|
||||
<!-- <el-table-column label="采购方ID" align="center" prop="purchaserId" />-->
|
||||
<!-- <el-table-column label="联系人" align="center" prop="contactPerson" />-->
|
||||
<!-- <el-table-column label="联系方式" align="center" prop="contactNumber" />-->
|
||||
<!-- <el-table-column label="结算方式" align="center" prop="settlementMethod" />-->
|
||||
<!-- <el-table-column label="结算描述" align="center" prop="settlementDescription" />-->
|
||||
<!-- <el-table-column label="支付方式" align="center" prop="paymentMethod" />-->
|
||||
<el-table-column label="交货天数" align="center" prop="estDlvDays" />
|
||||
<!-- <el-table-column label="订单状态" align="center" prop="orderStatus">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <dict-tag :options="vendor_order_status" :value="scope.row.orderStatus" />-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="交货时间" align="center" prop="deliveryTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.deliveryTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="订单交付变动天数" align="center" prop="dlvTimeVar" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['amz:purchaseOrder:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<!-- <el-button size="small" link type="primary" @click="handleConfirm(scope.row)" v-hasPermi="['amz:purchaseOrder:remove']">-->
|
||||
<!-- 确认-->
|
||||
<!-- </el-button>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="orderTotal > 0"
|
||||
:total="orderTotal"
|
||||
v-model:page="orderQueryParams.pageNum"
|
||||
v-model:limit="orderQueryParams.pageSize"
|
||||
@pagination="getOrderList"
|
||||
/>
|
||||
</el-card>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="ShipForward" lang="ts">
|
||||
import { listShipForward, getShipForward, delShipForward, addShipForward, updateShipForward } from '@/api/amz/shipForward';
|
||||
import { ShipForwardVO, ShipForwardQuery, ShipForwardForm } from '@/api/amz/shipForward/types';
|
||||
import { listPurchaseOrder } from '@/api/amz/purchaseOrder';
|
||||
import { PurchaseOrderVO } from '@/api/amz/purchaseOrder/types';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
const { forward_status } = toRefs<any>(proxy?.useDict('forward_status'));
|
||||
|
||||
const shipForwardList = ref<ShipForwardVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const orderLoading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
const orderTotal = ref(0);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const shipForwardFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const orderDialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: ShipForwardForm = {
|
||||
id: undefined,
|
||||
orderSn: undefined,
|
||||
storeName: undefined,
|
||||
sku: undefined,
|
||||
productName: undefined,
|
||||
quantitySend: undefined,
|
||||
outSupplierName: undefined,
|
||||
outSupplierId: undefined,
|
||||
inSupplierName: undefined,
|
||||
inSupplierId: undefined,
|
||||
shipmentStart: undefined,
|
||||
shipmentEnd: undefined,
|
||||
trackerName: undefined,
|
||||
trackerId: undefined,
|
||||
fwdStatus: undefined,
|
||||
sendTime: undefined
|
||||
};
|
||||
const data = reactive<PageData<ShipForwardForm, ShipForwardQuery>>({
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderSn: undefined,
|
||||
storeName: undefined,
|
||||
sku: undefined,
|
||||
productName: undefined,
|
||||
quantitySend: undefined,
|
||||
outSupplierName: undefined,
|
||||
outSupplierId: undefined,
|
||||
inSupplierName: undefined,
|
||||
inSupplierId: undefined,
|
||||
shipmentStart: undefined,
|
||||
shipmentEnd: undefined,
|
||||
trackerName: undefined,
|
||||
trackerId: undefined,
|
||||
fwdStatus: undefined,
|
||||
sendTime: undefined,
|
||||
type: 'shipForward',
|
||||
params: {}
|
||||
},
|
||||
rules: {
|
||||
id: [{ required: true, message: '$comment不能为空', trigger: 'blur' }],
|
||||
orderSn: [{ required: true, message: '采购单号不能为空', trigger: 'blur' }],
|
||||
storeName: [{ required: true, message: '采购店铺名称不能为空', trigger: 'blur' }],
|
||||
sku: [{ required: true, message: '产品唯一标识码不能为空', trigger: 'blur' }],
|
||||
productName: [{ required: true, message: '产品全称不能为空', trigger: 'blur' }],
|
||||
quantitySend: [{ required: true, message: '实际发货数量不能为空', trigger: 'blur' }],
|
||||
outSupplierName: [{ required: true, message: '发货供应商名称不能为空', trigger: 'blur' }],
|
||||
outSupplierId: [{ required: true, message: '发货供应商系统ID不能为空', trigger: 'blur' }],
|
||||
inSupplierName: [{ required: true, message: '收货供应商名称不能为空', trigger: 'blur' }],
|
||||
inSupplierId: [{ required: true, message: '收货供应商系统ID不能为空', trigger: 'blur' }],
|
||||
shipmentStart: [{ required: true, message: '计划发货起始时间不能为空', trigger: 'blur' }],
|
||||
shipmentEnd: [{ required: true, message: '计划发货截止时间不能为空', trigger: 'blur' }],
|
||||
trackerName: [{ required: true, message: '跟单人不能为空', trigger: 'blur' }],
|
||||
trackerId: [{ required: true, message: '跟单id不能为空', trigger: 'blur' }],
|
||||
fwdStatus: [{ required: true, message: '转发状态不能为空', trigger: 'change' }],
|
||||
sendTime: [{ required: true, message: '发货时间不能为空', trigger: 'blur' }]
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
const orderQueryParams = ref({
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderSn: undefined,
|
||||
customOrderSn: undefined,
|
||||
supplierId: undefined,
|
||||
supplierName: undefined,
|
||||
optUid: undefined,
|
||||
auditorRealname: undefined,
|
||||
optRealname: undefined,
|
||||
lastRealname: undefined,
|
||||
orderTime: undefined,
|
||||
payment: undefined,
|
||||
auditorUid: undefined,
|
||||
auditorTime: undefined,
|
||||
lastUid: undefined,
|
||||
lastTime: undefined,
|
||||
reason: undefined,
|
||||
isTax: undefined,
|
||||
status: undefined,
|
||||
statusText: undefined,
|
||||
payStatusText: undefined,
|
||||
statusShipped: undefined,
|
||||
statusShippedText: undefined,
|
||||
amountTotal: undefined,
|
||||
totalPrice: undefined,
|
||||
icon: undefined,
|
||||
payStatus: undefined,
|
||||
otherFee: undefined,
|
||||
otherCurrency: undefined,
|
||||
feePartType: undefined,
|
||||
shippingPrice: undefined,
|
||||
shippingCurrency: undefined,
|
||||
purchaseCurrency: undefined,
|
||||
purchaseRate: undefined,
|
||||
quantityTotal: undefined,
|
||||
wid: undefined,
|
||||
wareHouseName: undefined,
|
||||
wareHouseBakName: undefined,
|
||||
quantityEntry: undefined,
|
||||
quantityReal: undefined,
|
||||
quantityReceive: undefined,
|
||||
purchaserId: undefined,
|
||||
contactPerson: undefined,
|
||||
contactNumber: undefined,
|
||||
settlementMethod: undefined,
|
||||
settlementDescription: undefined,
|
||||
paymentMethod: undefined,
|
||||
estDlvDays: undefined,
|
||||
orderStatus: 'ord_confirmed',
|
||||
deliveryTime: undefined,
|
||||
dlvTimeVar: undefined,
|
||||
params: {}
|
||||
});
|
||||
|
||||
/** 查询货件转发列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listShipForward(queryParams.value);
|
||||
shipForwardList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
const purchaseOrderList = ref<PurchaseOrderVO[]>([]);
|
||||
|
||||
const getOrderList = async () => {
|
||||
orderLoading.value = true;
|
||||
const res = await listPurchaseOrder(orderQueryParams.value);
|
||||
purchaseOrderList.value = res.rows;
|
||||
orderTotal.value = res.total;
|
||||
orderLoading.value = false;
|
||||
};
|
||||
|
||||
const intervalDate = ref<any>();
|
||||
|
||||
const intervalAction = () => {
|
||||
console.log('intervalDate', intervalDate);
|
||||
queryParams.value.shipmentStart = getDateToString(intervalDate.value[0]);
|
||||
queryParams.value.shipmentEnd = getDateToString(intervalDate.value[1]);
|
||||
};
|
||||
|
||||
const getDateToString = (date: Date): string => {
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需加 1
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
const hours = String(date.getHours()).padStart(2, '0');
|
||||
const minutes = String(date.getMinutes()).padStart(2, '0');
|
||||
const seconds = String(date.getSeconds()).padStart(2, '0');
|
||||
|
||||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
shipForwardFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
};
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: ShipForwardVO[]) => {
|
||||
ids.value = selection.map((item) => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
};
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = '订单列表';
|
||||
|
||||
// getOrderList();
|
||||
// orderDialog.visible = true;
|
||||
// orderDialog.title = '订单列表';
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: ShipForwardVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getShipForward(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改货件转发';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
shipForwardFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.id) {
|
||||
await updateShipForward(form.value).finally(() => (buttonLoading.value = false));
|
||||
} else {
|
||||
await addShipForward(form.value).finally(() => (buttonLoading.value = false));
|
||||
}
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: ShipForwardVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除货件转发编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
||||
await delShipForward(_ids);
|
||||
proxy?.$modal.msgSuccess('删除成功');
|
||||
await getList();
|
||||
};
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download(
|
||||
'amz/shipForward/export',
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`shipForward_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
625
src/views/amz/shipForwardIn/index.vue
Normal file
625
src/views/amz/shipForwardIn/index.vue
Normal file
@ -0,0 +1,625 @@
|
||||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="100px">
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="queryParams.orderSn" placeholder="请输入采购单号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="店铺名称" prop="storeName">
|
||||
<el-input v-model="queryParams.storeName" placeholder="请输入采购店铺名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="sku" prop="sku">
|
||||
<el-input v-model="queryParams.sku" placeholder="请输入产品唯一标识码" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品全称" prop="productName">
|
||||
<el-input v-model="queryParams.productName" placeholder="请输入产品全称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实际发货数量" prop="quantitySend">
|
||||
<el-input v-model="queryParams.quantitySend" placeholder="请输入实际发货数量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货方" prop="outSupplierName">
|
||||
<el-input v-model="queryParams.outSupplierName" placeholder="请输入发货供应商名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货方ID" prop="outSupplierId">
|
||||
<el-input v-model="queryParams.outSupplierId" placeholder="请输入发货供应商系统ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="收货方" prop="inSupplierName">
|
||||
<el-input v-model="queryParams.inSupplierName" placeholder="请输入收货供应商名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="收货方ID" prop="inSupplierId">
|
||||
<el-input v-model="queryParams.inSupplierId" placeholder="请输入收货供应商系统ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="跟单姓名" prop="trackerName">
|
||||
<el-input v-model="queryParams.trackerName" placeholder="请输入跟单人" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="跟单ID" prop="trackerId">
|
||||
<el-input v-model="queryParams.trackerId" placeholder="请输入跟单id" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货时间" prop="sendTime">
|
||||
<el-date-picker clearable v-model="queryParams.sendTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择发货时间" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['amz:shipForward:add']">新增 </el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:shipForward:edit']"
|
||||
>修改
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:shipForward:remove']"
|
||||
>删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:shipForward:export']">导出 </el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" :data="shipForwardList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
|
||||
<el-table-column label="采购单号" align="center" prop="orderSn" />
|
||||
<el-table-column label="采购店铺名称" align="center" prop="storeName" />
|
||||
<el-table-column label="SKU" align="center" prop="sku" />
|
||||
<el-table-column label="产品全称" align="center" prop="productName" />
|
||||
<el-table-column label="实际发货数量" align="center" prop="quantitySend" />
|
||||
<el-table-column label="发货方" align="center" prop="outSupplierName" />
|
||||
<!-- <el-table-column label="发货供应商系统ID" align="center" prop="outSupplierId" />-->
|
||||
<el-table-column label="收货方" align="center" prop="inSupplierName" />
|
||||
<!-- <el-table-column label="收货供应商系统ID" align="center" prop="inSupplierId" />-->
|
||||
<el-table-column label="计划发货起始时间" align="center" prop="shipmentStart" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.shipmentStart, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="计划发货截止时间" align="center" prop="shipmentEnd" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.shipmentEnd, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="跟单人" align="center" prop="trackerName" />
|
||||
<!-- <el-table-column label="跟单id" align="center" prop="trackerId" />-->
|
||||
<el-table-column label="转发状态" align="center" prop="fwdStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="forward_status" :value="scope.row.fwdStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发货时间" align="center" prop="sendTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.sendTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
icon="Edit"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasRoles="['superadmin']"
|
||||
v-hasPermi="['amz:shipForward:edit']"
|
||||
></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
icon="Delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasRoles="['superadmin']"
|
||||
v-hasPermi="['amz:shipForward:remove']"
|
||||
></el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<el-button link type="primary" @click="handleReceive(scope.row)" v-hasRoles="['superadmin']" v-hasPermi="['amz:shipForward:remove']"
|
||||
>确认收货
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
<!-- 添加或修改货件转发对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="800px" append-to-body>
|
||||
<el-form ref="shipForwardFormRef" :model="form" :rules="rules" label-width="100px">
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="form.orderSn" placeholder="请输入采购单号" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="店铺名称" prop="storeName">
|
||||
<el-input v-model="form.storeName" placeholder="请输入采购店铺名称" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="SKU" prop="sku">
|
||||
<el-input v-model="form.sku" placeholder="请输入产品唯一标识码" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品全称" prop="productName">
|
||||
<el-input v-model="form.productName" placeholder="请输入产品全称" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货数量" prop="quantitySend">
|
||||
<el-input v-model="form.quantitySend" placeholder="请输入实际发货数量" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货方" prop="outSupplierName">
|
||||
<el-input v-model="form.outSupplierName" placeholder="请输入发货供应商名称" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="转发状态" prop="fwdStatus">
|
||||
<el-select v-model="form.fwdStatus" placeholder="请选择转发状态" disabled>
|
||||
<el-option v-for="dict in forward_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="发货方ID" prop="outSupplierId">-->
|
||||
<!-- <el-input v-model="form.outSupplierId" placeholder="请输入发货供应商系统ID" disabled />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="收货方" prop="inSupplierName">
|
||||
<el-input v-model="form.inSupplierName" placeholder="请输入收货供应商名称" disabled />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="收货方ID" prop="inSupplierId">-->
|
||||
<!-- <el-input v-model="form.inSupplierId" placeholder="请输入收货供应商系统ID" disabled />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="发货区间" prop="shipmentStart">-->
|
||||
<!-- <el-date-picker-->
|
||||
<!-- v-model="intervalDate"-->
|
||||
<!-- type="daterange"-->
|
||||
<!-- range-separator="到"-->
|
||||
<!-- start-placeholder="开始日期"-->
|
||||
<!-- end-placeholder="结束日期"-->
|
||||
<!-- :size="'small'"-->
|
||||
<!-- @change="intervalAction"-->
|
||||
<!-- disabled-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="跟单人" prop="trackerName">-->
|
||||
<!-- <el-input v-model="form.trackerName" placeholder="请输入跟单人" disabled/>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="跟单id" prop="trackerId">-->
|
||||
<!-- <el-input v-model="form.trackerId" placeholder="请输入跟单id" disabled/>-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="发货时间" prop="sendTime">
|
||||
<el-date-picker clearable v-model="form.sendTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择发货时间" disabled>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确认已收货</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :title="orderDialog.title" v-model="orderDialog.visible" width="1500px" append-to-body>
|
||||
<el-card shadow="never">
|
||||
<!-- <template #header>-->
|
||||
<!-- <el-row :gutter="10" class="mb8">-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['amz:purchaseOrder:add']"> 新增 </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:purchaseOrder:edit']"-->
|
||||
<!-- >修改-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:purchaseOrder:remove']"-->
|
||||
<!-- >删除-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:purchaseOrder:export']">导出 </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <right-toolbar v-model:showSearch="showSearch" @queryTable="getOrderList"></right-toolbar>-->
|
||||
<!-- </el-row>-->
|
||||
<!-- </template>-->
|
||||
|
||||
<el-table v-loading="orderLoading" :data="purchaseOrderList" @selection-change="handleSelectionChange">
|
||||
<!-- <el-table-column type="selection" width="55" align="center" />-->
|
||||
<el-table-column label="采购单号" align="center" prop="orderSn" />
|
||||
<!-- <el-table-column label="自定义单号" align="center" prop="customOrderSn" />-->
|
||||
<!-- <el-table-column label="供应商ID" align="center" prop="supplierId" />-->
|
||||
<el-table-column label="供应商名称" align="center" prop="supplierName" />
|
||||
<el-table-column label="店铺名称" align="center" prop="storeName" />
|
||||
<!-- <el-table-column label="采购员ID" align="center" prop="optUid" />-->
|
||||
<!-- <el-table-column label="审核人姓名" align="center" prop="auditorRealname" />-->
|
||||
<!-- <el-table-column label="操作人姓名" align="center" prop="optRealname" />-->
|
||||
<!-- <el-table-column label="最后操作人姓名" align="center" prop="lastRealname" />-->
|
||||
<el-table-column label="下单时间" align="center" prop="orderTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.orderTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="应付货款" align="center" prop="payment" />-->
|
||||
<!-- <el-table-column label="审核人员ID" align="center" prop="auditorUid" />-->
|
||||
<!-- <el-table-column label="审核时间" align="center" prop="auditorTime" width="180">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span>{{ parseTime(scope.row.auditorTime, '{y}-{m}-{d}') }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="最后操作人员ID" align="center" prop="lastUid" />-->
|
||||
<!-- <el-table-column label="最后操作时间" align="center" prop="lastTime" width="180">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span>{{ parseTime(scope.row.lastTime, '{y}-{m}-{d}') }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="作废原因" align="center" prop="reason" />-->
|
||||
<!-- <el-table-column label="是否含税" align="center" prop="isTax" />-->
|
||||
<!-- <el-table-column label="采购单状态" align="center" prop="status" />-->
|
||||
<!-- <el-table-column label="状态说明" align="center" prop="statusText" />-->
|
||||
<!-- <el-table-column label="支付状态说明" align="center" prop="payStatusText" />-->
|
||||
<!-- <el-table-column label="到货状态" align="center" prop="statusShipped" />-->
|
||||
<!-- <el-table-column label="到货状态说明" align="center" prop="statusShippedText" />-->
|
||||
<!-- <el-table-column label="货物总价" align="center" prop="amountTotal" />-->
|
||||
<!-- <el-table-column label="总金额" align="center" prop="totalPrice" />-->
|
||||
<!-- <el-table-column label="币种符号" align="center" prop="icon" />-->
|
||||
<!-- <el-table-column label="付款状态" align="center" prop="payStatus" />-->
|
||||
|
||||
<!-- <el-table-column label="其他费用" align="center" prop="otherFee" />-->
|
||||
<!-- <el-table-column label="其他费用币种" align="center" prop="otherCurrency" />-->
|
||||
<!-- <el-table-column label="费用分摊方式" align="center" prop="feePartType" />-->
|
||||
<!-- <el-table-column label="运费" align="center" prop="shippingPrice" />-->
|
||||
<!-- <el-table-column label="运费币种" align="center" prop="shippingCurrency" />-->
|
||||
<!-- <el-table-column label="采购币种" align="center" prop="purchaseCurrency" />-->
|
||||
<!-- <el-table-column label="采购汇率" align="center" prop="purchaseRate" />-->
|
||||
<!-- <el-table-column label="采购总量" align="center" prop="quantityTotal" />-->
|
||||
<!-- <el-table-column label="仓库ID" align="center" prop="wid" />-->
|
||||
<!-- <el-table-column label="仓库名称" align="center" prop="wareHouseName" />-->
|
||||
<!-- <el-table-column label="仓库名(备份)" align="center" prop="wareHouseBakName" />-->
|
||||
<!-- <el-table-column label="入库量" align="center" prop="quantityEntry" />-->
|
||||
<el-table-column label="实际采购量" align="center" prop="quantityReal" />
|
||||
<!-- <el-table-column label="待到货量" align="center" prop="quantityReceive" />-->
|
||||
<!-- <el-table-column label="采购方ID" align="center" prop="purchaserId" />-->
|
||||
<!-- <el-table-column label="联系人" align="center" prop="contactPerson" />-->
|
||||
<!-- <el-table-column label="联系方式" align="center" prop="contactNumber" />-->
|
||||
<!-- <el-table-column label="结算方式" align="center" prop="settlementMethod" />-->
|
||||
<!-- <el-table-column label="结算描述" align="center" prop="settlementDescription" />-->
|
||||
<!-- <el-table-column label="支付方式" align="center" prop="paymentMethod" />-->
|
||||
<el-table-column label="交货天数" align="center" prop="estDlvDays" />
|
||||
<!-- <el-table-column label="订单状态" align="center" prop="orderStatus">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <dict-tag :options="vendor_order_status" :value="scope.row.orderStatus" />-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="交货时间" align="center" prop="deliveryTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.deliveryTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="订单交付变动天数" align="center" prop="dlvTimeVar" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['amz:purchaseOrder:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<!-- <el-button size="small" link type="primary" @click="handleConfirm(scope.row)" v-hasPermi="['amz:purchaseOrder:remove']">-->
|
||||
<!-- 确认-->
|
||||
<!-- </el-button>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="orderTotal > 0"
|
||||
:total="orderTotal"
|
||||
v-model:page="orderQueryParams.pageNum"
|
||||
v-model:limit="orderQueryParams.pageSize"
|
||||
@pagination="getOrderList"
|
||||
/>
|
||||
</el-card>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="ShipForward" lang="ts">
|
||||
import { listShipForward, getShipForward, delShipForward, addShipForward, updateShipForward } from '@/api/amz/shipForward';
|
||||
import { ShipForwardVO, ShipForwardQuery, ShipForwardForm } from '@/api/amz/shipForward/types';
|
||||
import { listPurchaseOrder } from '@/api/amz/purchaseOrder';
|
||||
import { PurchaseOrderVO } from '@/api/amz/purchaseOrder/types';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { forward_status } = toRefs<any>(proxy?.useDict('forward_status'));
|
||||
|
||||
const shipForwardList = ref<ShipForwardVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const orderLoading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
const orderTotal = ref(0);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const shipForwardFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const orderDialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: ShipForwardForm = {
|
||||
id: undefined,
|
||||
orderSn: undefined,
|
||||
storeName: undefined,
|
||||
sku: undefined,
|
||||
productName: undefined,
|
||||
quantitySend: undefined,
|
||||
outSupplierName: undefined,
|
||||
outSupplierId: undefined,
|
||||
inSupplierName: undefined,
|
||||
inSupplierId: undefined,
|
||||
shipmentStart: undefined,
|
||||
shipmentEnd: undefined,
|
||||
trackerName: undefined,
|
||||
trackerId: undefined,
|
||||
fwdStatus: undefined,
|
||||
sendTime: undefined
|
||||
};
|
||||
const data = reactive<PageData<ShipForwardForm, ShipForwardQuery>>({
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderSn: undefined,
|
||||
storeName: undefined,
|
||||
sku: undefined,
|
||||
productName: undefined,
|
||||
quantitySend: undefined,
|
||||
outSupplierName: undefined,
|
||||
outSupplierId: undefined,
|
||||
inSupplierName: undefined,
|
||||
inSupplierId: undefined,
|
||||
shipmentStart: undefined,
|
||||
shipmentEnd: undefined,
|
||||
trackerName: undefined,
|
||||
trackerId: undefined,
|
||||
fwdStatus: undefined,
|
||||
sendTime: undefined,
|
||||
type: 'shipForwardIn',
|
||||
params: {}
|
||||
},
|
||||
rules: {
|
||||
id: [{ required: true, message: '$comment不能为空', trigger: 'blur' }],
|
||||
orderSn: [{ required: true, message: '采购单号不能为空', trigger: 'blur' }],
|
||||
storeName: [{ required: true, message: '采购店铺名称不能为空', trigger: 'blur' }],
|
||||
sku: [{ required: true, message: '产品唯一标识码不能为空', trigger: 'blur' }],
|
||||
productName: [{ required: true, message: '产品全称不能为空', trigger: 'blur' }],
|
||||
quantitySend: [{ required: true, message: '实际发货数量不能为空', trigger: 'blur' }],
|
||||
outSupplierName: [{ required: true, message: '发货供应商名称不能为空', trigger: 'blur' }],
|
||||
outSupplierId: [{ required: true, message: '发货供应商系统ID不能为空', trigger: 'blur' }],
|
||||
inSupplierName: [{ required: true, message: '收货供应商名称不能为空', trigger: 'blur' }],
|
||||
inSupplierId: [{ required: true, message: '收货供应商系统ID不能为空', trigger: 'blur' }],
|
||||
shipmentStart: [{ required: true, message: '计划发货起始时间不能为空', trigger: 'blur' }],
|
||||
shipmentEnd: [{ required: true, message: '计划发货截止时间不能为空', trigger: 'blur' }],
|
||||
trackerName: [{ required: true, message: '跟单人不能为空', trigger: 'blur' }],
|
||||
trackerId: [{ required: true, message: '跟单id不能为空', trigger: 'blur' }],
|
||||
fwdStatus: [{ required: true, message: '转发状态不能为空', trigger: 'change' }],
|
||||
sendTime: [{ required: true, message: '发货时间不能为空', trigger: 'blur' }]
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
const orderQueryParams = ref({
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderSn: undefined,
|
||||
customOrderSn: undefined,
|
||||
supplierId: undefined,
|
||||
supplierName: undefined,
|
||||
optUid: undefined,
|
||||
auditorRealname: undefined,
|
||||
optRealname: undefined,
|
||||
lastRealname: undefined,
|
||||
orderTime: undefined,
|
||||
payment: undefined,
|
||||
auditorUid: undefined,
|
||||
auditorTime: undefined,
|
||||
lastUid: undefined,
|
||||
lastTime: undefined,
|
||||
reason: undefined,
|
||||
isTax: undefined,
|
||||
status: undefined,
|
||||
statusText: undefined,
|
||||
payStatusText: undefined,
|
||||
statusShipped: undefined,
|
||||
statusShippedText: undefined,
|
||||
amountTotal: undefined,
|
||||
totalPrice: undefined,
|
||||
icon: undefined,
|
||||
payStatus: undefined,
|
||||
otherFee: undefined,
|
||||
otherCurrency: undefined,
|
||||
feePartType: undefined,
|
||||
shippingPrice: undefined,
|
||||
shippingCurrency: undefined,
|
||||
purchaseCurrency: undefined,
|
||||
purchaseRate: undefined,
|
||||
quantityTotal: undefined,
|
||||
wid: undefined,
|
||||
wareHouseName: undefined,
|
||||
wareHouseBakName: undefined,
|
||||
quantityEntry: undefined,
|
||||
quantityReal: undefined,
|
||||
quantityReceive: undefined,
|
||||
purchaserId: undefined,
|
||||
contactPerson: undefined,
|
||||
contactNumber: undefined,
|
||||
settlementMethod: undefined,
|
||||
settlementDescription: undefined,
|
||||
paymentMethod: undefined,
|
||||
estDlvDays: undefined,
|
||||
orderStatus: 'ord_confirmed',
|
||||
deliveryTime: undefined,
|
||||
dlvTimeVar: undefined,
|
||||
params: {}
|
||||
});
|
||||
|
||||
/** 查询货件转发列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listShipForward(queryParams.value);
|
||||
shipForwardList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
const purchaseOrderList = ref<PurchaseOrderVO[]>([]);
|
||||
|
||||
const getOrderList = async () => {
|
||||
orderLoading.value = true;
|
||||
const res = await listPurchaseOrder(orderQueryParams.value);
|
||||
purchaseOrderList.value = res.rows;
|
||||
orderTotal.value = res.total;
|
||||
orderLoading.value = false;
|
||||
};
|
||||
|
||||
const intervalDate = ref<any>();
|
||||
|
||||
const intervalAction = () => {
|
||||
console.log('intervalDate', intervalDate);
|
||||
queryParams.value.shipmentStart = getDateToString(intervalDate.value[0]);
|
||||
queryParams.value.shipmentEnd = getDateToString(intervalDate.value[1]);
|
||||
};
|
||||
|
||||
const getDateToString = (date: Date): string => {
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需加 1
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
const hours = String(date.getHours()).padStart(2, '0');
|
||||
const minutes = String(date.getMinutes()).padStart(2, '0');
|
||||
const seconds = String(date.getSeconds()).padStart(2, '0');
|
||||
|
||||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
shipForwardFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
};
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: ShipForwardVO[]) => {
|
||||
ids.value = selection.map((item) => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
};
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = '订单列表';
|
||||
|
||||
// getOrderList();
|
||||
// orderDialog.visible = true;
|
||||
// orderDialog.title = '订单列表';
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: ShipForwardVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getShipForward(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改货件转发';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
shipForwardFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.id) {
|
||||
await updateShipForward(form.value).finally(() => (buttonLoading.value = false));
|
||||
} else {
|
||||
await addShipForward(form.value).finally(() => (buttonLoading.value = false));
|
||||
}
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: ShipForwardVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除货件转发编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
||||
await delShipForward(_ids);
|
||||
proxy?.$modal.msgSuccess('删除成功');
|
||||
await getList();
|
||||
};
|
||||
const handleReceive = async (row?: ShipForwardVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getShipForward(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
form.value.fwdStatus = 'completed';
|
||||
dialog.visible = true;
|
||||
dialog.title = '确认已收到货';
|
||||
};
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download(
|
||||
'amz/shipForward/export',
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`shipForward_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
605
src/views/amz/shipForwardOut/index.vue
Normal file
605
src/views/amz/shipForwardOut/index.vue
Normal file
@ -0,0 +1,605 @@
|
||||
<template>
|
||||
<div class="p-2">
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="100px">
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="queryParams.orderSn" placeholder="请输入采购单号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="店铺名称" prop="storeName">
|
||||
<el-input v-model="queryParams.storeName" placeholder="请输入采购店铺名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="sku" prop="sku">
|
||||
<el-input v-model="queryParams.sku" placeholder="请输入产品唯一标识码" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品全称" prop="productName">
|
||||
<el-input v-model="queryParams.productName" placeholder="请输入产品全称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="实际发货数量" prop="quantitySend">
|
||||
<el-input v-model="queryParams.quantitySend" placeholder="请输入实际发货数量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货方" prop="outSupplierName">
|
||||
<el-input v-model="queryParams.outSupplierName" placeholder="请输入发货供应商名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货方ID" prop="outSupplierId">
|
||||
<el-input v-model="queryParams.outSupplierId" placeholder="请输入发货供应商系统ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="收货方" prop="inSupplierName">
|
||||
<el-input v-model="queryParams.inSupplierName" placeholder="请输入收货供应商名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="收货方ID" prop="inSupplierId">
|
||||
<el-input v-model="queryParams.inSupplierId" placeholder="请输入收货供应商系统ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="跟单姓名" prop="trackerName">
|
||||
<el-input v-model="queryParams.trackerName" placeholder="请输入跟单人" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="跟单ID" prop="trackerId">
|
||||
<el-input v-model="queryParams.trackerId" placeholder="请输入跟单id" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货时间" prop="sendTime">
|
||||
<el-date-picker clearable v-model="queryParams.sendTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择发货时间" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['amz:shipForward:add']">新增 </el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:shipForward:edit']"
|
||||
>修改
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:shipForward:remove']"
|
||||
>删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:shipForward:export']">导出 </el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" :data="shipForwardList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
|
||||
<el-table-column label="采购单号" align="center" prop="orderSn" />
|
||||
<el-table-column label="采购店铺名称" align="center" prop="storeName" />
|
||||
<el-table-column label="SKU" align="center" prop="sku" />
|
||||
<el-table-column label="产品全称" align="center" prop="productName" />
|
||||
<el-table-column label="实际发货数量" align="center" prop="quantitySend" />
|
||||
<!-- <el-table-column label="发货供应商名称" align="center" prop="outSupplierName" />-->
|
||||
<!-- <el-table-column label="发货供应商系统ID" align="center" prop="outSupplierId" />-->
|
||||
<el-table-column label="收货方" align="center" prop="inSupplierName" />
|
||||
<!-- <el-table-column label="收货供应商系统ID" align="center" prop="inSupplierId" />-->
|
||||
<el-table-column label="计划发货起始时间" align="center" prop="shipmentStart" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.shipmentStart, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="计划发货截止时间" align="center" prop="shipmentEnd" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.shipmentEnd, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="跟单人" align="center" prop="trackerName" />
|
||||
<!-- <el-table-column label="跟单id" align="center" prop="trackerId" />-->
|
||||
<el-table-column label="转发状态" align="center" prop="fwdStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="forward_status" :value="scope.row.fwdStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发货时间" align="center" prop="sendTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.sendTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['amz:shipForward:edit']">发货 </el-button>
|
||||
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
icon="Delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasRoles="['superadmin']"
|
||||
v-hasPermi="['amz:shipForward:remove']"
|
||||
></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
</el-card>
|
||||
<!-- 添加或修改货件转发对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="800px" append-to-body>
|
||||
<el-form ref="shipForwardFormRef" :model="form" :rules="rules" label-width="100px">
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="form.orderSn" placeholder="请输入采购单号" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="店铺名称" prop="storeName">
|
||||
<el-input v-model="form.storeName" placeholder="请输入采购店铺名称" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="SKU" prop="sku">
|
||||
<el-input v-model="form.sku" placeholder="请输入产品唯一标识码" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品全称" prop="productName">
|
||||
<el-input v-model="form.productName" placeholder="请输入产品全称" disabled />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="发货方" prop="outSupplierName">
|
||||
<el-input v-model="form.outSupplierName" placeholder="请输入发货供应商名称" disabled />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="发货方ID" prop="outSupplierId">-->
|
||||
<!-- <el-input v-model="form.outSupplierId" placeholder="请输入发货供应商系统ID" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="收货方" prop="inSupplierName">
|
||||
<el-input v-model="form.inSupplierName" placeholder="请输入收货供应商名称" disabled />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="收货方ID" prop="inSupplierId">-->
|
||||
<!-- <el-input v-model="form.inSupplierId" placeholder="请输入收货供应商系统ID" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="发货区间" prop="shipmentStart">-->
|
||||
<!-- <el-date-picker-->
|
||||
<!-- v-model="intervalDate"-->
|
||||
<!-- type="daterange"-->
|
||||
<!-- range-separator="到"-->
|
||||
<!-- start-placeholder="开始日期"-->
|
||||
<!-- end-placeholder="结束日期"-->
|
||||
<!-- :size="'small'"-->
|
||||
<!-- @change="intervalAction"-->
|
||||
<!-- disabled-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="跟单人" prop="trackerName">
|
||||
<el-input v-model="form.trackerName" placeholder="请输入跟单人" disabled />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="跟单id" prop="trackerId">-->
|
||||
<!-- <el-input v-model="form.trackerId" placeholder="请输入跟单id" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="发货数量" prop="quantitySend">
|
||||
<el-input v-model="form.quantitySend" placeholder="请输入实际发货数量" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货时间" prop="sendTime">
|
||||
<el-date-picker clearable v-model="form.sendTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择发货时间" disabled>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">开始转发货物</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :title="orderDialog.title" v-model="orderDialog.visible" width="1500px" append-to-body>
|
||||
<el-card shadow="never">
|
||||
<!-- <template #header>-->
|
||||
<!-- <el-row :gutter="10" class="mb8">-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['amz:purchaseOrder:add']"> 新增 </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:purchaseOrder:edit']"-->
|
||||
<!-- >修改-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:purchaseOrder:remove']"-->
|
||||
<!-- >删除-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:purchaseOrder:export']">导出 </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <right-toolbar v-model:showSearch="showSearch" @queryTable="getOrderList"></right-toolbar>-->
|
||||
<!-- </el-row>-->
|
||||
<!-- </template>-->
|
||||
|
||||
<el-table v-loading="orderLoading" :data="purchaseOrderList" @selection-change="handleSelectionChange">
|
||||
<!-- <el-table-column type="selection" width="55" align="center" />-->
|
||||
<el-table-column label="采购单号" align="center" prop="orderSn" />
|
||||
<!-- <el-table-column label="自定义单号" align="center" prop="customOrderSn" />-->
|
||||
<!-- <el-table-column label="供应商ID" align="center" prop="supplierId" />-->
|
||||
<el-table-column label="供应商名称" align="center" prop="supplierName" />
|
||||
<el-table-column label="店铺名称" align="center" prop="storeName" />
|
||||
<!-- <el-table-column label="采购员ID" align="center" prop="optUid" />-->
|
||||
<!-- <el-table-column label="审核人姓名" align="center" prop="auditorRealname" />-->
|
||||
<!-- <el-table-column label="操作人姓名" align="center" prop="optRealname" />-->
|
||||
<!-- <el-table-column label="最后操作人姓名" align="center" prop="lastRealname" />-->
|
||||
<el-table-column label="下单时间" align="center" prop="orderTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.orderTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="应付货款" align="center" prop="payment" />-->
|
||||
<!-- <el-table-column label="审核人员ID" align="center" prop="auditorUid" />-->
|
||||
<!-- <el-table-column label="审核时间" align="center" prop="auditorTime" width="180">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span>{{ parseTime(scope.row.auditorTime, '{y}-{m}-{d}') }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="最后操作人员ID" align="center" prop="lastUid" />-->
|
||||
<!-- <el-table-column label="最后操作时间" align="center" prop="lastTime" width="180">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span>{{ parseTime(scope.row.lastTime, '{y}-{m}-{d}') }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="作废原因" align="center" prop="reason" />-->
|
||||
<!-- <el-table-column label="是否含税" align="center" prop="isTax" />-->
|
||||
<!-- <el-table-column label="采购单状态" align="center" prop="status" />-->
|
||||
<!-- <el-table-column label="状态说明" align="center" prop="statusText" />-->
|
||||
<!-- <el-table-column label="支付状态说明" align="center" prop="payStatusText" />-->
|
||||
<!-- <el-table-column label="到货状态" align="center" prop="statusShipped" />-->
|
||||
<!-- <el-table-column label="到货状态说明" align="center" prop="statusShippedText" />-->
|
||||
<!-- <el-table-column label="货物总价" align="center" prop="amountTotal" />-->
|
||||
<!-- <el-table-column label="总金额" align="center" prop="totalPrice" />-->
|
||||
<!-- <el-table-column label="币种符号" align="center" prop="icon" />-->
|
||||
<!-- <el-table-column label="付款状态" align="center" prop="payStatus" />-->
|
||||
|
||||
<!-- <el-table-column label="其他费用" align="center" prop="otherFee" />-->
|
||||
<!-- <el-table-column label="其他费用币种" align="center" prop="otherCurrency" />-->
|
||||
<!-- <el-table-column label="费用分摊方式" align="center" prop="feePartType" />-->
|
||||
<!-- <el-table-column label="运费" align="center" prop="shippingPrice" />-->
|
||||
<!-- <el-table-column label="运费币种" align="center" prop="shippingCurrency" />-->
|
||||
<!-- <el-table-column label="采购币种" align="center" prop="purchaseCurrency" />-->
|
||||
<!-- <el-table-column label="采购汇率" align="center" prop="purchaseRate" />-->
|
||||
<!-- <el-table-column label="采购总量" align="center" prop="quantityTotal" />-->
|
||||
<!-- <el-table-column label="仓库ID" align="center" prop="wid" />-->
|
||||
<!-- <el-table-column label="仓库名称" align="center" prop="wareHouseName" />-->
|
||||
<!-- <el-table-column label="仓库名(备份)" align="center" prop="wareHouseBakName" />-->
|
||||
<!-- <el-table-column label="入库量" align="center" prop="quantityEntry" />-->
|
||||
<el-table-column label="实际采购量" align="center" prop="quantityReal" />
|
||||
<!-- <el-table-column label="待到货量" align="center" prop="quantityReceive" />-->
|
||||
<!-- <el-table-column label="采购方ID" align="center" prop="purchaserId" />-->
|
||||
<!-- <el-table-column label="联系人" align="center" prop="contactPerson" />-->
|
||||
<!-- <el-table-column label="联系方式" align="center" prop="contactNumber" />-->
|
||||
<!-- <el-table-column label="结算方式" align="center" prop="settlementMethod" />-->
|
||||
<!-- <el-table-column label="结算描述" align="center" prop="settlementDescription" />-->
|
||||
<!-- <el-table-column label="支付方式" align="center" prop="paymentMethod" />-->
|
||||
<el-table-column label="交货天数" align="center" prop="estDlvDays" />
|
||||
<!-- <el-table-column label="订单状态" align="center" prop="orderStatus">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <dict-tag :options="vendor_order_status" :value="scope.row.orderStatus" />-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="交货时间" align="center" prop="deliveryTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.deliveryTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="订单交付变动天数" align="center" prop="dlvTimeVar" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['amz:purchaseOrder:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<!-- <el-button size="small" link type="primary" @click="handleConfirm(scope.row)" v-hasPermi="['amz:purchaseOrder:remove']">-->
|
||||
<!-- 确认-->
|
||||
<!-- </el-button>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
v-show="orderTotal > 0"
|
||||
:total="orderTotal"
|
||||
v-model:page="orderQueryParams.pageNum"
|
||||
v-model:limit="orderQueryParams.pageSize"
|
||||
@pagination="getOrderList"
|
||||
/>
|
||||
</el-card>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup name="ShipForward" lang="ts">
|
||||
import { listShipForward, getShipForward, delShipForward, addShipForward, updateShipForward } from '@/api/amz/shipForward';
|
||||
import { ShipForwardVO, ShipForwardQuery, ShipForwardForm } from '@/api/amz/shipForward/types';
|
||||
import { listPurchaseOrder } from '@/api/amz/purchaseOrder';
|
||||
import { PurchaseOrderVO } from '@/api/amz/purchaseOrder/types';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { forward_status } = toRefs<any>(proxy?.useDict('forward_status'));
|
||||
|
||||
const shipForwardList = ref<ShipForwardVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const orderLoading = ref(true);
|
||||
const showSearch = ref(true);
|
||||
const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
const orderTotal = ref(0);
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const shipForwardFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const orderDialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: ShipForwardForm = {
|
||||
id: undefined,
|
||||
orderSn: undefined,
|
||||
storeName: undefined,
|
||||
sku: undefined,
|
||||
productName: undefined,
|
||||
quantitySend: undefined,
|
||||
outSupplierName: undefined,
|
||||
outSupplierId: undefined,
|
||||
inSupplierName: undefined,
|
||||
inSupplierId: undefined,
|
||||
shipmentStart: undefined,
|
||||
shipmentEnd: undefined,
|
||||
trackerName: undefined,
|
||||
trackerId: undefined,
|
||||
fwdStatus: undefined,
|
||||
sendTime: undefined
|
||||
};
|
||||
const data = reactive<PageData<ShipForwardForm, ShipForwardQuery>>({
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderSn: undefined,
|
||||
storeName: undefined,
|
||||
sku: undefined,
|
||||
productName: undefined,
|
||||
quantitySend: undefined,
|
||||
outSupplierName: undefined,
|
||||
outSupplierId: undefined,
|
||||
inSupplierName: undefined,
|
||||
inSupplierId: undefined,
|
||||
shipmentStart: undefined,
|
||||
shipmentEnd: undefined,
|
||||
trackerName: undefined,
|
||||
trackerId: undefined,
|
||||
fwdStatus: undefined,
|
||||
sendTime: undefined,
|
||||
type: 'shipForwardOut',
|
||||
params: {}
|
||||
},
|
||||
rules: {
|
||||
id: [{ required: true, message: '$comment不能为空', trigger: 'blur' }],
|
||||
orderSn: [{ required: true, message: '采购单号不能为空', trigger: 'blur' }],
|
||||
storeName: [{ required: true, message: '采购店铺名称不能为空', trigger: 'blur' }],
|
||||
sku: [{ required: true, message: '产品唯一标识码不能为空', trigger: 'blur' }],
|
||||
productName: [{ required: true, message: '产品全称不能为空', trigger: 'blur' }],
|
||||
quantitySend: [{ required: true, message: '实际发货数量不能为空', trigger: 'blur' }],
|
||||
outSupplierName: [{ required: true, message: '发货供应商名称不能为空', trigger: 'blur' }],
|
||||
outSupplierId: [{ required: true, message: '发货供应商系统ID不能为空', trigger: 'blur' }],
|
||||
inSupplierName: [{ required: true, message: '收货供应商名称不能为空', trigger: 'blur' }],
|
||||
inSupplierId: [{ required: true, message: '收货供应商系统ID不能为空', trigger: 'blur' }],
|
||||
shipmentStart: [{ required: true, message: '计划发货起始时间不能为空', trigger: 'blur' }],
|
||||
shipmentEnd: [{ required: true, message: '计划发货截止时间不能为空', trigger: 'blur' }],
|
||||
trackerName: [{ required: true, message: '跟单人不能为空', trigger: 'blur' }],
|
||||
trackerId: [{ required: true, message: '跟单id不能为空', trigger: 'blur' }],
|
||||
fwdStatus: [{ required: true, message: '转发状态不能为空', trigger: 'change' }],
|
||||
sendTime: [{ required: true, message: '发货时间不能为空', trigger: 'blur' }]
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
const orderQueryParams = ref({
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderSn: undefined,
|
||||
customOrderSn: undefined,
|
||||
supplierId: undefined,
|
||||
supplierName: undefined,
|
||||
optUid: undefined,
|
||||
auditorRealname: undefined,
|
||||
optRealname: undefined,
|
||||
lastRealname: undefined,
|
||||
orderTime: undefined,
|
||||
payment: undefined,
|
||||
auditorUid: undefined,
|
||||
auditorTime: undefined,
|
||||
lastUid: undefined,
|
||||
lastTime: undefined,
|
||||
reason: undefined,
|
||||
isTax: undefined,
|
||||
status: undefined,
|
||||
statusText: undefined,
|
||||
payStatusText: undefined,
|
||||
statusShipped: undefined,
|
||||
statusShippedText: undefined,
|
||||
amountTotal: undefined,
|
||||
totalPrice: undefined,
|
||||
icon: undefined,
|
||||
payStatus: undefined,
|
||||
otherFee: undefined,
|
||||
otherCurrency: undefined,
|
||||
feePartType: undefined,
|
||||
shippingPrice: undefined,
|
||||
shippingCurrency: undefined,
|
||||
purchaseCurrency: undefined,
|
||||
purchaseRate: undefined,
|
||||
quantityTotal: undefined,
|
||||
wid: undefined,
|
||||
wareHouseName: undefined,
|
||||
wareHouseBakName: undefined,
|
||||
quantityEntry: undefined,
|
||||
quantityReal: undefined,
|
||||
quantityReceive: undefined,
|
||||
purchaserId: undefined,
|
||||
contactPerson: undefined,
|
||||
contactNumber: undefined,
|
||||
settlementMethod: undefined,
|
||||
settlementDescription: undefined,
|
||||
paymentMethod: undefined,
|
||||
estDlvDays: undefined,
|
||||
orderStatus: 'ord_confirmed',
|
||||
deliveryTime: undefined,
|
||||
dlvTimeVar: undefined,
|
||||
params: {}
|
||||
});
|
||||
|
||||
/** 查询货件转发列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listShipForward(queryParams.value);
|
||||
shipForwardList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
const purchaseOrderList = ref<PurchaseOrderVO[]>([]);
|
||||
|
||||
const getOrderList = async () => {
|
||||
orderLoading.value = true;
|
||||
const res = await listPurchaseOrder(orderQueryParams.value);
|
||||
purchaseOrderList.value = res.rows;
|
||||
orderTotal.value = res.total;
|
||||
orderLoading.value = false;
|
||||
};
|
||||
|
||||
const intervalDate = ref<any>();
|
||||
|
||||
const intervalAction = () => {
|
||||
console.log('intervalDate', intervalDate);
|
||||
queryParams.value.shipmentStart = getDateToString(intervalDate.value[0]);
|
||||
queryParams.value.shipmentEnd = getDateToString(intervalDate.value[1]);
|
||||
};
|
||||
|
||||
const getDateToString = (date: Date): string => {
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需加 1
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
const hours = String(date.getHours()).padStart(2, '0');
|
||||
const minutes = String(date.getMinutes()).padStart(2, '0');
|
||||
const seconds = String(date.getSeconds()).padStart(2, '0');
|
||||
|
||||
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
shipForwardFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
};
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: ShipForwardVO[]) => {
|
||||
ids.value = selection.map((item) => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
};
|
||||
|
||||
/** 新增按钮操作 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = '订单列表';
|
||||
|
||||
// getOrderList();
|
||||
// orderDialog.visible = true;
|
||||
// orderDialog.title = '订单列表';
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: ShipForwardVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getShipForward(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
form.value.sendTime = getDateToString(new Date());
|
||||
|
||||
// form.value.shipmentStart = getDateToString(intervalDate.value[0]);
|
||||
// form.value.shipmentEnd = getDateToString(intervalDate.value[1]);
|
||||
dialog.visible = true;
|
||||
dialog.title = '进行货物转发';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
form.value.fwdStatus = 'processing';
|
||||
shipForwardFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.id) {
|
||||
await updateShipForward(form.value).finally(() => (buttonLoading.value = false));
|
||||
} else {
|
||||
await addShipForward(form.value).finally(() => (buttonLoading.value = false));
|
||||
}
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: ShipForwardVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除货件转发编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
||||
await delShipForward(_ids);
|
||||
proxy?.$modal.msgSuccess('删除成功');
|
||||
await getList();
|
||||
};
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download(
|
||||
'amz/shipForward/export',
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`shipForward_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
@ -873,7 +873,7 @@ const handleExport = () => {
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`shipmentPlan_${new Date().getTime()}.xlsx`
|
||||
`FBA货件_${new Date().getTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -13,6 +13,9 @@
|
||||
<el-form-item label="物流中心编码" prop="destination">
|
||||
<el-input v-model="queryParams.destination" placeholder="请输入物流中心编码" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="创建日期" prop="deadline">
|
||||
<el-date-picker clearable v-model="queryParams.gmtCreate" type="date" value-format="YYYY-MM-DD" placeholder="请选择创建日期" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
@ -25,34 +28,38 @@
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasRoles="['superadmin']" v-hasPermi="['amz:shipmentPlan:add']"
|
||||
>新增
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:shipmentPlan:edit']"
|
||||
>修改
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:shipmentPlan:remove']"
|
||||
>删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasRoles="['superadmin']" v-hasPermi="['amz:shipmentPlan:add']"-->
|
||||
<!-- >新增-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:shipmentPlan:edit']"-->
|
||||
<!-- >修改-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1.5">-->
|
||||
<!-- <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:shipmentPlan:remove']"-->
|
||||
<!-- >删除-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:shipmentPlan:export']">导出 </el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="snycTodayPlan" v-hasPermi="['amz:shipmentPlan:export']"
|
||||
<FbaPlanFileUpload :file-type="['xlsx', 'xls']" :on-finished="uploadFinished" :file-size="5" />
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="RefreshRight" @click="snycTodayPlan" v-hasPermi="['amz:shipmentPlan:export']"
|
||||
>同步今天的货件
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="channelDialogVisibleAction" v-hasPermi="['amz:shipmentPlan:export']"
|
||||
<el-button type="primary" plain icon="Check" @click="channelDialogVisibleAction" v-hasPermi="['amz:shipmentPlan:export']"
|
||||
>批量提交询价
|
||||
</el-button>
|
||||
</el-col>
|
||||
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
@ -105,8 +112,17 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="国家" align="center" prop="shipToAddress.countryCode" />
|
||||
|
||||
<el-table-column label="物流中心编码" align="center" prop="destination" />
|
||||
<!-- <el-table-column label="物流中心编码" align="center" prop="destination">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <RouterLink-->
|
||||
<!-- class="text-green-500 hover:text-green-500 hover:underline transition-colors"-->
|
||||
<!-- :to="'/report/vendorReport?destination=' + scope.row.destination"-->
|
||||
<!-- >-->
|
||||
<!-- {{ scope.row.destination }}-->
|
||||
<!-- </RouterLink>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="总箱子数量" align="center" prop="boxQuantity" />
|
||||
<el-table-column label="箱子尺寸" align="center" prop="boxSize" />
|
||||
<el-table-column label="供应商称重-总重量" align="center" prop="vendorWeight" />
|
||||
@ -123,7 +139,7 @@
|
||||
<el-tag>{{ scope.row.shipmentStatus }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="物流渠道" align="center" prop="channelName" />
|
||||
<!-- <el-table-column label="物流渠道" align="center" prop="channelName" />-->
|
||||
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
@ -363,6 +379,10 @@ const dialog = reactive<DialogOption>({
|
||||
title: ''
|
||||
});
|
||||
|
||||
const handleCopy = (text) => {
|
||||
proxy?.$modal.msgSuccess('复制成功');
|
||||
};
|
||||
|
||||
const initFormData: ShipmentPlanForm = {
|
||||
id: undefined,
|
||||
sid: undefined,
|
||||
@ -545,6 +565,13 @@ const formatTime = (timeString) => {
|
||||
return timeString.replace(' ', '\n'); // 换行显示日期时间
|
||||
};
|
||||
|
||||
const uploadFinished = (res: any, file: UploadFile) => {
|
||||
console.log('res=', res);
|
||||
if (res.success === true) {
|
||||
getList();
|
||||
}
|
||||
};
|
||||
|
||||
// 状态标签样式
|
||||
const statusTagType = (status) => {
|
||||
switch (status) {
|
||||
@ -647,8 +674,23 @@ const getAllChannelData = async () => {
|
||||
|
||||
// 定义映射关系,将编码转换为中文标签
|
||||
const countryMap = {
|
||||
us: '美国'
|
||||
// 可扩展其他国家的映射
|
||||
us: '美国',
|
||||
cn: '中国',
|
||||
jp: '日本',
|
||||
kr: '韩国',
|
||||
sg: '新加坡',
|
||||
de: '德国',
|
||||
fr: '法国',
|
||||
gb: '英国',
|
||||
it: '意大利',
|
||||
es: '西班牙',
|
||||
ru: '俄罗斯',
|
||||
ca: '加拿大',
|
||||
au: '澳大利亚',
|
||||
in: '印度',
|
||||
br: '巴西',
|
||||
za: '南非',
|
||||
mx: '墨西哥'
|
||||
};
|
||||
|
||||
const shippingMethodMap = {
|
||||
@ -755,6 +797,7 @@ const reset = () => {
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
console.log('queryParams.value.gmtCreate', queryParams.value.gmtCreate);
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
@ -965,10 +1008,31 @@ const handleExport = () => {
|
||||
{
|
||||
...queryParams.value
|
||||
},
|
||||
`shipmentPlan_${new Date().getTime()}.xlsx`
|
||||
`FBA货件_${getShanghaiTime()}.xlsx`
|
||||
);
|
||||
};
|
||||
|
||||
function getShanghaiTime(): string {
|
||||
const date = new Date();
|
||||
// 使用 Intl 接口直接格式化上海时区时间
|
||||
const formatter = new Intl.DateTimeFormat('en-US', {
|
||||
timeZone: 'Asia/Shanghai',
|
||||
year: 'numeric',
|
||||
month: '2-digit',
|
||||
day: '2-digit',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
hour12: false
|
||||
});
|
||||
|
||||
// 提取并重组格式
|
||||
const parts = formatter.formatToParts(date);
|
||||
const map = new Map(parts.map((part) => [part.type, part.value]));
|
||||
|
||||
return `${map.get('year')}-${map.get('month')}-${map.get('day')} ${map.get('hour')}:${map.get('minute')}:${map.get('second')}`;
|
||||
}
|
||||
|
||||
const dialogVisible = ref(false);
|
||||
const addressTableData = ref([]);
|
||||
|
||||
|
@ -13,6 +13,9 @@
|
||||
<el-form-item label="物流中心编码" prop="destination">
|
||||
<el-input v-model="queryParams.destination" placeholder="请输入物流中心编码" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="创建日期" prop="deadline">
|
||||
<el-date-picker clearable v-model="queryParams.gmtCreate" type="date" value-format="YYYY-MM-DD" placeholder="请选择创建日期" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
|
@ -13,6 +13,9 @@
|
||||
<el-form-item label="物流中心编码" prop="destination">
|
||||
<el-input v-model="queryParams.destination" placeholder="请输入物流中心编码" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="创建日期" prop="deadline">
|
||||
<el-date-picker clearable v-model="queryParams.gmtCreate" type="date" value-format="YYYY-MM-DD" placeholder="请选择创建日期" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
|
@ -14,9 +14,39 @@
|
||||
</template>
|
||||
|
||||
<script setup name="Index" lang="ts">
|
||||
import { queryLogisticsOrder } from '@/api/amz/logisticsOrder';
|
||||
import { Action } from 'element-plus';
|
||||
|
||||
const goTarget = (url: string) => {
|
||||
window.open(url, '__blank');
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
console.log('物流商管理系统');
|
||||
const res = await queryLogisticsOrder();
|
||||
console.log('res', res);
|
||||
if (res.code === 200) {
|
||||
console.log('res.data', res.data);
|
||||
if (res.data.length > 0) {
|
||||
console.log('有快到期的订单');
|
||||
ElMessage.warning('有快到期的订单');
|
||||
ElMessageBox.alert('有快到期的订单', '订单提醒', {
|
||||
// if you want to disable its autofocus
|
||||
// autofocus: false,
|
||||
confirmButtonText: '好的我知道了',
|
||||
callback: (action: Action) => {
|
||||
// ElMessage({
|
||||
// type: 'info',
|
||||
// message: `action: ${action}`
|
||||
// });
|
||||
}
|
||||
});
|
||||
} else {
|
||||
console.log('没有快到期的订单');
|
||||
// ElMessage.warning('没有快到期的订单');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
@ -27,12 +57,14 @@ const goTarget = (url: string) => {
|
||||
font-size: 17.5px;
|
||||
border-left: 5px solid #eee;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
border: 0;
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
|
||||
.col-item {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
@ -5,14 +5,14 @@
|
||||
<h3 class="title">瑷胜科技管理系统</h3>
|
||||
<lang-select />
|
||||
</div>
|
||||
<el-form-item v-if="tenantEnabled" prop="tenantId">
|
||||
<el-select v-model="loginForm.tenantId" filterable :placeholder="proxy.$t('login.selectPlaceholder')" style="width: 100%">
|
||||
<el-option v-for="item in tenantList" :key="item.tenantId" :label="item.companyName" :value="item.tenantId"></el-option>
|
||||
<template #prefix>
|
||||
<svg-icon icon-class="company" class="el-input__icon input-icon" />
|
||||
</template>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item v-if="tenantEnabled" prop="tenantId">-->
|
||||
<!-- <el-select v-model="loginForm.tenantId" filterable :placeholder="proxy.$t('login.selectPlaceholder')" style="width: 100%">-->
|
||||
<!-- <el-option v-for="item in tenantList" :key="item.tenantId" :label="item.companyName" :value="item.tenantId"></el-option>-->
|
||||
<!-- <template #prefix>-->
|
||||
<!-- <svg-icon icon-class="company" class="el-input__icon input-icon" />-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="loginForm.username" type="text" size="large" auto-complete="off" :placeholder="proxy.$t('login.username')">
|
||||
<template #prefix>
|
||||
|
@ -7,8 +7,8 @@
|
||||
<el-form-item label="登录地址" prop="ipaddr">
|
||||
<el-input v-model="queryParams.ipaddr" placeholder="请输入登录地址" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="用户名称" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" />
|
||||
<el-form-item label="用户登录名" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户登录名" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-select v-model="queryParams.status" placeholder="登录状态" clearable>
|
||||
@ -69,7 +69,7 @@
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="访问编号" align="center" prop="infoId" />
|
||||
<el-table-column
|
||||
label="用户名称"
|
||||
label="用户登录名"
|
||||
align="center"
|
||||
prop="userName"
|
||||
:show-overflow-tooltip="true"
|
||||
|
@ -6,8 +6,8 @@
|
||||
<el-form-item label="登录地址" prop="ipaddr">
|
||||
<el-input v-model="queryParams.ipaddr" placeholder="请输入登录地址" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="用户名称" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" />
|
||||
<el-form-item label="用户登录名" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户登录名" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||
|
@ -3,8 +3,8 @@
|
||||
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
|
||||
<div v-show="showSearch" class="search">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<el-form-item label="用户名称" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" />
|
||||
<el-form-item label="用户登录名" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户登录名" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号码" prop="phonenumber">
|
||||
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable @keyup.enter="handleQuery" />
|
||||
@ -35,8 +35,8 @@
|
||||
</template>
|
||||
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="用户登录名" prop="userName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="用户名称" prop="nickName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
|
@ -2,8 +2,8 @@
|
||||
<el-row>
|
||||
<el-dialog v-model="visible" title="选择用户" width="800px" top="5vh" append-to-body>
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<el-form-item label="用户名称" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" />
|
||||
<el-form-item label="用户登录名" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户登录名" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号码" prop="phonenumber">
|
||||
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable @keyup.enter="handleQuery" />
|
||||
@ -16,8 +16,8 @@
|
||||
<el-row>
|
||||
<el-table ref="tableRef" :data="userList" height="260px" @row-click="clickRow" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55"></el-table-column>
|
||||
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="用户登录名" prop="userName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="用户名称" prop="nickName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="状态" align="center" prop="status">
|
||||
|
@ -217,7 +217,7 @@ const data = reactive<PageData<TenantForm, TenantQuery>>({
|
||||
companyName: [{ required: true, message: '企业名称不能为空', trigger: 'blur' }],
|
||||
username: [
|
||||
{ required: true, message: '用户名不能为空', trigger: 'blur' },
|
||||
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
|
||||
{ min: 2, max: 20, message: '用户登录名长度必须介于 2 和 20 之间', trigger: 'blur' }
|
||||
],
|
||||
password: [
|
||||
{ required: true, message: '密码不能为空', trigger: 'blur' },
|
||||
|
@ -5,7 +5,7 @@
|
||||
<el-form :model="form" :inline="true">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="2.5">
|
||||
<el-form-item label="用户昵称" prop="nickName">
|
||||
<el-form-item label="用户名称" prop="nickName">
|
||||
<el-input v-model="form.nickName" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
@ -24,8 +24,8 @@
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
|
||||
<el-form-item label="用户名称" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable @keyup.enter="handleQuery" />
|
||||
<el-form-item label="用户登录名" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入用户登录名" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号码" prop="phonenumber">
|
||||
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable @keyup.enter="handleQuery" />
|
||||
@ -96,8 +96,8 @@
|
||||
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="50" align="center" />
|
||||
<el-table-column v-if="columns[0].visible" key="userId" label="用户编号" align="center" prop="userId" />
|
||||
<el-table-column v-if="columns[1].visible" key="userName" label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" />
|
||||
<el-table-column v-if="columns[2].visible" key="nickName" label="用户昵称" align="center" prop="nickName" :show-overflow-tooltip="true" />
|
||||
<el-table-column v-if="columns[1].visible" key="userName" label="用户登录名" align="center" prop="userName" :show-overflow-tooltip="true" />
|
||||
<el-table-column v-if="columns[2].visible" key="nickName" label="用户名称" align="center" prop="nickName" :show-overflow-tooltip="true" />
|
||||
<el-table-column v-if="columns[3].visible" key="deptName" label="部门" align="center" prop="deptName" :show-overflow-tooltip="true" />
|
||||
<el-table-column v-if="columns[4].visible" key="phonenumber" label="手机号码" align="center" prop="phonenumber" width="120" />
|
||||
<el-table-column v-if="columns[5].visible" key="status" label="状态" align="center">
|
||||
@ -148,8 +148,8 @@
|
||||
<el-form ref="userFormRef" :model="form" :rules="rules" label-width="80px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="用户昵称" prop="nickName">
|
||||
<el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
|
||||
<el-form-item label="用户名称" prop="nickName">
|
||||
<el-input v-model="form.nickName" placeholder="请输入用户名称" maxlength="30" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
@ -180,8 +180,8 @@
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
|
||||
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
|
||||
<el-form-item v-if="form.userId == undefined" label="用户登录名" prop="userName">
|
||||
<el-input v-model="form.userName" placeholder="请输入用户登录名" maxlength="30" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
@ -335,8 +335,8 @@ const upload = reactive<ImportOption>({
|
||||
// 列显隐信息
|
||||
const columns = ref<FieldOption[]>([
|
||||
{ key: 0, label: `用户编号`, visible: false, children: [] },
|
||||
{ key: 1, label: `用户名称`, visible: true, children: [] },
|
||||
{ key: 2, label: `用户昵称`, visible: true, children: [] },
|
||||
{ key: 1, label: `用户登录名`, visible: true, children: [] },
|
||||
{ key: 2, label: `用户名称`, visible: true, children: [] },
|
||||
{ key: 3, label: `部门`, visible: true, children: [] },
|
||||
{ key: 4, label: `手机号码`, visible: true, children: [] },
|
||||
{ key: 5, label: `状态`, visible: true, children: [] },
|
||||
@ -382,15 +382,15 @@ const initData: PageData<UserForm, UserQuery> = {
|
||||
},
|
||||
rules: {
|
||||
userName: [
|
||||
{ required: true, message: '用户名称不能为空', trigger: 'blur' },
|
||||
{ required: true, message: '用户登录名不能为空', trigger: 'blur' },
|
||||
{
|
||||
min: 2,
|
||||
max: 20,
|
||||
message: '用户名称长度必须介于 2 和 20 之间',
|
||||
message: '用户登录名长度必须介于 2 和 20 之间',
|
||||
trigger: 'blur'
|
||||
}
|
||||
],
|
||||
nickName: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }],
|
||||
nickName: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
|
||||
password: [
|
||||
{ required: true, message: '用户密码不能为空', trigger: 'blur' },
|
||||
{
|
||||
|
@ -15,12 +15,12 @@
|
||||
<ul class="list-group list-group-striped">
|
||||
<li class="list-group-item">
|
||||
<svg-icon icon-class="user" />
|
||||
用户名称
|
||||
用户登录名
|
||||
<div class="pull-right">{{ state.user.userName }}</div>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<svg-icon icon-class="user" />
|
||||
用户昵称
|
||||
用户登录名
|
||||
<div class="pull-right">{{ state.user.nickName }}</div>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
@ -48,6 +48,16 @@
|
||||
创建日期
|
||||
<div class="pull-right">{{ state.user.createTime }}</div>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<svg-icon icon-class="wechat" />
|
||||
微信
|
||||
<div class="pull-right">
|
||||
<div v-if="state.user.openId == null || state.user.openId == ''">
|
||||
<el-link type="success" @click="authUrl('wechat')">绑定微信</el-link>
|
||||
</div>
|
||||
<div v-else>已经绑定</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</el-card>
|
||||
@ -76,6 +86,24 @@
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-dialog v-model="dialogVisible" title="扫码绑定微信" width="360">
|
||||
<vue-qr
|
||||
:text="qrCodeValue"
|
||||
:size="300"
|
||||
:logoSrc="wechatLogo"
|
||||
:logoScale="0.15"
|
||||
:margin="5"
|
||||
colorDark="#000000"
|
||||
colorLight="#ffffff"
|
||||
:correctLevel="3"
|
||||
/>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="dialogVisible = false"> 确定</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -85,13 +113,21 @@ import UserInfo from './userInfo.vue';
|
||||
import ResetPwd from './resetPwd.vue';
|
||||
import ThirdParty from './thirdParty.vue';
|
||||
import OnlineDevice from './onlineDevice.vue';
|
||||
import { getAuthList } from '@/api/system/social/auth';
|
||||
import { authBindingWechat, getAuthList } from '@/api/system/social/auth';
|
||||
import { getUserProfile } from '@/api/system/user';
|
||||
import { getOnline } from '@/api/monitor/online';
|
||||
import { UserVO } from '@/api/system/user/types';
|
||||
import vueQr from 'vue-qr/src/packages/vue-qr.vue';
|
||||
import wechatLogo from '@/assets/icons/png/wechat.png';
|
||||
|
||||
const activeTab = ref('userinfo');
|
||||
|
||||
const dialogVisible = ref(false);
|
||||
|
||||
const qrCodeValue = ref('https://example.com');
|
||||
|
||||
const qrCodeWidth = ref(250);
|
||||
|
||||
interface State {
|
||||
user: Partial<UserVO>;
|
||||
roleGroup: string;
|
||||
@ -127,6 +163,15 @@ const getOnlines = async () => {
|
||||
state.value.devices = res.rows;
|
||||
};
|
||||
|
||||
const authUrl = (source: string) => {
|
||||
authBindingWechat().then((res: any) => {
|
||||
if (res.code === 200) {
|
||||
qrCodeValue.value = res.data;
|
||||
dialogVisible.value = true;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
getUser();
|
||||
getAuths();
|
||||
|
@ -20,43 +20,43 @@
|
||||
<div id="git-user-binding">
|
||||
<h4 class="provider-desc">你可以绑定以下第三方帐号</h4>
|
||||
<div id="authlist" class="user-bind">
|
||||
<a class="third-app" href="#" title="使用 微信 账号授权登录" @click="authUrl('wechat')">
|
||||
<div class="git-other-login-icon">
|
||||
<svg-icon icon-class="wechat" />
|
||||
</div>
|
||||
<span class="app-name">WeiXin</span>
|
||||
</a>
|
||||
<a class="third-app" href="#" title="使用 MaxKey 账号授权登录" @click="authUrl('maxkey')">
|
||||
<div class="git-other-login-icon">
|
||||
<svg-icon icon-class="maxkey" />
|
||||
</div>
|
||||
<span class="app-name">MaxKey</span>
|
||||
</a>
|
||||
<a class="third-app" href="#" title="使用 TopIam 账号授权登录" @click="authUrl('topiam')">
|
||||
<div class="git-other-login-icon">
|
||||
<svg-icon icon-class="topiam" />
|
||||
</div>
|
||||
<span class="app-name">TopIam</span>
|
||||
</a>
|
||||
<a class="third-app" href="#" title="使用 Gitee 账号授权登录" @click="authUrl('gitee')">
|
||||
<div class="git-other-login-icon">
|
||||
<svg-icon icon-class="gitee" />
|
||||
</div>
|
||||
<span class="app-name">Gitee</span>
|
||||
</a>
|
||||
<a class="third-app" href="#" title="使用 GitHub 账号授权登录" @click="authUrl('github')">
|
||||
<div class="git-other-login-icon">
|
||||
<svg-icon icon-class="github" />
|
||||
</div>
|
||||
<span class="app-name">Github</span>
|
||||
</a>
|
||||
<!-- <a class="third-app" href="#" title="使用 微信 账号授权登录" @click="authUrl('wechat')">-->
|
||||
<!-- <div class="git-other-login-icon">-->
|
||||
<!-- <svg-icon icon-class="wechat" />-->
|
||||
<!-- </div>-->
|
||||
<!-- <span class="app-name">WeiXin</span>-->
|
||||
<!-- </a>-->
|
||||
<!-- <a class="third-app" href="#" title="使用 MaxKey 账号授权登录" @click="authUrl('maxkey')">-->
|
||||
<!-- <div class="git-other-login-icon">-->
|
||||
<!-- <svg-icon icon-class="maxkey" />-->
|
||||
<!-- </div>-->
|
||||
<!-- <span class="app-name">MaxKey</span>-->
|
||||
<!-- </a>-->
|
||||
<!-- <a class="third-app" href="#" title="使用 TopIam 账号授权登录" @click="authUrl('topiam')">-->
|
||||
<!-- <div class="git-other-login-icon">-->
|
||||
<!-- <svg-icon icon-class="topiam" />-->
|
||||
<!-- </div>-->
|
||||
<!-- <span class="app-name">TopIam</span>-->
|
||||
<!-- </a>-->
|
||||
<!-- <a class="third-app" href="#" title="使用 Gitee 账号授权登录" @click="authUrl('gitee')">-->
|
||||
<!-- <div class="git-other-login-icon">-->
|
||||
<!-- <svg-icon icon-class="gitee" />-->
|
||||
<!-- </div>-->
|
||||
<!-- <span class="app-name">Gitee</span>-->
|
||||
<!-- </a>-->
|
||||
<!-- <a class="third-app" href="#" title="使用 GitHub 账号授权登录" @click="authUrl('github')">-->
|
||||
<!-- <div class="git-other-login-icon">-->
|
||||
<!-- <svg-icon icon-class="github" />-->
|
||||
<!-- </div>-->
|
||||
<!-- <span class="app-name">Github</span>-->
|
||||
<!-- </a>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { authUnlock, authBinding } from '@/api/system/social/auth';
|
||||
import { authUnlock, authBinding, authBindingWechat } from '@/api/system/social/auth';
|
||||
import { propTypes } from '@/utils/propTypes';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
|
||||
@ -82,16 +82,6 @@ const unlockAuth = (row: any) => {
|
||||
})
|
||||
.catch(() => {});
|
||||
};
|
||||
|
||||
const authUrl = (source: string) => {
|
||||
authBinding(source, useUserStore().tenantId).then((res: any) => {
|
||||
if (res.code === 200) {
|
||||
window.location.href = res.data;
|
||||
} else {
|
||||
proxy?.$modal.msgError(res.msg);
|
||||
}
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
||||
<style type="text/css">
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<el-form ref="userRef" :model="userForm" :rules="rules" label-width="80px">
|
||||
<!-- <el-form-item label="用户昵称" prop="nickName">-->
|
||||
<!-- <el-form-item label="用户名称" prop="nickName">-->
|
||||
<!-- <el-input v-model="userForm.nickName" maxlength="30" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="手机号码" prop="phonenumber">
|
||||
@ -33,7 +33,7 @@ const userForm = computed(() => props.user);
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const userRef = ref<ElFormInstance>();
|
||||
const rule: ElFormRules = {
|
||||
nickName: [{ required: true, message: '用户昵称不能为空', trigger: 'blur' }],
|
||||
nickName: [{ required: true, message: '用户名称不能为空', trigger: 'blur' }],
|
||||
email: [
|
||||
{ required: true, message: '邮箱地址不能为空', trigger: 'blur' },
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user