LIJIAN il y a 1 mois
Parent
commit
79a544618f

+ 2 - 2
ema-admin/src/main/java/com/ema/admin/modules/assets/entity/AssetStatusHistory.java

@@ -28,10 +28,9 @@ import lombok.EqualsAndHashCode;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
 @ApiModel("资产状态历史表")
 @Table("asset_status_history")
-public class AssetStatusHistory extends BaseEntity implements Serializable {
+public class AssetStatusHistory implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
@@ -102,6 +101,7 @@ public class AssetStatusHistory extends BaseEntity implements Serializable {
      * 操作时间
      */
     @ApiModelProperty("操作时间")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private LocalDateTime operatorDate;
 
     /**

+ 111 - 77
ema-admin/src/main/resources/web/pages/assets/asset_status_history_form.html

@@ -8,99 +8,129 @@
     <style>
         body { padding: 20px; }
         .required { color: #ff5722; }
-        .layui-form-label { width: 120px; }
-        .layui-input-block { margin-left: 150px; }
+        .layui-form-item { margin-bottom: 18px; }
+        .form-section {
+            background: #fff;
+            border-radius: 4px;
+        }
+        .section-title {
+            font-size: 14px;
+            font-weight: 600;
+            color: #333;
+            padding-bottom: 10px;
+            margin-bottom: 15px;
+            border-bottom: 1px solid #eee;
+        }
+        .btn-group {
+            margin-top: 20px;
+            padding-top: 15px;
+            border-top: 1px solid #f0f0f0;
+        }
     </style>
 </head>
 <body>
     <form class="layui-form" lay-filter="historyForm" id="historyForm">
         <input type="hidden" name="id" id="historyId">
         <input type="hidden" name="assetId" id="assetId">
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label"><span class="required">*</span>使用公司</label>
-            <div class="layui-input-block">
-                <input type="text" name="useCompany" lay-verify="required" placeholder="请输入使用公司" class="layui-input" style="width: 300px;">
+
+        <div class="form-section">
+            <div class="section-title"><i class="layui-icon layui-icon-user"></i> 使用信息</div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label"><span class="required">*</span>使用公司</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="useCompany" lay-verify="required" placeholder="请输入使用公司" class="layui-input" style="width: 300px;">
+                </div>
             </div>
-        </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label"><span class="required">*</span>使用部门</label>
-            <div class="layui-input-block">
-                <input type="text" name="useDept" lay-verify="required" placeholder="请输入使用部门" class="layui-input" style="width: 300px;">
+
+            <div class="layui-form-item">
+                <label class="layui-form-label"><span class="required">*</span>使用部门</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="useDept" lay-verify="required" placeholder="请输入使用部门" class="layui-input" style="width: 300px;">
+                </div>
             </div>
-        </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label"><span class="required">*</span>使用人</label>
-            <div class="layui-input-block">
-                <input type="text" name="useUser" lay-verify="required" placeholder="请输入使用人" class="layui-input" style="width: 200px;">
+
+            <div class="layui-form-item">
+                <label class="layui-form-label"><span class="required">*</span>使用人</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="useUser" lay-verify="required" placeholder="请输入使用人" class="layui-input" style="width: 300px;">
+                </div>
             </div>
-        </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label"><span class="required">*</span>使用状态</label>
-            <div class="layui-input-block">
-                <select name="useStatus" lay-verify="required" class="layui-select" style="width: 200px;">
-                    <option value="">请选择使用状态</option>
-                    <option value="在库">在库</option>
-                    <option value="正常使用">正常使用</option>
-                    <option value="已转移">已转移</option>
-                    <option value="报废中">报废中</option>
-                    <option value="维修中">维修中</option>
-                </select>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label"><span class="required">*</span>使用状态</label>
+                <div class="layui-input-inline">
+                    <select name="useStatus" lay-verify="required" class="layui-select" style="width: 300px;">
+                        <option value="">请选择使用状态</option>
+                        <option value="在库">在库</option>
+                        <option value="正常使用">正常使用</option>
+                        <option value="已转移">已转移</option>
+                        <option value="报废中">报废中</option>
+                        <option value="维修中">维修中</option>
+                    </select>
+                </div>
             </div>
-        </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">当前位置</label>
-            <div class="layui-input-block">
-                <input type="text" name="curLocation" placeholder="请输入当前位置" class="layui-input" style="width: 300px;">
+            <div class="layui-form-item">
+                <label class="layui-form-label">当前位置</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="curLocation" placeholder="请输入当前位置" class="layui-input" style="width: 300px;">
+                </div>
             </div>
         </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">生效开始日期</label>
-            <div class="layui-input-block">
-                <input type="text" name="startDate" id="startDate" placeholder="yyyy-MM-dd" class="layui-input" style="width: 200px;">
+
+        <div class="form-section">
+            <div class="section-title"><i class="layui-icon layui-icon-date"></i> 时间信息</div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">生效开始</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="startDate" id="startDate" placeholder="yyyy-MM-dd" class="layui-input" style="width: 300px;">
+                </div>
             </div>
-        </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">生效结束日期</label>
-            <div class="layui-input-block">
-                <input type="text" name="endDate" id="endDate" placeholder="yyyy-MM-dd" class="layui-input" style="width: 200px;">
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">生效结束</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="endDate" id="endDate" placeholder="yyyy-MM-dd" class="layui-input" style="width: 300px;">
+                </div>
             </div>
         </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">操作人</label>
-            <div class="layui-input-block">
-                <input type="text" name="operatorName" placeholder="请输入操作人" class="layui-input" style="width: 200px;">
+
+        <div class="form-section">
+            <div class="section-title"><i class="layui-icon layui-icon-admin"></i> 操作信息</div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">操作人</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="operatorName" placeholder="请输入操作人" class="layui-input" style="width: 300px;">
+                </div>
             </div>
-        </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">协管员</label>
-            <div class="layui-input-block">
-                <input type="text" name="assistantName" placeholder="请输入协管员" class="layui-input" style="width: 200px;">
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">协管员</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="assistantName" placeholder="请输入协管员" class="layui-input" style="width: 300px;">
+                </div>
             </div>
         </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">备注</label>
-            <div class="layui-input-block">
-                <textarea name="remark" placeholder="请输入备注" class="layui-textarea" style="width: 350px; height: 80px;"></textarea>
+
+        <div class="form-section">
+            <div class="section-title"><i class="layui-icon layui-icon-note"></i> 备注信息</div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">备注</label>
+                <div class="layui-input-block">
+                    <textarea name="remark" placeholder="请输入备注" class="layui-textarea" style="width: 350px; height: 80px;"></textarea>
+                </div>
             </div>
         </div>
-        
-        <div class="layui-form-item">
-            <div class="layui-input-block">
-                <button type="submit" class="layui-btn" lay-submit lay-filter="submitForm">提交</button>
-            </div>
+
+        <div class="btn-group">
+            <button type="submit" class="layui-btn" lay-submit lay-filter="submitForm">提交</button>
+            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
         </div>
     </form>
-    
+
     <script src="../../lib/jquery.min.js"></script>
     <script src="../../lib/layui/layui.js"></script>
     <script src="../../js/config.js"></script>
@@ -109,17 +139,17 @@
         layui.use(['form', 'laydate'], function() {
             var form = layui.form;
             var laydate = layui.laydate;
-            
+
             var id = Common.getQueryString('id');
             var assetId = Common.getQueryString('assetId') || '';
             var isEdit = !!id;
-            
+
             // 初始化日期选择器
             laydate.render({ elem: '#startDate', format: 'yyyy-MM-dd' });
             laydate.render({ elem: '#endDate', format: 'yyyy-MM-dd' });
-            
+
             $('#assetId').val(assetId);
-            
+
             if (isEdit) {
                 Common.get(Config.api.assetStatusHistory.getInfo + '/' + id, function(res) {
                     if (res.code === 200) {
@@ -127,7 +157,7 @@
                     }
                 });
             }
-            
+
             form.on('submit(submitForm)', function(data) {
                 Common.ajax({
                     url: isEdit ? Config.api.assetStatusHistory.update : Config.api.assetStatusHistory.save,
@@ -137,7 +167,11 @@
                         Common.success(isEdit ? '修改成功' : '添加成功', function() {
                             var index = parent.layer.getFrameIndex(window.name);
                             parent.layer.close(index);
-                            parent.layui.table.reload('tableList');
+                            if (parent.refreshHistoryList) {
+                                parent.refreshHistoryList();
+                            } else {
+                                parent.layui.table.reload('tableList');
+                            }
                         });
                     }
                 });

+ 0 - 154
ema-admin/src/main/resources/web/pages/assets/asset_status_history_list.html

@@ -1,154 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>资产状态历史</title>
-    <link rel="stylesheet" href="../../lib/layui/css/layui.css">
-    <style>
-        body { padding: 15px; }
-        .search-form { margin-bottom: 15px; padding: 15px; background: #fff; border-radius: 4px; }
-        .table-toolbar { margin-bottom: 10px; }
-    </style>
-</head>
-<body>
-    <div class="search-form">
-        <form class="layui-form layui-form-pane" lay-filter="searchForm">
-            <div class="layui-form-item">
-                <div class="layui-inline">
-                    <label class="layui-form-label">使用状态</label>
-                    <div class="layui-input-inline">
-                        <select name="useStatus" class="layui-select">
-                            <option value="">全部</option>
-                            <option value="在库">在库</option>
-                            <option value="正常使用">正常使用</option>
-                            <option value="已转移">已转移</option>
-                            <option value="报废中">报废中</option>
-                            <option value="维修中">维修中</option>
-                        </select>
-                    </div>
-                </div>
-                <div class="layui-inline">
-                    <label class="layui-form-label">使用部门</label>
-                    <div class="layui-input-inline">
-                        <input type="text" name="useDept" placeholder="请输入使用部门" class="layui-input">
-                    </div>
-                </div>
-                <div class="layui-inline">
-                    <label class="layui-form-label">使用人</label>
-                    <div class="layui-input-inline">
-                        <input type="text" name="useUser" placeholder="请输入使用人" class="layui-input">
-                    </div>
-                </div>
-                <div class="layui-inline">
-                    <button type="button" class="layui-btn" id="btnSearch"><i class="layui-icon layui-icon-search"></i> 搜索</button>
-                    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
-                </div>
-            </div>
-        </form>
-    </div>
-    
-    <div class="table-toolbar">
-        <button class="layui-btn layui-btn-sm" id="btnAdd"><i class="layui-icon layui-icon-add-1"></i> 添加</button>
-    </div>
-    
-    <table id="tableList" lay-filter="tableList"></table>
-    
-    <script type="text/html" id="toolbar">
-        <a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i> 编辑</a>
-        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i> 删除</a>
-    </script>
-    
-    <script type="text/html" id="useStatusTpl">
-        {{# if(d.useStatus === '在库') { }}
-            <span class="layui-badge layui-bg-gray">在库</span>
-        {{# } else if(d.useStatus === '正常使用') { }}
-            <span class="layui-badge layui-bg-green">正常使用</span>
-        {{# } else if(d.useStatus === '已转移') { }}
-            <span class="layui-badge layui-bg-blue">已转移</span>
-        {{# } else if(d.useStatus === '报废中') { }}
-            <span class="layui-badge layui-bg-orange">报废中</span>
-        {{# } else if(d.useStatus === '维修中') { }}
-            <span class="layui-badge layui-bg-yellow">维修中</span>
-        {{# } else { }}
-            <span class="layui-badge layui-bg-cyan">{{d.useStatus}}</span>
-        {{# } }}
-    </script>
-    
-    <script type="text/html" id="currentTpl">
-        <span>{{d.useCompany}} / {{d.useDept}} / {{d.useUser}}</span>
-    </script>
-    
-    <script src="../../lib/jquery.min.js"></script>
-    <script src="../../lib/layui/layui.js"></script>
-    <script src="../../js/config.js"></script>
-    <script src="../../js/common.js"></script>
-    <script>
-        layui.use(['table', 'layer', 'form'], function() {
-            var table = layui.table;
-            var layer = layui.layer;
-            var form = layui.form;
-            
-            var assetId = Common.getQueryString('assetId') || '';
-            
-            var tableIns = TableRender.init({
-                elem: '#tableList',
-                url: Config.api.assetStatusHistory.page,
-                where: { assetId: assetId },
-                cols: [[
-                    { type: 'checkbox', fixed: 'left' },
-                    { field: 'useCompany', title: '使用公司', width: 150 },
-                    { field: 'useDept', title: '使用部门', width: 120 },
-                    { field: 'useUser', title: '使用人', width: 100 },
-                    { field: 'useStatus', title: '使用状态', width: 110, templet: '#useStatusTpl' },
-                    { field: 'curLocation', title: '当前位置', width: 150 },
-                    { field: 'startDate', title: '生效开始日期', width: 130, templet: function(d) { return d.startDate || '-'; } },
-                    { field: 'endDate', title: '生效结束日期', width: 130, templet: function(d) { return d.endDate || '-'; } },
-                    { field: 'operatorName', title: '操作人', width: 100 },
-                    { field: 'operatorDate', title: '操作时间', width: 170, templet: function(d) { return d.operatorDate ? Common.formatDate(d.operatorDate) : '-'; } },
-                    { field: 'remark', title: '备注' },
-                    { fixed: 'right', title: '操作', width: 150, align: 'center', toolbar: '#toolbar' }
-                ]]
-            });
-            
-            $('#btnSearch').click(function() {
-                var data = form.val('searchForm');
-                data.assetId = assetId;
-                table.reload('tableList', {
-                    where: data,
-                    page: { curr: 1 }
-                });
-            });
-            
-            $('#btnAdd').click(function() {
-                Common.open({
-                    title: '添加资产状态历史',
-                    area: ['650px', '550px'],
-                    content: 'asset_status_history_form.html?assetId=' + assetId
-                });
-            });
-            
-            table.on('tool(tableList)', function(obj) {
-                var data = obj.data;
-                var event = obj.event;
-                
-                if (event === 'edit') {
-                    Common.open({
-                        title: '编辑资产状态历史',
-                        area: ['650px', '550px'],
-                        content: 'asset_status_history_form.html?assetId=' + assetId + '&id=' + data.id
-                    });
-                } else if (event === 'del') {
-                    Common.confirm('确定要删除该状态历史记录吗?', function() {
-                        Common.del(Config.api.assetStatusHistory.remove + '/' + data.id, function(res) {
-                            Common.success('删除成功', function() {
-                                obj.del();
-                            });
-                        });
-                    });
-                }
-            });
-        });
-    </script>
-</body>
-</html>

+ 136 - 88
ema-admin/src/main/resources/web/pages/assets/assets_form.html

@@ -8,122 +8,163 @@
     <style>
         body { padding: 20px; }
         .required { color: #ff5722; }
-        .layui-form-item { margin-bottom: 20px; }
+        .layui-form-item { margin-bottom: 18px; }
+        .form-section {
+            background: #fff;
+            border-radius: 4px;
+            padding: 20px;
+            margin-bottom: 15px;
+        }
+        .section-title {
+            font-size: 14px;
+            font-weight: 600;
+            color: #333;
+            padding-bottom: 10px;
+            margin-bottom: 15px;
+            border-bottom: 1px solid #eee;
+        }
+        .btn-group {
+            margin-top: 20px;
+            padding-top: 15px;
+            border-top: 1px solid #f0f0f0;
+        }
     </style>
 </head>
 <body>
     <form class="layui-form" lay-filter="assetsForm" id="assetsForm">
         <input type="hidden" name="id" id="assetsId">
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label"><span class="required">*</span>资产管理部门</label>
-            <div class="layui-input-block">
-                <input type="text" name="deptName" lay-verify="required" placeholder="请输入资产管理部门" class="layui-input" style="width: 300px;">
+
+        <div class="form-section">
+            <div class="section-title"><i class="layui-icon layui-icon-user"></i> 基本信息</div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label"><span class="required">*</span>资产管理部门</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="deptName" lay-verify="required" placeholder="请输入资产管理部门" class="layui-input" style="width: 300px;">
+                </div>
             </div>
-        </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label"><span class="required">*</span>资产编码</label>
-            <div class="layui-input-block">
-                <input type="text" name="assetCode" lay-verify="required" placeholder="请输入资产编码" class="layui-input" style="width: 300px;">
+
+            <div class="layui-form-item">
+                <label class="layui-form-label"><span class="required">*</span>资产编码</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="assetCode" lay-verify="required" placeholder="请输入资产编码" class="layui-input" style="width: 300px;">
+                </div>
             </div>
-        </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label"><span class="required">*</span>资产类型</label>
-            <div class="layui-input-block">
-                <input type="text" name="assetType" lay-verify="required" placeholder="请输入资产类型" class="layui-input" style="width: 200px;">
+
+            <div class="layui-form-item">
+                <label class="layui-form-label"><span class="required">*</span>资产类型</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="assetType" lay-verify="required" placeholder="请输入资产类型" class="layui-input" style="width: 200px;">
+                </div>
             </div>
         </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">品牌</label>
-            <div class="layui-input-block">
-                <input type="text" name="brand" placeholder="请输入品牌" class="layui-input" style="width: 200px;">
+
+        <div class="form-section">
+            <div class="section-title"><i class="layui-icon layui-icon-set"></i> 规格信息</div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">品牌</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="brand" placeholder="请输入品牌" class="layui-input" style="width: 200px;">
+                </div>
             </div>
-        </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">型号</label>
-            <div class="layui-input-block">
-                <input type="text" name="model" placeholder="请输入型号" class="layui-input" style="width: 200px;">
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">型号</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="model" placeholder="请输入型号" class="layui-input" style="width: 200px;">
+                </div>
             </div>
         </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">购买日期</label>
-            <div class="layui-input-block">
-                <input type="text" name="purchaseDate" id="purchaseDate" placeholder="请选择购买日期" class="layui-input" style="width: 200px;">
+
+        <div class="form-section">
+            <div class="section-title"><i class="layui-icon layui-icon-rmb"></i> 采购信息</div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">购买日期</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="purchaseDate" id="purchaseDate" placeholder="请选择购买日期" class="layui-input" style="width: 200px;">
+                </div>
             </div>
-        </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">采购价值</label>
-            <div class="layui-input-block">
-                <input type="number" name="purchaseValue" placeholder="请输入采购价值" class="layui-input" style="width: 200px;">
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">采购价值</label>
+                <div class="layui-input-inline">
+                    <input type="number" name="purchaseValue" placeholder="请输入采购价值" class="layui-input" style="width: 200px;">
+                </div>
             </div>
         </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">盘点状态</label>
-            <div class="layui-input-block">
-                <select name="invstkStatus" class="layui-select" style="width: 200px;">
-                    <option value="0">未盘点</option>
-                    <option value="1">已盘点</option>
-                </select>
+
+        <div class="form-section">
+            <div class="section-title"><i class="layui-icon layui-icon-chart-screen"></i> 盘点信息</div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">盘点状态</label>
+                <div class="layui-input-inline">
+                    <select name="invstkStatus" class="layui-select" style="width: 200px;">
+                        <option value="0">未盘点</option>
+                        <option value="1">已盘点</option>
+                    </select>
+                </div>
             </div>
-        </div>
 
-        <div class="layui-form-item">
-            <label class="layui-form-label">最后盘点时间</label>
-            <div class="layui-input-block">
-                <input type="text" name="lastInvstkTime" id="lastInvstkTime" placeholder="请选择最后盘点时间" class="layui-input" style="width: 200px;">
+            <div class="layui-form-item">
+                <label class="layui-form-label">最后盘点时间</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="lastInvstkTime" id="lastInvstkTime" placeholder="请选择最后盘点时间" class="layui-input" style="width: 200px;">
+                </div>
             </div>
         </div>
-        
-        <div class="layui-form-item">
-            <label class="layui-form-label">备注</label>
-            <div class="layui-input-block">
-                <textarea name="remark" placeholder="请输入备注" class="layui-textarea" style="width: 350px; height: 80px;"></textarea>
+
+        <div class="form-section">
+            <div class="section-title"><i class="layui-icon layui-icon-note"></i> 备注信息</div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">备注</label>
+                <div class="layui-input-block">
+                    <textarea name="remark" placeholder="请输入备注" class="layui-textarea" style="width: 400px; height: 80px;"></textarea>
+                </div>
             </div>
         </div>
 
-        <div class="layui-form-item">
-            <label class="layui-form-label">扩展字段1</label>
-            <div class="layui-input-block">
-                <input type="text" name="attribute1" placeholder="请输入扩展字段1" class="layui-input" style="width: 200px;">
+        <div class="form-section">
+            <div class="section-title"><i class="layui-icon layui-icon-util"></i> 扩展字段</div>
+
+            <div class="layui-form-item">
+                <label class="layui-form-label">扩展字段1</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="attribute1" placeholder="请输入扩展字段1" class="layui-input" style="width: 200px;">
+                </div>
             </div>
-        </div>
 
-        <div class="layui-form-item">
-            <label class="layui-form-label">扩展字段2</label>
-            <div class="layui-input-block">
-                <input type="text" name="attribute2" placeholder="请输入扩展字段2" class="layui-input" style="width: 200px;">
+            <div class="layui-form-item">
+                <label class="layui-form-label">扩展字段2</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="attribute2" placeholder="请输入扩展字段2" class="layui-input" style="width: 200px;">
+                </div>
             </div>
-        </div>
 
-        <div class="layui-form-item">
-            <label class="layui-form-label">扩展字段3</label>
-            <div class="layui-input-block">
-                <input type="text" name="attribute3" placeholder="请输入扩展字段3" class="layui-input" style="width: 200px;">
+            <div class="layui-form-item">
+                <label class="layui-form-label">扩展字段3</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="attribute3" placeholder="请输入扩展字段3" class="layui-input" style="width: 200px;">
+                </div>
             </div>
-        </div>
 
-        <div class="layui-form-item">
-            <label class="layui-form-label">扩展字段4</label>
-            <div class="layui-input-block">
-                <input type="text" name="attribute4" placeholder="请输入扩展字段4" class="layui-input" style="width: 200px;">
+            <div class="layui-form-item">
+                <label class="layui-form-label">扩展字段4</label>
+                <div class="layui-input-inline">
+                    <input type="text" name="attribute4" placeholder="请输入扩展字段4" class="layui-input" style="width: 200px;">
+                </div>
             </div>
         </div>
 
-        <div class="layui-form-item">
-            <div class="layui-input-block">
-                <button type="submit" class="layui-btn" lay-submit lay-filter="submitForm">提交</button>
-                <button type="reset" class="layui-btn layui-btn-primary">重置</button>
-            </div>
+        <div class="btn-group">
+            <button type="submit" class="layui-btn" lay-submit lay-filter="submitForm">提交</button>
+            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
         </div>
     </form>
-    
+
     <script src="../../lib/jquery.min.js"></script>
     <script src="../../lib/layui/layui.js"></script>
     <script src="../../js/config.js"></script>
@@ -132,7 +173,7 @@
         layui.use(['form', 'laydate'], function() {
             var form = layui.form;
             var laydate = layui.laydate;
-            
+
             // 日期选择器
             laydate.render({
                 elem: '#purchaseDate'
@@ -143,18 +184,21 @@
                 elem: '#lastInvstkTime',
                 type: 'datetime'
             });
-            
+
             var id = Common.getQueryString('id');
+            var assetTypeParam = Common.getQueryString('assetType');
             var isEdit = !!id;
-            
+
             if (isEdit) {
                 Common.get(Config.api.assets.getInfo + '/' + id, function(res) {
                     if (res.code === 200) {
                         form.val('assetsForm', res.data);
                     }
                 });
+            } else if (assetTypeParam) {
+                $('input[name="assetType"]').val(assetTypeParam);
             }
-            
+
             form.on('submit(submitForm)', function(data) {
                 Common.ajax({
                     url: isEdit ? Config.api.assets.update : Config.api.assets.save,
@@ -164,7 +208,11 @@
                         Common.success(isEdit ? '修改成功' : '添加成功', function() {
                             var index = parent.layer.getFrameIndex(window.name);
                             parent.layer.close(index);
-                            parent.layui.table.reload('tableList');
+                            if (parent.refreshAssetList) {
+                                parent.refreshAssetList();
+                            } else {
+                                parent.layui.table.reload('tableList');
+                            }
                         });
                     }
                 });

+ 556 - 81
ema-admin/src/main/resources/web/pages/assets/assets_list.html

@@ -6,69 +6,303 @@
     <title>资产管理</title>
     <link rel="stylesheet" href="../../lib/layui/css/layui.css">
     <style>
-        body { padding: 15px; }
-        .search-form { margin-bottom: 15px; padding: 15px; background: #fff; border-radius: 4px; }
-        .table-toolbar { margin-bottom: 10px; }
+        body { padding: 10px; overflow: hidden; }
+        .dict-container {
+            display: flex;
+            height: calc(100vh - 60px);
+            gap: 10px;
+        }
+        .dict-left {
+            width: 45%;
+            background: #fff;
+            border-radius: 4px;
+            display: flex;
+            flex-direction: column;
+            overflow: hidden;
+        }
+        .dict-left .panel-header {
+            padding: 12px 15px;
+            border-bottom: 1px solid #eee;
+            background: #fafafa;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+        }
+        .dict-left .panel-header .title {
+            font-size: 14px;
+            font-weight: 600;
+            color: #333;
+        }
+        .dict-left .search-box {
+            padding: 10px;
+            border-bottom: 1px solid #eee;
+            background: #fafafa;
+        }
+        .dict-left .search-box .layui-form-item {
+            margin-bottom: 0;
+        }
+        .dict-left .search-box .layui-input-inline {
+            width: calc(100% - 36px);
+            position: relative;
+        }
+        .dict-left .search-box .layui-input {
+            height: 28px;
+            font-size: 12px;
+            padding-right: 24px;
+        }
+        .dict-left .search-box .input-clear {
+            position: absolute;
+            right: 38px;
+            top: 50%;
+            transform: translateY(-50%);
+            cursor: pointer;
+            color: #999;
+            display: none;
+            font-size: 14px;
+        }
+        .dict-left .search-box .input-clear:hover {
+            color: #666;
+        }
+        .dict-left .search-box .search-btn {
+            margin-left: 6px;
+        }
+        .dict-left .panel-body {
+            flex: 1;
+            overflow: hidden;
+            padding: 0;
+        }
+        .dict-right {
+            flex: 1;
+            background: #fff;
+            border-radius: 4px;
+            display: flex;
+            flex-direction: column;
+            overflow: auto;
+        }
+        .dict-right .panel-header {
+            padding: 12px 15px;
+            border-bottom: 1px solid #eee;
+            background: #fafafa;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+        }
+        .dict-right .panel-header .title {
+            font-size: 14px;
+            font-weight: 600;
+            color: #333;
+        }
+        .dict-right .search-form {
+            padding: 12px 15px;
+            border-bottom: 1px solid #f0f0f0;
+        }
+        .dict-right .panel-body {
+            flex: 1;
+            padding: 0;
+            overflow: auto;
+        }
+        .dict-right .table-toolbar {
+            padding: 10px 15px;
+            border-bottom: 1px solid #f0f0f0;
+        }
+        .empty-tip {
+            text-align: center;
+            padding: 60px 20px;
+            color: #999;
+        }
+        .empty-tip i {
+            font-size: 48px;
+            margin-bottom: 15px;
+            color: #ddd;
+        }
+        .type-info-card {
+            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+            color: #fff;
+            padding: 20px;
+            border-radius: 4px;
+            margin: 10px;
+            display: flex;
+            justify-content: space-between;
+            align-items: flex-start;
+        }
+        .type-info-card .type-info {
+            flex: 1;
+            min-width: 0;
+        }
+        .type-info-card .type-name {
+            font-size: 20px;
+            font-weight: 600;
+            margin-bottom: 8px;
+        }
+        .type-info-card .type-code {
+            font-size: 13px;
+            opacity: 0.9;
+            display: flex;
+            align-items: center;
+            gap: 8px;
+        }
+        .type-info-card .type-actions {
+            display: flex;
+            gap: 8px;
+            flex-shrink: 0;
+        }
+        .type-info-card .type-actions .layui-btn {
+            background: rgba(255,255,255,0.2);
+            border: none;
+            color: #fff;
+        }
+        .type-info-card .type-actions .layui-btn:hover {
+            background: rgba(255,255,255,0.35);
+        }
+        .type-info-card .type-actions .layui-btn-danger {
+            background: rgba(255,59,48,0.6);
+        }
+        .type-info-card .type-actions .layui-btn-danger:hover {
+            background: rgba(255,59,48,0.8);
+        }
+        .type-detail-card {
+            background: #fff;
+            margin: 0 10px 10px 10px;
+            border-radius: 4px;
+            padding: 12px 15px;
+            display: flex;
+            align-items: flex-start;
+            gap: 20px;
+        }
+        .type-detail-card .detail-group {
+            flex: 1;
+            min-width: 0;
+        }
+        .type-detail-card .detail-label {
+            color: #999;
+            font-size: 12px;
+        }
+        .type-detail-card .detail-value {
+            color: #333;
+            font-size: 13px;
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            cursor: pointer;
+        }
+        .layui-table-view {
+            margin: 0;
+        }
     </style>
 </head>
 <body>
-    <div class="search-form">
-        <form class="layui-form layui-form-pane" lay-filter="searchForm">
-            <div class="layui-form-item">
-                <div class="layui-inline">
-                    <label class="layui-form-label">资产管理部门</label>
-                    <div class="layui-input-inline">
-                        <input type="text" name="deptName" placeholder="请输入资产管理部门" class="layui-input">
+    <div class="dict-container">
+        <!-- 左侧:资产信息列表 -->
+        <div class="dict-left">
+            <div class="panel-header">
+                <span class="title"><i class="layui-icon layui-icon-app"></i> 资产信息</span>
+                <button class="layui-btn layui-btn-xs layui-btn-normal" id="btnAddAsset"><i class="layui-icon layui-icon-add-1"></i></button>
+            </div>
+            <div class="search-box">
+                <form class="layui-form" lay-filter="assetSearchForm">
+                    <div class="layui-form-item" style="margin-bottom: 0;">
+                        <div class="layui-inline" style="width: 100%; display: flex;">
+                            <div class="layui-input-inline" style="position: relative;">
+                                <input type="text" name="assetCode" placeholder="资产编码" class="layui-input" id="assetCodeSearch">
+                                <i class="layui-icon layui-icon-close input-clear" id="inputClear">&#x1006;</i>
+                            </div>
+                            <button type="button" class="layui-btn layui-btn-sm search-btn" id="btnSearchAsset"><i class="layui-icon layui-icon-search"></i></button>
+                        </div>
                     </div>
+                </form>
+            </div>
+            <div class="panel-body">
+                <table id="assetList" lay-filter="assetList"></table>
+            </div>
+        </div>
+
+        <!-- 右侧:资产状态历史 -->
+        <div class="dict-right">
+            <!-- 资产详情卡片 -->
+            <div class="type-info-card" id="assetInfoCard" style="display:none;">
+                <div class="type-info">
+                    <div class="type-name" id="assetInfoName">-</div>
+                    <div class="type-code" id="assetInfoCode">-</div>
                 </div>
-                <div class="layui-inline">
-                    <label class="layui-form-label">资产编码</label>
-                    <div class="layui-input-inline">
-                        <input type="text" name="assetCode" placeholder="请输入资产编码" class="layui-input">
-                    </div>
+                <div class="type-actions">
+                    <button class="layui-btn layui-btn-xs" id="btnEditAsset"><i class="layui-icon layui-icon-edit"></i></button>
+                    <button class="layui-btn layui-btn-xs layui-btn-danger" id="btnDelAsset"><i class="layui-icon layui-icon-delete"></i></button>
                 </div>
-                <div class="layui-inline">
-                    <label class="layui-form-label">资产类型</label>
-                    <div class="layui-input-inline">
-                        <input type="text" name="assetType" placeholder="请输入资产类型" class="layui-input">
-                    </div>
+            </div>
+            <div class="type-detail-card" id="assetDetailCard" style="display:none;">
+                <div class="detail-group">
+                    <div class="detail-label">资产类型</div>
+                    <div class="detail-value" id="assetDetailType">-</div>
                 </div>
-                <div class="layui-inline">
-                    <label class="layui-form-label">品牌</label>
-                    <div class="layui-input-inline">
-                        <input type="text" name="brand" placeholder="请输入品牌" class="layui-input">
-                    </div>
+                <div class="detail-group">
+                    <div class="detail-label">品牌/型号</div>
+                    <div class="detail-value" id="assetDetailBrand">-</div>
                 </div>
-                <div class="layui-inline">
-                    <label class="layui-form-label">盘点状态</label>
-                    <div class="layui-input-inline">
-                        <select name="invstkStatus" class="layui-select">
-                            <option value="">全部</option>
-                            <option value="0">未盘点</option>
-                            <option value="1">已盘点</option>
-                        </select>
-                    </div>
+                <div class="detail-group">
+                    <div class="detail-label">采购价值</div>
+                    <div class="detail-value" id="assetDetailValue">-</div>
                 </div>
-                <div class="layui-inline">
-                    <button type="button" class="layui-btn" id="btnSearch"><i class="layui-icon layui-icon-search"></i> 搜索</button>
-                    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
+                <div class="detail-group">
+                    <div class="detail-label">盘点状态</div>
+                    <div class="detail-value" id="assetDetailStatus">-</div>
                 </div>
             </div>
-        </form>
-    </div>
-    
-    <div class="table-toolbar">
-        <button class="layui-btn layui-btn-sm" id="btnAdd"><i class="layui-icon layui-icon-add-1"></i> 添加</button>
+
+            <div class="panel-header">
+                <span class="title"><i class="layui-icon layui-icon-time"></i> <span id="historyTitle">状态历史</span></span>
+            </div>
+            <div class="search-form">
+                <form class="layui-form layui-form-pane" lay-filter="historySearchForm">
+                    <div class="layui-form-item" style="margin-bottom: 0;">
+                        <div class="layui-inline">
+                            <label class="layui-form-label">使用状态</label>
+                            <div class="layui-input-inline">
+                                <select name="useStatus" class="layui-select">
+                                    <option value="">全部</option>
+                                    <option value="在库">在库</option>
+                                    <option value="正常使用">正常使用</option>
+                                    <option value="已转移">已转移</option>
+                                    <option value="报废中">报废中</option>
+                                    <option value="维修中">维修中</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="layui-inline">
+                            <label class="layui-form-label">使用部门</label>
+                            <div class="layui-input-inline">
+                                <input type="text" name="useDept" placeholder="部门" class="layui-input">
+                            </div>
+                        </div>
+                        <div class="layui-inline">
+                            <button type="button" class="layui-btn layui-btn-sm" id="btnSearchHistory"><i class="layui-icon layui-icon-search"></i></button>
+                            <button type="reset" class="layui-btn layui-btn-sm layui-btn-primary">重置</button>
+                        </div>
+                    </div>
+                </form>
+            </div>
+            <div class="table-toolbar">
+                <button class="layui-btn layui-btn-sm" id="btnAddHistory2"><i class="layui-icon layui-icon-add-1"></i> 添加状态</button>
+            </div>
+            <div class="panel-body">
+                <div id="emptyTip" class="empty-tip" style="display:none;">
+                    <i class="layui-icon layui-icon-tree"></i>
+                    <p>请从左侧选择一个资产</p>
+                </div>
+                <table id="historyList" lay-filter="historyList"></table>
+            </div>
+        </div>
     </div>
-    
-    <table id="tableList" lay-filter="tableList"></table>
-    
-    <script type="text/html" id="toolbar">
-        <a class="layui-btn layui-btn-xs" lay-event="history"><i class="layui-icon layui-icon-time"></i> 状态历史</a>
+
+    <script type="text/html" id="assetToolbar">
         <a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i> 编辑</a>
         <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i> 删除</a>
     </script>
-    
+
+    <script type="text/html" id="historyToolbar">
+        <a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i> 编辑</a>
+        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i> 删除</a>
+    </script>
+
     <script type="text/html" id="invstkStatusTpl">
         {{# if(d.invstkStatus === '1') { }}
             <span class="layui-badge layui-bg-green">已盘点</span>
@@ -76,7 +310,7 @@
             <span class="layui-badge layui-bg-gray">未盘点</span>
         {{# } }}
     </script>
-    
+
     <script type="text/html" id="purchaseValueTpl">
         {{# if(d.purchaseValue) { }}
             ¥{{d.purchaseValue}}
@@ -84,7 +318,23 @@
             -
         {{# } }}
     </script>
-    
+
+    <script type="text/html" id="useStatusTpl">
+        {{# if(d.useStatus === '在库') { }}
+            <span class="layui-badge layui-bg-gray">在库</span>
+        {{# } else if(d.useStatus === '正常使用') { }}
+            <span class="layui-badge layui-bg-green">正常使用</span>
+        {{# } else if(d.useStatus === '已转移') { }}
+            <span class="layui-badge layui-bg-blue">已转移</span>
+        {{# } else if(d.useStatus === '报废中') { }}
+            <span class="layui-badge layui-bg-orange">报废中</span>
+        {{# } else if(d.useStatus === '维修中') { }}
+            <span class="layui-badge layui-bg-yellow">维修中</span>
+        {{# } else { }}
+            <span class="layui-badge layui-bg-cyan">{{d.useStatus}}</span>
+        {{# } }}
+    </script>
+
     <script src="../../lib/jquery.min.js"></script>
     <script src="../../lib/layui/layui.js"></script>
     <script src="../../js/config.js"></script>
@@ -94,55 +344,268 @@
             var table = layui.table;
             var layer = layui.layer;
             var form = layui.form;
-            
-            var tableIns = TableRender.init({
-                elem: '#tableList',
-                url: Config.api.assets.page,
-                cols: [[
-                    { field: 'deptName', title: '资产管理部门', width: 150 },
-                    { field: 'assetCode', title: '资产编码', width: 150 },
-                    { field: 'assetType', title: '资产类型', width: 120 },
-                    { field: 'brand', title: '品牌', width: 100 },
-                    { field: 'model', title: '型号', width: 120 },
-                    { field: 'purchaseDate', title: '购买日期', width: 120 },
-                    { field: 'purchaseValue', title: '采购价值', width: 120, templet: '#purchaseValueTpl' },
-                    { field: 'invstkStatus', title: '盘点状态', width: 100, templet: '#invstkStatusTpl' },
-                    { field: 'lastInvstkTime', title: '最后盘点时间', width: 170, templet: function(d) { return d.lastInvstkTime ? Common.formatDate(d.lastInvstkTime) : '-'; } },
-                    { field: 'createTime', title: '创建时间', width: 170, templet: function(d) { return Common.formatDate(d.createTime); } },
-                    { fixed: 'right', title: '操作', width: 280, align: 'center', toolbar: '#toolbar' }
-                ]]
+
+            var currentAsset = null;
+            var historyTableIns = null;
+            var assetTableIns = null;
+
+            // 加载资产详情
+            function loadAssetInfo(assetId) {
+                Common.get(Config.api.assets.getInfo + '/' + assetId, function(res) {
+                    if (res.code === 200 && res.data) {
+                        var info = res.data;
+                        $('#assetInfoCard').show();
+                        $('#assetDetailCard').show();
+                        $('#assetInfoName').text(info.assetCode || '-');
+                        $('#assetInfoCode').text(info.deptName || '-');
+                        $('#assetDetailType').text(info.assetType || '-');
+                        $('#assetDetailBrand').text((info.brand || '-') + ' / ' + (info.model || '-'));
+                        $('#assetDetailValue').text(info.purchaseValue ? '¥' + info.purchaseValue : '-');
+                        var statusText = info.invstkStatus === '1' ? '已盘点' : '未盘点';
+                        var statusClass = info.invstkStatus === '1' ? 'layui-badge-green' : 'layui-badge-gray';
+                        $('#assetDetailStatus').html('<span class="layui-badge ' + statusClass + '">' + statusText + '</span>');
+                    }
+                });
+            }
+
+            // 初始化资产表格
+            function initAssetTable() {
+                assetTableIns = TableRender.init({
+                    elem: '#assetList',
+                    url: Config.api.assets.page,
+                    page: true,
+                    limit: 20,
+                    limits: [10, 20, 50, 100],
+                    height: 'full-120',
+                    where: {},
+                    cols: [[
+                        { field: 'assetType', title: '资产类型', width: 120 },
+                        { field: 'model', title: '型号', width: 120 },
+                        { field: 'brand', title: '品牌', width: 120 },
+                        { field: 'assetCode', title: '资产编码', width: 120 },
+                        { field: 'deptName', title: '管理部门', width: 120 },
+                        { field: 'purchaseValue', title: '采购价(元)', width: 120, templet: '#purchaseValueTpl' },
+                        { field: 'invstkStatus', title: '盘点状态', width: 120, templet: '#invstkStatusTpl' },
+                        { field: 'lastInvstkTime', title: '最后盘点时间', width: 120 },
+                        { fixed: 'right', title: '操作', width: 180, align: 'center', toolbar: '#assetToolbar' }
+                    ]],
+                    done: function(res, curr, count) {
+                        // 默认选中第一行
+                        if (count > 0 && !currentAsset) {
+                            var firstRow = res.data[0];
+                            if (firstRow) {
+                                selectAsset(firstRow.id, firstRow);
+                            }
+                        }
+                    }
+                });
+            }
+
+            // 选中资产
+            function selectAsset(assetId, rowData) {
+                currentAsset = rowData;
+                loadAssetInfo(assetId);
+                loadHistoryList(assetId);
+            }
+
+            // 搜索资产
+            function searchAssetList() {
+                var assetCode = $('#assetCodeSearch').val();
+                table.reload('assetList', {
+                    where: { assetCode: assetCode },
+                    page: { curr: 1 }
+                });
+            }
+
+            // 加载状态历史列表
+            function loadHistoryList(assetId) {
+                if (!assetId) {
+                    $('#emptyTip').show();
+                    return;
+                }
+                $('#emptyTip').hide();
+
+                if (historyTableIns) {
+                    table.reload('historyList', {
+                        where: { assetId: assetId },
+                        page: { curr: 1 }
+                    });
+                } else {
+                    historyTableIns = TableRender.init({
+                        elem: '#historyList',
+                        url: Config.api.assetStatusHistory.page,
+                        where: { assetId: assetId },
+                        page: true,
+                        limits: [10, 20, 50],
+                        maxHeight: '500',
+                        cols: [[
+                            { field: 'useCompany', title: '使用公司', width: 120 },
+                            { field: 'useDept', title: '使用部门', width: 120 },
+                            { field: 'useUser', title: '使用人', width: 100 },
+                            { field: 'useStatus', title: '使用状态', width: 110, templet: '#useStatusTpl' },
+                            { field: 'curLocation', title: '当前位置', width: 120 },
+                            { field: 'startDate', title: '生效开始', width: 120, templet: function(d) { return d.startDate || '-'; } },
+                            { field: 'endDate', title: '生效结束', width: 120, templet: function(d) { return d.endDate || '-'; } },
+                            { field: 'operatorName', title: '操作人', width: 100 },
+                            { field: 'operatorDate', title: '操作时间', width: 120 },
+                            { field: 'assistantName', title: '协管员', width: 120 },
+                            { field: 'remark', title: '备注', width: 120 },
+                            { fixed: 'right', title: '操作', width: 180, align: 'center', toolbar: '#historyToolbar' }
+                        ]]
+                    });
+                }
+            }
+
+            // 初始化资产表格
+            initAssetTable();
+
+            // 搜索资产
+            $('#btnSearchAsset').click(function() {
+                searchAssetList();
+            });
+
+            // 输入时显示/隐藏清除按钮
+            $('#assetCodeSearch').on('input', function() {
+                var val = $(this).val();
+                if (val) {
+                    $('#inputClear').show();
+                } else {
+                    $('#inputClear').hide();
+                }
+            });
+
+            // 点击清除按钮
+            $('#inputClear').click(function() {
+                $('#assetCodeSearch').val('');
+                $(this).hide();
+                searchAssetList();
+            });
+
+            // 回车搜索
+            $('#assetCodeSearch').keypress(function(e) {
+                if (e.which === 13) {
+                    searchAssetList();
+                    return false;
+                }
+            });
+
+            // 资产行点击
+            table.on('row(assetList)', function(obj) {
+                selectAsset(obj.data.id, obj.data);
             });
-            
-            $('#btnSearch').click(function() {
-                table.reload('tableList', {
-                    where: form.val('searchForm'),
+
+            // 搜索状态历史
+            $('#btnSearchHistory').click(function() {
+                if (!currentAsset) {
+                    layer.msg('请先选择资产', { icon: 0 });
+                    return;
+                }
+                var data = form.val('historySearchForm');
+                data.assetId = currentAsset.id;
+                table.reload('historyList', {
+                    where: data,
                     page: { curr: 1 }
                 });
             });
-            
-            $('#btnAdd').click(function() {
+
+            // 添加资产
+            $('#btnAddAsset').click(function() {
                 Common.open({
                     title: '添加资产',
-                    area: ['650px', '550px'],
+                    area: ['650px', '600px'],
                     content: 'assets_form.html'
                 });
             });
-            
-            table.on('tool(tableList)', function(obj) {
+
+            // 编辑资产
+            $('#btnEditAsset').click(function() {
+                if (!currentAsset) {
+                    layer.msg('请先选择资产', { icon: 0 });
+                    return;
+                }
+                Common.open({
+                    title: '编辑资产',
+                    area: ['650px', '600px'],
+                    content: 'assets_form.html?id=' + currentAsset.id
+                });
+            });
+
+            // 删除资产
+            $('#btnDelAsset').click(function() {
+                if (!currentAsset) {
+                    layer.msg('请先选择资产', { icon: 0 });
+                    return;
+                }
+                Common.confirm('确定要删除资产 【' + currentAsset.assetCode + '】 吗?', function() {
+                    Common.del(Config.api.assets.remove + '/' + currentAsset.id, function(res) {
+                        Common.success('删除成功', function() {
+                            currentAsset = null;
+                            $('#assetInfoCard').hide();
+                            $('#assetDetailCard').hide();
+                            table.reload('assetList');
+                        });
+                    });
+                });
+            });
+
+            // 添加状态历史
+            function openHistoryForm() {
+                if (!currentAsset) {
+                    layer.msg('请先选择资产', { icon: 0 });
+                    return;
+                }
+                Common.open({
+                    title: '添加状态历史',
+                    area: ['650px', '550px'],
+                    content: 'asset_status_history_form.html?assetId=' + currentAsset.id
+                });
+            }
+
+            $('#btnAddHistory, #btnAddHistory2').click(function() {
+                openHistoryForm();
+            });
+
+            // 资产表格操作
+            table.on('tool(assetList)', function(obj) {
                 var data = obj.data;
                 var event = obj.event;
-                
-                if (event === 'history') {
-                    parent.openTab('assets/asset_status_history_list.html?assetId=' + data.id + '&assetCode=' + data.assetCode, '状态历史-' + data.assetCode, 'asset_history_' + data.id);
-                } else if (event === 'edit') {
+
+                if (event === 'edit') {
                     Common.open({
                         title: '编辑资产',
-                        area: ['650px', '550px'],
+                        area: ['650px', '600px'],
                         content: 'assets_form.html?id=' + data.id
                     });
                 } else if (event === 'del') {
                     Common.confirm('确定要删除资产 【' + data.assetCode + '】 吗?', function() {
                         Common.del(Config.api.assets.remove + '/' + data.id, function(res) {
+                            Common.success('删除成功', function() {
+                                obj.del();
+                                if (currentAsset && currentAsset.id === data.id) {
+                                    currentAsset = null;
+                                    $('#assetInfoCard').hide();
+                                    $('#assetDetailCard').hide();
+                                }
+                            });
+                        });
+                    });
+                }
+            });
+
+            // 状态历史表格操作
+            table.on('tool(historyList)', function(obj) {
+                var data = obj.data;
+                var event = obj.event;
+
+                if (event === 'edit') {
+                    Common.open({
+                        title: '编辑状态历史',
+                        area: ['650px', '550px'],
+                        content: 'asset_status_history_form.html?assetId=' + currentAsset.id + '&id=' + data.id
+                    });
+                } else if (event === 'del') {
+                    Common.confirm('确定要删除该状态历史记录吗?', function() {
+                        Common.del(Config.api.assetStatusHistory.remove + '/' + data.id, function(res) {
                             Common.success('删除成功', function() {
                                 obj.del();
                             });
@@ -150,6 +613,18 @@
                     });
                 }
             });
+
+            // 监听弹窗关闭,刷新资产列表
+            window.refreshAssetList = function() {
+                table.reload('assetList');
+            };
+
+            // 监听弹窗关闭,刷新状态历史
+            window.refreshHistoryList = function() {
+                if (currentAsset) {
+                    loadHistoryList(currentAsset.id);
+                }
+            };
         });
     </script>
 </body>

+ 0 - 124
ema-admin/src/main/resources/web/pages/dict/dict_data_list.html

@@ -1,124 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>字典数据管理</title>
-    <link rel="stylesheet" href="../../lib/layui/css/layui.css">
-    <style>
-        body { padding: 15px; }
-        .search-form { margin-bottom: 15px; padding: 15px; background: #fff; border-radius: 4px; }
-    </style>
-</head>
-<body>
-    <div class="search-form">
-        <form class="layui-form layui-form-pane" lay-filter="searchForm">
-            <div class="layui-form-item">
-                <div class="layui-inline">
-                    <label class="layui-form-label">数据编码</label>
-                    <div class="layui-input-inline">
-                        <input type="text" name="code" placeholder="请输入字典编码" class="layui-input">
-                    </div>
-                </div>
-                <div class="layui-inline">
-                    <label class="layui-form-label">数据值</label>
-                    <div class="layui-input-inline">
-                        <input type="text" name="value" placeholder="请输入字典标签" class="layui-input">
-                    </div>
-                </div>
-                <div class="layui-inline">
-                    <button type="button" class="layui-btn" id="btnSearch"><i class="layui-icon layui-icon-search"></i> 搜索</button>
-                    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
-                </div>
-            </div>
-        </form>
-    </div>
-    
-    <div class="table-toolbar">
-        <button class="layui-btn layui-btn-sm" id="btnAdd"><i class="layui-icon layui-icon-add-1"></i> 添加</button>
-    </div>
-    
-    <table id="tableList" lay-filter="tableList"></table>
-    
-    <script type="text/html" id="toolbar">
-        <a class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i> 编辑</a>
-        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i> 删除</a>
-    </script>
-    
-    <script type="text/html" id="statusTpl">
-        {{# if(d.status === 1) { }}
-            <span class="layui-badge green">正常</span>
-        {{# } else { }}
-            <span class="layui-badge layui-bg-gray">停用</span>
-        {{# } }}
-    </script>
-    
-    <script src="../../lib/jquery.min.js"></script>
-    <script src="../../lib/layui/layui.js"></script>
-    <script src="../../js/config.js"></script>
-    <script src="../../js/common.js"></script>
-    <script>
-        layui.use(['table', 'layer', 'form'], function() {
-            var table = layui.table;
-            var layer = layui.layer;
-            var form = layui.form;
-            
-            var typeCode = Common.getQueryString('typeCode') || '';
-            
-            var tableIns = TableRender.init({
-                elem: '#tableList',
-                url: Config.api.dictData.page,
-                where: { typeCode: typeCode },
-                cols: [[
-                    { type: 'checkbox', fixed: 'left' },
-                    { field: 'typeCode', title: '字典类型', width: 180 },
-                    { field: 'code', title: '数据编码', width: 200 },
-                    { field: 'value', title: '数据值' },
-                    { field: 'sort', title: '排序', width: 50 },
-                    { field: 'status', title: '状态', width: 80, templet: '#statusTpl' },
-                    { field: 'remark', title: '备注', width: 150 },
-                    { fixed: 'right', title: '操作', width: 200, align: 'center', toolbar: '#toolbar' }
-                ]]
-            });
-            
-            $('#btnSearch').click(function() {
-                var data = form.val('searchForm');
-                data.typeCode = typeCode;
-                table.reload('tableList', {
-                    where: data,
-                    page: { curr: 1 }
-                });
-            });
-            
-            $('#btnAdd').click(function() {
-                Common.open({
-                    title: '添加字典数据',
-                    area: ['500px', '400px'],
-                    content: 'dict_data_form.html?typeCode=' + typeCode
-                });
-            });
-            
-            table.on('tool(tableList)', function(obj) {
-                var data = obj.data;
-                var event = obj.event;
-                
-                if (event === 'edit') {
-                    Common.open({
-                        title: '编辑字典数据',
-                        area: ['500px', '400px'],
-                        content: 'dict_data_form.html?typeCode=' + typeCode + '&id=' + data.id
-                    });
-                } else if (event === 'del') {
-                    Common.confirm('确定要删除字典数据 【' + data.value + '】 吗?', function() {
-                        Common.del(Config.api.dictData.remove + '/' + data.id, function(res) {
-                            Common.success('删除成功', function() {
-                                obj.del();
-                            });
-                        });
-                    });
-                }
-            });
-        });
-    </script>
-</body>
-</html>