运营段修改
This commit is contained in:
parent
e4397049ee
commit
51ea9d3bfa
11
.deployrc.js
11
.deployrc.js
@ -4,20 +4,13 @@ import { resolve } from 'node:path';
|
||||
|
||||
export default {
|
||||
host: '112.74.106.216',
|
||||
port: 22, // 默认 SSH 端口
|
||||
port: 22,
|
||||
username: 'root',
|
||||
|
||||
// 密码和私钥二选一
|
||||
password: 'Smt1618?',
|
||||
privateKey: null, // 示例: readFileSync(resolve(process.env.HOME, '.ssh/id_rsa')),
|
||||
privateKey: null,
|
||||
|
||||
// 部署路径
|
||||
remotePath: '/opt/1panel/apps/openresty/openresty/www/sites/www.amzups.com/index',
|
||||
|
||||
// 是否清空目标目录
|
||||
cleanRemote: true
|
||||
|
||||
// 高级选项 (可选)
|
||||
// uploadIgnore: ['*.map', 'tmp/*'],
|
||||
// execAfterDeploy: 'sudo systemctl restart nginx'
|
||||
};
|
||||
|
@ -1,39 +1,28 @@
|
||||
# 页面标题
|
||||
VITE_APP_TITLE = 瑷胜科技管理系统
|
||||
VITE_APP_TITLE = 香港SMT订单物流管理系统
|
||||
|
||||
# 开发环境配置
|
||||
VITE_APP_ENV = 'development'
|
||||
|
||||
# 开发环境
|
||||
VITE_APP_BASE_API = '/dev-api'
|
||||
|
||||
VITE_BACKEND_URL = 'http://localhost:8080'
|
||||
|
||||
#VITE_BACKEND_URL = 'http://112.74.106.216:8080'
|
||||
|
||||
# 应用访问路径 例如使用前缀 /admin/
|
||||
VITE_APP_CONTEXT_PATH = '/'
|
||||
|
||||
# 监控地址
|
||||
VITE_APP_MONITOR_ADMIN = 'http://localhost:9090/admin/applications'
|
||||
|
||||
# SnailJob 控制台地址
|
||||
VITE_APP_SNAILJOB_ADMIN = 'http://localhost:8800/snail-job'
|
||||
|
||||
VITE_APP_PORT = 80
|
||||
|
||||
# 接口加密功能开关(如需关闭 后端也必须对应关闭)
|
||||
VITE_APP_ENCRYPT = true
|
||||
# 接口加密传输 RSA 公钥与后端解密私钥对应 如更换需前后端一同更换
|
||||
VITE_APP_RSA_PUBLIC_KEY = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
|
||||
# 接口响应解密 RSA 私钥与后端加密公钥对应 如更换需前后端一同更换
|
||||
VITE_APP_RSA_PRIVATE_KEY = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3CuPiGL/LcIIm7zryCEIbl1SPzBkr75E2VMtxegyZ1lYRD+7TZGAPkvIsBcaMs6Nsy0L78n2qh+lIZMpLH8wIDAQABAkEAk82Mhz0tlv6IVCyIcw/s3f0E+WLmtPFyR9/WtV3Y5aaejUkU60JpX4m5xNR2VaqOLTZAYjW8Wy0aXr3zYIhhQQIhAMfqR9oFdYw1J9SsNc+CrhugAvKTi0+BF6VoL6psWhvbAiEAxPPNTmrkmrXwdm/pQQu3UOQmc2vCZ5tiKpW10CgJi8kCIFGkL6utxw93Ncj4exE/gPLvKcT+1Emnoox+O9kRXss5AiAMtYLJDaLEzPrAWcZeeSgSIzbL+ecokmFKSDDcRske6QIgSMkHedwND1olF8vlKsJUGK3BcdtM8w4Xq7BpSBwsloE='
|
||||
|
||||
# 客户端id
|
||||
VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
|
||||
|
||||
# websocket 开关 默认使用sse推送
|
||||
VITE_APP_WEBSOCKET = false
|
||||
|
||||
# sse 开关
|
||||
VITE_APP_SSE = true
|
||||
|
@ -1,40 +1,28 @@
|
||||
# 页面标题
|
||||
VITE_APP_TITLE = 瑷胜科技管理系统
|
||||
VITE_APP_TITLE = 香港SMT订单物流管理系统
|
||||
|
||||
# 生产环境配置
|
||||
VITE_APP_ENV = 'production'
|
||||
|
||||
# 应用访问路径 例如使用前缀 /admin/
|
||||
VITE_APP_CONTEXT_PATH = '/'
|
||||
|
||||
# 监控地址
|
||||
VITE_APP_MONITOR_ADMIN = '/admin/applications'
|
||||
|
||||
# SnailJob 控制台地址
|
||||
VITE_APP_SNAILJOB_ADMIN = '/snail-job'
|
||||
|
||||
# 生产环境
|
||||
VITE_APP_BASE_API = '/prod-api'
|
||||
|
||||
VITE_BACKEND_URL = 'http://112.74.106.216:8080'
|
||||
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli
|
||||
VITE_BUILD_COMPRESS = gzip
|
||||
|
||||
VITE_APP_PORT = 80
|
||||
|
||||
# 接口加密功能开关(如需关闭 后端也必须对应关闭)
|
||||
|
||||
VITE_APP_ENCRYPT = true
|
||||
# 接口加密传输 RSA 公钥与后端解密私钥对应 如更换需前后端一同更换
|
||||
VITE_APP_RSA_PUBLIC_KEY = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
|
||||
# 接口响应解密 RSA 私钥与后端加密公钥对应 如更换需前后端一同更换
|
||||
VITE_APP_RSA_PRIVATE_KEY = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3CuPiGL/LcIIm7zryCEIbl1SPzBkr75E2VMtxegyZ1lYRD+7TZGAPkvIsBcaMs6Nsy0L78n2qh+lIZMpLH8wIDAQABAkEAk82Mhz0tlv6IVCyIcw/s3f0E+WLmtPFyR9/WtV3Y5aaejUkU60JpX4m5xNR2VaqOLTZAYjW8Wy0aXr3zYIhhQQIhAMfqR9oFdYw1J9SsNc+CrhugAvKTi0+BF6VoL6psWhvbAiEAxPPNTmrkmrXwdm/pQQu3UOQmc2vCZ5tiKpW10CgJi8kCIFGkL6utxw93Ncj4exE/gPLvKcT+1Emnoox+O9kRXss5AiAMtYLJDaLEzPrAWcZeeSgSIzbL+ecokmFKSDDcRske6QIgSMkHedwND1olF8vlKsJUGK3BcdtM8w4Xq7BpSBwsloE='
|
||||
|
||||
# 客户端id
|
||||
VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
|
||||
|
||||
# websocket 开关 默认使用sse推送
|
||||
VITE_APP_WEBSOCKET = false
|
||||
|
||||
# sse 开关
|
||||
VITE_APP_SSE = true
|
||||
|
@ -3,7 +3,6 @@ import path from 'node:path';
|
||||
import fs from 'node:fs';
|
||||
import process from 'node:process';
|
||||
|
||||
// 动态导入配置文件(支持文件不存在的情况)
|
||||
const loadConfig = async () => {
|
||||
try {
|
||||
const { default: config } = await import('./.deployrc.js');
|
||||
@ -27,11 +26,9 @@ const ssh = new NodeSSH();
|
||||
|
||||
async function deploy() {
|
||||
try {
|
||||
// 加载配置
|
||||
const config = await loadConfig();
|
||||
validateConfig(config);
|
||||
|
||||
// 连接服务器
|
||||
console.log('🔄 Connecting to server...');
|
||||
await ssh.connect({
|
||||
host: config.host,
|
||||
@ -41,17 +38,14 @@ async function deploy() {
|
||||
privateKey: config.privateKey
|
||||
});
|
||||
|
||||
// 确保目录存在
|
||||
console.log('📂 Ensuring remote directory exists...');
|
||||
await ssh.execCommand(`mkdir -p ${config.remotePath}`);
|
||||
|
||||
// 清理目录
|
||||
if (config.cleanRemote) {
|
||||
console.log('🧹 Cleaning remote directory...');
|
||||
await ssh.execCommand(`rm -rf ${config.remotePath}/*`);
|
||||
}
|
||||
|
||||
// 上传文件
|
||||
console.log('🚀 Uploading files...');
|
||||
const uploadResult = await ssh.putDirectory('./dist', config.remotePath, {
|
||||
recursive: true,
|
||||
|
@ -6,7 +6,7 @@
|
||||
<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>
|
||||
<title>香港SMT订单物流管理系统</title>
|
||||
<!--[if lt IE 11
|
||||
]><script>
|
||||
window.location.href = '/html/ie.html';
|
||||
|
@ -2,7 +2,7 @@
|
||||
"$schema": "https://json.schemastore.org/tsconfig",
|
||||
"name": "asinkeji",
|
||||
"version": "5.3.0",
|
||||
"description": "瑷胜科技管理系统",
|
||||
"description": "香港SMT订单物流管理系统",
|
||||
"author": "LionLi",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
@ -28,6 +28,7 @@
|
||||
"@vueup/vue-quill": "1.2.0",
|
||||
"@vueuse/core": "11.3.0",
|
||||
"animate.css": "4.1.1",
|
||||
"countup.js": "^2.8.0",
|
||||
"await-to-js": "3.0.0",
|
||||
"axios": "1.7.8",
|
||||
"crypto-js": "4.2.0",
|
||||
|
@ -18,5 +18,3 @@ onMounted(() => {
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
@ -74,6 +74,8 @@ export interface InquiryRequestItemVO {
|
||||
*/
|
||||
channelId: string | number;
|
||||
|
||||
customsFlag: string;
|
||||
|
||||
quoteDate: string;
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,8 @@ export interface LogisticsQuoteVO {
|
||||
*/
|
||||
leadTime: number;
|
||||
|
||||
minLeadTime: number;
|
||||
|
||||
/**
|
||||
* 附加费
|
||||
*/
|
||||
@ -103,6 +105,8 @@ export interface LogisticsQuoteForm extends BaseEntity {
|
||||
*/
|
||||
leadTime?: number;
|
||||
|
||||
minLeadTime?: number;
|
||||
|
||||
/**
|
||||
* 附加费
|
||||
*/
|
||||
@ -111,7 +115,7 @@ export interface LogisticsQuoteForm extends BaseEntity {
|
||||
/**
|
||||
* 报价生效日期
|
||||
*/
|
||||
quoteDate?: string;
|
||||
quoteDate?: string | Date | Date[];
|
||||
|
||||
/**
|
||||
* 提交状态(Y已提交 N未提交)
|
||||
@ -133,6 +137,11 @@ export interface LogisticsQuoteForm extends BaseEntity {
|
||||
*/
|
||||
channelId?: string | number;
|
||||
|
||||
channelName?: string;
|
||||
|
||||
quoteStartDate?: string;
|
||||
quoteEndDate?: string;
|
||||
|
||||
/**
|
||||
* 是否双清包税(N不是 Y是)
|
||||
*/
|
||||
|
@ -51,6 +51,18 @@ export const updatePurchaseOrder = (data: PurchaseOrderForm) => {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 确认采购订单
|
||||
* @param data
|
||||
*/
|
||||
export const confirmPurchaseOrder = (data: PurchaseOrderForm) => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrder/confirm',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除采购单主
|
||||
* @param orderSn
|
||||
|
@ -1,4 +1,9 @@
|
||||
import { ShipForwardVO } from '@/api/amz/shipForward/types';
|
||||
import { PurchaseOrderItemVO } from '@/api/amz/purchaseOrderItem/types';
|
||||
import { StatusHistoryVO } from '@/api/amz/statusHistory/types';
|
||||
|
||||
export interface PurchaseOrderVO {
|
||||
id: string | number;
|
||||
/**
|
||||
* 采购单号
|
||||
*/
|
||||
@ -253,6 +258,16 @@ export interface PurchaseOrderVO {
|
||||
* 订单交付变动天数
|
||||
*/
|
||||
dlvTimeVar: number;
|
||||
|
||||
remainingQuantity: number;
|
||||
|
||||
forwardList?: ShipForwardVO[];
|
||||
|
||||
items?: PurchaseOrderItemVO[];
|
||||
sysStatusHistories?: StatusHistoryVO[];
|
||||
hasForward?: number | string;
|
||||
|
||||
hasSendOrder?: number | string;
|
||||
}
|
||||
|
||||
export interface PurchaseOrderForm extends BaseEntity {
|
||||
@ -501,10 +516,17 @@ export interface PurchaseOrderForm extends BaseEntity {
|
||||
*/
|
||||
deliveryTime?: string;
|
||||
|
||||
/**
|
||||
* 延期日期
|
||||
*/
|
||||
divTime?: string;
|
||||
|
||||
/**
|
||||
* 订单交付变动天数
|
||||
*/
|
||||
dlvTimeVar?: number;
|
||||
|
||||
storeName?: string;
|
||||
}
|
||||
|
||||
export interface PurchaseOrderQuery extends PageQuery {
|
||||
@ -741,7 +763,7 @@ export interface PurchaseOrderQuery extends PageQuery {
|
||||
/**
|
||||
* 订单状态
|
||||
*/
|
||||
orderStatus?: string;
|
||||
orderStatus?: string | string[];
|
||||
|
||||
/**
|
||||
* 交货时间
|
||||
@ -753,6 +775,9 @@ export interface PurchaseOrderQuery extends PageQuery {
|
||||
*/
|
||||
dlvTimeVar?: number;
|
||||
|
||||
storeName?: string;
|
||||
sku?: string;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
|
71
src/api/amz/purchaseOrderItem/index.ts
Normal file
71
src/api/amz/purchaseOrderItem/index.ts
Normal file
@ -0,0 +1,71 @@
|
||||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import { PurchaseOrderItemVO, PurchaseOrderItemForm, PurchaseOrderItemQuery } from '@/api/amz/purchaseOrderItem/types';
|
||||
|
||||
/**
|
||||
* 查询供应商订单产品明细列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
|
||||
export const listPurchaseOrderItem = (query?: PurchaseOrderItemQuery): AxiosPromise<PurchaseOrderItemVO[]> => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrderItem/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询供应商订单产品明细详细
|
||||
* @param id
|
||||
*/
|
||||
export const getPurchaseOrderItem = (id: string | number): AxiosPromise<PurchaseOrderItemVO> => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrderItem/' + id,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增供应商订单产品明细
|
||||
* @param data
|
||||
*/
|
||||
export const addPurchaseOrderItem = (data: PurchaseOrderItemForm) => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrderItem',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改供应商订单产品明细
|
||||
* @param data
|
||||
*/
|
||||
export const updatePurchaseOrderItem = (data: PurchaseOrderItemForm) => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrderItem',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
export const updateOrderItemDetail = (data: any) => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrderItem',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除供应商订单产品明细
|
||||
* @param id
|
||||
*/
|
||||
export const delPurchaseOrderItem = (id: string | number | Array<string | number>) => {
|
||||
return request({
|
||||
url: '/amz/purchaseOrderItem/' + id,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
435
src/api/amz/purchaseOrderItem/types.ts
Normal file
435
src/api/amz/purchaseOrderItem/types.ts
Normal file
@ -0,0 +1,435 @@
|
||||
export interface PurchaseOrderItemVO {
|
||||
/**
|
||||
* 采购单子项ID
|
||||
*/
|
||||
id: string | number;
|
||||
|
||||
/**
|
||||
* 关联采购单号
|
||||
*/
|
||||
orderSn: string;
|
||||
|
||||
/**
|
||||
* 仓库ID
|
||||
*/
|
||||
wid: string | number;
|
||||
|
||||
/**
|
||||
* 仓库名称
|
||||
*/
|
||||
wareHouseName: string;
|
||||
|
||||
/**
|
||||
* 采购计划号
|
||||
*/
|
||||
planSn: string;
|
||||
|
||||
/**
|
||||
* 本地产品ID
|
||||
*/
|
||||
productId: string | number;
|
||||
|
||||
/**
|
||||
* 品名
|
||||
*/
|
||||
productName: string;
|
||||
|
||||
/**
|
||||
* SKU
|
||||
*/
|
||||
sku: string;
|
||||
|
||||
/**
|
||||
* FNSKU
|
||||
*/
|
||||
fnsku: string;
|
||||
|
||||
/**
|
||||
* 店铺ID
|
||||
*/
|
||||
sid: string | number;
|
||||
|
||||
/**
|
||||
* 型号
|
||||
*/
|
||||
model: string;
|
||||
|
||||
/**
|
||||
* 含税单价
|
||||
*/
|
||||
price: number;
|
||||
|
||||
/**
|
||||
* 价税合计
|
||||
*/
|
||||
amount: number;
|
||||
|
||||
/**
|
||||
* 计划采购量
|
||||
*/
|
||||
quantityPlan: number;
|
||||
|
||||
/**
|
||||
* 实际采购量
|
||||
*/
|
||||
quantityReal: number;
|
||||
|
||||
/**
|
||||
* 到货入库量
|
||||
*/
|
||||
quantityEntry: number;
|
||||
|
||||
/**
|
||||
* 待到货量
|
||||
*/
|
||||
quantityReceive: number;
|
||||
|
||||
/**
|
||||
* 退货数
|
||||
*/
|
||||
quantityReturn: number;
|
||||
|
||||
/**
|
||||
* 换货量
|
||||
*/
|
||||
quantityExchange: number;
|
||||
|
||||
/**
|
||||
* 质检量
|
||||
*/
|
||||
quantityQc: number;
|
||||
|
||||
/**
|
||||
* 待质检量
|
||||
*/
|
||||
quantityQcPrepare: number;
|
||||
|
||||
/**
|
||||
* 期待到货时间
|
||||
*/
|
||||
expectArriveTime: string;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
remark: string;
|
||||
|
||||
/**
|
||||
* 箱数
|
||||
*/
|
||||
casesNum: number;
|
||||
|
||||
/**
|
||||
* 单箱数量
|
||||
*/
|
||||
quantityPerCase: number;
|
||||
|
||||
/**
|
||||
* 是否删除:0 否,1 是
|
||||
*/
|
||||
isDelete: number;
|
||||
|
||||
/**
|
||||
* 税率
|
||||
*/
|
||||
taxRate: string;
|
||||
|
||||
/**
|
||||
* SPU
|
||||
*/
|
||||
spu: string;
|
||||
|
||||
/**
|
||||
* 款名
|
||||
*/
|
||||
spuName: string;
|
||||
}
|
||||
|
||||
export interface PurchaseOrderItemForm extends BaseEntity {
|
||||
/**
|
||||
* 采购单子项ID
|
||||
*/
|
||||
id?: string | number;
|
||||
|
||||
/**
|
||||
* 关联采购单号
|
||||
*/
|
||||
orderSn?: string;
|
||||
|
||||
/**
|
||||
* 仓库ID
|
||||
*/
|
||||
wid?: string | number;
|
||||
|
||||
/**
|
||||
* 仓库名称
|
||||
*/
|
||||
wareHouseName?: string;
|
||||
|
||||
/**
|
||||
* 采购计划号
|
||||
*/
|
||||
planSn?: string;
|
||||
|
||||
/**
|
||||
* 本地产品ID
|
||||
*/
|
||||
productId?: string | number;
|
||||
|
||||
/**
|
||||
* 品名
|
||||
*/
|
||||
productName?: string;
|
||||
|
||||
/**
|
||||
* SKU
|
||||
*/
|
||||
sku?: string;
|
||||
|
||||
/**
|
||||
* FNSKU
|
||||
*/
|
||||
fnsku?: string;
|
||||
|
||||
/**
|
||||
* 店铺ID
|
||||
*/
|
||||
sid?: string | number;
|
||||
|
||||
/**
|
||||
* 型号
|
||||
*/
|
||||
model?: string;
|
||||
|
||||
/**
|
||||
* 含税单价
|
||||
*/
|
||||
price?: number;
|
||||
|
||||
/**
|
||||
* 价税合计
|
||||
*/
|
||||
amount?: number;
|
||||
|
||||
/**
|
||||
* 计划采购量
|
||||
*/
|
||||
quantityPlan?: number;
|
||||
|
||||
/**
|
||||
* 实际采购量
|
||||
*/
|
||||
quantityReal?: number;
|
||||
|
||||
/**
|
||||
* 到货入库量
|
||||
*/
|
||||
quantityEntry?: number;
|
||||
|
||||
/**
|
||||
* 待到货量
|
||||
*/
|
||||
quantityReceive?: number;
|
||||
|
||||
/**
|
||||
* 退货数
|
||||
*/
|
||||
quantityReturn?: number;
|
||||
|
||||
/**
|
||||
* 换货量
|
||||
*/
|
||||
quantityExchange?: number;
|
||||
|
||||
/**
|
||||
* 质检量
|
||||
*/
|
||||
quantityQc?: number;
|
||||
|
||||
/**
|
||||
* 待质检量
|
||||
*/
|
||||
quantityQcPrepare?: number;
|
||||
|
||||
/**
|
||||
* 期待到货时间
|
||||
*/
|
||||
expectArriveTime?: string;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
remark?: string;
|
||||
|
||||
/**
|
||||
* 箱数
|
||||
*/
|
||||
casesNum?: number;
|
||||
|
||||
/**
|
||||
* 单箱数量
|
||||
*/
|
||||
quantityPerCase?: number;
|
||||
|
||||
/**
|
||||
* 是否删除:0 否,1 是
|
||||
*/
|
||||
isDelete?: number;
|
||||
|
||||
/**
|
||||
* 税率
|
||||
*/
|
||||
taxRate?: string;
|
||||
|
||||
/**
|
||||
* SPU
|
||||
*/
|
||||
spu?: string;
|
||||
|
||||
/**
|
||||
* 款名
|
||||
*/
|
||||
spuName?: string;
|
||||
}
|
||||
|
||||
export interface PurchaseOrderItemQuery extends PageQuery {
|
||||
/**
|
||||
* 关联采购单号
|
||||
*/
|
||||
orderSn?: string;
|
||||
|
||||
/**
|
||||
* 仓库ID
|
||||
*/
|
||||
wid?: string | number;
|
||||
|
||||
/**
|
||||
* 仓库名称
|
||||
*/
|
||||
wareHouseName?: string;
|
||||
|
||||
/**
|
||||
* 采购计划号
|
||||
*/
|
||||
planSn?: string;
|
||||
|
||||
/**
|
||||
* 本地产品ID
|
||||
*/
|
||||
productId?: string | number;
|
||||
|
||||
/**
|
||||
* 品名
|
||||
*/
|
||||
productName?: string;
|
||||
|
||||
/**
|
||||
* SKU
|
||||
*/
|
||||
sku?: string;
|
||||
|
||||
/**
|
||||
* FNSKU
|
||||
*/
|
||||
fnsku?: string;
|
||||
|
||||
/**
|
||||
* 店铺ID
|
||||
*/
|
||||
sid?: string | number;
|
||||
|
||||
/**
|
||||
* 型号
|
||||
*/
|
||||
model?: string;
|
||||
|
||||
/**
|
||||
* 含税单价
|
||||
*/
|
||||
price?: number;
|
||||
|
||||
/**
|
||||
* 价税合计
|
||||
*/
|
||||
amount?: number;
|
||||
|
||||
/**
|
||||
* 计划采购量
|
||||
*/
|
||||
quantityPlan?: number;
|
||||
|
||||
/**
|
||||
* 实际采购量
|
||||
*/
|
||||
quantityReal?: number;
|
||||
|
||||
/**
|
||||
* 到货入库量
|
||||
*/
|
||||
quantityEntry?: number;
|
||||
|
||||
/**
|
||||
* 待到货量
|
||||
*/
|
||||
quantityReceive?: number;
|
||||
|
||||
/**
|
||||
* 退货数
|
||||
*/
|
||||
quantityReturn?: number;
|
||||
|
||||
/**
|
||||
* 换货量
|
||||
*/
|
||||
quantityExchange?: number;
|
||||
|
||||
/**
|
||||
* 质检量
|
||||
*/
|
||||
quantityQc?: number;
|
||||
|
||||
/**
|
||||
* 待质检量
|
||||
*/
|
||||
quantityQcPrepare?: number;
|
||||
|
||||
/**
|
||||
* 期待到货时间
|
||||
*/
|
||||
expectArriveTime?: string;
|
||||
|
||||
/**
|
||||
* 箱数
|
||||
*/
|
||||
casesNum?: number;
|
||||
|
||||
/**
|
||||
* 单箱数量
|
||||
*/
|
||||
quantityPerCase?: number;
|
||||
|
||||
/**
|
||||
* 是否删除:0 否,1 是
|
||||
*/
|
||||
isDelete?: number;
|
||||
|
||||
/**
|
||||
* 税率
|
||||
*/
|
||||
taxRate?: string;
|
||||
|
||||
/**
|
||||
* SPU
|
||||
*/
|
||||
spu?: string;
|
||||
|
||||
/**
|
||||
* 款名
|
||||
*/
|
||||
spuName?: string;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
}
|
@ -58,7 +58,6 @@ export interface SendOrderVO {
|
||||
* 发货状态(pending=未发货,confirm=确认发货, processing=发货中,completed=发货完成)
|
||||
*/
|
||||
sendStatus: string;
|
||||
|
||||
}
|
||||
|
||||
export interface SendOrderForm extends BaseEntity {
|
||||
@ -122,10 +121,12 @@ export interface SendOrderForm extends BaseEntity {
|
||||
*/
|
||||
sendStatus?: string;
|
||||
|
||||
sendDetail?: string;
|
||||
|
||||
orderDetailId?: string | number;
|
||||
}
|
||||
|
||||
export interface SendOrderQuery extends PageQuery {
|
||||
|
||||
/**
|
||||
* 采购单号
|
||||
*/
|
||||
@ -181,11 +182,8 @@ export interface SendOrderQuery extends PageQuery {
|
||||
*/
|
||||
sendStatus?: string;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -51,6 +51,18 @@ export const updateShipForward = (data: ShipForwardForm) => {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改货件转发
|
||||
* @param data
|
||||
*/
|
||||
export const sendUpdateShipForward = (data: ShipForwardForm) => {
|
||||
return request({
|
||||
url: '/amz/shipForward/sendUpdate',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除货件转发
|
||||
* @param id
|
||||
|
@ -166,10 +166,16 @@ export interface ShipForwardForm extends BaseEntity {
|
||||
*/
|
||||
sendTime?: string;
|
||||
|
||||
expDeliveryDate?: string;
|
||||
|
||||
boxNum?: number;
|
||||
|
||||
/**
|
||||
* 采购单子项ID
|
||||
*/
|
||||
orderDetailId?: string | number;
|
||||
|
||||
sfgAvlQty?: number | string;
|
||||
/**
|
||||
* 请求类型
|
||||
*/
|
||||
|
@ -1,6 +1,6 @@
|
||||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import { ShipmentPlanVO, ShipmentPlanForm, ShipmentPlanQuery } from '@/api/amz/shipmentPlan/types';
|
||||
import { ShipmentPlanVO, ShipmentPlanForm, ShipmentPlanQuery, ShipmentPlanOrderVO } from '@/api/amz/shipmentPlan/types';
|
||||
|
||||
/**
|
||||
* 查询货件计划列表
|
||||
@ -16,7 +16,7 @@ export const listShipmentPlan = (query?: ShipmentPlanQuery): AxiosPromise<Shipme
|
||||
});
|
||||
};
|
||||
|
||||
export const listShipmentPlanOrder = (query?: ShipmentPlanQuery): AxiosPromise<ShipmentPlanVO[]> => {
|
||||
export const listShipmentPlanOrder = (query?: ShipmentPlanQuery): AxiosPromise<ShipmentPlanOrderVO[]> => {
|
||||
return request({
|
||||
url: '/amz/shipmentPlan/list/order',
|
||||
method: 'get',
|
||||
@ -81,6 +81,14 @@ export const updateShipmentPlan = (data: ShipmentPlanForm) => {
|
||||
});
|
||||
};
|
||||
|
||||
export const linkShipmentPlan = (data: ShipmentPlanForm) => {
|
||||
return request({
|
||||
url: '/amz/shipmentPlan/link',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
export const updateShipmentPlanList = (data: string[]) => {
|
||||
return request({
|
||||
url: '/amz/shipmentPlan/update/list/send',
|
||||
|
@ -131,7 +131,11 @@ export interface ShipmentPlanVO {
|
||||
/**
|
||||
* 供应商称重-总重量(单位:KG,物流商实际测量值)
|
||||
*/
|
||||
vendorWeight: number;
|
||||
vendorWeight?: number;
|
||||
|
||||
logisticsWeight?: number;
|
||||
|
||||
weightDiff?: number;
|
||||
|
||||
/**
|
||||
* 套数(系统中的申报量)
|
||||
@ -147,6 +151,29 @@ export interface ShipmentPlanVO {
|
||||
* 物流渠道
|
||||
*/
|
||||
channelName: string;
|
||||
|
||||
/**
|
||||
* 供应商发货单id
|
||||
*/
|
||||
sendOrderId?: string | number;
|
||||
}
|
||||
|
||||
interface Address {
|
||||
name: string | null;
|
||||
countryCode: string;
|
||||
stateOrProvinceCode: string | null;
|
||||
city: string;
|
||||
region: string;
|
||||
addressLine1: string;
|
||||
addressLine2: string | null;
|
||||
postalCode: string;
|
||||
phone: string | null;
|
||||
doorplate: string;
|
||||
}
|
||||
|
||||
export interface DescriptItem {
|
||||
label: string;
|
||||
prop: keyof Address; // 确保属性存在于 Address 接口
|
||||
}
|
||||
|
||||
export interface ShipmentPlanOrderVO {
|
||||
@ -482,6 +509,8 @@ export interface ShipmentPlanQuery extends PageQuery {
|
||||
*/
|
||||
destination?: string;
|
||||
|
||||
sellerName?: string;
|
||||
|
||||
/**
|
||||
* 运输模式
|
||||
*/
|
||||
|
63
src/api/amz/statusHistory/index.ts
Normal file
63
src/api/amz/statusHistory/index.ts
Normal file
@ -0,0 +1,63 @@
|
||||
import request from '@/utils/request';
|
||||
import { AxiosPromise } from 'axios';
|
||||
import { StatusHistoryVO, StatusHistoryForm, StatusHistoryQuery } from '@/api/amz/statusHistory/types';
|
||||
|
||||
/**
|
||||
* 查询状态历史列表
|
||||
* @param query
|
||||
* @returns {*}
|
||||
*/
|
||||
|
||||
export const listStatusHistory = (query?: StatusHistoryQuery): AxiosPromise<StatusHistoryVO[]> => {
|
||||
return request({
|
||||
url: '/amz/statusHistory/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 查询状态历史详细
|
||||
* @param historyId
|
||||
*/
|
||||
export const getStatusHistory = (historyId: string | number): AxiosPromise<StatusHistoryVO> => {
|
||||
return request({
|
||||
url: '/amz/statusHistory/' + historyId,
|
||||
method: 'get'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 新增状态历史
|
||||
* @param data
|
||||
*/
|
||||
export const addStatusHistory = (data: StatusHistoryForm) => {
|
||||
return request({
|
||||
url: '/amz/statusHistory',
|
||||
method: 'post',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 修改状态历史
|
||||
* @param data
|
||||
*/
|
||||
export const updateStatusHistory = (data: StatusHistoryForm) => {
|
||||
return request({
|
||||
url: '/amz/statusHistory',
|
||||
method: 'put',
|
||||
data: data
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 删除状态历史
|
||||
* @param historyId
|
||||
*/
|
||||
export const delStatusHistory = (historyId: string | number | Array<string | number>) => {
|
||||
return request({
|
||||
url: '/amz/statusHistory/' + historyId,
|
||||
method: 'delete'
|
||||
});
|
||||
};
|
115
src/api/amz/statusHistory/types.ts
Normal file
115
src/api/amz/statusHistory/types.ts
Normal file
@ -0,0 +1,115 @@
|
||||
export interface StatusHistoryVO {
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
historyId: string | number;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
tableName: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
recordId: string | number;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
statusColumn: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
oldStatus: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
newStatus: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
originalChangedAt: string;
|
||||
}
|
||||
|
||||
export interface StatusHistoryForm extends BaseEntity {
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
historyId?: string | number;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
tableName?: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
recordId?: string | number;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
statusColumn?: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
oldStatus?: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
newStatus?: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
originalChangedAt?: string;
|
||||
}
|
||||
|
||||
export interface StatusHistoryQuery extends PageQuery {
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
historyId?: string | number;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
tableName?: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
recordId?: string | number;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
statusColumn?: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
oldStatus?: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
newStatus?: string;
|
||||
|
||||
/**
|
||||
* $column.columnComment
|
||||
*/
|
||||
originalChangedAt?: string;
|
||||
|
||||
/**
|
||||
* 日期范围参数
|
||||
*/
|
||||
params?: any;
|
||||
}
|
@ -34,6 +34,7 @@ export interface UserVO extends BaseEntity {
|
||||
email: string;
|
||||
phonenumber: string;
|
||||
sex: string;
|
||||
address: string;
|
||||
avatar: string;
|
||||
status: string;
|
||||
delFlag: string;
|
||||
|
BIN
src/assets/icons/png/wechat.png
Normal file
BIN
src/assets/icons/png/wechat.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
40
src/components/Countup/index.vue
Normal file
40
src/components/Countup/index.vue
Normal file
@ -0,0 +1,40 @@
|
||||
<template>
|
||||
<span ref="countRef"></span>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onMounted, ref, watch } from 'vue';
|
||||
import { CountUp } from 'countup.js';
|
||||
|
||||
const props = defineProps({
|
||||
end: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
options: {
|
||||
type: Object,
|
||||
default: () => ({}),
|
||||
required: false
|
||||
}
|
||||
});
|
||||
|
||||
const countRef = ref<any>(null);
|
||||
let countUp: any;
|
||||
onMounted(() => {
|
||||
countUp = new CountUp(countRef.value, props.end, props.options);
|
||||
if (countUp.error) {
|
||||
console.error(countUp.error);
|
||||
return;
|
||||
}
|
||||
countUp.start();
|
||||
});
|
||||
|
||||
watch(
|
||||
() => props.end,
|
||||
(newVal) => {
|
||||
if (countUp) {
|
||||
countUp.update(newVal);
|
||||
}
|
||||
}
|
||||
);
|
||||
</script>
|
@ -1,17 +1,17 @@
|
||||
<template>
|
||||
<section class="app-main">
|
||||
<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>
|
||||
<!-- <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>
|
||||
@ -29,24 +29,14 @@ const tagsViewStore = useTagsViewStore();
|
||||
const userStore = useUserStore();
|
||||
|
||||
const font = reactive({
|
||||
fontSize: 22,
|
||||
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;
|
||||
return currentUser.nickName;
|
||||
});
|
||||
// 随机动画集合
|
||||
const animante = ref<string>('');
|
||||
|
@ -77,9 +77,9 @@
|
||||
<router-link v-if="!dynamic" to="/user/profile">
|
||||
<el-dropdown-item>{{ proxy.$t('navbar.personalCenter') }}</el-dropdown-item>
|
||||
</router-link>
|
||||
<el-dropdown-item v-if="settingsStore.showSettings" command="setLayout">
|
||||
<span>{{ proxy.$t('navbar.layoutSetting') }}</span>
|
||||
</el-dropdown-item>
|
||||
<!-- <el-dropdown-item v-if="settingsStore.showSettings" command="setLayout">-->
|
||||
<!-- <span>{{ proxy.$t('navbar.layoutSetting') }}</span>-->
|
||||
<!-- </el-dropdown-item>-->
|
||||
<el-dropdown-item divided command="logout">
|
||||
<span>{{ proxy.$t('navbar.logout') }}</span>
|
||||
</el-dropdown-item>
|
||||
|
@ -7,15 +7,15 @@
|
||||
<transition :enter-active-class="proxy?.animate.logoAnimate.enter" mode="out-in">
|
||||
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
|
||||
<img v-if="logo" :src="logo" class="sidebar-logo" />
|
||||
<h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">
|
||||
<h3 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">
|
||||
{{ title }}
|
||||
</h1>
|
||||
</h3>
|
||||
</router-link>
|
||||
<router-link v-else key="expand" class="sidebar-logo-link" to="/">
|
||||
<img v-if="logo" :src="logo" class="sidebar-logo" />
|
||||
<h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">
|
||||
<h3 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">
|
||||
{{ title }}
|
||||
</h1>
|
||||
</h3>
|
||||
</router-link>
|
||||
</transition>
|
||||
</div>
|
||||
@ -34,7 +34,7 @@ defineProps({
|
||||
}
|
||||
});
|
||||
|
||||
const title = ref('瑷胜科技管理系统');
|
||||
const title = ref('SMT订单物流管理系统');
|
||||
const settingsStore = useSettingsStore();
|
||||
const sideTheme = computed(() => settingsStore.sideTheme);
|
||||
</script>
|
||||
|
@ -1,24 +1,26 @@
|
||||
<template>
|
||||
<div :class="classObj" class="app-wrapper" :style="{ '--current-color': theme }">
|
||||
<div v-if="device === 'mobile' && sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
|
||||
<side-bar v-if="!sidebar.hide" class="sidebar-container" />
|
||||
<div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container">
|
||||
<!-- <el-scrollbar>
|
||||
<el-watermark :font="font" :content="userNick">
|
||||
<div :class="classObj" class="app-wrapper" :style="{ '--current-color': theme }">
|
||||
<div v-if="device === 'mobile' && sidebar.opened" class="drawer-bg" @click="handleClickOutside" />
|
||||
<side-bar v-if="!sidebar.hide" class="sidebar-container" />
|
||||
<div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container">
|
||||
<!-- <el-scrollbar>
|
||||
<div :class="{ 'fixed-header': fixedHeader }">
|
||||
<navbar ref="navbarRef" @setLayout="setLayout" />
|
||||
<tags-view v-if="needTagsView" />
|
||||
</div>
|
||||
<app-main />
|
||||
<settings ref="settingRef" />
|
||||
</el-scrollbar> -->
|
||||
<div :class="{ 'fixed-header': fixedHeader }">
|
||||
<navbar ref="navbarRef" @setLayout="setLayout" />
|
||||
<navbar ref="navbarRef" @set-layout="setLayout" />
|
||||
<tags-view v-if="needTagsView" />
|
||||
</div>
|
||||
<app-main />
|
||||
<settings ref="settingRef" />
|
||||
</el-scrollbar> -->
|
||||
<div :class="{ 'fixed-header': fixedHeader }">
|
||||
<navbar ref="navbarRef" @set-layout="setLayout" />
|
||||
<tags-view v-if="needTagsView" />
|
||||
</div>
|
||||
<app-main />
|
||||
<settings ref="settingRef" />
|
||||
</div>
|
||||
</div>
|
||||
</el-watermark>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
@ -28,6 +30,7 @@ import useAppStore from '@/store/modules/app';
|
||||
import useSettingsStore from '@/store/modules/settings';
|
||||
import { initWebSocket } from '@/utils/websocket';
|
||||
import { initSSE } from '@/utils/sse';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
|
||||
const settingsStore = useSettingsStore();
|
||||
const theme = computed(() => settingsStore.theme);
|
||||
@ -43,6 +46,19 @@ const classObj = computed(() => ({
|
||||
mobile: device.value === 'mobile'
|
||||
}));
|
||||
|
||||
const userStore = useUserStore();
|
||||
|
||||
const font = reactive({
|
||||
fontSize: 20,
|
||||
color: 'rgba(0, 0, 0, .06)'
|
||||
});
|
||||
|
||||
const currentUser = userStore.currentUser;
|
||||
|
||||
const userNick = computed(() => {
|
||||
return currentUser.nickName;
|
||||
});
|
||||
|
||||
const { width } = useWindowSize();
|
||||
const WIDTH = 992; // refer to Bootstrap's responsive design
|
||||
|
||||
|
@ -26,13 +26,11 @@ import 'virtual:svg-icons-register';
|
||||
import ElementIcons from '@/plugins/svgicon';
|
||||
|
||||
// permission control
|
||||
import './permission';
|
||||
import './userGetInfoBz';
|
||||
|
||||
// 国际化
|
||||
import i18n from '@/lang/index';
|
||||
|
||||
|
||||
|
||||
// vxeTable
|
||||
import VXETable from 'vxe-table';
|
||||
import 'vxe-table/lib/style.css';
|
||||
|
@ -10,6 +10,7 @@ import ParentView from '@/components/ParentView/index.vue';
|
||||
import InnerLink from '@/layout/components/InnerLink/index.vue';
|
||||
|
||||
import { createCustomNameComponent } from '@/utils/createCustomNameComponent';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
|
||||
// 匹配views里面所有的.vue文件
|
||||
const modules = import.meta.glob('./../../views/**/*.vue');
|
||||
@ -76,6 +77,15 @@ export const usePermissionStore = defineStore('permission', () => {
|
||||
if (type && route.children) {
|
||||
route.children = filterChildren(route.children, undefined);
|
||||
}
|
||||
if (route.path === '/demand') {
|
||||
route.children.forEach((child) => {
|
||||
if (child.path === 'purchaseOrderConfirm') {
|
||||
if (useUserStore().roles.includes('gengdan')) {
|
||||
child.meta.title = '创建半成品转发';
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
// Layout ParentView 组件特殊处理
|
||||
if (route.component?.toString() === 'Layout') {
|
||||
route.component = Layout;
|
||||
|
1
src/types/global.d.ts
vendored
1
src/types/global.d.ts
vendored
@ -82,6 +82,7 @@ declare global {
|
||||
queryParams: D;
|
||||
rules: ElFormRules;
|
||||
rules2?: ElFormRules;
|
||||
rules3?: ElFormRules;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -10,11 +10,11 @@ import useSettingsStore from '@/store/modules/settings';
|
||||
import usePermissionStore from '@/store/modules/permission';
|
||||
|
||||
NProgress.configure({ showSpinner: false });
|
||||
const whiteList = ['/login', '/register', '/social-callback', '/register*', '/register/*'];
|
||||
const bZSettiong = ['/login', '/register', '/social-callback', '/register*', '/register/*'];
|
||||
|
||||
const isWhiteList = (path: string) => {
|
||||
return whiteList.some(pattern => isPathMatch(pattern, path))
|
||||
}
|
||||
const isbZSettiong = (path: string) => {
|
||||
return bZSettiong.some((pattern) => isPathMatch(pattern, path));
|
||||
};
|
||||
|
||||
router.beforeEach(async (to, from, next) => {
|
||||
NProgress.start();
|
||||
@ -24,12 +24,11 @@ router.beforeEach(async (to, from, next) => {
|
||||
if (to.path === '/login') {
|
||||
next({ path: '/' });
|
||||
NProgress.done();
|
||||
} else if (isWhiteList(to.path)) {
|
||||
} else if (isbZSettiong(to.path)) {
|
||||
next();
|
||||
} else {
|
||||
if (useUserStore().roles.length === 0) {
|
||||
isRelogin.show = true;
|
||||
// 判断当前用户是否已拉取完user_info信息
|
||||
const [err] = await tos(useUserStore().getInfo());
|
||||
if (err) {
|
||||
await useUserStore().logout();
|
||||
@ -38,27 +37,31 @@ router.beforeEach(async (to, from, next) => {
|
||||
} else {
|
||||
isRelogin.show = false;
|
||||
const accessRoutes = await usePermissionStore().generateRoutes();
|
||||
// 根据roles权限生成可访问的路由表
|
||||
|
||||
accessRoutes.forEach((route) => {
|
||||
if (!isHttp(route.path)) {
|
||||
router.addRoute(route); // 动态添加可访问路由表
|
||||
router.addRoute(route);
|
||||
}
|
||||
});
|
||||
// @ts-expect-error hack方法 确保addRoutes已完成
|
||||
next({ path: to.path, replace: true, params: to.params, query: to.query, hash: to.hash, name: to.name as string }); // hack方法 确保addRoutes已完成
|
||||
next({
|
||||
path: to.path,
|
||||
replace: true,
|
||||
params: to.params,
|
||||
query: to.query,
|
||||
hash: to.hash,
|
||||
name: to.name as string
|
||||
});
|
||||
}
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 没有token
|
||||
if (isWhiteList(to.path)) {
|
||||
// 在免登录白名单,直接进入
|
||||
if (isbZSettiong(to.path)) {
|
||||
next();
|
||||
} else {
|
||||
const redirect = encodeURIComponent(to.fullPath || '/');
|
||||
next(`/login?redirect=${redirect}`); // 否则全部重定向到登录页
|
||||
next(`/login?redirect=${redirect}`);
|
||||
NProgress.done();
|
||||
}
|
||||
}
|
@ -246,6 +246,13 @@ export const blobValidate = (data: any) => {
|
||||
return data.type !== 'application/json';
|
||||
};
|
||||
|
||||
export const formatText = (text) => {
|
||||
if (text === null) {
|
||||
return '';
|
||||
}
|
||||
return text.replace(/\n/g, '<br>');
|
||||
};
|
||||
|
||||
export default {
|
||||
handleTree
|
||||
};
|
||||
|
@ -1,4 +1,4 @@
|
||||
// src/utils/permission.ts
|
||||
// src/utils/userGetInfoBz.ts
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
|
||||
// 权限校验方法(替代指令的核心逻辑)
|
||||
|
@ -4,39 +4,39 @@
|
||||
<div v-show="showSearch" class="mb-[10px]">
|
||||
<el-card shadow="hover">
|
||||
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="150px">
|
||||
<el-form-item label="用户ID" prop="userId">
|
||||
<el-input v-model="queryParams.userId" placeholder="请输入所属用户ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="领星ID" prop="sid">
|
||||
<el-input v-model="queryParams.sid" placeholder="请输入领星ERP店铺标识ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="站点ID" prop="mid">
|
||||
<el-input v-model="queryParams.mid" placeholder="请输入站点ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="用户ID" prop="userId">-->
|
||||
<!-- <el-input v-model="queryParams.userId" placeholder="请输入所属用户ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="领星ID" prop="sid">-->
|
||||
<!-- <el-input v-model="queryParams.sid" placeholder="请输入领星ERP店铺标识ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="站点ID" prop="mid">-->
|
||||
<!-- <el-input v-model="queryParams.mid" placeholder="请输入站点ID" 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="亚马逊店铺ID" prop="sellerId">
|
||||
<el-input v-model="queryParams.sellerId" placeholder="请输入亚马逊店铺ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="店铺账户" prop="accountName">
|
||||
<el-input v-model="queryParams.accountName" placeholder="请输入店铺账户名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="店铺ID" prop="sellerAccountId">
|
||||
<el-input v-model="queryParams.sellerAccountId" placeholder="请输入店铺账号ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="站点简称" prop="region">
|
||||
<el-input v-model="queryParams.region" placeholder="请输入站点简称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="商城国家" prop="country">
|
||||
<el-input v-model="queryParams.country" placeholder="请输入商城所在国家" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="市场ID" prop="marketplaceId">
|
||||
<el-input v-model="queryParams.marketplaceId" placeholder="请输入亚马逊市场ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="广告授权" prop="hasAdsSetting">
|
||||
<el-input v-model="queryParams.hasAdsSetting" placeholder="请输入广告授权 0未授权 1已授权" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="亚马逊店铺ID" prop="sellerId">-->
|
||||
<!-- <el-input v-model="queryParams.sellerId" placeholder="请输入亚马逊店铺ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="店铺账户" prop="accountName">-->
|
||||
<!-- <el-input v-model="queryParams.accountName" placeholder="请输入店铺账户名称" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="店铺ID" prop="sellerAccountId">-->
|
||||
<!-- <el-input v-model="queryParams.sellerAccountId" placeholder="请输入店铺账号ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="站点简称" prop="region">-->
|
||||
<!-- <el-input v-model="queryParams.region" placeholder="请输入站点简称" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="商城国家" prop="country">-->
|
||||
<!-- <el-input v-model="queryParams.country" placeholder="请输入商城所在国家" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="市场ID" prop="marketplaceId">-->
|
||||
<!-- <el-input v-model="queryParams.marketplaceId" placeholder="请输入亚马逊市场ID" clearable @keyup.enter="handleQuery" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="广告授权" prop="hasAdsSetting">-->
|
||||
<!-- <el-input v-model="queryParams.hasAdsSetting" placeholder="请输入广告授权 0未授权 1已授权" 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>
|
||||
|
@ -248,7 +248,7 @@
|
||||
</el-row>
|
||||
<el-form-item label="时效" prop="leadTime">
|
||||
<div class="kgprice">
|
||||
<el-input-number v-model="minDay" :min="1" :max="100">
|
||||
<el-input-number v-model="quoteForm.minLeadTime" :min="1" :max="100">
|
||||
<template #suffix>
|
||||
<span>天</span>
|
||||
</template>
|
||||
@ -362,29 +362,9 @@ const initFormData: InquiryRequestForm = {
|
||||
effectiveStartTime: undefined,
|
||||
effectiveEndTime: undefined
|
||||
};
|
||||
const initQuoteForm: LogisticsMostQuoteForm = {
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
destination: undefined,
|
||||
transportChannel: undefined,
|
||||
price: 10,
|
||||
leadTime: 10,
|
||||
surcharge: 0,
|
||||
channelName: undefined,
|
||||
quoteStartDate: undefined,
|
||||
quoteEndDate: undefined,
|
||||
quoteDate: [] as Date[],
|
||||
isSubmitted: undefined,
|
||||
remark: undefined,
|
||||
channelType: undefined,
|
||||
channelId: undefined,
|
||||
isDdp: 'Y',
|
||||
unit: 'kg',
|
||||
backLogisticsType: '快递'
|
||||
};
|
||||
|
||||
const data = reactive<PageData<InquiryRequestForm, InquiryRequestQuery>>({
|
||||
form: { ...initFormData },
|
||||
quoteForm: { ...initQuoteForm },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
@ -424,7 +404,7 @@ const data = reactive<PageData<InquiryRequestForm, InquiryRequestQuery>>({
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules, quoteForm } = toRefs(data);
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
const options = ref([
|
||||
{
|
||||
@ -437,6 +417,28 @@ const options = ref([
|
||||
}
|
||||
]);
|
||||
|
||||
const quoteForm = ref<LogisticsQuoteForm>({
|
||||
id: undefined,
|
||||
userId: undefined,
|
||||
destination: undefined,
|
||||
transportChannel: undefined,
|
||||
price: 10,
|
||||
minLeadTime: 10,
|
||||
leadTime: 10,
|
||||
surcharge: 0,
|
||||
channelName: undefined,
|
||||
quoteStartDate: undefined,
|
||||
quoteEndDate: undefined,
|
||||
quoteDate: [] as Date[],
|
||||
isSubmitted: undefined,
|
||||
remark: undefined,
|
||||
channelType: undefined,
|
||||
channelId: undefined,
|
||||
isDdp: 'Y',
|
||||
unit: 'kg',
|
||||
backLogisticsType: '快递'
|
||||
});
|
||||
|
||||
const handleChannelChange = ({ value, node }) => {
|
||||
console.log('选中渠道ID:', value);
|
||||
console.log('完整渠道信息:', node);
|
||||
@ -541,18 +543,18 @@ const submitForm = () => {
|
||||
});
|
||||
};
|
||||
const submitQuoteForm = async () => {
|
||||
data.quoteForm.quoteStartDate = data.quoteForm.quoteDate[0];
|
||||
data.quoteForm.quoteEndDate = data.quoteForm.quoteDate[1];
|
||||
data.quoteForm.isSubmitted = 'Y';
|
||||
console.log('submitQuoteForm', data.quoteForm);
|
||||
const res = await checkPriceQuoteByBo(data.quoteForm);
|
||||
quoteForm.value.quoteStartDate = quoteForm.value.quoteDate[0];
|
||||
quoteForm.value.quoteEndDate = quoteForm.value.quoteDate[1];
|
||||
quoteForm.value.isSubmitted = 'Y';
|
||||
console.log('submitQuoteForm', quoteForm.value);
|
||||
const res = await checkPriceQuoteByBo(quoteForm.value);
|
||||
console.log('submitQuoteForm', res);
|
||||
if (res.code === 200) {
|
||||
// ElMessage.success('提交成功');
|
||||
// quoteDialog.visible = false;
|
||||
|
||||
if (res.data === true) {
|
||||
const res = await addMostLogisticsQuote(data.quoteForm);
|
||||
const res = await addMostLogisticsQuote(quoteForm.value);
|
||||
if (res.code === 200) {
|
||||
ElMessage.success('提交成功');
|
||||
quoteDialog.visible = false;
|
||||
@ -564,7 +566,7 @@ const submitQuoteForm = async () => {
|
||||
type: 'warning'
|
||||
})
|
||||
.then(async () => {
|
||||
const res = await addMostLogisticsQuote(data.quoteForm);
|
||||
const res = await addMostLogisticsQuote(quoteForm.value);
|
||||
if (res.code === 200) {
|
||||
ElMessage.success('提交成功');
|
||||
quoteDialog.visible = false;
|
||||
@ -597,11 +599,11 @@ const handleDelete = async (row?: InquiryRequestVO) => {
|
||||
const handleSubmit = async (row?: InquiryRequestVO) => {
|
||||
console.log('handleSubmit');
|
||||
console.log(row.channelId);
|
||||
data.quoteForm.id = row.id;
|
||||
data.quoteForm.destination = row.destination;
|
||||
data.quoteForm.transportChannel = row.transportChannel;
|
||||
data.quoteForm.channelId = row.channelId;
|
||||
data.quoteForm.channelName = row.channelName;
|
||||
quoteForm.value.id = row.id;
|
||||
quoteForm.value.destination = row.destination;
|
||||
quoteForm.value.transportChannel = row.transportChannel;
|
||||
quoteForm.value.channelId = row.channelId;
|
||||
quoteForm.value.channelName = row.channelName;
|
||||
quoteDialog.visible = true;
|
||||
console.log(row.effectiveStartTime);
|
||||
// quoteForm.quoteDate[0] = row.effectiveStartTime;
|
||||
@ -610,8 +612,8 @@ const handleSubmit = async (row?: InquiryRequestVO) => {
|
||||
const dateString2 = row.effectiveEndTime.replace(' ', 'T');
|
||||
const date = new Date(dateString); // 生成 Date 对象
|
||||
const date2 = new Date(dateString2); // 生成 Date 对象
|
||||
data.quoteForm.quoteDate[0] = date;
|
||||
data.quoteForm.quoteDate[1] = date2;
|
||||
quoteForm.value.quoteDate[0] = date;
|
||||
quoteForm.value.quoteDate[1] = date2;
|
||||
};
|
||||
|
||||
/** 导出按钮操作 */
|
||||
|
@ -62,6 +62,11 @@
|
||||
<el-table-column label="目的地仓库名称或编码" align="center" prop="destination" />
|
||||
<el-table-column label="总箱子数量" align="center" prop="boxQuantity" />
|
||||
<el-table-column label="总货件数量" align="center" prop="shipmentQuantity" />
|
||||
<el-table-column label="订单状态" align="center" prop="status">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="logic_order_status" :value="scope.row.status" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="亚马逊仓库实际上架日期" align="center" prop="amazonShelfDate" width="180">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span>{{ parseTime(scope.row.amazonShelfDate, '{y}-{m}-{d}') }}</span>-->
|
||||
@ -90,7 +95,14 @@
|
||||
v-hasPermi="['amz:logisticsOrder:remove']"
|
||||
></el-button>
|
||||
</el-tooltip>
|
||||
<el-button link size="small" type="primary" @click="openDetail(scope.row)" v-hasRoles="['wuliu']"> 编辑订单明细 </el-button>
|
||||
<el-popconfirm title="是否确认收货?" @confirm="handleConfirm(scope.row)">
|
||||
<template #reference>
|
||||
<el-button v-if="scope.row.status === 'unshipped'" link size="small" type="primary" v-hasRoles="['wuliu']"> 确认收货 </el-button>
|
||||
</template>
|
||||
</el-popconfirm>
|
||||
<el-button v-if="scope.row.status === 'received'" link size="small" type="primary" @click="openDetail(scope.row)" v-hasRoles="['wuliu']">
|
||||
编辑明细
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@ -202,11 +214,13 @@ import { checkPermi } from '@/utils/permission';
|
||||
import { LogisticsOrderDetailVO } from '@/api/amz/logisticsOrderDetail/types';
|
||||
import { listLogisticsOrderDetail, updateList } from '@/api/amz/logisticsOrderDetail';
|
||||
import 'handsontable/dist/handsontable.full.min.css';
|
||||
import { InfoFilled } from '@element-plus/icons-vue';
|
||||
// import 'handsontable/styles/ht-theme-horizon.css';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
const { biz_logistics_status } = toRefs<any>(proxy?.useDict('biz_logistics_status'));
|
||||
const { logic_order_status } = toRefs<any>(proxy?.useDict('logic_order_status'));
|
||||
|
||||
// 初始化注册所有模块
|
||||
registerAllModules();
|
||||
@ -315,6 +329,13 @@ const hotSettings = ref({
|
||||
if (prop === 'logisticsStatus') {
|
||||
logisticsOrderDetailList.value[row].logisticsStatus = labelTovalueMap.value[newVal];
|
||||
}
|
||||
|
||||
if (prop === 'logisticsWeight' || prop === 'pricePerKg' || prop === 'otherFee') {
|
||||
console.log('计算总价');
|
||||
logisticsOrderDetailList.value[row].totalFee =
|
||||
(logisticsOrderDetailList.value[row].logisticsWeight ?? 0) * (logisticsOrderDetailList.value[row].pricePerKg ?? 0) +
|
||||
(logisticsOrderDetailList.value[row].otherFee ?? 0);
|
||||
}
|
||||
});
|
||||
console.log('logisticsOrderDetailList.value:', logisticsOrderDetailList.value);
|
||||
},
|
||||
@ -324,15 +345,15 @@ const hotSettings = ref({
|
||||
'FBA货件编号',
|
||||
'FBA箱号',
|
||||
// '物流商名称',
|
||||
'物流渠道',
|
||||
'目的地仓库',
|
||||
// '物流渠道',
|
||||
// '目的地仓库',
|
||||
'数量',
|
||||
// '实际数量',
|
||||
'物流追踪号',
|
||||
'物流商计重',
|
||||
// '称重差异',
|
||||
'物流单价',
|
||||
'物流计价重量',
|
||||
// '物流计价重量',
|
||||
'其他物流费用',
|
||||
'费用合计',
|
||||
'物流状态',
|
||||
@ -353,8 +374,8 @@ const hotSettings = ref({
|
||||
{ data: 'fbaShipmentId', className: 'htCenter', readOnly: true },
|
||||
{ data: 'fbaBoxNumber', className: 'htCenter', readOnly: true }, // FBA箱号
|
||||
// { data: 'logisticsProviderName', className: 'htCenter', readOnly: true }, // 物流商名称
|
||||
{ data: 'logisticsChannel', className: 'htCenter', readOnly: true }, // 物流渠道
|
||||
{ data: 'destinationWarehouse', className: 'htCenter', readOnly: true }, // 目的地仓库
|
||||
// { data: 'logisticsChannel', className: 'htCenter', readOnly: true }, // 物流渠道
|
||||
// { data: 'destinationWarehouse', className: 'htCenter', readOnly: true }, // 目的地仓库
|
||||
{ data: 'plannedQuantity', className: 'htCenter', readOnly: true }, // 计划数量
|
||||
// { data: 'shipmentQuantity', className: 'htCenter', readOnly: false, type: 'numeric' }, // 实际数量
|
||||
{ data: 'trackingNumber', className: 'htCenter', readOnly: false }, // 物流追踪号
|
||||
@ -403,9 +424,9 @@ const hotSettings = ref({
|
||||
return td;
|
||||
}
|
||||
}, // 物流单价
|
||||
{ data: 'logisticsBillingWeight', className: 'htCenter', type: 'numeric', readOnly: true }, // 物流计价重量
|
||||
// { data: 'logisticsBillingWeight', className: 'htCenter', type: 'numeric', readOnly: true }, // 物流计价重量
|
||||
{
|
||||
data: 'otherLogisticsFee',
|
||||
data: 'otherFee',
|
||||
className: 'htCenter',
|
||||
type: 'numeric',
|
||||
readOnly: false,
|
||||
@ -717,6 +738,21 @@ const submitForm = () => {
|
||||
});
|
||||
};
|
||||
|
||||
const handleConfirm = async (row?: LogisticsOrderVO) => {
|
||||
console.log('row:', row);
|
||||
const updateData = {
|
||||
id: row?.id,
|
||||
status: 'received'
|
||||
};
|
||||
buttonLoading.value = true;
|
||||
if (updateData.id) {
|
||||
await updateLogisticsOrder(updateData).finally(() => (buttonLoading.value = false));
|
||||
}
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
// dialog.visible = false;
|
||||
await getList();
|
||||
};
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: LogisticsOrderVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
|
@ -349,8 +349,8 @@ const hotSettings = ref({
|
||||
'FBA箱号',
|
||||
'物流商ID',
|
||||
'物流商名称',
|
||||
'物流渠道',
|
||||
'目的地仓库',
|
||||
// '物流渠道',
|
||||
// '目的地仓库',
|
||||
'计划数量',
|
||||
'实际货件数量',
|
||||
'物流追踪号',
|
||||
@ -380,8 +380,8 @@ const hotSettings = ref({
|
||||
{ data: 'fbaBoxNumber', className: 'htCenter', readOnly: true }, // FBA箱号
|
||||
{ data: 'logisticsProviderId', className: 'htCenter', readOnly: true }, // 物流商ID
|
||||
{ data: 'logisticsProviderName', className: 'htCenter', readOnly: true }, // 物流商名称
|
||||
{ data: 'logisticsChannel', className: 'htCenter', readOnly: true }, // 物流渠道
|
||||
{ data: 'destinationWarehouse', className: 'htCenter', readOnly: true }, // 目的地仓库
|
||||
// { data: 'logisticsChannel', className: 'htCenter', readOnly: true }, // 物流渠道
|
||||
// { data: 'destinationWarehouse', className: 'htCenter', readOnly: true }, // 目的地仓库
|
||||
{ data: 'plannedQuantity', className: 'htCenter', readOnly: true }, // 计划数量
|
||||
{ data: 'actualShipmentQuantity', className: 'htCenter', readOnly: true }, // 实际货件数量
|
||||
{ data: 'trackingNumber', className: 'htCenter', readOnly: false }, // 物流追踪号
|
||||
|
@ -107,10 +107,11 @@
|
||||
<!-- v-hasPermi="['amz:logisticsOrderQuotation:remove']"-->
|
||||
<!-- ></el-button>-->
|
||||
<!-- </el-tooltip>-->
|
||||
|
||||
<el-button v-if="scope.row.confirm == '0'" link type="primary" size="small" @click="handleQuotation(scope.row)" v-hasRoles="['wuliu']">
|
||||
确认订单
|
||||
</el-button>
|
||||
<el-popconfirm title="是否确认订单?" @confirm="handleQuotation(scope.row)">
|
||||
<template #reference>
|
||||
<el-button v-if="scope.row.confirm == '0'" link type="primary" size="small" v-hasRoles="['wuliu']"> 确认订单 </el-button>
|
||||
</template>
|
||||
</el-popconfirm>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
@ -22,9 +22,9 @@
|
||||
<el-form-item label="报价生效日期" prop="quoteDate">
|
||||
<el-date-picker clearable v-model="queryParams.quoteDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择报价生效日期" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-input v-model="queryParams.unit" placeholder="请输入单位" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="单位" prop="unit">-->
|
||||
<!-- <el-input v-model="queryParams.unit" 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>
|
||||
@ -182,9 +182,9 @@
|
||||
<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-item label="单位" prop="unit">-->
|
||||
<!-- <el-input v-model="form.unit" placeholder="请输入单位" />-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
|
@ -122,9 +122,9 @@
|
||||
<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-item label="单位" prop="unit">-->
|
||||
<!-- <el-input v-model="form.unit" placeholder="请输入单位" />-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
|
@ -4,161 +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="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 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.storeName" 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>
|
||||
@ -171,22 +28,22 @@
|
||||
<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>
|
||||
<!-- <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>
|
||||
@ -212,7 +69,7 @@
|
||||
<!-- <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="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" />
|
||||
@ -248,6 +105,11 @@
|
||||
<!-- <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="createTime" width="180">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="下单时间" align="center" prop="orderTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.orderTime, '{y}-{m}-{d}') }}</span>
|
||||
@ -268,13 +130,17 @@
|
||||
<!-- </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 v-hasRoles="['superadmin', 'gengdan']" label="采购单状态" align="center" prop="status">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="purchase_order_status" :value="scope.row.status" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <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="totalPrice" />
|
||||
<!-- <el-table-column label="币种符号" align="center" prop="icon" />-->
|
||||
<!-- <el-table-column label="付款状态" align="center" prop="payStatus" />-->
|
||||
|
||||
@ -290,7 +156,7 @@
|
||||
<!-- <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="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" />-->
|
||||
@ -298,18 +164,18 @@
|
||||
<!-- <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="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="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">
|
||||
@ -317,7 +183,16 @@
|
||||
<!-- <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>
|
||||
<el-button
|
||||
size="small"
|
||||
link
|
||||
type="primary"
|
||||
@click="handleConfirm(scope.row)"
|
||||
v-hasRoles="['gongying']"
|
||||
v-hasPermi="['amz:purchaseOrder:remove']"
|
||||
>
|
||||
确认
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@ -484,9 +359,9 @@
|
||||
</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-item label="订单交付变动天数" prop="dlvTimeVar">-->
|
||||
<!-- <el-input v-model="form.dlvTimeVar" placeholder="请输入订单交付变动天数" />-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
@ -499,12 +374,21 @@
|
||||
</template>
|
||||
|
||||
<script setup name="PurchaseOrder" lang="ts">
|
||||
import { listPurchaseOrder, getPurchaseOrder, delPurchaseOrder, addPurchaseOrder, updatePurchaseOrder } from '@/api/amz/purchaseOrder';
|
||||
import {
|
||||
listPurchaseOrder,
|
||||
getPurchaseOrder,
|
||||
delPurchaseOrder,
|
||||
addPurchaseOrder,
|
||||
updatePurchaseOrder,
|
||||
confirmPurchaseOrder
|
||||
} 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 { purchase_order_status } = toRefs<any>(proxy?.useDict('purchase_order_status'));
|
||||
|
||||
const purchaseOrderList = ref<PurchaseOrderVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
@ -625,9 +509,10 @@ const data = reactive<PageData<PurchaseOrderForm, PurchaseOrderQuery>>({
|
||||
settlementDescription: undefined,
|
||||
paymentMethod: undefined,
|
||||
estDlvDays: undefined,
|
||||
orderStatus: 'ord_unconfirmed',
|
||||
orderStatus: ['ord_unconfirmed'],
|
||||
deliveryTime: undefined,
|
||||
dlvTimeVar: undefined,
|
||||
storeName: undefined,
|
||||
params: {}
|
||||
},
|
||||
rules: {
|
||||
@ -701,7 +586,11 @@ const { queryParams, form, rules } = toRefs(data);
|
||||
/** 查询采购单主列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listPurchaseOrder(queryParams.value);
|
||||
const copyParams = JSON.parse(JSON.stringify(queryParams.value)); // 仅适用简单数据类型[1,2](@ref)
|
||||
if (Array.isArray(copyParams.orderStatus)) {
|
||||
copyParams.orderStatus = copyParams.orderStatus.join(','); // 数组转字符串[6,7](@ref)
|
||||
}
|
||||
const res = await listPurchaseOrder(copyParams);
|
||||
purchaseOrderList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
@ -767,8 +656,8 @@ const handleAdd = () => {
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: PurchaseOrderVO) => {
|
||||
reset();
|
||||
const _orderSn = row?.orderSn || ids.value[0];
|
||||
const res = await getPurchaseOrder(_orderSn);
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getPurchaseOrder(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改采购单主';
|
||||
@ -783,8 +672,8 @@ const handleConfirm = async (row?: PurchaseOrderVO) => {
|
||||
// dialog.title = '修改采购单主';
|
||||
console.log('row', row);
|
||||
reset();
|
||||
const _orderSn = row?.orderSn || ids.value[0];
|
||||
const res = await getPurchaseOrder(_orderSn);
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getPurchaseOrder(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
form.value.orderStatus = 'ord_confirmed';
|
||||
dialog.visible = true;
|
||||
@ -798,7 +687,7 @@ const submitForm = () => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.orderSn) {
|
||||
await updatePurchaseOrder(form.value).finally(() => (buttonLoading.value = false));
|
||||
await confirmPurchaseOrder(form.value).finally(() => (buttonLoading.value = false));
|
||||
} else {
|
||||
await addPurchaseOrder(form.value).finally(() => (buttonLoading.value = false));
|
||||
}
|
||||
@ -836,7 +725,7 @@ onMounted(() => {
|
||||
<style scoped>
|
||||
/* 展开行容器 */
|
||||
:deep(.el-table__expanded-cell) {
|
||||
background: #ebf3ff !important;
|
||||
background: #f5fbfd !important;
|
||||
padding: 0 !important;
|
||||
border-bottom: none !important;
|
||||
}
|
||||
@ -844,7 +733,7 @@ onMounted(() => {
|
||||
/* 内嵌表格容器 */
|
||||
:deep(.el-table__expanded-cell) .el-table {
|
||||
--el-table-bg-color: #ebf3ff !important;
|
||||
--el-table-tr-bg-color: #ebf3ff !important;
|
||||
--el-table-tr-bg-color: #f5fbfd !important;
|
||||
--el-table-header-bg-color: #cfe2ff !important; /* 表头变量 */
|
||||
--el-table-header-text-color: #2c3e50 !important; /* 新增文字颜色 */
|
||||
}
|
||||
@ -879,7 +768,7 @@ onMounted(() => {
|
||||
|
||||
/* 内嵌表格hover效果 */
|
||||
:deep(.el-table__expanded-cell) .el-table__body tr:hover > td {
|
||||
background-color: #d3e3ff !important;
|
||||
background-color: #ffffff !important;
|
||||
}
|
||||
|
||||
/* 表头hover状态 */
|
||||
|
File diff suppressed because it is too large
Load Diff
551
src/views/amz/purchaseOrderItem/index.vue
Normal file
551
src/views/amz/purchaseOrderItem/index.vue
Normal file
@ -0,0 +1,551 @@
|
||||
<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="仓库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="planSn">
|
||||
<el-input v-model="queryParams.planSn" placeholder="请输入采购计划号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="本地产品ID" prop="productId">
|
||||
<el-input v-model="queryParams.productId" placeholder="请输入本地产品ID" 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="SKU" prop="sku">
|
||||
<el-input v-model="queryParams.sku" placeholder="请输入SKU" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="FNSKU" prop="fnsku">
|
||||
<el-input v-model="queryParams.fnsku" placeholder="请输入FNSKU" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="店铺ID" prop="sid">
|
||||
<el-input v-model="queryParams.sid" placeholder="请输入店铺ID" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="型号" prop="model">
|
||||
<el-input v-model="queryParams.model" placeholder="请输入型号" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="含税单价" prop="price">
|
||||
<el-input v-model="queryParams.price" placeholder="请输入含税单价" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="价税合计" prop="amount">
|
||||
<el-input v-model="queryParams.amount" placeholder="请输入价税合计" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="计划采购量" prop="quantityPlan">
|
||||
<el-input v-model="queryParams.quantityPlan" 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="quantityEntry">
|
||||
<el-input v-model="queryParams.quantityEntry" 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="退货数" prop="quantityReturn">
|
||||
<el-input v-model="queryParams.quantityReturn" placeholder="请输入退货数" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="换货量" prop="quantityExchange">
|
||||
<el-input v-model="queryParams.quantityExchange" placeholder="请输入换货量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="质检量" prop="quantityQc">
|
||||
<el-input v-model="queryParams.quantityQc" placeholder="请输入质检量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="待质检量" prop="quantityQcPrepare">
|
||||
<el-input v-model="queryParams.quantityQcPrepare" placeholder="请输入待质检量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="期待到货时间" prop="expectArriveTime">
|
||||
<el-date-picker clearable
|
||||
v-model="queryParams.expectArriveTime"
|
||||
type="date"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="请选择期待到货时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="箱数" prop="casesNum">
|
||||
<el-input v-model="queryParams.casesNum" placeholder="请输入箱数" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单箱数量" prop="quantityPerCase">
|
||||
<el-input v-model="queryParams.quantityPerCase" placeholder="请输入单箱数量" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否删除:0 否,1 是" prop="isDelete">
|
||||
<el-input v-model="queryParams.isDelete" placeholder="请输入是否删除:0 否,1 是" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="税率" prop="taxRate">
|
||||
<el-input v-model="queryParams.taxRate" placeholder="请输入税率" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="SPU" prop="spu">
|
||||
<el-input v-model="queryParams.spu" placeholder="请输入SPU" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="款名" prop="spuName">
|
||||
<el-input v-model="queryParams.spuName" 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:purchaseOrderItem:add']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['amz:purchaseOrderItem:edit']">修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['amz:purchaseOrderItem:remove']">删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['amz:purchaseOrderItem:export']">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-table v-loading="loading" :data="purchaseOrderItemList" @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="仓库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" />
|
||||
<el-table-column label="FNSKU" align="center" prop="fnsku" />
|
||||
<el-table-column label="店铺ID" align="center" prop="sid" />
|
||||
<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" />
|
||||
<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-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:purchaseOrderItem:edit']"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['amz:purchaseOrderItem: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="purchaseOrderItemFormRef" :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="关联采购单号" prop="orderSn">
|
||||
<el-input v-model="form.orderSn" 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="planSn">
|
||||
<el-input v-model="form.planSn" placeholder="请输入采购计划号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="本地产品ID" prop="productId">
|
||||
<el-input v-model="form.productId" placeholder="请输入本地产品ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="品名" prop="productName">
|
||||
<el-input v-model="form.productName" placeholder="请输入品名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="SKU" prop="sku">
|
||||
<el-input v-model="form.sku" placeholder="请输入SKU" />
|
||||
</el-form-item>
|
||||
<el-form-item label="FNSKU" prop="fnsku">
|
||||
<el-input v-model="form.fnsku" placeholder="请输入FNSKU" />
|
||||
</el-form-item>
|
||||
<el-form-item label="店铺ID" prop="sid">
|
||||
<el-input v-model="form.sid" placeholder="请输入店铺ID" />
|
||||
</el-form-item>
|
||||
<el-form-item label="型号" prop="model">
|
||||
<el-input v-model="form.model" 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="amount">
|
||||
<el-input v-model="form.amount" placeholder="请输入价税合计" />
|
||||
</el-form-item>
|
||||
<el-form-item label="计划采购量" prop="quantityPlan">
|
||||
<el-input v-model="form.quantityPlan" 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="quantityEntry">
|
||||
<el-input v-model="form.quantityEntry" placeholder="请输入到货入库量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="待到货量" prop="quantityReceive">
|
||||
<el-input v-model="form.quantityReceive" placeholder="请输入待到货量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="退货数" prop="quantityReturn">
|
||||
<el-input v-model="form.quantityReturn" placeholder="请输入退货数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="换货量" prop="quantityExchange">
|
||||
<el-input v-model="form.quantityExchange" placeholder="请输入换货量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="质检量" prop="quantityQc">
|
||||
<el-input v-model="form.quantityQc" placeholder="请输入质检量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="待质检量" prop="quantityQcPrepare">
|
||||
<el-input v-model="form.quantityQcPrepare" placeholder="请输入待质检量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="期待到货时间" prop="expectArriveTime">
|
||||
<el-date-picker clearable
|
||||
v-model="form.expectArriveTime"
|
||||
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" type="textarea" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
<el-form-item label="箱数" prop="casesNum">
|
||||
<el-input v-model="form.casesNum" placeholder="请输入箱数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单箱数量" prop="quantityPerCase">
|
||||
<el-input v-model="form.quantityPerCase" placeholder="请输入单箱数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否删除:0 否,1 是" prop="isDelete">
|
||||
<el-input v-model="form.isDelete" placeholder="请输入是否删除:0 否,1 是" />
|
||||
</el-form-item>
|
||||
<el-form-item label="税率" prop="taxRate">
|
||||
<el-input v-model="form.taxRate" placeholder="请输入税率" />
|
||||
</el-form-item>
|
||||
<el-form-item label="SPU" prop="spu">
|
||||
<el-input v-model="form.spu" placeholder="请输入SPU" />
|
||||
</el-form-item>
|
||||
<el-form-item label="款名" prop="spuName">
|
||||
<el-input v-model="form.spuName" 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="PurchaseOrderItem" lang="ts">
|
||||
import { listPurchaseOrderItem, getPurchaseOrderItem, delPurchaseOrderItem, addPurchaseOrderItem, updatePurchaseOrderItem } from '@/api/amz/purchaseOrderItem';
|
||||
import { PurchaseOrderItemVO, PurchaseOrderItemQuery, PurchaseOrderItemForm } from '@/api/amz/purchaseOrderItem/types';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
|
||||
const purchaseOrderItemList = ref<PurchaseOrderItemVO[]>([]);
|
||||
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 purchaseOrderItemFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const initFormData: PurchaseOrderItemForm = {
|
||||
id: undefined,
|
||||
orderSn: undefined,
|
||||
wid: undefined,
|
||||
wareHouseName: undefined,
|
||||
planSn: undefined,
|
||||
productId: undefined,
|
||||
productName: undefined,
|
||||
sku: undefined,
|
||||
fnsku: undefined,
|
||||
sid: undefined,
|
||||
model: undefined,
|
||||
price: undefined,
|
||||
amount: undefined,
|
||||
quantityPlan: undefined,
|
||||
quantityReal: undefined,
|
||||
quantityEntry: undefined,
|
||||
quantityReceive: undefined,
|
||||
quantityReturn: undefined,
|
||||
quantityExchange: undefined,
|
||||
quantityQc: undefined,
|
||||
quantityQcPrepare: undefined,
|
||||
expectArriveTime: undefined,
|
||||
remark: undefined,
|
||||
casesNum: undefined,
|
||||
quantityPerCase: undefined,
|
||||
isDelete: undefined,
|
||||
taxRate: undefined,
|
||||
spu: undefined,
|
||||
spuName: undefined,
|
||||
}
|
||||
const data = reactive<PageData<PurchaseOrderItemForm, PurchaseOrderItemQuery>>({
|
||||
form: {...initFormData},
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
orderSn: undefined,
|
||||
wid: undefined,
|
||||
wareHouseName: undefined,
|
||||
planSn: undefined,
|
||||
productId: undefined,
|
||||
productName: undefined,
|
||||
sku: undefined,
|
||||
fnsku: undefined,
|
||||
sid: undefined,
|
||||
model: undefined,
|
||||
price: undefined,
|
||||
amount: undefined,
|
||||
quantityPlan: undefined,
|
||||
quantityReal: undefined,
|
||||
quantityEntry: undefined,
|
||||
quantityReceive: undefined,
|
||||
quantityReturn: undefined,
|
||||
quantityExchange: undefined,
|
||||
quantityQc: undefined,
|
||||
quantityQcPrepare: undefined,
|
||||
expectArriveTime: undefined,
|
||||
casesNum: undefined,
|
||||
quantityPerCase: undefined,
|
||||
isDelete: undefined,
|
||||
taxRate: undefined,
|
||||
spu: undefined,
|
||||
spuName: undefined,
|
||||
params: {
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
id: [
|
||||
{ required: true, message: "采购单子项ID不能为空", trigger: "blur" }
|
||||
],
|
||||
orderSn: [
|
||||
{ required: true, message: "关联采购单号不能为空", trigger: "blur" }
|
||||
],
|
||||
wid: [
|
||||
{ required: true, message: "仓库ID不能为空", trigger: "blur" }
|
||||
],
|
||||
wareHouseName: [
|
||||
{ required: true, message: "仓库名称不能为空", trigger: "blur" }
|
||||
],
|
||||
planSn: [
|
||||
{ required: true, message: "采购计划号不能为空", trigger: "blur" }
|
||||
],
|
||||
productId: [
|
||||
{ required: true, message: "本地产品ID不能为空", trigger: "blur" }
|
||||
],
|
||||
productName: [
|
||||
{ required: true, message: "品名不能为空", trigger: "blur" }
|
||||
],
|
||||
sku: [
|
||||
{ required: true, message: "SKU不能为空", trigger: "blur" }
|
||||
],
|
||||
fnsku: [
|
||||
{ required: true, message: "FNSKU不能为空", trigger: "blur" }
|
||||
],
|
||||
sid: [
|
||||
{ required: true, message: "店铺ID不能为空", trigger: "blur" }
|
||||
],
|
||||
model: [
|
||||
{ required: true, message: "型号不能为空", trigger: "blur" }
|
||||
],
|
||||
price: [
|
||||
{ required: true, message: "含税单价不能为空", trigger: "blur" }
|
||||
],
|
||||
amount: [
|
||||
{ required: true, message: "价税合计不能为空", trigger: "blur" }
|
||||
],
|
||||
quantityPlan: [
|
||||
{ required: true, message: "计划采购量不能为空", trigger: "blur" }
|
||||
],
|
||||
quantityReal: [
|
||||
{ required: true, message: "实际采购量不能为空", trigger: "blur" }
|
||||
],
|
||||
quantityEntry: [
|
||||
{ required: true, message: "到货入库量不能为空", trigger: "blur" }
|
||||
],
|
||||
quantityReceive: [
|
||||
{ required: true, message: "待到货量不能为空", trigger: "blur" }
|
||||
],
|
||||
quantityReturn: [
|
||||
{ required: true, message: "退货数不能为空", trigger: "blur" }
|
||||
],
|
||||
quantityExchange: [
|
||||
{ required: true, message: "换货量不能为空", trigger: "blur" }
|
||||
],
|
||||
quantityQc: [
|
||||
{ required: true, message: "质检量不能为空", trigger: "blur" }
|
||||
],
|
||||
quantityQcPrepare: [
|
||||
{ required: true, message: "待质检量不能为空", trigger: "blur" }
|
||||
],
|
||||
expectArriveTime: [
|
||||
{ required: true, message: "期待到货时间不能为空", trigger: "blur" }
|
||||
],
|
||||
remark: [
|
||||
{ required: true, message: "备注不能为空", trigger: "blur" }
|
||||
],
|
||||
casesNum: [
|
||||
{ required: true, message: "箱数不能为空", trigger: "blur" }
|
||||
],
|
||||
quantityPerCase: [
|
||||
{ required: true, message: "单箱数量不能为空", trigger: "blur" }
|
||||
],
|
||||
isDelete: [
|
||||
{ required: true, message: "是否删除:0 否,1 是不能为空", trigger: "blur" }
|
||||
],
|
||||
taxRate: [
|
||||
{ required: true, message: "税率不能为空", trigger: "blur" }
|
||||
],
|
||||
spu: [
|
||||
{ required: true, message: "SPU不能为空", trigger: "blur" }
|
||||
],
|
||||
spuName: [
|
||||
{ required: true, message: "款名不能为空", trigger: "blur" }
|
||||
],
|
||||
}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
/** 查询供应商订单产品明细列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listPurchaseOrderItem(queryParams.value);
|
||||
purchaseOrderItemList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
}
|
||||
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = {...initFormData};
|
||||
purchaseOrderItemFormRef.value?.resetFields();
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
}
|
||||
|
||||
/** 多选框选中数据 */
|
||||
const handleSelectionChange = (selection: PurchaseOrderItemVO[]) => {
|
||||
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?: PurchaseOrderItemVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0]
|
||||
const res = await getPurchaseOrderItem(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = "修改供应商订单产品明细";
|
||||
}
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
purchaseOrderItemFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.id) {
|
||||
await updatePurchaseOrderItem(form.value).finally(() => buttonLoading.value = false);
|
||||
} else {
|
||||
await addPurchaseOrderItem(form.value).finally(() => buttonLoading.value = false);
|
||||
}
|
||||
proxy?.$modal.msgSuccess("操作成功");
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: PurchaseOrderItemVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除供应商订单产品明细编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
|
||||
await delPurchaseOrderItem(_ids);
|
||||
proxy?.$modal.msgSuccess("删除成功");
|
||||
await getList();
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = () => {
|
||||
proxy?.download('amz/purchaseOrderItem/export', {
|
||||
...queryParams.value
|
||||
}, `purchaseOrderItem_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getList();
|
||||
});
|
||||
</script>
|
941
src/views/amz/purchaseOrderQuery/index.vue
Normal file
941
src/views/amz/purchaseOrderQuery/index.vue
Normal file
@ -0,0 +1,941 @@
|
||||
<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.storeName" placeholder="请输入店铺名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="订单状态" prop="orderStatus">
|
||||
<el-select multiple collapse-tags collapse-tags-tooltip 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="supplierName">
|
||||
<el-input v-model="queryParams.supplierName" placeholder="请输入供应商名称" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="SKU" prop="customOrderSn">
|
||||
<el-input v-model="queryParams.sku" placeholder="请输入sku" 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" width="70px" />
|
||||
<!-- <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" width="200px" />
|
||||
<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="90px" />
|
||||
|
||||
<!-- <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="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="casesNum">
|
||||
<template #default="scope">
|
||||
<el-timeline style="max-width: 600px; margin-top: 25px">
|
||||
<el-timeline-item
|
||||
v-for="(activity, index) in scope.row.sysStatusHistories"
|
||||
:key="index"
|
||||
:type="'success'"
|
||||
:timestamp="activity.originalChangedAt"
|
||||
>
|
||||
<dict-tag :options="vendor_order_status" :value="activity.newStatus" />
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <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-column label="操作" align="center" class-name="small-padding fixed-width" v-hasRoles="['superadmin', 'gengdan']">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <el-button-->
|
||||
<!-- size="small"-->
|
||||
<!-- link-->
|
||||
<!-- type="primary"-->
|
||||
<!-- @click="handleForward(scope.row, props.row)"-->
|
||||
<!-- v-hasPermi="['amz:purchaseOrder:remove']"-->
|
||||
<!-- >-->
|
||||
<!-- 货件转发-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
</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 width="150" label="转发详情" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button link type="primary" size="small" @click="openDetailDialog(row.forwardList)"> 查看详情</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <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="quantityReal" />
|
||||
<el-table-column label="剩余未交货" align="center" prop="remainingQuantity" width="90px" />
|
||||
<el-table-column label="采购单是否延期" align="center" prop="divTime" width="280px">
|
||||
<template #default="scope">
|
||||
<el-tag type="success" v-if="scope.row.divTime == null">采购单未延期</el-tag>
|
||||
<el-tag type="danger" v-else>已延期至:{{ parseTime(scope.row.divTime, '{y}-{m}-{d}') }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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" v-hasRoles="['superadmin', 'gengdan']">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- <el-tooltip content="修改" placement="top" v-hasRoles="['superadmin', 'gengdan']">-->
|
||||
<!-- <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="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="orderStatus">-->
|
||||
<!-- <el-select v-model="form.orderStatus" placeholder="请选择订单状态">-->
|
||||
<!-- <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="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>
|
||||
<el-dialog :title="forwardDialog.title" v-model="forwardDialog.visible" width="800px" append-to-body>
|
||||
<el-form ref="shipForwardFormRef" :model="forwardForm" :rules="rules2" label-width="100px">
|
||||
<el-form-item label="采购单号" prop="orderSn">
|
||||
<el-input v-model="forwardForm.orderSn" placeholder="请输入采购单号" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="店铺名称" prop="storeName">
|
||||
<el-input v-model="forwardForm.storeName" placeholder="请输入采购店铺名称" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="SKU" prop="sku">
|
||||
<el-input v-model="forwardForm.sku" placeholder="请输入产品唯一标识码" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品全称" prop="productName">
|
||||
<el-input v-model="forwardForm.productName" placeholder="请输入产品全称" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货数量" prop="quantitySend">
|
||||
<!-- <el-input v-model="forwardForm.quantitySend" placeholder="请输入实际发货数量" />-->
|
||||
<el-input-number v-model="forwardForm.quantitySend" :min="1" :max="maxQuality">
|
||||
<template #suffix>
|
||||
<span>个</span>
|
||||
</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="发货方" prop="outSupplierName">
|
||||
<el-input v-model="forwardForm.outSupplierName" placeholder="请输入发货供应商名称" disabled />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="发货方ID" prop="outSupplierId">-->
|
||||
<!-- <el-input v-model="forwardForm.outSupplierId" placeholder="请输入发货供应商系统ID" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="收货方" prop="inSupplierName">
|
||||
<!-- <el-input v-model="forwardForm.inSupplierName" placeholder="请输入收货供应商名称" />-->
|
||||
<el-select v-model="selectUser" placeholder="请选择供应商" @change="selectAction">
|
||||
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.rawData" :disabled="item.disabled">
|
||||
<!-- 自定义选项内容 -->
|
||||
<span>{{ item.label }}</span>
|
||||
<span style="float: right; color: #8492a6; font-size: 13px">
|
||||
{{ item.rawData.userName }}
|
||||
</span>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="收货方ID" prop="inSupplierId">-->
|
||||
<!-- <el-input v-model="forwardForm.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="forwardForm.trackerName" placeholder="请输入跟单人" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="跟单id" prop="trackerId">-->
|
||||
<!-- <el-input v-model="forwardForm.trackerId" placeholder="请输入跟单id" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="发货时间" prop="sendTime">-->
|
||||
<!-- <el-date-picker clearable v-model="forwardForm.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="forwardSubmitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :title="forwardTableDialog.title" v-model="forwardTableDialog.visible" width="1800px" append-to-body>
|
||||
<el-table :data="shipForwardList">
|
||||
<!-- <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>
|
||||
<!-- <template #footer>-->
|
||||
<!-- <div class="dialog-footer">-->
|
||||
<!-- <el-button :loading="buttonLoading" type="primary" @click="forwardSubmitForm">确 定</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';
|
||||
import { ShipForwardForm, ShipForwardVO } from '@/api/amz/shipForward/types';
|
||||
import { addShipForward, updateShipForward } from '@/api/amz/shipForward';
|
||||
import { roleSelectPost } from '@/api/system/user';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { vendor_order_status } = toRefs<any>(proxy?.useDict('vendor_order_status'));
|
||||
const { forward_status } = toRefs<any>(proxy?.useDict('forward_status'));
|
||||
|
||||
const purchaseOrderList = ref<PurchaseOrderVO[]>([]);
|
||||
const shipForwardList = ref<ShipForwardVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
const forwardDataLoading = 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 maxQuality = ref(0);
|
||||
const shipForwardFormRef = ref<ElFormInstance>();
|
||||
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const purchaseOrderFormRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
const forwardDialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const forwardTableDialog = 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: undefined,
|
||||
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' }]
|
||||
},
|
||||
rules2: {
|
||||
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, rules2 } = toRefs(data);
|
||||
|
||||
const forwardForm = ref<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 intervalDate = ref<any>();
|
||||
|
||||
const intervalAction = () => {
|
||||
console.log('intervalDate', intervalDate);
|
||||
forwardForm.value.shipmentStart = getDateToString(intervalDate.value[0]);
|
||||
forwardForm.value.shipmentEnd = getDateToString(intervalDate.value[1]);
|
||||
};
|
||||
|
||||
const selectUser = ref<any>();
|
||||
const selectAction = () => {
|
||||
console.log('selectUser', selectUser);
|
||||
|
||||
forwardForm.value.inSupplierId = selectUser.value.userId;
|
||||
forwardForm.value.inSupplierName = selectUser.value.nickName;
|
||||
selectUser.value = selectUser.value.nickName;
|
||||
};
|
||||
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 getList = async () => {
|
||||
loading.value = true;
|
||||
const copyParams = JSON.parse(JSON.stringify(queryParams.value)); // 仅适用简单数据类型[1,2](@ref)
|
||||
if (Array.isArray(copyParams.orderStatus)) {
|
||||
copyParams.orderStatus = copyParams.orderStatus.join(','); // 数组转字符串[6,7](@ref)
|
||||
}
|
||||
const res = await listPurchaseOrder(copyParams);
|
||||
purchaseOrderList.value = res.rows;
|
||||
purchaseOrderList.value.map((item) => {
|
||||
if (item.forwardList) {
|
||||
item.remainingQuantity = item.quantityReal - item.forwardList.reduce((sum, item) => sum + item.quantitySend, 0);
|
||||
} else {
|
||||
item.remainingQuantity = item.quantityReal;
|
||||
}
|
||||
});
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
};
|
||||
const options = ref([]);
|
||||
|
||||
const roleSelectAction = async () => {
|
||||
const res = await roleSelectPost([5]);
|
||||
console.log('res', res);
|
||||
|
||||
options.value = res.data.map((user) => ({
|
||||
value: user.userId, // 选项值对应 userId
|
||||
label: user.nickName || '', // 显示文本用 nickName
|
||||
rawData: user // 保留原始数据(按需)
|
||||
}));
|
||||
};
|
||||
|
||||
const openDetailDialog = (detail) => {
|
||||
shipForwardList.value = detail;
|
||||
forwardTableDialog.visible = true;
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
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 = '修改采购单主';
|
||||
|
||||
// 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
|
||||
|
||||
console.log('row', row);
|
||||
};
|
||||
//row 明细数据
|
||||
const handleForward = async (row?, rowM?) => {
|
||||
// reset();
|
||||
// const _orderSn = row?.orderSn || ids.value[0];
|
||||
// const res = await getPurchaseOrder(_orderSn);
|
||||
// Object.assign(form.value, res.data);
|
||||
// dialog.visible = true;
|
||||
// dialog.title = '修改采购单主';
|
||||
roleSelectAction();
|
||||
|
||||
forwardForm.value.orderSn = row?.orderSn;
|
||||
forwardForm.value.storeName = rowM?.storeName;
|
||||
forwardForm.value.sku = row?.sku;
|
||||
forwardForm.value.productName = row?.productName;
|
||||
forwardForm.value.quantitySend = row?.quantitySend;
|
||||
forwardForm.value.outSupplierName = rowM?.supplierName;
|
||||
forwardForm.value.outSupplierId = rowM?.supplierId;
|
||||
forwardForm.value.orderDetailId = row?.id;
|
||||
|
||||
// forwardForm.value.inSupplierName = row?.inSupplierName;
|
||||
// forwardForm.value.inSupplierId = row?.inSupplierId;
|
||||
// forwardForm.value.shipmentStart = row?.shipmentStart;
|
||||
// forwardForm.value.shipmentEnd = row?.shipmentEnd;
|
||||
// forwardForm.value.trackerName = row?.trackerName;
|
||||
// forwardForm.value.trackerId = row?.trackerId;
|
||||
// forwardForm.value.fwdStatus = row?.fwdStatus;
|
||||
// forwardForm.value.sendTime = row?.sendTime;
|
||||
maxQuality.value = row?.quantityReal;
|
||||
console.log('maxQuality', maxQuality.value);
|
||||
console.log('row', row);
|
||||
console.log('rowM', rowM);
|
||||
|
||||
forwardDialog.visible = true;
|
||||
forwardDialog.title = '添加转发数据';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
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 forwardSubmitForm = () => {
|
||||
if (forwardForm.value.inSupplierName === forwardForm.value.outSupplierName) {
|
||||
proxy?.$modal.msgError('请不要选择相同的供应商');
|
||||
return;
|
||||
}
|
||||
shipForwardFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (forwardForm.value.id) {
|
||||
await updateShipForward(forwardForm.value).finally(() => (buttonLoading.value = false));
|
||||
} else {
|
||||
await addShipForward(forwardForm.value).finally(() => (buttonLoading.value = false));
|
||||
}
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
forwardDialog.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: #f5fbfd !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: #f5fbfd !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: #ffffff !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>
|
@ -16,21 +16,6 @@
|
||||
<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>
|
||||
@ -54,40 +39,68 @@
|
||||
<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>
|
||||
<!-- <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 type="selection" width="55" align="center" />-->
|
||||
<el-table-column label="发货单号" align="center" prop="id" />
|
||||
<el-table-column label="采购单号" align="center" prop="orderSn" />
|
||||
<el-table-column label="创建日期" align="center" prop="createTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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="sendName" />
|
||||
<el-table-column label="物流商名称" align="center" prop="logisticsProviderName">
|
||||
<template #default="{ row }">
|
||||
<el-popover placement="top" title="物流商地址" :width="200" trigger="click">
|
||||
<template #reference>
|
||||
<el-button v-if="row.logisticsProviderName !== null" text size="small" type="primary">
|
||||
{{ row.logisticsProviderName }}
|
||||
</el-button>
|
||||
</template>
|
||||
<div>{{ row.address || '暂无地址' }}</div>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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="quantityPerBox" />-->
|
||||
<el-table-column label="箱数" align="center" prop="boxCount">
|
||||
<template #default="{ row }">
|
||||
<el-popover placement="top" title="装箱明细" :width="350" trigger="click">
|
||||
<template #reference>
|
||||
<el-button text size="small" type="primary"> {{ row.boxCount }}箱</el-button>
|
||||
</template>
|
||||
<div v-if="row.sendDetail !== null" v-html="formatText(row.sendDetail)"></div>
|
||||
<div v-else>暂无数据</div>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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="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" />
|
||||
@ -95,7 +108,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-tooltip content="修改" placement="top" v-if="scope.row.sendStatus === 'pending'">
|
||||
<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">
|
||||
@ -108,7 +121,7 @@
|
||||
<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-dialog :title="dialog.title" v-model="dialog.visible" width="1000px" 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" />-->
|
||||
@ -116,43 +129,82 @@
|
||||
<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="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-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 label="总箱数" prop="boxCount">
|
||||
<el-input v-model="form.boxCount" placeholder="请输入总箱数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="箱数" prop="boxCount">
|
||||
<el-input v-model="form.boxCount" placeholder="请输入箱数" />
|
||||
<el-form-item v-if="form.quantitySend > 0 && form.boxCount > 0" label="箱子明细" prop="quantityPerBox">
|
||||
<div class="max-w-800px">
|
||||
<div v-for="(group, index) in groups" :key="index" class="flex gap-12px mb-16px items-center">
|
||||
<el-input
|
||||
v-model.number="groups[index].boxCount"
|
||||
placeholder="箱子数量"
|
||||
type="number"
|
||||
min="0"
|
||||
class="flex-1"
|
||||
@input="validateInput(index, 'boxCount')"
|
||||
/>
|
||||
X
|
||||
<el-input
|
||||
v-model.number="groups[index].itemCount"
|
||||
placeholder="每箱个数"
|
||||
type="number"
|
||||
min="0"
|
||||
class="flex-1"
|
||||
@input="validateInput(index, 'itemCount')"
|
||||
/>
|
||||
<el-input v-model.number="groups[index].lengthPerBox" placeholder="长(cm)" type="number" min="0" class="flex-1" />
|
||||
<el-input v-model.number="groups[index].widthPerBox" placeholder="宽(cm)" type="number" min="0" class="flex-1" />
|
||||
<el-input v-model.number="groups[index].heightPerBox" placeholder="高(cm)" type="number" min="0" class="flex-1" />
|
||||
<el-input v-model.number="groups[index].weightPerBox" placeholder="单箱重量(kg)" type="number" min="0" class="flex-1" />
|
||||
<el-button v-if="index > 0" @click="removeGroup(index)" type="danger" :icon="Close" circle size="small" />
|
||||
<div v-else class="w-8 h-8"></div>
|
||||
</div>
|
||||
|
||||
<div class="mb-16px text-left">
|
||||
<span :class="['mr-8px', Number(totalNum) === Number(shipForm.quantitySend) ? 'text-green-500' : 'text-red-500']">
|
||||
当前总量:{{ totalNum }}/{{ form.quantitySend }}
|
||||
</span>
|
||||
<el-button @click="addGroup" type="primary" :icon="Plus" :disabled="totalNum >= form.quantitySend"> 添加一组 </el-button>
|
||||
</div>
|
||||
</div>
|
||||
</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 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="totalWeight" placeholder="请输入总重量" disabled />-->
|
||||
<el-input-number v-model="totalWeight" :min="0" :max="100000" disabled>
|
||||
<template #suffix>
|
||||
<span>kg</span>
|
||||
</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="实际采购店铺" prop="realStoreName">-->
|
||||
<!-- <el-input v-model="form.realStoreName" placeholder="请输入实际采购店铺" />-->
|
||||
@ -165,7 +217,7 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">提 交</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
@ -177,6 +229,7 @@
|
||||
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';
|
||||
import { Close, Plus } from '@element-plus/icons-vue';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { send_status } = toRefs<any>(proxy?.useDict('send_status'));
|
||||
@ -207,13 +260,14 @@ const initFormData: SendOrderForm = {
|
||||
sendDate: undefined,
|
||||
storeName: undefined,
|
||||
productName: undefined,
|
||||
quantitySend: undefined,
|
||||
quantitySend: 0,
|
||||
quantityPerBox: undefined,
|
||||
boxCount: undefined,
|
||||
boxDimensions: undefined,
|
||||
weightPerBox: undefined,
|
||||
realStoreName: undefined,
|
||||
sendStatus: undefined
|
||||
sendStatus: undefined,
|
||||
sendDetail: undefined
|
||||
};
|
||||
const data = reactive<PageData<SendOrderForm, SendOrderQuery>>({
|
||||
form: { ...initFormData },
|
||||
@ -235,19 +289,22 @@ const data = reactive<PageData<SendOrderForm, SendOrderQuery>>({
|
||||
},
|
||||
rules: {
|
||||
orderSn: [{ required: true, message: '采购单号不能为空', trigger: 'blur' }],
|
||||
sendDate: [{ 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: [
|
||||
quantityPerBox: [
|
||||
{
|
||||
required: true,
|
||||
message: '长宽高都不能为空',
|
||||
validator: (rule, value, callback) => {
|
||||
if (!plength.value || !pwidth.value || !pheight.value) {
|
||||
callback(new Error('长宽高都不能为空'));
|
||||
if (totalBoxCount.value != form.value.boxCount) {
|
||||
console.log('totalBoxCount.value', totalBoxCount.value);
|
||||
console.log('form.value.boxCount', form.value.boxCount);
|
||||
callback(new Error('明细箱数和总箱数不匹配,请调整'));
|
||||
}
|
||||
// 总量提示
|
||||
if (totalNum.value > form.value.quantitySend) {
|
||||
const exceed = totalNum.value - form.value.quantitySend;
|
||||
callback(new Error('总量超出 ' + exceed + ',请调整'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
@ -255,6 +312,21 @@ const data = reactive<PageData<SendOrderForm, SendOrderQuery>>({
|
||||
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' }]
|
||||
@ -263,6 +335,92 @@ const data = reactive<PageData<SendOrderForm, SendOrderQuery>>({
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
const groups = ref([
|
||||
{
|
||||
boxCount: null,
|
||||
itemCount: null,
|
||||
lengthPerBox: null,
|
||||
widthPerBox: null,
|
||||
heightPerBox: null,
|
||||
weightPerBox: null
|
||||
}
|
||||
]);
|
||||
|
||||
// 计算所有输入值的总和
|
||||
const totalNum = computed(() => {
|
||||
return groups.value.reduce((sum, group) => {
|
||||
const box = Number(group.boxCount) || 0;
|
||||
const item = Number(group.itemCount) || 0;
|
||||
return sum + box * item;
|
||||
}, 0);
|
||||
});
|
||||
|
||||
// 计算所有输入值的总和
|
||||
const totalBoxCount = computed(() => {
|
||||
return groups.value.reduce((sum, group) => {
|
||||
const box = Number(group.boxCount) || 0;
|
||||
return sum + box;
|
||||
}, 0);
|
||||
});
|
||||
|
||||
const totalWeight = computed(() => {
|
||||
return groups.value.reduce((sum, group) => {
|
||||
const box = Number(group.boxCount) || 0;
|
||||
return sum + box * group.weightPerBox;
|
||||
}, 0);
|
||||
});
|
||||
|
||||
// 输入验证
|
||||
const validateInput = (index, field) => {
|
||||
const value = groups.value[index][field];
|
||||
|
||||
// 非数字或负数处理
|
||||
if (isNaN(value) || value < 0) {
|
||||
ElMessage.warning('请输入有效的非负数');
|
||||
groups.value[index][field] = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
// // 总量提示
|
||||
// if (totalNum.value > form.value.quantitySend) {
|
||||
// const exceed = totalNum.value - form.value.quantitySend;
|
||||
// ElMessage.warning(`总量超出 ${exceed},请调整`);
|
||||
// }
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
// 添加新组
|
||||
const addGroup = () => {
|
||||
if (totalNum.value >= form.value.quantitySend) {
|
||||
ElMessage.error(`当前总量已达${form.value.quantitySend},无法继续添加`);
|
||||
return;
|
||||
}
|
||||
|
||||
groups.value.push({
|
||||
boxCount: null,
|
||||
itemCount: null,
|
||||
lengthPerBox: null,
|
||||
widthPerBox: null,
|
||||
heightPerBox: null,
|
||||
weightPerBox: null
|
||||
});
|
||||
};
|
||||
|
||||
const formatText = (text) => {
|
||||
if (text === null) {
|
||||
return '';
|
||||
}
|
||||
return text.replace(/\n/g, '<br>');
|
||||
};
|
||||
|
||||
// 删除组
|
||||
const removeGroup = (index) => {
|
||||
groups.value.splice(index, 1);
|
||||
if (totalNum.value > form.value.quantitySend) {
|
||||
ElMessage.warning('请调整剩余数值使总量不超过100');
|
||||
}
|
||||
};
|
||||
/** 查询供应商创建的发货单列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
@ -301,10 +459,10 @@ const blurAction = async () => {
|
||||
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 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 => {
|
||||
@ -338,7 +496,32 @@ const handleUpdate = async (row?: SendOrderVO) => {
|
||||
|
||||
/** 提交按钮 */
|
||||
const submitForm = () => {
|
||||
form.value.weightPerBox = totalWeight.value;
|
||||
form.value.boxDimensions = `${pwidth.value} x ${pheight.value} x ${plength.value}`;
|
||||
const sendText = groups.value.reduce((sum, group, index) => {
|
||||
return (
|
||||
sum +
|
||||
'规格' +
|
||||
numberToLetter(index) +
|
||||
': ' +
|
||||
group.boxCount +
|
||||
'箱' +
|
||||
group.itemCount +
|
||||
'件,长' +
|
||||
group.lengthPerBox +
|
||||
'cm宽' +
|
||||
group.widthPerBox +
|
||||
'cm高' +
|
||||
group.heightPerBox +
|
||||
'cm,' +
|
||||
'单箱重量' +
|
||||
group.weightPerBox +
|
||||
'kg' +
|
||||
'\n'
|
||||
);
|
||||
}, '');
|
||||
console.log('sendText: ', sendText);
|
||||
form.value.sendDetail = sendText;
|
||||
sendOrderFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
@ -354,6 +537,11 @@ const submitForm = () => {
|
||||
});
|
||||
};
|
||||
|
||||
function numberToLetter(num: number): string {
|
||||
if (num < 0 || num > 25) throw new Error('数字需在 0-25 范围内');
|
||||
return String.fromCharCode(num + 65);
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (row?: SendOrderVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
|
@ -16,21 +16,6 @@
|
||||
<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>
|
||||
@ -51,43 +36,70 @@
|
||||
<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>
|
||||
<!-- <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 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="createTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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="sendName" />
|
||||
<el-table-column label="物流商名称" align="center" prop="logisticsProviderName">
|
||||
<template #default="{ row }">
|
||||
<el-popover placement="top" title="物流商地址" :width="200" trigger="click">
|
||||
<template #reference>
|
||||
<el-button v-if="row.logisticsProviderName" text size="small" type="primary">
|
||||
{{ row.logisticsProviderName }}
|
||||
</el-button>
|
||||
</template>
|
||||
<div>{{ row.address || '暂无地址' }}</div>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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="boxCount">
|
||||
<template #default="{ row }">
|
||||
<el-popover placement="top" title="装箱明细" :width="350" trigger="click">
|
||||
<template #reference>
|
||||
<el-button text size="small" type="primary"> {{ row.boxCount }}箱</el-button>
|
||||
</template>
|
||||
<div v-if="row.sendDetail !== null" v-html="formatText(row.sendDetail)"></div>
|
||||
<div v-else>暂无数据</div>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <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" />
|
||||
@ -95,10 +107,10 @@
|
||||
</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 content="推送" placement="top" v-if="scope.row.sendStatus === 'pending'">
|
||||
<el-button circle icon="Top" @click="handleUpdate(scope.row)" v-hasRoles="['superadmin', 'gengdan']"></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-tooltip content="删除" placement="top" v-hasRoles="['superadmin']">
|
||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['amz:sendOrder:remove']"></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
@ -110,43 +122,46 @@
|
||||
<!-- 添加或修改供应商创建的发货单对话框 -->
|
||||
<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="主键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-input v-model="form.orderSn" placeholder="请输入采购单号" disabled />
|
||||
</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="请选择发货日期" disabled>-->
|
||||
<!-- </el-date-picker>-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="采购店铺" prop="storeName">
|
||||
<el-input v-model="form.storeName" placeholder="请输入采购店铺" />
|
||||
<el-input v-model="form.storeName" placeholder="请输入采购店铺" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品名称" prop="productName">
|
||||
<el-input v-model="form.productName" placeholder="请输入产品名称" />
|
||||
<el-input v-model="form.productName" placeholder="请输入产品名称" disabled />
|
||||
</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-input v-model="form.quantitySend" placeholder="请输入发货数量" disabled />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="单箱产品数量" prop="quantityPerBox">-->
|
||||
<!-- <el-input v-model="form.quantityPerBox" placeholder="请输入单箱产品数量" disabled />-->
|
||||
<!-- </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-input v-model="form.boxCount" placeholder="请输入箱数" disabled />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="箱子尺寸" prop="boxDimensions">-->
|
||||
<!-- <el-input v-model="form.boxDimensions" placeholder="请输入箱子尺寸" disabled />-->
|
||||
<!-- </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-input v-model="form.weightPerBox" placeholder="请输入单箱重量" disabled />
|
||||
</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-option v-for="dict in confirm_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>-->
|
||||
<template v-for="dict in send_status" :key="dict.value">
|
||||
<el-option v-if="dict.value == 'confirm'" :label="dict.label" :key="dict.value" :value="dict.value"></el-option>
|
||||
</template>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@ -163,10 +178,10 @@
|
||||
<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 { formatText } from '@/utils/asinkj';
|
||||
|
||||
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);
|
||||
@ -218,13 +233,13 @@ const data = reactive<PageData<SendOrderForm, SendOrderQuery>>({
|
||||
},
|
||||
rules: {
|
||||
orderSn: [{ required: true, message: '采购单号不能为空', trigger: 'blur' }],
|
||||
sendDate: [{ 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' }],
|
||||
// quantityPerBox: [{ required: true, message: '单箱产品数量不能为空', trigger: 'blur' }],
|
||||
boxCount: [{ required: true, message: '箱数不能为空', trigger: 'blur' }],
|
||||
boxDimensions: [{ 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' }]
|
||||
@ -238,6 +253,7 @@ const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listSendOrder(queryParams.value);
|
||||
sendOrderList.value = res.rows;
|
||||
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
};
|
||||
@ -277,7 +293,7 @@ const handleSelectionChange = (selection: SendOrderVO[]) => {
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = '添加供应商创建的发货单';
|
||||
dialog.title = '更改发货数据';
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
@ -286,8 +302,9 @@ const handleUpdate = async (row?: SendOrderVO) => {
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getSendOrder(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
form.value.sendStatus = 'confirm';
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改供应商创建的发货单';
|
||||
dialog.title = '推送发货单';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
|
355
src/views/amz/sendOrderLast/index.vue
Normal file
355
src/views/amz/sendOrderLast/index.vue
Normal file
@ -0,0 +1,355 @@
|
||||
<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="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="createTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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="sendName" />
|
||||
<el-table-column label="物流商名称" align="center" prop="logisticsProviderName">
|
||||
<template #default="{ row }">
|
||||
<el-popover placement="top" title="物流商地址" :width="200" trigger="click">
|
||||
<template #reference>
|
||||
<el-button v-if="row.logisticsProviderName !== null" text size="small" type="primary">
|
||||
{{ row.logisticsProviderName }}
|
||||
</el-button>
|
||||
</template>
|
||||
<div>{{ row.address || '暂无地址' }}</div>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="产品名称" align="center" prop="productName" />
|
||||
<el-table-column label="发货数量" align="center" prop="quantitySend" />
|
||||
<el-table-column label="箱数" align="center" prop="boxCount">
|
||||
<template #default="{ row }">
|
||||
<el-popover placement="top" title="装箱明细" :width="350" trigger="click">
|
||||
<template #reference>
|
||||
<el-button text size="small" type="primary"> {{ row.boxCount }}箱</el-button>
|
||||
</template>
|
||||
<div v-if="row.sendDetail !== null" v-html="formatText(row.sendDetail)"></div>
|
||||
<div v-else>暂无数据</div>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <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-button
|
||||
v-if="scope.row.sendStatus === 'confirm'"
|
||||
size="small"
|
||||
link
|
||||
type="primary"
|
||||
@click="handleUpdate(scope.row)"
|
||||
v-hasRoles="['superadmin', 'gengdan', 'yunying']"
|
||||
>待创建FBA
|
||||
</el-button>
|
||||
|
||||
<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="请输入采购单号" 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="产品名称" 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="quantityPerBox">-->
|
||||
<!-- <el-input v-model="form.quantityPerBox" placeholder="请输入单箱产品数量" disabled />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="箱数" prop="boxCount">-->
|
||||
<!-- <el-input v-model="form.boxCount" placeholder="请输入箱数" disabled />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="箱子尺寸" prop="boxDimensions">-->
|
||||
<!-- <el-input v-model="form.boxDimensions" placeholder="请输入箱子尺寸" disabled />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="单箱重量" prop="weightPerBox">-->
|
||||
<!-- <el-input v-model="form.weightPerBox" placeholder="请输入单箱重量" disabled />-->
|
||||
<!-- </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="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 { formatText } from '@/utils/asinkj';
|
||||
|
||||
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 = '待创建FBA货件信息';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
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>
|
644
src/views/amz/sendOrderReport/index.vue
Normal file
644
src/views/amz/sendOrderReport/index.vue
Normal file
@ -0,0 +1,644 @@
|
||||
<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="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 type="expand">
|
||||
<template #default="props">
|
||||
<el-card v-if="props.row.bizLogisticsOrder != null" shadow="never">
|
||||
<!-- <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="productName" />-->
|
||||
<!-- <el-table-column label="发货数量" align="center" prop="quantitySend" />-->
|
||||
<!-- <el-table-column label="单箱产品数量" align="center" prop="quantityPerBox" />-->
|
||||
<!-- </el-table>-->
|
||||
<el-descriptions size="small" border title="物流订单详情">
|
||||
<el-descriptions-item label="物流订单号">{{ props.row.bizLogisticsOrder.orderId }} </el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="渠道名称">{{ props.row.bizLogisticsOrder.channelName }} </el-descriptions-item>
|
||||
<el-descriptions-item label="目的地">{{ props.row.bizLogisticsOrder.destination }} </el-descriptions-item>
|
||||
<el-descriptions-item label="订单状态">
|
||||
<dict-tag :options="logic_order_status" :value="props.row.bizLogisticsOrder.status" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="物流商名称">{{ props.row.logisticsProviderName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="物流商地址">{{ props.row.address || '暂无地址' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="物流明细">
|
||||
<el-button link type="primary" size="small" @click="openDetailDialog(props.row.bizLogisticsOrder.details)"> 查看详情 </el-button>
|
||||
</el-descriptions-item>
|
||||
|
||||
<!-- <el-descriptions-item label="入库计划ID">{{ props.row.staInboundPlanId }}</el-descriptions-item>-->
|
||||
|
||||
<!-- <el-descriptions-item label="创建时间">{{ parseTime(props.row.gmtCreate, '{y}-{m}-{d}') }} </el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="物流商">{{ props.row.bizLogisticsOrder.logisticsProviderName }} </el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="预计到货开始日">{{ parseTime(props.row.staDeliveryStartDate, '{y}-{m}-{d}') }} </el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="预计到货截止日">{{ parseTime(props.row.staDeliveryEndDate, '{y}-{m}-{d}') }} </el-descriptions-item>-->
|
||||
</el-descriptions>
|
||||
</el-card>
|
||||
<el-card v-else>
|
||||
<el-card shadow="never"> 暂无物流信息 </el-card>
|
||||
</el-card>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="发货单号" align="center" prop="id" />
|
||||
<el-table-column label="采购单号" align="center" prop="orderSn" />
|
||||
<el-table-column label="创建日期" align="center" prop="createTime" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<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="sendName" />
|
||||
<!-- <el-table-column label="物流商名称" align="center" prop="logisticsProviderName">-->
|
||||
<!-- <template #default="{ row }">-->
|
||||
<!-- <el-popover placement="top" title="物流商地址" :width="200" trigger="click">-->
|
||||
<!-- <template #reference>-->
|
||||
<!-- <el-button v-if="row.logisticsProviderName !== null" text size="small" type="primary">-->
|
||||
<!-- {{ row.logisticsProviderName }}-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </template>-->
|
||||
<!-- <div>{{ row.address || '暂无地址' }}</div>-->
|
||||
<!-- </el-popover>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<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">
|
||||
<template #default="{ row }">
|
||||
<el-popover placement="top" title="装箱明细" :width="350" trigger="click">
|
||||
<template #reference>
|
||||
<el-button text size="small" type="primary"> {{ row.boxCount }}箱</el-button>
|
||||
</template>
|
||||
<div v-if="row.sendDetail !== null" v-html="formatText(row.sendDetail)"></div>
|
||||
<div v-else>暂无数据</div>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <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" v-if="scope.row.sendStatus === 'pending'">
|
||||
<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="1000px" 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="boxCount">
|
||||
<el-input v-model="form.boxCount" placeholder="请输入总箱数" />
|
||||
</el-form-item>
|
||||
<el-form-item v-if="form.quantitySend > 0 && form.boxCount > 0" label="箱子明细" prop="quantityPerBox">
|
||||
<div class="max-w-800px">
|
||||
<div v-for="(group, index) in groups" :key="index" class="flex gap-12px mb-16px items-center">
|
||||
<el-input
|
||||
v-model.number="groups[index].boxCount"
|
||||
placeholder="箱子数量"
|
||||
type="number"
|
||||
min="0"
|
||||
class="flex-1"
|
||||
@input="validateInput(index, 'boxCount')"
|
||||
/>
|
||||
X
|
||||
<el-input
|
||||
v-model.number="groups[index].itemCount"
|
||||
placeholder="每箱个数"
|
||||
type="number"
|
||||
min="0"
|
||||
class="flex-1"
|
||||
@input="validateInput(index, 'itemCount')"
|
||||
/>
|
||||
<el-input v-model.number="groups[index].lengthPerBox" placeholder="长(cm)" type="number" min="0" class="flex-1" />
|
||||
<el-input v-model.number="groups[index].widthPerBox" placeholder="宽(cm)" type="number" min="0" class="flex-1" />
|
||||
<el-input v-model.number="groups[index].heightPerBox" placeholder="高(cm)" type="number" min="0" class="flex-1" />
|
||||
<el-input v-model.number="groups[index].weightPerBox" placeholder="单箱重量(kg)" type="number" min="0" class="flex-1" />
|
||||
<el-button v-if="index > 0" @click="removeGroup(index)" type="danger" :icon="Close" circle size="small" />
|
||||
<div v-else class="w-8 h-8"></div>
|
||||
</div>
|
||||
|
||||
<div class="mb-16px text-left">
|
||||
<span :class="['mr-8px', Number(totalNum) === Number(shipForm.quantitySend) ? 'text-green-500' : 'text-red-500']">
|
||||
当前总量:{{ totalNum }}/{{ form.quantitySend }}
|
||||
</span>
|
||||
<el-button @click="addGroup" type="primary" :icon="Plus" :disabled="totalNum >= form.quantitySend"> 添加一组 </el-button>
|
||||
</div>
|
||||
</div>
|
||||
</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="totalWeight" placeholder="请输入总重量" disabled />-->
|
||||
<el-input-number v-model="totalWeight" :min="0" :max="100000" disabled>
|
||||
<template #suffix>
|
||||
<span>kg</span>
|
||||
</template>
|
||||
</el-input-number>
|
||||
</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>
|
||||
|
||||
<el-dialog v-model="detailDialogVisible" title="货件明细" width="60%">
|
||||
<el-table :data="detailTableData">
|
||||
<el-table-column label="FBA货件编号" align="center" prop="fbaShipmentId" />
|
||||
<el-table-column label="FBA箱号" align="center" prop="fbaBoxNumber" />
|
||||
<el-table-column label="物流商名称" align="center" prop="logisticsProviderName" />
|
||||
<el-table-column label="物流渠道" align="center" prop="channelName" />
|
||||
<!-- <el-table-column label="物流称重" align="center" prop="logisticsWeight">-->
|
||||
<!-- <template #default="scope">-->
|
||||
<!-- {{ scope.row.logisticsWeight != null ? `${scope.row.logisticsWeight} kg` : '' }}-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="物流追踪号" align="center" prop="trackingNumber">
|
||||
<template #default="scope">
|
||||
<el-link type="success" :href="`https://t.17track.net/zh-cn#nums=${scope.row.trackingNumber}`" target="_blank">
|
||||
{{ scope.row.trackingNumber }}
|
||||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="物流状态" align="center" prop="logisticsStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="biz_logistics_status" :value="scope.row.logisticsStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="更新时间" align="center" prop="updateTime" />
|
||||
</el-table>
|
||||
</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';
|
||||
import { Close, Plus } from '@element-plus/icons-vue';
|
||||
import { ElTable } from 'element-plus';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { send_status } = toRefs<any>(proxy?.useDict('send_status'));
|
||||
const { logic_order_status } = toRefs<any>(proxy?.useDict('logic_order_status'));
|
||||
|
||||
const { biz_logistics_status } = toRefs<any>(proxy?.useDict('biz_logistics_status'));
|
||||
|
||||
const detailDialogVisible = ref(false);
|
||||
|
||||
const detailTableData = ref([]);
|
||||
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: 0,
|
||||
quantityPerBox: undefined,
|
||||
boxCount: undefined,
|
||||
boxDimensions: undefined,
|
||||
weightPerBox: undefined,
|
||||
realStoreName: undefined,
|
||||
sendStatus: undefined,
|
||||
sendDetail: 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: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (totalBoxCount.value != form.value.boxCount) {
|
||||
console.log('totalBoxCount.value', totalBoxCount.value);
|
||||
console.log('form.value.boxCount', form.value.boxCount);
|
||||
callback(new Error('明细箱数和总箱数不匹配,请调整'));
|
||||
}
|
||||
// 总量提示
|
||||
if (totalNum.value > form.value.quantitySend) {
|
||||
const exceed = totalNum.value - form.value.quantitySend;
|
||||
callback(new Error('总量超出 ' + exceed + ',请调整'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
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 groups = ref([
|
||||
{
|
||||
boxCount: null,
|
||||
itemCount: null,
|
||||
lengthPerBox: null,
|
||||
widthPerBox: null,
|
||||
heightPerBox: null,
|
||||
weightPerBox: null
|
||||
}
|
||||
]);
|
||||
|
||||
// 计算所有输入值的总和
|
||||
const totalNum = computed(() => {
|
||||
return groups.value.reduce((sum, group) => {
|
||||
const box = Number(group.boxCount) || 0;
|
||||
const item = Number(group.itemCount) || 0;
|
||||
return sum + box * item;
|
||||
}, 0);
|
||||
});
|
||||
|
||||
// 计算所有输入值的总和
|
||||
const totalBoxCount = computed(() => {
|
||||
return groups.value.reduce((sum, group) => {
|
||||
const box = Number(group.boxCount) || 0;
|
||||
return sum + box;
|
||||
}, 0);
|
||||
});
|
||||
|
||||
const totalWeight = computed(() => {
|
||||
return groups.value.reduce((sum, group) => {
|
||||
const box = Number(group.boxCount) || 0;
|
||||
return sum + box * group.weightPerBox;
|
||||
}, 0);
|
||||
});
|
||||
|
||||
// 输入验证
|
||||
const validateInput = (index, field) => {
|
||||
const value = groups.value[index][field];
|
||||
|
||||
// 非数字或负数处理
|
||||
if (isNaN(value) || value < 0) {
|
||||
ElMessage.warning('请输入有效的非负数');
|
||||
groups.value[index][field] = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
// // 总量提示
|
||||
// if (totalNum.value > form.value.quantitySend) {
|
||||
// const exceed = totalNum.value - form.value.quantitySend;
|
||||
// ElMessage.warning(`总量超出 ${exceed},请调整`);
|
||||
// }
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
const openDetailDialog = (detail) => {
|
||||
detailTableData.value = detail;
|
||||
detailDialogVisible.value = true;
|
||||
};
|
||||
|
||||
// 添加新组
|
||||
const addGroup = () => {
|
||||
if (totalNum.value >= form.value.quantitySend) {
|
||||
ElMessage.error(`当前总量已达${form.value.quantitySend},无法继续添加`);
|
||||
return;
|
||||
}
|
||||
|
||||
groups.value.push({
|
||||
boxCount: null,
|
||||
itemCount: null,
|
||||
lengthPerBox: null,
|
||||
widthPerBox: null,
|
||||
heightPerBox: null,
|
||||
weightPerBox: null
|
||||
});
|
||||
};
|
||||
|
||||
const formatText = (text) => {
|
||||
if (text === null) {
|
||||
return '';
|
||||
}
|
||||
return text.replace(/\n/g, '<br>');
|
||||
};
|
||||
|
||||
// 删除组
|
||||
const removeGroup = (index) => {
|
||||
groups.value.splice(index, 1);
|
||||
if (totalNum.value > form.value.quantitySend) {
|
||||
ElMessage.warning('请调整剩余数值使总量不超过100');
|
||||
}
|
||||
};
|
||||
/** 查询供应商创建的发货单列表 */
|
||||
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.weightPerBox = totalWeight.value;
|
||||
form.value.boxDimensions = `${pwidth.value} x ${pheight.value} x ${plength.value}`;
|
||||
const sendText = groups.value.reduce((sum, group, index) => {
|
||||
return (
|
||||
sum +
|
||||
'规格' +
|
||||
numberToLetter(index) +
|
||||
': ' +
|
||||
group.boxCount +
|
||||
'箱' +
|
||||
group.itemCount +
|
||||
'件,长' +
|
||||
group.lengthPerBox +
|
||||
'cm宽' +
|
||||
group.widthPerBox +
|
||||
'cm高' +
|
||||
group.heightPerBox +
|
||||
'cm,' +
|
||||
'单箱重量' +
|
||||
group.weightPerBox +
|
||||
'kg' +
|
||||
'\n'
|
||||
);
|
||||
}, '');
|
||||
console.log('sendText: ', sendText);
|
||||
form.value.sendDetail = sendText;
|
||||
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();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function numberToLetter(num: number): string {
|
||||
if (num < 0 || num > 25) throw new Error('数字需在 0-25 范围内');
|
||||
return String.fromCharCode(num + 65);
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
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>
|
@ -10,33 +10,33 @@
|
||||
<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-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="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="发货方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="收货方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="跟单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>
|
||||
@ -52,48 +52,49 @@
|
||||
<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>
|
||||
<!-- <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 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="quantitySend" />
|
||||
<el-table-column label="发货箱数" align="center" prop="boxNum" />
|
||||
<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="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">
|
||||
@ -106,16 +107,19 @@
|
||||
<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-column label="发货箱数" align="center" prop="boxNum" />
|
||||
<el-table-column label="预计到达" align="center" prop="expDeliveryDate" width="180" />
|
||||
|
||||
<!-- <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" />
|
||||
@ -136,20 +140,23 @@
|
||||
<el-input v-model="form.productName" placeholder="请输入产品全称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货数量" prop="quantitySend">
|
||||
<el-input v-model="form.quantitySend" placeholder="请输入实际发货数量" />
|
||||
<el-input v-model="form.quantitySend" placeholder="请输入发货数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货箱数" prop="quantitySend">
|
||||
<el-input v-model="form.boxNum" placeholder="请输入发货箱数" disabled />
|
||||
</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="发货方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="收货方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"
|
||||
@ -164,9 +171,9 @@
|
||||
<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="跟单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>
|
||||
@ -389,7 +396,7 @@ const data = reactive<PageData<ShipForwardForm, ShipForwardQuery>>({
|
||||
storeName: [{ required: true, message: '采购店铺名称不能为空', trigger: 'blur' }],
|
||||
sku: [{ required: true, message: '产品唯一标识码不能为空', trigger: 'blur' }],
|
||||
productName: [{ required: true, message: '产品全称不能为空', trigger: 'blur' }],
|
||||
quantitySend: [{ 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' }],
|
||||
|
@ -10,33 +10,33 @@
|
||||
<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-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="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="发货方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="收货方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="跟单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>
|
||||
@ -52,48 +52,50 @@
|
||||
<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>
|
||||
<!-- <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 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="quantitySend" />
|
||||
<el-table-column label="发货箱数" align="center" prop="boxNum" />
|
||||
|
||||
<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="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">
|
||||
@ -106,18 +108,11 @@
|
||||
<span>{{ parseTime(scope.row.sendTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="预计到达" align="center" prop="expDeliveryDate" width="180" />
|
||||
|
||||
<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-button text bg type="primary" size="small" @click="handleUpdate(scope.row)" v-hasRoles="['superadmin']"> 修改 </el-button>
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button
|
||||
link
|
||||
@ -129,9 +124,7 @@
|
||||
></el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<el-button link type="primary" @click="handleReceive(scope.row)" v-hasRoles="['superadmin']" v-hasPermi="['amz:shipForward:remove']"
|
||||
>确认收货
|
||||
</el-button>
|
||||
<el-button size="small" type="primary" @click="handleReceive(scope.row)" v-hasRoles="['superadmin', 'gongying']" text>收 货 </el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@ -154,7 +147,10 @@
|
||||
<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-input v-model="form.quantitySend" placeholder="请输入发货数量" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货箱数" prop="quantitySend">
|
||||
<el-input v-model="form.boxNum" placeholder="请输入发货箱数" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货方" prop="outSupplierName">
|
||||
<el-input v-model="form.outSupplierName" placeholder="请输入发货供应商名称" disabled />
|
||||
@ -191,10 +187,10 @@
|
||||
<!-- <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-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">
|
||||
@ -412,7 +408,7 @@ const data = reactive<PageData<ShipForwardForm, ShipForwardQuery>>({
|
||||
storeName: [{ required: true, message: '采购店铺名称不能为空', trigger: 'blur' }],
|
||||
sku: [{ required: true, message: '产品唯一标识码不能为空', trigger: 'blur' }],
|
||||
productName: [{ required: true, message: '产品全称不能为空', trigger: 'blur' }],
|
||||
quantitySend: [{ 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' }],
|
||||
@ -570,7 +566,7 @@ const handleUpdate = async (row?: ShipForwardVO) => {
|
||||
const res = await getShipForward(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改货件转发';
|
||||
dialog.title = '确认收货';
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
|
@ -10,33 +10,33 @@
|
||||
<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-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="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="发货方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="收货方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="跟单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>
|
||||
@ -52,48 +52,50 @@
|
||||
<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>
|
||||
<!-- <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 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="quantitySend" />
|
||||
<el-table-column label="发货箱数" align="center" prop="boxNum" />
|
||||
|
||||
<!-- <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="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">
|
||||
@ -106,9 +108,10 @@
|
||||
<span>{{ parseTime(scope.row.sendTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="预计到达" align="center" prop="expDeliveryDate" width="180" />
|
||||
<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-button link type="primary" @click="handleUpdate(scope.row)" v-hasRoles="['superadmin', 'gongying']"> 发货 </el-button>
|
||||
|
||||
<el-tooltip content="删除" placement="top">
|
||||
<el-button
|
||||
@ -173,16 +176,34 @@
|
||||
<!-- <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-input v-model="form.quantitySend" placeholder="请输入发货数量" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="发货箱数" prop="quantitySend">
|
||||
<el-input v-model="form.boxNum" 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-item label="预计到达时间" prop="expDeliveryDate">
|
||||
<el-date-picker
|
||||
clearable
|
||||
v-model="form.expDeliveryDate"
|
||||
type="datetime"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请设置预计到达时间"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="发货箱数" prop="boxNum">
|
||||
<!-- <el-input v-model="form.boxNum" placeholder="请输入发货数量" />-->
|
||||
<el-input-number v-model="form.boxNum" :min="1" :max="10" controls-position="right" size="default" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">开始转发货物</el-button>
|
||||
<el-button :loading="buttonLoading" type="primary" @click="sendUpdateShipForwardForm">开始转发货物</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
@ -317,7 +338,7 @@
|
||||
</template>
|
||||
|
||||
<script setup name="ShipForward" lang="ts">
|
||||
import { listShipForward, getShipForward, delShipForward, addShipForward, updateShipForward } from '@/api/amz/shipForward';
|
||||
import { listShipForward, getShipForward, delShipForward, addShipForward, updateShipForward, sendUpdateShipForward } 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';
|
||||
@ -365,7 +386,9 @@ const initFormData: ShipForwardForm = {
|
||||
trackerName: undefined,
|
||||
trackerId: undefined,
|
||||
fwdStatus: undefined,
|
||||
sendTime: undefined
|
||||
sendTime: undefined,
|
||||
expDeliveryDate: undefined,
|
||||
boxNum: undefined
|
||||
};
|
||||
const data = reactive<PageData<ShipForwardForm, ShipForwardQuery>>({
|
||||
form: { ...initFormData },
|
||||
@ -396,7 +419,7 @@ const data = reactive<PageData<ShipForwardForm, ShipForwardQuery>>({
|
||||
storeName: [{ required: true, message: '采购店铺名称不能为空', trigger: 'blur' }],
|
||||
sku: [{ required: true, message: '产品唯一标识码不能为空', trigger: 'blur' }],
|
||||
productName: [{ required: true, message: '产品全称不能为空', trigger: 'blur' }],
|
||||
quantitySend: [{ 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' }],
|
||||
@ -579,6 +602,23 @@ const submitForm = () => {
|
||||
});
|
||||
};
|
||||
|
||||
const sendUpdateShipForwardForm = () => {
|
||||
form.value.fwdStatus = 'processing';
|
||||
shipForwardFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (form.value.id) {
|
||||
await sendUpdateShipForward(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;
|
||||
|
@ -29,9 +29,9 @@
|
||||
<el-form-item label="创建时间" prop="gmtCreate">
|
||||
<el-date-picker clearable v-model="queryParams.gmtCreate" type="date" value-format="YYYY-MM-DD" placeholder="请选择创建时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="同步时间" prop="syncTime">
|
||||
<el-date-picker clearable v-model="queryParams.syncTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择同步时间" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="同步时间" prop="syncTime">-->
|
||||
<!-- <el-date-picker clearable v-model="queryParams.syncTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择同步时间" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="计划发货日期" prop="staShipmentDate">
|
||||
<el-date-picker
|
||||
clearable
|
||||
|
@ -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="sellerName">
|
||||
<el-input v-model="queryParams.sellerName" 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>
|
||||
@ -81,8 +84,8 @@
|
||||
<!-- <el-descriptions-item label="运输方案">{{ props.row.shippingSolution }}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="入库计划ID">{{ props.row.staInboundPlanId }}</el-descriptions-item>-->
|
||||
|
||||
<el-descriptions-item label="创建时间">{{ parseTime(props.row.gmtCreate, '{y}-{m}-{d}') }} </el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="计划发货日期">{{ parseTime(props.row.staShipmentDate, '{y}-{m}-{d}') }} </el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="创建时间">{{ parseTime(props.row.gmtCreate, '{y}-{m}-{d}') }} </el-descriptions-item>-->
|
||||
<el-descriptions-item label="计划发货日期">{{ parseTime(props.row.staShipmentDate, '{y}-{m}-{d}') }} </el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="预计到货开始日">{{ parseTime(props.row.staDeliveryStartDate, '{y}-{m}-{d}') }} </el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="预计到货截止日">{{ parseTime(props.row.staDeliveryEndDate, '{y}-{m}-{d}') }} </el-descriptions-item>-->
|
||||
</el-descriptions>
|
||||
@ -91,7 +94,7 @@
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="创建日期" align="center" prop="gmtCreate" width="180">
|
||||
<template #default="scope">
|
||||
<span>{{ parseTime(scope.row.staShipmentDate, '{y}-{m}-{d}') }}</span>
|
||||
<span>{{ parseTime(scope.row.gmtCreate, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="店铺名称" align="center" prop="sellerName" />
|
||||
@ -100,7 +103,7 @@
|
||||
<template #default="scope">
|
||||
<el-popover placement="top" :width="750" trigger="hover" @show="showPop(scope.row)">
|
||||
<template #reference>
|
||||
<el-button style="margin-right: 16px">查看</el-button>
|
||||
<el-button size="small" plain style="margin-right: 16px">查看</el-button>
|
||||
</template>
|
||||
<el-table :data="scope.row.itemVoList">
|
||||
<el-table-column width="200" property="productName" label="品名" />
|
||||
@ -123,15 +126,56 @@
|
||||
<!-- </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" />
|
||||
<el-table-column label="套数" align="center" prop="setTotal" />
|
||||
<!-- <el-table-column label="总箱子数量" align="center" prop="boxQuantity" />-->
|
||||
<!-- <el-table-column label="箱子尺寸" align="center" prop="boxSize" />-->
|
||||
<!-- <el-table-column label="供应商称重-总重量" align="center" prop="vendorWeight" />-->
|
||||
<!-- <el-table-column label="套数" align="center" prop="setTotal" />-->
|
||||
<el-table-column label="关联采购单" align="center" prop="sendOrderId">
|
||||
<template #default="scope">
|
||||
<el-popover v-if="scope.row.sendOrderId" placement="top" :width="800" trigger="click">
|
||||
<template #reference>
|
||||
<!-- <el-button style="margin-right: 16px">Click to activate</el-button>-->
|
||||
<el-button size="small" plain v-if="scope.row.sendOrderId" type="success"> 已关联</el-button>
|
||||
</template>
|
||||
<el-descriptions v-if="scope.row.sendOrderId" title="供应商发货单" border :column="2" label-class-name="desc-label">
|
||||
<!-- 订单信息 -->
|
||||
<el-descriptions-item label="订单编号" min-width="120px">
|
||||
{{ scope.row.sendOrder.orderSn }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="产品名称">
|
||||
{{ scope.row.sendOrder.productName }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="总箱数"> {{ scope.row.sendOrder.boxCount }} 箱</el-descriptions-item>
|
||||
<el-descriptions-item label="总重量"> {{ scope.row.sendOrder.weightPerBox }} kg</el-descriptions-item>
|
||||
<el-descriptions-item label="箱体规格"> {{ scope.row.sendOrder.sendDetail }}</el-descriptions-item>
|
||||
|
||||
<!-- <el-descriptions-item label="每箱数量"> {{ scope.row.sendOrder.quantityPerBox }} 件/箱 </el-descriptions-item>-->
|
||||
</el-descriptions>
|
||||
</el-popover>
|
||||
<el-tooltip class="box-item" effect="dark" content="点击关联采购单" placement="top">
|
||||
<el-button size="small" plain v-if="!scope.row.sendOrderId" type="info" @click="handleLink(scope.row)"> 未关联 </el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column label="渠道ID" align="center" prop="channelId" />-->
|
||||
|
||||
<el-table-column width="150" label="仓库配送地址" align="center" prop="shipToAddress">
|
||||
<template #default="{ row }">
|
||||
<el-button @click="openAddressDialog(row.shipToAddress)"> 查看详情</el-button>
|
||||
<!-- <el-button @click="openAddressDialog(row.shipToAddress)"> 查看详情</el-button>-->
|
||||
<el-popover placement="left" :width="800" trigger="click">
|
||||
<template #reference>
|
||||
<!-- <el-button style="margin-right: 16px">Click to activate</el-button>-->
|
||||
<el-button plain size="small" type="success"> 点击查看详情</el-button>
|
||||
</template>
|
||||
<el-descriptions title="收货地址信息" :column="3" border>
|
||||
<el-descriptions-item v-for="item in descriptItems" :key="item.prop" :label="item.label">
|
||||
{{ row.shipToAddress[item.prop] || 'N/A' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="亚马逊货件状态" align="center" width="180">
|
||||
@ -143,9 +187,19 @@
|
||||
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
<el-tooltip content="向物流商询价" placement="top">
|
||||
<el-button link type="primary" size="small" @click="handleUpdate(scope.row)" v-hasPermi="['amz:shipmentPlan:edit']">询 价 </el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="关联采购单" placement="top">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
icon="Link"
|
||||
size="small"
|
||||
@click="handleLink(scope.row)"
|
||||
v-hasPermi="['amz:shipmentPlan:edit']"
|
||||
></el-button>
|
||||
</el-tooltip>
|
||||
<!-- <el-tooltip content="删除" placement="top">-->
|
||||
<!-- <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['amz:shipmentPlan:remove']"></el-button>-->
|
||||
<!-- </el-tooltip>-->
|
||||
@ -172,6 +226,10 @@
|
||||
<el-form-item label="物流中心编码" prop="destination">
|
||||
<el-input v-model="form.destination" placeholder="请输入物流中心编码" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否报关" prop="destination">
|
||||
<el-switch v-model="customsFlag" active-value="1" inactive-value="0" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="物流渠道">
|
||||
<el-cascader
|
||||
ref="channelCascaderRef"
|
||||
@ -184,28 +242,28 @@
|
||||
filterable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="总箱子数量" prop="boxQuantity">
|
||||
<el-input v-model="form.boxQuantity" placeholder="请输入总箱子数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="箱子尺寸" prop="boxSize">
|
||||
<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="vendorWeight">
|
||||
<el-input v-model="form.vendorWeight" placeholder="请输入供应商称重-总重量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="套数" prop="setTotal">
|
||||
<el-input v-model="form.setTotal" placeholder="请输入套数" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="总箱子数量" prop="boxQuantity">-->
|
||||
<!-- <el-input v-model="form.boxQuantity" placeholder="请输入总箱子数量" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="箱子尺寸" prop="boxSize">-->
|
||||
<!-- <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="vendorWeight">-->
|
||||
<!-- <el-input v-model="form.vendorWeight" placeholder="请输入供应商称重-总重量" />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="套数" prop="setTotal">-->
|
||||
<!-- <el-input v-model="form.setTotal" placeholder="请输入套数" />-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
@ -223,10 +281,10 @@
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog v-model="channelDialogVisible" title="批量提交询价" width="60%">
|
||||
<el-form-item label="日期">
|
||||
<el-date-picker v-model="shipDate" disabled type="date" placeholder="选择指定日期" value-format="YYYY-MM-DD" />
|
||||
</el-form-item>
|
||||
<el-form :model="form" label-width="auto" style="max-width: 600px">
|
||||
<el-form-item label="日期">
|
||||
<el-date-picker v-model="shipDate" disabled type="date" placeholder="选择指定日期" value-format="YYYY-MM-DD" />
|
||||
</el-form-item>
|
||||
<el-form-item label="渠道选择">
|
||||
<el-cascader
|
||||
v-model="selectedChannel"
|
||||
@ -238,6 +296,9 @@
|
||||
filterable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否报关" prop="destination">
|
||||
<el-switch v-model="customsFlag" active-value="1" inactive-value="0" />
|
||||
</el-form-item>
|
||||
|
||||
<el-button :loading="buttonLoading" type="primary" @click="batchSendRest()">批量提交询价</el-button>
|
||||
</el-form>
|
||||
@ -292,6 +353,41 @@
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog v-model="orderTableVisible.visible" title="选择需要关联的采购单" width="1800">
|
||||
<el-table v-loading="loading" :data="sendOrderList">
|
||||
<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-button link type="primary" size="small" @click="handleLinkOrder(scope.row)">关联采购单</el-button>
|
||||
|
||||
<!-- <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>
|
||||
</el-dialog>
|
||||
|
||||
<el-drawer size="60%" v-model="drawer" :direction="direction">
|
||||
<template #header>
|
||||
<h4>物流商报价</h4>
|
||||
@ -340,7 +436,8 @@ import {
|
||||
delShipmentPlan,
|
||||
addShipmentPlan,
|
||||
updateShipmentPlan,
|
||||
takeTodayAmzPlanData
|
||||
takeTodayAmzPlanData,
|
||||
linkShipmentPlan
|
||||
} from '@/api/amz/shipmentPlan';
|
||||
import { listAllLogisticsChannel } from '@/api/amz/logisticsChannel';
|
||||
import type { DrawerProps } from 'element-plus';
|
||||
@ -348,16 +445,21 @@ import { createBatch, createWithDesAndChannel, queryWithDesAndChannel } from '@/
|
||||
|
||||
import { queryLogisticsQuote } from '@/api/amz/logisticsQuote';
|
||||
|
||||
import { ShipmentPlanVO, ShipmentPlanQuery, ShipmentPlanForm } from '@/api/amz/shipmentPlan/types';
|
||||
import { ShipmentPlanVO, ShipmentPlanQuery, ShipmentPlanForm, DescriptItem } from '@/api/amz/shipmentPlan/types';
|
||||
import { ElTable } from 'element-plus';
|
||||
import { LogisticsQuoteVO } from '@/api/amz/logisticsQuote/types';
|
||||
import { createOrderForm } from '@/api/amz/logisticsOrder/types';
|
||||
import { createLogisticsOrder } from '@/api/amz/logisticsOrder';
|
||||
import { InquiryRequestItemVO } from '@/api/amz/inquiryRequest/types';
|
||||
import { listSendOrder } from '@/api/amz/sendOrder';
|
||||
import { PurchaseOrderVO } from '@/api/amz/purchaseOrder/types';
|
||||
import { SendOrderVO } from '@/api/amz/sendOrder/types';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { biz_transport_channel } = toRefs<any>(proxy?.useDict('biz_transport_channel'));
|
||||
|
||||
const { send_status } = toRefs<any>(proxy?.useDict('send_status'));
|
||||
|
||||
const { sys_zero_one } = toRefs<any>(proxy?.useDict('sys_zero_one'));
|
||||
|
||||
const shipmentPlanList = ref<ShipmentPlanVO[]>([]);
|
||||
@ -379,10 +481,48 @@ const dialog = reactive<DialogOption>({
|
||||
title: ''
|
||||
});
|
||||
|
||||
const orderTableVisible = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const handleCopy = (text) => {
|
||||
proxy?.$modal.msgSuccess('复制成功');
|
||||
};
|
||||
|
||||
// 响应式数据
|
||||
// const shipToAddress = reactive<Address>({
|
||||
// name: null,
|
||||
// countryCode: 'US',
|
||||
// stateOrProvinceCode: null,
|
||||
// city: 'Joliet',
|
||||
// region: 'IL',
|
||||
// addressLine1: '250 EMERALD DR',
|
||||
// addressLine2: null,
|
||||
// postalCode: '60433-3280',
|
||||
// phone: null,
|
||||
// doorplate: '60433-3280'
|
||||
// });
|
||||
|
||||
// 配置项
|
||||
const descriptItems: DescriptItem[] = [
|
||||
{ label: '姓名', prop: 'name' },
|
||||
{ label: '国家', prop: 'countryCode' },
|
||||
{ label: '州/省代码', prop: 'stateOrProvinceCode' },
|
||||
{ label: '城市', prop: 'city' },
|
||||
{ label: '州/省', prop: 'region' },
|
||||
{ label: '地址行1', prop: 'addressLine1' },
|
||||
{ label: '地址行2', prop: 'addressLine2' },
|
||||
{ label: '邮政编码', prop: 'postalCode' },
|
||||
{ label: '电话', prop: 'phone' },
|
||||
{ label: '门牌号', prop: 'doorplate' }
|
||||
];
|
||||
|
||||
// 值格式化方法
|
||||
const getFormattedValue = (value: string | null): string => {
|
||||
return value ?? 'N/A';
|
||||
};
|
||||
|
||||
const initFormData: ShipmentPlanForm = {
|
||||
id: undefined,
|
||||
sid: undefined,
|
||||
@ -444,6 +584,7 @@ const data = reactive<PageData<ShipmentPlanForm, ShipmentPlanQuery>>({
|
||||
channelName: undefined,
|
||||
params: {}
|
||||
},
|
||||
|
||||
rules: {
|
||||
id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }],
|
||||
sid: [{ required: true, message: '关联系统ID不能为空', trigger: 'blur' }],
|
||||
@ -464,24 +605,41 @@ const data = reactive<PageData<ShipmentPlanForm, ShipmentPlanQuery>>({
|
||||
shipToAddress: [{ required: true, message: '收货地址不能为空', trigger: 'blur' }],
|
||||
referenceId: [{ required: true, message: '参考编号不能为空', trigger: 'blur' }],
|
||||
staInboundPlanId: [{ required: true, message: '入库计划ID不能为空', trigger: 'blur' }],
|
||||
isSta: [{ required: true, message: '是否STA计划不能为空', trigger: 'blur' }],
|
||||
boxSize: [
|
||||
{
|
||||
required: true,
|
||||
message: '长宽高都不能为空',
|
||||
validator: (rule, value, callback) => {
|
||||
if (!plength.value || !pwidth.value || !pheight.value) {
|
||||
callback(new Error('长宽高都不能为空'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
isSta: [{ required: true, message: '是否STA计划不能为空', trigger: 'blur' }]
|
||||
// boxSize: [
|
||||
// {
|
||||
// required: true,
|
||||
// message: '长宽高都不能为空',
|
||||
// validator: (rule, value, callback) => {
|
||||
// if (!plength.value || !pwidth.value || !pheight.value) {
|
||||
// callback(new Error('长宽高都不能为空'));
|
||||
// } else {
|
||||
// callback();
|
||||
// }
|
||||
// },
|
||||
// trigger: 'blur'
|
||||
// }
|
||||
// ]
|
||||
}
|
||||
});
|
||||
|
||||
const orderQueryParams = ref({
|
||||
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: 'confirm',
|
||||
params: {}
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
const createOrderData = ref<createOrderForm>({
|
||||
@ -505,6 +663,10 @@ const createOrder = async (row: ShipmentPlanVO) => {
|
||||
drawer.value = false;
|
||||
};
|
||||
|
||||
const handleSendOrderClick = async (row: string) => {
|
||||
console.log('row', row);
|
||||
};
|
||||
|
||||
const dialogTableVisible = ref(false);
|
||||
const plength = ref<string | number>();
|
||||
const pheight = ref<string | number>();
|
||||
@ -531,6 +693,7 @@ const tableData = ref([
|
||||
transportChannel: 'sea'
|
||||
}
|
||||
]);
|
||||
const sendOrderList = ref<SendOrderVO[]>([]);
|
||||
|
||||
const batchSendRest = async () => {
|
||||
console.log('selectionDatas=', selectionDatas);
|
||||
@ -543,13 +706,19 @@ const batchSendRest = async () => {
|
||||
channelId: channel,
|
||||
quoteDate: shipDate.value,
|
||||
shipToAddress: item.shipToAddress,
|
||||
shipmentId: item.shipmentId
|
||||
shipmentId: item.shipmentId,
|
||||
customsFlag: customsFlag.value
|
||||
};
|
||||
inquiryRequestItemVOList.value.push(inquiryRequestItemVO);
|
||||
if (item.sendOrderId) {
|
||||
inquiryRequestItemVOList.value.push(inquiryRequestItemVO);
|
||||
}
|
||||
});
|
||||
});
|
||||
console.log('inquiryRequestItemVOList=', inquiryRequestItemVOList);
|
||||
|
||||
if (inquiryRequestItemVOList.value.length === 0) {
|
||||
ElMessage.warning('请选择已关联采购单的数据');
|
||||
return;
|
||||
}
|
||||
const res = await createBatch(inquiryRequestItemVOList.value);
|
||||
console.log('res', res);
|
||||
if (res.code === 200) {
|
||||
@ -627,6 +796,17 @@ const channelDialogVisibleAction = () => {
|
||||
ElMessage.error('请选择需要批量提交的数据');
|
||||
return;
|
||||
}
|
||||
let allHasSendOrder = true;
|
||||
selectionDatas.value.forEach((item) => {
|
||||
if (!item.sendOrderId) {
|
||||
allHasSendOrder = false;
|
||||
}
|
||||
});
|
||||
|
||||
if (!allHasSendOrder) {
|
||||
ElMessage.error('请选择已关联采购单的数据');
|
||||
return;
|
||||
}
|
||||
|
||||
channelDialogVisible.value = true;
|
||||
console.log('channelDialogVisibleAction', selectionDatas.value.length);
|
||||
@ -681,7 +861,7 @@ const countryMap = {
|
||||
sg: '新加坡',
|
||||
de: '德国',
|
||||
fr: '法国',
|
||||
gb: '英国',
|
||||
uk: '英国',
|
||||
it: '意大利',
|
||||
es: '西班牙',
|
||||
ru: '俄罗斯',
|
||||
@ -777,6 +957,7 @@ const getShippingMethodName = (method) => {
|
||||
// 交互逻辑
|
||||
const activeCollapse = ref(['us']); // 默认展开美国
|
||||
const selectedChannel = ref(null);
|
||||
const customsFlag = ref('0');
|
||||
|
||||
const handleChannelSelect = (channelId) => {
|
||||
console.log('Selected channel ID:', channelId);
|
||||
@ -913,6 +1094,10 @@ const checkPrice = async () => {
|
||||
|
||||
/** 修改按钮操作 */
|
||||
const handleUpdate = async (row?: ShipmentPlanVO) => {
|
||||
if (!row.sendOrderId) {
|
||||
ElMessage.warning('请先关联采购单!');
|
||||
return;
|
||||
}
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getShipmentPlan(_id);
|
||||
@ -936,6 +1121,50 @@ const handleUpdate = async (row?: ShipmentPlanVO) => {
|
||||
currentDes.value = row.destination;
|
||||
};
|
||||
|
||||
const linkShipmentPlanVO = ref<ShipmentPlanVO>();
|
||||
|
||||
const handleLink = async (row: any) => {
|
||||
console.log('row', row);
|
||||
// const res = await getShipmentPlan(row.id);
|
||||
// console.log('res', res);
|
||||
// if (res.code == 200) {
|
||||
// ElMessage.success('复制成功');
|
||||
// getList();
|
||||
// }
|
||||
linkShipmentPlanVO.value = row;
|
||||
orderQueryParams.value.realStoreName = row.sellerName;
|
||||
orderQueryParams.value.sendStatus = 'confirm';
|
||||
console.log('orderQueryParams', orderQueryParams.value);
|
||||
const res = await listSendOrder(orderQueryParams.value);
|
||||
sendOrderList.value = res.rows;
|
||||
|
||||
orderTableVisible.visible = true;
|
||||
orderTableVisible.title = '选择需要关联的采购单';
|
||||
console.log('res', res);
|
||||
};
|
||||
|
||||
const handleLinkOrder = async (row: SendOrderVO) => {
|
||||
console.log('row', row);
|
||||
const updateForm = ref({
|
||||
id: linkShipmentPlanVO.value.id,
|
||||
sendOrderId: row.id,
|
||||
sendStatus: 'completed',
|
||||
shipmentId: linkShipmentPlanVO.value.shipmentId
|
||||
// boxSize: plength.value + '*' + pwidth.value + '*' + pheight.value,
|
||||
// vendorWeight: form.value.vendorWeight,
|
||||
// setTotal: form.value.setTotal
|
||||
// channelId: selectedChannel,
|
||||
// channelName: channelCascaderRef.value.getCheckedNodes()[0].label
|
||||
});
|
||||
const res = await linkShipmentPlan(updateForm.value).finally(() => (buttonLoading.value = false));
|
||||
console.log('res', res);
|
||||
if (res.code == 200) {
|
||||
orderTableVisible.visible = false;
|
||||
ElMessage.success('关联成功');
|
||||
getList();
|
||||
}
|
||||
};
|
||||
|
||||
const handleSend = async (row?: ShipmentPlanVO) => {
|
||||
// reset();
|
||||
// channelDialogVisible.value = true;
|
||||
|
@ -115,16 +115,59 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="物流中心编码" align="center" prop="destination" />
|
||||
<el-table-column label="总箱子数量" align="center" prop="boxQuantity" />
|
||||
<el-table-column label="套数" align="center" prop="setTotal" />
|
||||
<!-- <el-table-column label="总箱子数量" align="center" prop="boxQuantity" />-->
|
||||
<!-- <el-table-column label="套数" align="center" prop="setTotal" />-->
|
||||
<!-- <el-table-column label="箱子尺寸" align="center" prop="boxSize" />-->
|
||||
<el-table-column label="供应商称重-总重量" align="center" prop="vendorWeight" />
|
||||
<el-table-column label="物流称重-总重量" align="center" prop="vendorWeight" />
|
||||
<el-table-column label="称重差异" align="center" prop="vendorWeight" />
|
||||
<el-table-column label="物流称重-总重量" align="center" prop="logisticsWeight" />
|
||||
<el-table-column label="称重差异" align="center" prop="weightDiff" />
|
||||
<!-- <el-table-column label="渠道ID" align="center" prop="channelId" />-->
|
||||
<el-table-column label="关联采购单" align="center" prop="sendOrderId">
|
||||
<template #default="scope">
|
||||
<el-popover v-if="scope.row.sendOrderId" placement="top" :width="800" trigger="click">
|
||||
<template #reference>
|
||||
<!-- <el-button style="margin-right: 16px">Click to activate</el-button>-->
|
||||
<el-button size="small" plain v-if="scope.row.sendOrderId" type="success"> 已关联</el-button>
|
||||
</template>
|
||||
<el-descriptions v-if="scope.row.sendOrderId" title="供应商发货单" border :column="2" label-class-name="desc-label">
|
||||
<!-- 订单信息 -->
|
||||
<el-descriptions-item label="订单编号" min-width="120px">
|
||||
{{ scope.row.sendOrder.orderSn }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="产品名称">
|
||||
{{ scope.row.sendOrder.productName }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="总箱数"> {{ scope.row.sendOrder.boxCount }} 箱</el-descriptions-item>
|
||||
<el-descriptions-item label="总重量"> {{ scope.row.sendOrder.weightPerBox }} kg</el-descriptions-item>
|
||||
<el-descriptions-item label="箱体规格"> {{ scope.row.sendOrder.sendDetail }}</el-descriptions-item>
|
||||
|
||||
<!-- <el-descriptions-item label="每箱数量"> {{ scope.row.sendOrder.quantityPerBox }} 件/箱 </el-descriptions-item>-->
|
||||
</el-descriptions>
|
||||
</el-popover>
|
||||
<!-- <el-tooltip class="box-item" effect="dark" content="点击关联采购单" placement="top">-->
|
||||
<!-- <el-button size="small" plain v-if="!scope.row.sendOrderId" type="info" @click="handleLink(scope.row)"> 未关联 </el-button>-->
|
||||
<!-- </el-tooltip>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column label="渠道ID" align="center" prop="channelId" />-->
|
||||
|
||||
<el-table-column width="150" label="仓库配送地址" align="center" prop="shipToAddress">
|
||||
<template #default="{ row }">
|
||||
<el-button @click="openAddressDialog(row.shipToAddress)"> 查看详情</el-button>
|
||||
<!-- <el-button @click="openAddressDialog(row.shipToAddress)"> 查看详情</el-button>-->
|
||||
<el-popover placement="left" :width="800" trigger="click">
|
||||
<template #reference>
|
||||
<!-- <el-button style="margin-right: 16px">Click to activate</el-button>-->
|
||||
<el-button plain size="small" type="success"> 点击查看详情</el-button>
|
||||
</template>
|
||||
<el-descriptions title="收货地址信息" :column="3" border>
|
||||
<el-descriptions-item v-for="item in descriptItems" :key="item.prop" :label="item.label">
|
||||
{{ row.shipToAddress[item.prop] || 'N/A' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="亚马逊货件状态" align="center" prop="gmtCreate" width="180">
|
||||
@ -132,7 +175,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">
|
||||
<el-tooltip content="修改" placement="top">
|
||||
@ -318,7 +361,7 @@
|
||||
</template>
|
||||
<template #default>
|
||||
<el-table v-loading="loading" :data="logisticsQuoteList" @selection-change="handleSelectionChange">
|
||||
<el-table-column label="物流商用户ID" align="center" prop="userId" />
|
||||
<el-table-column label="物流商名称" align="center" prop="logisticsName" />
|
||||
<el-table-column label="目的地" align="center" prop="destination" />
|
||||
<el-table-column label="渠道名称" align="center" prop="channelName" />
|
||||
<el-table-column label="基础价格" align="center" prop="price" />
|
||||
@ -477,6 +520,20 @@ const createOrderData = ref<createOrderForm>({
|
||||
logicQuoteId: undefined
|
||||
});
|
||||
|
||||
// 配置项
|
||||
const descriptItems: DescriptItem[] = [
|
||||
{ label: '姓名', prop: 'name' },
|
||||
{ label: '国家', prop: 'countryCode' },
|
||||
{ label: '州/省代码', prop: 'stateOrProvinceCode' },
|
||||
{ label: '城市', prop: 'city' },
|
||||
{ label: '州/省', prop: 'region' },
|
||||
{ label: '地址行1', prop: 'addressLine1' },
|
||||
{ label: '地址行2', prop: 'addressLine2' },
|
||||
{ label: '邮政编码', prop: 'postalCode' },
|
||||
{ label: '电话', prop: 'phone' },
|
||||
{ label: '门牌号', prop: 'doorplate' }
|
||||
];
|
||||
|
||||
const showPop = async (row: any) => {
|
||||
console.log('row', row);
|
||||
};
|
||||
@ -582,6 +639,15 @@ const shipDate = ref(getLocalDate());
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listShipmentPlanOrder(queryParams.value);
|
||||
res.rows.forEach((item) => {
|
||||
item.vendorWeight = item.detailList.reduce((acc, cur) => {
|
||||
return acc + cur.supplierWeight;
|
||||
}, 0);
|
||||
item.logisticsWeight = item.detailList.reduce((acc, cur) => {
|
||||
return acc + cur.logisticsWeight;
|
||||
}, 0);
|
||||
item.weightDiff = item.vendorWeight - item.logisticsWeight;
|
||||
});
|
||||
shipmentPlanList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
@ -776,7 +842,7 @@ const checkPrice = async () => {
|
||||
} else {
|
||||
//显示报价单
|
||||
channelDialogVisible.value = false;
|
||||
drawer.value = true;
|
||||
// drawer.value = true;
|
||||
logisticsQuoteList.value = res.rows;
|
||||
}
|
||||
};
|
||||
|
@ -104,15 +104,61 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="物流中心编码" align="center" prop="destination" />
|
||||
<el-table-column label="总箱子数量" align="center" prop="boxQuantity" />
|
||||
<el-table-column label="箱子尺寸" align="center" prop="boxSize" />
|
||||
<el-table-column label="供应商称重-总重量" align="center" prop="vendorWeight" />
|
||||
<el-table-column label="套数" align="center" prop="setTotal" />
|
||||
<!-- <el-table-column label="总箱子数量" align="center" prop="boxQuantity" />-->
|
||||
<!-- <el-table-column label="箱子尺寸" align="center" prop="boxSize" />-->
|
||||
<!-- <el-table-column label="供应商称重-总重量" align="center" prop="vendorWeight" />-->
|
||||
<!-- <el-table-column label="套数" align="center" prop="setTotal" />-->
|
||||
<!-- <el-table-column label="渠道ID" align="center" prop="channelId" />-->
|
||||
|
||||
<el-table-column label="关联采购单" align="center" prop="sendOrderId">
|
||||
<template #default="scope">
|
||||
<el-popover v-if="scope.row.sendOrderId" placement="top" :width="800" trigger="click">
|
||||
<template #reference>
|
||||
<!-- <el-button style="margin-right: 16px">Click to activate</el-button>-->
|
||||
<el-button size="small" plain v-if="scope.row.sendOrderId" type="success"> 已关联</el-button>
|
||||
</template>
|
||||
<el-descriptions v-if="scope.row.sendOrderId" title="供应商发货单" border :column="2" label-class-name="desc-label">
|
||||
<!-- 订单信息 -->
|
||||
<el-descriptions-item label="订单编号" min-width="120px">
|
||||
{{ scope.row.sendOrder.orderSn }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="产品名称">
|
||||
{{ scope.row.sendOrder.productName }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="总箱数"> {{ scope.row.sendOrder.boxCount }} 箱</el-descriptions-item>
|
||||
<el-descriptions-item label="总重量"> {{ scope.row.sendOrder.weightPerBox }} kg</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="箱体规格">
|
||||
<div v-html="formatText(scope.row.sendOrder.sendDetail)"></div>
|
||||
</el-descriptions-item>
|
||||
|
||||
<!-- <el-descriptions-item label="每箱数量"> {{ scope.row.sendOrder.quantityPerBox }} 件/箱 </el-descriptions-item>-->
|
||||
</el-descriptions>
|
||||
</el-popover>
|
||||
<!-- <el-tooltip class="box-item" effect="dark" content="点击关联采购单" placement="top">-->
|
||||
<!-- <el-button size="small" plain v-if="!scope.row.sendOrderId" type="info" @click="handleLink(scope.row)"> 未关联 </el-button>-->
|
||||
<!-- </el-tooltip>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column label="渠道ID" align="center" prop="channelId" />-->
|
||||
|
||||
<el-table-column width="150" label="仓库配送地址" align="center" prop="shipToAddress">
|
||||
<template #default="{ row }">
|
||||
<el-button @click="openAddressDialog(row.shipToAddress)"> 查看详情</el-button>
|
||||
<!-- <el-button @click="openAddressDialog(row.shipToAddress)"> 查看详情</el-button>-->
|
||||
<el-popover placement="left" :width="800" trigger="click">
|
||||
<template #reference>
|
||||
<!-- <el-button style="margin-right: 16px">Click to activate</el-button>-->
|
||||
<el-button plain size="small" type="success"> 点击查看详情</el-button>
|
||||
</template>
|
||||
<el-descriptions title="收货地址信息" :column="3" border>
|
||||
<el-descriptions-item v-for="item in descriptItems" :key="item.prop" :label="item.label">
|
||||
{{ row.shipToAddress[item.prop] || 'N/A' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="亚马逊货件状态" align="center" prop="gmtCreate" width="180">
|
||||
@ -203,61 +249,11 @@
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog v-model="channelDialogVisible" title="查询报价" width="60%">
|
||||
<!-- <el-radio-group v-model="form.status">-->
|
||||
<!-- <el-radio v-for="dict in biz_transport_channel" :key="dict.value" :value="dict.value">-->
|
||||
<!-- {{ dict.label }}-->
|
||||
<!-- </el-radio>-->
|
||||
<!-- </el-radio-group>-->
|
||||
|
||||
<!-- <el-radio-group v-model="form.status">-->
|
||||
<!-- <!– 按国家分组循环 –>-->
|
||||
<!-- <div v-for="(transportDict, country) in groupedChannels" :key="country">-->
|
||||
<!-- <!– 国家标题 –>-->
|
||||
<!-- <div class="country-title">{{ country }}</div>-->
|
||||
|
||||
<!-- <!– 运输方式子分组 –>-->
|
||||
<!-- <div-->
|
||||
<!-- v-for="(channels, transport) in transportDict"-->
|
||||
<!-- :key="transport"-->
|
||||
<!-- class="transport-group"-->
|
||||
<!-- >-->
|
||||
<!-- <el-radio-->
|
||||
<!-- v-for="dict in channels"-->
|
||||
<!-- :key="dict.value"-->
|
||||
<!-- :value="dict.value"-->
|
||||
<!-- border-->
|
||||
<!-- class="channel-item"-->
|
||||
<!-- >-->
|
||||
<!-- {{ transport }} - {{ getChannelName(dict.label) }}-->
|
||||
<!-- </el-radio>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </el-radio-group>-->
|
||||
<el-form :model="form" label-width="auto" style="max-width: 600px">
|
||||
<el-form-item label="目的地仓库">
|
||||
<el-input v-model="currentDes" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="渠道选择">
|
||||
<!-- <el-collapse v-model="activeCollapse">-->
|
||||
<!-- <!– 遍历国家分组 –>-->
|
||||
<!-- <el-collapse-item v-for="(countryGroup, country) in groupedChannels" :key="country" :title="getCountryName(country)" :name="country">-->
|
||||
<!-- <!– 遍历运输方式 –>-->
|
||||
<!-- <div v-for="(methodGroup, method) in countryGroup" :key="method">-->
|
||||
<!-- <div class="shipping-method-title">-->
|
||||
<!-- {{ getShippingMethodName(method) }}-->
|
||||
<!-- </div>-->
|
||||
<!-- <el-radio-group v-model="selectedChannel" @change="handleChannelSelect">-->
|
||||
<!-- <!– 遍历具体渠道 –>-->
|
||||
<!-- <div v-for="channel in methodGroup" :key="channel.id" class="channel-item">-->
|
||||
<!-- <el-radio :label="channel.id">-->
|
||||
<!-- {{ getChannelLabel(channel.channelName) }}-->
|
||||
<!-- </el-radio>-->
|
||||
<!-- <div class="channel-description">{{ channel.description }}</div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </el-radio-group>-->
|
||||
<!-- </div>-->
|
||||
<!-- </el-collapse-item>-->
|
||||
<!-- </el-collapse>-->
|
||||
<el-cascader
|
||||
v-model="selectedChannel"
|
||||
placeholder="请选择渠道"
|
||||
@ -269,7 +265,7 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="日期选择">
|
||||
<el-date-picker v-model="shipDate" type="date" placeholder="Pick a day" value-format="YYYY-MM-DD" :size="size" />
|
||||
<el-date-picker v-model="shipDate" type="date" placeholder="Pick a day" value-format="YYYY-MM-DD" :size="'default'" />
|
||||
</el-form-item>
|
||||
<el-button :loading="buttonLoading" type="primary" @click="checkPrice()">查询报价</el-button>
|
||||
</el-form>
|
||||
@ -330,10 +326,11 @@
|
||||
</template>
|
||||
<template #default>
|
||||
<el-table v-loading="loading" :data="logisticsQuoteList" @selection-change="handleSelectionChange">
|
||||
<el-table-column label="物流商用户ID" align="center" prop="userId" />
|
||||
<el-table-column label="物流商名称" align="center" prop="logisticsName" />
|
||||
<el-table-column label="目的地" align="center" prop="destination" />
|
||||
<el-table-column label="渠道名称" align="center" prop="channelName" />
|
||||
<el-table-column label="基础价格" align="center" prop="price" />
|
||||
<el-table-column label="最短时效" align="center" prop="minLeadTime" />
|
||||
<el-table-column label="时效" align="center" prop="leadTime" />
|
||||
<el-table-column label="附加费" align="center" prop="surcharge" />
|
||||
<el-table-column label="报价生效日期" align="center" prop="quoteDate" width="120">
|
||||
@ -341,11 +338,19 @@
|
||||
<span>{{ parseTime(scope.row.quoteDate, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="提交状态" align="center" prop="isSubmitted" />
|
||||
<el-table-column label="报价备注" align="center" prop="remark" />
|
||||
<el-table-column label="渠道类型" align="center" prop="channelType" />
|
||||
<el-table-column label="是否双清包税" align="center" prop="isDdp" />
|
||||
<el-table-column label="提交状态" align="center" prop="isSubmitted">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="sys_yes_no" :value="scope.row.isSubmitted" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="渠道类型" align="center" prop="channelType" />-->
|
||||
<el-table-column label="是否双清包税" align="center" prop="isDdp">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="sys_yes_no" :value="scope.row.isDdp" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位" align="center" prop="unit" />
|
||||
<el-table-column label="报价备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button text size="small" type="primary" @click="createOrder(scope.row)" v-hasPermi="['amz:shipmentPlan:edit']">
|
||||
@ -375,12 +380,12 @@ import {
|
||||
takeTodayAmzPlanData
|
||||
} from '@/api/amz/shipmentPlan';
|
||||
import { listAllLogisticsChannel } from '@/api/amz/logisticsChannel';
|
||||
import type { DrawerProps } from 'element-plus';
|
||||
import { DrawerProps, ElNotification } from 'element-plus';
|
||||
import { createWithDesAndChannel, queryWithDesAndChannel } from '@/api/amz/inquiryRequest';
|
||||
|
||||
import { queryLogisticsQuote, queryLogisticsQuoteWithDes } from '@/api/amz/logisticsQuote';
|
||||
|
||||
import { ShipmentPlanVO, ShipmentPlanQuery, ShipmentPlanForm } from '@/api/amz/shipmentPlan/types';
|
||||
import { ShipmentPlanVO, ShipmentPlanQuery, ShipmentPlanForm, DescriptItem } from '@/api/amz/shipmentPlan/types';
|
||||
import { ElTable } from 'element-plus';
|
||||
import { LogisticsQuoteVO } from '@/api/amz/logisticsQuote/types';
|
||||
import { createOrderForm } from '@/api/amz/logisticsOrder/types';
|
||||
@ -388,6 +393,7 @@ import { createLogisticsOrder } from '@/api/amz/logisticsOrder';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { biz_transport_channel } = toRefs<any>(proxy?.useDict('biz_transport_channel'));
|
||||
const { sys_yes_no } = toRefs<any>(proxy?.useDict('sys_yes_no'));
|
||||
|
||||
const { sys_zero_one } = toRefs<any>(proxy?.useDict('sys_zero_one'));
|
||||
|
||||
@ -408,6 +414,20 @@ const dialog = reactive<DialogOption>({
|
||||
title: ''
|
||||
});
|
||||
|
||||
// 配置项
|
||||
const descriptItems: DescriptItem[] = [
|
||||
{ label: '姓名', prop: 'name' },
|
||||
{ label: '国家', prop: 'countryCode' },
|
||||
{ label: '州/省代码', prop: 'stateOrProvinceCode' },
|
||||
{ label: '城市', prop: 'city' },
|
||||
{ label: '州/省', prop: 'region' },
|
||||
{ label: '地址行1', prop: 'addressLine1' },
|
||||
{ label: '地址行2', prop: 'addressLine2' },
|
||||
{ label: '邮政编码', prop: 'postalCode' },
|
||||
{ label: '电话', prop: 'phone' },
|
||||
{ label: '门牌号', prop: 'doorplate' }
|
||||
];
|
||||
|
||||
const initFormData: ShipmentPlanForm = {
|
||||
id: undefined,
|
||||
sid: undefined,
|
||||
@ -727,7 +747,13 @@ const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
};
|
||||
const formatText = (text) => {
|
||||
// 1. 转义HTML特殊字符
|
||||
const escaped = String(text).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
||||
|
||||
// 2. 替换换行符
|
||||
return escaped.replace(/\n/g, '<br>');
|
||||
};
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
@ -819,7 +845,13 @@ const checkPrice = async () => {
|
||||
// if (res2.code == 200) {
|
||||
// ElMessage({
|
||||
|
||||
ElMessage.warning('暂时没有物流商报价');
|
||||
// ElMessage.warning('暂时没有物流商报价');
|
||||
ElNotification({
|
||||
title: '警告',
|
||||
message: '暂时没有物流商报价',
|
||||
type: 'warning',
|
||||
duration: 3000
|
||||
});
|
||||
} else {
|
||||
//显示报价单
|
||||
// ElMessage.success('已经有人报价了');
|
||||
|
@ -1,14 +1,52 @@
|
||||
<template>
|
||||
<div class="app-container home">
|
||||
<el-row :gutter="20">
|
||||
<el-col :sm="24" :lg="12" style="padding-left: 20px">
|
||||
<h2>物流商管理系统</h2>
|
||||
</el-col>
|
||||
<!-- <el-row :gutter="20" class="mb20">-->
|
||||
<!-- <el-col :span="6">-->
|
||||
<!-- <el-card shadow="hover" body-class="card-body">-->
|
||||
<!-- <el-icon class="card-icon bg1">-->
|
||||
<!-- <User />-->
|
||||
<!-- </el-icon>-->
|
||||
<!-- <div class="card-content">-->
|
||||
<!-- <countup class="card-num color1" :end="6666" />-->
|
||||
<!-- <div>用户访问量</div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </el-card>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="6">-->
|
||||
<!-- <el-card shadow="hover" body-class="card-body">-->
|
||||
<!-- <el-icon class="card-icon bg2">-->
|
||||
<!-- <ChatDotRound />-->
|
||||
<!-- </el-icon>-->
|
||||
<!-- <div class="card-content">-->
|
||||
<!-- <countup class="card-num color2" :end="168" />-->
|
||||
<!-- <div>系统消息</div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </el-card>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="6">-->
|
||||
<!-- <el-card shadow="hover" body-class="card-body">-->
|
||||
<!-- <el-icon class="card-icon bg3">-->
|
||||
<!-- <Goods />-->
|
||||
<!-- </el-icon>-->
|
||||
<!-- <div class="card-content">-->
|
||||
<!-- <countup class="card-num color3" :end="8888" />-->
|
||||
<!-- <div>商品数量</div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </el-card>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="6">-->
|
||||
<!-- <el-card shadow="hover" body-class="card-body">-->
|
||||
<!-- <el-icon class="card-icon bg4">-->
|
||||
<!-- <ShoppingCartFull />-->
|
||||
<!-- </el-icon>-->
|
||||
<!-- <div class="card-content">-->
|
||||
<!-- <countup class="card-num color4" :end="568" />-->
|
||||
<!-- <div>今日订单量</div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </el-card>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- </el-row>-->
|
||||
|
||||
<el-col :sm="24" :lg="12" style="padding-left: 20px">
|
||||
<h2>物流商管理系统</h2>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-divider />
|
||||
</div>
|
||||
</template>
|
||||
@ -16,6 +54,7 @@
|
||||
<script setup name="Index" lang="ts">
|
||||
import { queryLogisticsOrder } from '@/api/amz/logisticsOrder';
|
||||
import { Action } from 'element-plus';
|
||||
import { ChatDotRound, Goods, ShoppingCartFull, User } from '@element-plus/icons-vue';
|
||||
|
||||
const goTarget = (url: string) => {
|
||||
window.open(url, '__blank');
|
||||
@ -48,7 +87,30 @@ onMounted(async () => {
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<style>
|
||||
.card-body {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 100px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.bg1 {
|
||||
background: #2d8cf0;
|
||||
}
|
||||
|
||||
.bg2 {
|
||||
background: #64d572;
|
||||
}
|
||||
|
||||
.bg3 {
|
||||
background: #f25e43;
|
||||
}
|
||||
|
||||
.bg4 {
|
||||
background: #e9a745;
|
||||
}
|
||||
</style>
|
||||
<style scoped lang="scss">
|
||||
.home {
|
||||
blockquote {
|
||||
@ -113,4 +175,57 @@ onMounted(async () => {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.countup {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.card-content {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
color: #999;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.card-num {
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
.card-icon {
|
||||
font-size: 50px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
text-align: center;
|
||||
line-height: 100px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.color0 {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.color1 {
|
||||
color: #2d8cf0;
|
||||
}
|
||||
|
||||
.color2 {
|
||||
color: #64d572;
|
||||
}
|
||||
|
||||
.color3 {
|
||||
color: #f25e43;
|
||||
}
|
||||
|
||||
.color4 {
|
||||
color: #e9a745;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
</style>
|
||||
|
@ -2,8 +2,8 @@
|
||||
<div class="login">
|
||||
<el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
|
||||
<div class="title-box">
|
||||
<h3 class="title">瑷胜科技管理系统</h3>
|
||||
<lang-select />
|
||||
<h3 class="title">香港SMT订单物流管理系统</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%">-->
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="register">
|
||||
<el-form ref="registerRef" :model="registerForm" :rules="registerRules" class="register-form">
|
||||
<div class="title-box">
|
||||
<h3 class="title">瑷胜科技管理系统</h3>
|
||||
<h3 class="title">香港SMT订单物流管理系统</h3>
|
||||
<lang-select />
|
||||
</div>
|
||||
<el-form-item v-if="tenantEnabled" prop="tenantId">
|
||||
|
@ -96,7 +96,14 @@
|
||||
<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[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" />
|
||||
|
@ -14,13 +14,13 @@
|
||||
</div>
|
||||
<ul class="list-group list-group-striped">
|
||||
<li class="list-group-item">
|
||||
<svg-icon icon-class="user" />
|
||||
<svg-icon icon-class="my-copy" />
|
||||
用户登录名
|
||||
<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">
|
||||
@ -33,6 +33,11 @@
|
||||
用户邮箱
|
||||
<div class="pull-right">{{ state.user.email }}</div>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<svg-icon icon-class="company" />
|
||||
地址
|
||||
<div class="pull-right">{{ state.user.address }}</div>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<svg-icon icon-class="tree" />
|
||||
所属部门
|
||||
|
@ -9,6 +9,9 @@
|
||||
<el-form-item label="邮箱" prop="email">
|
||||
<el-input v-model="userForm.email" maxlength="50" />
|
||||
</el-form-item>
|
||||
<el-form-item label="地址" prop="address">
|
||||
<el-input v-model="userForm.address" maxlength="500" />
|
||||
</el-form-item>
|
||||
<el-form-item label="性别">
|
||||
<el-radio-group v-model="userForm.sex">
|
||||
<el-radio value="0">男</el-radio>
|
||||
|
Loading…
x
Reference in New Issue
Block a user