-
+
-
+
@@ -92,37 +77,17 @@
-
+
-
+
@@ -133,43 +98,19 @@
-
+
-
+
-
+
@@ -179,45 +120,20 @@
-
+
-
+
-
+
@@ -285,16 +201,10 @@
-
+
@@ -323,14 +233,9 @@
-
+
@@ -454,26 +359,12 @@
-
+
-
@@ -593,7 +465,7 @@ console.log(`now page is template? ${isTemplate.value}`);
getQuestions();
// 更新数据
-async function getQuestions() {
+async function getQuestions () {
let { data } = await AnswerApi.getQuetions({
id: route.query.sn,
data: {
@@ -615,7 +487,7 @@ async function getQuestions() {
}
// 上一页
-async function previous() {
+async function previous () {
if (prevLoading.value || loading.value) {
return;
}
@@ -638,7 +510,7 @@ async function previous() {
}
// 下一页
-async function next(callbackBeforePage) {
+async function next (callbackBeforePage) {
// console.log(`click next button`, prevLoading.value || loading.value);
// if (prevLoading.value || loading.value) {
// return;
@@ -659,7 +531,7 @@ async function next(callbackBeforePage) {
// 开始答题
// 答题
-async function answer(callback, callbackBeforePage) {
+async function answer (callback, callbackBeforePage) {
if ((questions.value.length || !questionsData.value.questions.length) && !props.isTemplate) {
// 表单验证(当前页)
const errors = questions.value.filter((question) => {
@@ -865,62 +737,6 @@ async function answer(callback, callbackBeforePage) {
isError = true;
question.error = translatedText.value.PleaseUploadAtLeastOneFiles(config.min_number);
} else if (answer && questionType === 4) {
- question.error = '';
- // 填空题
- const { value } = answer;
- const newValue = value.replace(/\n|\r|\r\n/g, '');
- switch (config.text_type) {
- // 字母
- case 3:
- // eslint-disable-next-line
- const reg =
- /^[a-zA-Z·~!@#¥%…&*()—\-+={}|《》?:“”【】、;‘’,。`!$^()_<>?:",./;'\\[\]]+$/;
- isError =
- config.include_mark === 1
- ? !reg.test(newValue) || !newValue.length
- : !/^[a-zA-Z]+$/.test(newValue) || !newValue.length;
- question.error = isError ? translatedText.value.PleaseEnterEnglishLetters : '';
- break;
- // 中文
- case 4:
- isError =
- config.include_mark === 1
- ? !/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|[a-zA-Z·~!@#¥%…&*()—\-+={}|《》?:“”【】、;‘’,。`!$^()_<>?:",./;'\\[\]])+$/.test(
- newValue
- ) || !newValue.length
- : !/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/.test(
- newValue
- ) || !newValue.length;
- question.error = isError ? translatedText.value.PleaseEnterChineseWords : '';
- break;
- // 邮箱
- case 5:
- isError =
- !/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
- value
- );
- question.error = isError ? translatedText.value.PleaseEnterACorrectEmail : '';
- break;
- // 手机号
- case 6:
- isError = !/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value);
- question.error = isError ? translatedText.value.PleaseEnterACorrectPhone : '';
- break;
- // 身份证号
- case 7:
- isError =
- !/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/.test(
- value
- );
- question.error = isError ? translatedText.value.PleaseEnterACorrectID : '';
- break;
- default:
- break;
- }
- if (!isError && value.length < config.min && ![1, 2].includes(config.text_type)) {
- isError = true;
- question.error = translatedText.value.PleaseEnterMoreThanOneCharacters(config.min);
- }
} else if (answer && questionType === 8) {
// 矩阵填空题
question.error = '';
@@ -1224,7 +1040,7 @@ async function answer(callback, callbackBeforePage) {
}
// 关联引用
-function onRelation(
+function onRelation (
// 避免出现参数 undefined 情况
{ options, value, list } = {},
{ question_type: _questionType, question_index: _questionIndex, related, answer } = {}
@@ -1340,7 +1156,7 @@ function onRelation(
});
}
-function jumpImmediately() {
+function jumpImmediately () {
const code = questionsData.value.action?.code;
if (page.value !== pages.value.length + 1 && ![20004, 20011, 20016].includes(code)) {
return;
@@ -1393,7 +1209,7 @@ function jumpImmediately() {
}
// 更新答案
-function updateAnswer(auto) {
+function updateAnswer (auto) {
if (auto) {
auto.forEach((autoItem) => {
const question = questionsData.value.questions.find(
@@ -1416,7 +1232,7 @@ function updateAnswer(auto) {
}
}
// 选项隐藏
-function hideOptions(hide) {
+function hideOptions (hide) {
const questionIndex = hide?.question_index;
if (questionIndex) {
const question = questionsData.value.questions.find(
@@ -1427,7 +1243,7 @@ function hideOptions(hide) {
}
// 要搜索的数组和要查找的连续数字的数量n
-function hasNConsecutiveNumbers(arr, n, onTrue, onFalse) {
+function hasNConsecutiveNumbers (arr, n, onTrue, onFalse) {
let count = 1;
let warnStart = 0;
let prevNum = arr[0];
@@ -1450,7 +1266,7 @@ function hasNConsecutiveNumbers(arr, n, onTrue, onFalse) {
// eslint-disable
// 跳转链接
-function toUrl(url) {
+function toUrl (url) {
// 创建一个新的变量来存储修改后的 URL
let modifiedUrl = url;
@@ -1473,7 +1289,7 @@ function toUrl(url) {
* 清空 answer 答案
* @param questions
*/
-function clearAnswer(questions) {
+function clearAnswer (questions) {
if (!questions) return;
questions.forEach((question) => {
if (!question.answer) return;
@@ -1483,6 +1299,7 @@ function clearAnswer(questions) {
diff --git a/src/views/Survey/views/Preview/components/questions/types/previewCompletion.ts b/src/views/Survey/views/Preview/components/questions/types/previewCompletion.ts
new file mode 100644
index 0000000..98842e1
--- /dev/null
+++ b/src/views/Survey/views/Preview/components/questions/types/previewCompletion.ts
@@ -0,0 +1,5 @@
+interface ICompletionAnswer {
+ value: string;
+}
+
+export { ICompletionAnswer };
diff --git a/src/views/Survey/views/Preview/components/questions/types/translatedText.ts b/src/views/Survey/views/Preview/components/questions/types/translatedText.ts
new file mode 100644
index 0000000..cacf3ee
--- /dev/null
+++ b/src/views/Survey/views/Preview/components/questions/types/translatedText.ts
@@ -0,0 +1,23 @@
+// 语言转换类型
+// export interface ITranslatedText {
+// [key: string]: string | ((value: number) => string);
+// }
+
+import { language } from '@/views/Survey/views/Preview/js/language';
+
+type originLanguage = typeof language;
+export type languageArea = 'zh' | 'en';
+/**
+ * 转换之后的 translatedText
+ * originLanguage[K] 属性 value
+ * 对应的属性格式为
+ * ```typescript
+ * ITranslatedText{
+ * some: string,
+ * other: (value: number) => string
+ * }
+ * ```
+ */
+export type ITranslatedText = {
+ [K in keyof originLanguage]: originLanguage[K][languageArea];
+};
diff --git a/src/views/Survey/views/Preview/components/questions/validate/previewCompletion.ts b/src/views/Survey/views/Preview/components/questions/validate/previewCompletion.ts
new file mode 100644
index 0000000..b0c7b52
--- /dev/null
+++ b/src/views/Survey/views/Preview/components/questions/validate/previewCompletion.ts
@@ -0,0 +1,89 @@
+import type { IQuestion } from '@/types/question';
+import { getLanguage } from '@/views/Survey/views/Preview/js/language';
+import { validateEnglishLetters } from '@/views/Survey/views/Preview/components/questions/validate/validateEnglishLetters';
+import { validateChineseLetter } from '@/views/Survey/views/Preview/components/questions/validate/validateChineseLetter';
+import { validateEmail } from '@/views/Survey/views/Preview/components/questions/validate/validateEmail';
+import { validatePhone } from '@/views/Survey/views/Preview/components/questions/validate/validatePhone';
+import { validateIDCard } from '@/views/Survey/views/Preview/components/questions/validate/validateIDCard';
+import type { ITranslatedText } from '@/views/Survey/views/Preview/components/questions/validate/validateChineseLetter';
+import { validateMinLength,validateMaxLength } from '@/views/Survey/views/Preview/components/questions/validate/validateStringLength';
+
+/**
+ * 生成对应的语言文字
+ * 目标语言暂时写死,有需求后续更改
+ */
+const translatedText = getLanguage(['zh']) as ITranslatedText;
+
+/**
+ * @description 填空题验证
+ * @date 2022-11-22
+ * @param {IQuestion
} question - 问卷
+ * @param {IQuestionConfig} config - 相关配置
+ * @param {ICompletionAnswer} answer - 答案
+ */
+function validateCompletion(
+ question: IQuestion,
+ config: ICompletionConfig,
+ answer: string
+) {
+ // 是否有错误
+ let isError = false;
+
+ question.error = '';
+ // 处理空白字符
+ const newValue = answer.replace(/\n|\r|\r\n/g, '');
+
+ // 根据对应的类型进行验证
+ switch (config.text_type) {
+ // 字母校验
+ case 3:
+ question.error = validateEnglishLetters(config, newValue, translatedText);
+ break;
+ // 中文校验
+ case 4:
+ question.error = validateChineseLetter(config, newValue, translatedText);
+ break;
+ // 邮箱校验
+ case 5:
+ question.error = validateEmail(newValue, translatedText);
+ break;
+ // 手机号
+ case 6:
+ question.error = validatePhone(newValue, translatedText);
+ break;
+ // 身份证号
+ case 7:
+ question.error = validateIDCard(newValue, translatedText);
+ break;
+ default:
+ break;
+ }
+
+ // 最小输入字数校验
+ const minStringValidateResult = validateMinLength(answer, isError, config, translatedText);
+ // 如果内容存在, 则说明有错误,初始化赋值数据
+ if (minStringValidateResult) {
+ const { isError: minStringError, errorMessage: minStringErrMessage } = minStringValidateResult;
+
+ minStringError && (isError = minStringError);
+ question.error = minStringErrMessage;
+ }
+
+ // 最大输入字数校验
+ const maxStringValidateResult = validateMaxLength(answer, isError, config, translatedText);
+ // 如果内容存在, 则说明有错误,初始化赋值数据
+ if (maxStringValidateResult) {
+ const { isError: maxStringError, errorMessage: maxStringErrMessage } = maxStringValidateResult;
+
+ maxStringError && (isError = maxStringError);
+ question.error = maxStringErrMessage;
+ }
+
+ // 返回错误和对应的 question
+ return {
+ question,
+ isError
+ };
+}
+
+export { validateCompletion };
diff --git a/src/views/Survey/views/Preview/components/questions/validate/validateChineseLetter.ts b/src/views/Survey/views/Preview/components/questions/validate/validateChineseLetter.ts
new file mode 100644
index 0000000..fc7121f
--- /dev/null
+++ b/src/views/Survey/views/Preview/components/questions/validate/validateChineseLetter.ts
@@ -0,0 +1,32 @@
+import type { ICompletionAnswer } from '@/views/Survey/views/Preview/components/questions/types/previewCompletion';
+import { getLanguage } from '@/views/Survey/views/Preview/js/language';
+export type { ITranslatedText } from '@/views/Survey/views/Preview/components/questions/types/translatedText';
+
+/**
+ * 校验中文字符
+ * @param {ICompletionConfig} config - 相关配置
+ * @param {ICompletionAnswer} answer - 答案
+ * @param {ITranslatedText} translatedText - 语言转换文本
+ */
+export function validateChineseLetter(
+ config: ICompletionConfig,
+ answer: string,
+ translatedText = getLanguage(['zh']) as ITranslatedText
+) {
+ let isError: boolean;
+
+ // 1. 包含标点 2. 不包含标点
+ // 如果包含标点,则使用正则校验,如果不包含标点,则使用
+ // /^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/.test(newValue) || !newValue.length
+ // 如果包含标点,校验规则
+ // 如果不包含标点,校验规则
+ isError =
+ config.include_mark === 1
+ ? !/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|[a-zA-Z·~!@#¥%…&*()—\-+={}|《》?:“”【】、;‘’,。`!$^()_<>?:",./;'\\[\]])+$/.test(
+ answer
+ ) || !answer.length
+ : !/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/.test(
+ answer
+ ) || !answer.length;
+ return isError ? translatedText.PleaseEnterChineseWords : '';
+}
diff --git a/src/views/Survey/views/Preview/components/questions/validate/validateEmail.ts b/src/views/Survey/views/Preview/components/questions/validate/validateEmail.ts
new file mode 100644
index 0000000..42b9171
--- /dev/null
+++ b/src/views/Survey/views/Preview/components/questions/validate/validateEmail.ts
@@ -0,0 +1,21 @@
+import type { ICompletionAnswer } from '@/views/Survey/views/Preview/components/questions/types/previewCompletion';
+import { getLanguage } from '@/views/Survey/views/Preview/js/language';
+
+export type { ITranslatedText } from '@/views/Survey/views/Preview/components/questions/types/translatedText';
+
+/**
+ * 验证邮箱格式
+ * @param answer {ICompletionAnswer} 答案
+ * @param translatedText {ITranslatedText} 语言转换文本
+ */
+export function validateEmail(
+ answer: string,
+ translatedText = getLanguage(['zh']) as ITranslatedText
+) {
+ let isError: boolean;
+ isError =
+ !/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
+ answer
+ );
+ return isError ? translatedText.PleaseEnterACorrectEmail : '';
+}
diff --git a/src/views/Survey/views/Preview/components/questions/validate/validateEnglishLetters.ts b/src/views/Survey/views/Preview/components/questions/validate/validateEnglishLetters.ts
new file mode 100644
index 0000000..00034c1
--- /dev/null
+++ b/src/views/Survey/views/Preview/components/questions/validate/validateEnglishLetters.ts
@@ -0,0 +1,28 @@
+import { getLanguage } from '@/views/Survey/views/Preview/js/language';
+import type { ITranslatedText } from '@/views/Survey/views/Preview/components/questions/types/translatedText';
+
+/**
+ * 验证字母
+ * @param {ICompletionConfig} config - 相关配置
+ * @param {ICompletionAnswer} answer - 答案
+ * @param {ITranslatedText} translatedText - 语言转换文本
+ */
+export function validateEnglishLetters(
+ config: ICompletionConfig,
+ answer: string,
+ translatedText = getLanguage(['zh']) as ITranslatedText
+) {
+ let isError: boolean;
+
+ // 验证规则
+ const reg = /^[a-zA-Z·~!@#¥%…&*()—\-+={}|《》?:“”【】、;‘’,。`!$^()_<>?:",./;'\\[\]]+$/;
+ // 是否包含标点
+ // 1. 包含标点 2. 不包含标点
+ // 如果包含标点,则使用正则校验,如果不包含标点,则使用 /^[a-zA-Z]+$/ 校验
+ isError =
+ config.include_mark === 1
+ ? !reg.test(answer) || !answer.length
+ : !/^[a-zA-Z]+$/.test(answer) || !answer.length;
+
+ return isError ? translatedText.PleaseEnterEnglishLetters : '';
+}
diff --git a/src/views/Survey/views/Preview/components/questions/validate/validateIDCard.ts b/src/views/Survey/views/Preview/components/questions/validate/validateIDCard.ts
new file mode 100644
index 0000000..ef83539
--- /dev/null
+++ b/src/views/Survey/views/Preview/components/questions/validate/validateIDCard.ts
@@ -0,0 +1,22 @@
+import type { ICompletionAnswer } from '@/views/Survey/views/Preview/components/questions/types/previewCompletion';
+import { getLanguage } from '@/views/Survey/views/Preview/js/language';
+import type { ITranslatedText } from '@/views/Survey/views/Preview/components/questions/types/translatedText';
+
+/**
+ * 验证手机号
+ * @param answer {ICompletionAnswer} 答案
+ * @param translatedText {ITranslatedText} 语言转换文本
+ */
+export function validateIDCard(
+ answer: string,
+ translatedText = getLanguage(['zh']) as ITranslatedText
+) {
+ let isError: boolean;
+
+ isError =
+ !/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/.test(
+ answer
+ );
+
+ return isError ? translatedText.PleaseEnterACorrectID : '';
+}
diff --git a/src/views/Survey/views/Preview/components/questions/validate/validatePhone.ts b/src/views/Survey/views/Preview/components/questions/validate/validatePhone.ts
new file mode 100644
index 0000000..bb17e7e
--- /dev/null
+++ b/src/views/Survey/views/Preview/components/questions/validate/validatePhone.ts
@@ -0,0 +1,18 @@
+import type { ICompletionAnswer } from '@/views/Survey/views/Preview/components/questions/types/previewCompletion';
+import { getLanguage } from '@/views/Survey/views/Preview/js/language';
+import type { ITranslatedText } from '@/views/Survey/views/Preview/components/questions/types/translatedText';
+
+/**
+ * 验证手机号
+ * @param answer {ICompletionAnswer} 答案
+ * @param translatedText {ITranslatedText} 语言转换文本
+ */
+export function validatePhone(
+ answer: string,
+ translatedText = getLanguage(['zh']) as ITranslatedText
+) {
+ let isError: boolean;
+
+ isError = !/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(answer);
+ return isError ? translatedText.PleaseEnterACorrectPhone : '';
+}
diff --git a/src/views/Survey/views/Preview/components/questions/validate/validateStringLength.ts b/src/views/Survey/views/Preview/components/questions/validate/validateStringLength.ts
new file mode 100644
index 0000000..75f5dea
--- /dev/null
+++ b/src/views/Survey/views/Preview/components/questions/validate/validateStringLength.ts
@@ -0,0 +1,60 @@
+import type { ITranslatedText } from '@/views/Survey/views/Preview/components/questions/types/translatedText';
+
+/**
+ * 验证最小字符串长度
+ * @param answer {ICompletionAnswer} 答案
+ * @param isError {boolean} 是否有错误
+ * @param config {ICompletionConfig} 配置信息
+ * @param translatedText {ITranslatedText} 语言转换文本
+ * @return {string} 错误信息
+ */
+export function validateMinLength(
+ answer: string,
+ isError: boolean,
+ config: ICompletionConfig,
+ translatedText: ITranslatedText
+) {
+ // 处理异常数据,因为不给数据的时候,默认是空字符串
+ if (typeof config.min === 'string' && config.min.length === 0) return;
+
+ // 如果已经包含报错,不处理
+ if (isError) return;
+ // 如果包含相应的 text_type, 也不处理,1是整数,2是小数
+ if ([1, 2].includes(config.text_type)) return;
+
+ if (answer.length > Number(config.min)) return;
+ return {
+ isError: true,
+ errorMessage: translatedText.PleaseEnterMoreCharacters(config.min)
+ };
+}
+
+/**
+ * 验证最大字符串长度
+ * @param answer {ICompletionAnswer} 答案
+ * @param isError {boolean} 是否有错误
+ * @param config {ICompletionConfig} 配置信息
+ * @param translatedText {ITranslatedText} 语言转换文本
+ * @return {string} 错误信息
+ *
+ */
+export function validateMaxLength(
+ answer: string,
+ isError: boolean,
+ config: ICompletionConfig,
+ translatedText: ITranslatedText
+) {
+ // 处理异常数据,因为不给数据的时候,默认是空字符串
+ if (typeof config.max === 'string' && config.max.length === 0) return;
+
+ // 如果已经包含报错,不处理
+ if (isError) return;
+ // 如果包含相应的 text_type, 也不处理, 1是整数,2是小数
+ if ([1, 2].includes(config.text_type)) return;
+
+ if (answer.length < Number(config.max)) return;
+ return {
+ isError: true,
+ errorMessage: translatedText.PleaseEnterLessCharacters(config.max)
+ };
+}
diff --git a/src/views/Survey/views/Preview/js/language.js b/src/views/Survey/views/Preview/js/language.js
index a4edc74..c2b0233 100644
--- a/src/views/Survey/views/Preview/js/language.js
+++ b/src/views/Survey/views/Preview/js/language.js
@@ -71,7 +71,11 @@ export const language = {
en: 'Please enter a valid ID card number.',
zh: '请输入正确的身份证号。'
},
- PleaseEnterMoreThanOneCharacters: {
+ PleaseEnterLessCharacters: {
+ en: (count) => `Please enter less than ${count} character${count > 1 ? 's' : ''}.`,
+ zh: (count) => `请输入小于${count}个字符。`
+ },
+ PleaseEnterMoreCharacters: {
en: (count) => `Please enter more than ${count} character${count > 1 ? 's' : ''}.`,
zh: (count) => `请输入大于${count}个字符。`
},
@@ -543,7 +547,24 @@ export function setLanguageTypes(types) {
languageTypes.push(...types);
}
+/**
+ * @typedef {import('@/views/Survey/views/Preview/components/questions/types/translatedText').languageArea} LanguageArea
+ * @typedef {import('@/views/Survey/views/Preview/components/questions/types/translatedText').ITranslatedText} ITranslatedText I
+ */
+
+/**
+ *
+ * @alias
+ * @param langArr { languageArea[] } 语言区域类型
+ * @returns {ITranslatedText} 获取到的文本
+ */
export function getLanguage(langArr = languageTypes) {
+ /**
+ * langArr: 语言数组 default: ['zh']
+ * 1. langArr 为空时,使用 ['zh']
+ * 2. langArr 是数组时,使用传入的语言
+ * 3. langArr 是字符串时,使用该字符串语言
+ */
const l = [];
if (!langArr) {
l.push('zh');
diff --git a/src/views/Survey/views/Preview/js/test/language.spec.ts b/src/views/Survey/views/Preview/js/test/language.spec.ts
new file mode 100644
index 0000000..7729856
--- /dev/null
+++ b/src/views/Survey/views/Preview/js/test/language.spec.ts
@@ -0,0 +1,7 @@
+import { test, spec } from "vitest";
+import { getLanguage } from "../language";
+
+test("检测 language 列表", () => {
+ const res = getLanguage(['zh'])
+ console.log(res);
+});
\ No newline at end of file
diff --git a/vite.config.ts b/vite.config.ts
index f2dcdfd..1d00ff5 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,4 +1,4 @@
-// vite.config.ts
+///
import { defineConfig, loadEnv } from 'vite'; // 从 vite 导入 loadEnv
import vue from '@vitejs/plugin-vue';
import { fileURLToPath, URL } from 'node:url';