综述: 新增菜市场管理模块的商圈列表和菜市场列表页面
- 在平台端web/菜市场管理目录下新增商圈列表.html页面,包含商圈信息的增删改查功能 - 在平台端web/菜市场管理目录下新增菜市场列表.html页面,包含菜市场信息的管理功能 - 两个页面均包含高德地图API集成,支持GPS位置标记和地址搜索功能 - 页面设计遵循统一的UI规范,包含搜索区域、工具栏、数据表格和分页功能
This commit is contained in:
		
							parent
							
								
									5789213bf1
								
							
						
					
					
						commit
						2a93391c5f
					
				|  | @ -0,0 +1,939 @@ | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="zh-CN"> | ||||||
|  | <head> | ||||||
|  |     <meta charset="UTF-8"> | ||||||
|  |     <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |     <title>商圈列表管理</title> | ||||||
|  |     <!-- 引入高德地图API --> | ||||||
|  |     <script src="https://webapi.amap.com/maps?v=2.0&key=YOUR_AMAP_KEY"></script> | ||||||
|  |     <style> | ||||||
|  |         /* 1. 全局样式 */ | ||||||
|  |         * { | ||||||
|  |             margin: 0; | ||||||
|  |             padding: 0; | ||||||
|  |             box-sizing: border-box; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         body { | ||||||
|  |             font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif; | ||||||
|  |             background-color: #f5f5f5; | ||||||
|  |             color: #333; | ||||||
|  |             padding: 20px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /* 2. 容器布局 */ | ||||||
|  |         .container { | ||||||
|  |             max-width: 1600px; | ||||||
|  |             margin: 0 auto; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /* 3. 页面标题区域 */ | ||||||
|  |         .page-header { | ||||||
|  |             background: white; | ||||||
|  |             padding: 16px 24px; | ||||||
|  |             margin-bottom: 16px; | ||||||
|  |             border-radius: 8px; | ||||||
|  |             box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .page-title { | ||||||
|  |             font-size: 24px; | ||||||
|  |             font-weight: 600; | ||||||
|  |             color: #262626; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /* 4. 搜索区域 */ | ||||||
|  |         .search-section { | ||||||
|  |             background: white; | ||||||
|  |             padding: 24px; | ||||||
|  |             margin-bottom: 16px; | ||||||
|  |             border-radius: 8px; | ||||||
|  |             box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .search-form { | ||||||
|  |             display: grid; | ||||||
|  |             grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); | ||||||
|  |             gap: 16px; | ||||||
|  |             margin-bottom: 16px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-item { | ||||||
|  |             display: flex; | ||||||
|  |             flex-direction: column; | ||||||
|  |             gap: 8px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-label { | ||||||
|  |             font-size: 14px; | ||||||
|  |             color: #666; | ||||||
|  |             font-weight: 500; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-input { | ||||||
|  |             height: 40px; | ||||||
|  |             padding: 0 12px; | ||||||
|  |             border: 1px solid #ddd; | ||||||
|  |             border-radius: 6px; | ||||||
|  |             font-size: 14px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-input:focus { | ||||||
|  |             outline: none; | ||||||
|  |             border-color: #1890ff; | ||||||
|  |             box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-input::placeholder { | ||||||
|  |             color: #999; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .button-group { | ||||||
|  |             display: flex; | ||||||
|  |             gap: 12px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /* 5. 按钮样式 */ | ||||||
|  |         .btn { | ||||||
|  |             height: 40px; | ||||||
|  |             padding: 0 16px; | ||||||
|  |             border: none; | ||||||
|  |             border-radius: 6px; | ||||||
|  |             font-size: 14px; | ||||||
|  |             cursor: pointer; | ||||||
|  |             display: inline-flex; | ||||||
|  |             align-items: center; | ||||||
|  |             justify-content: center; | ||||||
|  |             transition: all 0.3s; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .btn-primary { | ||||||
|  |             background: #1890ff; | ||||||
|  |             color: white; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .btn-primary:hover { | ||||||
|  |             background: #40a9ff; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .btn-default { | ||||||
|  |             background: white; | ||||||
|  |             color: #666; | ||||||
|  |             border: 1px solid #ddd; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .btn-default:hover { | ||||||
|  |             border-color: #1890ff; | ||||||
|  |             color: #1890ff; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .btn-success { | ||||||
|  |             background: #52c41a; | ||||||
|  |             color: white; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .btn-success:hover { | ||||||
|  |             background: #73d13d; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .btn-warning { | ||||||
|  |             background: #fa8c16; | ||||||
|  |             color: white; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .btn-warning:hover { | ||||||
|  |             background: #ffa940; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .btn-danger { | ||||||
|  |             background: #ff4d4f; | ||||||
|  |             color: white; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .btn-danger:hover { | ||||||
|  |             background: #ff7875; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .btn-small { | ||||||
|  |             height: 32px; | ||||||
|  |             padding: 0 12px; | ||||||
|  |             font-size: 12px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /* 6. 工具栏 */ | ||||||
|  |         .toolbar { | ||||||
|  |             background: white; | ||||||
|  |             padding: 16px 24px; | ||||||
|  |             margin-bottom: 16px; | ||||||
|  |             border-radius: 8px; | ||||||
|  |             box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); | ||||||
|  |             display: flex; | ||||||
|  |             justify-content: space-between; | ||||||
|  |             align-items: center; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .toolbar-left { | ||||||
|  |             display: flex; | ||||||
|  |             gap: 12px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .toolbar-right { | ||||||
|  |             font-size: 14px; | ||||||
|  |             color: #666; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .toolbar-right strong { | ||||||
|  |             color: #1890ff; | ||||||
|  |             font-weight: 600; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /* 7. 表格样式 */ | ||||||
|  |         .table-section { | ||||||
|  |             background: white; | ||||||
|  |             border-radius: 8px; | ||||||
|  |             box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); | ||||||
|  |             overflow: hidden; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .table-wrapper { | ||||||
|  |             overflow-x: auto; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         table { | ||||||
|  |             width: 100%; | ||||||
|  |             border-collapse: collapse; | ||||||
|  |             font-size: 14px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         thead { | ||||||
|  |             background: #fafafa; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         th { | ||||||
|  |             padding: 12px 16px; | ||||||
|  |             text-align: left; | ||||||
|  |             font-weight: 600; | ||||||
|  |             color: #666; | ||||||
|  |             border-bottom: 1px solid #f0f0f0; | ||||||
|  |             white-space: nowrap; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         th.center, | ||||||
|  |         td.center { | ||||||
|  |             text-align: center; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         td { | ||||||
|  |             padding: 12px 16px; | ||||||
|  |             border-bottom: 1px solid #f9f9f9; | ||||||
|  |             color: #333; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         tbody tr:hover { | ||||||
|  |             background: #f8f9fa; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .action-buttons { | ||||||
|  |             display: flex; | ||||||
|  |             gap: 8px; | ||||||
|  |             justify-content: center; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /* 8. 分页样式 */ | ||||||
|  |         .pagination { | ||||||
|  |             padding: 20px 24px; | ||||||
|  |             display: flex; | ||||||
|  |             justify-content: center; | ||||||
|  |             align-items: center; | ||||||
|  |             gap: 12px; | ||||||
|  |             background: white; | ||||||
|  |             border-top: 1px solid #f0f0f0; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .pagination button { | ||||||
|  |             width: 32px; | ||||||
|  |             height: 32px; | ||||||
|  |             display: flex; | ||||||
|  |             align-items: center; | ||||||
|  |             justify-content: center; | ||||||
|  |             border: 1px solid #ddd; | ||||||
|  |             border-radius: 4px; | ||||||
|  |             cursor: pointer; | ||||||
|  |             font-size: 14px; | ||||||
|  |             background: white; | ||||||
|  |             color: #666; | ||||||
|  |             transition: all 0.3s; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .pagination button:hover:not(:disabled) { | ||||||
|  |             border-color: #1890ff; | ||||||
|  |             color: #1890ff; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .pagination button:disabled { | ||||||
|  |             opacity: 0.5; | ||||||
|  |             cursor: not-allowed; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .pagination .page-number { | ||||||
|  |             width: 32px; | ||||||
|  |             height: 32px; | ||||||
|  |             display: flex; | ||||||
|  |             align-items: center; | ||||||
|  |             justify-content: center; | ||||||
|  |             border: 1px solid #ddd; | ||||||
|  |             border-radius: 4px; | ||||||
|  |             cursor: pointer; | ||||||
|  |             font-size: 14px; | ||||||
|  |             transition: all 0.3s; | ||||||
|  |             color: #666; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .pagination .page-number:hover { | ||||||
|  |             border-color: #1890ff; | ||||||
|  |             color: #1890ff; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .pagination .page-number.active { | ||||||
|  |             background: #1890ff; | ||||||
|  |             color: white; | ||||||
|  |             border-color: #1890ff; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .pagination .page-info { | ||||||
|  |             font-size: 14px; | ||||||
|  |             color: #666; | ||||||
|  |             margin-left: 8px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /* 9. 模态框样式 */ | ||||||
|  |         .modal { | ||||||
|  |             display: none; | ||||||
|  |             position: fixed; | ||||||
|  |             top: 0; | ||||||
|  |             left: 0; | ||||||
|  |             width: 100%; | ||||||
|  |             height: 100%; | ||||||
|  |             background-color: rgba(0, 0, 0, 0.5); | ||||||
|  |             z-index: 1000; | ||||||
|  |             justify-content: center; | ||||||
|  |             align-items: center; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .modal.show { | ||||||
|  |             display: flex; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .modal-content { | ||||||
|  |             background: white; | ||||||
|  |             border-radius: 8px; | ||||||
|  |             width: 90%; | ||||||
|  |             max-width: 700px; | ||||||
|  |             max-height: 90vh; | ||||||
|  |             overflow-y: auto; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .modal-header { | ||||||
|  |             padding: 20px 24px; | ||||||
|  |             border-bottom: 1px solid #f0f0f0; | ||||||
|  |             display: flex; | ||||||
|  |             justify-content: space-between; | ||||||
|  |             align-items: center; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .modal-title { | ||||||
|  |             font-size: 18px; | ||||||
|  |             font-weight: 600; | ||||||
|  |             color: #262626; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .modal-close { | ||||||
|  |             font-size: 24px; | ||||||
|  |             color: #999; | ||||||
|  |             cursor: pointer; | ||||||
|  |             border: none; | ||||||
|  |             background: none; | ||||||
|  |             padding: 0; | ||||||
|  |             width: 30px; | ||||||
|  |             height: 30px; | ||||||
|  |             display: flex; | ||||||
|  |             align-items: center; | ||||||
|  |             justify-content: center; | ||||||
|  |             transition: all 0.3s; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .modal-close:hover { | ||||||
|  |             color: #666; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .modal-body { | ||||||
|  |             padding: 24px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .modal-footer { | ||||||
|  |             padding: 16px 24px; | ||||||
|  |             border-top: 1px solid #f0f0f0; | ||||||
|  |             display: flex; | ||||||
|  |             justify-content: flex-end; | ||||||
|  |             gap: 12px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-group { | ||||||
|  |             margin-bottom: 20px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-group:last-child { | ||||||
|  |             margin-bottom: 0; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-group .form-label { | ||||||
|  |             display: block; | ||||||
|  |             margin-bottom: 8px; | ||||||
|  |             font-size: 14px; | ||||||
|  |             color: #666; | ||||||
|  |             font-weight: 500; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-group .form-label .required { | ||||||
|  |             color: #ff4d4f; | ||||||
|  |             margin-right: 4px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-group .form-input { | ||||||
|  |             width: 100%; | ||||||
|  |             height: 40px; | ||||||
|  |             padding: 0 12px; | ||||||
|  |             border: 1px solid #ddd; | ||||||
|  |             border-radius: 6px; | ||||||
|  |             font-size: 14px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-group .form-input:focus { | ||||||
|  |             outline: none; | ||||||
|  |             border-color: #1890ff; | ||||||
|  |             box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .form-group textarea.form-input { | ||||||
|  |             height: auto; | ||||||
|  |             min-height: 80px; | ||||||
|  |             padding: 10px 12px; | ||||||
|  |             resize: vertical; | ||||||
|  |             font-family: inherit; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /* 10. 地图容器样式 */ | ||||||
|  |         .map-container { | ||||||
|  |             width: 100%; | ||||||
|  |             height: 400px; | ||||||
|  |             border: 1px solid #ddd; | ||||||
|  |             border-radius: 6px; | ||||||
|  |             overflow: hidden; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .gps-info { | ||||||
|  |             margin-top: 8px; | ||||||
|  |             padding: 12px; | ||||||
|  |             background-color: #fafafa; | ||||||
|  |             border-radius: 6px; | ||||||
|  |             font-size: 13px; | ||||||
|  |             color: #666; | ||||||
|  |             border: 1px solid #f0f0f0; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .gps-info .label { | ||||||
|  |             font-weight: 500; | ||||||
|  |             color: #333; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         /* 11. 查看详情样式 */ | ||||||
|  |         .view-item { | ||||||
|  |             padding: 10px 0; | ||||||
|  |             color: #333; | ||||||
|  |             line-height: 1.6; | ||||||
|  |         } | ||||||
|  |     </style> | ||||||
|  | </head> | ||||||
|  | <body> | ||||||
|  |     <div class="container"> | ||||||
|  |         <!-- 页面标题 --> | ||||||
|  |         <div class="page-header"> | ||||||
|  |             <h1 class="page-title">商圈列表管理</h1> | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <!-- 搜索区域 --> | ||||||
|  |         <div class="search-section"> | ||||||
|  |             <div class="search-form"> | ||||||
|  |                 <div class="form-item"> | ||||||
|  |                     <label class="form-label">商圈名称</label> | ||||||
|  |                     <input type="text" class="form-input" id="searchName" placeholder="请输入商圈名称"> | ||||||
|  |                 </div> | ||||||
|  |                 <div class="form-item"> | ||||||
|  |                     <label class="form-label">商圈地址</label> | ||||||
|  |                     <input type="text" class="form-input" id="searchAddress" placeholder="请输入商圈地址"> | ||||||
|  |                 </div> | ||||||
|  |             </div> | ||||||
|  |             <div class="button-group"> | ||||||
|  |                 <button class="btn btn-primary" onclick="handleSearch()">搜索</button> | ||||||
|  |                 <button class="btn btn-default" onclick="handleReset()">重置</button> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <!-- 工具栏 --> | ||||||
|  |         <div class="toolbar"> | ||||||
|  |             <div class="toolbar-left"> | ||||||
|  |                 <button class="btn btn-success" onclick="handleAdd()">新增商圈</button> | ||||||
|  |             </div> | ||||||
|  |             <div class="toolbar-right"> | ||||||
|  |                 共 <strong id="totalCount">10</strong> 条数据 | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <!-- 表格区域 --> | ||||||
|  |         <div class="table-section"> | ||||||
|  |             <div class="table-wrapper"> | ||||||
|  |                 <table> | ||||||
|  |                     <thead> | ||||||
|  |                         <tr> | ||||||
|  |                             <th style="width: 60px;" class="center">序号</th> | ||||||
|  |                             <th style="width: 25%;">商圈名称</th> | ||||||
|  |                             <th style="width: 35%;">商圈地址</th> | ||||||
|  |                             <th style="width: 20%;" class="center">添加时间</th> | ||||||
|  |                             <th style="width: 20%;" class="center">操作</th> | ||||||
|  |                         </tr> | ||||||
|  |                     </thead> | ||||||
|  |                     <tbody id="tableBody"> | ||||||
|  |                     <tr> | ||||||
|  |                         <td class="center">1</td> | ||||||
|  |                         <td>莘庄商圈</td> | ||||||
|  |                         <td>上海市闵行区莘庄镇莘朱路</td> | ||||||
|  |                         <td class="center">2025-01-15 10:30:25</td> | ||||||
|  |                         <td class="center"> | ||||||
|  |                             <div class="action-buttons"> | ||||||
|  |                                 <button class="btn btn-primary btn-small" onclick="handleView(1)">查看</button> | ||||||
|  |                                 <button class="btn btn-warning btn-small" onclick="handleEdit(1)">编辑</button> | ||||||
|  |                                 <button class="btn btn-danger btn-small" onclick="handleDelete(1)">删除</button> | ||||||
|  |                             </div> | ||||||
|  |                         </td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td class="center">2</td> | ||||||
|  |                         <td>七宝商圈</td> | ||||||
|  |                         <td>上海市闵行区七宝镇七莘路</td> | ||||||
|  |                         <td class="center">2025-01-14 14:20:18</td> | ||||||
|  |                         <td class="center"> | ||||||
|  |                             <div class="action-buttons"> | ||||||
|  |                                 <button class="btn btn-primary btn-small" onclick="handleView(2)">查看</button> | ||||||
|  |                                 <button class="btn btn-warning btn-small" onclick="handleEdit(2)">编辑</button> | ||||||
|  |                                 <button class="btn btn-danger btn-small" onclick="handleDelete(2)">删除</button> | ||||||
|  |                             </div> | ||||||
|  |                         </td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td class="center">3</td> | ||||||
|  |                         <td>徐家汇商圈</td> | ||||||
|  |                         <td>上海市徐汇区徐家汇街道</td> | ||||||
|  |                         <td class="center">2025-01-13 09:15:42</td> | ||||||
|  |                         <td class="center"> | ||||||
|  |                             <div class="action-buttons"> | ||||||
|  |                                 <button class="btn btn-primary btn-small" onclick="handleView(3)">查看</button> | ||||||
|  |                                 <button class="btn btn-warning btn-small" onclick="handleEdit(3)">编辑</button> | ||||||
|  |                                 <button class="btn btn-danger btn-small" onclick="handleDelete(3)">删除</button> | ||||||
|  |                             </div> | ||||||
|  |                         </td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td class="center">4</td> | ||||||
|  |                         <td>五角场商圈</td> | ||||||
|  |                         <td>上海市杨浦区五角场街道</td> | ||||||
|  |                         <td class="center">2025-01-12 16:45:30</td> | ||||||
|  |                         <td class="center"> | ||||||
|  |                             <div class="action-buttons"> | ||||||
|  |                                 <button class="btn btn-primary btn-small" onclick="handleView(4)">查看</button> | ||||||
|  |                                 <button class="btn btn-warning btn-small" onclick="handleEdit(4)">编辑</button> | ||||||
|  |                                 <button class="btn btn-danger btn-small" onclick="handleDelete(4)">删除</button> | ||||||
|  |                             </div> | ||||||
|  |                         </td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td class="center">5</td> | ||||||
|  |                         <td>中山公园商圈</td> | ||||||
|  |                         <td>上海市长宁区中山公园街道</td> | ||||||
|  |                         <td class="center">2025-01-11 11:20:05</td> | ||||||
|  |                         <td class="center"> | ||||||
|  |                             <div class="action-buttons"> | ||||||
|  |                                 <button class="btn btn-primary btn-small" onclick="handleView(5)">查看</button> | ||||||
|  |                                 <button class="btn btn-warning btn-small" onclick="handleEdit(5)">编辑</button> | ||||||
|  |                                 <button class="btn btn-danger btn-small" onclick="handleDelete(5)">删除</button> | ||||||
|  |                             </div> | ||||||
|  |                         </td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td class="center">6</td> | ||||||
|  |                         <td>陆家嘴商圈</td> | ||||||
|  |                         <td>上海市浦东新区陆家嘴街道</td> | ||||||
|  |                         <td class="center">2025-01-10 13:55:22</td> | ||||||
|  |                         <td class="center"> | ||||||
|  |                             <div class="action-buttons"> | ||||||
|  |                                 <button class="btn btn-primary btn-small" onclick="handleView(6)">查看</button> | ||||||
|  |                                 <button class="btn btn-warning btn-small" onclick="handleEdit(6)">编辑</button> | ||||||
|  |                                 <button class="btn btn-danger btn-small" onclick="handleDelete(6)">删除</button> | ||||||
|  |                             </div> | ||||||
|  |                         </td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td class="center">7</td> | ||||||
|  |                         <td>南京东路商圈</td> | ||||||
|  |                         <td>上海市黄浦区南京东路街道</td> | ||||||
|  |                         <td class="center">2025-01-09 10:10:15</td> | ||||||
|  |                         <td class="center"> | ||||||
|  |                             <div class="action-buttons"> | ||||||
|  |                                 <button class="btn btn-primary btn-small" onclick="handleView(7)">查看</button> | ||||||
|  |                                 <button class="btn btn-warning btn-small" onclick="handleEdit(7)">编辑</button> | ||||||
|  |                                 <button class="btn btn-danger btn-small" onclick="handleDelete(7)">删除</button> | ||||||
|  |                             </div> | ||||||
|  |                         </td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td class="center">8</td> | ||||||
|  |                         <td>静安寺商圈</td> | ||||||
|  |                         <td>上海市静安区静安寺街道</td> | ||||||
|  |                         <td class="center">2025-01-08 15:30:48</td> | ||||||
|  |                         <td class="center"> | ||||||
|  |                             <div class="action-buttons"> | ||||||
|  |                                 <button class="btn btn-primary btn-small" onclick="handleView(8)">查看</button> | ||||||
|  |                                 <button class="btn btn-warning btn-small" onclick="handleEdit(8)">编辑</button> | ||||||
|  |                                 <button class="btn btn-danger btn-small" onclick="handleDelete(8)">删除</button> | ||||||
|  |                             </div> | ||||||
|  |                         </td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td class="center">9</td> | ||||||
|  |                         <td>人民广场商圈</td> | ||||||
|  |                         <td>上海市黄浦区人民广场街道</td> | ||||||
|  |                         <td class="center">2025-01-07 09:25:33</td> | ||||||
|  |                         <td class="center"> | ||||||
|  |                             <div class="action-buttons"> | ||||||
|  |                                 <button class="btn btn-primary btn-small" onclick="handleView(9)">查看</button> | ||||||
|  |                                 <button class="btn btn-warning btn-small" onclick="handleEdit(9)">编辑</button> | ||||||
|  |                                 <button class="btn btn-danger btn-small" onclick="handleDelete(9)">删除</button> | ||||||
|  |                             </div> | ||||||
|  |                         </td> | ||||||
|  |                     </tr> | ||||||
|  |                     <tr> | ||||||
|  |                         <td class="center">10</td> | ||||||
|  |                         <td>虹桥商圈</td> | ||||||
|  |                         <td>上海市闵行区虹桥镇申虹路</td> | ||||||
|  |                         <td class="center">2025-01-06 14:40:10</td> | ||||||
|  |                         <td class="center"> | ||||||
|  |                             <div class="action-buttons"> | ||||||
|  |                                 <button class="btn btn-primary btn-small" onclick="handleView(10)">查看</button> | ||||||
|  |                                 <button class="btn btn-warning btn-small" onclick="handleEdit(10)">编辑</button> | ||||||
|  |                                 <button class="btn btn-danger btn-small" onclick="handleDelete(10)">删除</button> | ||||||
|  |                             </div> | ||||||
|  |                         </td> | ||||||
|  |                     </tr> | ||||||
|  |                 </tbody> | ||||||
|  |             </table> | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <!-- 分页 --> | ||||||
|  |         <div class="pagination"> | ||||||
|  |             <button onclick="handlePageChange('prev')" id="prevBtn">上一页</button> | ||||||
|  |             <span class="page-number active">1</span> | ||||||
|  |             <span class="page-number">2</span> | ||||||
|  |             <span class="page-number">3</span> | ||||||
|  |             <span class="page-number">4</span> | ||||||
|  |             <span class="page-number">5</span> | ||||||
|  |             <button onclick="handlePageChange('next')" id="nextBtn">下一页</button> | ||||||
|  |             <span class="page-info">共 50 条</span> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | 
 | ||||||
|  |     <!-- 新增/编辑模态框 --> | ||||||
|  |     <div class="modal" id="editModal"> | ||||||
|  |         <div class="modal-content"> | ||||||
|  |             <div class="modal-header"> | ||||||
|  |                 <h3 class="modal-title" id="modalTitle">新增商圈</h3> | ||||||
|  |                 <button class="modal-close" onclick="closeModal()">×</button> | ||||||
|  |             </div> | ||||||
|  |             <div class="modal-body"> | ||||||
|  |                 <form id="editForm"> | ||||||
|  |                     <div class="form-group"> | ||||||
|  |                         <label class="form-label"> | ||||||
|  |                             <span class="required">*</span> | ||||||
|  |                             商圈名称 | ||||||
|  |                         </label> | ||||||
|  |                         <input type="text" class="form-input" id="districtName" placeholder="请输入商圈名称" required> | ||||||
|  |                     </div> | ||||||
|  |                     <div class="form-group"> | ||||||
|  |                         <label class="form-label"> | ||||||
|  |                             <span class="required">*</span> | ||||||
|  |                             商圈地址 | ||||||
|  |                         </label> | ||||||
|  |                         <textarea class="form-input" id="districtAddress" placeholder="请输入商圈地址" required></textarea> | ||||||
|  |                     </div> | ||||||
|  |                     <div class="form-group"> | ||||||
|  |                         <label class="form-label"> | ||||||
|  |                             <span class="required">*</span> | ||||||
|  |                             商圈位置 | ||||||
|  |                         </label> | ||||||
|  |                         <div id="mapContainer" class="map-container"></div> | ||||||
|  |                         <div class="gps-info"> | ||||||
|  |                             <span class="label">经度:</span><span id="longitude">-</span> | ||||||
|  |                             <span class="label" style="margin-left: 20px;">纬度:</span><span id="latitude">-</span> | ||||||
|  |                         </div> | ||||||
|  |                         <input type="hidden" id="gpsLongitude"> | ||||||
|  |                         <input type="hidden" id="gpsLatitude"> | ||||||
|  |                     </div> | ||||||
|  |                 </form> | ||||||
|  |             </div> | ||||||
|  |             <div class="modal-footer"> | ||||||
|  |                 <button class="btn btn-default" onclick="closeModal()">取消</button> | ||||||
|  |                 <button class="btn btn-primary" onclick="handleSubmit()">确定</button> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | 
 | ||||||
|  |     <!-- 查看详情模态框 --> | ||||||
|  |     <div class="modal" id="viewModal"> | ||||||
|  |         <div class="modal-content"> | ||||||
|  |             <div class="modal-header"> | ||||||
|  |                 <h3 class="modal-title">商圈详情</h3> | ||||||
|  |                 <button class="modal-close" onclick="closeViewModal()">×</button> | ||||||
|  |             </div> | ||||||
|  |             <div class="modal-body"> | ||||||
|  |                 <div class="form-group"> | ||||||
|  |                     <label class="form-label">商圈名称</label> | ||||||
|  |                     <div id="viewName" class="view-item"></div> | ||||||
|  |                 </div> | ||||||
|  |                 <div class="form-group"> | ||||||
|  |                     <label class="form-label">商圈地址</label> | ||||||
|  |                     <div id="viewAddress" class="view-item"></div> | ||||||
|  |                 </div> | ||||||
|  |                 <div class="form-group"> | ||||||
|  |                     <label class="form-label">GPS位置</label> | ||||||
|  |                     <div id="viewGPS" class="view-item">-</div> | ||||||
|  |                 </div> | ||||||
|  |                 <div class="form-group"> | ||||||
|  |                     <label class="form-label">添加时间</label> | ||||||
|  |                     <div id="viewTime" class="view-item"></div> | ||||||
|  |                 </div> | ||||||
|  |             </div> | ||||||
|  |             <div class="modal-footer"> | ||||||
|  |                 <button class="btn btn-default" onclick="closeViewModal()">关闭</button> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | 
 | ||||||
|  |     <script> | ||||||
|  |         // 全局变量 | ||||||
|  |         let map = null; | ||||||
|  |         let marker = null; | ||||||
|  | 
 | ||||||
|  |         // 模拟数据 | ||||||
|  |         const mockData = [ | ||||||
|  |             { id: 1, name: '莘庄商圈', address: '上海市闵行区莘庄镇莘朱路', time: '2025-01-15 10:30:25', lng: 121.381709, lat: 31.113157 }, | ||||||
|  |             { id: 2, name: '七宝商圈', address: '上海市闵行区七宝镇七莘路', time: '2025-01-14 14:20:18', lng: 121.356046, lat: 31.149377 }, | ||||||
|  |             { id: 3, name: '徐家汇商圈', address: '上海市徐汇区徐家汇街道', time: '2025-01-13 09:15:42', lng: 121.436525, lat: 31.195539 }, | ||||||
|  |             { id: 4, name: '五角场商圈', address: '上海市杨浦区五角场街道', time: '2025-01-12 16:45:30', lng: 121.511801, lat: 31.298974 }, | ||||||
|  |             { id: 5, name: '中山公园商圈', address: '上海市长宁区中山公园街道', time: '2025-01-11 11:20:05', lng: 121.421302, lat: 31.221461 }, | ||||||
|  |             { id: 6, name: '陆家嘴商圈', address: '上海市浦东新区陆家嘴街道', time: '2025-01-10 13:55:22', lng: 121.505058, lat: 31.245339 }, | ||||||
|  |             { id: 7, name: '南京东路商圈', address: '上海市黄浦区南京东路街道', time: '2025-01-09 10:10:15', lng: 121.478912, lat: 31.238787 }, | ||||||
|  |             { id: 8, name: '静安寺商圈', address: '上海市静安区静安寺街道', time: '2025-01-08 15:30:48', lng: 121.446186, lat: 31.225806 }, | ||||||
|  |             { id: 9, name: '人民广场商圈', address: '上海市黄浦区人民广场街道', time: '2025-01-07 09:25:33', lng: 121.474143, lat: 31.231171 }, | ||||||
|  |             { id: 10, name: '虹桥商圈', address: '上海市闵行区虹桥镇申虹路', time: '2025-01-06 14:40:10', lng: 121.409935, lat: 31.195499 } | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         // 初始化地图 | ||||||
|  |         function initMap(lng = 121.473701, lat = 31.230416) { | ||||||
|  |             // 创建地图实例 | ||||||
|  |             map = new AMap.Map('mapContainer', { | ||||||
|  |                 zoom: 13, | ||||||
|  |                 center: [lng, lat], | ||||||
|  |                 viewMode: '2D' | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |             // 创建标记 | ||||||
|  |             marker = new AMap.Marker({ | ||||||
|  |                 position: [lng, lat], | ||||||
|  |                 draggable: true | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |             map.add(marker); | ||||||
|  | 
 | ||||||
|  |             // 更新GPS信息显示 | ||||||
|  |             updateGPSDisplay(lng, lat); | ||||||
|  | 
 | ||||||
|  |             // 地图点击事件 | ||||||
|  |             map.on('click', function(e) { | ||||||
|  |                 const lng = e.lnglat.getLng(); | ||||||
|  |                 const lat = e.lnglat.getLat(); | ||||||
|  | 
 | ||||||
|  |                 // 移动标记到点击位置 | ||||||
|  |                 marker.setPosition([lng, lat]); | ||||||
|  | 
 | ||||||
|  |                 // 更新GPS信息 | ||||||
|  |                 updateGPSDisplay(lng, lat); | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |             // 标记拖拽事件 | ||||||
|  |             marker.on('dragend', function(e) { | ||||||
|  |                 const position = marker.getPosition(); | ||||||
|  |                 updateGPSDisplay(position.lng, position.lat); | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 更新GPS信息显示 | ||||||
|  |         function updateGPSDisplay(lng, lat) { | ||||||
|  |             document.getElementById('longitude').textContent = lng.toFixed(6); | ||||||
|  |             document.getElementById('latitude').textContent = lat.toFixed(6); | ||||||
|  |             document.getElementById('gpsLongitude').value = lng; | ||||||
|  |             document.getElementById('gpsLatitude').value = lat; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 搜索功能 | ||||||
|  |         function handleSearch() { | ||||||
|  |             const name = document.getElementById('searchName').value; | ||||||
|  |             const address = document.getElementById('searchAddress').value; | ||||||
|  |             console.log('搜索条件:', { name, address }); | ||||||
|  |             alert(`搜索功能待实现\n商圈名称: ${name}\n商圈地址: ${address}`); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 重置功能 | ||||||
|  |         function handleReset() { | ||||||
|  |             document.getElementById('searchName').value = ''; | ||||||
|  |             document.getElementById('searchAddress').value = ''; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 新增商圈 | ||||||
|  |         function handleAdd() { | ||||||
|  |             document.getElementById('modalTitle').textContent = '新增商圈'; | ||||||
|  |             document.getElementById('editForm').reset(); | ||||||
|  |             document.getElementById('longitude').textContent = '-'; | ||||||
|  |             document.getElementById('latitude').textContent = '-'; | ||||||
|  |             document.getElementById('gpsLongitude').value = ''; | ||||||
|  |             document.getElementById('gpsLatitude').value = ''; | ||||||
|  |             document.getElementById('editModal').classList.add('show'); | ||||||
|  | 
 | ||||||
|  |             // 延迟初始化地图,确保容器已显示 | ||||||
|  |             setTimeout(() => { | ||||||
|  |                 initMap(); | ||||||
|  |             }, 100); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 查看详情 | ||||||
|  |         function handleView(id) { | ||||||
|  |             const data = mockData.find(item => item.id === id); | ||||||
|  |             if (data) { | ||||||
|  |                 document.getElementById('viewName').textContent = data.name; | ||||||
|  |                 document.getElementById('viewAddress').textContent = data.address; | ||||||
|  |                 document.getElementById('viewTime').textContent = data.time; | ||||||
|  | 
 | ||||||
|  |                 // 显示GPS信息 | ||||||
|  |                 if (data.lng && data.lat) { | ||||||
|  |                     document.getElementById('viewGPS').textContent = `经度: ${data.lng.toFixed(6)}, 纬度: ${data.lat.toFixed(6)}`; | ||||||
|  |                 } else { | ||||||
|  |                     document.getElementById('viewGPS').textContent = '-'; | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 document.getElementById('viewModal').classList.add('show'); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 编辑商圈 | ||||||
|  |         function handleEdit(id) { | ||||||
|  |             const data = mockData.find(item => item.id === id); | ||||||
|  |             if (data) { | ||||||
|  |                 document.getElementById('modalTitle').textContent = '编辑商圈'; | ||||||
|  |                 document.getElementById('districtName').value = data.name; | ||||||
|  |                 document.getElementById('districtAddress').value = data.address; | ||||||
|  |                 document.getElementById('editModal').classList.add('show'); | ||||||
|  | 
 | ||||||
|  |                 // 延迟初始化地图,确保容器已显示 | ||||||
|  |                 setTimeout(() => { | ||||||
|  |                     if (data.lng && data.lat) { | ||||||
|  |                         initMap(data.lng, data.lat); | ||||||
|  |                     } else { | ||||||
|  |                         initMap(); | ||||||
|  |                     } | ||||||
|  |                 }, 100); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 删除商圈 | ||||||
|  |         function handleDelete(id) { | ||||||
|  |             if (confirm('确定要删除该商圈吗?')) { | ||||||
|  |                 console.log('删除商圈ID:', id); | ||||||
|  |                 alert('删除成功!'); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 提交表单 | ||||||
|  |         function handleSubmit() { | ||||||
|  |             const name = document.getElementById('districtName').value; | ||||||
|  |             const address = document.getElementById('districtAddress').value; | ||||||
|  |             const lng = document.getElementById('gpsLongitude').value; | ||||||
|  |             const lat = document.getElementById('gpsLatitude').value; | ||||||
|  | 
 | ||||||
|  |             if (!name || !address) { | ||||||
|  |                 alert('请填写完整信息!'); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (!lng || !lat) { | ||||||
|  |                 alert('请在地图上选择商圈位置!'); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             console.log('提交数据:', { name, address, lng, lat }); | ||||||
|  |             alert('保存成功!'); | ||||||
|  |             closeModal(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 关闭编辑模态框 | ||||||
|  |         function closeModal() { | ||||||
|  |             document.getElementById('editModal').classList.remove('show'); | ||||||
|  | 
 | ||||||
|  |             // 销毁地图实例 | ||||||
|  |             if (map) { | ||||||
|  |                 map.destroy(); | ||||||
|  |                 map = null; | ||||||
|  |                 marker = null; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 关闭查看模态框 | ||||||
|  |         function closeViewModal() { | ||||||
|  |             document.getElementById('viewModal').classList.remove('show'); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 分页功能 | ||||||
|  |         function handlePageChange(type) { | ||||||
|  |             console.log('分页:', type); | ||||||
|  |             alert('分页功能待实现'); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 点击页码 | ||||||
|  |         document.querySelectorAll('.page-number').forEach(item => { | ||||||
|  |             item.addEventListener('click', function() { | ||||||
|  |                 document.querySelectorAll('.page-number').forEach(el => el.classList.remove('active')); | ||||||
|  |                 this.classList.add('active'); | ||||||
|  |             }); | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         // 点击模态框外部关闭 | ||||||
|  |         document.getElementById('editModal').addEventListener('click', function(e) { | ||||||
|  |             if (e.target === this) { | ||||||
|  |                 closeModal(); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         document.getElementById('viewModal').addEventListener('click', function(e) { | ||||||
|  |             if (e.target === this) { | ||||||
|  |                 closeViewModal(); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     </script> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue