You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							160 lines
						
					
					
						
							6.5 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							160 lines
						
					
					
						
							6.5 KiB
						
					
					
				| package app | |
| 
 | |
| import ( | |
|     "github.com/seaweedfs/seaweedfs/weed/admin/maintenance" | |
| ) | |
| 
 | |
| templ TaskConfig(data *maintenance.TaskConfigData) { | |
|     <div class="container-fluid"> | |
|         <div class="row mb-4"> | |
|             <div class="col-12"> | |
|                 <div class="d-flex justify-content-between align-items-center"> | |
|                     <h2 class="mb-0"> | |
|                         <i class={data.TaskIcon + " me-2"}></i> | |
|                         {data.TaskName} Configuration | |
|                     </h2> | |
|                     <div class="btn-group"> | |
|                         <a href="/maintenance/config" class="btn btn-outline-secondary"> | |
|                             <i class="fas fa-arrow-left me-1"></i> | |
|                             Back to Configuration | |
|                         </a> | |
|                         <a href="/maintenance" class="btn btn-outline-primary"> | |
|                             <i class="fas fa-list me-1"></i> | |
|                             View Queue | |
|                         </a> | |
|                     </div> | |
|                 </div> | |
|             </div> | |
|         </div> | |
| 
 | |
|         <div class="row"> | |
|             <div class="col-12"> | |
|                 <div class="card"> | |
|                     <div class="card-header"> | |
|                         <h5 class="mb-0"> | |
|                             <i class={data.TaskIcon + " me-2"}></i> | |
|                             {data.TaskName} Settings | |
|                         </h5> | |
|                     </div> | |
|                     <div class="card-body"> | |
|                         <p class="text-muted mb-4">{data.Description}</p> | |
|                          | |
|                         <!-- Task-specific configuration form --> | |
|                         <form method="POST"> | |
|                             <div class="task-config-form"> | |
|                                 @templ.Raw(string(data.ConfigFormHTML)) | |
|                             </div> | |
|                              | |
|                             <hr class="my-4"> | |
|                              | |
|                             <div class="d-flex gap-2"> | |
|                                 <button type="submit" class="btn btn-primary"> | |
|                                     <i class="fas fa-save me-1"></i> | |
|                                     Save Configuration | |
|                                 </button> | |
|                                 <button type="button" class="btn btn-secondary" onclick="resetForm()"> | |
|                                     <i class="fas fa-undo me-1"></i> | |
|                                     Reset to Defaults | |
|                                 </button> | |
|                                 <a href="/maintenance/config" class="btn btn-outline-secondary"> | |
|                                     <i class="fas fa-times me-1"></i> | |
|                                     Cancel | |
|                                 </a> | |
|                             </div> | |
|                         </form> | |
|                     </div> | |
|                 </div> | |
|             </div> | |
|         </div> | |
| 
 | |
|         <!-- Task Information --> | |
|         <div class="row mt-4"> | |
|             <div class="col-12"> | |
|                 <div class="card"> | |
|                     <div class="card-header"> | |
|                         <h5 class="mb-0"> | |
|                             <i class="fas fa-info-circle me-2"></i> | |
|                             Task Information | |
|                         </h5> | |
|                     </div> | |
|                     <div class="card-body"> | |
|                         <div class="row"> | |
|                             <div class="col-md-6"> | |
|                                 <h6 class="text-muted">Task Type</h6> | |
|                                 <p class="mb-3"> | |
|                                     <span class="badge bg-secondary">{string(data.TaskType)}</span> | |
|                                 </p> | |
|                             </div> | |
|                             <div class="col-md-6"> | |
|                                 <h6 class="text-muted">Display Name</h6> | |
|                                 <p class="mb-3">{data.TaskName}</p> | |
|                             </div> | |
|                         </div> | |
|                         <div class="row"> | |
|                             <div class="col-12"> | |
|                                 <h6 class="text-muted">Description</h6> | |
|                                 <p class="mb-0">{data.Description}</p> | |
|                             </div> | |
|                         </div> | |
|                     </div> | |
|                 </div> | |
|             </div> | |
|         </div> | |
|     </div> | |
| 
 | |
|     <script> | |
|         function resetForm() { | |
|             if (confirm('Are you sure you want to reset all settings to their default values?')) { | |
|                 // Find all form inputs and reset them | |
|                 const form = document.querySelector('form'); | |
|                 if (form) { | |
|                     form.reset(); | |
|                 } | |
|             } | |
|         } | |
| 
 | |
|         // Auto-save form data to localStorage for recovery | |
|         document.addEventListener('DOMContentLoaded', function() { | |
|             const form = document.querySelector('form'); | |
|             if (form) { | |
|                 const taskType = '{string(data.TaskType)}'; | |
|                 const storageKey = 'taskConfig_' + taskType; | |
| 
 | |
|                 // Load saved data | |
|                 const savedData = localStorage.getItem(storageKey); | |
|                 if (savedData) { | |
|                     try { | |
|                         const data = JSON.parse(savedData); | |
|                         Object.keys(data).forEach(key => { | |
|                             const input = form.querySelector(`[name="${key}"]`); | |
|                             if (input) { | |
|                                 if (input.type === 'checkbox') { | |
|                                     input.checked = data[key]; | |
|                                 } else { | |
|                                     input.value = data[key]; | |
|                                 } | |
|                             } | |
|                         }); | |
|                     } catch (e) { | |
|                         console.warn('Failed to load saved configuration:', e); | |
|                     } | |
|                 } | |
| 
 | |
|                 // Save data on input change | |
|                 form.addEventListener('input', function() { | |
|                     const formData = new FormData(form); | |
|                     const data = {}; | |
|                     for (let [key, value] of formData.entries()) { | |
|                         data[key] = value; | |
|                     } | |
|                     localStorage.setItem(storageKey, JSON.stringify(data)); | |
|                 }); | |
| 
 | |
|                 // Clear saved data on successful submit | |
|                 form.addEventListener('submit', function() { | |
|                     localStorage.removeItem(storageKey); | |
|                 }); | |
|             } | |
|         }); | |
|     </script> | |
| }  |