发货包裹选择
This commit is contained in:
74
.idea/workspace.xml
generated
74
.idea/workspace.xml
generated
@ -5,22 +5,15 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="bdad98b9-7a5e-48f7-b79e-ed6a34d55dab" name="Default Changelist" comment="第一次提交">
|
<list default="true" id="bdad98b9-7a5e-48f7-b79e-ed6a34d55dab" name="Default Changelist" comment="第一次提交">
|
||||||
<change afterPath="$PROJECT_DIR$/src/main/webapp/static/core/js/assets/index-DVoHNO1Y.js" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/controller/dto/ApprovalUpdateAddressDto.java" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/src/main/webapp/static/core/js/assets/index-DiwrgTda.css" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/controller/dto/GoodsDeDto.java" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/src/main/webapp/static/core/js/assets/react-CHdo91hT.svg" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/controller/dto/LogisticsDto.java" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/src/main/webapp/static/core/js/base/tailwindcss.js" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/controller/dto/PackageDto.java" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/src/main/webapp/static/core/js/react/react-dom.production.min.js" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/src/main/webapp/static/core/js/base/babel.min.js" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/src/main/webapp/static/core/js/react/react.production.min.js" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/src/main/webapp/static/dist/order_logistics/index-BMTRAcdn.css" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/src/main/webapp/static/dist/order_logistics/index-ClekkQW0.js" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/src/main/webapp/static/dist/order_logistics/react-CHdo91hT.svg" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/api/OrderApi.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/api/OrderApi.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/api/dto/EditOrderAddressDto.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/api/dto/EditOrderAddressDto.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/controller/OrderController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/controller/OrderController.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/controller/OrderController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/controller/OrderController.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/entity/WisdOeder.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/wisdo/mmining/entity/WisdOeder.java" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/src/main/resources/application-db.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application-db.yml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/main/resources/application-db.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application-db.yml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/main/resources/application.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application.yml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_edit_address.jsp" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_edit_address.jsp" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_edit_address.jsp" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_edit_address.jsp" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_list.jsp" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_list.jsp" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_list.jsp" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_list.jsp" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_logistics.jsp" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_logistics.jsp" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_logistics.jsp" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/view/pages/order/order_logistics.jsp" afterDir="false" />
|
||||||
@ -460,33 +453,33 @@
|
|||||||
<option name="hideEmptyMiddlePackages" value="true" />
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
<option name="showLibraryContents" value="true" />
|
<option name="showLibraryContents" value="true" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent"><![CDATA[{
|
<component name="PropertiesComponent">{
|
||||||
"keyToString": {
|
"keyToString": {
|
||||||
"Maven.wisdommining [clean].executor": "Run",
|
"Maven.wisdommining [clean].executor": "Run",
|
||||||
"Maven.wisdommining [package].executor": "Run",
|
"Maven.wisdommining [package].executor": "Run",
|
||||||
"RequestMappingsPanelOrder0": "0",
|
"RequestMappingsPanelOrder0": "0",
|
||||||
"RequestMappingsPanelOrder1": "1",
|
"RequestMappingsPanelOrder1": "1",
|
||||||
"RequestMappingsPanelWidth0": "75",
|
"RequestMappingsPanelWidth0": "75",
|
||||||
"RequestMappingsPanelWidth1": "75",
|
"RequestMappingsPanelWidth1": "75",
|
||||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
"Spring Boot.WisdoMminingApplication.executor": "Debug",
|
"Spring Boot.WisdoMminingApplication.executor": "Debug",
|
||||||
"dart.analysis.tool.window.visible": "false",
|
"dart.analysis.tool.window.visible": "false",
|
||||||
"git-widget-placeholder": "master",
|
"git-widget-placeholder": "master",
|
||||||
"kotlin-language-version-configured": "true",
|
"kotlin-language-version-configured": "true",
|
||||||
"last_opened_file_path": "D:/Documents/IdeaProjects/wisdommining-serve/src/main/webapp/static/dist/order_logistics",
|
"last_opened_file_path": "D:/Documents/IdeaProjects/wisdommining-serve/src/main/webapp/static/dist/order_logistics",
|
||||||
"node.js.detected.package.eslint": "true",
|
"node.js.detected.package.eslint": "true",
|
||||||
"node.js.detected.package.tslint": "true",
|
"node.js.detected.package.tslint": "true",
|
||||||
"node.js.selected.package.eslint": "(autodetect)",
|
"node.js.selected.package.eslint": "(autodetect)",
|
||||||
"node.js.selected.package.tslint": "(autodetect)",
|
"node.js.selected.package.tslint": "(autodetect)",
|
||||||
"nodejs_package_manager_path": "npm",
|
"nodejs_package_manager_path": "npm",
|
||||||
"project.structure.last.edited": "全局库",
|
"project.structure.last.edited": "全局库",
|
||||||
"project.structure.proportion": "0.0",
|
"project.structure.proportion": "0.0",
|
||||||
"project.structure.side.proportion": "0.2",
|
"project.structure.side.proportion": "0.2",
|
||||||
"settings.editor.selected.configurable": "project.propVCSSupport.DirectoryMappings",
|
"settings.editor.selected.configurable": "project.propVCSSupport.DirectoryMappings",
|
||||||
"show.migrate.to.gradle.popup": "false",
|
"show.migrate.to.gradle.popup": "false",
|
||||||
"vue.rearranger.settings.migration": "true"
|
"vue.rearranger.settings.migration": "true"
|
||||||
}
|
}
|
||||||
}]]></component>
|
}</component>
|
||||||
<component name="ReactorSettings">
|
<component name="ReactorSettings">
|
||||||
<option name="notificationShown" value="true" />
|
<option name="notificationShown" value="true" />
|
||||||
</component>
|
</component>
|
||||||
@ -631,7 +624,8 @@
|
|||||||
<workItem from="1715389027934" duration="14410000" />
|
<workItem from="1715389027934" duration="14410000" />
|
||||||
<workItem from="1715568844617" duration="447000" />
|
<workItem from="1715568844617" duration="447000" />
|
||||||
<workItem from="1715569361646" duration="7895000" />
|
<workItem from="1715569361646" duration="7895000" />
|
||||||
<workItem from="1715648805827" duration="24520000" />
|
<workItem from="1715648805827" duration="24869000" />
|
||||||
|
<workItem from="1715733500690" duration="26406000" />
|
||||||
</task>
|
</task>
|
||||||
<task id="LOCAL-00001" summary="第一次提交">
|
<task id="LOCAL-00001" summary="第一次提交">
|
||||||
<created>1623736948713</created>
|
<created>1623736948713</created>
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
package com.wisdo.mmining.api.dto;
|
package com.wisdo.mmining.api.dto;
|
||||||
|
|
||||||
|
import com.wisdo.mmining.controller.dto.PackageDto;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class EditOrderAddressDto {
|
public class EditOrderAddressDto {
|
||||||
private int orderId;
|
private int orderId;
|
||||||
private String orderAddress;
|
private String orderAddress;
|
||||||
private String logisticsName;
|
private String logisticsName;
|
||||||
private String logisticsNum;
|
private List<PackageDto> logistics;
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.wisdo.mmining.api.dto.EditOrderAddressDto;
|
import com.wisdo.mmining.api.dto.EditOrderAddressDto;
|
||||||
|
import com.wisdo.mmining.controller.dto.ApprovalUpdateAddressDto;
|
||||||
|
import com.wisdo.mmining.controller.dto.LogisticsDto;
|
||||||
import com.wisdo.mmining.entity.*;
|
import com.wisdo.mmining.entity.*;
|
||||||
import com.wisdo.mmining.redis.RedisService;
|
import com.wisdo.mmining.redis.RedisService;
|
||||||
import com.wisdo.mmining.result.Result;
|
import com.wisdo.mmining.result.Result;
|
||||||
@ -206,6 +208,7 @@ public class OrderController {
|
|||||||
modelAndView.addObject("orderId", orderId);
|
modelAndView.addObject("orderId", orderId);
|
||||||
modelAndView.addObject("type", type);
|
modelAndView.addObject("type", type);
|
||||||
modelAndView.addObject("order", order);
|
modelAndView.addObject("order", order);
|
||||||
|
modelAndView.addObject("logistics", order.getLogistics());
|
||||||
return modelAndView;
|
return modelAndView;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,11 +219,17 @@ public class OrderController {
|
|||||||
return new ModelAndView("sys/error");
|
return new ModelAndView("sys/error");
|
||||||
}
|
}
|
||||||
WisdOeder order = orderService.getById(orderId);
|
WisdOeder order = orderService.getById(orderId);
|
||||||
|
// ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
// String packagesJson = order.getLogistics();
|
||||||
|
|
||||||
|
// List<PackageDto> packages = objectMapper.readValue(packagesJson, new TypeReference<List<PackageDto>>() {
|
||||||
|
// });
|
||||||
//type 1 一级弹出层 2二级弹出层
|
//type 1 一级弹出层 2二级弹出层
|
||||||
ModelAndView modelAndView = new ModelAndView("pages/order/order_edit_address");
|
ModelAndView modelAndView = new ModelAndView("pages/order/order_edit_address");
|
||||||
modelAndView.addObject("orderId", orderId);
|
modelAndView.addObject("orderId", orderId);
|
||||||
modelAndView.addObject("type", type);
|
modelAndView.addObject("type", type);
|
||||||
modelAndView.addObject("order", order);
|
modelAndView.addObject("order", order);
|
||||||
|
modelAndView.addObject("logistics", order.getLogistics());
|
||||||
return modelAndView;
|
return modelAndView;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -548,21 +557,24 @@ public class OrderController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@RequestMapping(value = "deliverGoods")
|
@PostMapping(value = "deliverGoods")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Result deliverGoods(Long orderId, String logisticsName, String logisticsNum) {
|
public Result deliverGoods(@RequestBody LogisticsDto logisticsDto) throws JsonProcessingException {
|
||||||
if (orderId == null || com.alibaba.druid.util.StringUtils.isEmpty(logisticsName) || StringUtils.isEmpty(logisticsNum)) {
|
if (logisticsDto.getOrderId() == null || com.alibaba.druid.util.StringUtils.isEmpty(logisticsDto.getLogisticsName()) || logisticsDto.getPackages().isEmpty()) {
|
||||||
return new Result(ResultUtil.ERROR, "参数为空");
|
return new Result(ResultUtil.ERROR, "参数为空");
|
||||||
}
|
}
|
||||||
WisdOeder order = orderService.getById(orderId);
|
WisdOeder order = orderService.getById(logisticsDto.getOrderId());
|
||||||
if (order == null) {
|
if (order == null) {
|
||||||
return new Result(ResultUtil.ERROR, ResultUtil.ERROR_MSG);
|
return new Result(ResultUtil.ERROR, ResultUtil.ERROR_MSG);
|
||||||
}
|
}
|
||||||
if (!order.getStatus().equals(2)) {
|
if (!order.getStatus().equals(2)) {
|
||||||
return new Result(ResultUtil.ERROR, "该状态无法发货");
|
return new Result(ResultUtil.ERROR, "该状态无法发货");
|
||||||
}
|
}
|
||||||
order.setLogisticsName(logisticsName);
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
order.setLogisticsNum(logisticsNum);
|
String deliverGoodsJson = mapper.writeValueAsString(logisticsDto.getPackages());
|
||||||
|
order.setLogistics(deliverGoodsJson);
|
||||||
|
order.setLogisticsName(logisticsDto.getLogisticsName());
|
||||||
|
// order.setLogisticsNum(logisticsNum);
|
||||||
order.setStatus(3);
|
order.setStatus(3);
|
||||||
order.setOrderDeliverTime(new Date());
|
order.setOrderDeliverTime(new Date());
|
||||||
Boolean flag = orderService.updateById(order);
|
Boolean flag = orderService.updateById(order);
|
||||||
@ -576,19 +588,21 @@ public class OrderController {
|
|||||||
|
|
||||||
|
|
||||||
// 处理修改地址申请
|
// 处理修改地址申请
|
||||||
@RequestMapping(value = "approvalUpdateAddress")
|
@PostMapping(value = "approvalUpdateAddress")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Result approvalUpdateAddress(Long orderId, Integer type, String logisticsNo /*1 同意, 0 拒绝*/) {
|
public Result approvalUpdateAddress(@RequestBody ApprovalUpdateAddressDto addressDto) throws JsonProcessingException {
|
||||||
WisdOeder order = orderService.getById(orderId);
|
WisdOeder order = orderService.getById(addressDto.getOrderId());
|
||||||
if (type.equals(1)) {
|
if (addressDto.getType().equals(1)) {
|
||||||
order.setOrderAddress(order.getPendingApprovalOrderAddress());
|
order.setOrderAddress(order.getPendingApprovalOrderAddress());
|
||||||
order.setAddressId(order.getPendingApprovalAddressId());
|
order.setAddressId(order.getPendingApprovalAddressId());
|
||||||
order.setLogisticsNum(logisticsNo);
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
String deliverGoodsJson = mapper.writeValueAsString(addressDto.getLogistics());
|
||||||
|
order.setLogistics(deliverGoodsJson);
|
||||||
order.setPendingApprovalAddressId(null);
|
order.setPendingApprovalAddressId(null);
|
||||||
order.setPendingApprovalOrderAddress(null);
|
order.setPendingApprovalOrderAddress(null);
|
||||||
orderService.updateById(order);
|
orderService.updateById(order);
|
||||||
return ResultUtil.success("收货地址已更新");
|
return ResultUtil.success("收货地址已更新");
|
||||||
} else if (type.equals(0)) {
|
} else if (addressDto.getType().equals(0)) {
|
||||||
order.setPendingApprovalAddressId(null);
|
order.setPendingApprovalAddressId(null);
|
||||||
order.setPendingApprovalOrderAddress(null);
|
order.setPendingApprovalOrderAddress(null);
|
||||||
return ResultUtil.success("已拒绝修改地址");
|
return ResultUtil.success("已拒绝修改地址");
|
||||||
@ -599,10 +613,12 @@ public class OrderController {
|
|||||||
|
|
||||||
@PostMapping(value = "editAddress")
|
@PostMapping(value = "editAddress")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Result editAddress(@RequestBody EditOrderAddressDto address) {
|
public Result editAddress(@RequestBody EditOrderAddressDto address) throws JsonProcessingException {
|
||||||
WisdOeder order = orderService.getById(address.getOrderId());
|
WisdOeder order = orderService.getById(address.getOrderId());
|
||||||
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
|
String deliverGoodsJson = mapper.writeValueAsString(address.getLogistics());
|
||||||
|
order.setLogistics(deliverGoodsJson);
|
||||||
order.setOrderAddress(address.getOrderAddress());
|
order.setOrderAddress(address.getOrderAddress());
|
||||||
order.setLogisticsNum(address.getLogisticsNum());
|
|
||||||
order.setLogisticsName(address.getLogisticsName());
|
order.setLogisticsName(address.getLogisticsName());
|
||||||
orderService.updateById(order);
|
orderService.updateById(order);
|
||||||
return ResultUtil.success("地址修改成功");
|
return ResultUtil.success("地址修改成功");
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.wisdo.mmining.controller.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ApprovalUpdateAddressDto {
|
||||||
|
private Long orderId;
|
||||||
|
private Integer type;
|
||||||
|
private List<PackageDto> logistics;
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.wisdo.mmining.controller.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class GoodsDeDto {
|
||||||
|
private Long id;
|
||||||
|
private String name;
|
||||||
|
private Integer num;
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.wisdo.mmining.controller.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class LogisticsDto {
|
||||||
|
private Long orderId;
|
||||||
|
private String logisticsName;
|
||||||
|
private List<PackageDto> packages;
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package com.wisdo.mmining.controller.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PackageDto {
|
||||||
|
private Long id;
|
||||||
|
private List<GoodsDeDto> goods;
|
||||||
|
private String logisticsNumber;
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
#开发环境
|
#开发环境
|
||||||
spring:
|
spring:
|
||||||
datasource:
|
datasource:
|
||||||
url: jdbc:mysql://ayaya-arch.local:3306/wisdo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
url: jdbc:mysql://192.168.0.142:3306/wisdo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||||
# url: jdbc:mysql://146.56.198.32:3306/wisdo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
# url: jdbc:mysql://146.56.198.32:3306/wisdo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
|
||||||
username: yshop
|
username: yshop
|
||||||
# username: root
|
# username: root
|
||||||
|
@ -15,10 +15,144 @@
|
|||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport"
|
<meta name="viewport"
|
||||||
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||||
<link rel="stylesheet" href="${root}/static/core/css/form.css" media="all">
|
<%-- <link rel="stylesheet" href="${root}/static/core/css/form.css" media="all">--%>
|
||||||
|
<script src="${root}/static/core/js/base/tailwindcss.js"></script>
|
||||||
|
<script>
|
||||||
|
let layer = null
|
||||||
|
layui.use(['layer'], function () {
|
||||||
|
layer = layui.layer
|
||||||
|
});
|
||||||
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body style="background-color: white">
|
<body style="background-color: white">
|
||||||
<div class="layui-fluid">
|
<div id="root"></div>
|
||||||
|
<script type="text/babel">
|
||||||
|
const __logistics = ${logistics};
|
||||||
|
const orderId = ${orderId};
|
||||||
|
const orderAddress = "${order.orderAddress}";
|
||||||
|
const __logisticsName = "${order.logisticsName}";
|
||||||
|
const type = ${type};
|
||||||
|
const {useState} = React
|
||||||
|
const App = () => {
|
||||||
|
const [logisticsName, setLogisticsName] = useState(__logisticsName)
|
||||||
|
const [logistics, setLogistics] = useState(__logistics)
|
||||||
|
return <div className="p-4">
|
||||||
|
<form>
|
||||||
|
<div className="layui-form-item">
|
||||||
|
<label htmlFor="orderAddress" className="layui-form-label w-24">收货地址</label>
|
||||||
|
<div className="layui-input-block">
|
||||||
|
<input type="text" id="orderAddress" name="orderAddress" readOnly value={orderAddress}
|
||||||
|
|
||||||
|
placeholder="请输入收货地址" autoComplete="off" className="layui-input"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="layui-form-item">
|
||||||
|
<label htmlFor="logisticsName" className="layui-form-label w-24">物流公司</label>
|
||||||
|
<div className="layui-input-block">
|
||||||
|
<input type="text" id="logisticsName" name="logisticsName" value={logisticsName}
|
||||||
|
onInput={ev => {
|
||||||
|
setLogisticsName(ev.target.value)
|
||||||
|
}}
|
||||||
|
placeholder="请输入物流公司" autoComplete="off" className="layui-input"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{logistics && logistics.map((pack, index) => <div
|
||||||
|
key={pack.id}
|
||||||
|
className={"mt-4 pt-4 pr-2 border rounded relative"}>
|
||||||
|
<div className="absolute left-4 -top-3 bg-white">包裹{index + 1}</div>
|
||||||
|
<div className="layui-form-item">
|
||||||
|
<label htmlFor={"logisticsNum" + index} className="layui-form-label w-24">物流单号</label>
|
||||||
|
<div className="layui-input-block">
|
||||||
|
<input type="text" id={"logisticsNum" + index} name="logisticsNum"
|
||||||
|
value={pack.logisticsNumber}
|
||||||
|
onInput={(ev) => {
|
||||||
|
const _logistics = [...logistics]
|
||||||
|
_logistics[index].logisticsNumber = ev.target.value
|
||||||
|
setLogistics(_logistics)
|
||||||
|
}}
|
||||||
|
placeholder="请输入物流单号" autoComplete="off" className="layui-input"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="pl-2">
|
||||||
|
<table className="layui-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>名称</th>
|
||||||
|
<th>数量</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{
|
||||||
|
pack.goods.map((goods, idx) => <tr key={goods.id}>
|
||||||
|
<td>{goods.name}</td>
|
||||||
|
<td>{goods.num}</td>
|
||||||
|
</tr>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>)}
|
||||||
|
<div className="flex justify-center mt-4">
|
||||||
|
<button type="button" className="layui-btn layui-btn-primary" onClick={() => {
|
||||||
|
const formData = {
|
||||||
|
orderId,
|
||||||
|
orderAddress,
|
||||||
|
logisticsName,
|
||||||
|
logistics
|
||||||
|
}
|
||||||
|
$modal({
|
||||||
|
type: 'confirm',
|
||||||
|
icon: 'question',
|
||||||
|
title: '提交确定',
|
||||||
|
content: '确认提交吗?',
|
||||||
|
mask: true,
|
||||||
|
top: 50,
|
||||||
|
maskClose: true,
|
||||||
|
confirm: function (close) {
|
||||||
|
var index = layer.load(2);
|
||||||
|
let url = root + "/order/editAddress"
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
method: "POST",
|
||||||
|
url,
|
||||||
|
data: JSON.stringify(formData),
|
||||||
|
contentType: "application/json; charset=utf-8",
|
||||||
|
success(e) {
|
||||||
|
layer.close(index);
|
||||||
|
if (e.code == 1) {
|
||||||
|
$.message({message: e.msg, type: "success"});
|
||||||
|
setTimeout(function () {
|
||||||
|
admin.close();
|
||||||
|
if (type == 1) {
|
||||||
|
admin.fatherReload();
|
||||||
|
} else {
|
||||||
|
admin.fatherReload();
|
||||||
|
admin.fatherFatherReload();
|
||||||
|
}
|
||||||
|
}, 500)
|
||||||
|
} else {
|
||||||
|
$.message({message: e.msg, type: "error"});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
close()
|
||||||
|
},
|
||||||
|
cancel: function (close) {
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}}>提交
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
const container = document.getElementById("root")
|
||||||
|
const rootApp = ReactDOM.createRoot(container);
|
||||||
|
rootApp.render(<App/>);
|
||||||
|
</script>
|
||||||
|
<%--<div class="layui-fluid">
|
||||||
<div class="layui-row">
|
<div class="layui-row">
|
||||||
<form class="layui-form" id="formData" lay-filter="formData">
|
<form class="layui-form" id="formData" lay-filter="formData">
|
||||||
<input type="hidden" id="type" value="${type}">
|
<input type="hidden" id="type" value="${type}">
|
||||||
@ -37,13 +171,19 @@
|
|||||||
placeholder="请输入物流公司" autocomplete="off" class="layui-input">
|
placeholder="请输入物流公司" autocomplete="off" class="layui-input">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="layui-form-item formItem">
|
|
||||||
<label for="logisticsNum" class="layui-form-label">物流单号</label>
|
<c:forEach items="${packages}" var="item">
|
||||||
<div class="layui-input-block">
|
<div>
|
||||||
<input type="text" id="logisticsNum" name="logisticsNum" value="${order.logisticsNum}"
|
<div class="layui-form-item formItem">
|
||||||
placeholder="请输入物流单号" autocomplete="off" class="layui-input">
|
<label for="logisticsNum" class="layui-form-label">物流单号</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" id="logisticsNum" name="logisticsNum" value="${item.logisticsNumber}"
|
||||||
|
placeholder="请输入物流单号" autocomplete="off" class="layui-input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</c:forEach>
|
||||||
|
|
||||||
<div class="layui-form-item formItem">
|
<div class="layui-form-item formItem">
|
||||||
<label for="logisticsNum" class="layui-form-label"></label>
|
<label for="logisticsNum" class="layui-form-label"></label>
|
||||||
<button class="layui-btn layui-btn-primary layui-btn-sm subBtn" style="width: 165px;margin-top: 23px;"
|
<button class="layui-btn layui-btn-primary layui-btn-sm subBtn" style="width: 165px;margin-top: 23px;"
|
||||||
@ -105,6 +245,6 @@
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
</script>
|
</script>--%>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -541,7 +541,7 @@
|
|||||||
layer.open({
|
layer.open({
|
||||||
title: "处理发货地址修改申请",
|
title: "处理发货地址修改申请",
|
||||||
content: root + "/order/getUpdateAddress?type=1&orderId=" + data.id,
|
content: root + "/order/getUpdateAddress?type=1&orderId=" + data.id,
|
||||||
area: ['500px', '300px'],
|
area: ['700px', '600px'],
|
||||||
offset: '20%',
|
offset: '20%',
|
||||||
type: 2,
|
type: 2,
|
||||||
})
|
})
|
||||||
@ -549,7 +549,7 @@
|
|||||||
layer.open({
|
layer.open({
|
||||||
title: "修改地址",
|
title: "修改地址",
|
||||||
content: root + "/order/getEditAddress?type=1&orderId=" + data.id,
|
content: root + "/order/getEditAddress?type=1&orderId=" + data.id,
|
||||||
area: ['500px', '300px'],
|
area: ['700px', '600px'],
|
||||||
offset: '20%',
|
offset: '20%',
|
||||||
type: 2,
|
type: 2,
|
||||||
})
|
})
|
||||||
|
@ -10,24 +10,39 @@
|
|||||||
|
|
||||||
<%-- <script type="module" crossorigin src="/wisdommining/static/dist/order_logistics/index-ClekkQW0.js"></script>--%>
|
<%-- <script type="module" crossorigin src="/wisdommining/static/dist/order_logistics/index-ClekkQW0.js"></script>--%>
|
||||||
<%-- <link rel="stylesheet" crossorigin href="/wisdommining/static/dist/order_logistics/index-BMTRAcdn.css">--%>
|
<%-- <link rel="stylesheet" crossorigin href="/wisdommining/static/dist/order_logistics/index-BMTRAcdn.css">--%>
|
||||||
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
|
<%-- <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>--%>
|
||||||
<%-- <script src="${root}/static/core/js/react/react.production.min.js"></script>--%>
|
<%-- <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>--%>
|
||||||
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
|
|
||||||
<script crossorigin src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
|
|
||||||
<script src="${root}/static/core/js/base/tailwindcss.js"></script>
|
<script src="${root}/static/core/js/base/tailwindcss.js"></script>
|
||||||
<script>
|
<script>
|
||||||
const orderId = ${orderId};
|
const orderId = ${orderId};
|
||||||
const order = ${order};
|
const order = ${order};
|
||||||
|
const type = ${type};
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
let layer = null
|
||||||
|
layui.use(['layer'], function () {
|
||||||
|
const _layer = layui.layer;
|
||||||
|
layer = _layer
|
||||||
|
});
|
||||||
|
// const getLayer = () => new Promise((resolve, reject) => {
|
||||||
|
// layui.use(function () {
|
||||||
|
// const layer = layui.layer;
|
||||||
|
// resolve(layer)
|
||||||
|
// });
|
||||||
|
// })
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body style="background-color: white">
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
<script type="text/babel">
|
<script type="text/babel">
|
||||||
const {useState} = React
|
const {useState} = React
|
||||||
|
|
||||||
const App = () => {
|
const App = () => {
|
||||||
const [packages, setPackages] = useState([{id: 0, goods: []}])
|
const [packages, setPackages] = useState([{id: Date.now(), logisticsNumber: "", goods: []}])
|
||||||
const [goodsList, setGoodsList] = useState(order?.goodsList ?? [])
|
const [goodsList, setGoodsList] = useState(order?.goodsList ?? [])
|
||||||
|
const [logisticsName, setLogisticsName] = useState("")
|
||||||
const [activePackage, setActivePackage] = useState(0)
|
const [activePackage, setActivePackage] = useState(0)
|
||||||
return <div>
|
return <div>
|
||||||
<div className="p-2 flex">
|
<div className="p-2 flex">
|
||||||
@ -50,14 +65,21 @@
|
|||||||
<button className="layui-btn layui-btn-xs" onClick={() => {
|
<button className="layui-btn layui-btn-xs" onClick={() => {
|
||||||
// TODO: STEP1: 将商品添加到 packages 中
|
// TODO: STEP1: 将商品添加到 packages 中
|
||||||
const _packages = [...packages]
|
const _packages = [...packages]
|
||||||
_packages[activePackage].goods.push({
|
const goodsInPackageIndex = _packages[activePackage].goods.findIndex(el => el.id === goods.id)
|
||||||
name: goods.goodsName,
|
if (goodsInPackageIndex !== -1) {
|
||||||
num: goods.goodsNum
|
_packages[activePackage].goods[goodsInPackageIndex].num += 1
|
||||||
})
|
} else {
|
||||||
|
_packages[activePackage].goods.push({
|
||||||
|
id: goods.id,
|
||||||
|
name: goods.goodsName,
|
||||||
|
num: 1
|
||||||
|
})
|
||||||
|
}
|
||||||
setPackages(_packages)
|
setPackages(_packages)
|
||||||
// TODO: STEP2: 在 goodsList 中扣除已添加的商品数量 goodsNum
|
|
||||||
const _goodsList = [...goodsList]
|
const _goodsList = [...goodsList]
|
||||||
|
_goodsList.find(el => el.id === goods.id).goodsNum -= 1
|
||||||
|
|
||||||
|
setGoodsList(_goodsList)
|
||||||
}}>
|
}}>
|
||||||
添加到包裹
|
添加到包裹
|
||||||
</button>
|
</button>
|
||||||
@ -74,7 +96,9 @@
|
|||||||
<div className="layui-form-item">
|
<div className="layui-form-item">
|
||||||
<label className="layui-form-label w-[100px]">物流名称</label>
|
<label className="layui-form-label w-[100px]">物流名称</label>
|
||||||
<div className="layui-input-block">
|
<div className="layui-input-block">
|
||||||
<input type="text" name="username" lay-verify="required"
|
<input type="text" name="logisticsName" value={logisticsName} onInput={(event) => {
|
||||||
|
setLogisticsName(() => event.target.value)
|
||||||
|
}}
|
||||||
placeholder="请输入物流公司名称"
|
placeholder="请输入物流公司名称"
|
||||||
autoComplete="off" className="layui-input"/>
|
autoComplete="off" className="layui-input"/>
|
||||||
</div>
|
</div>
|
||||||
@ -82,7 +106,7 @@
|
|||||||
{
|
{
|
||||||
packages.map((pack, index) => <div key={pack.id}
|
packages.map((pack, index) => <div key={pack.id}
|
||||||
style={{
|
style={{
|
||||||
borderColor: activePackage === index ? "rgb(252 165 165)" : "rgb(209 213 219)",
|
borderColor: activePackage === index ? "rgb(96 165 250)" : "rgb(209 213 219)",
|
||||||
// boxShadow: activePackage === index ? "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);" : null,
|
// boxShadow: activePackage === index ? "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);" : null,
|
||||||
}}
|
}}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
@ -92,25 +116,75 @@
|
|||||||
<div className="absolute left-4 -top-3 bg-white">包裹{index + 1}</div>
|
<div className="absolute left-4 -top-3 bg-white">包裹{index + 1}</div>
|
||||||
{packages.length > 1 && < button type="button"
|
{packages.length > 1 && < button type="button"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
if (index === activePackage) {
|
||||||
|
// TODO: WHY
|
||||||
|
setTimeout(() => {
|
||||||
|
setActivePackage(state => state - 1)
|
||||||
|
}, 0)
|
||||||
|
}
|
||||||
setPackages(state => state.filter(el => pack.id !== el.id))
|
setPackages(state => state.filter(el => pack.id !== el.id))
|
||||||
|
// TODO: 删除该包裹中所有商品
|
||||||
|
const _goodsList = [...goodsList]
|
||||||
|
for (const p of pack.goods) {
|
||||||
|
_goodsList.find(g => g.id === p.id).goodsNum += p.num
|
||||||
|
}
|
||||||
|
setGoodsList(_goodsList)
|
||||||
|
|
||||||
}}
|
}}
|
||||||
className="w-4 h-4 rounded-full bg-red-500 absolute -top-2 -right-2 flex justify-center items-center">
|
className="w-4 h-4 rounded-full bg-red-500 absolute -top-2 -right-2 flex justify-center items-center">
|
||||||
<i className="layui-icon layui-icon-close text-white"></i>
|
<i className="layui-icon layui-icon-close text-white"></i>
|
||||||
</button>}
|
</button>}
|
||||||
<div className="layui-form-item">
|
<div className="layui-form-item">
|
||||||
<label className="layui-form-label w-[100px]">运单号</label>
|
<label className="layui-form-label w-[100px]"
|
||||||
|
htmlFor={"logisticsNumber" + index}>运单号</label>
|
||||||
<div className="layui-input-block">
|
<div className="layui-input-block">
|
||||||
<input type="text" name="logisticsNumber" lay-verify="required"
|
<input type="text" name="logisticsNumber" id={"logisticsNumber" + index}
|
||||||
|
value={pack.logisticsNumber}
|
||||||
|
onInput={(event) => {
|
||||||
|
const _packages = [...packages]
|
||||||
|
_packages[index].logisticsNumber = event.target.value
|
||||||
|
setPackages(_packages)
|
||||||
|
}}
|
||||||
placeholder="请输入运单号"
|
placeholder="请输入运单号"
|
||||||
autoComplete="off" className="layui-input"/>
|
autoComplete="off" className="layui-input"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div className="pl-2">
|
||||||
{
|
<table className="layui-table">
|
||||||
pack.goods.map(goods => <div key={goods.goodsName}>
|
<thead>
|
||||||
{goods.name}
|
<tr>
|
||||||
</div>)
|
<th>名称</th>
|
||||||
}
|
<th>数量</th>
|
||||||
|
<th>操作</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{
|
||||||
|
pack.goods.map((goods, idx) => <tr key={goods.id}>
|
||||||
|
<td>{goods.name}</td>
|
||||||
|
<td>{goods.num}</td>
|
||||||
|
<td>
|
||||||
|
<button className="layui-btn layui-btn-xs" type="button"
|
||||||
|
onClick={() => {
|
||||||
|
// 数量 -1,减至 0 时,从包裹中删除该项商品
|
||||||
|
const _packages = [...packages]
|
||||||
|
_packages[index].goods[idx].num -= 1
|
||||||
|
setPackages(_packages.map(p => ({
|
||||||
|
...p,
|
||||||
|
goods: p.goods.filter(g => g.num > 0)
|
||||||
|
})))
|
||||||
|
// TODO: goodsList 中数量 +1
|
||||||
|
const _goodsList = [...goodsList]
|
||||||
|
_goodsList.find(el => el.id === _packages[index].goods[idx].id).goodsNum += 1
|
||||||
|
setGoodsList(_goodsList)
|
||||||
|
}}>移除
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>)
|
</div>)
|
||||||
}
|
}
|
||||||
@ -118,9 +192,11 @@
|
|||||||
setPackages(state => {
|
setPackages(state => {
|
||||||
return [...state, {
|
return [...state, {
|
||||||
id: Date.now(),
|
id: Date.now(),
|
||||||
|
logisticsNumber: "",
|
||||||
goods: []
|
goods: []
|
||||||
}]
|
}]
|
||||||
})
|
})
|
||||||
|
setActivePackage(packages.length)
|
||||||
}}>添加包裹
|
}}>添加包裹
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
@ -128,13 +204,86 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex justify-center">
|
<div className="flex justify-center">
|
||||||
<button className="layui-btn layui-btn-primary">提交</button>
|
<button className="layui-btn layui-btn-primary" onClick={() => {
|
||||||
|
// 验证
|
||||||
|
if (goodsList.filter(el => el.goodsNum > 0).length) {
|
||||||
|
layer.msg('有未添加到包裹中的商品', {icon: 2});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (packages.filter(el => el.goods.length === 0).length) {
|
||||||
|
layer.msg('有空包裹,请向其添加商品,或删除包裹', {icon: 2});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (packages.filter(el => el.goods.length === 0).length) {
|
||||||
|
layer.msg('有空包裹,请向其添加商品,或删除包裹', {icon: 2});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!logisticsName) {
|
||||||
|
layer.msg('未填写物流名称', {icon: 2});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for (let x = 0; x < packages.length; x++) {
|
||||||
|
if (!packages[x].logisticsNumber) {
|
||||||
|
layer.msg("包裹" + (x + 1) + '未填写物流单号', {icon: 2});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const formData = {
|
||||||
|
orderId,
|
||||||
|
logisticsName,
|
||||||
|
packages
|
||||||
|
}
|
||||||
|
|
||||||
|
$modal({
|
||||||
|
type: 'confirm',
|
||||||
|
icon: 'question',
|
||||||
|
title: '提交确定',
|
||||||
|
content: '确认提交吗?',
|
||||||
|
mask: true,
|
||||||
|
top: 50,
|
||||||
|
maskClose: true,
|
||||||
|
confirm: function (close) {
|
||||||
|
var index = layer.load(2);
|
||||||
|
$.ajax({
|
||||||
|
method: "POST",
|
||||||
|
url: root + "/order/deliverGoods",
|
||||||
|
data: JSON.stringify(formData),
|
||||||
|
contentType: "application/json; charset=utf-8",
|
||||||
|
success(e) {
|
||||||
|
layer.close(index);
|
||||||
|
if (e.code == 1) {
|
||||||
|
$.message({message: e.msg, type: "success"});
|
||||||
|
setTimeout(function () {
|
||||||
|
admin.close();
|
||||||
|
if (type == 1) {
|
||||||
|
admin.fatherReload();
|
||||||
|
} else {
|
||||||
|
admin.fatherReload();
|
||||||
|
admin.fatherFatherReload();
|
||||||
|
}
|
||||||
|
}, 500)
|
||||||
|
} else {
|
||||||
|
$.message({message: e.msg, type: "error"});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// $.post(root + "/order/deliverGoods", formData, function (e) {
|
||||||
|
//
|
||||||
|
// }, "json")
|
||||||
|
close()
|
||||||
|
},
|
||||||
|
cancel: function (close) {
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}}>提交
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
const container = document.getElementById("root")
|
const container = document.getElementById("root")
|
||||||
const root = ReactDOM.createRoot(container);
|
const rootApp = ReactDOM.createRoot(container);
|
||||||
root.render(<App/>);
|
rootApp.render(<App/>);
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -15,9 +15,129 @@
|
|||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
<meta name="viewport"
|
<meta name="viewport"
|
||||||
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||||
<link rel="stylesheet" href="${root}/static/core/css/form.css" media="all">
|
<%-- <link rel="stylesheet" href="${root}/static/core/css/form.css" media="all">--%>
|
||||||
|
<script src="${root}/static/core/js/base/tailwindcss.js"></script>
|
||||||
|
<script>
|
||||||
|
let layer = null
|
||||||
|
layui.use(['layer'], function () {
|
||||||
|
layer = layui.layer
|
||||||
|
});
|
||||||
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body style="background-color: white">
|
<body style="background-color: white">
|
||||||
|
<div id="root"></div>
|
||||||
|
<script type="text/babel">
|
||||||
|
const __logistics = ${logistics};
|
||||||
|
const type = ${type};
|
||||||
|
const orderId = ${orderId};
|
||||||
|
const orderAddress = ${order.pendingApprovalOrderAddress};
|
||||||
|
const {useState} = React
|
||||||
|
const App = () => {
|
||||||
|
const [logistics, setLogistics] = useState(__logistics)
|
||||||
|
return <div className="p-4">
|
||||||
|
<form>
|
||||||
|
<div className="layui-form-item">
|
||||||
|
<label htmlFor="logisticsName" className="layui-form-label w-24">发货地址</label>
|
||||||
|
<div className="layui-input-block">
|
||||||
|
<input type="text" readOnly id="logisticsName" name="logisticsName" lay-verify="required"
|
||||||
|
value="${order.pendingApprovalOrderAddress}"
|
||||||
|
autoComplete="off" className="layui-input"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{logistics && logistics.map((pack, index) => <div key={pack.id}
|
||||||
|
className={"mt-4 pt-4 pr-2 border rounded relative"}>
|
||||||
|
<div className="absolute left-4 -top-3 bg-white">包裹{index + 1}</div>
|
||||||
|
<div className="layui-form-item">
|
||||||
|
<label htmlFor={"logisticsNum" + index} className="layui-form-label w-24">物流单号</label>
|
||||||
|
<div className="layui-input-block">
|
||||||
|
<input type="text" id={"logisticsNum" + index} name="logisticsNum"
|
||||||
|
value={pack.logisticsNumber}
|
||||||
|
onInput={(ev) => {
|
||||||
|
const _logistics = [...logistics]
|
||||||
|
_logistics[index].logisticsNumber = ev.target.value
|
||||||
|
setLogistics(_logistics)
|
||||||
|
}}
|
||||||
|
placeholder="请输入物流单号" autoComplete="off" className="layui-input"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="pl-2">
|
||||||
|
<table className="layui-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>名称</th>
|
||||||
|
<th>数量</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{
|
||||||
|
pack.goods.map((goods) => <tr key={goods.id}>
|
||||||
|
<td>{goods.name}</td>
|
||||||
|
<td>{goods.num}</td>
|
||||||
|
</tr>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>)}
|
||||||
|
<div className="flex justify-center">
|
||||||
|
<button type="button" onClick={() => {
|
||||||
|
const formData = {
|
||||||
|
orderId,
|
||||||
|
type: 1,
|
||||||
|
logistics
|
||||||
|
}
|
||||||
|
$modal({
|
||||||
|
type: 'confirm',
|
||||||
|
icon: 'question',
|
||||||
|
title: '提交确定',
|
||||||
|
content: '确认提交吗?',
|
||||||
|
mask: true,
|
||||||
|
top: 50,
|
||||||
|
maskClose: true,
|
||||||
|
confirm: function (close) {
|
||||||
|
var index = layer.load(2);
|
||||||
|
let url = root + "/order/approvalUpdateAddress"
|
||||||
|
$.ajax({
|
||||||
|
url,
|
||||||
|
method: "POST",
|
||||||
|
contentType: "application/json; charset=utf-8",
|
||||||
|
data: JSON.stringify(formData),
|
||||||
|
success(e) {
|
||||||
|
layer.close(index);
|
||||||
|
if (e.code == 1) {
|
||||||
|
$.message({message: e.msg, type: "success"});
|
||||||
|
setTimeout(function () {
|
||||||
|
admin.close();
|
||||||
|
if (type == 1) {
|
||||||
|
admin.fatherReload();
|
||||||
|
} else {
|
||||||
|
admin.fatherReload();
|
||||||
|
admin.fatherFatherReload();
|
||||||
|
}
|
||||||
|
}, 500)
|
||||||
|
} else {
|
||||||
|
$.message({message: e.msg, type: "error"});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
close()
|
||||||
|
},
|
||||||
|
cancel: function (close) {
|
||||||
|
close()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}}>提交
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
const container = document.getElementById("root")
|
||||||
|
const rootApp = ReactDOM.createRoot(container);
|
||||||
|
rootApp.render(<App/>);
|
||||||
|
</script>
|
||||||
|
<%--
|
||||||
<div class="layui-fluid">
|
<div class="layui-fluid">
|
||||||
<div class="layui-row">
|
<div class="layui-row">
|
||||||
<form class="layui-form" id="formData" lay-filter="formData">
|
<form class="layui-form" id="formData" lay-filter="formData">
|
||||||
@ -93,5 +213,6 @@
|
|||||||
});
|
});
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
--%>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -20,6 +20,10 @@
|
|||||||
<script src="${root}/static/core/js/layui/xm-select.js"></script>
|
<script src="${root}/static/core/js/layui/xm-select.js"></script>
|
||||||
<script src="${root}/static/core/js/base/message.min.js"></script>
|
<script src="${root}/static/core/js/base/message.min.js"></script>
|
||||||
<script src="${root}/static/core/js/base/modal_dialog.js"></script>
|
<script src="${root}/static/core/js/base/modal_dialog.js"></script>
|
||||||
|
|
||||||
|
<script src="${root}/static/core/js/react/react.production.min.js"></script>
|
||||||
|
<script src="${root}/static/core/js/react/react-dom.production.min.js"></script>
|
||||||
|
<script crossorigin src="${root}/static/core/js/base/babel.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var root = "${root}";
|
var root = "${root}";
|
||||||
var admin = function () {
|
var admin = function () {
|
||||||
|
2
src/main/webapp/static/core/js/base/babel.min.js
vendored
Normal file
2
src/main/webapp/static/core/js/base/babel.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user