出库对接
This commit is contained in:
201
api/request.js
201
api/request.js
@@ -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
46
api/stockOut.js
Normal 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
|
||||
};
|
||||
@@ -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
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user