diff --git a/public/zap_logo.png b/public/zap_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..75da264e2701e7069ab09b24c2f51d8c53d70e8a Binary files /dev/null and b/public/zap_logo.png differ diff --git a/src/components/ZCLToolbar.vue b/src/components/ZCLToolbar.vue index aec91d3c50a908653bc2a465db41993e47a3c7a4..598406d7c03f009af91af96024a0347fe44a9a50 100644 --- a/src/components/ZCLToolbar.vue +++ b/src/components/ZCLToolbar.vue @@ -206,7 +206,7 @@ export default { '.svg' ) } else { - return '' + return '/zap_logo.png' } }, }, @@ -267,7 +267,7 @@ export default { }, }, mounted() { - if(this.$onWebSocket) { + if (this.$onWebSocket) { this.$onWebSocket( dbEnum.wsCategory.notificationCount, (notificationCount) => { diff --git a/src/css/quasar.variables.scss b/src/css/quasar.variables.scss index 21bbf61adc05bb2ab1d4b6f07150303ea2b2ad12..9c4c3faef3912bdda1c7913f54eb9314b64e0e63 100644 --- a/src/css/quasar.variables.scss +++ b/src/css/quasar.variables.scss @@ -29,7 +29,7 @@ $warning: #f2c037; background: transparent; } -.body--light{ +.body--light { .bg-glass { background-color: rgba(238, 238, 238, 0.61); -webkit-backdrop-filter: blur(7px); @@ -209,8 +209,8 @@ $warning: #f2c037; } } -.body--dark{ - color:#cfcfcf !important; +.body--dark { + color: #cfcfcf !important; .bg-glass { background-color: rgba(25, 25, 25, 0.61); -webkit-backdrop-filter: blur(7px); @@ -242,7 +242,8 @@ $warning: #f2c037; .q-item { transition: all 0.1s ease-out; min-height: auto; - background: linear-gradient(var(--q-dark), var(--q-dark)) padding-box, + background: linear-gradient(var(--q-dark), var(--q-dark)) + padding-box, linear-gradient( 90deg, rgba(78, 143, 242, 1), @@ -256,14 +257,14 @@ $warning: #f2c037; transition: all 0.1s ease-in-out; width: fit-content; font-weight: 500; - color: #cfcfcf;; + color: #cfcfcf; } } } } .q-expansion-item__content { transition: all 0.1s ease-in !important; - background: linear-gradient(var(--q-dark),var(--q-dark)) padding-box, + background: linear-gradient(var(--q-dark), var(--q-dark)) padding-box, linear-gradient(90deg, rgba(78, 143, 242, 1), rgba(118, 246, 207, 1)) border-box !important; border: 2px solid white; @@ -284,7 +285,7 @@ $warning: #f2c037; min-height: auto; padding-bottom: 0; border: none; - background: transparent !important; + background: transparent !important; border-radius: 14px; padding: 7px 14px; &__section { @@ -326,8 +327,9 @@ $warning: #f2c037; .q-item { transition: all 0.1s ease-out; min-height: auto; - background: linear-gradient(var(--q-dark), var(--q-dark)) padding-box, - linear-gradient(90deg,var(--q-primary), rgba(0, 0, 0, 1)) + background: linear-gradient(var(--q-dark), var(--q-dark)) + padding-box, + linear-gradient(90deg, var(--q-primary), rgba(0, 0, 0, 1)) border-box !important; border: 2px solid transparent; border-radius: 14px; @@ -343,7 +345,7 @@ $warning: #f2c037; } .q-expansion-item__content { transition: all 0.1s ease-in !important; - background: linear-gradient(#272821,#272821) padding-box, + background: linear-gradient(#272821, #272821) padding-box, linear-gradient(90deg, var(--q-primary), rgba(0, 0, 0, 1)) border-box !important; border: 2px solid white; @@ -375,7 +377,7 @@ $warning: #f2c037; margin-bottom: -1px; margin-left: 3px; background: var(--q-primary); - color: #cfcfcf;; + color: #cfcfcf; padding: 2px 16px; width: fit-content; border-radius: 5px 5px 0 0; @@ -491,16 +493,19 @@ h2 { } } - .logo { - width: 100%; + width: auto; height: auto; + max-height: 40px; max-width: 150px; } :root { --q-transition-duration: 1s; } +.w-fit-content { + width: fit-content; +} @keyframes fadeInAnimation { 0% { @@ -510,20 +515,18 @@ h2 { opacity: 1; } } -.text-h4{ +.text-h4 { font-size: 2rem; } -.q-rounded-borders-xl{ +.q-rounded-borders-xl { border-radius: 20px; } -.q-btn--rounded{ +.q-btn--rounded { border-radius: 12px; } -.zigbeee{ - --q-color-primary: #C10015; - --q-primary: #C10015; - - +.zigbeee { + --q-color-primary: #c10015; + --q-primary: #c10015; } :root { --q-transition-duration: 1s; diff --git a/src/pages/ZapConfig.vue b/src/pages/ZapConfig.vue index 8f64078443d85b7ee552c57a595ee52380f52c66..f9b085578739a27edaffb52d489a1cbdd15cf982 100644 --- a/src/pages/ZapConfig.vue +++ b/src/pages/ZapConfig.vue @@ -1,9 +1,5 @@ <template> - <q-page - padding - class="row justify-center full-height" - :class="{ zigbee: getuitheme === 'zigbee' }" - > + <q-page padding class="row justify-center full-height" :class="getuitheme"> <Transition name="slide-up" mode="out-in" appear> <q-card flat class="q-mt-lg q-rounded-borders-xl bg-glass col-10 column"> <q-scroll-area class="col q-px-xl"> @@ -11,16 +7,10 @@ <Transition name="slide-up" mode="out-in" appear> <div class="column"> <img - v-if="getuitheme === 'zigbee'" + v-if="getLogo" height="40" - class="mx-auto q-my-lg block" - src="/zigbee_logo.svg" - /> - <img - v-else - height="40" - class="mx-auto q-my-lg block" - src="/matter_logo.svg" + class="q-mx-auto q-my-lg block w-fit-content" + :src="getLogo" /> </div> </Transition> @@ -99,36 +89,57 @@ </q-td> <q-td key="status" :props="props"> <div v-if="props.row.warning"> - <q-icon class="cursor-pointer" name="warning" color="orange" size="2.5em" @click="propertyDataDialog[props.row.id] = true"> + <q-icon + class="cursor-pointer" + name="warning" + color="orange" + size="2.5em" + @click="propertyDataDialog[props.row.id] = true" + > </q-icon> - <q-dialog v-model="propertyDataDialog[props.row.id]" persistent> + <q-dialog + v-model="propertyDataDialog[props.row.id]" + persistent + > <q-card> <q-card-section> - <div class="row items-center"> - <div class="col-1"> - <q-icon name="warning" color="orange" size="2em"/> - </div> - <div class="text-h6 col">{{ props.row.description }} </div> - <div class="col-1 text-right"> + <div class="row items-center"> + <div class="col-1"> + <q-icon + name="warning" + color="orange" + size="2em" + /> + </div> + <div class="text-h6 col"> + {{ props.row.description }} + </div> + <div class="col-1 text-right"> <q-btn dense flat icon="close" v-close-popup> <q-tooltip>Close</q-tooltip> </q-btn> - </div> </div> - <ul> - <li - v-for="(notification, index) in props.row.notifications" - :key="index" - style="margin-bottom: 20px" - > - {{ notification }} - </li> - </ul> + </div> + <ul> + <li + v-for="(notification, index) in props.row + .notifications" + :key="index" + style="margin-bottom: 20px" + > + {{ notification }} + </li> + </ul> </q-card-section> </q-card> </q-dialog> </div> - <q-icon v-else name="check_circle" color="green" size="2em" /> + <q-icon + v-else + name="check_circle" + color="green" + size="2em" + /> </q-td> </q-tr> </template> @@ -180,13 +191,23 @@ </q-td> <q-td key="status" :props="props"> <div v-if="props.row.warning"> - <q-icon name="warning" color="orange" size="2.5em" @click="genDataDialog[props.row.id] = true"> + <q-icon + name="warning" + color="orange" + size="2.5em" + @click="genDataDialog[props.row.id] = true" + > </q-icon> - <q-dialog v-model="genDataDialog[props.row.id]" persistent> + <q-dialog + v-model="genDataDialog[props.row.id]" + persistent + > <q-card> <q-bar> - <q-icon name="warning" color="orange"/> - <div class="text-h6">{{ props.row.description }}</div> + <q-icon name="warning" color="orange" /> + <div class="text-h6"> + {{ props.row.description }} + </div> <q-space /> <q-btn dense flat icon="close" v-close-popup> <q-tooltip>Close</q-tooltip> @@ -194,11 +215,12 @@ </q-bar> <q-card-section> <ul> - <li - v-for="(notification, index) in props.row.notifications" + <li + v-for="(notification, index) in props.row + .notifications" :key="index" style="margin-bottom: 20px" - > + > {{ notification }} </li> </ul> @@ -206,7 +228,12 @@ </q-card> </q-dialog> </div> - <q-icon v-else name="check_circle" color="green" size="2em" /> + <q-icon + v-else + name="check_circle" + color="green" + size="2em" + /> </q-td> </q-tr> </template> @@ -308,8 +335,8 @@ const generateNewSessionCol = [ name: 'status', label: 'status', align: 'left', - style: 'width: 15%' - } + style: 'width: 15%', + }, ] const loadPreSessionCol = [ { @@ -377,6 +404,21 @@ export default { getuitheme: function () { return this.selectedZclPropertiesData?.category }, + getLogo: { + get() { + if (this.selectedZclPropertiesData?.category) { + return ( + '/' + + this.selectedZclPropertiesData?.category + + '_logo' + + (this.$q.dark.isActive ? '_white' : '') + + '.svg' + ) + } else { + return '/zap_logo.png' + } + }, + }, }, watch: { @@ -474,33 +516,31 @@ export default { id: item.sessionId, }) }) - + this.$serverGet(restApi.uri.packageNotification) .then((resp) => { let messageMap = {} resp.data.forEach((row) => { - if(!(row.packageId in messageMap)) { + if (!(row.packageId in messageMap)) { messageMap[row.packageId] = [] } messageMap[row.packageId].push(row.message) }) - this.zclPropertiesRow.forEach((row)=>{ - if(row.id in messageMap) { + this.zclPropertiesRow.forEach((row) => { + if (row.id in messageMap) { row.warning = true row.notifications = messageMap[row.id] - } - else { + } else { row.warning = false row.notifications = [] } this.propertyDataDialog[row.id] = false }) - this.zclGenRow.forEach((row, index)=>{ - if(row.id in messageMap) { + this.zclGenRow.forEach((row, index) => { + if (row.id in messageMap) { row.warning = true row.notifications = messageMap[row.id] - } - else { + } else { row.warning = false row.notifications = [] }