xiaoju-survey/server/src/utils/messagePushing.ts
2024-04-01 22:32:17 +08:00

88 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export enum VALUE_TYPE {
TEXT = 'text',
OPTION = 'option',
}
/**
* 对问卷的题目列表和提交的数据进行组合
* @param param0.surveyResponse 回收的数据
* @param param0.responseSchema 问卷的配置
* @returns 组装好的数据
*/
export const getPushingData = ({
surveyResponse,
questionList,
surveyId,
surveyPath,
}) => {
const surveyResponseId = surveyResponse._id.toString();
const data = questionList
.filter((question) => {
const value = surveyResponse.data[question.field];
return value !== undefined;
})
.map((question) => {
// 遍历题目列表
let value = surveyResponse.data[question.field];
// 统一数组格式,不区分题型还有单选多选
value = Array.isArray(value) ? value : [value];
let valueType = VALUE_TYPE.TEXT;
const optionTextAndId = surveyResponse?.optionTextAndId?.[question.field];
if (Array.isArray(optionTextAndId) && optionTextAndId.length > 0) {
// 选项类的
value = value.map((val) => {
const index = optionTextAndId.findIndex((item) => item.hash === val);
if (index > -1) {
valueType = VALUE_TYPE.OPTION;
// 拿到选项id、选项文本和别名
const ret: Record<string, any> = {
alias: '',
id: optionTextAndId[index].hash,
text: optionTextAndId[index].text,
};
const extraKey = `${question.field}_${ret.id}`;
if (surveyResponse.data[extraKey]) {
// 更多输入框
ret.extraText = surveyResponse.data[extraKey];
}
return ret;
}
return val;
});
}
if (typeof value[0] === 'number') {
// 评分、nps类的
value = value.map((val) => {
valueType = VALUE_TYPE.OPTION;
const extraKey = `${question.field}_${val}`;
// 组装成选项类的格式
const ret: Record<string, any> = {
alias: '',
id: val,
text: val.toString(),
};
if (surveyResponse.data[extraKey]) {
// 更多输入框
ret.extraText = surveyResponse.data[extraKey];
}
return ret;
});
}
// 返回题目id、题目标题、数据类型、别名目前未开放、还有用户的答案
return {
questionId: question.field,
title: question.title,
valueType,
alias: '',
value,
};
});
// 返回问卷id、问卷path、回收id和组装好的问卷和答案数据
return {
surveyId: surveyId,
surveyPath: surveyPath,
surveyResponseId,
data,
};
};