From 814c4e8a608d4abfcef031826222f969bc61b8a0 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期六, 11 四月 2026 15:47:23 +0800
Subject: [PATCH] #地图管理列表优化

---
 src/main/java/com/zy/asrs/mapper/BasMapMapper.java            |    2 
 src/main/webapp/views/basMap/basMap.html                      |   31 ++++++++++
 src/main/resources/mapper/BasMapMapper.xml                    |   14 ++++
 src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java |   14 ++++
 src/main/java/com/zy/asrs/controller/BasMapController.java    |   12 +++
 src/main/webapp/static/js/basMap/basMap.js                    |   92 ++++++++++++++++++++++++++++--
 src/main/java/com/zy/asrs/service/BasMapService.java          |    7 ++
 7 files changed, 164 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/BasMapController.java b/src/main/java/com/zy/asrs/controller/BasMapController.java
index 66318de..062ce52 100644
--- a/src/main/java/com/zy/asrs/controller/BasMapController.java
+++ b/src/main/java/com/zy/asrs/controller/BasMapController.java
@@ -37,6 +37,16 @@
         return R.ok(basMapService.getById(String.valueOf(id)));
     }
 
+    @GetMapping("/basMap/payload/{id}/auth")
+    @ManagerAuth
+    public R getPayload(@PathVariable("id") Integer id) {
+        BasMap basMap = basMapService.selectPayloadById(id);
+        if (basMap == null) {
+            return R.error("鍦板浘涓嶅瓨鍦�");
+        }
+        return R.ok(basMap);
+    }
+
     @RequestMapping(value = "/basMap/list/auth")
     @ManagerAuth
     public R list(@RequestParam(defaultValue = "1")Integer curr,
@@ -51,7 +61,7 @@
         allLike(BasMap.class, param.keySet(), wrapper, condition);
         if (!Cools.isEmpty(orderByField)){wrapper.orderBy(true, "asc".equals(orderByType), humpToLine(orderByField));}
         wrapper.orderBy(true, true, "lev");
-        return R.ok(basMapService.page(new Page<>(curr, limit), wrapper));
+        return R.ok(basMapService.pageLight(new Page<>(curr, limit), wrapper));
     }
 
     private <T> void convert(Map<String, Object> map, QueryWrapper<T> wrapper){
diff --git a/src/main/java/com/zy/asrs/mapper/BasMapMapper.java b/src/main/java/com/zy/asrs/mapper/BasMapMapper.java
index 6cdaf55..2253d59 100644
--- a/src/main/java/com/zy/asrs/mapper/BasMapMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/BasMapMapper.java
@@ -13,4 +13,6 @@
 
     boolean deleteByLev(Integer lev);//鍒犻櫎鎸囧畾妤煎眰鍦板浘
 
+    BasMap selectPayloadById(Integer id);//鎸塱d鏌ヨ鍦板浘澶у瓧娈�
+
 }
diff --git a/src/main/java/com/zy/asrs/service/BasMapService.java b/src/main/java/com/zy/asrs/service/BasMapService.java
index 0abd219..f25a8d7 100644
--- a/src/main/java/com/zy/asrs/service/BasMapService.java
+++ b/src/main/java/com/zy/asrs/service/BasMapService.java
@@ -1,5 +1,8 @@
 package com.zy.asrs.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.zy.asrs.entity.BasMap;
 
 import java.util.List;
@@ -16,4 +19,8 @@
 
     int syncLocMastByMap(Integer lev);//鎸夊湴鍥惧悓姝ユ寚瀹氭ゼ灞俵ocType
 
+    IPage<BasMap> pageLight(Page<BasMap> page, QueryWrapper<BasMap> wrapper);//杞婚噺鍒嗛〉鏌ヨ
+
+    BasMap selectPayloadById(Integer id);//鎸塱d鏌ヨ鍦板浘澶у瓧娈�
+
 }
diff --git a/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java
index 8e15ed0..d8d8e92 100644
--- a/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/BasMapServiceImpl.java
@@ -4,6 +4,8 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.core.common.Cools;
 import com.core.exception.CoolException;
@@ -50,6 +52,18 @@
     }
 
     @Override
+    public IPage<BasMap> pageLight(Page<BasMap> page, QueryWrapper<BasMap> wrapper) {
+        QueryWrapper<BasMap> queryWrapper = wrapper == null ? new QueryWrapper<>() : wrapper;
+        queryWrapper.select("id", "create_time", "update_time", "lev", "base_row", "base_row_code", "base_bay", "base_bay_code");
+        return this.baseMapper.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public BasMap selectPayloadById(Integer id) {
+        return this.baseMapper.selectPayloadById(id);
+    }
+
+    @Override
     @Transactional
     public int syncLocMastByMap(Integer lev) {
         if (lev == null || lev <= 0) {
diff --git a/src/main/resources/mapper/BasMapMapper.xml b/src/main/resources/mapper/BasMapMapper.xml
index a195cc9..e17ce74 100644
--- a/src/main/resources/mapper/BasMapMapper.xml
+++ b/src/main/resources/mapper/BasMapMapper.xml
@@ -18,6 +18,14 @@
 
     </resultMap>
 
+    <resultMap id="PayloadResultMap" type="com.zy.asrs.entity.BasMap">
+        <id column="id" property="id" />
+        <result column="lev" property="lev" />
+        <result column="data" property="data" />
+        <result column="last_data" property="lastData" />
+        <result column="origin_data" property="originData" />
+    </resultMap>
+
     <select id="selectLatestMap" resultMap="BaseResultMap">
         select *
         from asr_bas_map
@@ -26,4 +34,10 @@
         limit 0,1
     </select>
 
+    <select id="selectPayloadById" resultMap="PayloadResultMap">
+        select id, lev, data, last_data, origin_data
+        from asr_bas_map
+        where id = #{id}
+    </select>
+
 </mapper>
diff --git a/src/main/webapp/static/js/basMap/basMap.js b/src/main/webapp/static/js/basMap/basMap.js
index 105fe22..d5e1c79 100644
--- a/src/main/webapp/static/js/basMap/basMap.js
+++ b/src/main/webapp/static/js/basMap/basMap.js
@@ -499,7 +499,7 @@
     }
 
     function isSearchableField(field) {
-        return !!field && field.kind !== 'image' && !field.textarea;
+        return !!field && field.kind !== 'image' && !field.textarea && ['data', 'lastData', 'originData'].indexOf(field.field) === -1;
     }
 
     function isSortableField(field) {
@@ -556,7 +556,9 @@
     }
 
     function createDefaultVisibleColumnKeys() {
-        return fieldMeta.map(function (field) {
+        return fieldMeta.filter(function (field) {
+            return ['data', 'lastData', 'originData'].indexOf(field.field) === -1;
+        }).map(function (field) {
             return field.field;
         });
     }
@@ -842,6 +844,18 @@
                         mode: 'create',
                         submitting: false
                     },
+                    payloadDialog: {
+                        visible: false,
+                        loading: false,
+                        row: null,
+                        data: {
+                            id: null,
+                            lev: '',
+                            data: '',
+                            lastData: '',
+                            originData: ''
+                        }
+                    },
                     layoutTimer: null,
                     tableResizeHandler: null,
                     dialogForm: createFormDefaults(),
@@ -1092,16 +1106,82 @@
                     this.dialog.visible = true;
                     this.$nextTick(this.resetDialogState);
                 },
+                createEmptyPayloadData: function () {
+                    return {
+                        id: null,
+                        lev: '',
+                        data: '',
+                        lastData: '',
+                        originData: ''
+                    };
+                },
+                openPayloadDialog: function (row) {
+                    var self = this;
+                    if (!row || isEmptyValue(row[self.primaryKeyField])) {
+                        self.$message.warning('褰撳墠璁板綍涓嶅瓨鍦�');
+                        return;
+                    }
+                    self.payloadDialog.visible = true;
+                    self.payloadDialog.loading = true;
+                    self.payloadDialog.row = row;
+                    self.payloadDialog.data = self.createEmptyPayloadData();
+                    $.ajax({
+                        url: baseUrl + '/' + simpleEntityName + '/payload/' + encodeURIComponent(row[self.primaryKeyField]) + '/auth',
+                        method: 'GET',
+                        headers: self.authHeaders(),
+                        success: function (res) {
+                            self.payloadDialog.loading = false;
+                            if (self.handleForbidden(res)) {
+                                return;
+                            }
+                            if (!res || res.code !== 200) {
+                                self.$message.error((res && res.msg) ? res.msg : '鍔犺浇鍦板浘鏁版嵁澶辫触');
+                                return;
+                            }
+                            self.payloadDialog.data = $.extend({}, self.createEmptyPayloadData(), res.data || {});
+                        },
+                        error: function () {
+                            self.payloadDialog.loading = false;
+                            self.$message.error('鍔犺浇鍦板浘鏁版嵁澶辫触');
+                        }
+                    });
+                },
                 openEditDialog: function (row) {
                     var self = this;
+                    if (!row || isEmptyValue(row[self.primaryKeyField])) {
+                        self.$message.warning('褰撳墠璁板綍涓嶅瓨鍦�');
+                        return;
+                    }
                     self.dialog.mode = 'edit';
                     self.dialog.visible = true;
                     self.$nextTick(function () {
                         self.resetDialogState();
-                        fillFormFromRow(row, self.dialogForm, self.dialogDisplay);
-                        if (self.$refs.dialogForm) {
-                            self.$refs.dialogForm.clearValidate();
-                        }
+                        self.dialog.submitting = true;
+                        $.ajax({
+                            url: baseUrl + '/' + simpleEntityName + '/' + encodeURIComponent(row[self.primaryKeyField]) + '/auth',
+                            method: 'GET',
+                            headers: self.authHeaders(),
+                            success: function (res) {
+                                self.dialog.submitting = false;
+                                if (self.handleForbidden(res)) {
+                                    return;
+                                }
+                                if (!res || res.code !== 200) {
+                                    self.$message.error((res && res.msg) ? res.msg : '鍔犺浇璇︽儏澶辫触');
+                                    self.dialog.visible = false;
+                                    return;
+                                }
+                                fillFormFromRow(res.data || {}, self.dialogForm, self.dialogDisplay);
+                                if (self.$refs.dialogForm) {
+                                    self.$refs.dialogForm.clearValidate();
+                                }
+                            },
+                            error: function () {
+                                self.dialog.submitting = false;
+                                self.dialog.visible = false;
+                                self.$message.error('鍔犺浇璇︽儏澶辫触');
+                            }
+                        });
                     });
                 },
                 buildDialogPayload: function () {
diff --git a/src/main/webapp/views/basMap/basMap.html b/src/main/webapp/views/basMap/basMap.html
index c6774fa..0c5b56b 100644
--- a/src/main/webapp/views/basMap/basMap.html
+++ b/src/main/webapp/views/basMap/basMap.html
@@ -583,8 +583,9 @@
                                 <span v-else>{{ valueOrDash(getTableValue(scope.row, field)) }}</span>
                             </template>
                         </el-table-column>
-                        <el-table-column label="鎿嶄綔" width="220" fixed="right" align="center">
+                        <el-table-column label="鎿嶄綔" width="300" fixed="right" align="center">
                             <template slot-scope="scope">
+                                <el-button type="text" @click="openPayloadDialog(scope.row)">鏌ョ湅鍦板浘鏁版嵁</el-button>
                                 <el-button type="text" @click="openVisualEditor(scope.row)">鍙鍖栫紪杈�</el-button>
                                 <el-button type="text" @click="openEditDialog(scope.row)">淇敼</el-button>
                                 <el-button type="text" style="color:#f56c6c;" @click="removeRows([scope.row[primaryKeyField]])">鍒犻櫎</el-button>
@@ -612,6 +613,34 @@
 
     <el-dialog
         class="dialog-panel"
+        title="鍦板浘鏁版嵁璇︽儏"
+        :visible.sync="payloadDialog.visible"
+        width="960px"
+        :close-on-click-modal="false">
+        <div v-loading="payloadDialog.loading">
+            <el-descriptions :column="2" border size="small" style="margin-bottom: 16px;">
+                <el-descriptions-item label="ID">{{ valueOrDash(payloadDialog.data.id) }}</el-descriptions-item>
+                <el-descriptions-item label="灞傛暟">{{ valueOrDash(payloadDialog.data.lev) }}</el-descriptions-item>
+            </el-descriptions>
+            <el-tabs>
+                <el-tab-pane label="瀹炴椂鏁版嵁">
+                    <el-input :value="stringValue(payloadDialog.data.data)" type="textarea" :rows="8" readonly></el-input>
+                </el-tab-pane>
+                <el-tab-pane label="鏈�杩戞暟鎹�">
+                    <el-input :value="stringValue(payloadDialog.data.lastData)" type="textarea" :rows="8" readonly></el-input>
+                </el-tab-pane>
+                <el-tab-pane label="鍘熷鍦板浘">
+                    <el-input :value="stringValue(payloadDialog.data.originData)" type="textarea" :rows="8" readonly></el-input>
+                </el-tab-pane>
+            </el-tabs>
+        </div>
+        <div slot="footer" class="dialog-footer">
+            <el-button @click="payloadDialog.visible = false">鍏抽棴</el-button>
+        </div>
+    </el-dialog>
+
+    <el-dialog
+        class="dialog-panel"
         :title="dialog.mode === 'create' ? '鏂板鍦板浘' : '淇敼鍦板浘'"
         :visible.sync="dialog.visible"
         width="760px"

--
Gitblit v1.9.1