initial commit
This commit is contained in:
128
src/stores/questionnaires.js
Normal file
128
src/stores/questionnaires.js
Normal file
@@ -0,0 +1,128 @@
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
// Моковая анкета для примера
|
||||
const mockDetailedQuestionnaire = {
|
||||
id: 1,
|
||||
name: 'Основная анкета',
|
||||
description: 'Полные данные для IT-специальностей',
|
||||
createdAt: '2026-03-15',
|
||||
updatedAt: '2026-04-01',
|
||||
fields: {
|
||||
first_name: 'Иван',
|
||||
last_name: 'Иванов',
|
||||
patronymic: 'Иванович',
|
||||
age: '30',
|
||||
title: 'Ведущий разработчик',
|
||||
salary: '300000',
|
||||
worktime: 'Полный день',
|
||||
phone: '+7 (999) 123-45-67',
|
||||
email: 'ivan@example.com',
|
||||
city: 'Москва',
|
||||
about: 'Опытный full-stack разработчик с фокусом на Vue и Python.',
|
||||
experience: '8 лет коммерческой разработки...',
|
||||
education: 'МГУ, факультет ВМК, 2015',
|
||||
courses: 'Vue Advanced, Python Pro',
|
||||
skills: 'Vue, React, Python, Django, PostgreSQL',
|
||||
languages: 'Русский (родной), English (B2)',
|
||||
projects: 'Разработка CRM-системы, мобильное приложение для банка',
|
||||
},
|
||||
}
|
||||
|
||||
const mockQuestionnaires = [
|
||||
{
|
||||
id: 1,
|
||||
name: 'Основная анкета',
|
||||
description: 'Полные данные для IT-специальностей',
|
||||
createdAt: '2026-03-15',
|
||||
updatedAt: '2026-04-01',
|
||||
fieldsCount: 12,
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: 'Анкета для менеджмента',
|
||||
description: 'Акцент на управленческие навыки',
|
||||
createdAt: '2026-03-20',
|
||||
updatedAt: '2026-03-25',
|
||||
fieldsCount: 10,
|
||||
},
|
||||
]
|
||||
|
||||
export const useQuestionnairesStore = defineStore('questionnaires', {
|
||||
state: () => ({
|
||||
questionnaires: [...mockQuestionnaires],
|
||||
// Детальные данные анкет храним отдельно (можно объединить, но для простоты отдельный объект)
|
||||
details: {
|
||||
1: { ...mockDetailedQuestionnaire.fields },
|
||||
},
|
||||
nextId: 3,
|
||||
}),
|
||||
|
||||
actions: {
|
||||
// Получить детальные поля анкеты по id
|
||||
getQuestionnaireDetails(id) {
|
||||
return this.details[id] || this.createEmptyFields()
|
||||
},
|
||||
|
||||
// Создать или обновить анкету
|
||||
saveQuestionnaire(id, data) {
|
||||
const { name, description, fields } = data
|
||||
const existing = this.questionnaires.find(q => q.id === id)
|
||||
|
||||
if (existing) {
|
||||
// Обновление существующей
|
||||
existing.name = name
|
||||
existing.description = description
|
||||
existing.updatedAt = new Date().toISOString().split('T')[0]
|
||||
existing.fieldsCount = Object.keys(fields).filter(k => fields[k]).length
|
||||
this.details[id] = { ...fields }
|
||||
} else {
|
||||
// Создание новой
|
||||
const newId = this.nextId++
|
||||
const newQuestionnaire = {
|
||||
id: newId,
|
||||
name,
|
||||
description,
|
||||
createdAt: new Date().toISOString().split('T')[0],
|
||||
updatedAt: new Date().toISOString().split('T')[0],
|
||||
fieldsCount: Object.keys(fields).filter(k => fields[k]).length,
|
||||
}
|
||||
this.questionnaires.push(newQuestionnaire)
|
||||
this.details[newId] = { ...fields }
|
||||
return newId
|
||||
}
|
||||
return id
|
||||
},
|
||||
|
||||
createEmptyFields() {
|
||||
return {
|
||||
first_name: '',
|
||||
last_name: '',
|
||||
patronymic: '',
|
||||
age: '',
|
||||
title: '',
|
||||
salary: '',
|
||||
worktime: '',
|
||||
phone: '',
|
||||
email: '',
|
||||
city: '',
|
||||
about: '',
|
||||
experience: '',
|
||||
education: '',
|
||||
courses: '',
|
||||
skills: '',
|
||||
languages: '',
|
||||
projects: '',
|
||||
}
|
||||
},
|
||||
|
||||
deleteQuestionnaire(id) {
|
||||
this.questionnaires = this.questionnaires.filter(q => q.id !== id)
|
||||
delete this.details[id]
|
||||
},
|
||||
},
|
||||
|
||||
persist: {
|
||||
key: 'questionnaires-storage',
|
||||
storage: localStorage,
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user