128 lines
3.9 KiB
JavaScript
128 lines
3.9 KiB
JavaScript
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,
|
||
},
|
||
}) |