123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- import { getRandomNumber } from '@/utils';
- import { stemTypeList, questionNumberTypeList, scoreTypeList, switchOption, fontSizeList } from './common';
- import { Message } from 'element-ui';
- export function getOption(type = 'option', text = '') {
- if (type === 'reference') {
- return {
- text,
- };
- }
- return {
- mark: getRandomNumber(),
- text,
- type: text.length > 0 ? 'text' : 'input',
- };
- }
- /**
- * 解析智能识别数据
- * @param {array} arr 智能识别数据
- * @returns object
- */
- export function analysisRecognitionTableFillData(arr) {
- if (arr.length === 0) return {};
- // 判断 arr[0] 中是否有 -
- let isEnableTable = arr[0].includes('-');
- // 表头
- let headerNum = arr[0].split('-').length;
- if (isEnableTable && (headerNum < 2 || headerNum > 5)) {
- Message.error('填表题行数在2-5之间');
- return {};
- }
- let is_enable_table_header = switchOption[0].value;
- let column_number = 2;
- let option_header_list = [];
- if (isEnableTable && headerNum > 1) {
- is_enable_table_header = switchOption[0].value;
- column_number = headerNum;
- option_header_list = arr[0]
- .split('-')
- .map((item) => ({ mark: getRandomNumber(), text: item, width: 100 / headerNum }));
- arr.shift();
- } else {
- is_enable_table_header = switchOption[1].value;
- }
- // 通过正则表达式匹配出表格内容
- let matches = arr.map((str) => {
- return str.match(/[((](.*?)[))]/g).map((item) => item.replace(/[((](.*?)[))]/g, '$1'));
- });
- let colNum = isEnableTable ? headerNum : matches[0].length;
- // 如果不启用表头,取第一行的列数
- if (!isEnableTable) {
- column_number = colNum;
- }
- let isMate = matches.every((item) => {
- if (item.length !== colNum) {
- Message.error('填表题表格列数不匹配');
- return false;
- }
- return true;
- });
- if (!isMate) return {};
- const row_number = matches.length;
- if (row_number < 1 || row_number > 30) {
- Message.error('填表题行数在1-30之间');
- return {};
- }
- const option_list = matches.map((item) => item.map((text) => getOption('option', text)));
- return {
- 'data.property.is_enable_table_header': is_enable_table_header,
- 'data.property.column_number': column_number,
- 'data.option_header_list': option_header_list,
- 'data.property.row_number': row_number,
- 'data.option_list': option_list,
- };
- }
- /**
- * 获取填表题数据模板(防止 mark 重复)
- * @returns {object} 判断题数据模板
- */
- export function getTableFillData() {
- return {
- type: 'table_fill', // 题型
- stem: '', // 题干
- description: '', // 描述
- analysis: '', // 解析,富文本
- reference_answer: '', // 参考答案
- // 参考答案表头
- reference_answer_option_header_list: [
- { mark: getRandomNumber(), text: '', width: 50 },
- { mark: getRandomNumber(), text: '', width: 50 },
- ],
- // 参考答案列表
- reference_answer_option_list: [
- Array.from({ length: 2 }, () => getOption('reference')),
- Array.from({ length: 2 }, () => getOption('reference')),
- ],
- option_header_list: [
- { mark: getRandomNumber(), text: '', width: 50 },
- { mark: getRandomNumber(), text: '', width: 50 },
- ], // 选项头部
- option_list: [Array.from({ length: 2 }, () => getOption()), Array.from({ length: 2 }, () => getOption())], // 选项列表
- answer: {
- score: 1,
- score_type: scoreTypeList[0].value,
- answer_list: [],
- }, // 答案
- // 题型属性
- property: {
- stem_type: stemTypeList[1].value, // 题干类型
- question_number: '1', // 题号
- stem_question_number_font_size: fontSizeList[6], // 题干题号
- is_enable_table_header: switchOption[0].value, // 是否启用表头
- is_enable_description: switchOption[1].value, // 描述
- is_enable_analysis: switchOption[1].value, // 是否开启解析
- is_enable_reference_answer: switchOption[0].value, // 参考答案
- score: 1, // 分值
- score_type: scoreTypeList[0].value, // 分值类型
- is_enable_number_column: switchOption[0].value, // 是否启用序号列
- form_width: 800, // 表格宽度 100 - 3000
- row_number: 2, // 行数 1 - 30
- column_number: 2, // 列数 2 - 5
- },
- // 其他属性
- other: {
- question_number_type: questionNumberTypeList[1].value, // 题号类型
- },
- };
- }
|