Add settings page and store with UI customization options
- Implement SettingsView with appearance, data, notifications, and advanced tabs - Add settings store (Pinia) for theme, navigation, notifications, and app config - Integrate settings store into HomeView and BottomNav for theme and navigation mode - Add room management modal and store methods for adding/removing rooms - Update SensorManagementView with room management button and modal - Support exporting/importing settings and resetting to defaults - Enable dark mode via Tailwind config
This commit is contained in:
@@ -425,6 +425,68 @@ export const useEnergyStore = defineStore('energy', () => {
|
||||
return Array.from(sensorDevices.values()).filter(sensor => sensor.type === type)
|
||||
}
|
||||
|
||||
// Room management functions
|
||||
function addRoom(roomName: string): boolean {
|
||||
if (!roomName.trim()) return false
|
||||
|
||||
// Check if room already exists
|
||||
if (availableRooms.value.includes(roomName.trim())) {
|
||||
return false
|
||||
}
|
||||
|
||||
// Add room to available rooms list
|
||||
availableRooms.value.push(roomName.trim())
|
||||
availableRooms.value.sort() // Keep rooms sorted alphabetically
|
||||
|
||||
console.log(`Added new room: ${roomName}`)
|
||||
return true
|
||||
}
|
||||
|
||||
function removeRoom(roomName: string): boolean {
|
||||
const index = availableRooms.value.indexOf(roomName)
|
||||
if (index === -1) return false
|
||||
|
||||
// Check if any sensors are assigned to this room
|
||||
const sensorsInRoom = Array.from(sensorDevices.values()).filter(sensor => sensor.room === roomName)
|
||||
if (sensorsInRoom.length > 0) {
|
||||
// Reassign sensors to 'Unassigned'
|
||||
sensorsInRoom.forEach(sensor => {
|
||||
sensor.room = ''
|
||||
sensorDevices.set(sensor.id, { ...sensor })
|
||||
})
|
||||
}
|
||||
|
||||
// Remove room data
|
||||
roomsData.delete(roomName)
|
||||
|
||||
// Remove from available rooms
|
||||
availableRooms.value.splice(index, 1)
|
||||
|
||||
console.log(`Removed room: ${roomName}`)
|
||||
return true
|
||||
}
|
||||
|
||||
function getRoomStats(roomName: string) {
|
||||
const sensorsInRoom = getSensorsByRoom(roomName)
|
||||
const roomMetrics = roomsData.get(roomName)
|
||||
|
||||
return {
|
||||
sensorCount: sensorsInRoom.length,
|
||||
sensorTypes: [...new Set(sensorsInRoom.map(s => s.type))],
|
||||
hasMetrics: !!roomMetrics,
|
||||
energyConsumption: roomMetrics?.energy.current || 0,
|
||||
co2Level: roomMetrics?.co2.current || 0,
|
||||
lastUpdated: roomMetrics?.lastUpdated || null
|
||||
}
|
||||
}
|
||||
|
||||
function getAllRoomsWithStats() {
|
||||
return availableRooms.value.map(room => ({
|
||||
name: room,
|
||||
...getRoomStats(room)
|
||||
}))
|
||||
}
|
||||
|
||||
// Initialize mock sensors on store creation
|
||||
initializeMockSensors()
|
||||
|
||||
@@ -443,6 +505,10 @@ export const useEnergyStore = defineStore('energy', () => {
|
||||
updateSensorRoom,
|
||||
executeSensorAction,
|
||||
getSensorsByRoom,
|
||||
getSensorsByType
|
||||
getSensorsByType,
|
||||
addRoom,
|
||||
removeRoom,
|
||||
getRoomStats,
|
||||
getAllRoomsWithStats
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user