出库对接

This commit is contained in:
zx
2026-04-14 08:46:29 +08:00
parent b16dd22d70
commit 6f1db0f92e
30 changed files with 1366 additions and 458 deletions

View File

@@ -1,6 +1,6 @@
//存放主站域名
// const BASE_URL = 'http://192.168.1.5:8082' // w
const BASE_URL = 'http://192.168.1.9:8082' // 正式环境接口
const BASE_URL = "http://192.168.1.9:8082"; // yx
// const BASE_URL = 'http://47.100.212.83:18088' // 正式环境接口
// const BASE_URL = 'http://192.168.1.9:8088' // 测试环境接口
// const BASE_URL = 'http://192.168.1.5:8088' // 测试环境接口
@@ -9,7 +9,12 @@ const BASE_URL_IMG = BASE_URL + "/img/upload"; // 上传图片
let requestRecords = {};
// 重复请求拦截时间(毫秒)
const INTERCEPT_DURATION = 2000;
const request = (url, data = {}, method = "GET", ContentType = "application/json") => {
const request = (
url,
data = {},
method = "GET",
ContentType = "application/json",
) => {
const requestObj = {
data,
url,
@@ -119,29 +124,35 @@ const request = (url, data = {}, method = "GET", ContentType = "application/json
// 图片
const Upload = (url, source, formData) => {
console.log("进入上传方法", url, source, formData);
const ContentType = "application/json";
return new Promise(function (resolve, reject) {
console.log(source)
console.log(source);
let header = {};
if (uni.getStorageSync("app_token")) {
header = {
// 'Content-Type': ContentType,
"Content-Type": ContentType,
authorization: uni.getStorageSync("app_token"),
// Accept: "application/json",
// "Content-Type": "multipart/form-data",
};
}
console.log(BASE_URL + url, source, formData, header)
console.log(typeof source === 'string' ? { filePath: source } : { files: source })
console.log(BASE_URL + url, source, formData, header);
console.log(
typeof source === "string" ? { filePath: source } : { files: source },
);
uni.uploadFile({
url: BASE_URL + url,
...(typeof source === 'string'
? { filePath: source } // 单文件使用filePath
: { files: source } // 多文件使用files
),
name: 'files',
...(typeof source === "string"
? { filePath: source } // 单文件使用filePath
: { files: source }), // 多文件使用files
name: "files",
formData,
// name,
header,
success: function (res) {
console.log(res)
console.log("成功返回res", res);
let obj1 = JSON.parse(res.data);
uni.hideLoading();
if (obj1.code !== 200) {
@@ -156,12 +167,12 @@ const Upload = (url, source, formData) => {
icon: "success",
duration: 1000,
});
resolve(obj1)
resolve(obj1);
}
},
fail: function (err) {
console.log(err)
console.log(JSON.stringify(err), "失败999");
console.log("失败返回err", err);
console.log("失败999", JSON.stringify(err));
uni.hideLoading();
uni.showToast({
title: "加载失败, 请稍后再试!",
@@ -229,5 +240,163 @@ const UploadFile = (url, data = {}, source) => {
});
});
};
/**
* 多文件上传(支持并行/串行)
* @param {Array} files - 要上传的文件数组
* @param {Boolean} sequential - 是否串行上传(默认 false = 并行)
* @returns {Promise<Array>} - 所有文件的上传结果(含成功/失败信息)
*/
const uploadMultipleFiles = async (
url,
files,
formData,
sequential = false,
) => {
let header = {};
if (uni.getStorageSync("app_token")) {
header = {
authorization: uni.getStorageSync("app_token"),
};
}
// 2. 并行上传逻辑
if (!sequential) {
// 循环生成每个文件的上传 Promise
const uploadPromises = files.map((file, index) => {
return new Promise((resolve) => {
uni.uploadFile({
url: BASE_URL + url,
filePath: file,
name: "file",
header,
formData,
// 上传成功处理
success: (res) => {
try {
const result = JSON.parse(res.data);
console.log("成功,", res);
if (result.code === 200 && result.data?.url) {
resolve({
index, // 保留原文件在数组中的索引(方便对应)
file, // 原始文件信息
url: result.data.url, // 上传后的 URL
success: true,
error: null,
});
} else {
// 后端返回失败(如文件格式不允许)
resolve({
index,
file,
url: null,
success: false,
error: new Error(result.msg || "文件上传失败"),
});
}
} catch (e) {
resolve({
index,
file,
url: null,
success: false,
error: new Error("上传结果解析失败:" + e.message),
});
}
},
fail: (err) => {
resolve({
index,
file,
url: null,
success: false,
error: new Error("上传请求失败:" + err.errMsg),
});
},
});
});
});
console.log(uploadPromises, "uploadPromises1111");
// 等待所有请求完成,返回统一结果
return Promise.allSettled(uploadPromises).then((results) => {
// 提取实际结果allSettled 返回的是 {status, value} 结构)
return results.map((res) => res.value);
});
} // 接上文的 if (!sequential) 之后
else {
const uploadResults = []; // 存储所有结果
// 递归函数:上传第 index 个文件
const uploadNext = (index) => {
// 终止条件:所有文件处理完,返回结果
if (index >= files.length) {
return Promise.resolve(uploadResults);
}
const currentFile = files[index];
return new Promise((resolve) => {
uni.uploadFile({
url: BASE_URL + url,
filePath: currentFile,
name: "file",
header,
success: (res) => {
try {
const result = JSON.parse(res.data);
if (result.code === 200 && result.data?.url) {
uploadResults.push({
index,
file: currentFile,
url: result.data.fileUrlList[0].url,
success: true,
error: null,
});
} else {
uploadResults.push({
index,
file: currentFile,
url: null,
success: false,
error: new Error(result.msg || "文件上传失败"),
});
}
// 上传下一个文件(递归)
resolve(uploadNext(index + 1));
} catch (e) {
uploadResults.push({
index,
file: currentFile,
url: null,
success: false,
error: new Error("解析失败:" + e.message),
});
resolve(uploadNext(index + 1));
}
},
fail: (err) => {
uploadResults.push({
index,
file: currentFile,
url: null,
success: false,
error: new Error("请求失败:" + err.errMsg),
});
resolve(uploadNext(index + 1)); // 即使失败,也继续传下一个(可按需修改)
},
});
});
};
// 从第 0 个文件开始上传
return uploadNext(0);
}
};
// form表单
export { BASE_URL, BASE_URL_IMG, request, Upload, UploadFile };
export {
BASE_URL,
BASE_URL_IMG,
request,
Upload,
UploadFile,
uploadMultipleFiles,
};

46
api/stockOut.js Normal file
View File

@@ -0,0 +1,46 @@
import { request, Upload,uploadMultipleFiles } from "./request";
const api = "/worn/outboundBill/";
// 新建:出库单
const addStockOut = (params) => {
return request(api + "add", params, "POST");
};
// 列表
const stockOutList = (params) => {
return request(api + "list", params, "get");
};
// 详情
const stockOutDetail = (params) => {
return request("/worn/outboundItem/getByBillNo", params, "post");
};
// 编辑
const stockOutUpdate = (params) => {
return request("/worn/outboundItem/update", params, "post");
};
// 出库
const outBoundFinish = (params) => {
return request("/worn/outboundBill/complete", params, "post");
};
// 添加技术鉴定表
const addWithFiles = (params) => {
return request("/worn/appraisal/addWithFiles", params, "post");
};
// 技术鉴定表
const myList = (params) => {
return request("/worn/appraisal/myList", params, "get");
};
// 上传图片
const uploadTechnicalFile = (files, formData) => {
return uploadMultipleFiles("/worn/technicalFile/upload", files, formData,true);
};
export {
addStockOut,
stockOutList,
stockOutDetail,
stockOutUpdate,
outBoundFinish,
addWithFiles,
uploadTechnicalFile,
myList
};

View File

@@ -1,4 +1,5 @@
import { request } from "./request";
// /unique/code/getMaterialInfo
// 列表:物料列表
const getMaterial = (params) => {
return request("/worn/material/list", params, 'GET');
@@ -27,6 +28,10 @@ const detailUniqueCode = (params) => {
const getMaterialUnique = (params) => {
return request(`/unique/code/materialInfo/${params.code}`, params, 'GET');
};
// 详情:通过唯一码获取物料信息
const getMaterialByQrCodeInfo = (params) => {
return request('/unique/code/getMaterialInfo', params, 'POST');
};
export {
getMaterial,
@@ -35,5 +40,6 @@ export {
delUniqueCode,
detailUniqueCode,
editUniqueCode,
getMaterialUnique
getMaterialUnique,
getMaterialByQrCodeInfo
};