From 8a1f312d9f7842bb02c97b200e017926f0af63a5 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 17 九月 2025 14:48:08 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/domain/enums/MapExcelNodeType.java | 43 +++
src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java | 18
src/main/java/com/zy/common/model/MapNode.java | 2
src/main/java/com/zy/asrs/controller/LocMastController.java | 202 +++++++++----
src/main/java/com/zy/asrs/utils/MapExcelUtils.java | 311 ++++++++++++++++++++++
src/main/java/com/zy/asrs/utils/Utils.java | 14 +
src/main/webapp/views/admin/basMap/basMap.html | 6
src/main/java/com/zy/asrs/controller/BasMapController.java | 50 +++
src/main/webapp/static/js/basMap/basMap.js | 135 +++++----
pom.xml | 11
src/main/java/com/zy/core/ServerBootstrap.java | 3
11 files changed, 659 insertions(+), 136 deletions(-)
diff --git a/pom.xml b/pom.xml
index aca0a6a..cfdaad0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -111,6 +111,17 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.poi</groupId>
+ <artifactId>poi</artifactId>
+ <version>3.13</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.poi</groupId>
+ <artifactId>poi-ooxml</artifactId>
+ <version>3.13</version>
+ </dependency>
+
</dependencies>
<build>
diff --git a/src/main/java/com/zy/asrs/controller/BasMapController.java b/src/main/java/com/zy/asrs/controller/BasMapController.java
index 2d248c1..16ca989 100644
--- a/src/main/java/com/zy/asrs/controller/BasMapController.java
+++ b/src/main/java/com/zy/asrs/controller/BasMapController.java
@@ -1,20 +1,31 @@
package com.zy.asrs.controller;
+import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.DateUtils;
import com.zy.asrs.entity.BasMap;
+import com.zy.asrs.entity.BasShuttleCharge;
import com.zy.asrs.service.BasMapService;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
+import com.zy.asrs.service.BasShuttleChargeService;
+import com.zy.asrs.utils.MapExcelUtils;
+import com.zy.common.model.MapNode;
+import com.zy.common.utils.RedisUtil;
import com.zy.common.web.BaseController;
+import com.zy.core.enums.RedisKeyType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.File;
+import java.io.IOException;
import java.util.*;
@RestController
@@ -22,6 +33,10 @@
@Autowired
private BasMapService basMapService;
+ @Autowired
+ private BasShuttleChargeService basShuttleChargeService;
+ @Autowired
+ private RedisUtil redisUtil;
@RequestMapping(value = "/basMap/{id}/auth")
@ManagerAuth
@@ -122,4 +137,39 @@
return R.ok();
}
+ @Autowired
+ private MapExcelUtils mapExcelUtils;
+
+ @PostMapping("/basMap/upload")
+ public R uploadExcel(@RequestParam("file") MultipartFile file) throws IOException {
+ // 淇濆瓨涓婁紶鐨勬枃浠跺埌涓存椂浣嶇疆
+ String tempFilePath = System.getProperty("java.io.tmpdir") + file.getOriginalFilename();
+ file.transferTo(new File(tempFilePath));
+
+ HashMap<Integer, List<List<HashMap<String, Object>>>> dataMap = mapExcelUtils.readExcel(tempFilePath);
+ HashMap<Integer, List<List<MapNode>>> levMap = mapExcelUtils.processExcelData(dataMap);
+
+ // 鍒犻櫎涓存椂鏂囦欢
+ new File(tempFilePath).delete();
+
+ basMapService.delete(new EntityWrapper<>());
+
+ for (Map.Entry<Integer, List<List<MapNode>>> entry : levMap.entrySet()) {
+ Integer lev = entry.getKey();
+ List<List<MapNode>> map = entry.getValue();
+
+ Date now = new Date();
+ BasMap basMap = new BasMap();
+ basMap.setLev(lev);
+ basMap.setOriginData(JSON.toJSONString(map, SerializerFeature.DisableCircularReferenceDetect));
+ basMap.setCreateTime(now);
+ basMap.setUpdateTime(now);
+ basMapService.insert(basMap);
+
+ redisUtil.del(RedisKeyType.MAP.key + lev);
+ }
+
+ return R.ok();
+ }
+
}
diff --git a/src/main/java/com/zy/asrs/controller/LocMastController.java b/src/main/java/com/zy/asrs/controller/LocMastController.java
index 55346b9..09048b0 100644
--- a/src/main/java/com/zy/asrs/controller/LocMastController.java
+++ b/src/main/java/com/zy/asrs/controller/LocMastController.java
@@ -13,8 +13,10 @@
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasMap;
+import com.zy.asrs.entity.BasShuttleCharge;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.service.BasMapService;
+import com.zy.asrs.service.BasShuttleChargeService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.MapNode;
@@ -41,6 +43,8 @@
private LocMastService locMastService;
@Autowired
private BasMapService basMapService;
+ @Autowired
+ private BasShuttleChargeService basShuttleChargeService;
@RequestMapping(value = "/locMast/{id}/auth")
@ManagerAuth
@@ -145,81 +149,147 @@
@PostMapping("/locMast/init")
@ManagerAuth(memo = "鍒濆鍖栧簱浣�")
@Transactional
- public R locMastInit(@RequestParam Integer lev) {
- BasMap basMap = basMapService.selectLatestMap(lev);
- locMastService.delete(new EntityWrapper<>(new LocMast())
- .eq("lev1", lev));
- List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
- for (int row = 0; row < lists.size(); row++) {
- List<MapNode> nodeList = lists.get(row);
- for (int bay = 0; bay < nodeList.size(); bay++) {
- MapNode mapNode = nodeList.get(bay);
+ public R locMastInit() {
+ List<BasMap> basMaps = basMapService.selectList(new EntityWrapper<BasMap>().orderBy("lev", true));
+ basShuttleChargeService.delete(new EntityWrapper<>());
+ int chargeNo = 1;
+ for (BasMap basMap : basMaps) {
+ Integer lev = basMap.getLev();
+ locMastService.delete(new EntityWrapper<>(new LocMast())
+ .eq("lev1", lev));
+ List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
+ for (int row = 0; row < lists.size(); row++) {
+ List<MapNode> nodeList = lists.get(row);
+ for (int bay = 0; bay < nodeList.size(); bay++) {
+ MapNode mapNode = nodeList.get(bay);
- if (mapNode.getValue() == MapNodeType.DISABLE.id) {
- continue;
- }
-
- String locNo = Utils.getLocNo(row, bay, lev);
- LocMast locMast = new LocMast();
- locMast.setLocNo(locNo);
- locMast.setRow1(row);
- locMast.setBay1(bay);
- locMast.setLev1(lev);
- locMast.setStatus(1);
-
- if (mapNode.getValue() == MapNodeType.NORMAL_PATH.id) {
- locMast.setLocSts(LocStsType.O.toString());
- } else if (mapNode.getValue() == MapNodeType.MAIN_PATH.id) {
- locMast.setLocSts(LocStsType.W.toString());
- }
-
- locMastService.insert(locMast);
- }
- }
-
- LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("lev1", lev).orderBy("row1", false));
- Integer rowMax = locMast.getRow1();
- Integer baseRow = basMap.getBaseRow();
- Integer baseRowCode = basMap.getBaseRowCode();
-
- for (int i = baseRow; i <= rowMax; i++) {
- Integer baseBayCode = basMap.getBaseBayCode();
- if (basMap.getBaseBay() > 0) {
- for (int j = 1; j <= basMap.getBaseBay(); j++) {
- String locNo = Utils.getLocNo(i, j, lev);
-
- LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
- .eq("loc_no", locNo));
- if (locMast1 != null) {
- HashMap<String, Object> point = new HashMap<>();
- point.put("y", baseRowCode);
- point.put("x", baseBayCode);
- point.put("z", lev);
- locMast1.setQrCodeValue(JSON.toJSONString(point));
- locMastService.updateById(locMast1);
+ if (mapNode.getValue() == MapNodeType.DISABLE.id) {
+ continue;
}
- baseBayCode += 1;
+
+ String locNo = Utils.getLocNo(row, bay, lev);
+ LocMast locMast = new LocMast();
+ locMast.setLocNo(locNo);
+ locMast.setRow1(row);
+ locMast.setBay1(bay);
+ locMast.setLev1(lev);
+ locMast.setStatus(1);
+
+ if (mapNode.getValue() == MapNodeType.NORMAL_PATH.id) {
+ locMast.setLocSts(LocStsType.O.toString());
+ } else if (mapNode.getValue() == MapNodeType.MAIN_PATH.id) {
+ locMast.setLocSts(LocStsType.W.toString());
+ } else if (mapNode.getValue() == MapNodeType.CHARGE.id) {
+ locMast.setLocSts(LocStsType.C.toString());
+
+ BasShuttleCharge basShuttleCharge = new BasShuttleCharge();
+ basShuttleCharge.setChargeId(chargeNo++);
+ basShuttleCharge.setLocNo(locNo);
+ basShuttleCharge.setWaitLocNo(locNo);
+ basShuttleCharge.setStatus(1);
+ basShuttleCharge.setCreateTime(new Date());
+ basShuttleCharge.setUpdateTime(new Date());
+ basShuttleChargeService.insert(basShuttleCharge);
+ } else if (mapNode.getValue() == MapNodeType.CONVEYOR.id) {
+ locMast.setLocSts(LocStsType.E.toString());
+ } else if (mapNode.getValue() == MapNodeType.LIFT.id) {
+ locMast.setLocSts(LocStsType.E.toString());
+ }
+
+ locMastService.insert(locMast);
+ }
+ }
+
+ LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("lev1", lev).orderBy("row1", false));
+ Integer rowMax = locMast.getRow1();
+ LocMast locMast2 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("lev1", lev).orderBy("bay1", false));
+ Integer bayMax = locMast2.getBay1();
+
+ Integer baseRow = basMap.getBaseRow();
+ Integer baseRowCode = basMap.getBaseRowCode();
+
+ if (baseRow > 0) {
+ for (int i = baseRow; i <= rowMax; i++) {
+ Integer baseBayCode = basMap.getBaseBayCode();
+ if (basMap.getBaseBay() > 0) {
+ for (int j = basMap.getBaseBay(); j <= bayMax; j++) {
+ String locNo = Utils.getLocNo(i, j, lev);
+
+ LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
+ .eq("loc_no", locNo));
+ if (locMast1 != null) {
+ HashMap<String, Object> point = new HashMap<>();
+ point.put("y", baseRowCode);
+ point.put("x", baseBayCode);
+ point.put("z", lev);
+ locMast1.setQrCodeValue(JSON.toJSONString(point));
+ locMastService.updateById(locMast1);
+ }
+ baseBayCode += 1;
+ }
+ }else {
+ int baseBay = basMap.getBaseBay() * -1;
+ for (int j = baseBay; j > 0; j--) {
+ String locNo = Utils.getLocNo(i, j, lev);
+
+ LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
+ .eq("loc_no", locNo));
+ if (locMast1 != null) {
+ HashMap<String, Object> point = new HashMap<>();
+ point.put("y", baseRowCode);
+ point.put("x", baseBayCode);
+ point.put("z", lev);
+ locMast1.setQrCodeValue(JSON.toJSONString(point));
+ locMastService.updateById(locMast1);
+ }
+ baseBayCode += 1;
+ }
+ }
+ baseRowCode += 1;
}
}else {
- int baseBay = basMap.getBaseBay() * -1;
- for (int j = baseBay; j > 0; j--) {
- String locNo = Utils.getLocNo(i, j, lev);
+ baseRow = baseRow * -1;
+ for (int i = baseRow; i > 0; i--) {
+ Integer baseBayCode = basMap.getBaseBayCode();
+ if (basMap.getBaseBay() > 0) {
+ for (int j = basMap.getBaseBay(); j <= bayMax; j++) {
+ String locNo = Utils.getLocNo(i, j, lev);
- LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
- .eq("loc_no", locNo));
- if (locMast1 != null) {
- HashMap<String, Object> point = new HashMap<>();
- point.put("y", baseRowCode);
- point.put("x", baseBayCode);
- point.put("z", lev);
- locMast1.setQrCodeValue(JSON.toJSONString(point));
- locMastService.updateById(locMast1);
+ LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
+ .eq("loc_no", locNo));
+ if (locMast1 != null) {
+ HashMap<String, Object> point = new HashMap<>();
+ point.put("y", baseRowCode);
+ point.put("x", baseBayCode);
+ point.put("z", lev);
+ locMast1.setQrCodeValue(JSON.toJSONString(point));
+ locMastService.updateById(locMast1);
+ }
+ baseBayCode += 1;
+ }
+ }else {
+ int baseBay = basMap.getBaseBay() * -1;
+ for (int j = baseBay; j > 0; j--) {
+ String locNo = Utils.getLocNo(i, j, lev);
+
+ LocMast locMast1 = locMastService.selectOne(new EntityWrapper<LocMast>()
+ .eq("loc_no", locNo));
+ if (locMast1 != null) {
+ HashMap<String, Object> point = new HashMap<>();
+ point.put("y", baseRowCode);
+ point.put("x", baseBayCode);
+ point.put("z", lev);
+ locMast1.setQrCodeValue(JSON.toJSONString(point));
+ locMastService.updateById(locMast1);
+ }
+ baseBayCode += 1;
+ }
}
- baseBayCode += 1;
+ baseRowCode += 1;
}
}
- baseRowCode += 1;
}
+
return R.ok();
}
diff --git a/src/main/java/com/zy/asrs/domain/enums/MapExcelNodeType.java b/src/main/java/com/zy/asrs/domain/enums/MapExcelNodeType.java
new file mode 100644
index 0000000..255dd96
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/enums/MapExcelNodeType.java
@@ -0,0 +1,43 @@
+package com.zy.asrs.domain.enums;
+
+public enum MapExcelNodeType {
+
+ LIFT("RGB(255,192,0)", "鎻愬崌鏈�"),
+ CHARGE("RGB(255,0,0)", "鍏呯數妗�"),
+ STATION("RGB(0,112,192)", "绔欑偣"),
+ MAIN_PATH("RGB(255,255,0)", "涓昏建閬�"),
+ NORMAL_PATH("RGB(0,176,80)", "瀛愯建閬�"),
+ ;
+
+ public String flag;
+ public String desc;
+
+ MapExcelNodeType(String flag, String desc) {
+ this.flag = flag;
+ this.desc = desc;
+ }
+
+ public static MapExcelNodeType get(String flag) {
+ if (null == flag) {
+ return null;
+ }
+ for (MapExcelNodeType type : MapExcelNodeType.values()) {
+ if (type.flag.equals(flag)) {
+ return type;
+ }
+ }
+ return null;
+ }
+
+ public static MapExcelNodeType get(MapExcelNodeType type) {
+ if (null == type) {
+ return null;
+ }
+ for (MapExcelNodeType type2 : MapExcelNodeType.values()) {
+ if (type2 == type) {
+ return type2;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/zy/asrs/utils/MapExcelUtils.java b/src/main/java/com/zy/asrs/utils/MapExcelUtils.java
new file mode 100644
index 0000000..e3ffb96
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/MapExcelUtils.java
@@ -0,0 +1,311 @@
+package com.zy.asrs.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.core.common.Cools;
+import com.zy.asrs.domain.enums.MapExcelNodeType;
+import com.zy.common.model.MapNode;
+import com.zy.core.enums.MapNodeType;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFColor;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class MapExcelUtils {
+
+ public HashMap<Integer, List<List<MapNode>>> processExcelData(HashMap<Integer, List<List<HashMap<String, Object>>>> dataMap) {
+ HashMap<Integer, List<List<MapNode>>> levMap = new HashMap<>();
+ for (Map.Entry<Integer, List<List<HashMap<String, Object>>>> entry : dataMap.entrySet()) {
+ Integer lev = entry.getKey();
+ List<List<HashMap<String, Object>>> excelData = entry.getValue();
+
+ HashMap<Integer, JSONObject> rowMap = new HashMap<>();
+ HashMap<Integer, JSONObject> bayMap = new HashMap<>();
+
+ int finalRow = -1;
+ int finalBay = -1;
+
+ //鑾峰彇鍒楁暟鎹�
+ List<HashMap<String, Object>> tmpList0 = excelData.get(0);
+ List<HashMap<String, Object>> tmpList1 = excelData.get(1);
+ for (int i = 2; i < tmpList1.size(); i++) {
+ HashMap<String, Object> tmpBayMap = tmpList1.get(i);
+ if (Cools.isEmpty(tmpBayMap.get("value"))) {
+ continue;
+ }
+ HashMap<String, Object> tmpDistanceMap = tmpList0.get(i);
+ int bay = (int) Double.parseDouble(tmpBayMap.get("value").toString());
+ JSONObject distanceData = JSON.parseObject(tmpDistanceMap.get("value").toString());
+
+ bayMap.put(bay, distanceData);
+ finalBay = bay;
+ }
+
+ //鑾峰彇鎺掓暟鎹�
+ for (int i = 2; i < excelData.size(); i++) {
+ List<HashMap<String, Object>> rowData = excelData.get(i);
+ HashMap<String, Object> tmpRowMap = rowData.get(1);
+ if (Cools.isEmpty(tmpRowMap.get("value"))) {
+ continue;
+ }
+ HashMap<String, Object> tmpDistanceMap = rowData.get(0);
+ int row = (int) Double.parseDouble(tmpRowMap.get("value").toString());
+ JSONObject distanceData = JSON.parseObject(tmpDistanceMap.get("value").toString());
+ rowMap.put(row, distanceData);
+ finalRow = row;
+ }
+
+ List<List<MapNode>> mapList = new ArrayList<>();
+ //鐢熸垚浜岀淮鍧愭爣
+ for (int row = 1; row <= finalRow; row++) {
+ List<MapNode> rows = new ArrayList<>();
+ for (int bay = 1; bay <= finalBay; bay++) {
+ MapNode node = new MapNode();
+ node.setId(row + "-" + bay);
+
+ HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
+ String nodeType = nodeData.get("bgColor").toString();
+ String data = "";
+ if (nodeType.equals(MapExcelNodeType.MAIN_PATH.flag)) {
+ node.setValue(MapNodeType.MAIN_PATH.id);
+ } else if (nodeType.equals(MapExcelNodeType.NORMAL_PATH.flag)) {
+ node.setValue(MapNodeType.NORMAL_PATH.id);
+ } else if (nodeType.equals(MapExcelNodeType.LIFT.flag)) {
+ node.setValue(MapNodeType.LIFT.id);
+ JSONObject jsonData = JSON.parseObject(nodeData.get("value").toString());
+ data = jsonData.getString("value");
+ } else if (nodeType.equals(MapExcelNodeType.CHARGE.flag)) {
+ node.setValue(MapNodeType.CHARGE.id);
+ JSONObject jsonData = JSON.parseObject(nodeData.get("value").toString());
+ data = jsonData.getString("value");
+ } else if (nodeType.equals(MapExcelNodeType.STATION.flag)) {
+ node.setValue(MapNodeType.CONVEYOR.id);
+ JSONObject jsonData = JSON.parseObject(nodeData.get("value").toString());
+ data = jsonData.getString("value");
+ }else {
+ node.setValue(MapNodeType.DISABLE.id);
+ }
+
+ node.setData(data);
+ rows.add(node);
+ }
+ mapList.add(rows);
+ }
+
+ //鐢熸垚灏忚溅鍦板浘鍧愭爣闂磋窛鏁版嵁
+ for (int row = 1; row <= finalRow; row++) {
+ for (int bay = 1; bay <= finalBay; bay++) {
+ MapNode mapNode = mapList.get(row - 1).get(bay - 1);
+ JSONObject rowData = rowMap.get(row);
+ JSONObject bayData = bayMap.get(bay);
+
+ Integer top = rowData.getInteger("top");
+ Integer bottom = rowData.getInteger("bottom");
+ Integer left = bayData.getInteger("left");
+ Integer right = bayData.getInteger("right");
+
+ mapNode.setTop(top);
+ mapNode.setBottom(bottom);
+ mapNode.setLeft(left);
+ mapNode.setRight(right);
+ }
+ }
+
+ //鐢熸垚鐗涚溂Y鍧愭爣鍩哄噯鏁版嵁
+ for (int bay = 1; bay <= finalBay; bay++) {
+ int yBase = 10000;
+ for (int row = 1; row <= finalRow; row++) {
+ MapNode mapNode = mapList.get(row - 1).get(bay - 1);
+ HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
+
+ JSONObject rowData = rowMap.get(row);
+ Integer bottom = rowData.getInteger("bottom");
+ String nodeValue = nodeData.get("value").toString();
+ if (Utils.isJSON(nodeValue)) {
+ JSONObject jsonData = JSON.parseObject(nodeValue);
+ if (jsonData.containsKey("bottom")) {
+ bottom = jsonData.getInteger("bottom");
+ }
+ }
+
+ if (row != 1) {
+ yBase += bottom;
+ }
+ mapNode.setYBase(yBase);
+ }
+ }
+
+ //鐢熸垚鐗涚溂X鍧愭爣鍩哄噯鏁版嵁
+ for (int row = 1; row <= finalRow; row++) {
+ int xBase = 10000;
+ for (int bay = 1; bay <= finalBay; bay++) {
+ MapNode mapNode = mapList.get(row - 1).get(bay - 1);
+ HashMap<String, Object> nodeData = excelData.get(row + 1).get(bay + 1);
+
+ JSONObject bayData = bayMap.get(bay);
+ Integer right = bayData.getInteger("right");
+ String nodeValue = nodeData.get("value").toString();
+ if (Utils.isJSON(nodeValue)) {
+ JSONObject jsonData = JSON.parseObject(nodeValue);
+ if (jsonData.containsKey("right")) {
+ right = jsonData.getInteger("right");
+ }
+ }
+
+ if (bay != 1) {
+ xBase += right;
+ }
+ mapNode.setXBase(xBase);
+ }
+ }
+
+ //鐢熸垚鍥涘悜杞﹀湴鍥炬墍闇�鏍煎紡
+ MapNode disableNode = new MapNode();
+ disableNode.setId("0-0");
+ disableNode.setValue(MapNodeType.DISABLE.id);
+ disableNode.setLeft(0);
+ disableNode.setRight(0);
+ disableNode.setTop(0);
+ disableNode.setBottom(0);
+
+ List<MapNode> disableRow = new ArrayList<>();
+ for (int bay = 1; bay <= finalBay; bay++) {
+ disableRow.add(disableNode);
+ }
+ disableRow.add(0, disableNode);
+ disableRow.add(disableNode);
+ for (List<MapNode> mapNodes : mapList) {
+ mapNodes.add(0, disableNode);
+ mapNodes.add(disableNode);
+ }
+ mapList.add(0, disableRow);
+ mapList.add(disableRow);
+
+ System.out.println(JSON.toJSONString(mapList, SerializerFeature.DisableCircularReferenceDetect));
+ levMap.put(lev, mapList);
+ }
+
+ return levMap;
+ }
+
+ public HashMap<Integer, List<List<HashMap<String, Object>>>> readExcel(String filePath) throws IOException {
+ HashMap<Integer, List<List<HashMap<String, Object>>>> dataMap = new HashMap<>();
+
+ FileInputStream inputStream = new FileInputStream(new File(filePath));
+ Workbook workbook;
+
+ if (filePath.endsWith(".xlsx")) {
+ workbook = new XSSFWorkbook(inputStream);
+ } else if (filePath.endsWith(".xls")) {
+ throw new IllegalArgumentException("鏂囦欢鏍煎紡涓嶆敮鎸�");
+ } else {
+ throw new IllegalArgumentException("鏂囦欢鏍煎紡涓嶆敮鎸�");
+ }
+
+ int numberOfSheets = workbook.getNumberOfSheets();
+ System.out.println("鎬诲叡鏈� " + numberOfSheets + " 涓猄heet");
+
+ // 閬嶅巻鎵�鏈塖heet
+ for (int i = 0; i < numberOfSheets; i++) {
+ Sheet sheet = workbook.getSheetAt(i);
+ String sheetName = sheet.getSheetName();
+
+ List<List<HashMap<String, Object>>> data = new ArrayList<>();
+ if (sheetName.contains("F")) {
+ String[] split = sheetName.split("F");
+ String levStr = split[0];
+ Integer lev = Integer.parseInt(levStr);
+
+ for (Row row : sheet) {
+ List<HashMap<String, Object>> rowData = new ArrayList<>();
+ for (Cell cell : row) {
+ rowData.add(getCellValue(cell));
+ }
+ data.add(rowData);
+ }
+
+ dataMap.put(lev, data);
+ }
+ }
+
+ workbook.close();
+ inputStream.close();
+ return dataMap;
+ }
+
+ private HashMap<String, Object> getCellValue(Cell cell) {
+ if (cell == null) {
+ return null;
+ }
+
+ HashMap<String, Object> map = new HashMap<>();
+
+ String bgColor = getCellBackgroundColor(cell);
+ map.put("bgColor", bgColor);
+
+ String value = "";
+ switch (cell.getCellType()) {
+ case Cell.CELL_TYPE_STRING:
+ value = cell.getStringCellValue();
+ break;
+ case Cell.CELL_TYPE_NUMERIC:
+ value = String.valueOf(cell.getNumericCellValue());
+ break;
+ case Cell.CELL_TYPE_BOOLEAN:
+ value = String.valueOf(cell.getBooleanCellValue());
+ break;
+ case Cell.CELL_TYPE_FORMULA:
+ value = cell.getCellFormula();
+ break;
+ case Cell.CELL_TYPE_BLANK:
+ value = "";
+ break;
+ default:
+ value = "";
+ }
+
+ map.put("value", value);
+ return map;
+ }
+
+
+ public String getCellBackgroundColor(Cell cell) {
+ if (cell == null) {
+ return "鏃犲崟鍏冩牸";
+ }
+
+ CellStyle style = cell.getCellStyle();
+ short bgColorIndex = style.getFillForegroundColor(); // 鑾峰彇鍓嶆櫙鑹�(瀹為檯鏄簳鑹�)
+
+ return getXSSFBackgroundColor(style);
+ }
+
+ // 澶勭悊XSSF (.xlsx) 棰滆壊
+ private String getXSSFBackgroundColor(CellStyle style) {
+ XSSFColor color = (XSSFColor) style.getFillForegroundColorColor();
+ if (color == null) {
+ return "default";
+ }
+
+ byte[] rgb = color.getRGB();
+ if (rgb == null) {
+ return "default";
+ }
+
+ return String.format("RGB(%d,%d,%d)",
+ rgb[0] & 0xFF,
+ rgb[1] & 0xFF,
+ rgb[2] & 0xFF);
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java b/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
index 695d85a..2bd93fd 100644
--- a/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
+++ b/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
@@ -65,45 +65,45 @@
if (wrkMast.getWrkSts() == WrkStsType.INBOUND_SHUTTLE_RUN.sts) {
//5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
wrkMast.setWrkSts(WrkStsType.COMPLETE_INBOUND.sts);
- shuttleThread.setSyncTaskNo(0);
+ shuttleThread.setTaskNo(0);
} else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN.sts) {
//102.灏忚溅鎼繍涓� ==> 103.灏忚溅鎼繍瀹屾垚
wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts);
- shuttleThread.setSyncTaskNo(0);
+ shuttleThread.setTaskNo(0);
} else if (wrkMast.getWrkSts() == WrkStsType.MOVE_NEARBY.sts) {
//302.灏忚溅绉诲姩鑷宠繎鐐逛腑 ==> 303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴�
wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY_COMPLETE.sts);
- shuttleThread.setSyncTaskNo(0);
+ shuttleThread.setTaskNo(0);
} else if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT.sts) {
//304.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴�
wrkMast.setWrkSts(WrkStsType.MOVE_IN_LIFT_COMPLETE.sts);
- shuttleThread.setSyncTaskNo(0);
+ shuttleThread.setTaskNo(0);
} else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT.sts) {
//308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
continue;//灏忚溅鏈埌杈剧洰鏍囧眰
}
wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);
- shuttleThread.setSyncTaskNo(0);
+ shuttleThread.setTaskNo(0);
} else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE.sts) {
//310.灏忚溅绉诲姩涓� ==> 311.灏忚溅绉诲姩瀹屾垚
wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
- shuttleThread.setSyncTaskNo(0);
+ shuttleThread.setTaskNo(0);
notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVE_COMPLETE);//瑙﹀彂閫氱煡
} else if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_START_CHARGING.sts) {
//204.灏忚溅寮�鍚厖鐢典腑 ==> 205.灏忚溅鍏呯數涓�
wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_CHARGING.sts);
- shuttleThread.setSyncTaskNo(0);
+ shuttleThread.setTaskNo(0);
notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
} else if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_CHARGING.sts) {
//205.灏忚溅鍏呯數涓� ==> 206.灏忚溅鍏呯數瀹屾垚
wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_CHARGING_COMPLETE.sts);
- shuttleThread.setSyncTaskNo(0);
+ shuttleThread.setTaskNo(0);
notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
} else if (wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts) {
//502.灏忚溅鎼繍涓� ==> 509.绉诲簱瀹屾垚
wrkMast.setWrkSts(WrkStsType.COMPLETE_LOC_MOVE.sts);
- shuttleThread.setSyncTaskNo(0);
+ shuttleThread.setTaskNo(0);
notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_DELIVERY);//瑙﹀彂閫氱煡
} else {
continue;
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index e874172..26132f4 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -1,5 +1,7 @@
package com.zy.asrs.utils;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Arith;
import com.core.common.Cools;
@@ -293,4 +295,16 @@
return recentLocNo;
}
+
+ public static boolean isJSON(String value) {
+ try {
+ JSONObject jsonData = JSON.parseObject(value);
+ if (jsonData == null) {
+ return false;
+ }
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
}
diff --git a/src/main/java/com/zy/common/model/MapNode.java b/src/main/java/com/zy/common/model/MapNode.java
index a6a8ae6..50899d6 100644
--- a/src/main/java/com/zy/common/model/MapNode.java
+++ b/src/main/java/com/zy/common/model/MapNode.java
@@ -8,6 +8,8 @@
@Data
public class MapNode implements Cloneable {
+ private String id;
+
/**
* -1 绂佺敤
* 0 瀛愯建閬�
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index a5cfd84..096e4f1 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -150,6 +150,9 @@
String locNo = Utils.getLocNo(basLift.getPoint$().getRow(), basLift.getPoint$().getBay(), 1);
LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locNo));
JSONObject point = JSON.parseObject(locMast.getQrCodeValue());
+ if (point == null) {
+ continue;
+ }
deviceConfig.setOtherData(point.getInteger("x") + "-" + point.getInteger("y"));
if (deviceConfig.getFake() == 1) {
fakeDevices.add(deviceConfig);
diff --git a/src/main/webapp/static/js/basMap/basMap.js b/src/main/webapp/static/js/basMap/basMap.js
index ff156df..a21e47d 100644
--- a/src/main/webapp/static/js/basMap/basMap.js
+++ b/src/main/webapp/static/js/basMap/basMap.js
@@ -1,19 +1,20 @@
var pageCurr;
layui.config({
base: baseUrl + "/static/layui/lay/modules/"
-}).use(['table','laydate', 'form', 'admin'], function(){
+}).use(['table', 'laydate', 'form', 'admin', 'upload'], function () {
var table = layui.table;
var $ = layui.jquery;
var layer = layui.layer;
var layDate = layui.laydate;
var form = layui.form;
var admin = layui.admin;
+ var upload = layui.upload;
// 鏁版嵁娓叉煋
tableIns = table.render({
elem: '#basMap',
headers: {token: localStorage.getItem('token')},
- url: baseUrl+'/basMap/list/auth',
+ url: baseUrl + '/basMap/list/auth',
page: true,
limit: 15,
limits: [15, 30, 50, 100, 200, 500],
@@ -23,18 +24,18 @@
cols: [[
{type: 'checkbox'}
// ,{field: 'id', align: 'center',title: '#'}
- ,{field: 'lev', align: 'center',title: '灞傛暟'}
- ,{field: 'data', align: 'center',title: '瀹炴椂鏁版嵁'}
- ,{field: 'createTime$', align: 'center',title: '鍒涘缓鏃堕棿'}
- ,{field: 'updateTime$', align: 'center',title: '鏇存柊鏃堕棿'}
- ,{field: 'lastData', align: 'center',title: '鏈�杩戞暟鎹�'}
- ,{field: 'originData', align: 'center',title: '鍘熷鍦板浘'}
- ,{field: 'baseRow', align: 'center',title: '鍩哄噯鎺�'}
- ,{field: 'baseRowCode', align: 'center',title: '鍩哄噯鎺�-code'}
- ,{field: 'baseBay', align: 'center',title: '鍩哄噯鍒�'}
- ,{field: 'baseBayCode', align: 'center',title: '鍩哄噯鍒�-code'}
+ , {field: 'lev', align: 'center', title: '灞傛暟'}
+ , {field: 'data', align: 'center', title: '瀹炴椂鏁版嵁'}
+ , {field: 'createTime$', align: 'center', title: '鍒涘缓鏃堕棿'}
+ , {field: 'updateTime$', align: 'center', title: '鏇存柊鏃堕棿'}
+ , {field: 'lastData', align: 'center', title: '鏈�杩戞暟鎹�'}
+ , {field: 'originData', align: 'center', title: '鍘熷鍦板浘'}
+ , {field: 'baseRow', align: 'center', title: '鍩哄噯鎺�'}
+ , {field: 'baseRowCode', align: 'center', title: '鍩哄噯鎺�-code'}
+ , {field: 'baseBay', align: 'center', title: '鍩哄噯鍒�'}
+ , {field: 'baseBayCode', align: 'center', title: '鍩哄噯鍒�-code'}
- ,{fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:240}
+ , {fixed: 'right', title: '鎿嶄綔', align: 'center', toolbar: '#operate', width: 120}
]],
request: {
pageName: 'curr',
@@ -51,19 +52,34 @@
response: {
statusCode: 200
},
- done: function(res, curr, count) {
+ done: function (res, curr, count) {
if (res.code === 403) {
- top.location.href = baseUrl+"/";
+ top.location.href = baseUrl + "/";
}
- pageCurr=curr;
+ pageCurr = curr;
limit();
+ }
+ });
+
+ // 娓叉煋
+ upload.render({
+ elem: '.demo-class-accept', // 缁戝畾澶氫釜鍏冪礌
+ url: baseUrl + "/basMap/upload", // 姝ゅ閰嶇疆浣犺嚜宸辩殑涓婁紶鎺ュ彛鍗冲彲
+ accept: 'file', // 鏅�氭枃浠�
+ done: function (res) {
+ if (res.code == 200) {
+ layer.msg('瀵煎叆鎴愬姛');
+ tableReload()
+ }else {
+ layer.msg(res.msg, {icon: 2})
+ }
}
});
// 鐩戝惉鎺掑簭浜嬩欢
table.on('sort(basMap)', function (obj) {
var searchData = {};
- $.each($('#search-box [name]').serializeArray(), function() {
+ $.each($('#search-box [name]').serializeArray(), function () {
searchData[this.name] = this.value;
});
searchData['orderByField'] = obj.field;
@@ -77,23 +93,26 @@
// 鐩戝惉澶村伐鍏锋爮浜嬩欢
table.on('toolbar(basMap)', function (obj) {
var checkStatus = table.checkStatus(obj.config.id).data;
- switch(obj.event) {
+ switch (obj.event) {
case 'addData':
showEditModel();
break;
case 'deleteData':
- if (checkStatus.length === 0) {
- layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
- return;
- }
- del(checkStatus.map(function (d) {
- return d.id;
- }));
- break;
+ if (checkStatus.length === 0) {
+ layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+ return;
+ }
+ del(checkStatus.map(function (d) {
+ return d.id;
+ }));
+ break;
+ case 'initLocMast':
+ initLocMast()
+ break;
case 'exportData':
- admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){
- var titles=[];
- var fields=[];
+ admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function () {
+ var titles = [];
+ var fields = [];
obj.config.cols[0].map(function (col) {
if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
titles.push(col.title);
@@ -101,7 +120,7 @@
}
});
var exportData = {};
- $.each($('#search-box [name]').serializeArray(), function() {
+ $.each($('#search-box [name]').serializeArray(), function () {
exportData[this.name] = this.value;
});
var param = {
@@ -109,18 +128,18 @@
'fields': fields
};
$.ajax({
- url: baseUrl+"/basMap/export/auth",
+ url: baseUrl + "/basMap/export/auth",
headers: {'token': localStorage.getItem('token')},
data: JSON.stringify(param),
- dataType:'json',
- contentType:'application/json;charset=UTF-8',
+ dataType: 'json',
+ contentType: 'application/json;charset=UTF-8',
method: 'POST',
success: function (res) {
layer.closeAll();
if (res.code === 200) {
- table.exportFile(titles,res.data,'xls');
+ table.exportFile(titles, res.data, 'xls');
} else if (res.code === 403) {
- top.location.href = baseUrl+"/";
+ top.location.href = baseUrl + "/";
} else {
layer.msg(res.msg, {icon: 2})
}
@@ -132,7 +151,7 @@
});
// 鐩戝惉琛屽伐鍏蜂簨浠�
- table.on('tool(basMap)', function(obj){
+ table.on('tool(basMap)', function (obj) {
var data = obj.data;
switch (obj.event) {
case 'edit':
@@ -141,13 +160,10 @@
case "del":
del([data.id]);
break;
- case "initLocMast":
- initLocMast(data);
- break;
}
});
- function initLocMast(data) {
+ function initLocMast() {
layer.confirm('纭畾鍒濆鍖栧簱浣嶆暟鎹悧锛�', {
skin: 'layui-layer-admin',
shade: .1
@@ -155,19 +171,17 @@
layer.close(i);
var loadIndex = layer.load(2);
$.ajax({
- url: baseUrl+"/locMast/init",
+ url: baseUrl + "/locMast/init",
headers: {'token': localStorage.getItem('token')},
- data: {
- lev: data.lev
- },
+ data: {},
method: 'POST',
success: function (res) {
layer.close(loadIndex);
- if (res.code === 200){
+ if (res.code === 200) {
layer.msg(res.msg, {icon: 1});
tableReload();
- } else if (res.code === 403){
- top.location.href = baseUrl+"/";
+ } else if (res.code === 403) {
+ top.location.href = baseUrl + "/";
} else {
layer.msg(res.msg, {icon: 2});
}
@@ -189,19 +203,19 @@
form.on('submit(editSubmit)', function (data) {
var loadIndex = layer.load(2);
$.ajax({
- url: baseUrl+"/basMap/"+(mData?'update':'add')+"/auth",
+ url: baseUrl + "/basMap/" + (mData ? 'update' : 'add') + "/auth",
headers: {'token': localStorage.getItem('token')},
data: data.field,
method: 'POST',
success: function (res) {
layer.close(loadIndex);
- if (res.code === 200){
+ if (res.code === 200) {
layer.close(dIndex);
layer.msg(res.msg, {icon: 1});
tableReload();
- } else if (res.code === 403){
- top.location.href = baseUrl+"/";
- }else {
+ } else if (res.code === 403) {
+ top.location.href = baseUrl + "/";
+ } else {
layer.msg(res.msg, {icon: 2});
}
}
@@ -223,17 +237,17 @@
layer.close(i);
var loadIndex = layer.load(2);
$.ajax({
- url: baseUrl+"/basMap/delete/auth",
+ url: baseUrl + "/basMap/delete/auth",
headers: {'token': localStorage.getItem('token')},
data: {ids: ids},
method: 'POST',
success: function (res) {
layer.close(loadIndex);
- if (res.code === 200){
+ if (res.code === 200) {
layer.msg(res.msg, {icon: 1});
tableReload();
- } else if (res.code === 403){
- top.location.href = baseUrl+"/";
+ } else if (res.code === 403) {
+ top.location.href = baseUrl + "/";
} else {
layer.msg(res.msg, {icon: 2});
}
@@ -260,22 +274,23 @@
setTimeout(function () {
layDate.render({
elem: '.layui-laydate-range'
- ,type: 'datetime'
- ,range: true
+ , type: 'datetime'
+ , range: true
});
layDate.render({
elem: '#createTime\\$',
type: 'datetime',
- value: data!==undefined?data['createTime\\$']:null
+ value: data !== undefined ? data['createTime\\$'] : null
});
layDate.render({
elem: '#updateTime\\$',
type: 'datetime',
- value: data!==undefined?data['updateTime\\$']:null
+ value: data !== undefined ? data['updateTime\\$'] : null
});
}, 300);
}
+
layDateRender();
});
diff --git a/src/main/webapp/views/admin/basMap/basMap.html b/src/main/webapp/views/admin/basMap/basMap.html
index 68c4e56..f30e086 100644
--- a/src/main/webapp/views/admin/basMap/basMap.html
+++ b/src/main/webapp/views/admin/basMap/basMap.html
@@ -51,12 +51,16 @@
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
<button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+ <button type="button" class="layui-btn demo-class-accept" lay-options="{accept: 'file'}">
+ <i class="layui-icon layui-icon-upload"></i>
+ 瀵煎叆鍦板浘
+ </button>
+ <button class="layui-btn layui-btn-sm layui-btn-primary" id="btn-initLocMast" lay-event="initLocMast">鍒濆鍖栧簱浣�</button>
<button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
</div>
</script>
<script type="text/html" id="operate">
- <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="initLocMast">鍒濆鍖栧簱浣�</a>
<a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
<a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
</script>
--
Gitblit v1.9.1