diff --git a/package.json b/package.json index bf2f97f..df3f268 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "@phosphor-icons/vue": "^2.2.1", "pinia": "^2.1.7", "vue": "^3.4.29", - "vue-router": "^4.3.3" + "vue-router": "^4.3.3", + "vuedraggable": "^4.1.0" }, "devDependencies": { "@tsconfig/node20": "^20.1.4", diff --git a/src/components/edit/QuestionEdit.vue b/src/components/edit/QuestionEdit.vue index 224ef5c..18e89de 100644 --- a/src/components/edit/QuestionEdit.vue +++ b/src/components/edit/QuestionEdit.vue @@ -2,29 +2,51 @@ import { PhX, PhXCircle } from '@phosphor-icons/vue' import { onMounted, ref } from 'vue' +const props = defineProps({ + data: { + type: Object, + default: { + label: 'Пустой Вопрос', + description: null, + question_type: 1, + required: false, + validator: null, + min_length: null, + max_length: null, + options: [], + min_values: null, + max_values: null, + min_value: 1, + max_value: 5, + min_label: null, + max_label: null + } + } +}) const emit = defineEmits(['input']) const data = ref({}) onMounted(() => { - data.value = { - label: null, - description: null, - question_type: 1, - required: false, - validator: null, - min_length: null, - max_length: null - } + data.value = { ...props.data } }) async function submitForm() { - if (data.value.question_type === 1 && data.value.validator === null) { + if (data.value.question_type === 1) { if (data.value.min_length !== null && data.value.min_length < 0) return if (data.value.max_length !== null) { if (data.value.max_length <= 0) return if (data.value.min_length !== null && data.value.max_length < data.value.min_length) return } } + if (data.value.question_type === 2) { + if (data.value.options.length < 1) return + if (data.value.min_values && data.value.min_values < 1) return + if (data.value.max_values && data.value.min_values > data.value.max_values) return + } + if (data.value.question_type === 3) { + if (!(data.value.min_value in [0, 1])) return + if (data.value.max_value < 2 || data.value.max_value > 10) return + } emit('input', data.value) } @@ -79,6 +101,61 @@ async function submitForm() { +
+
+
+

Варианты

+
    +
  • + + X +
  • +
  • + Добавить вариант +
  • +
+
+
+

Минимум значений

+ +
+
+

Максимум значений

+ +
+
+
+
+
+
+
+

+ От + + до + +

+
+
+
+

{{ data.min_value }}

+ +
+
+

{{ data.max_value }}

+ +
+
+

Обязательный?

@@ -87,7 +164,7 @@ async function submitForm() {
- + diff --git a/src/views/form/Create.vue b/src/views/form/Create.vue index f5ecdaa..9e8ee3c 100644 --- a/src/views/form/Create.vue +++ b/src/views/form/Create.vue @@ -1,27 +1,53 @@ - +