Files
ylst-h5/src/stores/Questions/useQuestionStore.ts
陈昱达 9afd82d9d7 fix(Survey): 修复预览页面选项数限制逻辑
-增加对最小选择数和最大选择数的非空判断- 添加日志输出,便于调试
2025-05-28 14:35:51 +08:00

93 lines
2.7 KiB
TypeScript

import { defineStore } from 'pinia';
import { ref, computed, watch } from 'vue';
import { AnswerApi } from '@/views/Survey/views/Preview/js/api';
import { getLanguage } from '@/views/Survey/views/Preview/js/language';
export const useQuestionStore = defineStore('questionStore', () => {
const currentSn = ref<string>('');
const questionsData = ref();
// 是否是模板模式
const isTemplate = ref<boolean>(true);
// styleInfo 主题样式
const styleInfo = computed(() => questionsData.value?.survey?.style || {});
// 当前页数
const page = ref(1);
// 分页
const pages = computed(() => questionsData.value?.answer?.pages || []);
// 加载
const loading = ref(false);
// 上一页时的加载状态
const prevLoading = ref(false);
// 分页计时器
const localPageTimer = ref({});
// 当前页问卷
const questions = computed(() => {
if (isTemplate.value) return questionsData.value?.questions;
const currentPages = pages.value[page.value - 1] || [];
return (questionsData.value?.questions || []).filter((quetion: any) =>
currentPages.find((index: any) => quetion.question_index === index)
);
});
// 答题之后的字段,应该是判断获取对应的字体
const translatedText = computed(() => questionsData.value.language || {});
// 是否显示分页器
const showPage = computed(() => {
return ![102, 104, 105, 201].includes(questions.value[0]?.question_type);
});
// 作用未知, 应该是 language
const l = ref({});
// 主题颜色
const themeColor = ref({});
// 开始更新数据
getQuestions();
// 更新数据
async function getQuestions() {
const _url = new URL(location.href).pathname;
const urlParamSearch = new URL(location.href).searchParams;
let { data } = await AnswerApi.getQuetions({
id: urlParamSearch.get('sn'),
data: {
is_preview: _url.includes('templatePreview') ? 0 : 1,
is_template: _url.includes('templatePreview') ? 1 : 0,
// is_template: urlParamSearch.get('is_template') || 0,
source: urlParamSearch.get('source') ?? ''
}
});
data = data.data;
// 多语言
data.languageType = [
data?.survey?.style?.is_en_tips ? 'en' : '',
data?.survey?.style?.is_cn_tips ? 'zh' : ''
].filter((i) => !!i);
l.value = getLanguage(data.languageType);
// console.log(`l value:`, l.value);
data.language = l.value;
questionsData.value = data;
currentSn.value = urlParamSearch.get('sn') || '';
}
return {
fetchQuestions: getQuestions,
currentSn,
questionsData,
styleInfo,
page,
pages,
translatedText,
l,
themeColor,
loading,
prevLoading,
localPageTimer,
questions,
showPage,
isTemplate
};
});