| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  | <!DOCTYPE html> | 
					
						
							|  |  |  | <html lang="zh-CN"> | 
					
						
							|  |  |  | <head> | 
					
						
							|  |  |  |     <meta charset="UTF-8"> | 
					
						
							|  |  |  |     <meta name="viewport" content="width=device-width, initial-scale=1.0"> | 
					
						
							| 
									
										
										
										
											2025-09-07 18:09:31 +00:00
										 |  |  |     <title>市场经营者创建</title> | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |     <style> | 
					
						
							|  |  |  |         * { | 
					
						
							|  |  |  |             margin: 0; | 
					
						
							|  |  |  |             padding: 0; | 
					
						
							|  |  |  |             box-sizing: border-box; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         body { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif; | 
					
						
							|  |  |  |             background-color: #f5f5f5; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             color: #333; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             min-height: 100vh; | 
					
						
							|  |  |  |             padding: 20px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .container { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             max-width: 1600px; | 
					
						
							|  |  |  |             margin: 0 auto; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         /* 页面头部 */ | 
					
						
							|  |  |  |         .page-header { | 
					
						
							|  |  |  |             background: white; | 
					
						
							|  |  |  |             padding: 16px 24px; | 
					
						
							|  |  |  |             margin-bottom: 16px; | 
					
						
							|  |  |  |             border-radius: 8px; | 
					
						
							|  |  |  |             box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             display: flex; | 
					
						
							|  |  |  |             justify-content: space-between; | 
					
						
							|  |  |  |             align-items: center; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         .page-title { | 
					
						
							|  |  |  |             font-size: 24px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             font-weight: 600; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             color: #262626; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         /* 按钮样式 */ | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         .btn { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             height: 40px; | 
					
						
							|  |  |  |             padding: 0 16px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             border: none; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             border-radius: 6px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             font-size: 14px; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             cursor: pointer; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             display: inline-flex; | 
					
						
							|  |  |  |             align-items: center; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             justify-content: center; | 
					
						
							|  |  |  |             transition: all 0.3s; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             gap: 5px; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .btn-primary { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             background: #1890ff; | 
					
						
							|  |  |  |             color: white; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .btn-primary:hover { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             background: #40a9ff; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .btn-success { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             background: #52c41a; | 
					
						
							|  |  |  |             color: white; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .btn-success:hover { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             background: #73d13d; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         .btn-default { | 
					
						
							|  |  |  |             background: white; | 
					
						
							|  |  |  |             color: #666; | 
					
						
							|  |  |  |             border: 1px solid #ddd; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         .btn-default:hover { | 
					
						
							|  |  |  |             border-color: #1890ff; | 
					
						
							|  |  |  |             color: #1890ff; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         .button-group { | 
					
						
							|  |  |  |             display: flex; | 
					
						
							|  |  |  |             gap: 12px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         /* 表单区域 */ | 
					
						
							|  |  |  |         .form-section { | 
					
						
							|  |  |  |             background: white; | 
					
						
							|  |  |  |             padding: 24px; | 
					
						
							|  |  |  |             margin-bottom: 16px; | 
					
						
							|  |  |  |             border-radius: 8px; | 
					
						
							|  |  |  |             box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .section-title { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             font-size: 18px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             font-weight: 600; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             color: #262626; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             margin-bottom: 20px; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             padding-bottom: 12px; | 
					
						
							|  |  |  |             border-bottom: 1px solid #f0f0f0; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .form-row { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             display: grid; | 
					
						
							|  |  |  |             grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); | 
					
						
							|  |  |  |             gap: 16px; | 
					
						
							|  |  |  |             margin-bottom: 16px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         .form-item { | 
					
						
							|  |  |  |             display: flex; | 
					
						
							|  |  |  |             flex-direction: column; | 
					
						
							|  |  |  |             gap: 8px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         .form-label { | 
					
						
							|  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |             color: #666; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             font-weight: 500; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         .form-input, | 
					
						
							|  |  |  |         .form-select { | 
					
						
							|  |  |  |             height: 40px; | 
					
						
							|  |  |  |             padding: 0 12px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             border: 1px solid #ddd; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             border-radius: 6px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             font-size: 14px; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             transition: all 0.3s; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         .form-input:focus, | 
					
						
							|  |  |  |         .form-select:focus { | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             outline: none; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             border-color: #1890ff; | 
					
						
							|  |  |  |             box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         /* 菜市场选择下拉框 */ | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         .market-select-container { | 
					
						
							|  |  |  |             position: relative; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .market-dropdown { | 
					
						
							|  |  |  |             position: absolute; | 
					
						
							|  |  |  |             top: 100%; | 
					
						
							|  |  |  |             left: 0; | 
					
						
							|  |  |  |             right: 0; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             background: white; | 
					
						
							|  |  |  |             border: 1px solid #f0f0f0; | 
					
						
							|  |  |  |             border-radius: 6px; | 
					
						
							|  |  |  |             max-height: 300px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             overflow-y: auto; | 
					
						
							|  |  |  |             z-index: 1000; | 
					
						
							|  |  |  |             display: none; | 
					
						
							|  |  |  |             box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             margin-top: 4px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .market-dropdown.show { | 
					
						
							|  |  |  |             display: block; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         .market-filter { | 
					
						
							|  |  |  |             padding: 12px; | 
					
						
							|  |  |  |             border: none; | 
					
						
							|  |  |  |             border-bottom: 1px solid #f0f0f0; | 
					
						
							|  |  |  |             width: 100%; | 
					
						
							|  |  |  |             outline: none; | 
					
						
							|  |  |  |             font-size: 14px; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         .market-option { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             padding: 10px 12px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             cursor: pointer; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             transition: background-color 0.2s; | 
					
						
							|  |  |  |             font-size: 14px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .market-option:hover { | 
					
						
							|  |  |  |             background-color: #f8f9fa; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .market-option.selected { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             background-color: #e6f7ff; | 
					
						
							|  |  |  |             color: #1890ff; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         /* 权限分配区域 */ | 
					
						
							|  |  |  |         .permissions-container { | 
					
						
							|  |  |  |             max-height: 500px; | 
					
						
							|  |  |  |             overflow-y: auto; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .permission-tree { | 
					
						
							|  |  |  |             list-style: none; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .permission-item { | 
					
						
							|  |  |  |             margin-bottom: 8px; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .permission-node { | 
					
						
							|  |  |  |             display: flex; | 
					
						
							|  |  |  |             align-items: center; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             padding: 12px 16px; | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             border-radius: 6px; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             transition: all 0.3s; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             cursor: pointer; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             background-color: white; | 
					
						
							|  |  |  |             border: 1px solid #f0f0f0; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .permission-node:hover { | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             background-color: #f8f9fa; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             border-color: #1890ff; | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |         .permission-node.selected { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             background-color: #e6f7ff; | 
					
						
							|  |  |  |             border-color: #1890ff; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .permission-checkbox { | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             margin-right: 12px; | 
					
						
							|  |  |  |             width: 18px; | 
					
						
							|  |  |  |             height: 18px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             cursor: pointer; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             accent-color: #1890ff; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .expand-btn { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             background: none; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             border: none; | 
					
						
							|  |  |  |             cursor: pointer; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             padding: 4px; | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             margin-right: 12px; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             color: #1890ff; | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             font-size: 14px; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             transition: all 0.3s; | 
					
						
							|  |  |  |             min-width: 24px; | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             border-radius: 4px; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .expand-btn:hover { | 
					
						
							|  |  |  |             background: #e6f7ff; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .expand-btn.collapsed { | 
					
						
							|  |  |  |             transform: rotate(-90deg); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .permission-label { | 
					
						
							|  |  |  |             font-size: 14px; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             color: #333; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             user-select: none; | 
					
						
							|  |  |  |             flex: 1; | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             font-weight: 500; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .permission-children { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             margin-left: 40px; | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             margin-top: 8px; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             border-left: 2px solid #e6f7ff; | 
					
						
							|  |  |  |             padding-left: 16px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             display: none; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .permission-children.expanded { | 
					
						
							|  |  |  |             display: block; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |         .permission-item.parent > .permission-node { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             background-color: #fafafa; | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             font-weight: 600; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         /* 操作区域 */ | 
					
						
							|  |  |  |         .actions { | 
					
						
							|  |  |  |             display: flex; | 
					
						
							|  |  |  |             justify-content: flex-end; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             gap: 12px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             padding-top: 20px; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         /* 响应式设计 */ | 
					
						
							|  |  |  |         @media (max-width: 768px) { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             body { | 
					
						
							|  |  |  |                 padding: 10px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             .page-header { | 
					
						
							|  |  |  |                 padding: 12px 16px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 flex-direction: column; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 gap: 12px; | 
					
						
							|  |  |  |                 align-items: flex-start; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             .form-section { | 
					
						
							|  |  |  |                 padding: 16px; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             .form-row { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 grid-template-columns: 1fr; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         /* 滚动条样式 */ | 
					
						
							|  |  |  |         .permissions-container::-webkit-scrollbar, | 
					
						
							|  |  |  |         .market-dropdown::-webkit-scrollbar { | 
					
						
							|  |  |  |             width: 6px; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .permissions-container::-webkit-scrollbar-track, | 
					
						
							|  |  |  |         .market-dropdown::-webkit-scrollbar-track { | 
					
						
							|  |  |  |             background: #f0f0f0; | 
					
						
							|  |  |  |             border-radius: 3px; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .permissions-container::-webkit-scrollbar-thumb, | 
					
						
							|  |  |  |         .market-dropdown::-webkit-scrollbar-thumb { | 
					
						
							|  |  |  |             background: #ddd; | 
					
						
							|  |  |  |             border-radius: 3px; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .permissions-container::-webkit-scrollbar-thumb:hover, | 
					
						
							|  |  |  |         .market-dropdown::-webkit-scrollbar-thumb:hover { | 
					
						
							|  |  |  |             background: #bbb; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |     </style> | 
					
						
							|  |  |  | </head> | 
					
						
							|  |  |  | <body> | 
					
						
							|  |  |  |     <div class="container"> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         <!-- 页面头部 --> | 
					
						
							|  |  |  |         <div class="page-header"> | 
					
						
							|  |  |  |             <h1 class="page-title">市场经营者创建</h1> | 
					
						
							|  |  |  |             <div class="button-group"> | 
					
						
							|  |  |  |                 <button class="btn btn-default" onclick="resetForm()">重置</button> | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         <!-- 账号信息 --> | 
					
						
							|  |  |  |         <div class="form-section"> | 
					
						
							|  |  |  |             <h2 class="section-title">账号信息</h2> | 
					
						
							|  |  |  |             <div class="form-row"> | 
					
						
							|  |  |  |                 <div class="form-item"> | 
					
						
							|  |  |  |                     <label class="form-label">菜市场选择 *</label> | 
					
						
							|  |  |  |                     <div class="market-select-container"> | 
					
						
							|  |  |  |                         <input type="text" id="marketSelect" class="form-input" | 
					
						
							|  |  |  |                                placeholder="请选择菜市场" readonly onclick="toggleMarketDropdown()"> | 
					
						
							|  |  |  |                         <div id="marketDropdown" class="market-dropdown"> | 
					
						
							|  |  |  |                             <input type="text" id="marketFilter" class="market-filter" | 
					
						
							|  |  |  |                                    placeholder="搜索菜市场..." | 
					
						
							|  |  |  |                                    oninput="filterMarkets(this.value)"> | 
					
						
							|  |  |  |                             <div id="marketOptions"></div> | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                         </div> | 
					
						
							|  |  |  |                     </div> | 
					
						
							|  |  |  |                 </div> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 <div class="form-item"> | 
					
						
							|  |  |  |                     <label class="form-label">账号手机号 *</label> | 
					
						
							|  |  |  |                     <input type="tel" id="phoneNumber" class="form-input" placeholder="请输入手机号" maxlength="11"> | 
					
						
							|  |  |  |                 </div> | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             </div> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         </div> | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         <!-- 权限分配 --> | 
					
						
							|  |  |  |         <div class="form-section"> | 
					
						
							|  |  |  |             <h2 class="section-title">权限分配</h2> | 
					
						
							|  |  |  |             <div class="permissions-container"> | 
					
						
							|  |  |  |                 <ul id="permissionTree" class="permission-tree"> | 
					
						
							|  |  |  |                     <!-- 权限树将通过JavaScript动态生成 --> | 
					
						
							|  |  |  |                 </ul> | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             </div> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         </div> | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         <!-- 操作按钮 --> | 
					
						
							|  |  |  |         <div class="form-section"> | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             <div class="actions"> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 <button class="btn btn-default" onclick="cancelAssignment()">取消</button> | 
					
						
							|  |  |  |                 <button class="btn btn-success" onclick="saveAssignment()">保存分配</button> | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <script> | 
					
						
							|  |  |  |         // 菜市场数据 | 
					
						
							|  |  |  |         const markets = [ | 
					
						
							|  |  |  |             { id: 1, name: '中央菜市场', code: 'CENTRAL_MARKET' }, | 
					
						
							|  |  |  |             { id: 2, name: '东区菜市场', code: 'EAST_MARKET' }, | 
					
						
							|  |  |  |             { id: 3, name: '西区菜市场', code: 'WEST_MARKET' }, | 
					
						
							|  |  |  |             { id: 4, name: '南区菜市场', code: 'SOUTH_MARKET' }, | 
					
						
							|  |  |  |             { id: 5, name: '北区菜市场', code: 'NORTH_MARKET' }, | 
					
						
							|  |  |  |             { id: 6, name: '新华菜市场', code: 'XINHUA_MARKET' }, | 
					
						
							|  |  |  |             { id: 7, name: '人民菜市场', code: 'RENMIN_MARKET' }, | 
					
						
							|  |  |  |             { id: 8, name: '建设菜市场', code: 'JIANSHE_MARKET' } | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |         // 权限数据 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         const permissions = [ | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 id: 1, | 
					
						
							|  |  |  |                 code: 'SYSTEM', | 
					
						
							|  |  |  |                 name: '系统管理', | 
					
						
							|  |  |  |                 description: '系统管理模块', | 
					
						
							|  |  |  |                 parentCode: '', | 
					
						
							|  |  |  |                 type: 'menu' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 id: 2, | 
					
						
							|  |  |  |                 code: 'SYSTEM_USER', | 
					
						
							|  |  |  |                 name: '用户管理', | 
					
						
							|  |  |  |                 description: '用户管理功能', | 
					
						
							|  |  |  |                 parentCode: 'SYSTEM', | 
					
						
							|  |  |  |                 type: 'menu' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 id: 3, | 
					
						
							|  |  |  |                 code: 'SYSTEM_USER_ADD', | 
					
						
							|  |  |  |                 name: '添加用户', | 
					
						
							|  |  |  |                 description: '添加新用户按钮', | 
					
						
							|  |  |  |                 parentCode: 'SYSTEM_USER', | 
					
						
							|  |  |  |                 type: 'button' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 id: 4, | 
					
						
							|  |  |  |                 code: 'SYSTEM_USER_EDIT', | 
					
						
							|  |  |  |                 name: '编辑用户', | 
					
						
							|  |  |  |                 description: '编辑用户信息按钮', | 
					
						
							|  |  |  |                 parentCode: 'SYSTEM_USER', | 
					
						
							|  |  |  |                 type: 'button' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 id: 5, | 
					
						
							|  |  |  |                 code: 'SYSTEM_ROLE', | 
					
						
							|  |  |  |                 name: '角色管理', | 
					
						
							|  |  |  |                 description: '角色管理功能', | 
					
						
							|  |  |  |                 parentCode: 'SYSTEM', | 
					
						
							|  |  |  |                 type: 'menu' | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 id: 6, | 
					
						
							|  |  |  |                 code: 'CONTENT', | 
					
						
							|  |  |  |                 name: '内容管理', | 
					
						
							|  |  |  |                 description: '内容管理模块', | 
					
						
							|  |  |  |                 parentCode: '', | 
					
						
							|  |  |  |                 type: 'menu' | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         let selectedMarket = null; | 
					
						
							|  |  |  |         let selectedPermissions = new Set(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 初始化页面 | 
					
						
							|  |  |  |         document.addEventListener('DOMContentLoaded', function() { | 
					
						
							|  |  |  |             initMarketOptions(); | 
					
						
							|  |  |  |             initPermissionTree(); | 
					
						
							|  |  |  |             bindEvents(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 初始化菜市场选项 | 
					
						
							|  |  |  |         function initMarketOptions() { | 
					
						
							|  |  |  |             const optionsContainer = document.getElementById('marketOptions'); | 
					
						
							|  |  |  |             optionsContainer.innerHTML = ''; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             markets.forEach(market => { | 
					
						
							|  |  |  |                 const option = document.createElement('div'); | 
					
						
							|  |  |  |                 option.className = 'market-option'; | 
					
						
							|  |  |  |                 option.textContent = market.name; | 
					
						
							|  |  |  |                 option.dataset.marketId = market.id; | 
					
						
							|  |  |  |                 option.onclick = () => selectMarket(market); | 
					
						
							|  |  |  |                 optionsContainer.appendChild(option); | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 选择菜市场 | 
					
						
							|  |  |  |         function selectMarket(market) { | 
					
						
							|  |  |  |             selectedMarket = market; | 
					
						
							|  |  |  |             document.getElementById('marketSelect').value = market.name; | 
					
						
							|  |  |  |             document.getElementById('marketDropdown').classList.remove('show'); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 更新选中状态 | 
					
						
							|  |  |  |             document.querySelectorAll('.market-option').forEach(option => { | 
					
						
							|  |  |  |                 option.classList.toggle('selected', option.dataset.marketId == market.id); | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 切换菜市场下拉框显示 | 
					
						
							|  |  |  |         function toggleMarketDropdown() { | 
					
						
							|  |  |  |             const dropdown = document.getElementById('marketDropdown'); | 
					
						
							|  |  |  |             dropdown.classList.toggle('show'); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             if (dropdown.classList.contains('show')) { | 
					
						
							|  |  |  |                 document.getElementById('marketFilter').focus(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 过滤菜市场 | 
					
						
							|  |  |  |         function filterMarkets(keyword) { | 
					
						
							|  |  |  |             const options = document.querySelectorAll('.market-option'); | 
					
						
							|  |  |  |             keyword = keyword.toLowerCase(); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             options.forEach(option => { | 
					
						
							|  |  |  |                 const marketName = option.textContent.toLowerCase(); | 
					
						
							|  |  |  |                 option.style.display = marketName.includes(keyword) ? 'block' : 'none'; | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 初始化权限树 | 
					
						
							|  |  |  |         function initPermissionTree() { | 
					
						
							|  |  |  |             const tree = buildPermissionTree(permissions); | 
					
						
							|  |  |  |             const treeContainer = document.getElementById('permissionTree'); | 
					
						
							|  |  |  |             treeContainer.innerHTML = ''; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             tree.forEach(item => { | 
					
						
							|  |  |  |                 treeContainer.appendChild(createPermissionNode(item)); | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 构建权限树 | 
					
						
							|  |  |  |         function buildPermissionTree(data) { | 
					
						
							|  |  |  |             const map = {}; | 
					
						
							|  |  |  |             const roots = []; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 创建映射 | 
					
						
							|  |  |  |             data.forEach(item => { | 
					
						
							|  |  |  |                 map[item.code] = { ...item, children: [] }; | 
					
						
							|  |  |  |             }); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 构建树结构 | 
					
						
							|  |  |  |             data.forEach(item => { | 
					
						
							|  |  |  |                 if (item.parentCode && map[item.parentCode]) { | 
					
						
							|  |  |  |                     map[item.parentCode].children.push(map[item.code]); | 
					
						
							|  |  |  |                 } else { | 
					
						
							|  |  |  |                     roots.push(map[item.code]); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             return roots; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 创建权限节点 | 
					
						
							|  |  |  |         function createPermissionNode(item) { | 
					
						
							|  |  |  |             const li = document.createElement('li'); | 
					
						
							|  |  |  |             li.className = 'permission-item ' + (item.children.length > 0 ? 'parent' : 'child'); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             const nodeDiv = document.createElement('div'); | 
					
						
							|  |  |  |             nodeDiv.className = 'permission-node'; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 展开/收起按钮 | 
					
						
							|  |  |  |             if (item.children.length > 0) { | 
					
						
							|  |  |  |                 const expandBtn = document.createElement('button'); | 
					
						
							|  |  |  |                 expandBtn.className = 'expand-btn'; | 
					
						
							|  |  |  |                 expandBtn.textContent = '▼'; | 
					
						
							|  |  |  |                 expandBtn.onclick = (e) => { | 
					
						
							|  |  |  |                     e.stopPropagation(); | 
					
						
							|  |  |  |                     togglePermissionChildren(expandBtn, li); | 
					
						
							|  |  |  |                 }; | 
					
						
							|  |  |  |                 nodeDiv.appendChild(expandBtn); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 // 占位符保持对齐 | 
					
						
							|  |  |  |                 const placeholder = document.createElement('span'); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 placeholder.style.width = '24px'; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 placeholder.style.display = 'inline-block'; | 
					
						
							|  |  |  |                 nodeDiv.appendChild(placeholder); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 复选框 | 
					
						
							|  |  |  |             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); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 权限标签 | 
					
						
							|  |  |  |             const label = document.createElement('span'); | 
					
						
							|  |  |  |             label.className = 'permission-label'; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             label.textContent = `${item.name}(${item.description || item.code})`; | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             label.onclick = () => checkbox.click(); | 
					
						
							|  |  |  |             nodeDiv.appendChild(label); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             li.appendChild(nodeDiv); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 子权限 | 
					
						
							|  |  |  |             if (item.children.length > 0) { | 
					
						
							|  |  |  |                 const childrenContainer = document.createElement('ul'); | 
					
						
							|  |  |  |                 childrenContainer.className = 'permission-children'; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 item.children.forEach(child => { | 
					
						
							|  |  |  |                     childrenContainer.appendChild(createPermissionNode(child)); | 
					
						
							|  |  |  |                 }); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 li.appendChild(childrenContainer); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             return li; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 切换权限子节点显示 | 
					
						
							|  |  |  |         function togglePermissionChildren(btn, li) { | 
					
						
							|  |  |  |             const children = li.querySelector('.permission-children'); | 
					
						
							|  |  |  |             if (!children) return; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             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; | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             const node = checkbox.closest('.permission-node'); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             // 更新节点选中样式 | 
					
						
							|  |  |  |             if (node) { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 node.classList.toggle('selected', isChecked); | 
					
						
							| 
									
										
										
										
											2025-09-05 15:08:16 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             if (isChecked) { | 
					
						
							|  |  |  |                 selectedPermissions.add(permissionCode); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 // 选中子级权限时,自动选中所有父级权限 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 selectParentPermissions(permission); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 // 如果是父权限,自动选中所有子权限 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 if (permission.children && permission.children.length > 0) { | 
					
						
							|  |  |  |                     selectChildrenPermissions(permission, true); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 selectedPermissions.delete(permissionCode); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 // 如果是父权限,自动取消所有子权限 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 if (permission.children && permission.children.length > 0) { | 
					
						
							|  |  |  |                     selectChildrenPermissions(permission, false); | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 // 如果是子权限,检查是否需要取消父权限 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 uncheckParentIfNeeded(permission); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             updatePermissionDisplay(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 选择所有父级权限 | 
					
						
							|  |  |  |         function selectParentPermissions(permission) { | 
					
						
							|  |  |  |             if (!permission.parentCode) return; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 查找父权限 | 
					
						
							|  |  |  |             const parent = permissions.find(p => p.code === permission.parentCode); | 
					
						
							|  |  |  |             if (!parent) return; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 选中父权限 | 
					
						
							|  |  |  |             const parentCheckbox = document.querySelector(`[data-permission-code="${parent.code}"]`); | 
					
						
							|  |  |  |             if (parentCheckbox && !parentCheckbox.checked) { | 
					
						
							|  |  |  |                 parentCheckbox.checked = true; | 
					
						
							|  |  |  |                 selectedPermissions.add(parent.code); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 const parentNode = parentCheckbox.closest('.permission-node'); | 
					
						
							|  |  |  |                 if (parentNode) parentNode.classList.add('selected'); | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 递归选中上级父权限 | 
					
						
							|  |  |  |             selectParentPermissions(parent); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 选择/取消子权限 | 
					
						
							|  |  |  |         function selectChildrenPermissions(parent, select) { | 
					
						
							|  |  |  |             if (!parent.children) return; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             parent.children.forEach(child => { | 
					
						
							|  |  |  |                 const childCheckbox = document.querySelector(`[data-permission-code="${child.code}"]`); | 
					
						
							|  |  |  |                 if (childCheckbox) { | 
					
						
							|  |  |  |                     childCheckbox.checked = select; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                     const childNode = childCheckbox.closest('.permission-node'); | 
					
						
							|  |  |  |                     if (childNode) childNode.classList.toggle('selected', select); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                     if (select) { | 
					
						
							|  |  |  |                         selectedPermissions.add(child.code); | 
					
						
							|  |  |  |                     } else { | 
					
						
							|  |  |  |                         selectedPermissions.delete(child.code); | 
					
						
							|  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                     // 递归处理子权限 | 
					
						
							|  |  |  |                     selectChildrenPermissions(child, select); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 检查是否需要取消父权限选择 | 
					
						
							|  |  |  |         function uncheckParentIfNeeded(permission) { | 
					
						
							|  |  |  |             if (!permission.parentCode) return; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 查找父权限 | 
					
						
							|  |  |  |             const parent = permissions.find(p => p.code === permission.parentCode); | 
					
						
							|  |  |  |             if (!parent) return; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 检查父权限的所有子权限是否都未选中 | 
					
						
							|  |  |  |             const siblings = permissions.filter(p => p.parentCode === parent.code); | 
					
						
							|  |  |  |             const hasSelectedSibling = siblings.some(sibling => selectedPermissions.has(sibling.code)); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             if (!hasSelectedSibling) { | 
					
						
							|  |  |  |                 const parentCheckbox = document.querySelector(`[data-permission-code="${parent.code}"]`); | 
					
						
							|  |  |  |                 if (parentCheckbox) { | 
					
						
							|  |  |  |                     parentCheckbox.checked = false; | 
					
						
							|  |  |  |                     selectedPermissions.delete(parent.code); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                     const parentNode = parentCheckbox.closest('.permission-node'); | 
					
						
							|  |  |  |                     if (parentNode) parentNode.classList.remove('selected'); | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                     // 递归检查上级父权限 | 
					
						
							|  |  |  |                     uncheckParentIfNeeded(parent); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 更新权限显示 | 
					
						
							|  |  |  |         function updatePermissionDisplay() { | 
					
						
							|  |  |  |             console.log('已选择权限:', Array.from(selectedPermissions)); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 绑定事件 | 
					
						
							|  |  |  |         function bindEvents() { | 
					
						
							|  |  |  |             // 点击其他地方关闭下拉框 | 
					
						
							|  |  |  |             document.addEventListener('click', function(e) { | 
					
						
							|  |  |  |                 const dropdown = document.getElementById('marketDropdown'); | 
					
						
							|  |  |  |                 const selectContainer = document.querySelector('.market-select-container'); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 if (!selectContainer.contains(e.target)) { | 
					
						
							|  |  |  |                     dropdown.classList.remove('show'); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // 手机号输入验证 | 
					
						
							|  |  |  |             document.getElementById('phoneNumber').addEventListener('input', function(e) { | 
					
						
							|  |  |  |                 let value = e.target.value.replace(/\D/g, ''); | 
					
						
							|  |  |  |                 if (value.length > 11) { | 
					
						
							|  |  |  |                     value = value.slice(0, 11); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 e.target.value = value; | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 重置表单 | 
					
						
							|  |  |  |         function resetForm() { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             if (confirm('确定要重置所有信息吗?')) { | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 // 重置菜市场选择 | 
					
						
							|  |  |  |                 selectedMarket = null; | 
					
						
							|  |  |  |                 document.getElementById('marketSelect').value = ''; | 
					
						
							|  |  |  |                 document.querySelectorAll('.market-option').forEach(option => { | 
					
						
							|  |  |  |                     option.classList.remove('selected'); | 
					
						
							|  |  |  |                 }); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 // 重置手机号 | 
					
						
							|  |  |  |                 document.getElementById('phoneNumber').value = ''; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 // 重置权限选择 | 
					
						
							|  |  |  |                 selectedPermissions.clear(); | 
					
						
							|  |  |  |                 document.querySelectorAll('.permission-checkbox').forEach(checkbox => { | 
					
						
							|  |  |  |                     checkbox.checked = false; | 
					
						
							|  |  |  |                 }); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 document.querySelectorAll('.permission-node').forEach(node => { | 
					
						
							|  |  |  |                     node.classList.remove('selected'); | 
					
						
							|  |  |  |                 }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 // 重置搜索 | 
					
						
							|  |  |  |                 document.getElementById('marketFilter').value = ''; | 
					
						
							|  |  |  |                 filterMarkets(''); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 取消分配 | 
					
						
							|  |  |  |         function cancelAssignment() { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             if (confirm('确定要取消权限分配吗?未保存的更改将丢失。')) { | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 window.history.back(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 保存权限分配 | 
					
						
							|  |  |  |         function saveAssignment() { | 
					
						
							|  |  |  |             // 验证菜市场 | 
					
						
							|  |  |  |             if (!selectedMarket) { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 alert('请选择菜市场!'); | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 验证手机号 | 
					
						
							|  |  |  |             const phoneNumber = document.getElementById('phoneNumber').value.trim(); | 
					
						
							|  |  |  |             if (!phoneNumber) { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 alert('请输入手机号!'); | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             if (!/^1[3-9]\d{9}$/.test(phoneNumber)) { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 alert('请输入正确的手机号格式!'); | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 验证权限选择 | 
					
						
							|  |  |  |             if (selectedPermissions.size === 0) { | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |                 alert('请至少选择一个权限!'); | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 构建保存数据 | 
					
						
							|  |  |  |             const assignmentData = { | 
					
						
							|  |  |  |                 market: selectedMarket, | 
					
						
							|  |  |  |                 phoneNumber: phoneNumber, | 
					
						
							|  |  |  |                 permissions: Array.from(selectedPermissions) | 
					
						
							|  |  |  |             }; | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             console.log('保存权限分配数据:', assignmentData); | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |             // 这里应该调用API保存数据 | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  |             alert('权限分配保存成功!'); | 
					
						
							| 
									
										
										
										
											2025-09-05 14:43:41 +00:00
										 |  |  |         } | 
					
						
							|  |  |  |     </script> | 
					
						
							|  |  |  | </body> | 
					
						
							| 
									
										
										
										
											2025-10-20 17:40:00 +00:00
										 |  |  | </html> |