fix:修复打分题失焦变NAN的问题

This commit is contained in:
du.meimei
2025-03-21 16:11:35 +08:00
parent f7474f147f
commit a253372576
29 changed files with 293 additions and 288 deletions

4
auto-imports.d.ts vendored
View File

@@ -5,6 +5,4 @@
// Generated by unplugin-auto-import // Generated by unplugin-auto-import
// biome-ignore lint: disable // biome-ignore lint: disable
export {} export {}
declare global { declare global {}
}

1
components.d.ts vendored
View File

@@ -31,7 +31,6 @@ declare module 'vue' {
VanCol: typeof import('vant/es')['Col'] VanCol: typeof import('vant/es')['Col']
VanDivider: typeof import('vant/es')['Divider'] VanDivider: typeof import('vant/es')['Divider']
VanField: typeof import('vant/es')['Field'] VanField: typeof import('vant/es')['Field']
VanForm: typeof import('vant/es')['Form']
VanGrid: typeof import('vant/es')['Grid'] VanGrid: typeof import('vant/es')['Grid']
VanGridItem: typeof import('vant/es')['GridItem'] VanGridItem: typeof import('vant/es')['GridItem']
VanIcon: typeof import('vant/es')['Icon'] VanIcon: typeof import('vant/es')['Icon']

View File

@@ -4,7 +4,7 @@ import { onMounted } from 'vue';
import appBridge from '@/assets/js/appBridge'; import appBridge from '@/assets/js/appBridge';
import utils from '@/assets/js/common'; import utils from '@/assets/js/common';
onMounted(async() => { onMounted(async () => {
if (utils.getParameter('digitalYiliToken')) { if (utils.getParameter('digitalYiliToken')) {
// 隐藏/显示 header // 隐藏/显示 header
appBridge.setHeaderShown(false); appBridge.setHeaderShown(false);

View File

@@ -85,9 +85,9 @@ export default class CommonApi {
}; };
/* eslint-disable no-useless-escape */ /* eslint-disable no-useless-escape */
const reg = /\\|\/|\?|\|\*|"|“|”|'|||<|>|{|}|\[|\]|\【|\】||:|、|\^|\$|!|~|`|\s|\+/g; const reg = /\\|\/|\?|\|\*|"|“|”|'|||<|>|{|}|\[|\]|\【|\】||:|、|\^|\$|!|~|`|\s|\+/g;
name name =
= name name ||
|| getRandomFileName(file?.name?.replace(reg, '') ?? '' ?? `${new Date().getTime()}.png`); getRandomFileName(file?.name?.replace(reg, '') ?? '' ?? `${new Date().getTime()}.png`);
const res = await CommonApi.getOssInfo(); const res = await CommonApi.getOssInfo();
/* eslint-enable no-useless-escape */ /* eslint-enable no-useless-escape */

View File

@@ -170,8 +170,8 @@ const getMaxDateLimit = computed(() => {
props.format props.format
); );
const tempStr = '0000-12-31 23:59:59'; const tempStr = '0000-12-31 23:59:59';
const result const result =
= props.maxDate.length !== 0 && thisMax.length > props.maxDate.length props.maxDate.length !== 0 && thisMax.length > props.maxDate.length
? thisMax.slice(0, props.maxDate.length) + tempStr.slice(props.maxDate.length) ? thisMax.slice(0, props.maxDate.length) + tempStr.slice(props.maxDate.length)
: thisMax; : thisMax;
return result.slice(0, props.format.length); return result.slice(0, props.format.length);
@@ -194,8 +194,8 @@ function onChange({ selectedValues, columnIndex }) {
renderMinuteColumns, renderMinuteColumns,
renderSecondColumns renderSecondColumns
]; ];
updateColumns[columnIndex] updateColumns[columnIndex] &&
&& updateColumns[columnIndex](changeValue, getMinDateLimit.value, getMaxDateLimit.value, false); updateColumns[columnIndex](changeValue, getMinDateLimit.value, getMaxDateLimit.value, false);
} }
// 渲染全部列 // 渲染全部列

View File

@@ -4,11 +4,11 @@
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: src:
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix')
format('embedded-opentype'), format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont')
format('svg'); format('svg');
} }
.logo { .logo {

View File

@@ -228,6 +228,6 @@
"font_class": "fasong", "font_class": "fasong",
"unicode": "e647", "unicode": "e647",
"unicode_decimal": 58951 "unicode_decimal": 58951
}, }
] ]
} }

View File

@@ -4,11 +4,11 @@
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: src:
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix')
format('embedded-opentype'), format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont')
format('svg'); format('svg');
} }
.logo { .logo {

View File

@@ -376,39 +376,39 @@ export function isCross(range1, range2) {
const isSibling = isLeft || isRight; const isSibling = isLeft || isRight;
// 逻辑包含循环 // 逻辑包含循环
const contain const contain =
= (isPlainSequence (isPlainSequence &&
&& (((isNullish(start2) || isSequence(judge, start2, start1)) (((isNullish(start2) || isSequence(judge, start2, start1)) &&
&& (isNullish(end2) || isSequence(judge, end2, start1))) (isNullish(end2) || isSequence(judge, end2, start1))) ||
|| ((isNullish(start2) || isSequence(start1, start2, end1)) ((isNullish(start2) || isSequence(start1, start2, end1)) &&
&& (isNullish(end2) || isSequence(start1, end2, end1))))) (isNullish(end2) || isSequence(start1, end2, end1))))) ||
|| (!isPlainSequence (!isPlainSequence &&
&& (judge < start1 (judge < start1
? ((isNullish(start2) || isSequence(judge, start2, start1)) ? ((isNullish(start2) || isSequence(judge, start2, start1)) &&
&& (isNullish(end2) || isSequence(judge, end2, start1))) (isNullish(end2) || isSequence(judge, end2, start1))) ||
|| ((isNullish(start2) || isSequence(start1, start2, end1)) ((isNullish(start2) || isSequence(start1, start2, end1)) &&
&& (isNullish(end2) || isSequence(start1, end2, end1))) (isNullish(end2) || isSequence(start1, end2, end1)))
: ((isNullish(start2) || isSequence(start1, start2, judge)) : ((isNullish(start2) || isSequence(start1, start2, judge)) &&
&& (isNullish(end2) || isSequence(start1, end2, judge))) (isNullish(end2) || isSequence(start1, end2, judge))) ||
|| ((isNullish(start2) || isSequence(judge, start2, end1)) ((isNullish(start2) || isSequence(judge, start2, end1)) &&
&& (isNullish(end2) || isSequence(judge, end2, end1))))); (isNullish(end2) || isSequence(judge, end2, end1)))));
// 循环存在封闭区间,并且循环包含逻辑 // 循环存在封闭区间,并且循环包含逻辑
const contained const contained =
= !isNullish(start2) !isNullish(start2) &&
&& !isNullish(end2) !isNullish(end2) &&
// [judge, start1, end1]; // [judge, start1, end1];
&& ((isPlainSequence && start2 <= judge && end1 <= end2) ((isPlainSequence && start2 <= judge && end1 <= end2) ||
// [judge, start1, end1]; // [judge, start1, end1];
// [start1, judge, end1]; // [start1, judge, end1];
|| (!isPlainSequence && start2 <= start1 && start2 <= judge && end1 <= end2)); (!isPlainSequence && start2 <= start1 && start2 <= judge && end1 <= end2));
// 循环不存在封闭区间 // 循环不存在封闭区间
const unCircled const unCircled =
= (!isNullish(start2) (!isNullish(start2) &&
&& isNullish(end2) isNullish(end2) &&
&& ((isPlainSequence && start2 === judge) || (!isPlainSequence && judge < start1) ((isPlainSequence && start2 === judge) || (!isPlainSequence && judge < start1)
? start2 === judge ? start2 === judge
: start2 === start1)) : start2 === start1)) ||
|| (isNullish(start2) && !isNullish(end2) && end2 === end1); (isNullish(start2) && !isNullish(end2) && end2 === end1);
return !(isSibling || contain || contained || unCircled); return !(isSibling || contain || contained || unCircled);
} }
@@ -428,8 +428,8 @@ function isSequence(s1, s2, s3, equal) {
* @param store * @param store
*/ */
export function updateNewQuestionsByLoopingEffect(quesSaveParam, store) { export function updateNewQuestionsByLoopingEffect(quesSaveParam, store) {
const { questionInfoBeforeModified = {}, questionInfo = {} } const { questionInfoBeforeModified = {}, questionInfo = {} } =
= JSON.parse(JSON.stringify(store.state.common)) || {}; JSON.parse(JSON.stringify(store.state.common)) || {};
const oldPages = questionInfoBeforeModified.survey.pages; const oldPages = questionInfoBeforeModified.survey.pages;
const newQuestions = questionInfo.questions; const newQuestions = questionInfo.questions;

View File

@@ -30,13 +30,13 @@ function showModal(options) {
* @param {*} data * @param {*} data
* @returns * @returns
*/ */
const canPlanetPublishPSM = function(data) { const canPlanetPublishPSM = function (data) {
let isFb = true; let isFb = true;
let message = ''; let message = '';
let title = '题目设置未完成'; let title = '题目设置未完成';
const incompleteQuestionList = []; const incompleteQuestionList = [];
data.questions data.questions &&
&& data.questions.forEach((s) => { data.questions.forEach((s) => {
if (s.question_type === 101 && s.config.price_gradient.length <= 0) { if (s.question_type === 101 && s.config.price_gradient.length <= 0) {
isFb = false; isFb = false;
message = 'psm题目未完成设置请设置价格区间后投放'; message = 'psm题目未完成设置请设置价格区间后投放';
@@ -60,15 +60,15 @@ const canPlanetPublishPSM = function(data) {
* @param {*} data * @param {*} data
* @returns * @returns
*/ */
const canPlanetPublishMxdAndHotArea = function(data) { const canPlanetPublishMxdAndHotArea = function (data) {
let isFb = true; let isFb = true;
let message = ''; let message = '';
const qSteams = []; const qSteams = [];
const incompleteQuestionList = []; const incompleteQuestionList = [];
let type = 0; let type = 0;
let title = '题目设置未完成'; let title = '题目设置未完成';
data.questions data.questions &&
&& data.questions.forEach((s) => { data.questions.forEach((s) => {
if (s.question_type === 105 && s.config.design_version <= 0) { if (s.question_type === 105 && s.config.design_version <= 0) {
isFb = false; isFb = false;
message = 'maxdiff题目未完成设置请生成设计后投放'; message = 'maxdiff题目未完成设置请生成设计后投放';
@@ -107,14 +107,14 @@ const canPlanetPublishMxdAndHotArea = function(data) {
* @param {*} data * @param {*} data
* @returns * @returns
*/ */
const canPlanetPublish3D = function(data) { const canPlanetPublish3D = function (data) {
{ {
let canFB = true; let canFB = true;
let message = ''; let message = '';
const qSteams = []; const qSteams = [];
let title = ''; let title = '';
data.questions data.questions &&
&& data.questions.forEach((s) => { data.questions.forEach((s) => {
if (QUESTION_TYPE.contains(s.question_type)) { if (QUESTION_TYPE.contains(s.question_type)) {
try { try {
if (s.config.is_three_dimensions && !s.config.scene) { if (s.config.is_three_dimensions && !s.config.scene) {
@@ -144,15 +144,15 @@ const canPlanetPublish3D = function(data) {
let message = ''; let message = '';
const qSteams = []; const qSteams = [];
let title = ''; let title = '';
data.questions data.questions &&
&& data.questions.forEach((s) => { data.questions.forEach((s) => {
if (QUESTION_TYPE.contains(s.question_type)) { if (QUESTION_TYPE.contains(s.question_type)) {
try { try {
if (s.config.is_three_dimensions && s.config.is_binding_goods) { if (s.config.is_three_dimensions && s.config.is_binding_goods) {
const wares = []; const wares = [];
const _sceneInformation = s.config.scene_information; const _sceneInformation = s.config.scene_information;
const sceneInformation const sceneInformation =
= typeof _sceneInformation === 'string' typeof _sceneInformation === 'string'
? JSON.parse(_sceneInformation) ? JSON.parse(_sceneInformation)
: _sceneInformation; : _sceneInformation;
sceneInformation.shelves.forEach((shelf) => { sceneInformation.shelves.forEach((shelf) => {
@@ -202,14 +202,14 @@ const canPlanetPublish3D = function(data) {
* @param {*} data * @param {*} data
* @returns * @returns
*/ */
const canPlanetPublishImage = function(data) { const canPlanetPublishImage = function (data) {
{ {
let canFB = true; let canFB = true;
let message = ''; let message = '';
const qSteams = []; const qSteams = [];
let title = ''; let title = '';
data.questions data.questions &&
&& data.questions.forEach((s) => { data.questions.forEach((s) => {
if (s.question_type === 13) { if (s.question_type === 13) {
try { try {
if (s.options.length <= 0 || s.options.some((y) => y.length <= 0)) { if (s.options.length <= 0 || s.options.some((y) => y.length <= 0)) {
@@ -304,8 +304,8 @@ function canPublishRandom(data, publishType) {
if (!isValidated) { if (!isValidated) {
errors.push({ errors.push({
message: message:
field.message field.message ||
|| `请填写"${random.title}"中第${index + 1}组"随机题组"的"${field.name}"` `请填写"${random.title}"中第${index + 1}组"随机题组"的"${field.name}"`
}); });
} }
}); });
@@ -384,11 +384,11 @@ function isLoopingLogicValid(data, publishType) {
if ( if (
(data?.cycle_pages || []).every((i) => { (data?.cycle_pages || []).every((i) => {
return ( return (
i.question_index i.question_index &&
&& i.relation_type !== undefined i.relation_type !== undefined &&
&& i.relation_type !== null i.relation_type !== null &&
&& i.first_page i.first_page &&
&& i.last_page i.last_page
); );
}) })
) { ) {
@@ -412,7 +412,7 @@ function isLoopingLogicValid(data, publishType) {
* @param sn * @param sn
* @param publishType undefined投放null投放0投放1预览2投放3测试 * @param publishType undefined投放null投放0投放1预览2投放3测试
*/ */
export const canPlanetPublish = async function(sn, publishType) { export const canPlanetPublish = async function (sn, publishType) {
const parsedPublishType = !publishType ? 2 : publishType; const parsedPublishType = !publishType ? 2 : publishType;
const num = window.location.href.indexOf('code='); const num = window.location.href.indexOf('code=');
let code; let code;

View File

@@ -1,2 +1,2 @@
export const surveyQuestion export const surveyQuestion =
= 'https://yls-api-uat.dctest.digitalyili.com/api/console/surveys/RWNK9BYp/questions'; 'https://yls-api-uat.dctest.digitalyili.com/api/console/surveys/RWNK9BYp/questions';

View File

@@ -39,10 +39,10 @@ service.interceptors.request.use(
service.interceptors.response.use( service.interceptors.response.use(
(response) => { (response) => {
if ( if (
response.status === 200 response.status === 200 ||
|| response.status === 201 response.status === 201 ||
|| response.status === 202 response.status === 202 ||
|| response.status === 204 response.status === 204
) { ) {
if (response.config.method === 'put') { if (response.config.method === 'put') {
// message.success('保存中...'); // message.success('保存中...');

View File

@@ -44,10 +44,10 @@ service.interceptors.request.use(
service.interceptors.response.use( service.interceptors.response.use(
(response) => { (response) => {
if ( if (
response.status === 200 response.status === 200 ||
|| response.status === 201 response.status === 201 ||
|| response.status === 202 response.status === 202 ||
|| response.status === 204 response.status === 204
) { ) {
if (response.config.method === 'put') { if (response.config.method === 'put') {
// message.success('保存中...'); // message.success('保存中...');

View File

@@ -138,23 +138,23 @@ const openOptionActionModel = (item, index) => {
// 上下移动 // 上下移动
const optionMove = (action) => { const optionMove = (action) => {
switch (action.action) { switch (action.action) {
case 'up': case 'up':
if (activeIndex.value === 0) { if (activeIndex.value === 0) {
moveShow.value = false; moveShow.value = false;
return false; return false;
} }
// 向上移动 // 向上移动
element.value.splice(activeIndex.value - 1, 0, element.value.splice(activeIndex.value, 1)[0]); element.value.splice(activeIndex.value - 1, 0, element.value.splice(activeIndex.value, 1)[0]);
activeIndex.value -= 1; activeIndex.value -= 1;
break; break;
case 'down': case 'down':
if (activeIndex.value === element.value.length - 1) { if (activeIndex.value === element.value.length - 1) {
moveShow.value = false; moveShow.value = false;
return false; return false;
} }
element.value.splice(activeIndex.value + 1, 0, element.value.splice(activeIndex.value, 1)[0]); element.value.splice(activeIndex.value + 1, 0, element.value.splice(activeIndex.value, 1)[0]);
activeIndex.value += 1; activeIndex.value += 1;
break; break;
} }
}; };

View File

@@ -153,8 +153,7 @@ function intervalChange(value) {
* @param value {number} 当数值改变之后的值 * @param value {number} 当数值改变之后的值
*/ */
const minChange = (value) => { const minChange = (value) => {
// localConfig.value.min = value; localConfig.value.min = value ? value : 1;
setDefaultMax(); setDefaultMax();
emitInfo(); emitInfo();
}; };

View File

@@ -11,7 +11,8 @@
class="iconfont active-icon" class="iconfont active-icon"
:style="{ marginRight: isLastPage ? '0' : '16px' }" :style="{ marginRight: isLastPage ? '0' : '16px' }"
@click="activePage" @click="activePage"
>&#xe86c;</i> >&#xe86c;</i
>
<template v-if="!isLastPage"> <template v-if="!isLastPage">
<i class="iconfont moverQues" style="margin-right: 16px">&#xe71b;</i> <i class="iconfont moverQues" style="margin-right: 16px">&#xe71b;</i>
<i class="iconfont" @click="deleteHandle">&#xe6c5;</i> <i class="iconfont" @click="deleteHandle">&#xe6c5;</i>

View File

@@ -10,7 +10,7 @@ import { showFailToast } from 'vant';
import appBridge from '@/assets/js/appBridge'; import appBridge from '@/assets/js/appBridge';
const contentShow = ref(false); const contentShow = ref(false);
onMounted(async() => { onMounted(async () => {
if (appBridge.isInReactNative()) { if (appBridge.isInReactNative()) {
const appToken = utils.getSessionStorage('xToken'); const appToken = utils.getSessionStorage('xToken');
getUserInfo(appToken) getUserInfo(appToken)

View File

@@ -3,7 +3,9 @@
<div v-for="item in 10" :key="item" class="template"> <div v-for="item in 10" :key="item" class="template">
<img src="https://picsum.photos/131/128" width="110" height="100" alt="" /> <img src="https://picsum.photos/131/128" width="110" height="100" alt="" />
<span>报名/签到模板</span> <span>报名/签到模板</span>
<span style="color: rgb(127, 127, 127)">报名签到 | 引用 {{ item }} | 创建人: {{ '张三' }}</span> <span style="color: rgb(127, 127, 127)"
>报名签到 | 引用 {{ item }} | 创建人: {{ '张三' }}</span
>
</div> </div>
</div> </div>
</template> </template>

View File

@@ -227,8 +227,8 @@ export default defineComponent({
.map((option) => { .map((option) => {
return this.wares.find( return this.wares.find(
(ware) => (ware) =>
ware.question_index === option.question_index ware.question_index === option.question_index &&
&& ware.option_index === option.option_index ware.option_index === option.option_index
); );
}); });
wares = wares.filter((x) => x); wares = wares.filter((x) => x);

View File

@@ -133,10 +133,10 @@ export default defineComponent({
const showLastButton = computed( const showLastButton = computed(
() => () =>
props.showPrevious props.showPrevious &&
&& props.page > props.min props.page > props.min &&
// props.page < props.pages - 1 && // props.page < props.pages - 1 &&
&& props.page > 1 props.page > 1
); );
// console.log(`pages-page`, props.page, props.pages); // console.log(`pages-page`, props.page, props.pages);
return { return {

View File

@@ -144,7 +144,7 @@ export default {
methods: { methods: {
debounce(func, wait) { debounce(func, wait) {
let timeout; let timeout;
return function(...args) { return function (...args) {
clearTimeout(timeout); clearTimeout(timeout);
timeout = setTimeout(() => func.apply(this, args), wait); timeout = setTimeout(() => func.apply(this, args), wait);
}; };

View File

@@ -267,16 +267,16 @@ export default defineComponent({
}); });
if ( if (
!compareArrayByField(options.value, newOptions, 'option_key') !compareArrayByField(options.value, newOptions, 'option_key') ||
|| !compareArrayByField(options.value, newOptions, 'option') !compareArrayByField(options.value, newOptions, 'option')
) { ) {
options.value = newOptions; options.value = newOptions;
} }
// 清空值和答案 // 清空值和答案
if ( if (
value.value value.value &&
&& options.value.findIndex((option) => option.option_key === value.value) === -1 options.value.findIndex((option) => option.option_key === value.value) === -1
) { ) {
// 清空值 // 清空值
value.value = ''; value.value = '';
@@ -294,8 +294,8 @@ export default defineComponent({
() => options.value, () => options.value,
(val, oldVal) => { (val, oldVal) => {
if ( if (
compareArrayByField(val, oldVal || [], 'option_key') compareArrayByField(val, oldVal || [], 'option_key') &&
&& compareArrayByField(val, oldVal || [], 'option') compareArrayByField(val, oldVal || [], 'option')
) { ) {
return; return;
} }

View File

@@ -147,8 +147,8 @@ export default defineComponent({
// 替换文本 // 替换文本
let replacement = ''; let replacement = '';
// 查找引用问题 // 查找引用问题
const question const question =
= props.questions.find((question) => { props.questions.find((question) => {
// 矩阵题 // 矩阵题
if (question.question_type >= 8 && question.question_type <= 11) { if (question.question_type >= 8 && question.question_type <= 11) {
return question.title === value.split('_R')[0].split('_C')[0]; return question.title === value.split('_R')[0].split('_C')[0];
@@ -158,8 +158,8 @@ export default defineComponent({
return question.title === value.split('_A')[0]; return question.title === value.split('_A')[0];
} }
return question.title === value; return question.title === value;
}) }) ||
|| props.questions.find((question) => { props.questions.find((question) => {
// 矩阵题 // 矩阵题
if (question.question_type >= 8 && question.question_type <= 11) { if (question.question_type >= 8 && question.question_type <= 11) {
return question.title === (value + cycleIndexStr).split('_R')[0].split('_C')[0]; return question.title === (value + cycleIndexStr).split('_R')[0].split('_C')[0];
@@ -187,8 +187,8 @@ export default defineComponent({
replacement = answer[option.option_key]; replacement = answer[option.option_key];
} }
} else if ( } else if (
question.question_type === 2 question.question_type === 2 &&
&& Object.keys(answer).length >= question.config.min_select Object.keys(answer).length >= question.config.min_select
) { ) {
// 查找引用选项(多选) // 查找引用选项(多选)
options.forEach((option) => { options.forEach((option) => {

View File

@@ -350,7 +350,7 @@ export const language = {
zh: '请点击查看图片' zh: '请点击查看图片'
}, },
NoteCantViewAfterTimeLimit: { NoteCantViewAfterTimeLimit: {
en: 'Note: Can\'t view after time limit', en: "Note: Can't view after time limit",
zh: '注意:超过显示时间限制后将无法再次查看' zh: '注意:超过显示时间限制后将无法再次查看'
}, },
DisplayTimeLimitExceeded: { DisplayTimeLimitExceeded: {

View File

@@ -250,10 +250,10 @@ function quesHandle(answer, logChild) {
const matrixRateHandle = () => { const matrixRateHandle = () => {
// 如果配置的逻辑中参数为空,则代表没有配置逻辑匹配值,此时不做校验 // 如果配置的逻辑中参数为空,则代表没有配置逻辑匹配值,此时不做校验
if ( if (
logChild.cell_index === 0 logChild.cell_index === 0 ||
|| logChild.row_index === 0 logChild.row_index === 0 ||
|| !logChild.operator !logChild.operator ||
|| !logChild.value !logChild.value
) { ) {
return true; return true;
} }
@@ -265,10 +265,10 @@ function quesHandle(answer, logChild) {
const matrixInputHandle = () => { const matrixInputHandle = () => {
// 如果配置的逻辑中参数为空,则代表没有配置逻辑匹配值,此时不做校验 // 如果配置的逻辑中参数为空,则代表没有配置逻辑匹配值,此时不做校验
if ( if (
logChild.cell_index === 0 logChild.cell_index === 0 ||
|| logChild.row_index === 0 logChild.row_index === 0 ||
|| !logChild.operator !logChild.operator ||
|| !logChild.value !logChild.value
) { ) {
return true; return true;
} }
@@ -428,59 +428,59 @@ function getConditionStatus(logChild) {
if (answer) { if (answer) {
try { try {
switch (logChild.question_type) { switch (logChild.question_type) {
case 1: case 1:
quesStatus = quesHandles.choiceHandle(config); quesStatus = quesHandles.choiceHandle(config);
break; break;
case 2: case 2:
quesStatus = quesHandles.choiceCheckBoxHandle(config); quesStatus = quesHandles.choiceCheckBoxHandle(config);
break; break;
case 3: case 3:
quesStatus = quesHandles.cascaderHandle(); quesStatus = quesHandles.cascaderHandle();
break; break;
case 4: case 4:
quesStatus = quesHandles.inputHandle(); quesStatus = quesHandles.inputHandle();
break; break;
case 5: case 5:
quesStatus = quesHandles.rateHandle(); quesStatus = quesHandles.rateHandle();
break; break;
case 7: case 7:
quesStatus = quesHandles.dateTimeHandle(); quesStatus = quesHandles.dateTimeHandle();
break; break;
case 8: case 8:
quesStatus = quesHandles.matrixInputHandle(); quesStatus = quesHandles.matrixInputHandle();
break; break;
case 9: case 9:
quesStatus = quesHandles.matrixRadioHandle(config); quesStatus = quesHandles.matrixRadioHandle(config);
break; break;
case 10: case 10:
quesStatus = quesHandles.matrixCheckboxHandle(config); quesStatus = quesHandles.matrixCheckboxHandle(config);
break; break;
case 11: case 11:
quesStatus = quesHandles.matrixRateHandle(); quesStatus = quesHandles.matrixRateHandle();
break; break;
case 13: case 13:
quesStatus = quesHandles.imgRadioHandle(); quesStatus = quesHandles.imgRadioHandle();
break; break;
case 14: case 14:
quesStatus = quesHandles.imgCheckBoxHandle(); quesStatus = quesHandles.imgCheckBoxHandle();
break; break;
case 15: case 15:
quesStatus = quesHandles.classifyHandle(); quesStatus = quesHandles.classifyHandle();
break; break;
case 16: case 16:
quesStatus = quesHandles.sortHandle(); quesStatus = quesHandles.sortHandle();
break; break;
case 17: case 17:
quesStatus = quesHandles.constantSumHandle(); quesStatus = quesHandles.constantSumHandle();
break; break;
case 23: case 23:
quesStatus = quesHandles.agreementHandle(); quesStatus = quesHandles.agreementHandle();
break; break;
case 101: case 101:
quesStatus = quesHandles.psmHandle(config); quesStatus = quesHandles.psmHandle(config);
break; break;
default: default:
break; break;
} }
} catch (error) { } catch (error) {
// console.log(error); // console.log(error);
@@ -519,10 +519,10 @@ function getlogicStatus(questionData) {
// } else { // } else {
// statusStr = statusStr + conditionStatus; // statusStr = statusStr + conditionStatus;
// } // }
statusStr statusStr =
= statusStr statusStr +
+ (logChild.logic === 'and' ? '&&' : logChild.logic === 'or' ? '||' : '') (logChild.logic === 'and' ? '&&' : logChild.logic === 'or' ? '||' : '') +
+ conditionStatus; conditionStatus;
}); });
// eslint-disable-next-line no-eval // eslint-disable-next-line no-eval
logs.logicStatus = eval(statusStr); logs.logicStatus = eval(statusStr);

View File

@@ -105,8 +105,8 @@ export default function answerMock(questionsData, page) {
} else if (logic.skip_type === 4) { } else if (logic.skip_type === 4) {
// 只计算跳转后所在页面的隐藏逻辑,否则会出现只返回最后一道隐藏选项题目的情况,导致失效 // 只计算跳转后所在页面的隐藏逻辑,否则会出现只返回最后一道隐藏选项题目的情况,导致失效
const toPage = page + 1; const toPage = page + 1;
const hasHiddenLogicQuizPage const hasHiddenLogicQuizPage =
= data.pages.findIndex((page) => page.includes(logic.question_index)) + 1; data.pages.findIndex((page) => page.includes(logic.question_index)) + 1;
if (hasHiddenLogicQuizPage === toPage) { if (hasHiddenLogicQuizPage === toPage) {
// 选项隐藏逻辑 // 选项隐藏逻辑
updateOptionHidden(data.hide_options, logic); updateOptionHidden(data.hide_options, logic);

View File

@@ -155,9 +155,9 @@ export default defineComponent({
question.error = translatedText.value.ThisIsARequiredQuestion; question.error = translatedText.value.ThisIsARequiredQuestion;
} }
} else if ( } else if (
answer answer &&
&& questionType === 1 questionType === 1 &&
&& Object.keys(answer).findIndex((value) => !answer[value]) !== -1 Object.keys(answer).findIndex((value) => !answer[value]) !== -1
) { ) {
// 单选题 // 单选题
isError = true; isError = true;
@@ -303,9 +303,9 @@ export default defineComponent({
} else if (answer && questionType === 12) { } else if (answer && questionType === 12) {
question.error = ''; question.error = '';
} else if ( } else if (
answer answer &&
&& questionType === 14 questionType === 14 &&
&& Object.keys(answer).length < config.min_select Object.keys(answer).length < config.min_select
) { ) {
// 图片多选题 // 图片多选题
isError = true; isError = true;
@@ -341,51 +341,51 @@ export default defineComponent({
const { value } = answer; const { value } = answer;
const newValue = value.replace(/\n|\r|\r\n/g, ''); const newValue = value.replace(/\n|\r|\r\n/g, '');
switch (config.text_type) { switch (config.text_type) {
// 字母 // 字母
case 3: case 3:
isError isError =
= config.include_mark === 1 config.include_mark === 1
? !/^[a-zA-Z·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]]+$/.test( ? !/^[a-zA-Z·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]]+$/.test(
newValue newValue
) || !newValue.length ) || !newValue.length
: !/^[a-zA-Z]+$/.test(newValue) || !newValue.length; : !/^[a-zA-Z]+$/.test(newValue) || !newValue.length;
question.error = isError ? translatedText.value.PleaseEnterEnglishLetters : ''; question.error = isError ? translatedText.value.PleaseEnterEnglishLetters : '';
break; break;
// 中文 // 中文
case 4: case 4:
isError isError =
= config.include_mark === 1 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]|[·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]])+$/.test( ? !/^(?:[\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
) || !newValue.length ) || !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( : !/^(?:[\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
) || !newValue.length; ) || !newValue.length;
question.error = isError ? translatedText.value.PleaseEnterChineseWords : ''; question.error = isError ? translatedText.value.PleaseEnterChineseWords : '';
break; break;
// 邮箱 // 邮箱
case 5: case 5:
isError 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( !/^(([^<>()[\]\\.,;:\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 value
); );
question.error = isError ? translatedText.value.PleaseEnterACorrectEmail : ''; question.error = isError ? translatedText.value.PleaseEnterACorrectEmail : '';
break; break;
// 手机号 // 手机号
case 6: case 6:
isError = !/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value); isError = !/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value);
question.error = isError ? translatedText.value.PleaseEnterACorrectPhone : ''; question.error = isError ? translatedText.value.PleaseEnterACorrectPhone : '';
break; break;
// 身份证号 // 身份证号
case 7: case 7:
isError 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( !/^[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 value
); );
question.error = isError ? translatedText.value.PleaseEnterACorrectID : ''; question.error = isError ? translatedText.value.PleaseEnterACorrectID : '';
break; break;
default: default:
break; break;
} }
if (!isError && value.length < config.min && ![1, 2].includes(config.text_type)) { if (!isError && value.length < config.min && ![1, 2].includes(config.text_type)) {
isError = true; isError = true;
@@ -397,59 +397,59 @@ export default defineComponent({
Object.keys(answer).forEach((key) => { Object.keys(answer).forEach((key) => {
const value = answer[key]; const value = answer[key];
switch (config.text_type) { switch (config.text_type) {
// 字母 // 字母
case 3: case 3:
if ( if (
!/^[a-zA-Z·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]]+$/.test( !/^[a-zA-Z·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]]+$/.test(
value value
) )
) { ) {
question.error = translatedText.value.PleaseEnterEnglishLetters; question.error = translatedText.value.PleaseEnterEnglishLetters;
} }
break; break;
// 中文 // 中文
case 4: case 4:
if ( if (
!/^(?:[\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( !/^(?:[\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(
value value
) )
) { ) {
question.error = translatedText.value.PleaseEnterChineseWords; question.error = translatedText.value.PleaseEnterChineseWords;
} }
break; break;
// 邮箱 // 邮箱
case 5: case 5:
if ( if (
!/^(([^<>()[\]\\.,;:\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( !/^(([^<>()[\]\\.,;:\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 value
) )
) { ) {
question.error = translatedText.value.PleaseEnterACorrectEmail; question.error = translatedText.value.PleaseEnterACorrectEmail;
} }
break; break;
// 手机号 // 手机号
case 6: case 6:
if (!/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value)) { if (!/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value)) {
question.error = translatedText.value.PleaseEnterACorrectPhone; question.error = translatedText.value.PleaseEnterACorrectPhone;
} }
break; break;
// 身份证号 // 身份证号
case 7: case 7:
if ( if (
!/^[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( !/^[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 value
) )
) { ) {
question.error = translatedText.value.PleaseEnterACorrectID; question.error = translatedText.value.PleaseEnterACorrectID;
} }
break; break;
default: default:
break; break;
} }
if ( if (
!question.error !question.error &&
&& value.length < config.min value.length < config.min &&
&& ![1, 2].includes(config.text_type) ![1, 2].includes(config.text_type)
) { ) {
question.error = translatedText.value.PleaseEnterMoreThanOneCharacters(config.min); question.error = translatedText.value.PleaseEnterMoreThanOneCharacters(config.min);
} }
@@ -825,8 +825,8 @@ export default defineComponent({
const evt1 = {}; const evt1 = {};
if ([1].includes(question.question_type)) { if ([1].includes(question.question_type)) {
evt1.value evt1.value =
= Object.keys(question.answer) Object.keys(question.answer)
.map((key) => (question.answer[key] ? key : undefined)) .map((key) => (question.answer[key] ? key : undefined))
.filter((i) => !!i)?.[0] || undefined; .filter((i) => !!i)?.[0] || undefined;
evt1.options = question.list.flatMap((i) => i.options); evt1.options = question.list.flatMap((i) => i.options);

View File

@@ -24,7 +24,13 @@
<div v-if="status === 0 || status === 2" class="pulish-container"> <div v-if="status === 0 || status === 2" class="pulish-container">
<img class="not-publish-icon" src="@/assets/img/publish/not_pulish.png" alt="" /> <img class="not-publish-icon" src="@/assets/img/publish/not_pulish.png" alt="" />
<div class="text">点击"启用"按钮后问卷才可以开始回收数据</div> <div class="text">点击"启用"按钮后问卷才可以开始回收数据</div>
<van-button type="primary" style="margin-top: 20px" class="publish-btn" color="#70b936" @click="openPublishModal"> <van-button
type="primary"
style="margin-top: 20px"
class="publish-btn"
color="#70b936"
@click="openPublishModal"
>
<template #icon> <template #icon>
<i class="mobilefont mobilefont-fasong"></i> <i class="mobilefont mobilefont-fasong"></i>
</template> </template>
@@ -237,7 +243,7 @@ onMounted(async () => {
} }
} }
>img { > img {
border: 1px solid #ebebeb; border: 1px solid #ebebeb;
border-radius: 10px; border-radius: 10px;
width: 100px; width: 100px;

View File

@@ -6,8 +6,8 @@
</template> </template>
<script setup> <script setup>
const successImg const successImg =
= 'https://files.axshare.com/gsc/DR6075/c7/5a/53/c75a534148d349f1bb8e185629f784ac/images/%E9%A2%84%E8%A7%88/u123.png?pageId=18fb9d8a-b9b7-465f-9bd7-625b1b78f72e'; 'https://files.axshare.com/gsc/DR6075/c7/5a/53/c75a534148d349f1bb8e185629f784ac/images/%E9%A2%84%E8%A7%88/u123.png?pageId=18fb9d8a-b9b7-465f-9bd7-625b1b78f72e';
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>