| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  | <!DOCTYPE html> | 
					
						
							|  |  |  |  | <html lang="zh-CN"> | 
					
						
							|  |  |  |  | <head> | 
					
						
							|  |  |  |  |     <meta charset="UTF-8"> | 
					
						
							|  |  |  |  |     <meta name="viewport" content="width=device-width, initial-scale=1.0"> | 
					
						
							|  |  |  |  |     <title>菜市场管理</title> | 
					
						
							|  |  |  |  |     <style> | 
					
						
							|  |  |  |  |         * { | 
					
						
							|  |  |  |  |             margin: 0; | 
					
						
							|  |  |  |  |             padding: 0; | 
					
						
							|  |  |  |  |             box-sizing: border-box; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         body { | 
					
						
							|  |  |  |  |             font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; | 
					
						
							|  |  |  |  |             background-color: #f5f7fa; | 
					
						
							|  |  |  |  |             padding: 20px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .container { | 
					
						
							|  |  |  |  |             max-width: 1600px; | 
					
						
							|  |  |  |  |             margin: 0 auto; | 
					
						
							|  |  |  |  |             background: white; | 
					
						
							|  |  |  |  |             padding: 20px; | 
					
						
							|  |  |  |  |             border-radius: 8px; | 
					
						
							|  |  |  |  |             box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 搜索栏样式 */ | 
					
						
							|  |  |  |  |         .search-bar { | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             gap: 15px; | 
					
						
							|  |  |  |  |             margin-bottom: 20px; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |             flex-wrap: wrap; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .search-bar input, | 
					
						
							|  |  |  |  |         .search-bar select { | 
					
						
							|  |  |  |  |             padding: 8px 12px; | 
					
						
							|  |  |  |  |             border: 1px solid #dcdfe6; | 
					
						
							|  |  |  |  |             border-radius: 4px; | 
					
						
							|  |  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |  |             outline: none; | 
					
						
							|  |  |  |  |             min-width: 180px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .search-bar input:focus, | 
					
						
							|  |  |  |  |         .search-bar select:focus { | 
					
						
							|  |  |  |  |             border-color: #409eff; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .search-bar input::placeholder { | 
					
						
							|  |  |  |  |             color: #c0c4cc; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .btn { | 
					
						
							|  |  |  |  |             padding: 8px 20px; | 
					
						
							|  |  |  |  |             border: none; | 
					
						
							|  |  |  |  |             border-radius: 4px; | 
					
						
							|  |  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |  |             cursor: pointer; | 
					
						
							|  |  |  |  |             transition: all 0.3s; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .btn-primary { | 
					
						
							|  |  |  |  |             background-color: #409eff; | 
					
						
							|  |  |  |  |             color: white; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .btn-primary:hover { | 
					
						
							|  |  |  |  |             background-color: #66b1ff; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .btn-success { | 
					
						
							|  |  |  |  |             background-color: #67c23a; | 
					
						
							|  |  |  |  |             color: white; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .btn-success:hover { | 
					
						
							|  |  |  |  |             background-color: #85ce61; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .btn-small { | 
					
						
							|  |  |  |  |             padding: 5px 12px; | 
					
						
							|  |  |  |  |             font-size: 12px; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |             max-width: 90px; | 
					
						
							|  |  |  |  |             white-space: normal; | 
					
						
							|  |  |  |  |             word-break: break-all; | 
					
						
							|  |  |  |  |             line-height: 1.4; | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .btn-danger { | 
					
						
							|  |  |  |  |             background-color: #f56c6c; | 
					
						
							|  |  |  |  |             color: white; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .btn-danger:hover { | 
					
						
							|  |  |  |  |             background-color: #f78989; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 新增按钮 */ | 
					
						
							|  |  |  |  |         .add-section { | 
					
						
							|  |  |  |  |             margin-bottom: 15px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 表格样式 */ | 
					
						
							|  |  |  |  |         .table-wrapper { | 
					
						
							|  |  |  |  |             overflow-x: auto; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         table { | 
					
						
							|  |  |  |  |             width: 100%; | 
					
						
							|  |  |  |  |             border-collapse: collapse; | 
					
						
							|  |  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         thead { | 
					
						
							|  |  |  |  |             background-color: #f5f7fa; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         th { | 
					
						
							|  |  |  |  |             padding: 12px 8px; | 
					
						
							|  |  |  |  |             text-align: center; | 
					
						
							|  |  |  |  |             font-weight: 500; | 
					
						
							|  |  |  |  |             color: #606266; | 
					
						
							|  |  |  |  |             border-bottom: 1px solid #ebeef5; | 
					
						
							|  |  |  |  |             white-space: nowrap; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         td { | 
					
						
							|  |  |  |  |             padding: 12px 8px; | 
					
						
							|  |  |  |  |             text-align: center; | 
					
						
							|  |  |  |  |             border-bottom: 1px solid #ebeef5; | 
					
						
							|  |  |  |  |             color: #606266; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         tbody tr:hover { | 
					
						
							|  |  |  |  |             background-color: #f5f7fa; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 操作按钮组 */ | 
					
						
							|  |  |  |  |         .action-buttons { | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             flex-direction: column; | 
					
						
							|  |  |  |  |             gap: 8px; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .action-row { | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             gap: 5px; | 
					
						
							|  |  |  |  |             justify-content: center; | 
					
						
							|  |  |  |  |             flex-wrap: wrap; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 状态标签 */ | 
					
						
							|  |  |  |  |         .status-normal { | 
					
						
							|  |  |  |  |             color: #67c23a; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .status-disabled { | 
					
						
							|  |  |  |  |             color: #909399; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .business-status { | 
					
						
							|  |  |  |  |             color: #606266; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 模态框样式 */ | 
					
						
							|  |  |  |  |         .modal { | 
					
						
							|  |  |  |  |             display: none; | 
					
						
							|  |  |  |  |             position: fixed; | 
					
						
							|  |  |  |  |             top: 0; | 
					
						
							|  |  |  |  |             left: 0; | 
					
						
							|  |  |  |  |             width: 100%; | 
					
						
							|  |  |  |  |             height: 100%; | 
					
						
							|  |  |  |  |             background-color: rgba(0, 0, 0, 0.5); | 
					
						
							|  |  |  |  |             z-index: 1000; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .modal.active { | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |             justify-content: center; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .modal-content { | 
					
						
							|  |  |  |  |             background: white; | 
					
						
							|  |  |  |  |             width: 90%; | 
					
						
							|  |  |  |  |             max-width: 650px; | 
					
						
							|  |  |  |  |             max-height: 90vh; | 
					
						
							|  |  |  |  |             border-radius: 8px; | 
					
						
							|  |  |  |  |             overflow: hidden; | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             flex-direction: column; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .modal-header { | 
					
						
							|  |  |  |  |             padding: 20px; | 
					
						
							|  |  |  |  |             border-bottom: 1px solid #ebeef5; | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             justify-content: space-between; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .modal-header h3 { | 
					
						
							|  |  |  |  |             font-size: 18px; | 
					
						
							|  |  |  |  |             color: #303133; | 
					
						
							|  |  |  |  |             margin: 0; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .modal-close { | 
					
						
							|  |  |  |  |             font-size: 24px; | 
					
						
							|  |  |  |  |             color: #909399; | 
					
						
							|  |  |  |  |             cursor: pointer; | 
					
						
							|  |  |  |  |             border: none; | 
					
						
							|  |  |  |  |             background: none; | 
					
						
							|  |  |  |  |             padding: 0; | 
					
						
							|  |  |  |  |             width: 24px; | 
					
						
							|  |  |  |  |             height: 24px; | 
					
						
							|  |  |  |  |             line-height: 1; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .modal-close:hover { | 
					
						
							|  |  |  |  |             color: #606266; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .modal-body { | 
					
						
							|  |  |  |  |             padding: 20px; | 
					
						
							|  |  |  |  |             overflow-y: auto; | 
					
						
							|  |  |  |  |             flex: 1; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .modal-footer { | 
					
						
							|  |  |  |  |             padding: 15px 20px; | 
					
						
							|  |  |  |  |             border-top: 1px solid #ebeef5; | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             justify-content: flex-end; | 
					
						
							|  |  |  |  |             gap: 10px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 表单样式 */ | 
					
						
							|  |  |  |  |         .form-section { | 
					
						
							|  |  |  |  |             margin-bottom: 25px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .form-section-title { | 
					
						
							|  |  |  |  |             font-size: 16px; | 
					
						
							|  |  |  |  |             color: #303133; | 
					
						
							|  |  |  |  |             font-weight: 500; | 
					
						
							|  |  |  |  |             margin-bottom: 15px; | 
					
						
							|  |  |  |  |             padding-bottom: 10px; | 
					
						
							|  |  |  |  |             border-bottom: 1px solid #ebeef5; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .form-group { | 
					
						
							|  |  |  |  |             margin-bottom: 18px; | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             align-items: flex-start; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .form-label { | 
					
						
							|  |  |  |  |             width: 120px; | 
					
						
							|  |  |  |  |             padding-top: 8px; | 
					
						
							|  |  |  |  |             color: #606266; | 
					
						
							|  |  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |  |             text-align: right; | 
					
						
							|  |  |  |  |             padding-right: 12px; | 
					
						
							|  |  |  |  |             flex-shrink: 0; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .form-label.required::before { | 
					
						
							|  |  |  |  |             content: "*"; | 
					
						
							|  |  |  |  |             color: #f56c6c; | 
					
						
							|  |  |  |  |             margin-right: 4px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .form-input-wrapper { | 
					
						
							|  |  |  |  |             flex: 1; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .form-input, | 
					
						
							|  |  |  |  |         .form-select, | 
					
						
							|  |  |  |  |         .form-textarea { | 
					
						
							|  |  |  |  |             width: 100%; | 
					
						
							|  |  |  |  |             padding: 8px 12px; | 
					
						
							|  |  |  |  |             border: 1px solid #dcdfe6; | 
					
						
							|  |  |  |  |             border-radius: 4px; | 
					
						
							|  |  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |  |             outline: none; | 
					
						
							|  |  |  |  |             transition: border-color 0.3s; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .form-input:focus, | 
					
						
							|  |  |  |  |         .form-select:focus, | 
					
						
							|  |  |  |  |         .form-textarea:focus { | 
					
						
							|  |  |  |  |             border-color: #409eff; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .form-input::placeholder, | 
					
						
							|  |  |  |  |         .form-textarea::placeholder { | 
					
						
							|  |  |  |  |             color: #c0c4cc; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .form-textarea { | 
					
						
							|  |  |  |  |             resize: vertical; | 
					
						
							|  |  |  |  |             min-height: 80px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 图片上传样式 */ | 
					
						
							|  |  |  |  |         .upload-box { | 
					
						
							|  |  |  |  |             width: 140px; | 
					
						
							|  |  |  |  |             height: 140px; | 
					
						
							|  |  |  |  |             border: 1px dashed #dcdfe6; | 
					
						
							|  |  |  |  |             border-radius: 4px; | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |             justify-content: center; | 
					
						
							|  |  |  |  |             cursor: pointer; | 
					
						
							|  |  |  |  |             background-color: #fafafa; | 
					
						
							|  |  |  |  |             transition: border-color 0.3s; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .upload-box:hover { | 
					
						
							|  |  |  |  |             border-color: #409eff; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .upload-box-text { | 
					
						
							|  |  |  |  |             color: #909399; | 
					
						
							|  |  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 开关样式 */ | 
					
						
							|  |  |  |  |         .switch-group { | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |             gap: 15px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .switch { | 
					
						
							|  |  |  |  |             position: relative; | 
					
						
							|  |  |  |  |             display: inline-block; | 
					
						
							|  |  |  |  |             width: 44px; | 
					
						
							|  |  |  |  |             height: 22px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .switch input { | 
					
						
							|  |  |  |  |             opacity: 0; | 
					
						
							|  |  |  |  |             width: 0; | 
					
						
							|  |  |  |  |             height: 0; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .switch-slider { | 
					
						
							|  |  |  |  |             position: absolute; | 
					
						
							|  |  |  |  |             cursor: pointer; | 
					
						
							|  |  |  |  |             top: 0; | 
					
						
							|  |  |  |  |             left: 0; | 
					
						
							|  |  |  |  |             right: 0; | 
					
						
							|  |  |  |  |             bottom: 0; | 
					
						
							|  |  |  |  |             background-color: #dcdfe6; | 
					
						
							|  |  |  |  |             transition: 0.3s; | 
					
						
							|  |  |  |  |             border-radius: 22px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .switch-slider:before { | 
					
						
							|  |  |  |  |             position: absolute; | 
					
						
							|  |  |  |  |             content: ""; | 
					
						
							|  |  |  |  |             height: 18px; | 
					
						
							|  |  |  |  |             width: 18px; | 
					
						
							|  |  |  |  |             left: 2px; | 
					
						
							|  |  |  |  |             bottom: 2px; | 
					
						
							|  |  |  |  |             background-color: white; | 
					
						
							|  |  |  |  |             transition: 0.3s; | 
					
						
							|  |  |  |  |             border-radius: 50%; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .switch input:checked + .switch-slider { | 
					
						
							|  |  |  |  |             background-color: #409eff; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .switch input:checked + .switch-slider:before { | 
					
						
							|  |  |  |  |             transform: translateX(22px); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .switch-label { | 
					
						
							|  |  |  |  |             color: #606266; | 
					
						
							|  |  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .switch-label.active { | 
					
						
							|  |  |  |  |             color: #409eff; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 单选框组样式 */ | 
					
						
							|  |  |  |  |         .radio-group { | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             gap: 15px; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .radio-option { | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |             gap: 5px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .radio-option input[type="radio"] { | 
					
						
							|  |  |  |  |             margin: 0; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .radio-option label { | 
					
						
							|  |  |  |  |             color: #606266; | 
					
						
							|  |  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |  |             cursor: pointer; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 复选框组样式 */ | 
					
						
							|  |  |  |  |         .checkbox-group { | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             gap: 15px; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .checkbox-option { | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |             gap: 5px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .checkbox-option input[type="checkbox"] { | 
					
						
							|  |  |  |  |             margin: 0; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .checkbox-option label { | 
					
						
							|  |  |  |  |             color: #606266; | 
					
						
							|  |  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |  |             cursor: pointer; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 时间输入样式 */ | 
					
						
							|  |  |  |  |         .time-group { | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             gap: 10px; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .time-input { | 
					
						
							|  |  |  |  |             width: 180px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 说明文字样式 */ | 
					
						
							|  |  |  |  |         .form-hint { | 
					
						
							|  |  |  |  |             color: #909399; | 
					
						
							|  |  |  |  |             font-size: 12px; | 
					
						
							|  |  |  |  |             margin-top: 5px; | 
					
						
							|  |  |  |  |             line-height: 1.5; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 地图位置选择 */ | 
					
						
							|  |  |  |  |         .location-input { | 
					
						
							|  |  |  |  |             position: relative; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .location-icon { | 
					
						
							|  |  |  |  |             position: absolute; | 
					
						
							|  |  |  |  |             right: 10px; | 
					
						
							|  |  |  |  |             top: 50%; | 
					
						
							|  |  |  |  |             transform: translateY(-50%); | 
					
						
							|  |  |  |  |             color: #409eff; | 
					
						
							|  |  |  |  |             cursor: pointer; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .btn-cancel { | 
					
						
							|  |  |  |  |             background-color: white; | 
					
						
							|  |  |  |  |             color: #606266; | 
					
						
							|  |  |  |  |             border: 1px solid #dcdfe6; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .btn-cancel:hover { | 
					
						
							|  |  |  |  |             background-color: #f5f7fa; | 
					
						
							|  |  |  |  |             border-color: #c0c4cc; | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 隐藏元素 */ | 
					
						
							|  |  |  |  |         .hidden { | 
					
						
							|  |  |  |  |             display: none !important; | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-10-21 01:57:31 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 权限配置样式 */ | 
					
						
							|  |  |  |  |         .permissions-container { | 
					
						
							|  |  |  |  |             max-height: 400px; | 
					
						
							|  |  |  |  |             overflow-y: auto; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permission-tree { | 
					
						
							|  |  |  |  |             list-style: none; | 
					
						
							|  |  |  |  |             padding: 0; | 
					
						
							|  |  |  |  |             margin: 0; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permission-item { | 
					
						
							|  |  |  |  |             margin-bottom: 8px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permission-node { | 
					
						
							|  |  |  |  |             display: flex; | 
					
						
							|  |  |  |  |             align-items: center; | 
					
						
							|  |  |  |  |             padding: 10px 12px; | 
					
						
							|  |  |  |  |             border-radius: 4px; | 
					
						
							|  |  |  |  |             transition: all 0.3s; | 
					
						
							|  |  |  |  |             cursor: pointer; | 
					
						
							|  |  |  |  |             background-color: #fafafa; | 
					
						
							|  |  |  |  |             border: 1px solid #ebeef5; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permission-node:hover { | 
					
						
							|  |  |  |  |             background-color: #f0f7ff; | 
					
						
							|  |  |  |  |             border-color: #409eff; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permission-node.selected { | 
					
						
							|  |  |  |  |             background-color: #e6f4ff; | 
					
						
							|  |  |  |  |             border-color: #409eff; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permission-checkbox { | 
					
						
							|  |  |  |  |             margin-right: 10px; | 
					
						
							|  |  |  |  |             width: 16px; | 
					
						
							|  |  |  |  |             height: 16px; | 
					
						
							|  |  |  |  |             cursor: pointer; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .expand-btn { | 
					
						
							|  |  |  |  |             background: none; | 
					
						
							|  |  |  |  |             border: none; | 
					
						
							|  |  |  |  |             cursor: pointer; | 
					
						
							|  |  |  |  |             padding: 2px; | 
					
						
							|  |  |  |  |             margin-right: 8px; | 
					
						
							|  |  |  |  |             color: #409eff; | 
					
						
							|  |  |  |  |             font-size: 12px; | 
					
						
							|  |  |  |  |             transition: all 0.3s; | 
					
						
							|  |  |  |  |             min-width: 20px; | 
					
						
							|  |  |  |  |             border-radius: 3px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .expand-btn:hover { | 
					
						
							|  |  |  |  |             background: #e6f4ff; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .expand-btn.collapsed { | 
					
						
							|  |  |  |  |             transform: rotate(-90deg); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permission-label { | 
					
						
							|  |  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |  |             color: #606266; | 
					
						
							|  |  |  |  |             user-select: none; | 
					
						
							|  |  |  |  |             flex: 1; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permission-children { | 
					
						
							|  |  |  |  |             margin-left: 32px; | 
					
						
							|  |  |  |  |             margin-top: 8px; | 
					
						
							|  |  |  |  |             border-left: 2px solid #e6f4ff; | 
					
						
							|  |  |  |  |             padding-left: 12px; | 
					
						
							|  |  |  |  |             display: none; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permission-children.expanded { | 
					
						
							|  |  |  |  |             display: block; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permission-item.parent > .permission-node { | 
					
						
							|  |  |  |  |             background-color: #f5f7fa; | 
					
						
							|  |  |  |  |             font-weight: 500; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         /* 权限容器滚动条样式 */ | 
					
						
							|  |  |  |  |         .permissions-container::-webkit-scrollbar { | 
					
						
							|  |  |  |  |             width: 6px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permissions-container::-webkit-scrollbar-track { | 
					
						
							|  |  |  |  |             background: #f5f7fa; | 
					
						
							|  |  |  |  |             border-radius: 3px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permissions-container::-webkit-scrollbar-thumb { | 
					
						
							|  |  |  |  |             background: #dcdfe6; | 
					
						
							|  |  |  |  |             border-radius: 3px; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         .permissions-container::-webkit-scrollbar-thumb:hover { | 
					
						
							|  |  |  |  |             background: #c0c4cc; | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |     </style> | 
					
						
							|  |  |  |  | </head> | 
					
						
							|  |  |  |  | <body> | 
					
						
							|  |  |  |  |     <div class="container"> | 
					
						
							|  |  |  |  |         <!-- 搜索栏 --> | 
					
						
							|  |  |  |  |         <div class="search-bar"> | 
					
						
							|  |  |  |  |             <input type="text" placeholder="市场名称"> | 
					
						
							|  |  |  |  |             <select> | 
					
						
							|  |  |  |  |                 <option value="">地区</option> | 
					
						
							|  |  |  |  |                 <option value="shanghai">上海市</option> | 
					
						
							|  |  |  |  |                 <option value="beijing">北京市</option> | 
					
						
							|  |  |  |  |                 <option value="fujian">福建省</option> | 
					
						
							|  |  |  |  |             </select> | 
					
						
							|  |  |  |  |             <select> | 
					
						
							|  |  |  |  |                 <option value="">状态</option> | 
					
						
							|  |  |  |  |                 <option value="normal">正常</option> | 
					
						
							|  |  |  |  |                 <option value="disabled">禁用</option> | 
					
						
							|  |  |  |  |             </select> | 
					
						
							|  |  |  |  |             <button class="btn btn-primary">搜索</button> | 
					
						
							|  |  |  |  |         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         <!-- 新增按钮 --> | 
					
						
							|  |  |  |  |         <div class="add-section"> | 
					
						
							|  |  |  |  |             <button class="btn btn-success">新增</button> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |             <button class="btn btn-primary" onclick="goToPendingMarkets()">待审核菜市场</button> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         <!-- 表格 --> | 
					
						
							|  |  |  |  |         <div class="table-wrapper"> | 
					
						
							|  |  |  |  |             <table> | 
					
						
							|  |  |  |  |                 <thead> | 
					
						
							|  |  |  |  |                     <tr> | 
					
						
							|  |  |  |  |                         <th>市场名</th> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                         <th>商品类目类型</th> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                         <th>地址</th> | 
					
						
							|  |  |  |  |                         <th>经营者姓名</th> | 
					
						
							|  |  |  |  |                         <th>经营者账号</th> | 
					
						
							|  |  |  |  |                         <th>第三方配送</th> | 
					
						
							|  |  |  |  |                         <th>状态</th> | 
					
						
							|  |  |  |  |                         <th>摊位数</th> | 
					
						
							|  |  |  |  |                         <th>营业状态</th> | 
					
						
							|  |  |  |  |                         <th>操作</th> | 
					
						
							|  |  |  |  |                     </tr> | 
					
						
							|  |  |  |  |                 </thead> | 
					
						
							|  |  |  |  |                 <tbody> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                     <tr data-category-type="offline"> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                         <td>权限测试市场</td> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                         <td>线下菜市场</td> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                         <td>上海市市辖区闵行区</td> | 
					
						
							|  |  |  |  |                         <td>权限测试</td> | 
					
						
							|  |  |  |  |                         <td>13800001500</td> | 
					
						
							|  |  |  |  |                         <td>否</td> | 
					
						
							|  |  |  |  |                         <td class="status-normal">正常</td> | 
					
						
							|  |  |  |  |                         <td>2</td> | 
					
						
							|  |  |  |  |                         <td class="business-status">营业</td> | 
					
						
							|  |  |  |  |                         <td> | 
					
						
							|  |  |  |  |                             <div class="action-buttons"> | 
					
						
							|  |  |  |  |                                 <div class="action-row"> | 
					
						
							|  |  |  |  |                                     <button class="btn btn-primary btn-small">设置结算比例</button> | 
					
						
							|  |  |  |  |                                     <button class="btn btn-primary btn-small">分销推广</button> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                                     <button class="btn btn-primary btn-small">摊位详情</button> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                                 <div class="action-row"> | 
					
						
							|  |  |  |  |                                     <button class="btn btn-primary btn-small">详情</button> | 
					
						
							|  |  |  |  |                                     <button class="btn btn-primary btn-small">编辑</button> | 
					
						
							|  |  |  |  |                                     <button class="btn btn-danger btn-small">删除</button> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </td> | 
					
						
							|  |  |  |  |                     </tr> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                     <tr data-category-type="cloud"> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                         <td>测试菜市场-葡萄</td> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                         <td>云店</td> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                         <td>北京市市辖区东城区</td> | 
					
						
							|  |  |  |  |                         <td>林xx</td> | 
					
						
							|  |  |  |  |                         <td>17750208698</td> | 
					
						
							|  |  |  |  |                         <td>否</td> | 
					
						
							|  |  |  |  |                         <td class="status-normal">正常</td> | 
					
						
							|  |  |  |  |                         <td>0</td> | 
					
						
							|  |  |  |  |                         <td class="business-status">营业</td> | 
					
						
							|  |  |  |  |                         <td> | 
					
						
							|  |  |  |  |                             <div class="action-buttons"> | 
					
						
							|  |  |  |  |                                 <div class="action-row"> | 
					
						
							|  |  |  |  |                                     <button class="btn btn-primary btn-small">设置结算比例</button> | 
					
						
							|  |  |  |  |                                     <button class="btn btn-primary btn-small">分销推广</button> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                                     <button class="btn btn-primary btn-small">摊位详情</button> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                                 <div class="action-row"> | 
					
						
							|  |  |  |  |                                     <button class="btn btn-primary btn-small">详情</button> | 
					
						
							|  |  |  |  |                                     <button class="btn btn-primary btn-small">编辑</button> | 
					
						
							|  |  |  |  |                                     <button class="btn btn-danger btn-small">删除</button> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </td> | 
					
						
							|  |  |  |  |                     </tr> | 
					
						
							|  |  |  |  |                 </tbody> | 
					
						
							|  |  |  |  |             </table> | 
					
						
							|  |  |  |  |         </div> | 
					
						
							|  |  |  |  |     </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |     <!-- 摊位详情模态框 --> | 
					
						
							|  |  |  |  |     <div class="modal" id="boothDetailModal"> | 
					
						
							|  |  |  |  |         <div class="modal-content" style="max-width: 1200px;"> | 
					
						
							|  |  |  |  |             <div class="modal-header"> | 
					
						
							|  |  |  |  |                 <h3>摊铺详情</h3> | 
					
						
							|  |  |  |  |                 <button class="modal-close" onclick="closeBoothDetailModal()">×</button> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |             <div class="modal-body"> | 
					
						
							|  |  |  |  |                 <!-- 标签页导航 --> | 
					
						
							|  |  |  |  |                 <div style="border-bottom: 2px solid #ebeef5; margin-bottom: 20px;"> | 
					
						
							|  |  |  |  |                     <div style="display: inline-block; padding: 10px 20px; border-bottom: 2px solid #409eff; color: #409eff; font-weight: 500; cursor: pointer;"> | 
					
						
							|  |  |  |  |                         摊位列表 | 
					
						
							|  |  |  |  |                     </div> | 
					
						
							|  |  |  |  |                 </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 <!-- 摊位列表表格 --> | 
					
						
							|  |  |  |  |                 <div class="table-wrapper"> | 
					
						
							|  |  |  |  |                     <table> | 
					
						
							|  |  |  |  |                         <thead> | 
					
						
							|  |  |  |  |                             <tr> | 
					
						
							|  |  |  |  |                                 <th>摊位ID</th> | 
					
						
							|  |  |  |  |                                 <th>摊位名称</th> | 
					
						
							|  |  |  |  |                                 <th>收益人名称</th> | 
					
						
							|  |  |  |  |                                 <th>收益人手机号</th> | 
					
						
							|  |  |  |  |                                 <th>加入时间</th> | 
					
						
							|  |  |  |  |                             </tr> | 
					
						
							|  |  |  |  |                         </thead> | 
					
						
							|  |  |  |  |                         <tbody id="boothListTableBody"> | 
					
						
							|  |  |  |  |                             <!-- 动态填充摊位数据 --> | 
					
						
							|  |  |  |  |                         </tbody> | 
					
						
							|  |  |  |  |                     </table> | 
					
						
							|  |  |  |  |                 </div> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |             <div class="modal-footer"> | 
					
						
							|  |  |  |  |                 <button class="btn btn-cancel" onclick="closeBoothDetailModal()">关闭</button> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |         </div> | 
					
						
							|  |  |  |  |     </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |     <!-- 设置结算比例模态框 --> | 
					
						
							|  |  |  |  |     <div class="modal" id="settlementRatioModal"> | 
					
						
							|  |  |  |  |         <div class="modal-content" style="max-width: 500px;"> | 
					
						
							|  |  |  |  |             <div class="modal-header"> | 
					
						
							|  |  |  |  |                 <h3>设置结算比例</h3> | 
					
						
							|  |  |  |  |                 <button class="modal-close" onclick="closeSettlementModal()">×</button> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |             <div class="modal-body"> | 
					
						
							|  |  |  |  |                 <form id="settlementRatioForm"> | 
					
						
							|  |  |  |  |                     <div class="form-group"> | 
					
						
							|  |  |  |  |                         <div class="form-label required">结算比例</div> | 
					
						
							|  |  |  |  |                         <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                             <input type="number" class="form-input" id="settlementRatio" value="0.000" step="0.001" min="0" max="1" placeholder="请输入结算比例"> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  |                     </div> | 
					
						
							|  |  |  |  |                 </form> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |             <div class="modal-footer"> | 
					
						
							|  |  |  |  |                 <button class="btn btn-cancel" onclick="closeSettlementModal()">关闭</button> | 
					
						
							|  |  |  |  |                 <button class="btn btn-primary" onclick="submitSettlementRatio()">确定</button> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |         </div> | 
					
						
							|  |  |  |  |     </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |     <!-- 详情模态框 --> | 
					
						
							|  |  |  |  |     <div class="modal" id="detailMarketModal"> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |         <div class="modal-content"> | 
					
						
							|  |  |  |  |             <div class="modal-header"> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                 <h3>菜市场详情</h3> | 
					
						
							|  |  |  |  |                 <button class="modal-close" onclick="closeDetailModal()">×</button> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |             </div> | 
					
						
							|  |  |  |  |             <div class="modal-body"> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                 <form id="detailMarketForm"> | 
					
						
							|  |  |  |  |                     <!-- 基础配置 --> | 
					
						
							|  |  |  |  |                     <div class="form-section"> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |                         <div class="form-section-title">基础信息</div> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label">菜市场名称</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <input type="text" class="form-input" id="detailMarketName" readonly> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label">详细地址</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <input type="text" class="form-input" id="detailDetailAddress" readonly> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |                             <div class="form-label">定位信息</div> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |                                 <div style="width: 100%; height: 300px; border: 1px solid #dcdfe6; border-radius: 4px; background-color: #f5f7fa; display: flex; align-items: center; justify-content: center; color: #909399; font-size: 14px;"> | 
					
						
							|  |  |  |  |                                     <div style="text-align: center;"> | 
					
						
							|  |  |  |  |                                         <div style="font-size: 48px; margin-bottom: 10px;">📍</div> | 
					
						
							|  |  |  |  |                                         <div>地图定位显示区域</div> | 
					
						
							|  |  |  |  |                                         <div style="font-size: 12px; margin-top: 5px;" id="detailLocationCoords"></div> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                                     </div> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  |                     </div> | 
					
						
							|  |  |  |  |                 </form> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |             <div class="modal-footer"> | 
					
						
							|  |  |  |  |                 <button class="btn btn-cancel" onclick="closeDetailModal()">关闭</button> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |         </div> | 
					
						
							|  |  |  |  |     </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     <!-- 新增菜市场模态框 --> | 
					
						
							|  |  |  |  |     <div class="modal" id="addMarketModal"> | 
					
						
							|  |  |  |  |         <div class="modal-content"> | 
					
						
							|  |  |  |  |             <div class="modal-header"> | 
					
						
							|  |  |  |  |                 <h3>新增菜市场</h3> | 
					
						
							|  |  |  |  |                 <button class="modal-close" onclick="closeModal()">×</button> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |             <div class="modal-body"> | 
					
						
							|  |  |  |  |                 <form id="addMarketForm"> | 
					
						
							|  |  |  |  |                     <!-- 经营者信息 --> | 
					
						
							|  |  |  |  |                     <div class="form-section"> | 
					
						
							|  |  |  |  |                         <div class="form-section-title">经营者信息</div> | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">经营者账号</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <input type="text" class="form-input" id="operatorAccount" placeholder="请输入手机号码" maxlength="11"> | 
					
						
							|  |  |  |  |                                 <div class="form-hint">请输入经营者的手机号码</div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">验证码</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <div style="display: flex; gap: 10px;"> | 
					
						
							|  |  |  |  |                                     <input type="text" class="form-input" id="verifyCode" placeholder="请输入验证码" maxlength="6" style="flex: 1;"> | 
					
						
							|  |  |  |  |                                     <button type="button" class="btn btn-primary" id="sendCodeBtn" onclick="sendVerifyCode()">发送验证码</button> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                                 </div> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                                 <div class="form-hint">验证码将发送至经营者手机</div> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  |                     </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-21 01:57:31 +00:00
										 |  |  |  |                     <!-- 权限配置 --> | 
					
						
							|  |  |  |  |                     <div class="form-section"> | 
					
						
							|  |  |  |  |                         <div class="form-section-title">权限配置</div> | 
					
						
							|  |  |  |  |                         <div class="form-group" style="display: block;"> | 
					
						
							|  |  |  |  |                             <div class="permissions-container" style="max-height: 400px; overflow-y: auto; border: 1px solid #ebeef5; border-radius: 4px; padding: 15px;"> | 
					
						
							|  |  |  |  |                                 <ul id="permissionTree" class="permission-tree"> | 
					
						
							|  |  |  |  |                                     <!-- 权限树将通过JavaScript动态生成 --> | 
					
						
							|  |  |  |  |                                 </ul> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  |                     </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                     <!-- 基础配置 --> | 
					
						
							|  |  |  |  |                     <div class="form-section"> | 
					
						
							|  |  |  |  |                         <div class="form-section-title">基础配置</div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">菜市场名称</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                                 <input type="text" class="form-input" id="marketName" placeholder="请输入菜市场名称25字符内" maxlength="25"> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">商品类目类型</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <select class="form-select" id="categoryType"> | 
					
						
							|  |  |  |  |                                     <option value="">请选择商品类目类型</option> | 
					
						
							|  |  |  |  |                                     <option value="offline">线下菜市场</option> | 
					
						
							|  |  |  |  |                                     <option value="cloud">云店</option> | 
					
						
							|  |  |  |  |                                 </select> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">菜市场背景图</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <div class="upload-box"> | 
					
						
							|  |  |  |  |                                     <span class="upload-box-text">选择图片</span> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">菜市场营业执照</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <div class="upload-box"> | 
					
						
							|  |  |  |  |                                     <span class="upload-box-text">选择图片</span> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">菜市场实拍图</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <div class="upload-box"> | 
					
						
							|  |  |  |  |                                     <span class="upload-box-text">选择图片</span> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">菜市场营业执照</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <div class="upload-box"> | 
					
						
							|  |  |  |  |                                     <span class="upload-box-text">选择图片</span> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">菜市场实拍图</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <div class="upload-box"> | 
					
						
							|  |  |  |  |                                     <span class="upload-box-text">选择图片</span> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">菜市场地址</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <select class="form-select"> | 
					
						
							|  |  |  |  |                                     <option value="">请选择省市区</option> | 
					
						
							|  |  |  |  |                                     <option value="shanghai">上海市</option> | 
					
						
							|  |  |  |  |                                     <option value="beijing">北京市</option> | 
					
						
							|  |  |  |  |                                     <option value="fujian">福建省</option> | 
					
						
							|  |  |  |  |                                 </select> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">详细地址</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <input type="text" class="form-input" placeholder="请输入具体地址"> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">菜市场定位</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |                                 <div style="width: 100%; height: 300px; border: 1px solid #dcdfe6; border-radius: 4px; background-color: #f5f7fa; display: flex; align-items: center; justify-content: center; color: #909399; font-size: 14px; cursor: pointer;" onclick="selectLocation()"> | 
					
						
							|  |  |  |  |                                     <div style="text-align: center;"> | 
					
						
							|  |  |  |  |                                         <div style="font-size: 48px; margin-bottom: 10px;">📍</div> | 
					
						
							|  |  |  |  |                                         <div>点击选择地图定位</div> | 
					
						
							|  |  |  |  |                                         <div style="font-size: 12px; margin-top: 5px; color: #f56c6c;" id="selectedLocationText">请选择定位</div> | 
					
						
							|  |  |  |  |                                     </div> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                                 </div> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |                                 <input type="hidden" id="locationLat" value=""> | 
					
						
							|  |  |  |  |                                 <input type="hidden" id="locationLng" value=""> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">菜市场营业时间</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <div class="switch-group"> | 
					
						
							|  |  |  |  |                                     <span class="switch-label">手动营业</span> | 
					
						
							|  |  |  |  |                                     <label class="switch"> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |                                         <input type="checkbox" id="autoBusinessTime" checked onchange="toggleBusinessTimeOptions()"> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                                         <span class="switch-slider"></span> | 
					
						
							|  |  |  |  |                                     </label> | 
					
						
							|  |  |  |  |                                     <span class="switch-label active">自动营业</span> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |                                 <div class="checkbox-group" id="businessDayOptions" style="margin-top: 10px;"> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                                     <div class="checkbox-option"> | 
					
						
							|  |  |  |  |                                         <input type="checkbox" id="everyday"> | 
					
						
							|  |  |  |  |                                         <label for="everyday">每天</label> | 
					
						
							|  |  |  |  |                                     </div> | 
					
						
							|  |  |  |  |                                     <div class="checkbox-option"> | 
					
						
							|  |  |  |  |                                         <input type="checkbox" id="workday"> | 
					
						
							|  |  |  |  |                                         <label for="workday">工作日</label> | 
					
						
							|  |  |  |  |                                     </div> | 
					
						
							|  |  |  |  |                                     <div class="checkbox-option"> | 
					
						
							|  |  |  |  |                                         <input type="checkbox" id="custom"> | 
					
						
							|  |  |  |  |                                         <label for="custom">自定义</label> | 
					
						
							|  |  |  |  |                                     </div> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |                                 <div class="time-group" id="businessTimeRange" style="margin-top: 10px;"> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                                     <input type="time" class="form-input time-input" placeholder="开始营业时间"> | 
					
						
							|  |  |  |  |                                     <input type="time" class="form-input time-input" placeholder="结束营业时间"> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label required">菜市场状态</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <div class="switch-group"> | 
					
						
							|  |  |  |  |                                     <span class="switch-label">禁用</span> | 
					
						
							|  |  |  |  |                                     <label class="switch"> | 
					
						
							|  |  |  |  |                                         <input type="checkbox" id="marketStatus" checked> | 
					
						
							|  |  |  |  |                                         <span class="switch-slider"></span> | 
					
						
							|  |  |  |  |                                     </label> | 
					
						
							|  |  |  |  |                                     <span class="switch-label active">启用</span> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                                 <div class="form-hint">禁用后,用户端不展示该菜市场</div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  |                     </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     <!-- 配送设置 --> | 
					
						
							|  |  |  |  |                     <div class="form-section"> | 
					
						
							|  |  |  |  |                         <div class="form-section-title">配送设置</div> | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label"></div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                                 <div class="form-hint">ℹ️ 开启后,将允许该菜市场经营者/摊主(无经营者)自由配置是否呼叫第三方骑手进行配送;</div> | 
					
						
							|  |  |  |  |                                 <div class="form-hint">第三方配送费用因距离、天气、时段等因素会产生不同程度的浮动;将根据实际配送费用进行扣除。</div> | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  |                         <div class="form-group"> | 
					
						
							|  |  |  |  |                             <div class="form-label">是否允许第三方骑手配送</div> | 
					
						
							|  |  |  |  |                             <div class="form-input-wrapper"> | 
					
						
							|  |  |  |  |                                 <div class="switch-group"> | 
					
						
							|  |  |  |  |                                     <span class="switch-label">禁用</span> | 
					
						
							|  |  |  |  |                                     <label class="switch"> | 
					
						
							|  |  |  |  |                                         <input type="checkbox" id="thirdPartyDelivery" checked> | 
					
						
							|  |  |  |  |                                         <span class="switch-slider"></span> | 
					
						
							|  |  |  |  |                                     </label> | 
					
						
							|  |  |  |  |                                     <span class="switch-label active">启用</span> | 
					
						
							|  |  |  |  |                                 </div> | 
					
						
							|  |  |  |  |                             </div> | 
					
						
							|  |  |  |  |                         </div> | 
					
						
							|  |  |  |  |                     </div> | 
					
						
							|  |  |  |  |                 </form> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |             <div class="modal-footer"> | 
					
						
							|  |  |  |  |                 <button class="btn btn-cancel" onclick="closeModal()">取消</button> | 
					
						
							|  |  |  |  |                 <button class="btn btn-primary" onclick="submitForm()">确认</button> | 
					
						
							|  |  |  |  |             </div> | 
					
						
							|  |  |  |  |         </div> | 
					
						
							|  |  |  |  |     </div> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     <script> | 
					
						
							| 
									
										
										
										
											2025-10-21 01:57:31 +00:00
										 |  |  |  |         // 权限数据 | 
					
						
							|  |  |  |  |         const permissions = [ | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 1, | 
					
						
							|  |  |  |  |                 code: 'MARKET_MANAGE', | 
					
						
							|  |  |  |  |                 name: '菜市场管理', | 
					
						
							|  |  |  |  |                 description: '菜市场管理模块', | 
					
						
							|  |  |  |  |                 parentCode: '', | 
					
						
							|  |  |  |  |                 type: 'menu' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 2, | 
					
						
							|  |  |  |  |                 code: 'MARKET_BOOTH', | 
					
						
							|  |  |  |  |                 name: '摊位管理', | 
					
						
							|  |  |  |  |                 description: '摊位管理功能', | 
					
						
							|  |  |  |  |                 parentCode: 'MARKET_MANAGE', | 
					
						
							|  |  |  |  |                 type: 'menu' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 3, | 
					
						
							|  |  |  |  |                 code: 'MARKET_BOOTH_ADD', | 
					
						
							|  |  |  |  |                 name: '添加摊位', | 
					
						
							|  |  |  |  |                 description: '添加新摊位按钮', | 
					
						
							|  |  |  |  |                 parentCode: 'MARKET_BOOTH', | 
					
						
							|  |  |  |  |                 type: 'button' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 4, | 
					
						
							|  |  |  |  |                 code: 'MARKET_BOOTH_EDIT', | 
					
						
							|  |  |  |  |                 name: '编辑摊位', | 
					
						
							|  |  |  |  |                 description: '编辑摊位信息按钮', | 
					
						
							|  |  |  |  |                 parentCode: 'MARKET_BOOTH', | 
					
						
							|  |  |  |  |                 type: 'button' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 5, | 
					
						
							|  |  |  |  |                 code: 'MARKET_BOOTH_DELETE', | 
					
						
							|  |  |  |  |                 name: '删除摊位', | 
					
						
							|  |  |  |  |                 description: '删除摊位按钮', | 
					
						
							|  |  |  |  |                 parentCode: 'MARKET_BOOTH', | 
					
						
							|  |  |  |  |                 type: 'button' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 6, | 
					
						
							|  |  |  |  |                 code: 'MARKET_GOODS', | 
					
						
							|  |  |  |  |                 name: '商品管理', | 
					
						
							|  |  |  |  |                 description: '商品管理功能', | 
					
						
							|  |  |  |  |                 parentCode: 'MARKET_MANAGE', | 
					
						
							|  |  |  |  |                 type: 'menu' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 7, | 
					
						
							|  |  |  |  |                 code: 'MARKET_GOODS_ADD', | 
					
						
							|  |  |  |  |                 name: '添加商品', | 
					
						
							|  |  |  |  |                 description: '添加新商品按钮', | 
					
						
							|  |  |  |  |                 parentCode: 'MARKET_GOODS', | 
					
						
							|  |  |  |  |                 type: 'button' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 8, | 
					
						
							|  |  |  |  |                 code: 'MARKET_GOODS_EDIT', | 
					
						
							|  |  |  |  |                 name: '编辑商品', | 
					
						
							|  |  |  |  |                 description: '编辑商品信息按钮', | 
					
						
							|  |  |  |  |                 parentCode: 'MARKET_GOODS', | 
					
						
							|  |  |  |  |                 type: 'button' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 9, | 
					
						
							|  |  |  |  |                 code: 'ORDER_MANAGE', | 
					
						
							|  |  |  |  |                 name: '订单管理', | 
					
						
							|  |  |  |  |                 description: '订单管理模块', | 
					
						
							|  |  |  |  |                 parentCode: '', | 
					
						
							|  |  |  |  |                 type: 'menu' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 10, | 
					
						
							|  |  |  |  |                 code: 'ORDER_VIEW', | 
					
						
							|  |  |  |  |                 name: '查看订单', | 
					
						
							|  |  |  |  |                 description: '查看订单功能', | 
					
						
							|  |  |  |  |                 parentCode: 'ORDER_MANAGE', | 
					
						
							|  |  |  |  |                 type: 'menu' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 11, | 
					
						
							|  |  |  |  |                 code: 'ORDER_PROCESS', | 
					
						
							|  |  |  |  |                 name: '处理订单', | 
					
						
							|  |  |  |  |                 description: '处理订单按钮', | 
					
						
							|  |  |  |  |                 parentCode: 'ORDER_MANAGE', | 
					
						
							|  |  |  |  |                 type: 'button' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 12, | 
					
						
							|  |  |  |  |                 code: 'FINANCE_MANAGE', | 
					
						
							|  |  |  |  |                 name: '财务管理', | 
					
						
							|  |  |  |  |                 description: '财务管理模块', | 
					
						
							|  |  |  |  |                 parentCode: '', | 
					
						
							|  |  |  |  |                 type: 'menu' | 
					
						
							|  |  |  |  |             }, | 
					
						
							|  |  |  |  |             { | 
					
						
							|  |  |  |  |                 id: 13, | 
					
						
							|  |  |  |  |                 code: 'FINANCE_VIEW', | 
					
						
							|  |  |  |  |                 name: '查看财务', | 
					
						
							|  |  |  |  |                 description: '查看财务数据', | 
					
						
							|  |  |  |  |                 parentCode: 'FINANCE_MANAGE', | 
					
						
							|  |  |  |  |                 type: 'menu' | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         ]; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         let selectedPermissions = new Set(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |         // 验证码倒计时 | 
					
						
							|  |  |  |  |         let countdown = 0; | 
					
						
							|  |  |  |  |         let countdownTimer = null; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |         // 切换营业时间选项的显示/隐藏 | 
					
						
							|  |  |  |  |         function toggleBusinessTimeOptions() { | 
					
						
							|  |  |  |  |             const autoBusinessTime = document.getElementById('autoBusinessTime'); | 
					
						
							|  |  |  |  |             const businessDayOptions = document.getElementById('businessDayOptions'); | 
					
						
							|  |  |  |  |             const businessTimeRange = document.getElementById('businessTimeRange'); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (autoBusinessTime.checked) { | 
					
						
							|  |  |  |  |                 // 自动营业,显示时间范围和日期选项 | 
					
						
							|  |  |  |  |                 businessDayOptions.classList.remove('hidden'); | 
					
						
							|  |  |  |  |                 businessTimeRange.classList.remove('hidden'); | 
					
						
							|  |  |  |  |             } else { | 
					
						
							|  |  |  |  |                 // 手动营业,隐藏时间范围和日期选项 | 
					
						
							|  |  |  |  |                 businessDayOptions.classList.add('hidden'); | 
					
						
							|  |  |  |  |                 businessTimeRange.classList.add('hidden'); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 选择地图定位 | 
					
						
							|  |  |  |  |         function selectLocation() { | 
					
						
							|  |  |  |  |             // 这里应该打开地图选择器,实际应调用地图API | 
					
						
							|  |  |  |  |             // 模拟选择定位 | 
					
						
							|  |  |  |  |             alert('此处应打开地图选择器,实际开发时需要集成地图API(如高德地图、百度地图等)'); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 模拟选择了一个位置 | 
					
						
							|  |  |  |  |             const mockLat = 31.230416; | 
					
						
							|  |  |  |  |             const mockLng = 121.473701; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             document.getElementById('locationLat').value = mockLat; | 
					
						
							|  |  |  |  |             document.getElementById('locationLng').value = mockLng; | 
					
						
							|  |  |  |  |             document.getElementById('selectedLocationText').textContent = '已选择: ' + mockLat + ', ' + mockLng; | 
					
						
							|  |  |  |  |             document.getElementById('selectedLocationText').style.color = '#67c23a'; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |         // 发送验证码 | 
					
						
							|  |  |  |  |         function sendVerifyCode() { | 
					
						
							|  |  |  |  |             const account = document.getElementById('operatorAccount').value; | 
					
						
							|  |  |  |  |             const btn = document.getElementById('sendCodeBtn'); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 验证手机号格式 | 
					
						
							|  |  |  |  |             if (!account || !/^1[3-9]\d{9}$/.test(account)) { | 
					
						
							|  |  |  |  |                 alert('请输入正确的手机号码'); | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 如果正在倒计时,不允许再次发送 | 
					
						
							|  |  |  |  |             if (countdown > 0) { | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 这里应该调用后端API发送验证码 | 
					
						
							|  |  |  |  |             // 模拟发送成功 | 
					
						
							|  |  |  |  |             alert('验证码已发送至 ' + account); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 开始倒计时 | 
					
						
							|  |  |  |  |             countdown = 60; | 
					
						
							|  |  |  |  |             btn.disabled = true; | 
					
						
							|  |  |  |  |             btn.textContent = countdown + '秒后重发'; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             countdownTimer = setInterval(function() { | 
					
						
							|  |  |  |  |                 countdown--; | 
					
						
							|  |  |  |  |                 if (countdown > 0) { | 
					
						
							|  |  |  |  |                     btn.textContent = countdown + '秒后重发'; | 
					
						
							|  |  |  |  |                 } else { | 
					
						
							|  |  |  |  |                     clearInterval(countdownTimer); | 
					
						
							|  |  |  |  |                     btn.disabled = false; | 
					
						
							|  |  |  |  |                     btn.textContent = '发送验证码'; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             }, 1000); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |         // 搜索功能 | 
					
						
							|  |  |  |  |         document.querySelector('.search-bar .btn-primary').addEventListener('click', function() { | 
					
						
							|  |  |  |  |             alert('搜索功能待实现'); | 
					
						
							|  |  |  |  |         }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 新增功能 - 打开模态框 | 
					
						
							|  |  |  |  |         document.querySelector('.btn-success').addEventListener('click', function() { | 
					
						
							|  |  |  |  |             openModal(); | 
					
						
							|  |  |  |  |         }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 打开模态框 | 
					
						
							|  |  |  |  |         function openModal() { | 
					
						
							|  |  |  |  |             document.getElementById('addMarketModal').classList.add('active'); | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |             // 重置倒计时 | 
					
						
							|  |  |  |  |             if (countdownTimer) { | 
					
						
							|  |  |  |  |                 clearInterval(countdownTimer); | 
					
						
							|  |  |  |  |                 countdown = 0; | 
					
						
							|  |  |  |  |                 document.getElementById('sendCodeBtn').disabled = false; | 
					
						
							|  |  |  |  |                 document.getElementById('sendCodeBtn').textContent = '发送验证码'; | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-21 01:57:31 +00:00
										 |  |  |  |             // 初始化权限树 | 
					
						
							|  |  |  |  |             initPermissionTree(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 初始化权限树 | 
					
						
							|  |  |  |  |         function initPermissionTree() { | 
					
						
							|  |  |  |  |             const tree = buildPermissionTree(permissions); | 
					
						
							|  |  |  |  |             const treeContainer = document.getElementById('permissionTree'); | 
					
						
							|  |  |  |  |             treeContainer.innerHTML = ''; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             tree.forEach(item => { | 
					
						
							|  |  |  |  |                 treeContainer.appendChild(createPermissionNode(item)); | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 构建权限树 | 
					
						
							|  |  |  |  |         function buildPermissionTree(data) { | 
					
						
							|  |  |  |  |             const map = {}; | 
					
						
							|  |  |  |  |             const roots = []; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 创建映射 | 
					
						
							|  |  |  |  |             data.forEach(item => { | 
					
						
							|  |  |  |  |                 map[item.code] = { ...item, children: [] }; | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 构建树结构 | 
					
						
							|  |  |  |  |             data.forEach(item => { | 
					
						
							|  |  |  |  |                 if (item.parentCode && map[item.parentCode]) { | 
					
						
							|  |  |  |  |                     map[item.parentCode].children.push(map[item.code]); | 
					
						
							|  |  |  |  |                 } else { | 
					
						
							|  |  |  |  |                     roots.push(map[item.code]); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return roots; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 创建权限节点 | 
					
						
							|  |  |  |  |         function createPermissionNode(item) { | 
					
						
							|  |  |  |  |             const li = document.createElement('li'); | 
					
						
							|  |  |  |  |             li.className = 'permission-item ' + (item.children.length > 0 ? 'parent' : 'child'); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             const nodeDiv = document.createElement('div'); | 
					
						
							|  |  |  |  |             nodeDiv.className = 'permission-node'; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 展开/收起按钮 | 
					
						
							|  |  |  |  |             if (item.children.length > 0) { | 
					
						
							|  |  |  |  |                 const expandBtn = document.createElement('button'); | 
					
						
							|  |  |  |  |                 expandBtn.className = 'expand-btn'; | 
					
						
							|  |  |  |  |                 expandBtn.type = 'button'; // 防止触发表单提交 | 
					
						
							|  |  |  |  |                 expandBtn.textContent = '▼'; | 
					
						
							|  |  |  |  |                 expandBtn.onclick = (e) => { | 
					
						
							|  |  |  |  |                     e.preventDefault(); | 
					
						
							|  |  |  |  |                     e.stopPropagation(); | 
					
						
							|  |  |  |  |                     togglePermissionChildren(expandBtn, li); | 
					
						
							|  |  |  |  |                 }; | 
					
						
							|  |  |  |  |                 nodeDiv.appendChild(expandBtn); | 
					
						
							|  |  |  |  |             } else { | 
					
						
							|  |  |  |  |                 // 占位符保持对齐 | 
					
						
							|  |  |  |  |                 const placeholder = document.createElement('span'); | 
					
						
							|  |  |  |  |                 placeholder.style.width = '20px'; | 
					
						
							|  |  |  |  |                 placeholder.style.display = 'inline-block'; | 
					
						
							|  |  |  |  |                 nodeDiv.appendChild(placeholder); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 复选框 | 
					
						
							|  |  |  |  |             const checkbox = document.createElement('input'); | 
					
						
							|  |  |  |  |             checkbox.type = 'checkbox'; | 
					
						
							|  |  |  |  |             checkbox.className = 'permission-checkbox'; | 
					
						
							|  |  |  |  |             checkbox.dataset.permissionCode = item.code; | 
					
						
							|  |  |  |  |             checkbox.onchange = (e) => handlePermissionChange(e, item); | 
					
						
							|  |  |  |  |             nodeDiv.appendChild(checkbox); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 权限标签 | 
					
						
							|  |  |  |  |             const label = document.createElement('span'); | 
					
						
							|  |  |  |  |             label.className = 'permission-label'; | 
					
						
							|  |  |  |  |             label.textContent = `${item.name} (${item.description || item.code})`; | 
					
						
							|  |  |  |  |             label.onclick = () => checkbox.click(); | 
					
						
							|  |  |  |  |             nodeDiv.appendChild(label); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             li.appendChild(nodeDiv); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 子权限 | 
					
						
							|  |  |  |  |             if (item.children.length > 0) { | 
					
						
							|  |  |  |  |                 const childrenContainer = document.createElement('ul'); | 
					
						
							|  |  |  |  |                 childrenContainer.className = 'permission-children'; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 item.children.forEach(child => { | 
					
						
							|  |  |  |  |                     childrenContainer.appendChild(createPermissionNode(child)); | 
					
						
							|  |  |  |  |                 }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 li.appendChild(childrenContainer); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return li; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 切换权限子节点显示 | 
					
						
							|  |  |  |  |         function togglePermissionChildren(btn, li) { | 
					
						
							|  |  |  |  |             const children = li.querySelector('.permission-children'); | 
					
						
							|  |  |  |  |             if (!children) return; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             const isExpanded = children.classList.contains('expanded'); | 
					
						
							|  |  |  |  |             children.classList.toggle('expanded'); | 
					
						
							|  |  |  |  |             btn.textContent = isExpanded ? '▶' : '▼'; | 
					
						
							|  |  |  |  |             btn.classList.toggle('collapsed', isExpanded); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 处理权限选择变化 | 
					
						
							|  |  |  |  |         function handlePermissionChange(event, permission) { | 
					
						
							|  |  |  |  |             const checkbox = event.target; | 
					
						
							|  |  |  |  |             const isChecked = checkbox.checked; | 
					
						
							|  |  |  |  |             const permissionCode = permission.code; | 
					
						
							|  |  |  |  |             const node = checkbox.closest('.permission-node'); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 更新节点选中样式 | 
					
						
							|  |  |  |  |             if (node) { | 
					
						
							|  |  |  |  |                 node.classList.toggle('selected', isChecked); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (isChecked) { | 
					
						
							|  |  |  |  |                 selectedPermissions.add(permissionCode); | 
					
						
							|  |  |  |  |                 // 选中子级权限时,自动选中所有父级权限 | 
					
						
							|  |  |  |  |                 selectParentPermissions(permission); | 
					
						
							|  |  |  |  |                 // 如果是父权限,自动选中所有子权限 | 
					
						
							|  |  |  |  |                 if (permission.children && permission.children.length > 0) { | 
					
						
							|  |  |  |  |                     selectChildrenPermissions(permission, true); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } else { | 
					
						
							|  |  |  |  |                 selectedPermissions.delete(permissionCode); | 
					
						
							|  |  |  |  |                 // 如果是父权限,自动取消所有子权限 | 
					
						
							|  |  |  |  |                 if (permission.children && permission.children.length > 0) { | 
					
						
							|  |  |  |  |                     selectChildrenPermissions(permission, false); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |                 // 如果是子权限,检查是否需要取消父权限 | 
					
						
							|  |  |  |  |                 uncheckParentIfNeeded(permission); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             console.log('已选择权限:', Array.from(selectedPermissions)); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 选择所有父级权限 | 
					
						
							|  |  |  |  |         function selectParentPermissions(permission) { | 
					
						
							|  |  |  |  |             if (!permission.parentCode) return; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 查找父权限 | 
					
						
							|  |  |  |  |             const parent = permissions.find(p => p.code === permission.parentCode); | 
					
						
							|  |  |  |  |             if (!parent) return; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 选中父权限 | 
					
						
							|  |  |  |  |             const parentCheckbox = document.querySelector(`[data-permission-code="${parent.code}"]`); | 
					
						
							|  |  |  |  |             if (parentCheckbox && !parentCheckbox.checked) { | 
					
						
							|  |  |  |  |                 parentCheckbox.checked = true; | 
					
						
							|  |  |  |  |                 selectedPermissions.add(parent.code); | 
					
						
							|  |  |  |  |                 const parentNode = parentCheckbox.closest('.permission-node'); | 
					
						
							|  |  |  |  |                 if (parentNode) parentNode.classList.add('selected'); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 递归选中上级父权限 | 
					
						
							|  |  |  |  |             selectParentPermissions(parent); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 选择/取消子权限 | 
					
						
							|  |  |  |  |         function selectChildrenPermissions(parent, select) { | 
					
						
							|  |  |  |  |             if (!parent.children) return; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             parent.children.forEach(child => { | 
					
						
							|  |  |  |  |                 const childCheckbox = document.querySelector(`[data-permission-code="${child.code}"]`); | 
					
						
							|  |  |  |  |                 if (childCheckbox) { | 
					
						
							|  |  |  |  |                     childCheckbox.checked = select; | 
					
						
							|  |  |  |  |                     const childNode = childCheckbox.closest('.permission-node'); | 
					
						
							|  |  |  |  |                     if (childNode) childNode.classList.toggle('selected', select); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     if (select) { | 
					
						
							|  |  |  |  |                         selectedPermissions.add(child.code); | 
					
						
							|  |  |  |  |                     } else { | 
					
						
							|  |  |  |  |                         selectedPermissions.delete(child.code); | 
					
						
							|  |  |  |  |                     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                     // 递归处理子权限 | 
					
						
							|  |  |  |  |                     selectChildrenPermissions(child, select); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 检查是否需要取消父权限选择 | 
					
						
							|  |  |  |  |         function uncheckParentIfNeeded(permission) { | 
					
						
							|  |  |  |  |             if (!permission.parentCode) return; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 查找父权限 | 
					
						
							|  |  |  |  |             const parent = permissions.find(p => p.code === permission.parentCode); | 
					
						
							|  |  |  |  |             if (!parent) return; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 检查父权限的所有子权限是否都未选中 | 
					
						
							|  |  |  |  |             const siblings = permissions.filter(p => p.parentCode === parent.code); | 
					
						
							|  |  |  |  |             const hasSelectedSibling = siblings.some(sibling => selectedPermissions.has(sibling.code)); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (!hasSelectedSibling) { | 
					
						
							|  |  |  |  |                 const parentCheckbox = document.querySelector(`[data-permission-code="${parent.code}"]`); | 
					
						
							|  |  |  |  |                 if (parentCheckbox) { | 
					
						
							|  |  |  |  |                     parentCheckbox.checked = false; | 
					
						
							|  |  |  |  |                     selectedPermissions.delete(parent.code); | 
					
						
							|  |  |  |  |                     const parentNode = parentCheckbox.closest('.permission-node'); | 
					
						
							|  |  |  |  |                     if (parentNode) parentNode.classList.remove('selected'); | 
					
						
							|  |  |  |  |                     // 递归检查上级父权限 | 
					
						
							|  |  |  |  |                     uncheckParentIfNeeded(parent); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 关闭模态框 | 
					
						
							|  |  |  |  |         function closeModal() { | 
					
						
							|  |  |  |  |             document.getElementById('addMarketModal').classList.remove('active'); | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |             // 清理倒计时 | 
					
						
							|  |  |  |  |             if (countdownTimer) { | 
					
						
							|  |  |  |  |                 clearInterval(countdownTimer); | 
					
						
							|  |  |  |  |                 countdown = 0; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             // 重置表单 | 
					
						
							|  |  |  |  |             document.getElementById('addMarketForm').reset(); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |             // 重置定位信息 | 
					
						
							|  |  |  |  |             document.getElementById('locationLat').value = ''; | 
					
						
							|  |  |  |  |             document.getElementById('locationLng').value = ''; | 
					
						
							|  |  |  |  |             document.getElementById('selectedLocationText').textContent = '请选择定位'; | 
					
						
							|  |  |  |  |             document.getElementById('selectedLocationText').style.color = '#f56c6c'; | 
					
						
							| 
									
										
										
										
											2025-10-21 01:57:31 +00:00
										 |  |  |  |             // 重置权限选择 | 
					
						
							|  |  |  |  |             selectedPermissions.clear(); | 
					
						
							|  |  |  |  |             document.querySelectorAll('.permission-checkbox').forEach(checkbox => { | 
					
						
							|  |  |  |  |                 checkbox.checked = false; | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  |             document.querySelectorAll('.permission-node').forEach(node => { | 
					
						
							|  |  |  |  |                 node.classList.remove('selected'); | 
					
						
							|  |  |  |  |             }); | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 提交表单 | 
					
						
							|  |  |  |  |         function submitForm() { | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |             const account = document.getElementById('operatorAccount').value; | 
					
						
							|  |  |  |  |             const verifyCode = document.getElementById('verifyCode').value; | 
					
						
							|  |  |  |  |             const marketName = document.getElementById('marketName').value; | 
					
						
							|  |  |  |  |             const categoryType = document.getElementById('categoryType').value; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 验证必填项 | 
					
						
							|  |  |  |  |             if (!account || !/^1[3-9]\d{9}$/.test(account)) { | 
					
						
							|  |  |  |  |                 alert('请输入正确的手机号码'); | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (!verifyCode || verifyCode.length !== 6) { | 
					
						
							|  |  |  |  |                 alert('请输入6位验证码'); | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (!marketName || marketName.trim() === '') { | 
					
						
							|  |  |  |  |                 alert('请输入菜市场名称'); | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (!categoryType || categoryType === '') { | 
					
						
							|  |  |  |  |                 alert('请选择商品类目类型'); | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-21 01:57:31 +00:00
										 |  |  |  |             // 验证权限选择(可选,根据需求决定是否必选) | 
					
						
							|  |  |  |  |             if (selectedPermissions.size === 0) { | 
					
						
							|  |  |  |  |                 if (!confirm('您还未选择任何权限,确定要继续吗?')) { | 
					
						
							|  |  |  |  |                     return; | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 构建提交数据,包含权限信息 | 
					
						
							|  |  |  |  |             const formData = { | 
					
						
							|  |  |  |  |                 operatorAccount: account, | 
					
						
							|  |  |  |  |                 verifyCode: verifyCode, | 
					
						
							|  |  |  |  |                 marketName: marketName, | 
					
						
							|  |  |  |  |                 categoryType: categoryType, | 
					
						
							|  |  |  |  |                 permissions: Array.from(selectedPermissions) | 
					
						
							|  |  |  |  |             }; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             console.log('提交数据:', formData); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |             // 这里应该调用后端API验证验证码并提交表单 | 
					
						
							| 
									
										
										
										
											2025-10-21 01:57:31 +00:00
										 |  |  |  |             alert('表单提交功能待实现\n已选择权限: ' + formData.permissions.join(', ')); | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |             closeModal(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 点击模态框背景关闭 | 
					
						
							|  |  |  |  |         document.getElementById('addMarketModal').addEventListener('click', function(e) { | 
					
						
							|  |  |  |  |             if (e.target === this) { | 
					
						
							|  |  |  |  |                 closeModal(); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |         // 打开摊位详情模态框 | 
					
						
							|  |  |  |  |         function openBoothDetailModal(marketName) { | 
					
						
							|  |  |  |  |             // 模拟摊位数据,实际应该从后端API获取 | 
					
						
							|  |  |  |  |             const mockBoothData = [ | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     id: 4, | 
					
						
							|  |  |  |  |                     name: '猪肉铺', | 
					
						
							|  |  |  |  |                     beneficiaryName: '张三', | 
					
						
							|  |  |  |  |                     beneficiaryPhone: '13800000000', | 
					
						
							|  |  |  |  |                     joinTime: '2025-10-20 12:06:56' | 
					
						
							|  |  |  |  |                 }, | 
					
						
							|  |  |  |  |                 { | 
					
						
							|  |  |  |  |                     id: 5, | 
					
						
							|  |  |  |  |                     name: '测试摊位', | 
					
						
							|  |  |  |  |                     beneficiaryName: '李四(和经营者相同)', | 
					
						
							|  |  |  |  |                     beneficiaryPhone: '13800000001(和经营者相同)', | 
					
						
							|  |  |  |  |                     joinTime: '2025-10-20 12:06:56' | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             ]; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 填充表格数据 | 
					
						
							|  |  |  |  |             const tbody = document.getElementById('boothListTableBody'); | 
					
						
							|  |  |  |  |             tbody.innerHTML = ''; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             if (mockBoothData.length === 0) { | 
					
						
							|  |  |  |  |                 tbody.innerHTML = '<tr><td colspan="5" style="text-align: center; color: #909399;">暂无摊位数据</td></tr>'; | 
					
						
							|  |  |  |  |             } else { | 
					
						
							|  |  |  |  |                 mockBoothData.forEach(booth => { | 
					
						
							|  |  |  |  |                     const row = document.createElement('tr'); | 
					
						
							|  |  |  |  |                     row.innerHTML = ` | 
					
						
							|  |  |  |  |                         <td>${booth.id}</td> | 
					
						
							|  |  |  |  |                         <td>${booth.name}</td> | 
					
						
							|  |  |  |  |                         <td>${booth.beneficiaryName || ''}</td> | 
					
						
							|  |  |  |  |                         <td>${booth.beneficiaryPhone || ''}</td> | 
					
						
							|  |  |  |  |                         <td>${booth.joinTime}</td> | 
					
						
							|  |  |  |  |                     `; | 
					
						
							|  |  |  |  |                     tbody.appendChild(row); | 
					
						
							|  |  |  |  |                 }); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 显示模态框 | 
					
						
							|  |  |  |  |             document.getElementById('boothDetailModal').classList.add('active'); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 关闭摊位详情模态框 | 
					
						
							|  |  |  |  |         function closeBoothDetailModal() { | 
					
						
							|  |  |  |  |             document.getElementById('boothDetailModal').classList.remove('active'); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 点击摊位详情模态框背景关闭 | 
					
						
							|  |  |  |  |         document.getElementById('boothDetailModal').addEventListener('click', function(e) { | 
					
						
							|  |  |  |  |             if (e.target === this) { | 
					
						
							|  |  |  |  |                 closeBoothDetailModal(); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |         // 打开设置结算比例模态框 | 
					
						
							|  |  |  |  |         function openSettlementModal() { | 
					
						
							|  |  |  |  |             document.getElementById('settlementRatioModal').classList.add('active'); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 关闭设置结算比例模态框 | 
					
						
							|  |  |  |  |         function closeSettlementModal() { | 
					
						
							|  |  |  |  |             document.getElementById('settlementRatioModal').classList.remove('active'); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 提交结算比例 | 
					
						
							|  |  |  |  |         function submitSettlementRatio() { | 
					
						
							|  |  |  |  |             const ratio = document.getElementById('settlementRatio').value; | 
					
						
							|  |  |  |  |             if (ratio === '' || ratio < 0 || ratio > 1) { | 
					
						
							|  |  |  |  |                 alert('请输入有效的结算比例(0-1之间)'); | 
					
						
							|  |  |  |  |                 return; | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |             alert('结算比例已设置为: ' + ratio); | 
					
						
							|  |  |  |  |             closeSettlementModal(); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 点击结算比例模态框背景关闭 | 
					
						
							|  |  |  |  |         document.getElementById('settlementRatioModal').addEventListener('click', function(e) { | 
					
						
							|  |  |  |  |             if (e.target === this) { | 
					
						
							|  |  |  |  |                 closeSettlementModal(); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |         // 打开详情模态框 | 
					
						
							|  |  |  |  |         function openDetailModal(rowData) { | 
					
						
							|  |  |  |  |             // 填充详情数据 | 
					
						
							|  |  |  |  |             document.getElementById('detailMarketName').value = rowData.marketName || ''; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |             document.getElementById('detailDetailAddress').value = rowData.address || ''; | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |             // 显示定位坐标信息(模拟数据,实际应从后端获取) | 
					
						
							|  |  |  |  |             const coordsElement = document.getElementById('detailLocationCoords'); | 
					
						
							|  |  |  |  |             if (rowData.location) { | 
					
						
							|  |  |  |  |                 coordsElement.textContent = '经纬度: ' + rowData.location; | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |  |                 coordsElement.textContent = '暂无定位信息'; | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |             } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             // 显示模态框 | 
					
						
							|  |  |  |  |             document.getElementById('detailMarketModal').classList.add('active'); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 关闭详情模态框 | 
					
						
							|  |  |  |  |         function closeDetailModal() { | 
					
						
							|  |  |  |  |             document.getElementById('detailMarketModal').classList.remove('active'); | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 点击详情模态框背景关闭 | 
					
						
							|  |  |  |  |         document.getElementById('detailMarketModal').addEventListener('click', function(e) { | 
					
						
							|  |  |  |  |             if (e.target === this) { | 
					
						
							|  |  |  |  |                 closeDetailModal(); | 
					
						
							|  |  |  |  |             } | 
					
						
							|  |  |  |  |         }); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 从表格行获取数据 | 
					
						
							|  |  |  |  |         function getRowData(button) { | 
					
						
							|  |  |  |  |             const row = button.closest('tr'); | 
					
						
							|  |  |  |  |             const cells = row.querySelectorAll('td'); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |             return { | 
					
						
							|  |  |  |  |                 marketName: cells[0].textContent.trim(), | 
					
						
							|  |  |  |  |                 categoryType: row.getAttribute('data-category-type') || '', | 
					
						
							|  |  |  |  |                 address: cells[2].textContent.trim(), | 
					
						
							|  |  |  |  |                 operatorName: cells[3].textContent.trim(), | 
					
						
							|  |  |  |  |                 operatorAccount: cells[4].textContent.trim(), | 
					
						
							|  |  |  |  |                 thirdPartyDelivery: cells[5].textContent.trim() === '是', | 
					
						
							|  |  |  |  |                 marketStatus: cells[7].textContent.trim() === '正常', | 
					
						
							|  |  |  |  |                 boothCount: cells[8].textContent.trim(), | 
					
						
							|  |  |  |  |                 businessStatus: cells[9].textContent.trim(), | 
					
						
							|  |  |  |  |                 detailAddress: '', | 
					
						
							|  |  |  |  |                 location: '', | 
					
						
							|  |  |  |  |                 autoBusinessTime: true | 
					
						
							|  |  |  |  |             }; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |         // 为所有操作按钮添加事件监听 | 
					
						
							|  |  |  |  |         document.querySelectorAll('.action-buttons button').forEach(button => { | 
					
						
							|  |  |  |  |             button.addEventListener('click', function(e) { | 
					
						
							|  |  |  |  |                 e.stopPropagation(); | 
					
						
							|  |  |  |  |                 const buttonText = this.textContent; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |                 // 如果是设置结算比例按钮,打开对应的模态框 | 
					
						
							|  |  |  |  |                 if (buttonText === '设置结算比例') { | 
					
						
							|  |  |  |  |                     openSettlementModal(); | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  |                 } else if (buttonText === '详情') { | 
					
						
							|  |  |  |  |                     // 获取当前行数据并打开详情模态框 | 
					
						
							|  |  |  |  |                     const rowData = getRowData(this); | 
					
						
							|  |  |  |  |                     openDetailModal(rowData); | 
					
						
							|  |  |  |  |                 } else if (buttonText === '摊位详情') { | 
					
						
							|  |  |  |  |                     // 获取市场名称并打开摊位详情模态框 | 
					
						
							|  |  |  |  |                     const rowData = getRowData(this); | 
					
						
							|  |  |  |  |                     openBoothDetailModal(rowData.marketName); | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |                 } else { | 
					
						
							|  |  |  |  |                     alert(buttonText + ' 功能待实现'); | 
					
						
							|  |  |  |  |                 } | 
					
						
							|  |  |  |  |             }); | 
					
						
							|  |  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2025-10-20 10:10:46 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |         // 跳转到待审核菜市场页面 | 
					
						
							|  |  |  |  |         function goToPendingMarkets() { | 
					
						
							|  |  |  |  |             window.location.href = '待审核菜市场.html'; | 
					
						
							|  |  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-10-17 10:20:59 +00:00
										 |  |  |  |     </script> | 
					
						
							|  |  |  |  | </body> | 
					
						
							|  |  |  |  | </html> |