diff --git a/src/components/FormNotFound.vue b/src/components/FormNotFound.vue
new file mode 100644
index 0000000..b46d3ef
--- /dev/null
+++ b/src/components/FormNotFound.vue
@@ -0,0 +1,7 @@
+
+
+
+ Форма недоступна
+
+
+
diff --git a/src/components/forms/ScaleQuestion.vue b/src/components/forms/ScaleQuestion.vue
index 4f69b3b..4f2e123 100644
--- a/src/components/forms/ScaleQuestion.vue
+++ b/src/components/forms/ScaleQuestion.vue
@@ -7,16 +7,18 @@
-
+
@@ -54,7 +56,7 @@ const emit = defineEmits(['input'])
const selectedValue = ref(props.value)
const range = computed(() => {
- return Array.from({ length: props.max - props.min + 1 }, (_, i) => props.min + i)
+ return Array.from({length: props.max - props.min + 1}, (_, i) => props.min + i)
})
function updateValue() {
diff --git a/src/components/forms/SelectorQuestion.vue b/src/components/forms/SelectorQuestion.vue
index bd26f1e..828a522 100644
--- a/src/components/forms/SelectorQuestion.vue
+++ b/src/components/forms/SelectorQuestion.vue
@@ -2,11 +2,11 @@
{{ option.label }}
diff --git a/src/components/forms/TextQuestion.vue b/src/components/forms/TextQuestion.vue
index 628e704..8cfb511 100644
--- a/src/components/forms/TextQuestion.vue
+++ b/src/components/forms/TextQuestion.vue
@@ -1,12 +1,12 @@
@@ -50,48 +50,48 @@ function validateTIN(value) {
if (len === 10) {
const checksum =
- ((2 * digits[0] +
- 4 * digits[1] +
- 10 * digits[2] +
- 3 * digits[3] +
- 5 * digits[4] +
- 9 * digits[5] +
- 4 * digits[6] +
- 6 * digits[7] +
- 8 * digits[8]) %
- 11) %
- 10
+ ((2 * digits[0] +
+ 4 * digits[1] +
+ 10 * digits[2] +
+ 3 * digits[3] +
+ 5 * digits[4] +
+ 9 * digits[5] +
+ 4 * digits[6] +
+ 6 * digits[7] +
+ 8 * digits[8]) %
+ 11) %
+ 10
return digits[9] === checksum
}
if (len === 12) {
const checksum1 =
- ((7 * digits[0] +
- 2 * digits[1] +
- 4 * digits[2] +
- 10 * digits[3] +
- 3 * digits[4] +
- 5 * digits[5] +
- 9 * digits[6] +
- 4 * digits[7] +
- 6 * digits[8] +
- 8 * digits[9]) %
- 11) %
- 10
+ ((7 * digits[0] +
+ 2 * digits[1] +
+ 4 * digits[2] +
+ 10 * digits[3] +
+ 3 * digits[4] +
+ 5 * digits[5] +
+ 9 * digits[6] +
+ 4 * digits[7] +
+ 6 * digits[8] +
+ 8 * digits[9]) %
+ 11) %
+ 10
const checksum2 =
- ((3 * digits[0] +
- 7 * digits[1] +
- 2 * digits[2] +
- 4 * digits[3] +
- 10 * digits[4] +
- 3 * digits[5] +
- 5 * digits[6] +
- 9 * digits[7] +
- 4 * digits[8] +
- 6 * digits[9] +
- 8 * digits[10]) %
- 11) %
- 10
+ ((3 * digits[0] +
+ 7 * digits[1] +
+ 2 * digits[2] +
+ 4 * digits[3] +
+ 10 * digits[4] +
+ 3 * digits[5] +
+ 5 * digits[6] +
+ 9 * digits[7] +
+ 4 * digits[8] +
+ 6 * digits[9] +
+ 8 * digits[10]) %
+ 11) %
+ 10
return digits[10] === checksum1 && digits[11] === checksum2
}
diff --git a/src/router/index.ts b/src/router/index.ts
index 70f2adc..bd7aa42 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -9,7 +9,7 @@ const router = createRouter({
component: () => import('@/views/Index.vue')
},
{
- path: '/form/view',
+ path: '/form/view/:id',
name: 'View Form',
component: () => import('@/views/form/View.vue')
}
diff --git a/src/utils/http.ts b/src/utils/http.ts
index 68f52c0..a91b156 100644
--- a/src/utils/http.ts
+++ b/src/utils/http.ts
@@ -1,10 +1,10 @@
export function makeAPIRequest(
- path: string = '',
- method: string = 'GET',
- query: any = {},
- body: any = {},
- useAuthorization: boolean = false
-): Promise {
+ path: string = '',
+ method: string = 'GET',
+ query: any = {},
+ body: any = {},
+ useAuthorization: boolean = false
+): Promise < any > {
return new Promise(async (resolve, _) => {
let options: any = {
method,
@@ -23,13 +23,18 @@ export function makeAPIRequest(
finalPath += '?' + new URLSearchParams(query)
}
- const r = await fetch(finalPath, options)
- .then((r) => r.json())
- .catch((err) => {
- console.error(err)
- return resolve({ error: 'CRITICAL_ERROR' })
- })
-
- return resolve(r.data)
+ await fetch(finalPath, options)
+ .then(async (r) => {
+ return resolve({
+ json: await r.json(),
+ status: r.status
+ })
+ })
+ .catch((err) => {
+ console.error(err)
+ return resolve({
+ error: 'CRITICAL_ERROR'
+ })
+ })
})
-}
+}
\ No newline at end of file
diff --git a/src/views/form/View.vue b/src/views/form/View.vue
index 5cdf03f..a2b8abc 100644
--- a/src/views/form/View.vue
+++ b/src/views/form/View.vue
@@ -4,11 +4,18 @@ import { makeAPIRequest } from '@/utils/http'
import Scale from '@/components/forms/ScaleQuestion.vue'
import TextQuestion from '@/components/forms/TextQuestion.vue'
import SelectorQuestion from '@/components/forms/SelectorQuestion.vue'
+import FormNotFound from '@/components/FormNotFound.vue'
+import { useRoute } from 'vue-router'
+
+const route = useRoute()
const data = ref({})
const currentPageNumber = ref(0)
+const pageCount = ref(0)
const currentPage = ref({})
const answers = ref([])
+const isFormNotFound = ref(true)
+const isSent = ref(false)
async function prepareNewPage() {
currentPage.value = data.value.pages[currentPageNumber.value]
@@ -39,62 +46,78 @@ async function submitForm() {
await prepareNewPage()
} else {
await makeAPIRequest(
- '/answer/create',
- 'POST',
- { form_id: 1 },
- {
- values: Array.from(Object.keys(answers.value).map((val) => answers.value[val]))
- }
+ '/answer/create',
+ 'POST',
+ { form_id: Number(route.params.id) },
+ {
+ values: Array.from(Object.keys(answers.value).map((val) => answers.value[val]))
+ }
)
+ isSent.value = true
}
}
}
onMounted(async () => {
- data.value = await makeAPIRequest('/form/get', 'GET', { id: 1 })
+ const formResponse = await makeAPIRequest('/form/get', 'GET', { id: Number(route.params.id) })
+ if (!formResponse.json || formResponse.status !== 200) {
+ return
+ }
+ data.value = formResponse.json.data
+ pageCount.value = data.value.pages.length
+ isFormNotFound.value = false
await prepareNewPage()
})
- {{ data.name }}
- {{ currentPage.text }}
+
+
+
Форма была успешно отправлена.
+
+
{{ data.name }}
+
{{ currentPage.text }}
-
+