feat(ship): 实现发货单据生成功能
- 新增发货单据生成接口及类型定义 - 优化创建页面逻辑,支持单据预览与下载 - 调整表单字段结构,增强数据完整性校验 - 更新司机信息字段命名以提高语义清晰度 - 重构部分页面交互流程,提升用户体验
This commit is contained in:
parent
e1d4824ad8
commit
835cc21315
@ -18,6 +18,7 @@ import Taro from "@tarojs/taro";
|
||||
import classNames from "classnames";
|
||||
import { business } from "@/services";
|
||||
import dayjs from "dayjs";
|
||||
import buildUrl from "@/utils/buildUrl";
|
||||
|
||||
export default hocAuth(function Page(props: CommonComponent) {
|
||||
const { router, setLoading } = props;
|
||||
@ -59,7 +60,7 @@ export default hocAuth(function Page(props: CommonComponent) {
|
||||
const [height, setHeight] = useState<number>();
|
||||
const [shipOrderVO, setShipOrderVO] = useState<BusinessAPI.ShipOrderVO>();
|
||||
const [deliveryTemplate, setDeliveryTemplate] = useState<string>();
|
||||
const [previewUrl, setPreviewUrl] = useState<string>();
|
||||
const [shipDocument, setShipDocument] = useState<string>();
|
||||
|
||||
// 表单错误状态
|
||||
const [formErrors, setFormErrors] = useState<{
|
||||
@ -71,6 +72,7 @@ export default hocAuth(function Page(props: CommonComponent) {
|
||||
}>({});
|
||||
|
||||
const init = async (shipOrderId: BusinessAPI.ShipOrderVO["shipOrderId"]) => {
|
||||
setLoading(true);
|
||||
const { data } = await business.shipOrder.showShipOrder({
|
||||
shipOrderShowQry: {
|
||||
shipOrderId,
|
||||
@ -79,6 +81,10 @@ export default hocAuth(function Page(props: CommonComponent) {
|
||||
const shipOrderVO = data.data;
|
||||
if (shipOrderVO) {
|
||||
setShipOrderVO(shipOrderVO);
|
||||
if (shipOrderVO.shipDocument) {
|
||||
setStep(3);
|
||||
setShipDocument(shipOrderVO.shipDocument);
|
||||
}
|
||||
|
||||
const { data } = await business.dealer.showDealer({
|
||||
dealerShowQry: {
|
||||
@ -88,6 +94,7 @@ export default hocAuth(function Page(props: CommonComponent) {
|
||||
|
||||
setDeliveryTemplate(data.data?.deliveryTemplate!);
|
||||
}
|
||||
setLoading(false);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
@ -1214,8 +1221,54 @@ export default hocAuth(function Page(props: CommonComponent) {
|
||||
},
|
||||
});
|
||||
|
||||
// 存储 至 shipOrder previewUrl
|
||||
if (shipOrderVO) {
|
||||
let formData: BusinessAPI.ShipOrderGenerateDocumentCmd = {
|
||||
shipOrderId: shipOrderVO?.shipOrderId,
|
||||
shipDocument: data.path,
|
||||
};
|
||||
// 检查各模块中的必填字段是否已填写
|
||||
for (const module of moduleList) {
|
||||
const contentSchema = module.schemas.find(
|
||||
(schema) => schema.title === "内容配置",
|
||||
);
|
||||
|
||||
if (
|
||||
!contentSchema ||
|
||||
!contentSchema.columns ||
|
||||
contentSchema.columns.length === 0
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const column of contentSchema.columns) {
|
||||
// 检查西瓜品级字段是否开启且已填写
|
||||
if (column.dataIndex === "requiredWatermelonGrade") {
|
||||
formData.watermelonGrade = shipOrderVO?.watermelonGrade;
|
||||
}
|
||||
// 检查发货地字段是否开启且已填写
|
||||
else if (column.dataIndex === "requiredShippingFrom") {
|
||||
formData.shippingAddress = shipOrderVO?.shippingAddress;
|
||||
}
|
||||
// 检查预计到仓时间字段是否开启且已填写
|
||||
else if (column.dataIndex === "requiredEstimatedArrivalTime") {
|
||||
formData.estimatedArrivalDate = shipOrderVO?.estimatedArrivalDate;
|
||||
}
|
||||
// 检查备注字段是否开启且已填写
|
||||
else if (column.dataIndex === "requiredRemarks") {
|
||||
formData.remark = shipOrderVO?.remark;
|
||||
}
|
||||
// 检查品级字段是否开启且已填写
|
||||
else if (column.dataIndex === "requiredGrade") {
|
||||
formData.shipOrderItemList = shipOrderVO?.shipOrderItemList;
|
||||
}
|
||||
}
|
||||
}
|
||||
business.shipOrder.generateDocumentShipOrder(formData).then();
|
||||
}
|
||||
|
||||
if (data && data.path) {
|
||||
setPreviewUrl(data.path);
|
||||
setShipDocument(data.path);
|
||||
// 保存到系统相册
|
||||
Taro.downloadFile({
|
||||
url: data.path,
|
||||
@ -1261,10 +1314,7 @@ export default hocAuth(function Page(props: CommonComponent) {
|
||||
setFormErrors({});
|
||||
// 重新加载初始数据
|
||||
if (shipOrderId) {
|
||||
setLoading(true);
|
||||
init(shipOrderId).then(() => {
|
||||
setLoading(false);
|
||||
});
|
||||
init(shipOrderId).then();
|
||||
}
|
||||
};
|
||||
|
||||
@ -1366,10 +1416,10 @@ export default hocAuth(function Page(props: CommonComponent) {
|
||||
duration: 2000,
|
||||
});
|
||||
|
||||
if (previewUrl) {
|
||||
if (shipDocument) {
|
||||
// 保存到系统相册
|
||||
Taro.downloadFile({
|
||||
url: previewUrl,
|
||||
url: shipDocument,
|
||||
}).then((downloadRes) => {
|
||||
console.log("downloadRes", downloadRes);
|
||||
if (downloadRes.tempFilePath) {
|
||||
@ -2116,7 +2166,7 @@ export default hocAuth(function Page(props: CommonComponent) {
|
||||
</View>
|
||||
)}
|
||||
|
||||
{step === 3 && previewUrl && (
|
||||
{step === 3 && shipDocument && (
|
||||
<View className="flex flex-1 flex-col items-center justify-center rounded-lg bg-white p-4 shadow-md">
|
||||
<View className="mb-6 flex h-16 w-16 items-center justify-center rounded-full bg-green-100">
|
||||
<Text className="text-2xl text-green-600">✓</Text>
|
||||
@ -2216,9 +2266,13 @@ export default hocAuth(function Page(props: CommonComponent) {
|
||||
type="default"
|
||||
block
|
||||
size={"large"}
|
||||
onClick={regenerateDocument}
|
||||
onClick={() =>
|
||||
Taro.switchTab({
|
||||
url: buildUrl("/pages/main/index/index"),
|
||||
})
|
||||
}
|
||||
>
|
||||
重新生成
|
||||
返回首页
|
||||
</Button>
|
||||
</View>
|
||||
)}
|
||||
@ -2228,9 +2282,9 @@ export default hocAuth(function Page(props: CommonComponent) {
|
||||
type="primary"
|
||||
block
|
||||
size={"large"}
|
||||
onClick={() => Taro.navigateBack()}
|
||||
onClick={regenerateDocument}
|
||||
>
|
||||
完成
|
||||
重新生成
|
||||
</Button>
|
||||
</View>
|
||||
)}
|
||||
|
||||
@ -35,6 +35,36 @@ export async function destroyShipOrder(
|
||||
});
|
||||
}
|
||||
|
||||
/** 发货单生成单据 PUT /operation/generateDocumentShipOrder */
|
||||
export async function generateDocumentShipOrder(
|
||||
body: BusinessAPI.ShipOrderGenerateDocumentCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>("/operation/generateDocumentShipOrder", {
|
||||
method: "PUT",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 发货单生成单据 PATCH /operation/generateDocumentShipOrder */
|
||||
export async function generateDocumentShipOrder1(
|
||||
body: BusinessAPI.ShipOrderGenerateDocumentCmd,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<BusinessAPI.Response>("/operation/generateDocumentShipOrder", {
|
||||
method: "PATCH",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** 发货单列表 GET /operation/listShipOrder */
|
||||
export async function listShipOrder(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
|
||||
@ -3309,6 +3309,10 @@ declare namespace BusinessAPI {
|
||||
};
|
||||
|
||||
type ShipOrderCreateCmd = {
|
||||
/** 创建人ID */
|
||||
createdBy: string;
|
||||
/** 创建人姓名 */
|
||||
createdByName?: string;
|
||||
/** 发货单ID */
|
||||
shipOrderId: string;
|
||||
/** 采购单ID */
|
||||
@ -3327,6 +3331,8 @@ declare namespace BusinessAPI {
|
||||
watermelonGrade?: string;
|
||||
/** 司机姓名 */
|
||||
driverName?: string;
|
||||
/** 司机手机号 */
|
||||
driverPhone?: string;
|
||||
/** 车牌号码 */
|
||||
licensePlate?: string;
|
||||
/** 运费欠款(元) */
|
||||
@ -3349,10 +3355,6 @@ declare namespace BusinessAPI {
|
||||
farmerInfo?: string;
|
||||
/** 备注 */
|
||||
remark?: string;
|
||||
/** 创建人ID */
|
||||
createdBy: string;
|
||||
/** 创建人姓名 */
|
||||
createdByName?: string;
|
||||
};
|
||||
|
||||
type ShipOrderDestroyCmd = {
|
||||
@ -3360,6 +3362,27 @@ declare namespace BusinessAPI {
|
||||
shipOrderId: string;
|
||||
};
|
||||
|
||||
type ShipOrderGenerateDocumentCmd = {
|
||||
/** 发货单ID */
|
||||
shipOrderId: string;
|
||||
/** 预计到仓时间 */
|
||||
estimatedArrivalDate?: string;
|
||||
/** 西瓜品级 */
|
||||
watermelonGrade?: string;
|
||||
/** 发货地址 */
|
||||
shippingAddress?: string;
|
||||
/** 备注 */
|
||||
remark?: string;
|
||||
/** 发货单明细 */
|
||||
shipOrderItemList?: ShipOrderItem[];
|
||||
/** 发货单据 */
|
||||
shipDocument?: string;
|
||||
/** 采购底单 */
|
||||
purchaseDocument?: string;
|
||||
/** 成本单据 */
|
||||
costDocument?: string;
|
||||
};
|
||||
|
||||
type ShipOrderItem = {
|
||||
/** 发货单子项ID */
|
||||
itemId: string;
|
||||
@ -3428,13 +3451,6 @@ declare namespace BusinessAPI {
|
||||
status?: boolean;
|
||||
/** 发货单ID */
|
||||
shipOrderId?: string;
|
||||
/** 发货单状态:1_待回款;2_部分回款;3_已回款;4_拒收完结;5_已完结; */
|
||||
state?:
|
||||
| "WAIT_PAYMENT"
|
||||
| "PARTIAL_PAYMENT"
|
||||
| "FULL_PAYMENT"
|
||||
| "REJECT_FINISH"
|
||||
| "FINISH";
|
||||
offset?: number;
|
||||
};
|
||||
|
||||
@ -3450,48 +3466,22 @@ declare namespace BusinessAPI {
|
||||
type ShipOrderUpdateCmd = {
|
||||
/** 发货单ID */
|
||||
shipOrderId: string;
|
||||
/** 采购单ID */
|
||||
purchaseOrderId: string;
|
||||
/** 发货单编号 */
|
||||
orderSn?: string;
|
||||
/** 发货地址 */
|
||||
shippingAddress?: string;
|
||||
/** 收货地址 */
|
||||
receivingAddress?: string;
|
||||
/** 发货日期 */
|
||||
shippingDate?: string;
|
||||
/** 预计到仓时间 */
|
||||
estimatedArrivalDate?: string;
|
||||
/** 西瓜品级 */
|
||||
watermelonGrade?: string;
|
||||
/** 司机姓名 */
|
||||
driverName?: string;
|
||||
/** 车牌号码 */
|
||||
licensePlate?: string;
|
||||
/** 运费欠款(元) */
|
||||
freightDebt?: number;
|
||||
/** 草帘欠款(元) */
|
||||
strawMatDebt?: number;
|
||||
/** 商标费(元) */
|
||||
trademarkFee?: number;
|
||||
/** 人工费(元) */
|
||||
laborFee?: number;
|
||||
/** 纸箱费(元) */
|
||||
cartonFee?: number;
|
||||
/** 打码费(元) */
|
||||
codingFee?: number;
|
||||
/** 计提费(元) */
|
||||
provisionFee?: number;
|
||||
/** 合计金额(元) */
|
||||
totalAmount?: number;
|
||||
/** 瓜农姓名逗号隔开 */
|
||||
farmerInfo?: string;
|
||||
/** 发货地址 */
|
||||
shippingAddress?: string;
|
||||
/** 备注 */
|
||||
remark?: string;
|
||||
/** 创建人ID */
|
||||
createdBy: string;
|
||||
/** 创建人姓名 */
|
||||
createdByName?: string;
|
||||
/** 发货单明细 */
|
||||
shipOrderItemList?: ShipOrderItem[];
|
||||
/** 发货单据 */
|
||||
shipDocument?: string;
|
||||
/** 采购底单 */
|
||||
purchaseDocument?: string;
|
||||
/** 成本单据 */
|
||||
costDocument?: string;
|
||||
};
|
||||
|
||||
type ShipOrderVO = {
|
||||
@ -3509,7 +3499,8 @@ declare namespace BusinessAPI {
|
||||
warehouseId?: string;
|
||||
/** 仓库名称 */
|
||||
warehouseName?: string;
|
||||
vehicleNo: string;
|
||||
/** 车次号 */
|
||||
vehicleNo?: string;
|
||||
/** 发货地址 */
|
||||
shippingAddress?: string;
|
||||
/** 收货地址 */
|
||||
@ -3522,7 +3513,7 @@ declare namespace BusinessAPI {
|
||||
watermelonGrade?: string;
|
||||
/** 司机姓名 */
|
||||
driverName?: string;
|
||||
/** 司机手机 */
|
||||
/** 司机手机号 */
|
||||
driverPhone?: string;
|
||||
/** 车牌号码 */
|
||||
licensePlate?: string;
|
||||
@ -3544,6 +3535,12 @@ declare namespace BusinessAPI {
|
||||
totalAmount?: number;
|
||||
/** 瓜农姓名逗号隔开 */
|
||||
farmerInfo?: string;
|
||||
/** 发货单据 */
|
||||
shipDocument?: string;
|
||||
/** 采购底单 */
|
||||
purchaseDocument?: string;
|
||||
/** 成本单据 */
|
||||
costDocument?: string;
|
||||
/** 发货单状态:1_待回款;2_部分回款;3_已回款;4_拒收完结;5_已完结; */
|
||||
state?:
|
||||
| "WAIT_PAYMENT"
|
||||
|
||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user