发货包裹选择

This commit is contained in:
quantulr
2024-05-15 17:29:54 +08:00
parent d44d0d8d02
commit 21029bcf0d
14 changed files with 567 additions and 92 deletions

View File

@ -1,11 +1,14 @@
package com.wisdo.mmining.api.dto;
import com.wisdo.mmining.controller.dto.PackageDto;
import lombok.Data;
import java.util.List;
@Data
public class EditOrderAddressDto {
private int orderId;
private String orderAddress;
private String logisticsName;
private String logisticsNum;
private List<PackageDto> logistics;
}

View File

@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
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.redis.RedisService;
import com.wisdo.mmining.result.Result;
@ -206,6 +208,7 @@ public class OrderController {
modelAndView.addObject("orderId", orderId);
modelAndView.addObject("type", type);
modelAndView.addObject("order", order);
modelAndView.addObject("logistics", order.getLogistics());
return modelAndView;
}
@ -216,11 +219,17 @@ public class OrderController {
return new ModelAndView("sys/error");
}
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二级弹出层
ModelAndView modelAndView = new ModelAndView("pages/order/order_edit_address");
modelAndView.addObject("orderId", orderId);
modelAndView.addObject("type", type);
modelAndView.addObject("order", order);
modelAndView.addObject("logistics", order.getLogistics());
return modelAndView;
}
@ -548,21 +557,24 @@ public class OrderController {
}
@RequestMapping(value = "deliverGoods")
@PostMapping(value = "deliverGoods")
@ResponseBody
public Result deliverGoods(Long orderId, String logisticsName, String logisticsNum) {
if (orderId == null || com.alibaba.druid.util.StringUtils.isEmpty(logisticsName) || StringUtils.isEmpty(logisticsNum)) {
public Result deliverGoods(@RequestBody LogisticsDto logisticsDto) throws JsonProcessingException {
if (logisticsDto.getOrderId() == null || com.alibaba.druid.util.StringUtils.isEmpty(logisticsDto.getLogisticsName()) || logisticsDto.getPackages().isEmpty()) {
return new Result(ResultUtil.ERROR, "参数为空");
}
WisdOeder order = orderService.getById(orderId);
WisdOeder order = orderService.getById(logisticsDto.getOrderId());
if (order == null) {
return new Result(ResultUtil.ERROR, ResultUtil.ERROR_MSG);
}
if (!order.getStatus().equals(2)) {
return new Result(ResultUtil.ERROR, "该状态无法发货");
}
order.setLogisticsName(logisticsName);
order.setLogisticsNum(logisticsNum);
ObjectMapper mapper = new ObjectMapper();
String deliverGoodsJson = mapper.writeValueAsString(logisticsDto.getPackages());
order.setLogistics(deliverGoodsJson);
order.setLogisticsName(logisticsDto.getLogisticsName());
// order.setLogisticsNum(logisticsNum);
order.setStatus(3);
order.setOrderDeliverTime(new Date());
Boolean flag = orderService.updateById(order);
@ -576,19 +588,21 @@ public class OrderController {
// 处理修改地址申请
@RequestMapping(value = "approvalUpdateAddress")
@PostMapping(value = "approvalUpdateAddress")
@ResponseBody
public Result approvalUpdateAddress(Long orderId, Integer type, String logisticsNo /*1 同意, 0 拒绝*/) {
WisdOeder order = orderService.getById(orderId);
if (type.equals(1)) {
public Result approvalUpdateAddress(@RequestBody ApprovalUpdateAddressDto addressDto) throws JsonProcessingException {
WisdOeder order = orderService.getById(addressDto.getOrderId());
if (addressDto.getType().equals(1)) {
order.setOrderAddress(order.getPendingApprovalOrderAddress());
order.setAddressId(order.getPendingApprovalAddressId());
order.setLogisticsNum(logisticsNo);
ObjectMapper mapper = new ObjectMapper();
String deliverGoodsJson = mapper.writeValueAsString(addressDto.getLogistics());
order.setLogistics(deliverGoodsJson);
order.setPendingApprovalAddressId(null);
order.setPendingApprovalOrderAddress(null);
orderService.updateById(order);
return ResultUtil.success("收货地址已更新");
} else if (type.equals(0)) {
} else if (addressDto.getType().equals(0)) {
order.setPendingApprovalAddressId(null);
order.setPendingApprovalOrderAddress(null);
return ResultUtil.success("已拒绝修改地址");
@ -599,10 +613,12 @@ public class OrderController {
@PostMapping(value = "editAddress")
@ResponseBody
public Result editAddress(@RequestBody EditOrderAddressDto address) {
public Result editAddress(@RequestBody EditOrderAddressDto address) throws JsonProcessingException {
WisdOeder order = orderService.getById(address.getOrderId());
ObjectMapper mapper = new ObjectMapper();
String deliverGoodsJson = mapper.writeValueAsString(address.getLogistics());
order.setLogistics(deliverGoodsJson);
order.setOrderAddress(address.getOrderAddress());
order.setLogisticsNum(address.getLogisticsNum());
order.setLogisticsName(address.getLogisticsName());
orderService.updateById(order);
return ResultUtil.success("地址修改成功");

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -1,7 +1,7 @@
#开发环境
spring:
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
username: yshop
# username: root

View File

@ -15,10 +15,144 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport"
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>
<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">
<form class="layui-form" id="formData" lay-filter="formData">
<input type="hidden" id="type" value="${type}">
@ -37,13 +171,19 @@
placeholder="请输入物流公司" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item formItem">
<label for="logisticsNum" class="layui-form-label">物流单号</label>
<div class="layui-input-block">
<input type="text" id="logisticsNum" name="logisticsNum" value="${order.logisticsNum}"
placeholder="请输入物流单号" autocomplete="off" class="layui-input">
<c:forEach items="${packages}" var="item">
<div>
<div class="layui-form-item formItem">
<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>
</c:forEach>
<div class="layui-form-item formItem">
<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;"
@ -105,6 +245,6 @@
return false;
});
})
</script>
</script>--%>
</body>
</html>

View File

@ -541,7 +541,7 @@
layer.open({
title: "处理发货地址修改申请",
content: root + "/order/getUpdateAddress?type=1&orderId=" + data.id,
area: ['500px', '300px'],
area: ['700px', '600px'],
offset: '20%',
type: 2,
})
@ -549,7 +549,7 @@
layer.open({
title: "修改地址",
content: root + "/order/getEditAddress?type=1&orderId=" + data.id,
area: ['500px', '300px'],
area: ['700px', '600px'],
offset: '20%',
type: 2,
})

View File

@ -10,24 +10,39 @@
<%-- <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">--%>
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<%-- <script src="${root}/static/core/js/react/react.production.min.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 crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>--%>
<%-- <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>--%>
<script src="${root}/static/core/js/base/tailwindcss.js"></script>
<script>
const orderId = ${orderId};
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>
</head>
<body>
<body style="background-color: white">
<div id="root"></div>
<script type="text/babel">
const {useState} = React
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 [logisticsName, setLogisticsName] = useState("")
const [activePackage, setActivePackage] = useState(0)
return <div>
<div className="p-2 flex">
@ -50,14 +65,21 @@
<button className="layui-btn layui-btn-xs" onClick={() => {
// TODO: STEP1: 将商品添加到 packages 中
const _packages = [...packages]
_packages[activePackage].goods.push({
name: goods.goodsName,
num: goods.goodsNum
})
const goodsInPackageIndex = _packages[activePackage].goods.findIndex(el => el.id === goods.id)
if (goodsInPackageIndex !== -1) {
_packages[activePackage].goods[goodsInPackageIndex].num += 1
} else {
_packages[activePackage].goods.push({
id: goods.id,
name: goods.goodsName,
num: 1
})
}
setPackages(_packages)
// TODO: STEP2: 在 goodsList 中扣除已添加的商品数量 goodsNum
const _goodsList = [...goodsList]
_goodsList.find(el => el.id === goods.id).goodsNum -= 1
setGoodsList(_goodsList)
}}>
添加到包裹
</button>
@ -74,7 +96,9 @@
<div className="layui-form-item">
<label className="layui-form-label w-[100px]">物流名称</label>
<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="请输入物流公司名称"
autoComplete="off" className="layui-input"/>
</div>
@ -82,7 +106,7 @@
{
packages.map((pack, index) => <div key={pack.id}
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,
}}
onClick={() => {
@ -92,25 +116,75 @@
<div className="absolute left-4 -top-3 bg-white">包裹{index + 1}</div>
{packages.length > 1 && < button type="button"
onClick={() => {
if (index === activePackage) {
// TODO: WHY
setTimeout(() => {
setActivePackage(state => state - 1)
}, 0)
}
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">
<i className="layui-icon layui-icon-close text-white"></i>
</button>}
<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">
<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="请输入运单号"
autoComplete="off" className="layui-input"/>
</div>
</div>
<div>
{
pack.goods.map(goods => <div key={goods.goodsName}>
{goods.name}
</div>)
}
<div className="pl-2">
<table className="layui-table">
<thead>
<tr>
<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>)
}
@ -118,9 +192,11 @@
setPackages(state => {
return [...state, {
id: Date.now(),
logisticsNumber: "",
goods: []
}]
})
setActivePackage(packages.length)
}}>添加包裹
</button>
</form>
@ -128,13 +204,86 @@
</div>
</div>
<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>
}
const container = document.getElementById("root")
const root = ReactDOM.createRoot(container);
root.render(<App/>);
const rootApp = ReactDOM.createRoot(container);
rootApp.render(<App/>);
</script>
</body>
</html>

View File

@ -15,9 +15,129 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport"
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>
<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-row">
<form class="layui-form" id="formData" lay-filter="formData">
@ -93,5 +213,6 @@
});
})
</script>
--%>
</body>
</html>

View File

@ -20,6 +20,10 @@
<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/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>
var root = "${root}";
var admin = function () {

File diff suppressed because one or more lines are too long