create qr code progress
This commit is contained in:
@@ -8,14 +8,20 @@
|
|||||||
<InputText id="name" v-model="name" class="w-full" placeholder="Введите название" />
|
<InputText id="name" v-model="name" class="w-full" placeholder="Введите название" />
|
||||||
<p v-if="!name" class="text-red-500 text-sm mt-1">Название обязательно.</p>
|
<p v-if="!name" class="text-red-500 text-sm mt-1">Название обязательно.</p>
|
||||||
|
|
||||||
<Button type="submit" :label="buttonLabel" class="p-button-md mt-4 mb-4" :disabled="!name" />
|
<Button
|
||||||
|
type="submit"
|
||||||
|
:label="buttonLabel"
|
||||||
|
class="p-button-md mt-4 mb-4"
|
||||||
|
:loading="isPending"
|
||||||
|
:disabled="!name || isPending"
|
||||||
|
/>
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { type QRCodeDocument } from '@hereconnect/types'
|
import { type QRCodeDocument } from '@hereconnect/types'
|
||||||
defineProps<{ buttonLabel: string }>()
|
defineProps<{ buttonLabel: string; isPending: boolean }>()
|
||||||
const name = defineModel<QRCodeDocument['name']>('name')
|
const name = defineModel<QRCodeDocument['name']>('name')
|
||||||
const emit = defineEmits(['nextStep'])
|
const emit = defineEmits(['nextStep'])
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -35,12 +35,13 @@
|
|||||||
<CreateSummarySection
|
<CreateSummarySection
|
||||||
v-model:name="name"
|
v-model:name="name"
|
||||||
buttonLabel="Создать QR‑код"
|
buttonLabel="Создать QR‑код"
|
||||||
|
:isPending
|
||||||
@nextStep="createQrCode"
|
@nextStep="createQrCode"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</CreateSectionManager>
|
</CreateSectionManager>
|
||||||
|
|
||||||
<p v-if="error" class="text-red-500 mt-4">Ошибка создания QR‑кода: {{ error }}</p>
|
<p v-if="isError" class="text-red-500 mt-4">Ошибка создания QR‑кода: {{ error }}</p>
|
||||||
|
|
||||||
<div class="h-[30dvh] md:h-[10dvh] overflow-hidden"></div>
|
<div class="h-[30dvh] md:h-[10dvh] overflow-hidden"></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -54,18 +55,24 @@ import { useRouter } from 'vue-router'
|
|||||||
import { createQrCodeDocument } from '@/api/qrCode'
|
import { createQrCodeDocument } from '@/api/qrCode'
|
||||||
import type { QRCodeDocument } from '@hereconnect/types'
|
import type { QRCodeDocument } from '@hereconnect/types'
|
||||||
import { ROUTE_NAMES } from '@/constants/routes'
|
import { ROUTE_NAMES } from '@/constants/routes'
|
||||||
|
import { useMutation } from '@tanstack/vue-query'
|
||||||
|
|
||||||
const placement = ref<null | QRCodeDocument['placement']>(null)
|
const placement = ref<null | QRCodeDocument['placement']>(null)
|
||||||
const selectedActions = ref<QRCodeDocument['actions']>([])
|
const selectedActions = ref<QRCodeDocument['actions']>([])
|
||||||
const messageDeliveryMethod = ref<null | QRCodeDocument['messageDeliveryMethod']>(null)
|
const messageDeliveryMethod = ref<null | QRCodeDocument['messageDeliveryMethod']>(null)
|
||||||
const messages = ref<Exclude<QRCodeDocument['predefinedMessages'], undefined>>([])
|
const messages = ref<Exclude<QRCodeDocument['predefinedMessages'], undefined>>([])
|
||||||
const name = ref<QRCodeDocument['name']>('')
|
const name = ref<QRCodeDocument['name']>('')
|
||||||
const error = ref<string | null>(null)
|
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
async function createQrCode() {
|
const {
|
||||||
try {
|
isPending,
|
||||||
|
isError,
|
||||||
|
error,
|
||||||
|
mutate: createQrCode,
|
||||||
|
} = useMutation({
|
||||||
|
mutationKey: ['createQrCode'],
|
||||||
|
mutationFn: async () => {
|
||||||
const qrCodeDocument = await createQrCodeDocument({
|
const qrCodeDocument = await createQrCodeDocument({
|
||||||
name: name.value,
|
name: name.value,
|
||||||
placement: placement.value!,
|
placement: placement.value!,
|
||||||
@@ -74,13 +81,10 @@ async function createQrCode() {
|
|||||||
predefinedMessages: messages.value.length > 0 ? messages.value : undefined,
|
predefinedMessages: messages.value.length > 0 ? messages.value : undefined,
|
||||||
})
|
})
|
||||||
|
|
||||||
error.value = null
|
|
||||||
await router.push({
|
await router.push({
|
||||||
name: ROUTE_NAMES.MANAGE_QR_CODE_READY,
|
name: ROUTE_NAMES.MANAGE_QR_CODE_READY,
|
||||||
params: { qr_code_uri: qrCodeDocument.uri },
|
params: { qr_code_uri: qrCodeDocument.uri },
|
||||||
})
|
})
|
||||||
} catch (err) {
|
},
|
||||||
error.value = (err as Error).message || 'Неизвестная ошибка'
|
})
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user