Skip to content

Commit 5c800c8

Browse files
add qr code generator for elector token
1 parent 5a54343 commit 5c800c8

File tree

4 files changed

+299
-1
lines changed

4 files changed

+299
-1
lines changed

app/pages/electricity/index.vue

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,18 @@
4242
class="flex-1 px-4 py-2 bg-fill-primary border border-separator-primary rounded-lg text-label-primary text-sm font-mono" />
4343
<MainButton @click="copyToken" label="Copy" button-style="primary" icon="mdi:content-copy" />
4444
</div>
45+
<div v-if="qrImageUrl" class="flex flex-col items-center gap-2">
46+
<img :src="qrImageUrl" alt="Tracker token QR"
47+
class="rounded-lg border border-separator-primary bg-fill-primary p-2" />
48+
<p class="text-xs text-label-secondary">Scan this QR with your phone to transfer the token</p>
49+
</div>
4550
</div>
4651
</div>
4752
</div>
4853
</template>
4954

5055
<script setup lang="ts">
51-
import { definePageMeta, useFetch, ref } from '#imports'
56+
import { definePageMeta, useFetch, ref, watch } from '#imports'
5257
import type { ElectricityTracker } from '~~/shared/types/electricity_device'
5358
import MainButton from '~/components/MainButton.vue'
5459
@@ -64,6 +69,22 @@ const newTrackerName = ref('')
6469
const isAdding = ref(false)
6570
const showTokenDialog = ref(false)
6671
const newTrackerToken = ref('')
72+
const qrImageUrl = ref('')
73+
74+
watch(newTrackerToken, async (token) => {
75+
if (!process.client) return
76+
if (!token) {
77+
qrImageUrl.value = ''
78+
return
79+
}
80+
try {
81+
const { toDataURL } = await import('qrcode')
82+
qrImageUrl.value = await toDataURL(token, { width: 220, margin: 1 })
83+
} catch (e) {
84+
console.error('Failed to generate QR code', e)
85+
qrImageUrl.value = ''
86+
}
87+
})
6788
6889
const addTracker = async () => {
6990
if (!newTrackerName.value.trim() || isAdding.value) return

global.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
declare module 'qrcode';
2+
3+

package-lock.json

Lines changed: 273 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"jsonwebtoken": "^9.0.2",
2121
"mongodb": "^6.18.0",
2222
"nuxt": "^4.0.3",
23+
"qrcode": "^1.5.4",
2324
"vue": "^3.5.18",
2425
"vue-router": "^4.5.1",
2526
"winston": "^3.17.0",

0 commit comments

Comments
 (0)