{"version":3,"sources":["/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/webpack/bootstrap","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/tracer.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/store.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/MaterialUI/materialTheme.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/utilities/pageLogic.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/theme.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/NewScale.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/services/client.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/services/api.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/MaterialUI/MaterialSlider.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/MaterialUI/index.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/MaterialUI/Slider.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/Sort.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/ErrorBoundary.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/utilities/postMessage.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/constant.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/glbStyle.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/App.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/utilities/quest.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/utilities/common.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/mobile/Question/Sort.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/mobile/FormItem.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/mobile/Question/MaterialUI/Slider.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/mobile/Question/MaterialUI/index.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/Ending.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Header.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/env/ttp.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/env/index.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/IconFont/index.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/SingleChoice.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/MultiChoice.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/LongText.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/FillinLong.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/ShortText.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/FillinShort.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/Scale.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/DateChoice.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/LocChoice.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/Cascader.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/Matrix.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/Upload.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/PureDescription.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/common/Question/ShoppingOrder.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/utilities/language.js","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Header.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/InputSingleLine.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/MaterialUI/SingleSelect.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/SingleChoice.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/MultiChoice.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/LongText.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/ShortText.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/Scale.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/DateChoice.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/LocChoice.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/Cascader.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/Matrix.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/Upload.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/Sort.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Question/index.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Content.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Footer.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Layout.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/components/pc/Submitted.jsx","/opt/tiger/compile_path/src/code.byted.org/dp/survey_quest_fe/src/index.jsx"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","9","18","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","p","jsonpScriptSrc","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","Tea","init","app_id","channel_type","disable_auto_pv","config","log","process","includes","_staging_flag","isLocal","isRD","start","prevPageTitle","tracePageOpen","debounce","title","pageTitle","predefinePageView","url","location","href","getConf","teaConf","checkUndefined","traceShowQuestion","sum","sum_question","traceUpdateQuestion","question_order","question_id","reply_type","traceSubmitQuestionnaire","isSubmit","submit_questionnaire","traceExitQuestionnaire","exit","traceOnError","code","errStack","error_stack","error_code","Number","context","React","createContext","Consumer","Provider","theme","presetTheme","createMuiTheme","palette","primary","main","amEntityBg","replace","contrastText","textColor","secondary","overrides","MuiAutocomplete","root","borderRadius","color","MuiOutlinedInput","position","borderColor","antEntityBorder","borderWidth","MuiSvgIcon","MuiInputLabel","MuiFormLabel","MuiIconButton","PrettoSlider","withStyles","height","thumb","width","marginTop","marginLeft","background","border","boxShadow","active","valueLabel","top","left","marked","marginBottom","track","rail","opacity","mark","backgroundColor","markLabel","fontSize","fontWeight","markLabelActive","markActive","Slider","useStyles","makeStyles","spacing","margin","handleLimitTime","submitForm","basicLimit","clock","getElementById","limitTime","limitTimeTask","setInterval","h","Math","floor","innerHTML","style","transferDefaultDataToQuest","questionnaire","survey_id","surveyId","uid","userId","questionnaire_id","questionnaireId","did","deviceId","appId","quest","struct","titleHide","desc","description","customParams","callbackAddr","quotaStrategy","questLang","questBilingual","showEnQuest","navigatorLang","language","setLang","bilingual","direction","rtl","textDirection","textAlign","questions","forEach","el","index","optionFilter","dep","cons","map","con","findIndex","q","id","getPage","page","ret","current","total","scrollToTop","querySelector","scrollIntoView","scrollTop","getPageContentLogic","isNextEnd","pageQuestions","currentNo","currentPage","question","typeChecker","isPageBreak","no","retrieveDataAfterSubmit","res","showQuotaLimit","show_message","getLocalText","rnd","server_time","serverTime","hit_quota_strategy","quota_strategy","score","localStorage","removeItem","finish_redirect_url","finishUrl","preParams","getUrlParamsText","queries","isEmpty","concat","test","encodeURIComponent","filterNonAnswer","showAnswer","originAnswers","answers","thisAnswer","selected","text","degree","list","option_blank","keys","ua","navigator","userAgent","referer","origin","pathname","normalDark","primaryColor","textColorSecondary","questionBg","antTableHover","antMenuHover","antBg","antBorder","antEntityBg","antTableBorder","scaleSquare","inputBg","endingBg","btnText","sliderThumb","checkboxDisabledColor","classicalDark","technology","antCheckBg","linearGreen","linearPurple","chLight","lightWarm","lightCold","cyberpunk","NewScale","props","marks","onChange","min","max","styleType","descriptionType","device","ScaleBox","className","sort","a","b","Labels","onClick","flex","wordWrap","alignItems","Points","Nps","num","marksTop","filter","NpsSquare","cx","isScaleMatrix","starTo","Circle","styled","successHandle","response","errorHandle","JSON","stringify","status","statusText","baseURL","devTool","apiPathTransform","axios","defaults","Client","axiosClient","clientConfig","retry","interceptors","use","this","retriedErrorHandle","client","times","retryTimes","backOffDelay","info","then","params","option","defaultOpt","method","skipNotice","assign","headers","file","formData","FormData","append","getQuest","hashId","questId","sign","customs","urlParams","getUrlParams","host","submitQuest","CaseUtil","toSnake","post","getLocationMap","country","previewUrl","toLowerCase","hostUrl","MaterialSlider","isInsideMatrix","marksKeys","markLabels","k","label","_","useState","sliderVal","setSliderVal","newVal","onChangeCommitted","newValue","step","valueLabelDisplay","valueLabelFormat","isNaN","aria-labelledby","withPalette","UIComponent","_theme","sessionStorage","getItem","themesRepo","state","addEventListener","setState","PureComponent","classes","randomComp","random","randomOptions","options","saveNoRandomOptions","noRandom","pop","Sort","form","getFieldProps","initialValue","answer","formAnswer","getSelectedChange","optionId","clickedOptions","oldIndex","realShowOptions","find","item","task","setSelected","sourceId","targetId","sourceIndex","targetIndex","getRealShowOption","errorOption","custom","reverse","orderRealShowOptions","prevProps","prevState","prevQ","nextQ","input","errorSelected","errorText","getFieldError","getInputChange","click","handleClick","handleDrop","handleDragStart","children","nextProps","allQuestions","some","Component","RequestError","captureStackTrace","ErrorBoundary","throwError","restProps","TypeError","MainView","errorBoxCls","stack","vgap","toInt","hgap","css","postMessage","parent","debug","opener","showErrorQuestIds","getCustomizedHTML","customizedTheme","GlbStyleBox","Progress","lazy","Ending","isUrlToGenStamp","isUrlToDecrypt","sanitizeHtml","allowedTags","allowedAttributes","img","video","audio","String","html2Text","HTMLDecode","Window","setItem","newStorageEvent","createEvent","val","initStorageEvent","dispatchEvent","WrappedComponent","ConnectedComponent","delay","time","App","withRouter","resume","recycleUid","recycleProducts","questionFilter","visibles","nextState","msg","loading","_resetStoreFirstCall","cipherAns","AES","decrypt","split","parse","toString","ENC","LSAnswer","isReport","sso","cookie","match","gwm","creation","txt","fontFamily","forceUpdate","order","getOriginOrder","getQuestId","submitting","prompt","realPrompt","custom_answer","cost","Date","now","startTime","toFixed","md5","tiktok","getAppInfo","appInfo","getUserInfo","userInfo","apiParam","user_id","device_id","fans","resp","hasLoggedIn","userID","globalProps","__globalprops","getGlobalProps","capcut","app","warn","api","submitted","doAfterSubmit","finishImgUrl","finishImgScale","retrieved","fixedScore","round","showProgress","fallback","hit","filteredAnswers","qid","option_id","that","toCaml","element","offsetTop","turnPage","changed","traceUpdate","stringToEncrypt","cipher","encrypt","cipherUrl","answerKeys","isChoice","isScale","isMatrix","qs","action","submit","onSubmit","emptyAllAnswers","update","getPageContent","backLastPage","body","clientHeight","clientWidth","fetchQuest","getLocalQuest","entries","errorInfo","componentStack","evt","pointerEvents","print","customsPre","urlCustoms","join","retrieveDefaultAnswers","resetStore","showErrorInfoAfterSubmitBtn","i18n_prompt","errorCode","videoStyle","store","setUpStore","Helmet","enTitle","content","styles","progress","isDescription","LimitTime","IconFont","displayName","typeCheckerFn","isSingleSelectChoice","isSingleChoice","isMultiChoice","isLongText","isShortText","isLocation","isText","breakpoints","large","scale","medium","getQuotaText","reduce","accumulator","prefix","suffix","cls","simulateMobile","opt","basicOptText","enText","quota","optionsQuota","remaining","showRemaining","remainTips","showAll","amount","fullTips","checkDepRule","filterByQuestionId","lineId","thatQuestionSelectedOptionsIds","targetQuestion","targetOptions","existedOptIds","userInput","isTrap","jumpId","other","getRealShowLine","lines","depQuestionId","selectedIds","isOK","checked","optionIds","every","checkJumpOver","typeList","lastIndexOf","selectedId","multiJumpRules","qIndex","logic","jumpIndex","count","selectedIdsLength","checkNextEnd","inputChecker","restrictions","contentType","maxWords","minWords","openWordsRestriction","obj","values","v","str","errRet","parseInt","upperFirst","Array","isArray","keyCaml","toUpperCase","isObject","keyLine","offset","closest","selector","matchesSelector","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","copyEl","parentElement","getRealName","nameRef","enName","defaultName","reg","RegExp","reg2","refAns","textArray","substring","targetOption","selectedOption","randomArray","search","extra","filterXss","decodeURIComponent","substr","customAnswer","filterValue","temp","output","innerText","textContent","SortMobild","sortType","CustomDragLayer","OptionItem","isFirst","isLast","optionLen","useDrag","canDrag","begin","end","collect","monitor","isDragging","drag","preview","useEffect","getEmptyImage","captureDraggingState","useDrop","accept","hover","dragIndex","hoverIndex","drop","isOver","ref","userSelect","sortIndex","dragItemBox","paddingTop","paddingBottom","OptionTextRender","padding","dangerouslySetInnerHTML","__html","sanitize","lineHeight","alt","zoom","layerStyles","zIndex","useDragLayer","itemType","getItemType","initialOffset","getInitialSourceClientOffset","currentOffset","getSourceClientOffset","getItemStyles","display","x","y","transform","WebkitTransform","maxWidth","innerWidth","FormItem","listBoxCla","renderHeader","aReg","needIdReg","prePrompt","lottery_url","score_analysis","showAna","setShowAna","setPrompt","getRichOption","getRichOptions","resultIconBox","mask","acc","cur","ids","polyCur","AnalysisBox","option_answers","text_answers","question_type","text_answer","isFillin","correct","correct_text_answer","selectedText","correctText","getQuestionAnalysis","analysis","question_name","question_index","hide_question_no","goodJob","user_hit","isEqual","noOptionAnalysis","option_analysis","singleAnalysisCard","disabled","tagTitle","optionAnswers","getOptionAnalysis","dashed","EndingBox","icon","preventDefault","cursor","maxHeight","header","enDesc","titleColor","Header","defaultChecked","fontStyle","fontStretch","whiteSpace","require","TTP","cloneDeep","ttpConfig","createFromIconfontCN","scriptUrl","env","cdn","iconfont","IconFontComponent","defaultAnswer","SingleChoice","rules","callback","disabledOpts","required","otherRequired","otherChecked","optionBlank","nowAnswers","prevAnswers","nowThatQuestionSelectedOptionsIds","prevThatQuestionSelectedOptionsIds","setFieldsValue","validator","disabledOptIds","getOtherTextChange","MultiChoice","isFocus","indexOf","overDisabledIds","changeAnswer","selectedLength","lastOneId","mutex","one","onFocus","onBlur","LongText","enRestrictions","trim","checkRestrictions","checkResult","placeholder","getTextChange","FillinLong","ShortText","numberOnly","FillinShort","getDegreeChange","date","DateChoice","_rules","getDateChange","LocChoice","locationMap","hideDistrict","province","city","provinceLock","cityLock","getLocChange","selected_values","selected_ids","enOptions","optsText","defaultOpts","fir","sec","third","firOpt","secOpt","titles","enTitles","deviceWidth","Matrix","line","tmp","couldReturn","funcName","isSingleMatrix","getFormAnswer","lineSelected","lineKey","lineText","newText","transpose","splitMode","splitModeNew","splitQuestion","errorLine","linesKeys","thisLines","randomLine","lineIds","preThisAnswers","thisSelected","thisAnswers","getFieldValue","getSplitQuestion","isRandomOpts","getError","retrieveFunc","setIsFocus","realShowLines","newState","Upload","nowAnswer","prevAnswer","getFileListChange","fileList","withText","PureDescription","enDescription","descriptionWrapper","isMobile","ShoppingOrder","imgSrc","ctime","getMonth","getDate","imgRef","useRef","naturalWidth","naturalHeight","maxW","changeSize","getFullYear","select","languageMap","en","rest","cn","tc","ja","ko","pt","de","fr","it","hi","ta","te","ml","kn","mr","gu","bn","pa","bh","ar","tr","my","Russian","Spanish","Thai","Vietnamese","Filipino","back","headerCls","TextArea","maxwords","chosen","requestAnimationFrame","selectionStart","selectionEnd","focus","requiredIcon","autoHeightText","autoSize","countCls","Autocomplete","getOptionLabel","getOptionSelected","getOptionDisabled","renderInput","TextField","variant","fullWidth","InputLabelProps","shrink","RadioGroup","Group","Item","SingleChoicePC","displayType","splitCols","rowCounts","ceil","colsSpan","validateStatus","hasFeedback","help","fill","gutter","wrapperCol","span","radioCls","optionContentRender","InputSingleLine","overflow","minWidth","flexFlow","tips","controls","CheckboxGroup","MultiChoicePC","MultiChoiceGroupCls","Boolean","checkboxCls","LongTextPC","maxLength","minHeight","ShortTextPC","ScalePC","labels","Scale","DateChoicePC","size","allowClear","moment","dateString","LocChoicePC","showSearch","suffixIcon","Cascader","titleStr","choice","MatrixPC","columnLen","column","align","dataIndex","render","record","enLabel","colSpan","renderScale","onValueClick","superOnChange","selectedOne","selectedIdx","columns","getColumn","matrixWrap","dataSource","pagination","rowKey","previewVisible","previewImage","thumbUrl","beforeUpload","isFail","uploadButton","listType","onPreview","handlePreview","handleChange","visible","footer","onCancel","handleCancel","handleTextChange","SortPC","pauseAll","self","audios","from","querySelectorAll","pause","currentTime","Question","hideQuestionNo","wordBreak","marginRight","letterSpacing","common","QuestionFrame","renderBody","htmlReg","onlyShowContent","Content","formRef","handleFormRef","validateAllWithoutScroll","handleOnRef","updateAnswers","showLastPage","privacy","hidePageNo","doSubmit","Form","createForm","onValuesChange","submitStack","intervalID","acCurrent","timeLimit","timeRef","clearInterval","nextForm","validateFields","force","fields","submitStep","submitPromise","hide","resetFields","handleTimeLimit","okText","breakPageInfo","ContentWrap","right","execCommand","success","blur","arr","questionId","goBackPage","submitBtnCls","formShape","dir","Footer","Layout","Container","msgMainCls","msgInner","mainCls","Page","Loading","show","locale","enUS","zhCN","DndProvider","backend","HTML5Backend","renderMessage","renderLayout","mb","Submitted","Root","exact","path","component","ReactDOM"],"mappings":"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","file":"static/js/pc.bd46d761.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t9: 0,\n \t\t18: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"static/js/\" + ({}[chunkId]||chunkId) + \".\" + \"bd46d761\" + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"https://lf16-cdn-tos.tiktokcdn-us.com/obj/static-tx/dp/survey_quest_fe_ttp/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([894,11,4]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import Tea from 'byted-tea-sdk';\nimport { debounce } from 'throttle-debounce';\nimport { checkUndefined } from '@/utilities/common';\n\nTea.init({\n app_id: 1482,\n channel_type: 'ttp',\n disable_auto_pv: true,\n});\n\nTea.config({\n log: !process.env.NODE_ENV.includes('production'),\n _staging_flag: process.env.NODE_ENV.includes('production') ? 0 : 1,\n});\n\nif (!window.isLocal && !window.isRD) {\n Tea.start();\n}\n\nlet prevPageTitle = '';\nexport const tracePageOpen = debounce(150, (title = '') => {\n const pageTitle = title;\n if (prevPageTitle === pageTitle) {\n return;\n }\n // 改变页面title\n // 发送pageview事件。\n if (!window.isLocal && !window.isRD) {\n Tea.predefinePageView({\n title: pageTitle,\n url: window.location.href,\n });\n }\n prevPageTitle = pageTitle;\n});\n\nconst getConf = () => {\n const { teaConf } = window;\n if (!teaConf || !checkUndefined(teaConf)) return {};\n return window.teaConf;\n};\n\nexport const traceShowQuestion = sum => {\n if (window.isLocal || window.isRD || typeof sum !== 'number') return;\n console.log('Tea traceShowQuestion');\n Tea.event('show_questionnaire', { ...getConf(), sum_question: sum });\n};\n\nexport const traceUpdateQuestion = debounce(300, (type, question_order, question_id) => {\n if (window.isLocal || window.isRD) return;\n Tea.event('update_questionnaire', {\n ...getConf(),\n reply_type: type ? 1 : 0,\n question_order,\n question_id,\n });\n});\n\nexport const traceSubmitQuestionnaire = isSubmit => {\n if (window.isLocal || window.isRD) return;\n Tea.event('submit_questionaire', {\n ...getConf(),\n submit_questionnaire: isSubmit ? 1 : 0,\n });\n};\n\nexport const traceClickAdv = () => {\n if (window.isLocal || window.isRD) return;\n Tea.event('click_advertisement', {\n ...getConf(),\n url: window.location.href,\n });\n};\n\nexport const traceExitQuestionnaire = exit => {\n if (window.isLocal || window.isRD) return;\n Tea.event('exit_questionnaire', { ...getConf(), exit: exit ? 1 : 0 });\n};\n\n// 报错时埋点\nexport const traceOnError = (error, code, errStack) => {\n Tea.event('on_error_code', {\n ...getConf(),\n error,\n error_stack: errStack,\n error_code: Number(code),\n url: window.location.href,\n });\n};\n\n// 卸载时上报性能数据","import React from 'react';\n\nconst context = React.createContext({});\n\nexport const { Consumer, Provider } = context;\n","import {\n createMuiTheme,\n withStyles,\n makeStyles,\n} from '@material-ui/core/styles';\nimport Slider from '@material-ui/core/Slider';\n\nexport const theme = presetTheme =>\n (presetTheme\n ? createMuiTheme({\n palette: {\n primary: {\n main: presetTheme.amEntityBg.replace(' !important', ''),\n contrastText: presetTheme.textColor.replace(' !important', ''),\n },\n secondary: {\n main: presetTheme.amEntityBg.replace(' !important', ''),\n contrastText: presetTheme.textColor.replace(' !important', ''),\n },\n },\n overrides: {\n MuiAutocomplete: {\n root: {\n borderRadius: 4,\n color: presetTheme.textColor.replace(' !important', ''),\n },\n },\n MuiOutlinedInput: {\n root: {\n color: presetTheme.textColor.replace(' !important', ''),\n position: 'relative',\n '& $notchedOutline': {\n borderColor: presetTheme.antEntityBorder.replace(\n ' !important',\n '',\n ),\n },\n '&:hover:not($disabled):not($focused):not($error) $notchedOutline': {\n borderColor: presetTheme.antEntityBorder.replace(\n ' !important',\n '',\n ),\n '@media (hover: none)': {\n borderColor: presetTheme.antEntityBorder.replace(\n ' !important',\n '',\n ),\n },\n },\n '&$focused $notchedOutline': {\n borderColor: presetTheme.antEntityBorder.replace(\n ' !important',\n '',\n ),\n borderWidth: 1,\n },\n },\n },\n MuiSvgIcon: {\n root: {\n color: presetTheme.textColor.replace(' !important', ''),\n },\n },\n MuiInputLabel: {\n root: {\n color: presetTheme.textColor.replace(' !important', ''),\n },\n },\n MuiFormLabel: {\n root: {\n color: presetTheme.textColor.replace(' !important', ''),\n },\n },\n MuiIconButton: {\n root: {\n color: presetTheme.textColor.replace(' !important', ''),\n },\n },\n },\n })\n : createMuiTheme({\n palette: {\n primary: {\n main: '#3370ff',\n },\n },\n }));\n\nexport const PrettoSlider = withStyles({\n root: {\n height: 12,\n color: 'var(--text-color)',\n },\n thumb: {\n height: 30,\n width: 30,\n marginTop: -12,\n marginLeft: -16,\n background: 'var(--slider-thumb)',\n color: 'var(--primary-color)',\n border: '2px solid var(--primary-color)',\n boxShadow: '0 1px 4px 1px rgba(0,0,0,.2)',\n },\n active: {},\n valueLabel: {\n top: 7,\n left: 'calc(-50% + 10px)',\n '& *': {\n background: 'transparent',\n color: 'var(--primary-color)',\n },\n },\n marked: {\n marginTop: 20,\n marginBottom: 5,\n },\n track: {\n height: 8,\n borderRadius: 4,\n color: 'var(--primary-color)',\n },\n rail: {\n height: 8,\n opacity: 0.4,\n borderRadius: 4,\n color: 'var(--primary-color)',\n },\n mark: {\n backgroundColor: 'var(--text-color-secondary)',\n height: 2,\n width: 2,\n marginTop: 3,\n },\n markLabel: {\n fontSize: 12,\n fontWeight: 550,\n color: 'var(--text-color)',\n top: -25,\n },\n markLabelActive: {\n color: 'var(--primary-color)',\n },\n markActive: {\n opacity: 1,\n backgroundColor: 'var(--question-bg)',\n },\n})(Slider);\n\nexport const useStyles = makeStyles(theme => ({\n root: {\n width: 300 + theme.spacing(3) * 2,\n },\n margin: {\n height: theme.spacing(3),\n },\n}));\n","import { message } from 'antd';\nimport isEmpty from 'lodash/isEmpty';\nimport { typeChecker } from './quest';\nimport { getLocalText, navigatorLang } from './language';\nimport { getUrlParamsText } from './common';\n\n\nexport const setLang = (questLang, questBilingual = false) => {\n window.showEnQuest = questBilingual && navigatorLang === 'en';\n window.language = questBilingual ? navigatorLang : questLang;\n};\n\nexport const handleLimitTime = (submitForm, basicLimit) => {\n const clock = document.createElement('span');\n document.getElementById('limitTimeRef').appendChild(clock);\n let limitTime = basicLimit;\n window.limitTimeTask = setInterval(() => {\n if (limitTime === 0) {\n submitForm && submitForm();\n clearTimeout(window.limitTimeTask);\n return;\n }\n limitTime -= 1;\n let h = Math.floor(limitTime / 3600);\n if (h < 10) {\n h = `0${h}`;\n }\n let m = Math.floor((limitTime % 3600) / 60);\n if (m < 10) {\n m = `0${m}`;\n }\n let s = limitTime % 60;\n if (s < 10) {\n s = `0${s}`;\n }\n clock.innerHTML = `${h}:${m}:${s}`;\n if (limitTime < 60) {\n clock.style.color = 'red';\n }\n }, 1000);\n};\n\nexport const transferDefaultDataToQuest = questionnaire => {\n // 获得 埋点信息\n window.teaConf = {\n survey_id: questionnaire.surveyId,\n uid: questionnaire.userId,\n questionnaire_id: questionnaire.questionnaireId,\n did: questionnaire.deviceId,\n app_id: questionnaire.appId,\n };\n const quest = questionnaire.struct;\n quest.title = questionnaire.name;\n quest.titleHide = questionnaire.struct.titleHide;\n quest.desc = questionnaire.description;\n quest.customParams = questionnaire.customParams;\n quest.callbackAddr = questionnaire.callbackAddr;\n quest.quotaStrategy = questionnaire.quotaStrategy; // 选项配额\n quest.uid = questionnaire.userId;\n quest.did = questionnaire.deviceId;\n\n // if (!quest.titleHide) {\n // document.title = quest.title;\n // }\n\n setLang(quest.language, quest.bilingual);\n\n const direction = quest?.direction || 'ltr';\n const rtl = direction === 'rtl';\n window.textDirection = {\n direction,\n textAlign: rtl ? 'right' : 'start',\n };\n\n quest.questions.forEach((el, index) => {\n // optionFilter === null 的bug\n if (el.optionFilter === null) {\n delete el.optionFilter;\n }\n // 显示逻辑在后面的bug\n (el.dep?.cons || []).map((con, i) => {\n const conIndex = quest.questions.findIndex(q => q.id === con.id);\n if (conIndex >= index) {\n el.dep.cons.splice(i, 1);\n }\n return con;\n });\n });\n return quest;\n};\n\nexport const getPage = ({ p, page }) => {\n const ret = {\n current: p.current || page.current,\n total: p.total || page.total,\n };\n if (ret.current > ret.total) ret.current = ret.total;\n if (ret.current === page.current && ret.total === page.total) return null;\n return { page: ret };\n};\n\nexport const scrollToTop = () => {\n if (document.querySelector('.header-pic')) {\n document.querySelector('.header-pic').scrollIntoView();\n } else if (document.querySelector('.header')) {\n document.querySelector('.header').scrollIntoView();\n } else if (document.querySelector('#mobileContainer')) {\n document.querySelector('#mobileContainer').scrollTop = 0;\n } else if (document.querySelector('#pcContainer')) {\n document.querySelector('#pcContainer').scrollTop = 0;\n }\n};\n\nexport const getPageContentLogic = (questions, current, isNextEnd) => {\n const pageQuestions = [];\n let currentNo = 0; // 当前的题目从currentNo开始\n // currentPage: 当前遍历的是第几页的题目\n for (let i = 0, currentPage = 0; i < questions.length; i++) {\n const question = questions[i];\n // 每页的题目都是以page_break开始的\n if (typeChecker.isPageBreak(question)) {\n currentPage++;\n // 如果++之后的页码就是要取的页面页码 则开始取题\n if (currentPage === current) {\n pageQuestions.push(question);\n }\n continue;\n }\n // 如果\n if (currentPage < current) {\n if (question.type !== 'description') {\n currentNo++;\n }\n continue;\n }\n if (currentPage > current) break;\n pageQuestions.push(question);\n }\n return {\n no: currentNo,\n questions: pageQuestions,\n isNextEnd: isNextEnd\n };\n};\n\nexport const retrieveDataAfterSubmit = ({\n res,\n showQuotaLimit,\n id,\n location,\n}) => {\n const { show_message } = res;\n let title = show_message ? show_message : getLocalText('Submit.success'); // '提交成功'\n let type = 'success';\n if (res.code === 400) {\n title = getLocalText('RequestError.400');\n message.error(title);\n type = 'error';\n return;\n } else if (res.code > 400 && res.code < 500) {\n title = getLocalText('RequestError.biggerThan400');\n message.error(title);\n type = 'error';\n return;\n } else if (res.code >= 500) {\n title = getLocalText('RequestError.biggerThan500');\n message.error(title);\n type = 'error';\n return;\n } else if (res.code === 0) {\n title = res.message;\n message.error(title);\n type = 'error';\n return;\n } else if (res.code === 299) {\n // 配额已满\n message.error(title);\n const { data, rnd, server_time } = res;\n window.rnd = rnd;\n window.serverTime = server_time;\n type = 'error';\n data.hit_quota_strategy?.[0]\n && showQuotaLimit(data.hit_quota_strategy[0], data.quota_strategy);\n return;\n }\n\n let { data } = res;\n if (!data) data = {};\n if (window.isRD) {\n data.score = data.score ?? 1000;\n // localStorage.removeItem(this.state.id); RD就留着吧 方便下次直接提交\n } else {\n // 提交成功的话清除 localStorage中的答案\n try {\n localStorage.removeItem(id);\n } catch (error) {\n console.error('get LSAnswer error: ', error.message);\n }\n }\n\n // 跳转到指定url的逻辑优先于其他显示\n const { score, finish_redirect_url } = data;\n let finishUrl = finish_redirect_url;\n if (finish_redirect_url) {\n const preParams = getUrlParamsText(location);\n let queries = preParams;\n if (score !== undefined) {\n queries = isEmpty(preParams)\n ? `score=${score}`\n : preParams.concat(`&score=${score}`);\n }\n if (!/^\\?/.test(queries) && !/\\?$|\\/\\?/.test(finish_redirect_url)) {\n queries = queries.replace(/^&/, '');\n } else {\n queries = queries.replace(/^\\?/, '');\n }\n finishUrl = queries ? `${finishUrl}?` : finishUrl;\n window.location.href = finishUrl.concat(encodeURIComponent(queries));\n }\n\n return { data, score, title, type };\n};\n\n// 去掉没有显示的题目的答案\nexport const filterNonAnswer = (showAnswer, originAnswers, questions) => {\n const answers = {};\n for (let i = 0; i < questions.length; i++) {\n const { id, type } = questions[i];\n const thisAnswer = showAnswer[id] || originAnswers[id];\n if (!thisAnswer) continue;\n if (\n ['single', 'multi', 'singleSelect'].includes(type)\n && thisAnswer.selected.length === 0\n ) {\n continue;\n }\n if (\n ['short', 'long'].includes(type)\n && thisAnswer\n && thisAnswer.text === ''\n ) continue;\n if (type === 'scale' && thisAnswer.degree === 'undefined') continue;\n if (type === 'upload' && thisAnswer.list.length === 0) continue;\n if (type === 'location' && thisAnswer.location.length === 0) continue;\n // 选项填空 删除没有选择的填空\n if (['single', 'multi'].includes(type)) {\n if (thisAnswer.option_blank) {\n Object.keys(thisAnswer.option_blank).forEach(key => {\n if (!thisAnswer.selected.includes(key)) {\n delete thisAnswer.option_blank[key];\n }\n });\n }\n }\n answers[id] = thisAnswer;\n }\n answers.rnd = window.rnd;\n answers.server_time = window.serverTime;\n answers.ua = window.navigator.userAgent;\n answers.referer = window.location.origin + window.location.pathname;\n return answers;\n};\n","const theme = {\n normalDark: {\n primaryColor: '#ffa200 !important',\n textColor: '#AA8866 !important',\n textColorSecondary: '#6c553a !important',\n questionBg: '#272727 !important',\n antTableHover: 'rgba(49, 94, 251, 0.09) !important',\n antMenuHover: 'rgba(49, 94, 251, 0.03) !important',\n antBg: 'transparent !important',\n antBorder: '#AA8866 !important',\n amEntityBg: 'rgba(255,255,255,0.1) !important',\n antEntityBg: '#272727 !important',\n antEntityBorder: '#AA8866 !important',\n antTableBorder: '#6c553a !important',\n scaleSquare: '#272727 !important',\n backgroundColor: '#000000 !important',\n inputBg: 'transparent !important',\n endingBg: '#000000 !important',\n btnText: '#272727 !important',\n sliderThumb: '#272727 !important',\n checkboxDisabledColor: '#62625a !important',\n },\n classicalDark: {\n primaryColor: '#f49e32 !important',\n textColor: '#d6ddf2 !important',\n textColorSecondary: '#7d86a2 !important',\n questionBg: '#3a4461 !important',\n antTableHover: 'rgba(49, 94, 251, 0.09) !important',\n antMenuHover: 'rgba(49, 94, 251, 0.03) !important',\n antBg: 'transparent !important',\n antBorder: '#d6ddf2 !important',\n antEntityBg: '#3a4461 !important',\n amEntityBg: 'rgba(255,255,255,0.1) !important',\n antEntityBorder: '#d6ddf2 !important',\n antTableBorder: '#7d86a2 !important',\n scaleSquare: '#3a4461 !important',\n backgroundColor: '#253050 !important',\n inputBg: 'rgba(255,255,255,0.1) !important',\n endingBg: '#253050 !important',\n btnText: '#253050 !important',\n sliderThumb: '#3a4461 !important',\n checkboxDisabledColor: '#758b98 !important',\n },\n technology: {\n primaryColor: '#f49e32 !important',\n textColor: '#d6ddf2 !important',\n textColorSecondary: '#727783 !important',\n questionBg: 'linear-gradient(#1f0d62, #513220) !important',\n antTableHover: 'rgba(49, 94, 251, 0.09) !important',\n antMenuHover: 'rgba(49, 94, 251, 0.03) !important',\n antBg: 'transparent !important',\n antBorder: '#727783 !important',\n antEntityBg: 'linear-gradient(#1f0d62, #513220) !important',\n amEntityBg: 'rgba(255,255,255,0.1) !important',\n antEntityBorder: '#727783 !important',\n antTableBorder: '#727783 !important',\n scaleSquare: 'rgba(255,255,255,0.1) !important',\n backgroundColor: '#000000 !important',\n antCheckBg: '#1f0d62 !important',\n inputBg: 'rgba(255,255,255,0.1) !important',\n endingBg: 'linear-gradient(#1f0d62, #513220) !important',\n sliderThumb: 'linear-gradient(#1f0d62, #513220) !important',\n checkboxDisabledColor: '#684e84 !important',\n },\n linearGreen: {\n primaryColor: '#fab921 !important',\n textColor: '#fdfff0 !important',\n textColorSecondary: '#d4e4c3 !important',\n questionBg: 'rgba(0,0,100,0.1) !important',\n antTableHover: 'rgba(49, 94, 251, 0.09) !important',\n antMenuHover: 'rgba(49, 94, 251, 0.03) !important',\n antBg: 'transparent !important',\n antBorder: '#d4e4c3 !important',\n antEntityBg: '#6e948c !important',\n amEntityBg: 'rgba(255,255,255,0.1) !important',\n antEntityBorder: '#d4e4c3 !important',\n antTableBorder: '#d4e4c3 !important',\n scaleSquare: 'rgba(255,255,255,0.1) !important',\n antCheckBg: '#577e80 !important',\n backgroundColor: 'linear-gradient(#577e80, #85bb7f) !important',\n inputBg: 'rgba(255,255,255,0.1) !important',\n endingBg: 'linear-gradient(#577e80, #85bb7f) !important',\n btnText: '#577e80 !important',\n checkboxDisabledColor: '#a7c9c3 !important',\n },\n linearPurple: {\n primaryColor: '#21fae7 !important',\n textColor: '#fff !important',\n textColorSecondary: '#c19ac9 !important',\n questionBg: 'rgba(255,255,255,0.1) !important',\n antTableHover: 'rgba(49, 94, 251, 0.09) !important',\n antMenuHover: 'rgba(49, 94, 251, 0.03) !important',\n antBg: 'transparent !important',\n antBorder: '#c19ac9 !important',\n antEntityBg: 'linear-gradient(#3b0d62, #67228e) !important',\n amEntityBg: 'rgba(255,255,255,0.1) !important',\n antEntityBorder: '#c19ac9 !important',\n antTableBorder: '#c19ac9 !important',\n scaleSquare: 'rgba(255,255,255,0.1) !important',\n antCheckBg: '#3b0d62 !important',\n backgroundColor: 'linear-gradient(#3b0d62, #67228e) !important',\n inputBg: 'rgba(255,255,255,0.1) !important',\n endingBg: 'linear-gradient(#3b0d62, #67228e) !important',\n btnText: '#3b0d62 !important',\n sliderThumb: 'linear-gradient(#3b0d62, #67228e) !important',\n checkboxDisabledColor: '#927ca7 !important',\n },\n chLight: {\n primaryColor: '#a9cd4e !important',\n textColor: '#3c8e86 !important',\n textColorSecondary: '#9bb9b5 !important',\n questionBg: '#fbfaf5 !important',\n antTableHover: 'rgba(49, 94, 251, 0.09) !important',\n antMenuHover: 'rgba(49, 94, 251, 0.03) !important',\n antBg: 'rgba(255,255,255,0.1) !important',\n antBorder: '#9bb9b5 !important',\n antEntityBg: '#fbfaf5 !important',\n amEntityBg: 'rgba(239, 238, 234, 0.8) !important',\n antEntityBorder: '#9bb9b5 !important',\n antTableBorder: '#9bb9b5 !important',\n scaleSquare: 'rgba(255,255,255,0.1) !important',\n backgroundColor: '#efeeea !important',\n inputBg: '#fbfaf5 !important',\n endingBg: '#fbfaf5 !important',\n btnText: '#fbfaf5 !important',\n sliderThumb: '#fbfaf5 !important',\n checkboxDisabledColor: '#c7c7c7 !important',\n },\n lightWarm: {\n primaryColor: '#ffab15 !important',\n textColor: '#593c2b !important',\n textColorSecondary: '#aaa198 !important',\n questionBg: '#fff !important',\n antTableHover: 'rgba(49, 94, 251, 0.09) !important',\n antMenuHover: 'rgba(49, 94, 251, 0.03) !important',\n antBg: 'rgba(255,255,255,0.1) !important',\n antBorder: '#aaa198 !important',\n antEntityBg: '#fff !important',\n amEntityBg: 'rgb(252, 243, 226, 0.6) !important',\n antEntityBorder: '#aaa198 !important',\n antTableBorder: '#aaa198 !important',\n scaleSquare: 'rgba(255,255,255,0.1) !important',\n backgroundColor: '#fcf3e2 !important',\n inputBg: 'transparent !important',\n endingBg: '#fcf3e2 !important',\n btnText: '#fff !important',\n sliderThumb: '#fff !important',\n checkboxDisabledColor: '#c7c7c7 !important',\n },\n lightCold: {\n primaryColor: '#6490e5 !important',\n textColor: '#444951 !important',\n textColorSecondary: '#b6c1cd !important',\n questionBg: '#fff !important',\n antTableHover: 'rgba(49, 94, 251, 0.09) !important',\n antMenuHover: 'rgba(49, 94, 251, 0.03) !important',\n antBg: 'rgba(255,255,255,0.1) !important',\n antBorder: '#b6c1cd !important',\n antEntityBg: '#fff !important',\n amEntityBg: 'rgb(231, 236, 242, 0.6) !important',\n antEntityBorder: '#b6c1cd !important',\n antTableBorder: '#b6c1cd !important',\n scaleSquare: 'rgba(255,255,255,0.1) !important',\n backgroundColor: '#e7ecf2 !important',\n inputBg: 'rgba(255,255,255,0.1) !important',\n endingBg: '#e7ecf2 !important',\n btnText: '#fff !important',\n sliderThumb: '#fff !important',\n checkboxDisabledColor: '#c7c7c7 !important',\n },\n cyberpunk: {\n primaryColor: '#2ad3bd !important',\n textColor: '#e7eeff !important',\n textColorSecondary: '#a1afcf !important',\n questionBg: '#2f4a5c !important',\n antTableHover: 'rgba(49, 94, 251, 0.09) !important',\n antMenuHover: 'rgba(49, 94, 251, 0.03) !important',\n antBg: 'transparent !important',\n antBorder: '#a1afcf !important',\n antEntityBg: '#2f4a5c !important',\n amEntityBg: 'rgb(231, 236, 242, 0.1) !important',\n antEntityBorder: '#a1afcf !important',\n antTableBorder: '#a1afcf !important',\n scaleSquare: 'rgba(255,255,255,0.1) !important',\n backgroundColor: '#243e4d !important',\n inputBg: 'rgba(255,255,255,0.1) !important',\n endingBg: '#243e4d !important',\n btnText: '#2f4a5c !important',\n sliderThumb: '#2f4a5c !important',\n checkboxDisabledColor: '#94b7e3 !important',\n },\n};\n\nexport default theme;\n","import React from 'react';\nimport { cx } from 'emotion';\nimport styled from '@emotion/styled';\nimport PCSlider from '../../pc/Question/MaterialUI/Slider';\nimport MobileSlider from '../../mobile/Question/MaterialUI/Slider';\nimport IconFont from '@/components/common/IconFont';\n\nexport default function NewScale(props) {\n const {\n marks,\n onChange,\n selected,\n min,\n max,\n styleType,\n question,\n descriptionType = 'top',\n // options, // 没有用到 目前只有在跳转逻辑中有使用\n style = {},\n device = 'pc',\n } = props;\n\n return (\n \n {styleType !== 'slider' && (\n <>\n \n {Object.keys(marks)\n .sort((a, b) => a - b)\n .map(key => {\n const flex = '1 1 10%';\n const textAlign = 'center';\n const alignItems = 'center';\n if (marks[key]) {\n return (\n onChange(key)}\n style={{\n flex,\n textAlign,\n wordWrap: 'word-break',\n alignItems,\n }}\n className=\"flex1 columnFlex justifyBetween pointer no-touch\"\n >\n {descriptionType === 'top' ? marks[key] : key || ''}\n \n );\n }\n return
;\n })}\n
\n \n {Object.keys(marks)\n .sort((a, b) => a - b)\n .map(key => (\n
\n {marks[key] &&
}\n
\n ))}\n
\n \n )}\n {styleType === 'point' && }\n {styleType === 'nps' && (\n \n )}\n {/* {styleType === \"emoji\" && (\n \n )} */}\n {styleType === 'star' && (\n \n )}\n {styleType === 'slider'\n && (device === 'pc' ? (\n \n ) : (\n \n ))}\n {descriptionType === 'down' && (\n
\n {Object.keys(marks)\n .filter(key => !!marks[key])\n .sort((a, b) => a - b)\n .map(key => (\n
\n
{key}
\n {marks[key]}\n
\n ))}\n
\n )}\n
\n );\n}\n\nexport function Nps(props) {\n const { marks, selected, onChange, device } = props;\n return (\n \n {Object.keys(marks)\n .sort((a, b) => a - b)\n .map((key, i) => (\n = Number(key) && 'selected', 'number')}\n onClick={() => onChange(key)}\n >\n
{i}
\n
\n
\n ))}\n
\n );\n}\n\n// export function Emoji(props) {\n// const { marks, selected, onChange } = props;\n// return (\n//
\n//
\n// {Object.keys(marks)\n// .sort((a, b) => a - b)\n// .map((key, i) => (\n// onChange(key)}\n// >\n// \n//
\n// ))}\n//
\n// \n// );\n// }\n\nexport function Points(props) {\n // Points的selected是option id\n const { marks, selected, onChange, styleType = 'square', isScaleMatrix = false } = props;\n return (\n
\n {Object.keys(marks).map((key, i) => {\n const starTo = Object.keys(marks).findIndex(el => el === selected);\n return (\n onChange(key)}\n >\n
\n {styleType === 'square' && (isScaleMatrix ? i + 1 : key)}\n {styleType === 'star' && (\n <>\n = i) }}\n color=\"orange\"\n />\n \n \n )}\n
\n \n );\n })}\n
\n );\n}\n\nconst ScaleBox = styled.div`\n width: 100%;\n margin-left: 0px;\n margin-right: 0px;\n .topMarks {\n font-size: 13px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--text-color);\n .labelPoint {\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background-color: var(--text-color-secondary);\n }\n }\n .bottomMarks {\n margin-top: 32px;\n font-size: 0.9rem;\n font-weight: 400;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--text-color-secondary);\n .number {\n width: 15px;\n margin-right: 8px;\n }\n & > div {\n margin-bottom: 12px;\n }\n & > div:last-child {\n margin-bottom: 0;\n }\n }\n`;\n\nconst Circle = styled.div`\n height: 48px;\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n line-height: 1.5;\n div {\n height: 100%;\n width: 100%;\n margin: 2px;\n cursor: pointer;\n border-radius: 2px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 1rem;\n\n }\n &.square {\n &.selected div {\n background: var(--primary-color);\n border-color: var(--primary-color);\n color: var(--btn-text);\n }\n &:not(.selected) div {\n background: var(--scale-square);\n border: 1px solid var(--ant-entity-border);\n color: var(--text-color);\n &:hover {\n border-radius: 2px;\n border: solid 1px var(--primary-color);\n background-color: rgba(49, 94, 251, 0.09);\n }\n }\n }\n}\n`;\nconst Labels = styled.div`\n .labelPoint {\n width: 4px;\n height: 4px;\n border-radius: 50%;\n background-color: var(--text-color);\n }\n`;\n\nconst NpsSquare = styled.div`\n display: flex;\n justify-content: space-evenly;\n .number {\n display: inline-block;\n margin-right: 2px;\n ${props =>\n (props.device === 'mobile'\n ? `&:not(.selected) {\n opacity: 0.3;\n }`\n : `&:hover {\n opacity: 1;\n }`)}\n &,\n &:focus {\n opacity: 0.4;\n }\n &.selected {\n opacity: 1;\n }\n &:last-child {\n margin-right: 0;\n }\n .number-tips {\n height: ${props => (props.device === 'mobile' ? 20 : 40)}px;\n }\n .nps-item {\n height: ${props => (props.device === 'mobile' ? 47 : 55)}px;\n width: calc((100vw - 65px) / 11);\n max-width: 55px;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 2px;\n color: #fff;\n text-align: center;\n font-size: 15px;\n margin-bottom: 3px;\n cursor: pointer;\n box-sizing: border-box;\n }\n &:nth-of-type(1) .number-tips {\n border-top: 1px solid rgb(225, 124, 120);\n background-image: linear-gradient(\n to bottom,\n rgba(248, 213, 213, 1) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n &:nth-of-type(2) .number-tips {\n border-top: 1px solid rgb(225, 124, 120);\n background-image: linear-gradient(\n to bottom,\n rgba(248, 213, 213) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n &:nth-of-type(3) .number-tips {\n border-top: 1px solid rgb(225, 124, 120);\n background-image: linear-gradient(\n to bottom,\n rgba(248, 213, 213) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n &:nth-of-type(4) .number-tips {\n border-top: 1px solid rgb(225, 124, 120);\n background-image: linear-gradient(\n to bottom,\n rgba(248, 213, 213) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n &:nth-of-type(5) .number-tips {\n border-top: 1px solid rgb(225, 124, 120);\n background-image: linear-gradient(\n to bottom,\n rgb(248, 213, 213) 0%,\n rgb(255, 255, 255, 0) 100%\n );\n }\n &:nth-of-type(6) .number-tips {\n border-top: 1px solid rgb(225, 124, 120);\n background-image: linear-gradient(\n to bottom,\n rgba(248, 213, 213) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n &:nth-of-type(7) .number-tips {\n border-top: 1px solid rgb(225, 124, 120);\n background-image: linear-gradient(\n to bottom,\n rgba(248, 213, 213) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n &:nth-of-type(8) .number-tips {\n border-top: 1px solid rgb(247, 196, 108);\n background-image: linear-gradient(\n to bottom,\n rgba(252, 232, 196) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n &:nth-of-type(9) .number-tips {\n border-top: 1px solid rgb(247, 196, 108);\n background-image: linear-gradient(\n to bottom,\n rgba(252, 232, 196) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n &:nth-of-type(10) .number-tips {\n border-top: 1px solid rgb(148, 185, 108);\n background-image: linear-gradient(\n to bottom,\n rgba(214, 227, 197) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n &:nth-of-type(11) .number-tips {\n border-top: 1px solid rgb(148, 185, 108);\n background-image: linear-gradient(\n to bottom,\n rgba(214, 227, 197) 0%,\n rgba(255, 255, 255, 0) 100%\n );\n }\n &:nth-of-type(1) .nps-item {\n background-image: linear-gradient(141deg, rgb(222, 111, 107) 0%, rgb(222, 115, 112) 75%);\n }\n &:nth-of-type(2) .nps-item {\n background-image: linear-gradient(141deg, rgb(222, 111, 107) 0%, rgb(222, 115, 112) 75%);\n }\n &:nth-of-type(3) .nps-item {\n background-image: linear-gradient(141deg, rgb(222, 111, 107) 0%, rgb(222, 115, 112) 75%);\n }\n &:nth-of-type(4) .nps-item {\n background-image: linear-gradient(141deg, rgb(222, 111, 108) 0%, rgb(222, 115, 112) 75%);\n }\n &:nth-of-type(5) .nps-item {\n background-image: linear-gradient(141deg, rgb(222, 111, 108) 0%, rgb(222, 115, 112) 75%);\n }\n &:nth-of-type(6) .nps-item {\n background-image: linear-gradient(\n to right,\n rgb(224, 115, 107) 0%,\n rgb(226, 121, 106) 30%,\n rgb(230, 137, 101) 75%\n );\n }\n &:nth-of-type(7) .nps-item {\n background-image: linear-gradient(\n to right,\n rgb(230, 137, 101) 0%,\n rgb(230, 135, 99) 30%,\n rgb(239, 166, 97) 95%\n );\n }\n &:nth-of-type(8) .nps-item {\n background-image: linear-gradient(\n to right,\n rgb(240, 173, 96) 0%,\n rgb(243, 182, 95) 40%,\n rgb(241, 187, 93) 75%\n );\n }\n &:nth-of-type(9) .nps-item {\n background-image: linear-gradient(\n to right,\n rgb(241, 187, 93) 0%,\n rgb(243, 182, 95) 40%,\n rgb(219, 186, 96) 98%\n );\n }\n &:nth-of-type(10) .nps-item {\n background-image: linear-gradient(\n to right,\n rgb(219, 186, 96) 0%,\n rgb(204, 186, 96) 40%,\n rgb(184, 184, 95) 75%\n );\n }\n &:nth-of-type(11) .nps-item {\n margin-right: 0 !important;\n background-image: linear-gradient(\n to right,\n rgb(162, 181, 95) 0%,\n rgb(149, 180, 94) 40%,\n rgb(138, 179, 95) 75%\n );\n }\n }\n`;\n","import { message } from 'antd';\nimport axios from 'axios';\nimport devTool from 'fe-dev-tool';\nimport { traceOnError } from '../tracer';\n\nfunction successHandle(result) {\n const { data: response } = result;\n if (typeof response !== 'object') return response;\n if (response.code >= 200 && response.code <= 299) {\n return response;\n }\n if (response.code === 401) {\n window.location.href = `/accounts/login?next=${encodeURIComponent(\n window.location.href,\n )}`;\n\n return Promise.reject(response);\n }\n return Promise.reject(response);\n}\n\nfunction errorHandle(error) {\n traceOnError(error.message, error.code, JSON.stringify(error));\n const { response } = error;\n let reject = {};\n if (response && response.data) {\n const { res = {} } = response.data;\n reject = {\n code: res.code,\n message: res.message,\n };\n }\n if (response && !response.data) {\n reject = {\n code: response.status,\n message: response.statusText,\n };\n }\n if (!response) {\n reject = {\n code: 400,\n message: error.message,\n };\n }\n // 有些时候,Python服务器返回500 但message却是OK\n if (reject.code === 500) {\n reject.message = '服务器错误';\n }\n return Promise.reject(reject);\n}\n\nlet baseURL = devTool.apiPathTransform(\n process.env.BROWSER_REQUEST_PREFIEX || '/',\n);\naxios.defaults.baseURL = baseURL;\n\nif (!/\\/$/.test(baseURL)) baseURL = `${baseURL}/`;\n\nexport default class Client {\n static clientConfig = {\n baseURL,\n timeout: process.env.BROWSER_REQUEST_TIMEOUT,\n // add timeout retry\n retry: true,\n backOffDelay: 3000,\n retryTimes: 3,\n };\n\n constructor() {\n const axiosClient = axios.create(Client.clientConfig);\n\n if (Client.clientConfig.retry) {\n axiosClient.interceptors.response.use(\n successHandle,\n this.retriedErrorHandle.bind(this),\n );\n } else {\n axiosClient.interceptors.response.use(successHandle, errorHandle);\n }\n this.client = axiosClient;\n this.times = 0;\n }\n\n retriedErrorHandle(error) {\n const { retryTimes, backOffDelay } = Client.clientConfig;\n if (/timeout/i.test(error.message)) {\n if (++this.times <= retryTimes) {\n if (backOffDelay) {\n message.info(\n `Request failed. Will retry after ${backOffDelay / 1000}s...`,\n );\n }\n return new Promise(function(resolve) {\n setTimeout(() => {\n resolve();\n }, backOffDelay);\n }).then(() => this.client(error.config));\n }\n // eslint-disable-next-line\n return Promise.reject({\n code: 500,\n message: 'request timeout',\n });\n }\n return errorHandle(error);\n }\n\n get(url, params, option = {}) {\n const defaultOpt = {\n url,\n params,\n method: 'get',\n skipNotice: true, // 请求失败在页面是否显示提示消息\n };\n return this.client.request(Object.assign(defaultOpt, option));\n }\n\n post(url, data, option = {}) {\n const defaultOpt = {\n url,\n data,\n method: 'post',\n headers: { 'Content-Type': 'application/json' },\n skipNotice: true,\n };\n return this.client.request(Object.assign(defaultOpt, option));\n }\n\n update(url, file, option = {}) {\n const formData = new FormData();\n formData.append('file', file);\n const defaultOpt = {\n url,\n data: formData,\n method: 'post',\n skipNotice: true,\n };\n return this.client.request(Object.assign(defaultOpt, option));\n }\n\n patch(url, data, option = {}) {\n const defaultOpt = {\n url,\n data,\n method: 'patch',\n headers: { 'Content-Type': 'application/json' },\n skipNotice: true,\n };\n return this.client.request(Object.assign(defaultOpt, option));\n }\n}\n","import axios from 'axios';\nimport Client from './client';\nimport { CaseUtil, getUrlParams } from '../utilities/common';\n\nconst client = new Client();\n\nexport const getQuest = async (hashId, questId, sign, customs = '') => {\n let url;\n if (window.isLocal) {\n const urlParams = getUrlParams();\n url = `//${location.host}/survey/api/v1/questionnaire/preview/${urlParams.id}/`;\n return axios.get(url).then(res => {\n if (res.data.code == 401) {\n window.location.href = `//${\n location.host\n }/survey/auth/login?next=${encodeURIComponent(window.location.href)}`;\n return new Promise(resolve => {\n setTimeout(() => {\n resolve();\n }, 2000);\n });\n }\n return res.data;\n\n });\n } else if (sign) {\n url = `/v2/q/${questId}/${hashId}/${sign}/?${customs}`;\n } else {\n url = `/v1/q/${hashId}/`;\n }\n return client.get(url, null);\n};\n\nexport const submitQuest = async (hashId, params, questId, sign, option) => {\n let url;\n if (sign) {\n url = `/v2/q/${questId}/${hashId}/${sign}/`;\n } else {\n url = `/v1/q/${hashId}/`;\n }\n const formData = new FormData();\n const answers = CaseUtil.toSnake(params);\n formData.append('answers', JSON.stringify(answers));\n return client.post(url, formData, option);\n};\n\nexport const getLocationMap = async (country = 'cn') => {\n const previewUrl = `//${\n location.host\n }/survey/api/v1/questionnaires/country_detail/?country=${country.toLowerCase()}`;\n const hostUrl = `//${\n location.host\n }/open_api/v1/api/country_detail/?country=${country.toLowerCase()}`;\n const url = location.pathname.includes('preview') ? previewUrl : hostUrl;\n return axios.get(url).then(res => res.data);\n};\n","import React, { useState } from 'react';\nimport { PrettoSlider } from './materialTheme';\n\nexport default function MaterialSlider({\n onChange,\n selected,\n min,\n max,\n id,\n isInsideMatrix = false,\n marks,\n marksTop = true,\n}) {\n const marksKeys = Object.keys(marks).sort((a, b) => a - b);\n const markLabels = marksTop\n ? marksKeys.map((k, index) => ({\n label: marks[k],\n value: index + min,\n }))\n : marksKeys.map((_, index) => ({\n label: index + 1,\n value: index + 1,\n }));\n\n const [sliderVal, setSliderVal] = useState(+selected);\n\n const handleSubmit = (event, newValue) => {\n if (newValue !== +selected) {\n if (isInsideMatrix) {\n onChange(marksKeys[newValue - 1]);\n } else {\n onChange(newValue);\n }\n }\n };\n\n return (\n setSliderVal(newVal)}\n onChangeCommitted={handleSubmit}\n step={1}\n min={min}\n max={max}\n valueLabelDisplay=\"on\"\n valueLabelFormat={e => (isNaN(e) ? '' : e)}\n marks={isInsideMatrix ? true : markLabels}\n aria-labelledby=\"discrete-slider-restrict\"\n />\n );\n}\n","import React, { PureComponent } from 'react';\nimport { ThemeProvider } from '@material-ui/styles';\nimport { theme } from '@/components/common/Question/MaterialUI/materialTheme';\nimport themesRepo from '@/theme';\n\nexport default function withPalette(UIComponent) {\n return class extends PureComponent {\n constructor(props) {\n super(props);\n\n const _theme = sessionStorage.getItem('survey-quest-theme');\n const presetTheme = themesRepo[_theme];\n\n this.state = {\n presetTheme,\n };\n }\n\n componentDidMount() {\n const _theme = sessionStorage.getItem('survey-quest-theme');\n let presetTheme = themesRepo[_theme];\n window.addEventListener('setItem', ({ newValue }) => {\n presetTheme = themesRepo[newValue];\n });\n this.setState({ presetTheme });\n }\n\n render() {\n return theme(this.state.presetTheme) ? (\n \n \n \n ) : (\n \n );\n }\n };\n}\n","import React from 'react';\nimport withPalette from './index';\nimport { useStyles } from '../../../common/Question/MaterialUI/materialTheme';\nimport Slider from '../../../common/Question/MaterialUI/MaterialSlider';\n\nfunction MaterialSlider(props) {\n const classes = useStyles();\n return (\n \n \n \n );\n}\n\nexport default withPalette(MaterialSlider);\n","import { Component } from 'react';\nimport { getLocalText } from '@/utilities/language';\nimport { getRealShowOption } from '@/utilities/quest';\n\nconst randomComp = () => Math.random() - 0.5;\nfunction randomOptions(options) {\n const saveNoRandomOptions = [];\n for (let i = options.length - 1; i >= 0; i--) {\n const option = options[i];\n if (option.noRandom) {\n saveNoRandomOptions.push([option, i]);\n options.splice(i, 1);\n }\n }\n const result = options.slice().sort(randomComp);\n while (saveNoRandomOptions.length) {\n const [option, index] = saveNoRandomOptions.pop();\n result.splice(index, 0, option);\n }\n return result;\n}\nexport default class Sort extends Component {\n static defaultProps = {\n answer: {\n selected: [],\n text: '',\n type: 'sort',\n },\n };\n\n constructor(props) {\n super(props);\n const { question, answers } = props;\n const realShowOptions = getRealShowOption({ question, answers });\n this.state = {\n errorOption: '',\n realShowOptions,\n sourceId: '', // 拖拽用\n clickedOptions: [],\n };\n if (question.custom.random) {\n // 随机排序\n this.state.realShowOptions = randomOptions(realShowOptions);\n } else if (question.custom.reverse) {\n const actuallyReverse = Math.random() >= 0.5;\n if (actuallyReverse) {\n this.state.realShowOptions = this.state.realShowOptions.reverse();\n }\n }\n this.task = 0;\n }\n\n static getDerivedStateFromProps(nextProps, state) {\n const { question, answers } = nextProps;\n let realShowOptions = getRealShowOption({ question, answers });\n window.allQuestions.find(\n el => el.id === question.id,\n ).custom.realShowOptions = realShowOptions;\n if (\n realShowOptions.length !== state.realShowOptions.length\n || realShowOptions.some(\n el => !state.realShowOptions.find(item => item.id === el.id),\n )\n || realShowOptions.some(\n el =>\n el.text\n !== state.realShowOptions.find(item => item.id === el.id).text,\n )\n ) {\n if (question.custom.random) {\n realShowOptions = randomOptions(realShowOptions);\n }\n return {\n realShowOptions,\n };\n }\n return null;\n }\n\n componentDidMount() {\n const options = this.state.realShowOptions.map(el => el.id);\n const { answer } = this.props;\n if (answer && answer.selected && answer.selected.length) {\n this.setSelected(answer.selected);\n const orderRealShowOptions = [];\n const { realShowOptions } = this.state;\n answer.selected.forEach(id => {\n const option = realShowOptions.find(el => el.id === id);\n if (option) {\n orderRealShowOptions.push(option);\n }\n });\n this.setState({\n realShowOptions: orderRealShowOptions,\n });\n return;\n }\n this.setSelected(options);\n }\n\n componentDidUpdate(prevProps, prevState) {\n const prevQ = prevProps.question;\n const nextQ = this.props.question;\n\n // 如果选项变了 就改变答案\n if (prevState.realShowOptions !== this.state.realShowOptions) {\n this.setSelected(this.state.realShowOptions.map(el => el.id));\n }\n\n // 预览模式下面始终不成立(broadcastchannel 使用JSON.stringify传递数据\n // 问卷模式下面始终成立, 问卷结构不会改变\n if (prevQ === nextQ) return;\n // 打开随机按钮\n if (!prevQ.custom.random && nextQ.custom.random) {\n // eslint-disable-next-line\n this.setState({\n realShowOptions: randomOptions([...nextQ.custom.options]),\n });\n }\n // 关闭随机按钮\n if (prevQ.custom.random && !nextQ.custom.random) {\n // eslint-disable-next-line\n this.setState({ realShowOptions: nextQ.custom.options });\n }\n // 判断是否修改了options, 但是broadcastchannell始终是深拷贝传递。所以这里不能比较地址了。\n if (\n JSON.stringify(nextQ.custom.options)\n !== JSON.stringify(prevQ.custom.options)\n ) {\n // eslint-disable-next-line\n if (nextQ.custom.random) this.setState({ options: randomOptions([...nextQ.custom.options]) });\n // eslint-disable-next-line\n else this.setState({ realShowOptions: nextQ.custom.options });\n }\n }\n\n setSelected = selected => {\n const { onChange, value: formAnswer } = this.props.form.getFieldProps(\n this.props.question.id,\n {\n initialValue: this.props.answer,\n },\n );\n onChange(this.getSelectedChange(selected, formAnswer));\n };\n\n getSelectedChange(selected, answer) {\n const text = (answer && answer.text) || '';\n const { option_blank = {} } = answer;\n for (const key of Object.keys(option_blank)) {\n if (!selected.includes(key)) {\n delete option_blank[key];\n }\n }\n return { type: 'sort', selected, text, option_blank };\n }\n\n getInputChange(id, input, answer) {\n const text = (answer && answer.text) || '';\n const selected = (answer.selected || []).slice();\n if (!selected.includes(id)) {\n selected.push(id);\n }\n const { option_blank = {} } = answer;\n return {\n type: 'sort',\n text,\n selected,\n option_blank: {\n ...option_blank,\n [id]: [input],\n },\n };\n }\n\n handleClick = optionId => {\n let clickedOptions = [...this.state.clickedOptions];\n const selected = this.props.answer.selected.slice();\n // 之前的位置\n const oldIndex = selected.findIndex(el => el === optionId);\n // 从之前的位置取出\n selected.splice(oldIndex, 1);\n // 如果已经排序 就丢到最后去 并从clickedOptions中去除\n if (clickedOptions.includes(optionId)) {\n selected.push(optionId);\n clickedOptions = clickedOptions.filter(id => id !== optionId);\n } else {\n // 新排序的option 放到selected的对应位置 放到clickedOptions最后\n selected.splice(clickedOptions.length, 0, optionId);\n clickedOptions.push(optionId);\n }\n // 新的realShowOptions排序\n const options = [];\n const { realShowOptions } = this.state;\n selected.forEach(el => {\n options.push(realShowOptions.find(item => item.id === el));\n });\n this.setState({\n clickedOptions,\n realShowOptions: options,\n });\n clearTimeout(this.task);\n this.task = setTimeout(() => {\n this.setSelected(selected);\n }, 300);\n };\n handleDragStart = sourceId => {\n this.setState({ sourceId });\n };\n handleDrop = targetId => {\n // ev.preventDefault();\n const selected = this.props.answer.selected.slice();\n const { sourceId } = this.state;\n if (!sourceId) {\n return;\n }\n const sourceIndex = selected.findIndex(el => el === sourceId);\n const targetIndex = selected.findIndex(el => el === targetId);\n if (sourceIndex === targetIndex) return;\n if (sourceIndex < targetIndex) {\n selected.splice(targetIndex + 1, 0, sourceId);\n selected.splice(sourceIndex, 1);\n } else {\n selected.splice(sourceIndex, 1);\n selected.splice(targetIndex, 0, sourceId);\n }\n const options = [];\n const { realShowOptions } = this.state;\n selected.forEach(el => {\n options.push(realShowOptions.find(item => item.id === el));\n });\n this.setState({ realShowOptions: options });\n clearTimeout(this.task);\n this.task = setTimeout(() => {\n this.setSelected(selected);\n }, 300);\n };\n\n render() {\n const { question, answer } = this.props;\n const { realShowOptions, clickedOptions } = this.state;\n const { getFieldProps, getFieldError } = this.props.form;\n const id = question.id || 'unknown-form-item';\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: answer,\n });\n // 因为getFieldError无法判断error的来源,所以只能用这样的trick方法,\n // rc-form 写的真心不好\n let errorSelected;\n let errorText;\n const error = getFieldError(id);\n if (error && error[0] === getLocalText('SingleChoice.Selected')) [errorSelected] = error;\n if (error && error[0] === getLocalText('SingleChoice.otherText')) [errorText] = error;\n const params = {\n options: realShowOptions,\n formAnswer,\n error: {\n selected: errorSelected,\n text: errorText,\n errorOption: this.state.errorOption,\n },\n onChange: {\n selected: selected =>\n onChange(this.getSelectedChange(selected, formAnswer)),\n input: (id, input) =>\n onChange(this.getInputChange(id, input, formAnswer)),\n click: id => this.handleClick(id),\n },\n handleDrop: this.handleDrop,\n handleDragStart: this.handleDragStart,\n clickedOptions,\n };\n return this.props.children(params);\n }\n}\n","import React, { Component } from 'react';\nimport styled from '@emotion/styled';\nimport { css } from 'emotion';\nimport { toInt } from '../utilities/common';\nimport { getLocalText } from '../utilities/language';\n\nexport class RequestError extends Error {\n constructor(error = {}) {\n super(error);\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, RequestError);\n }\n let errorText;\n switch (error.code) {\n default:\n errorText = null;\n break;\n case 400:\n errorText = getLocalText('RequestError.400'); // '请求错误';\n break;\n case 404:\n errorText = getLocalText('RequestError.404'); // '资源未找到';\n break;\n case 403:\n errorText = getLocalText('RequestError.403'); // '没有访问权限';\n break;\n case 401:\n errorText = getLocalText('RequestError.401'); // '请求未授权';\n break;\n }\n if (!errorText) {\n if (error.code >= 500) errorText = getLocalText('RequestError.biggerThan400');\n // '服务器错误';\n else if (error.code >= 400) errorText = getLocalText('RequestError.biggerThan500');\n // '客户端错误';\n else errorText = getLocalText('RequestError.unknow'); // '未知错误';\n }\n this.name = `Request Error: ${errorText}(code: ${error.code}) ${error.message}`;\n }\n}\n\nexport default class ErrorBoundary extends Component {\n state = {\n error: null,\n };\n\n componentDidCatch(error) {\n // component info\n this.throwError(error);\n }\n\n throwError = error => {\n this.setState({ error });\n };\n\n render() {\n let { error = {} } = this.state;\n const { children, ...restProps } = this.props;\n if (typeof children !== 'function') {\n error = new TypeError(\n 'the children of ErrorBoundary Component must be callable',\n );\n }\n if (!error) {\n return children(restProps, this.throwError);\n }\n console.error && console.error(error);\n if (error.code) {\n // http error\n error = new RequestError(error);\n }\n return (\n \n
\n

{error.name}

\n
{error.stack}
\n
\n
\n );\n }\n}\n\nexport const errorBounder = WrappedComponent => {\n const ConnectedComponent = props => (\n \n {(_, throwError) => (\n \n )}\n \n );\n ConnectedComponent.displayName = `ErrorBounded(${\n WrappedComponent.displayName || WrappedComponent.name || 'Unknown'\n })`;\n\n return ConnectedComponent;\n};\n\nconst MainView = styled.div`\n position: relative;\n max-width: 900px;\n margin: auto;\n padding: ${({ vgap }) => toInt(vgap, 30)}px ${({ hgap }) => toInt(hgap, 20)}px;\n`;\n\nconst errorBoxCls = css`\n background-color: #ffefee;\n padding: 20px;\n`;\n","export const postMessage = (data) => {\n try {\n if (window.parent?.postMessage) {\n console.debug('post message', data);\n try {\n window.parent.postMessage(data, '*');\n } catch (error) {\n console.error('parent postMessage error:', error.message);\n }\n }\n if (window.opener?.postMessage) {\n console.debug('post message', data);\n try {\n window.opener.postMessage(data, '*');\n } catch (error) {\n console.error('opener postMessage error:', error.message);\n }\n }\n } catch (err) {\n console.error(err);\n }\n};\n","export const allowedAttributes = {\n '*': ['style', 'class', 'id', 'alt', 'title'],\n a: ['href', 'name', 'target'],\n img: ['src'],\n video: ['src', 'poster', 'controls', 'preload', 'autoplay'],\n audio: ['src', 'controls', 'preload', 'autoplay'],\n};\n\nexport const allowedTags = [\n 'img',\n 'span',\n 'strong',\n 'em',\n 'b',\n 'p',\n 'video',\n 'u',\n 'audio',\n];\n\nexport const showErrorQuestIds = [\n 21495,\n 21488,\n 24596,\n 24594,\n 24597,\n 26653,\n 24593,\n 24590,\n 24589,\n 24592,\n 24591,\n 24598,\n];\n\nexport const getCustomizedHTML = customizedTheme =>\n `html {\n --primary-color: ${customizedTheme.primaryColor};\n --text-color: ${customizedTheme.textColor};\n --text-color-secondary: ${customizedTheme.textColorSecondary};\n --question-bg: ${customizedTheme.questionBg};\n --ant-table-hover: ${customizedTheme.antTableHover};\n --ant-menu-hover: ${customizedTheme.antMenuHover};\n --ant-bg: ${customizedTheme.antBg};\n --ant-border: ${customizedTheme.antBorder};\n --ant-entity-bg: ${customizedTheme.antEntityBg};\n --am-entity-bg: ${customizedTheme.amEntityBg};\n --ant-entity-border: ${customizedTheme.antEntityBorder};\n --ant-table-border: ${customizedTheme.antTableBorder};\n --scale-square: ${customizedTheme.scaleSquare};\n --page-bg: ${customizedTheme.backgroundColor};\n --ant-check-bg: ${customizedTheme.antCheckBg || 'var(--question-bg)'};\n --input-bg: ${customizedTheme.inputBg};\n --ending-bg: ${customizedTheme.endingBg};\n --btn-text: ${customizedTheme.btnText};\n --checkbox-disabled-color: ${customizedTheme.checkboxDisabledColor};\n }`;\n","import styled from '@emotion/styled';\n// const tcpyConfig = require('../tcpy-conf.json');\n\nconst fontStack = `BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', \n 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif,\n 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'`;\n\n\nexport const GlbStyleBox = styled.div`\n\n * {\n font-family: ${fontStack};\n }\n\n img {\n max-width: 100%;\n }\n\n .borderBox {\n box-sizing: border-box;\n }\n\n a {\n text-decoration: none;\n }\n\n .allHeight {\n height: 100%;\n }\n\n .allScreen {\n height: 100vh;\n width: 100vw;\n }\n\n .allWidth {\n width: 100%;\n }\n\n /* overflow */\n .overflowHidden {\n overflow: hidden;\n }\n\n .overflowAuto {\n overflow: auto;\n }\n\n .wordWrapBreak {\n word-wrap: break-word;\n }\n\n .inlineFlex {\n display: inline-flex;\n }\n\n /* flex */\n\n .flex {\n display: flex;\n }\n\n .columnFlex {\n display: flex;\n flex-direction: column;\n }\n\n .justifyCenter {\n justify-content: center;\n }\n\n .justifyAround {\n justify-content: space-around;\n }\n\n .justifyBetween {\n justify-content: space-between;\n }\n\n .justifyEnd {\n justify-content: flex-end;\n }\n\n .alignCenter {\n align-items: center;\n }\n\n .alignStart {\n align-items: flex-start;\n }\n\n .alignEnd {\n align-items: flex-end;\n }\n\n .flexWrap {\n flex-wrap: wrap;\n }\n\n .textCenter {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n\n .flexNone {\n flex: none;\n }\n\n .flex0 {\n flex: 0;\n }\n\n .flex1 {\n flex: 1;\n }\n\n .flex2 {\n flex: 2;\n }\n\n .flex3 {\n flex: 3;\n }\n\n .flex4 {\n flex: 4;\n }\n\n /* bg and color */\n .grayBG {\n background: rgb(248, 248, 248);\n }\n\n .whiteBG {\n background: white;\n }\n\n .whiteColor {\n color: white;\n }\n\n .grayColor {\n color: #c3c3c3;\n }\n\n .blueColor {\n color: var(--primary-color);\n }\n\n .redColor {\n color: var(--text-red);\n }\n\n .greenColor {\n color: green;\n }\n\n .label {\n color: #090909;\n text-align: right;\n }\n\n /*font-size*/\n .fs6 {\n font-size: 6px;\n }\n\n .fs12 {\n font-size: 12px;\n }\n\n .fs13 {\n font-size: 13px;\n }\n\n .fs14 {\n font-size: 14px;\n }\n\n .fs15 {\n font-size: 15px;\n }\n\n .fs16 {\n font-size: 16px;\n }\n\n .fs17 {\n font-size: 17px;\n }\n\n .fs18 {\n font-size: 18px;\n }\n\n .fs19 {\n font-size: 19px;\n }\n\n .fs20 {\n font-size: 20px;\n }\n\n .fs22 {\n font-size: 22px;\n }\n\n .fs24 {\n font-size: 24px;\n }\n\n /* padding and margin */\n\n /* margin */\n .margin5 {\n margin: 5px;\n }\n\n .marginLeft5 {\n margin-left: 5px;\n }\n\n .marginRight5 {\n margin-right: 5px;\n }\n\n .marginTop5 {\n margin-top: 5px;\n }\n\n .marginBottom5 {\n margin-bottom: 5px;\n }\n\n .margin10 {\n margin: 10px;\n }\n\n .marginLeft10 {\n margin-left: 10px;\n }\n\n .marginRight10 {\n margin-right: 10px;\n }\n\n .marginTop10 {\n margin-top: 10px;\n }\n\n .marginBottom10 {\n margin-bottom: 10px;\n }\n\n .margin20 {\n margin: 20px;\n }\n\n .marginLeft20 {\n margin-left: 20px;\n }\n\n .marginRight20 {\n margin-right: 20px;\n }\n\n .marginTop20 {\n margin-top: 20px;\n }\n\n .marginBottom20 {\n margin-bottom: 20px;\n }\n\n .margin30 {\n margin: 30px;\n }\n\n .marginLeft30 {\n margin-left: 30px;\n }\n\n .marginRight30 {\n margin-right: 30px;\n }\n\n .marginTop30 {\n margin-top: 30px;\n }\n\n .marginBottom30 {\n margin-bottom: 30px;\n }\n\n /* padding */\n .padding10 {\n padding: 10px;\n }\n\n .paddingLeft10 {\n padding-left: 10px;\n }\n\n .paddingRight10 {\n padding-right: 10px;\n }\n\n .paddingTop10 {\n padding-top: 10px;\n }\n\n .paddingBottom10 {\n padding-bottom: 10px;\n }\n\n .padding20 {\n padding: 20px;\n }\n\n .paddingLeft20 {\n padding-left: 20px;\n }\n\n .paddingRight20 {\n padding-right: 20px;\n }\n\n .paddingTop20 {\n padding-top: 20px;\n }\n\n .paddingBottom20 {\n padding-bottom: 20px;\n }\n\n /* width for antd */\n .width100 {\n width: 100px;\n }\n\n .width200 {\n width: 200px;\n }\n\n .width300 {\n width: 300px;\n }\n\n .minWidth1000 {\n min-width: 1000px;\n }\n\n .relative {\n position: relative;\n }\n\n .pointer {\n cursor: pointer;\n }\n\n .notAllowed {\n cursor: not-allowed;\n }\n\n .ellipsis {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .hidden {\n display: none;\n }\n\n .required:before {\n display: inline-block;\n margin-right: 4px;\n content: '*';\n line-height: 1;\n font-size: 14px;\n color: #f5222d;\n }\n\n .hoverBigger {\n transition: transform 0.2s;\n }\n\n .bigger1-1 {\n transform: scale(1.1, 1.1);\n }\n\n .hoverBigger:hover {\n transform: scale(1.1, 1.1);\n }\n\n .borderRadius5 {\n border-radius: 5px;\n }\n\n .breakWord {\n word-wrap: break-word;\n word-break: break-all;\n }\n\n .preLine {\n white-space: pre-line;\n }\n\n .noWrap {\n white-space: nowrap;\n }\n\n .textAlignCenter {\n text-align: center;\n }\n\n .labelText {\n font-size: 12px;\n font-weight: 600;\n color: rgba(113, 125, 145, 1);\n line-height: 17px;\n }\n\n .textAlignRight {\n text-align: right;\n }\n\n .textAlignLeft {\n text-align: left;\n }\n\n body {\n margin: 0;\n padding: 0;\n font-family: sans-serif Arial Helvetica;\n }\n\n * {\n box-sizing: border-box;\n hyphens: auto;\n // -webkit-overflow-scrolling : auto;\n }\n\n hr {\n display: block;\n height: 1px;\n border: 0;\n border-top: 1px solid #e8e8e8;\n margin: 1em 0;\n padding: 0;\n }\n\n .transition-group {\n .group-item {\n display: block;\n }\n\n .group-item-enter.group-item-enter-active {\n transition: height 300ms ease-in;\n }\n\n .group-item-exit.group-item-exit-active {\n transition: height 300ms ease-in;\n }\n\n // .group-item-enter,\n // .group-item-exit.group-item-exit-active {\n // opacity: 0;\n // }\n // .group-item-enter.group-item-enter-active,\n // .group-item-exit {\n // opacity: 1;\n // }\n }\n\n #matrix {\n .ant-table-small > .ant-table-content > .ant-table-body {\n margin: 0 !important;\n }\n\n th {\n vertical-align: top;\n text-align: center;\n font-size: 13px;\n }\n }\n\n .choiceImg {\n width: auto;\n height: auto;\n max-height: 80%;\n max-width: 80%;\n }\n\n .ant-form-item-label label:after {\n content: '';\n }\n\n .has-error .ant-form-item-children-icon {\n display: none;\n }\n\n .am-list-item .am-input-control input {\n border: 0;\n }\n\n #matrix .ant-checkbox-wrapper-checked.isSingle .ant-checkbox-inner {\n border-radius: 50%;\n // border : solid 1px #ceddff;\n height: 20px;\n width: 20px;\n transition: none;\n }\n\n #matrix .ant-checkbox-wrapper-checked.isSingle .ant-checkbox-inner::after {\n width: 6px;\n height: 6px;\n background-color: var(--primary-color);\n border-radius: 50%;\n border: 0;\n transition: none;\n opacity: 1;\n }\n\n .isSingle .ant-checkbox-inner {\n border-radius: 50%;\n display: flex;\n border: solid 1px var(--ant-border);\n background-color: var(--ant-bg);\n align-items: center;\n justify-content: center;\n\n ::after {\n position: static;\n background: white;\n display: block;\n height: 8px;\n width: 8px;\n border-radius: 50%;\n transform: none;\n opacity: 0;\n }\n }\n\n .isSingle .ant-checkbox-checked::after {\n border: 0;\n }\n\n .no-touch {\n user-select: none;\n }\n\n .no-event {\n pointer-events: none;\n }\n`;\n","import React, { PureComponent, lazy, Suspense } from 'react';\nimport { hot } from 'react-hot-loader';\nimport { withRouter } from 'react-router-dom';\n// import { call } from '@bridge/byted-bridge-jssdk';\nimport { call } from '@bridge/byted-bridge-app-jssdk';\nimport * as tiktok from '@bridge/tiktok';\nimport * as fans from '@bridge/fans';\nimport capcut from '@bridge/capcut';\nimport { Global, css } from '@emotion/core';\nimport sanitizeHtml from 'sanitize-html';\nimport styled from '@emotion/styled';\nimport md5 from 'md5';\nimport { Helmet } from 'react-helmet';\nimport AES from 'crypto-js/aes';\nimport ENC from 'crypto-js/enc-utf8';\n\nimport { CaseUtil, HTMLDecode, getUrlParams } from '@/utilities/common';\nimport { questionFilter, typeChecker } from './utilities/quest';\nimport { errorBounder } from '@/components/ErrorBoundary';\nimport { Provider } from '@/store';\nimport {\n traceOnError,\n tracePageOpen,\n traceShowQuestion,\n traceUpdateQuestion,\n traceExitQuestionnaire,\n traceSubmitQuestionnaire,\n} from './tracer';\nimport { getLocalText, navigatorLang } from './utilities/language';\nimport { postMessage } from './utilities/postMessage';\nimport {\n getPage,\n scrollToTop,\n filterNonAnswer,\n handleLimitTime,\n getPageContentLogic,\n retrieveDataAfterSubmit,\n transferDefaultDataToQuest,\n} from './utilities/pageLogic';\nimport {\n allowedTags,\n allowedAttributes,\n showErrorQuestIds,\n getCustomizedHTML,\n} from './constant';\nimport { GlbStyleBox } from './glbStyle';\nimport IconFont from '@/components/common/IconFont';\n\nconst Progress = lazy(() => import('@/components/Progress'));\nconst Ending = lazy(() => import('@/components/Ending'));\n\nimport * as api from '@/services/api';\nimport themesRepo from './theme';\nimport './index.less';\n\nconst CIPHER_TAG = 'data_bp_survey';\nconst pathname = window.location.pathname.replace(/\\/$/, '');\nconst url = window.location.href;\nconst isUrlToGenStamp =\n /^\\/q\\//.test(pathname) &&\n /bytedance|127.0.0.1/.test(url) &&\n !/preview/.test(url) &&\n url.includes(CIPHER_TAG);\nconst isUrlToDecrypt =\n /bytedance|127.0.0.1/.test(url) &&\n !/preview/.test(url) &&\n /^\\/b\\//.test(pathname);\n\nsanitizeHtml.defaults.allowedTags = sanitizeHtml.defaults.allowedTags.concat(\n allowedTags\n);\nsanitizeHtml.defaults.allowedAttributes = allowedAttributes;\n\n// eslint-disable-next-line\nString.prototype.html2Text = function () {\n return HTMLDecode(this.replace(/<.*?>/g, '').replace(/<\\/.*?>/g, ''));\n};\n\n// eslint-disable-next-line\nWindow.prototype.setItem = function (key, value) {\n if (key === 'survey-quest-theme') {\n const newStorageEvent = document.createEvent('StorageEvent');\n const storage = {\n setItem(k, val) {\n sessionStorage.setItem(k, val);\n newStorageEvent.initStorageEvent(\n 'setItem',\n false,\n false,\n k,\n null,\n val,\n null,\n null\n );\n window.dispatchEvent(newStorageEvent);\n },\n };\n return storage.setItem(key, value);\n }\n};\n\nconst delay = (time) => new Promise((resolve) => setTimeout(resolve, time));\n\n@withRouter\n@errorBounder\nclass App extends PureComponent {\n constructor(props) {\n super(props);\n window.isRD = window.location.host.includes('127.0.0.1');\n window.isLocal = /preview\\/?$/.test(window.location.pathname);\n window.isReport = /dp_survey_statistics/.test(window.location.href);\n const hashId = this.getQuestId();\n this.state = {\n id: hashId,\n loading: true,\n msg: null, // 不要使用message这个关键字,可能会被antd import给误认为是message组件\n page: { current: 1, total: 1 },\n quest: null,\n questions: [],\n recycleUid: true, // 回收uid\n recycleProducts: null, // 回收app list\n resume: true, // 断点续答\n allQuestions: [],\n answers: {},\n startTime: null, // 开始答题时间戳 秒\n showAnswer: {},\n cipherUrl: '',\n error: '',\n };\n }\n\n componentDidMount() {\n try {\n localStorage.setItem('survey-height', document.body.clientHeight);\n localStorage.setItem('survey-width', document.body.clientWidth);\n } catch (error) {\n console.error('get LSAnswer error: ', error.message);\n }\n const urlParams = getUrlParams(this.props.location);\n if (!window.isLocal || urlParams.id) {\n this.fetchQuest();\n }\n if (window.isLocal) {\n console.log(\n 'Under development environment, TEA data uploading is disabled.'\n );\n this.getLocalQuest();\n }\n this.setState({\n startTime: Date.now(),\n });\n // console.log('SLARDAR_RELEASE', process.env.SLARDAR_RELEASE);\n }\n\n componentDidUpdate(_, prevState) {\n const { answers } = this.state;\n if (prevState.answers !== answers) {\n const { id: questionnaireId, resume } = this.state;\n if (!questionnaireId || !resume) return;\n try {\n let LSAnswer = localStorage.getItem(questionnaireId) || '{}';\n LSAnswer = JSON.parse(LSAnswer);\n Object.entries(answers).forEach(([key, value]) => {\n LSAnswer[key] = value;\n });\n localStorage.setItem(questionnaireId, JSON.stringify(LSAnswer));\n } catch (error) {\n console.error('get LSAnswer error: ', error.message);\n }\n }\n }\n\n componentDidCatch(error, errorInfo) {\n // 你同样可以将错误日志上报给服务器\n const stack = JSON.parse(JSON.stringify(errorInfo))\n .componentStack.split('\\n')\n .toString();\n console.error('mainError', error.message);\n traceOnError(error.message, error.code, stack);\n }\n\n componentWillUnmount() {\n traceExitQuestionnaire(true);\n this.setState({ startTime: null });\n }\n\n submitting = false;\n\n submitted = false;\n\n _resetStoreFirstCall = true;\n\n resetStore = (id, quest) => {\n window.allQuestions = [...quest.questions];\n const { answers, resume } = this.state;\n const { recycleUid, recycleProducts } = quest;\n const questions = questionFilter(quest.questions, answers).visibles || [];\n const { isNextEnd } = questionFilter(quest.questions, answers);\n const nextState = {\n id,\n msg: null,\n loading: false,\n quest,\n questions,\n allQuestions: [...quest.questions],\n recycleUid,\n recycleProducts,\n resume,\n isNextEnd,\n };\n // 只有在测试环境下,resetStore才会调用多次。因此埋点写在里面\n if (this._resetStoreFirstCall) {\n // 发送页面打开埋点\n tracePageOpen(quest.title);\n const total = questions.filter(\n (el, index) =>\n typeChecker.isPageBreak(el) && index !== questions.length - 1\n ).length;\n nextState.page = { total, current: 1 };\n // eslint-disable-next-line no-unused-expressions\n nextState.answers;\n let answers = {};\n try {\n if (isUrlToDecrypt) {\n const cipherAns = AES.decrypt(\n window.location.href.split('#/')[1],\n this.questId\n );\n answers = JSON.parse(cipherAns.toString(ENC));\n } else if (resume) {\n const LSAnswer = localStorage.getItem(id) || '{}';\n answers = JSON.parse(LSAnswer);\n }\n } catch (error) {\n console.error(error.message);\n }\n nextState.answers = answers;\n\n if (!/LarkLocale/.test(navigator.userAgent) && !window.isReport) {\n const sso = document.cookie\n .match(/(?:door_username=)(.*)(?=;)/)?.[1]\n .split(';')[0];\n if (sso) {\n // eslint-disable-next-line no-undef\n gwm.creation({\n txt: sso,\n color: '#626262',\n css: {\n fontFamily:\n 'BlinkMacSystemFont, \"Segoe UI\", \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei\", \"Helvetica Neue\"',\n },\n });\n }\n }\n this._resetStoreFirstCall = false;\n const sum = quest.questions.filter((q) => !typeChecker.isPageBreak(q))\n .length;\n traceShowQuestion(sum);\n }\n this.setState(nextState, this.forceUpdate);\n };\n\n getLocalQuest() {\n console.debug('getLocalQuest');\n // 监听用户单份答案\n window.addEventListener('message', (evt) => {\n const { data } = evt;\n if (!data.qid) return;\n if (data.type === 'user-report-answers') {\n document.querySelector('#root').style.pointerEvents = 'none';\n const answers = JSON.parse(data.answers);\n this.setState(({ quest }) => ({ quest: { ...quest, desc: '' } }));\n this.update(answers);\n } else if (data.type === 'user-report-print') {\n window.print();\n }\n });\n }\n\n getQuestId = () => {\n if (pathname === '/') return;\n const ret = pathname.split('/'); // pathname一般都是 '/iGHria' 或 '/q/10666/DS4ut1N2/12c5/'\n if (!ret) return null;\n let id;\n if (ret[1] === 'q' || ret[1] === 'b') {\n this.questId = ret[2]; // 问卷id\n id = ret[3]; // 问卷hash id\n this.sign = ret[4]; // 签名\n } else {\n id = ret[1] || '';\n }\n return id.includes('preview') ? null : id;\n };\n\n getOriginOrder = (id) => {\n if (!id) return -1;\n return (this.state.quest.questions || [])\n .filter((q) => !typeChecker.isPageBreak(q))\n .findIndex((q) => q.id === id);\n };\n\n traceUpdate = (id) => {\n const order = this.getOriginOrder(id);\n const type = this.state.answers[id] === undefined ? 0 : 1;\n traceUpdateQuestion(type, order, id);\n };\n\n retrieveDefaultAnswers = (resume) => {\n const hashId = this.getQuestId();\n if (resume && hashId) {\n let answers = {};\n try {\n const LSAnswer = localStorage.getItem(hashId) || '{}';\n answers = JSON.parse(LSAnswer);\n } catch (error) {\n console.error('get LSAnswer error: ', error.message);\n }\n this.setState({ answers });\n }\n this.setState({ resume });\n };\n\n async fetchQuest() {\n const hashId = this.getQuestId();\n if (!hashId && !window.isLocal) {\n this.setState({\n loading: false,\n msg: {\n type: 'error',\n title: getLocalText('no.id'),\n },\n });\n postMessage({\n type: 'error-mount',\n code: 0,\n message: '找不到问卷ID',\n });\n postMessage({ type: 'did-mount' });\n return;\n }\n this.setState({ loading: true });\n\n const { location } = this.props;\n const customsPre = getUrlParams(location);\n const urlCustoms = Object.keys(customsPre)\n .map((key) => `${key}=${customsPre[key]}`)\n .join('&');\n api\n .getQuest(hashId, this.questId, this.sign, urlCustoms)\n .then((res) => {\n if (!this.state.startTime) {\n return;\n }\n window.serverTime = res.server_time;\n window.rnd = res.rnd;\n this.setState(\n { loading: false },\n // 问卷访问正常\n () =>\n postMessage({\n type: 'success-mount',\n data: CaseUtil.toCaml(res.data),\n })\n );\n const questionnaire = CaseUtil.toCaml(res.data);\n const quest = transferDefaultDataToQuest(questionnaire);\n if (!window.isLocal && !window.isReport) {\n this.retrieveDefaultAnswers(quest.resume ?? true);\n }\n if (quest.prompt) {\n this.realPrompt = quest.prompt;\n }\n // FIXME: 中转页面跳转0.1s\n if (window.location.href.includes('?survey_finish_immediately')) {\n handleLimitTime(this.submitForm, 0);\n } else if (quest.limitTime) {\n handleLimitTime(this.submitForm, quest.limitTime * 60);\n }\n\n this.resetStore(hashId, quest);\n window.showErrorInfoAfterSubmitBtn = showErrorQuestIds.includes(\n questionnaire.questionnaireId\n );\n })\n .catch((err) => {\n if (!this.state.startTime) {\n return;\n }\n if (err.code == 401) {\n return;\n } else if (err && err.code >= 400 && err.code < 600) {\n window.language = err.language || navigatorLang;\n traceOnError(err.message, err.code, '问卷详情接口');\n let errorText = err.i18n_prompt\n ? getLocalText(`error.${err.i18n_prompt}`) // 后端错误提示\n : getLocalText('RequestError.400');\n let fixedScore = err.data?.score;\n if (err.data && fixedScore !== undefined) {\n if (fixedScore !== Math.round(fixedScore)) {\n fixedScore = fixedScore.toFixed(2);\n }\n errorText = (\n <>\n
\n {errorText}\n
\n
\n {getLocalText('user-score')}\n
{fixedScore}
\n
\n \n );\n }\n this.setState({\n msg: {\n title: errorText,\n type: 'warning',\n description: (\n }>\n \n \n ),\n },\n loading: false,\n });\n console.warn('catch', err);\n } else {\n this.props.throwError(err);\n }\n this.setState(\n (state) => ({\n ...state,\n loading: false,\n }),\n () => {\n // 问卷失效,过期等异常情况\n postMessage({\n type: 'error-mount',\n code: err.code || 0,\n message: err.message,\n });\n }\n );\n })\n .finally(() => postMessage({ type: 'did-mount' }));\n }\n\n submitForm = async () => {\n if (this.submitting) return;\n this.submitting = true;\n await delay(500);\n const {\n id,\n questions,\n showAnswer,\n recycleUid,\n recycleProducts,\n quest: { prompt },\n answers: originAnswers,\n } = this.state;\n const answers = filterNonAnswer(showAnswer, originAnswers, questions);\n this.realPrompt = prompt;\n\n let res = {};\n const { location } = this.props;\n answers.custom_answer = getUrlParams(location);\n answers.cost = +((Date.now() - this.state.startTime) / 1000).toFixed(3);\n const { server_time, cost, rnd } = answers;\n answers.sign = md5(`${server_time}${cost}${rnd}`);\n const ua = window.navigator.userAgent;\n if (/trill/i.test(ua) || /musical_ly/i.test(ua)) {\n const appInfo = await tiktok.app.getAppInfo({});\n const userInfo = await tiktok.app.getUserInfo({});\n const apiParam = await tiktok.app.apiParam({});\n answers.uid = userInfo.user_id || appInfo.user_id || '';\n answers.did = apiParam.device_id || appInfo.device_id || '';\n } else if (/resso/i.test(ua)) {\n const userInfo = await call('app.userInfo');\n const appInfo = await call('app.getAppInfo', {});\n answers.uid = userInfo && userInfo.data ? userInfo.data.uid : '';\n answers.did = appInfo && appInfo.data ? appInfo.data.device_id : '';\n } else if (/fans_app/i.test(ua)) {\n const resp = await fans.app.getUserInfo({});\n if (resp.data.hasLoggedIn) {\n const { userInfo } = resp.data;\n answers.uid = userInfo.userID || '';\n } else {\n answers.uid = '';\n }\n const globalProps = JSON.parse(__globalprops.getGlobalProps());\n answers.did = globalProps.did || globalProps.deviceId || '';\n } else if (/LV/i.test(ua) || /com\\.lemon\\.lvoverseas/i.test(ua)) {\n const userInfo = await capcut.app.getUserInfo({});\n const appInfo = await capcut.app.appInfo({});\n answers.uid = userInfo.data.user_id || '';\n answers.did = appInfo.data.device_id || '';\n }\n\n if (id) {\n console.warn('提交 answers', answers);\n // 点击提交msg\n postMessage({\n type: 'pre-submit',\n answers,\n });\n return api\n .submitQuest(id, answers, this.questId, this.sign)\n .then((result = {}) => {\n if (window.limitTimeTask) {\n clearTimeout(window.limitTimeTask);\n }\n const { data = {} } = result;\n res = data;\n traceSubmitQuestionnaire(true);\n if (!res) {\n res = {};\n }\n this.submitting = false;\n this.submitted = true;\n\n if (res.prompt) {\n this.realPrompt = res.prompt;\n }\n // 提交成功msg\n postMessage({\n type: 'success-submit',\n answers,\n result,\n });\n this.doAfterSubmit(result, answers);\n })\n .catch((err) => {\n // 提交失败msg\n postMessage({\n type: 'error-submit',\n code: err.code,\n message: err.message,\n });\n this.doAfterSubmit(\n { code: err.code || 0, message: err.message },\n answers\n );\n traceOnError(err.message, err.code, '提交接口');\n this.submitting = false;\n throw err;\n });\n }\n // lackof id ,we must be preview mode.\n console.warn('本地 answers', JSON.parse(JSON.stringify(answers)));\n await new Promise((resolve) => window.setTimeout(() => resolve(), 2000));\n postMessage({\n type: 'error-submit',\n code: 0,\n message: '找不到问卷ID',\n });\n this.doAfterSubmit(undefined, answers);\n };\n\n doAfterSubmit = (res = {}, answers) => {\n const { quest } = this.state;\n const { finishImgUrl, finishImgScale, did, uid } = quest;\n this.submitting = false;\n postMessage({\n type: 'did-submit',\n answers,\n result: res,\n });\n\n const retrieved = retrieveDataAfterSubmit({\n res,\n showQuotaLimit: this.showQuotaLimit,\n id: this.state.id,\n location: this.props.location,\n });\n const { data, score, type } = retrieved;\n let { title } = retrieved;\n if (score !== undefined) {\n let fixedScore = score;\n if (fixedScore !== Math.round(fixedScore)) {\n fixedScore = fixedScore.toFixed(2);\n }\n title = (\n <>\n
{title}
\n
\n {getLocalText('user-score')}\n
{fixedScore}
\n
\n \n );\n }\n\n try {\n if (/BDGameSDK/i.test(navigator.userAgent)) {\n call('view.setNavBarVisible', {}, console.info);\n }\n } catch (err) {\n console.warn(err);\n }\n\n this.setState({\n quest: {\n ...quest,\n showProgress: false,\n },\n msg: {\n title,\n type,\n description: (\n }>\n \n \n ),\n },\n });\n };\n\n showQuotaLimit = (hit, quotaStrategy) => {\n const { answers, quest } = this.state;\n const filteredAnswers = { ...answers };\n const qid = hit.question_id;\n filteredAnswers[qid].selected = filteredAnswers[qid]?.selected.filter(\n (id) => hit.option_id !== id\n );\n const that = this;\n this.setState(\n {\n answers: filteredAnswers,\n },\n () => {\n that.setState(\n {\n quest: {\n ...quest,\n quotaStrategy: CaseUtil.toCaml(quotaStrategy),\n },\n },\n that.forceUpdate\n );\n }\n );\n const element = document.getElementById(qid);\n // element.setAttribute('style', 'border: 1px solid red !important');\n element.scrollIntoView();\n document.querySelector('body').scrollTop = element.offsetTop;\n document.querySelector('html').scrollTop = element.offsetTop;\n };\n\n turnPage = (p = { current: 1, total: 1 }) => {\n this.setState(({ page }) => getPage({ p, page }));\n };\n\n onSubmit = (value) => {\n const { current, total } = this.state.page;\n this.setState(({ showAnswer }) => ({\n showAnswer: { ...showAnswer, ...value },\n }));\n // validator form\n if (current < total) {\n this.turnPage({ current: current + 1 });\n scrollToTop();\n return null;\n }\n return this.submitForm();\n };\n\n emptyAllAnswers = () => {\n this.setState({ answers: {} });\n };\n\n update = (changed) => {\n if (this.submitting) return;\n this.submitted = false;\n Object.keys(changed).forEach((id) => this.traceUpdate(id));\n this.setState(\n ({ answers }) => ({\n answers: { ...answers, ...changed },\n }),\n async () => {\n const { answers, page } = this.state;\n const stringToEncrypt = JSON.stringify(answers);\n if (isUrlToGenStamp) {\n const cipher = AES.encrypt(stringToEncrypt, this.questId).toString();\n this.setState({\n cipherUrl: `${window.location.href\n .split('#/')[0]\n .replace('/q/', '/b/')}#/${cipher}`,\n });\n }\n const answerKeys = Object.keys(changed);\n const questions = this.state.allQuestions;\n const hasChoice = answerKeys.some((id) => {\n const question = questions.find((q) => q.id === id);\n return (\n typeChecker.isChoice(question) ||\n typeChecker.isScale(question) ||\n typeChecker.isMatrix(question)\n );\n });\n if (hasChoice) {\n // 如果是选择题变化了,那依赖可能变了,理论上只需要更新该题以后的题目即可\n const qs = questionFilter(questions, answers).visibles || [];\n const { isNextEnd } = questionFilter(questions, answers);\n this.setState({\n questions: qs,\n page: {\n ...page,\n total: qs.filter(\n (el, index) =>\n el.type === 'page_break' && index !== qs.length - 1\n ).length,\n },\n isNextEnd,\n });\n }\n }\n );\n };\n\n getPageContent = () => {\n // questions 是实际展示的题目list\n const {\n questions,\n page: { current },\n isNextEnd,\n } = this.state;\n return getPageContentLogic(questions, current, isNextEnd);\n };\n\n backLastPage = () => {\n const { current } = this.state.page;\n if (current > 0) {\n this.turnPage({ current: current - 1 });\n scrollToTop();\n return null;\n }\n };\n\n setUpStore = () => ({\n state: {\n ...this.state,\n realPrompt: this.realPrompt,\n },\n action: {\n submit: this.onSubmit,\n emptyAllAnswers: this.emptyAllAnswers,\n turnPage: this.turnPage,\n update: this.update,\n getPageContent: this.getPageContent,\n backLastPage: this.backLastPage,\n },\n });\n\n render() {\n const { videoStyle } = this.props;\n const { quest, answers, questions, error } = this.state;\n const store = this.setUpStore();\n const theme = quest?.theme || '';\n const background = quest?.background || {};\n const customizedTheme = themesRepo[theme];\n Window.prototype.setItem('survey-quest-theme', theme);\n return (\n <>\n \n \n {(window.showEnQuest ? quest?.enTitle : quest?.title) || 'Survey'}\n \n \n \n \n \n {quest?.showProgress && (\n }>\n \n questions.find((q) => q.id === qid)\n ).length /\n questions.filter(\n (q) =>\n !typeChecker.isPageBreak(q) &&\n !typeChecker.isDescription(q)\n ).length) *\n 100\n }\n />\n \n )}\n \n {quest && !!quest.limitTime && (\n \n )}\n
\n \n \n {/* 如果有msg,那么不管questions是否未空总要显示children */}\n {(!!this.state.questions.length ||\n !!this.state.msg ||\n !!this.state.loading) &&\n this.props.children}\n \n \n \n );\n }\n}\n\nexport default module.hot ? hot(module)(App) : App;\n\nconst LimitTime = styled.div`\n position: fixed;\n z-index: 999;\n top: 10px;\n right: 10px;\n display: flex;\n align-items: center;\n`;\n","import { css } from 'emotion';\nimport { getLocalText } from './language';\n\nconst typeCheckerFn = key => q => q && q.type === key;\nexport const typeChecker = {\n isSingleSelectChoice: q => /singleSelect/i.test(q?.type),\n isSingleChoice: q => ['nonScoreSingle', 'single'].includes(q?.type),\n isMultiChoice: q => ['multi', 'nonScoreMulti'].includes(q?.type),\n isPageBreak: typeCheckerFn('page_break'),\n isDescription: typeCheckerFn('description'),\n isLongText: q => /long/i.test(q?.type),\n isShortText: q => /short/i.test(q?.type),\n isScale: typeCheckerFn('scale'),\n isMatrix: typeCheckerFn('matrix'),\n isLocation: typeCheckerFn('location'),\n isChoice: q =>\n typeChecker.isSingleChoice(q)\n || typeChecker.isMultiChoice(q)\n || typeChecker.isSingleSelectChoice(q)\n || typeChecker.isLocation(q),\n isText: q => typeChecker.isShortText(q) || typeChecker.isLongText(q),\n};\n\nconst breakpoints = {\n large: 1030,\n scale: 875,\n medium: 800,\n};\n\nexport const mq = Object.keys(breakpoints).reduce((accumulator, label) => {\n const prefix = typeof breakpoints[label] === 'string' ? '' : 'min-width:';\n const suffix = typeof breakpoints[label] === 'string' ? '' : 'px';\n accumulator[label] = (cls, simulateMobile) => {\n if (simulateMobile) return '';\n return css`\n @media (${prefix + breakpoints[label] + suffix}) {\n ${cls};\n }\n `;\n };\n return accumulator;\n}, {});\n\nconst getQuotaText = (quotaStrategy, opt, mode = 'default') => {\n const basicOptText = mode === 'default' ? opt.text : opt.enText || 'Option';\n const quota = quotaStrategy.optionsQuota.find(q => q.id === opt.id);\n if (!quota) return basicOptText;\n let prefix = '';\n if (quota.remaining) {\n prefix = '['.concat(\n quotaStrategy.showRemaining\n ? quotaStrategy.remainTips + quota.remaining\n : '',\n quotaStrategy.showAll ? `/${quota.amount}` : '',\n '] ',\n );\n } else {\n prefix = '['.concat(quotaStrategy.fullTips, '] ');\n }\n return prefix + basicOptText;\n};\n\n// 先检查本题选项的显示逻辑 然后根据选项引用增加新的选项\nexport function getRealShowOption({ question, answers, quotaStrategy }) {\n let realShowOptions = (question.custom.options || [])\n .map(opt => ({\n ...opt,\n text: quotaStrategy ? getQuotaText(quotaStrategy, opt) : opt.text,\n enText: quotaStrategy\n ? getQuotaText(quotaStrategy, opt, 'en')\n : opt.enText || 'Option',\n }))\n .filter(el => checkDepRule({ answers, dep: el.dep }));\n const { optionFilter = [] } = question;\n optionFilter.forEach(opt => {\n const [filterByQuestionId, lineId] = opt.id.split('--matrix--');\n let thatQuestionSelectedOptionsIds = answers[filterByQuestionId]\n ? answers[filterByQuestionId].selected\n : [];\n if (lineId) {\n thatQuestionSelectedOptionsIds\n = thatQuestionSelectedOptionsIds[lineId] || [];\n }\n const targetQuestion = (window.allQuestions || []).find(\n el => el.id === filterByQuestionId,\n );\n const targetOptions = targetQuestion\n ? targetQuestion.custom.realShowOptions || targetQuestion.custom.options\n : [];\n const existedOptIds = realShowOptions.map(el => el.id);\n realShowOptions = [\n ...realShowOptions,\n ...targetOptions\n .filter(\n el =>\n (thatQuestionSelectedOptionsIds || []).includes(el.id)\n && !existedOptIds.includes(el.id),\n )\n .map(el => {\n if (el.input) {\n // \"其他\"选项填空,引用的时候引用填入的文本\n const userInput\n = answers[filterByQuestionId]?.option_blank?.[el.id]?.[0];\n return {\n id: el.id,\n isTrap: false,\n jumpId: '-1',\n text:\n !window.showEnQuest && userInput\n ? `${el.text} - ${userInput}`\n : el.text,\n enText:\n window.showEnQuest && userInput\n ? `${el.enText} - ${userInput}`\n : el.enText,\n };\n }\n return el;\n }),\n ];\n if (\n targetQuestion?.custom.other?.status\n && (answers[filterByQuestionId]?.selected || []).includes('other')\n ) {\n // 老版“其他”\n const userInput = answers[filterByQuestionId]?.text;\n realShowOptions.push({\n id: 'other',\n isTrap: false,\n jumpId: '-1',\n text:\n !window.showEnQuest && userInput\n ? `${getLocalText('placeholder.other')} - ${userInput}`\n : getLocalText('placeholder.other'),\n enText:\n window.showEnQuest && userInput\n ? `${getLocalText('placeholder.other')} - ${userInput}`\n : getLocalText('placeholder.other'),\n });\n }\n });\n return realShowOptions;\n}\n// matrix题目 获取实际显示的题目\nexport function getRealShowLine({ question, answers }) {\n const realShowLines = (question.custom.lines || []).filter(el =>\n checkDepRule({ answers, dep: el.dep }),\n );\n return realShowLines;\n}\n\nexport function checkDepRule({ answers = {}, dep }) {\n // 如果没有依赖规则\n if (!dep || !dep.cons || !dep.cons.length) return true;\n // 显示依赖可能有多个\n for (let i = 0; i < dep.cons.length; i++) {\n const con = dep.cons[i];\n if (!con.id) continue;\n // 由于matrix子题目的存在 依赖的部分包含questionId 和 子题目lineId\n const [depQuestionId, lineId] = con.id.split('--matrix--');\n // 判断当前依赖的这一题是否可见\n const q = (window.allQuestions || []).find(q => q.id === depQuestionId);\n // 如果依赖的题目不可见\n if (!q || !answers[depQuestionId]) {\n // 如果约束类型是and,而依赖的题目不可见 则无法满足and的条件.\n if (dep.type === 'and') return false;\n // 约束类型是or,看下一个。\n continue;\n }\n // if 后 是可以找到依赖题目的case\n // 取得用户的答案selected数组, 不同题型的答案存在不同的数据结构中\n let selectedIds;\n if (q.type === 'scale') {\n selectedIds\n = answers[q.id] && answers[q.id].degree ? [answers[q.id].degree] : [];\n } else if (q.type === 'matrix') {\n selectedIds = (answers[q.id] && answers[q.id].selected[lineId]) || [];\n } else if (q.type === 'location') {\n selectedIds\n = answers[q.id] && answers[q.id].location\n ? [answers[q.id].location.join('/')]\n : [];\n } else {\n selectedIds = (answers[q.id] && answers[q.id].selected) || [];\n }\n\n let isOK;\n if (con.checked) {\n // 显示当前题目的要求是 选择了 '之一' optionsIds中的选项\n if (con.type !== 'all') {\n isOK = selectedIds.some(id => con.optionIds.includes(id));\n } else {\n // 选择了'全部' optionsIds中的选项\n isOK = (con.optionIds || []).every(id => selectedIds.includes(id));\n }\n } else {\n // location题型\n isOK = selectedIds.every(id => !con.optionIds.includes(id));\n }\n // 旧版问卷没有selected 字段, 新版增加了selected 覆盖旧版的逻辑 当selected为true时和旧版一样\n if (con.selected === false) {\n if (con.type === 'all') {\n isOK = !con.optionIds.every(id => selectedIds.includes(id));\n } else if (con.type === 'any') {\n // optionsIds中的全部 都没有选择\n isOK = con.optionIds.every(id => !selectedIds.includes(id));\n } else {\n isOK = con.optionIds.some(id => !selectedIds.includes(id));\n }\n }\n // 如果当前依赖满足且约束类型是or\n if (isOK && dep.type === 'or') {\n return true;\n }\n // 如果当前依赖未满足,且约束类型是and\n if (!isOK && dep.type === 'and') {\n return false;\n }\n }\n // 如果运行到这里了,只有两种情况:\n // 1. 约束类型是and且所有的依赖都满足(\b应当返回true\n // 2. 约束类型是or且所有依赖都未满足 (应当返回false\n return dep.type === 'and';\n}\n\nexport const questionFilter = (() => {\n // 被展示过的题目\n let visibles = [];\n function checkJumpOver({ answers = {}, questions, question }) {\n // 如果离得最近可见的选择/量表没有跳过它,那么前面的选择/量表也不可能跳过它。\n const typeList = visibles.map(q => q.type);\n // 只有选择/量表有跳到哪的逻辑\n const index = Math.max(\n typeList.lastIndexOf('single'),\n typeList.lastIndexOf('nonScoreSingle'),\n typeList.lastIndexOf('singleSelect'),\n typeList.lastIndexOf('nonScoreSingleSelect'),\n typeList.lastIndexOf('multi'),\n typeList.lastIndexOf('nonScoreMulti'),\n typeList.lastIndexOf('scale'),\n );\n // 前面根本不存在选择/量表\n if (index === -1) return false;\n const q = visibles[index];\n let selectedId;\n\n switch (q.type) {\n // 多选跳转逻辑\n case 'multi': {\n const selectedIds = answers[q.id]?.selected;\n if (!selectedIds?.length) return false;\n const { multiJumpRules } = q;\n if (!multiJumpRules?.length) return false;\n\n const qIndex = questions.findIndex(q => q.id === question.id);\n\n // optionIds: 选项匹配,counts: 个数匹配\n const mode = multiJumpRules[0].logic ? 'counts' : 'optionIds';\n if (mode === 'optionIds') {\n for (let i = 0; i < multiJumpRules.length; i++) {\n const { optionIds, jumpId } = multiJumpRules[i];\n if (jumpId === undefined || jumpId === '-1') continue;\n // 判断选中的选项完全和跳转逻辑一致\n const allSame\n = optionIds.length === selectedIds.length\n && optionIds.every(id => selectedIds.includes(id));\n if (!allSame) continue;\n\n const jumpIndex = questions.findIndex(q => q.id === jumpId);\n if (jumpId === 'end' || jumpIndex > qIndex) return true;\n }\n } else {\n for (let i = 0; i < multiJumpRules.length; i++) {\n const { count = 0, logic, jumpId } = multiJumpRules[i];\n if (jumpId === undefined || jumpId === '-1') continue;\n const { length: selectedIdsLength } = selectedIds;\n const jumpIndex = questions.findIndex(q => q.id === jumpId);\n // 判断符合一条就返回\n let match = false;\n if (logic === '<' && selectedIdsLength < count) {\n match = true;\n } else if (logic === '>' && selectedIdsLength > count) {\n match = true;\n } else if (logic === '=' && selectedIdsLength === count) {\n match = true;\n }\n\n if (match && (jumpId === 'end' || jumpIndex > qIndex)) return true;\n }\n }\n return false;\n }\n case 'scale':\n selectedId = answers[q.id] && answers[q.id].degree;\n break;\n default:\n // single & singleSelect\n selectedId = answers[q.id] && answers[q.id].selected?.[0];\n break;\n }\n\n if (!selectedId) return false;\n const { custom } = q;\n const option\n = selectedId === 'other'\n ? custom.other\n : (custom.options || []).find(o => o.id === selectedId);\n if (!option) return false;\n // 如果选择的是其他,但是其他却没有呈现,Impossible!\n if (option.status === 0) return false;\n // 如果当前题目没有跳\n if (option.jumpId === undefined || option.jumpId === '-1') return false;\n // 判断是否跳过去了\n const qIndex = questions.findIndex(q => q.id === question.id);\n const jumpIndex = questions.findIndex(q => q.id === option.jumpId);\n if (option.jumpId === 'end' || option.jumpId === 'nextEnd' || jumpIndex > qIndex) return true;\n return false;\n }\n function checkNextEnd({ answers = {} }) {\n // 如果离得最近可见的选择/量表没有跳过它,那么前面的选择/量表也不可能跳过它。\n const typeList = visibles.map(q => q.type);\n // 只有选择/量表有跳到哪的逻辑\n const index = Math.max(\n typeList.lastIndexOf('single'),\n typeList.lastIndexOf('nonScoreSingle'),\n typeList.lastIndexOf('singleSelect'),\n typeList.lastIndexOf('nonScoreSingleSelect'),\n typeList.lastIndexOf('multi'),\n typeList.lastIndexOf('nonScoreMulti'),\n typeList.lastIndexOf('scale'),\n );\n // 前面根本不存在选择/量表\n if (index === -1) return false;\n const q = visibles[index];\n let selectedId;\n\n switch (q.type) {\n case 'scale':\n selectedId = answers[q.id] && answers[q.id].degree;\n break;\n default:\n // single & singleSelect\n selectedId = answers[q.id] && answers[q.id].selected?.[0];\n break;\n }\n if (!selectedId) return false;\n const { custom } = q;\n const option\n = selectedId === 'other'\n ? custom.other\n : (custom.options || []).find(o => o.id === selectedId);\n if (!option) return false;\n if(option.jumpId === 'nextEnd') return true\n return false\n }\n\n return (questions, answers) => {\n visibles = [];\n for (let i = 0; i < questions.length; i++) {\n const question = questions[i];\n // 如果是分页符号\n if (typeChecker.isPageBreak(question)) {\n // report不需要分页\n if (i && window.isReport) continue;\n // 如果分页符没有与前面重复,则push到visibles中去。\n if (!typeChecker.isPageBreak(visibles[visibles.length - 1])) {\n visibles.push(question);\n } else {\n // 这个逻辑是为了显示正确的分页描述\n visibles.pop();\n visibles.push(question);\n }\n continue;\n }\n // 检查是否被跳过\n if (checkJumpOver({ answers, questions, question })) {\n if (!window.isReport && answers?.[question.id]) {\n delete answers[question.id];\n }\n continue;\n }\n // 判断显示依赖\n if (checkDepRule({ answers, dep: question.dep })) {\n // 依赖没问题,可以显示!\n visibles.push(question);\n } else if (!window.isReport && answers?.[question.id]) {\n delete answers[question.id];\n }\n }\n return {visibles: visibles, isNextEnd: checkNextEnd({ answers })};\n };\n})();\n\nexport const inputChecker = (text, restrictions) => {\n const {\n contentType, // 类型\n maxWords, // 最长\n minWords, // 最短\n openWordsRestriction, // 是否限制长度\n } = restrictions;\n if (openWordsRestriction) {\n if (text.length > maxWords || text.length < minWords) {\n return `${minWords} - ${maxWords}`;\n }\n }\n\n if (contentType) {\n switch (contentType) {\n case 'any':\n return true;\n case 'number':\n if (text.match(/^\\d+$/)) return true;\n break;\n case 'chinese':\n if (text.match(/^[\\u4e00-\\u9fa5\\s]+$/)) return true;\n break;\n case 'english':\n if (text.match(/^[a-zA-Z\\s]+$/)) return true;\n break;\n case 'email':\n if (text.match(/^[a-zA-Z0-9.-_]+?@[a-zA-Z0-9-_]+?\\.[a-zA-Z0-9-_.]+$/)) return true;\n break;\n case 'phone':\n if (text.match(/^\\+?\\d+$/)) return true;\n break;\n case 'date':\n if (text.match(/^[\\d\\s-\\\\/.]+$/)) return true;\n break;\n }\n return contentType;\n }\n // 没有设置的规则就都是合法的\n return true;\n};\n","export const noop = () => {};\n\nexport const checkUndefined = obj =>\n Object.values(obj).every(v => v !== undefined);\n\nexport const toInt = (str, errRet = null) => {\n if (!str) return errRet;\n if (typeof str === 'number') return Math.round(str);\n if (typeof str !== 'string') {\n console.error(\n `Notice, you are converting an ${typeof str} into a number, it's most probably a bug.`,\n );\n return errRet;\n }\n const ret = Number.parseInt(str, 10);\n if (Number.isNaN(ret)) return errRet;\n return ret;\n};\n\nexport const CaseUtil = {\n // 把python服务器返回的snake风格的接口字段转化为caml风格\n toCaml(obj, upperFirst = false) {\n if (!obj) return obj;\n const ret = Array.isArray(obj) ? [] : {};\n Object.keys(obj).forEach(key => {\n const value = obj[key];\n let keyCaml = key\n .toLowerCase()\n .replace(/_([a-z])/g, (_, c) => c.toUpperCase());\n if (upperFirst) keyCaml = keyCaml.replace(/^[a-z]/, c => c.toUpperCase());\n if (isObject(value)) ret[keyCaml] = this.toCaml(value, upperFirst);\n else ret[keyCaml] = value;\n });\n return ret;\n },\n // 把js的Caml风格的接口字段转化为snake风格\n toSnake(obj) {\n if (!obj) return obj;\n const ret = Array.isArray(obj) ? [] : {};\n Object.keys(obj).forEach(key => {\n const value = obj[key];\n const keyLine = key\n .replace(\n /[A-Z]/g,\n (c, offset) => `${offset ? '_' : ''}${c.toLowerCase()}`,\n )\n .toLowerCase();\n if (isObject(value)) ret[keyLine] = this.toSnake(value);\n else ret[keyLine] = value;\n });\n return ret;\n },\n};\n\nexport const isObject = obj => obj && typeof obj === 'object';\n\nexport const cloneDeep = (src = {}, ...tars) => {\n for (let i = 0; i < tars.length; i++) {\n const tar = tars[i];\n if (!isObject(tar)) continue;\n // bfs\n const Q = [];\n Q.push({ src, tar });\n while (Q.length) {\n const now = Q.shift();\n const keys = Object.keys(now.tar);\n for (let j = 0; j < keys.length; j++) {\n const key = keys[j];\n if (isObject(now.tar[key])) {\n now.src[key] = now.src[key] || Array.isArray(now.tar[key]) ? [] : {};\n Q.push({ src: now.src[key], tar: now.tar[key] });\n } else {\n now.src[key] = now.tar[key];\n }\n }\n }\n }\n return src;\n};\n\nexport const closest = (el, selector) => {\n const matchesSelector\n = el.matches\n || el.webkitMatchesSelector\n || el.mozMatchesSelector\n || el.msMatchesSelector;\n let copyEl = el;\n while (copyEl) {\n if (matchesSelector.call(copyEl, selector)) {\n return copyEl;\n }\n copyEl = copyEl.parentElement;\n }\n return null;\n};\n\nexport const getRealName = ({ question, answers }) => {\n const [nameRef, lineId] = (question.nameRef || '').split('--matrix--');\n let { enName } = question;\n const { name: defaultName = '' } = question;\n if (!enName) enName = 'Question';\n let name = window.showEnQuest ? enName : defaultName;\n const key = '{选项引用}';\n const key2 = '{xxxx}';\n const reg = new RegExp(key, 'g');\n const reg2 = new RegExp(key2, 'g');\n if (\n (name.includes(key) || name.includes(key2))\n && nameRef\n && answers[nameRef]\n ) {\n const refAns = answers[nameRef];\n if (refAns.type === 'scale') {\n name = name.replace(reg, refAns.degree).replace(reg2, refAns.degree);\n } else if (refAns.type === 'location') {\n name = name\n .replace(reg, refAns.location.join('/'))\n .replace(reg2, refAns.location.join('/'));\n } else if (refAns.type === 'matrix') {\n const textArray = [];\n ((refAns.selected || {})[lineId] || []).forEach(selected => {\n if (selected === 'other') {\n let { text = '其他' } = refAns;\n if (text.length > 20) {\n text = `其他:${text.substring(0, 20)}...`;\n } else {\n text = `其他:${text}`;\n }\n textArray.push(text);\n } else if (selected) {\n const targetQuestion = window.allQuestions.find(\n el => el.id === nameRef,\n );\n if (targetQuestion) {\n const targetOption = targetQuestion.custom.options.find(\n el => el.id === selected,\n );\n if (targetOption) {\n const selectedOption = window.showEnQuest\n ? targetOption.enText\n : targetOption.text;\n textArray.push(selectedOption);\n }\n }\n }\n name = name\n .replace(reg, textArray.join(' / '))\n .replace(reg2, textArray.join(' / '));\n });\n } else {\n const textArray = [];\n (refAns.selected || []).forEach(selected => {\n if (selected === 'other') {\n let { text = '其他' } = refAns;\n if (text.length > 20) {\n text = `其他:${text.substring(0, 20)}...`;\n } else {\n text = `其他:${text}`;\n }\n textArray.push(text);\n } else if (selected) {\n const targetQuestion = window.allQuestions.find(\n el => el.id === nameRef,\n );\n if (targetQuestion) {\n const targetOption = targetQuestion.custom.realShowOptions.find(\n el => el.id === selected,\n );\n if (targetOption) {\n const selectedOption = window.showEnQuest\n ? targetOption.enText\n : targetOption.text;\n textArray.push(selectedOption.html2Text());\n }\n }\n }\n });\n name = name\n .replace(reg, textArray.join(' / '))\n .replace(reg2, textArray.join(' / '));\n }\n }\n return name.replace(reg, '').replace(reg2, '');\n};\nexport const randomComp = () => Math.random() - 0.5;\nexport function randomArray(options) {\n const saveNoRandomOptions = [];\n for (let i = options.length - 1; i >= 0; i--) {\n const option = options[i];\n if (option.noRandom) {\n saveNoRandomOptions.push([option, i]);\n options.splice(i, 1);\n }\n }\n const result = options.slice().sort(randomComp);\n while (saveNoRandomOptions.length) {\n const [option, index] = saveNoRandomOptions.pop();\n result.splice(index, 0, option);\n }\n return result;\n}\n\n// 返回string\nexport const getUrlParamsText = (location = {}) => {\n const { search = '' } = location;\n const extra = filterXss(decodeURIComponent(window.location.search.substr(1)));\n return filterXss(decodeURIComponent(search)).concat(extra ? `&${extra}` : '');\n};\n\n// 返回对象\nexport const getUrlParams = (location = {}) => {\n // 兼容hash后的自定义参数\n let { search = '' } = location;\n search = filterXss(search.substr(1));\n const extra = filterXss(decodeURIComponent(window.location.search.substr(1)));\n search = search.concat(extra ? `&${extra}` : '');\n\n const params = search.split('&');\n const customAnswer = {};\n params.forEach(str => {\n if (str.includes('=')) {\n const [key] = str.split('=');\n customAnswer[key] = str.substring(key.length + 1); // 从=号以后都是value, value有可能包含=号\n }\n });\n return customAnswer;\n};\n\nfunction filterXss(str) {\n // 去除包含<>内容的,防止xss漏洞\n let filterValue = str.replace(/<.*?>/g, '');\n // 去除<开头类型的xss漏洞\n filterValue = filterValue.replace(/<+.*$/g, '');\n return filterValue;\n}\n\nexport const HTMLDecode = text => {\n let temp = document.createElement('div') || {};\n temp.innerHTML = text;\n const output = (temp?.innerText || temp?.textContent) ?? '';\n temp = null;\n return output;\n};\n\nexport function getPerformanceTiming() {\n const { performance } = window;\n\n if (!performance) {\n return;\n }\n\n const t = performance.timing;\n const times = {};\n\n times.loadPage = t.loadEventEnd - t.navigationStart;\n\n times.domReady = t.domComplete - t.responseEnd;\n\n times.ttfb = t.responseStart - t.navigationStart;\n\n times.loadEvent = t.loadEventEnd - t.loadEventStart;\n\n return times;\n}\n","import React, { Component, useEffect } from 'react';\nimport { css } from 'emotion';\nimport { Toast } from 'antd-mobile';\nimport { useDrag, useDrop, useDragLayer } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport sanitize from 'sanitize-html';\nimport FormItem from '../FormItem';\nimport IconFont from '@/components/common/IconFont';\n\nimport Sort from '../../common/Question/Sort';\n\nexport default class SortMobild extends Component {\n onErrorClick(error) {\n Toast.info(error);\n }\n\n render() {\n const { label, question } = this.props;\n const { sortType = 'drag' } = question.custom;\n return (\n \n {({\n options,\n error,\n onChange,\n formAnswer,\n handleDrop,\n handleDragStart,\n clickedOptions,\n }) => (\n \n
\n
\n \n {(options || []).map((option, index) => (\n \n ))}\n
\n
\n
\n )}\n
\n );\n }\n}\n\nexport function OptionItem({\n question,\n option,\n handleDrop,\n sortType,\n onChange,\n handleDragStart,\n index,\n isLast,\n isFirst,\n clickedOptions,\n}) {\n const optionLen = question.custom.options.length;\n const [{ isDragging }, drag, preview] = useDrag({\n item: {\n type: 'OPTION',\n option,\n index,\n },\n canDrag: () => sortType === 'drag',\n begin: () => {\n handleDragStart(option.id);\n },\n end: () => {\n handleDragStart('');\n },\n collect: monitor => ({\n isDragging: !!monitor.isDragging(),\n }),\n });\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n }, []);\n const [{ isOver }, drop] = useDrop({\n accept: 'OPTION',\n hover: item => {\n const dragIndex = item.index;\n const hoverIndex = index;\n if (dragIndex === undefined) {\n return;\n }\n // Don't replace items with themselves\n if (dragIndex === hoverIndex) {\n return;\n }\n setTimeout(() => {\n handleDrop(option.id);\n }, 100);\n item.index = hoverIndex;\n },\n drop: () => {},\n collect: monitor => ({\n isOver: !!monitor.isOver(),\n }),\n });\n return (\n {\n if (sortType !== 'click') return;\n onChange.click(option.id);\n }}\n >\n
\n {sortType === 'drag' &&
{index + 1}
}\n \n \n
\n
\n \n );\n}\n\nfunction OptionTextRender(props) {\n const { option, isDragging, sortType, index, clickedOptions } = props;\n return (\n \n {sortType === 'drag' && }\n {sortType === 'click' && (\n
\n {clickedOptions.includes(option.id) && {index + 1}}\n
\n )}\n\n
\n \n {option.description && (\n \n {option.description}\n
\n )}\n {option.img ? (\n \n ) : (\n ''\n )}\n \n \n );\n}\n\nconst layerStyles = {\n position: 'fixed',\n pointerEvents: 'none',\n zIndex: 100,\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n};\n\nexport const CustomDragLayer = () => {\n const { itemType, isDragging, item, initialOffset, currentOffset } = useDragLayer(monitor => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n isDragging: monitor.isDragging(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n }));\n function renderItem() {\n if (itemType === 'OPTION') {\n return ;\n }\n return null;\n }\n if (!isDragging) {\n return null;\n }\n return (\n \n
{renderItem()}
\n \n );\n};\nfunction getItemStyles(initialOffset, currentOffset) {\n if (!initialOffset || !currentOffset) {\n return {\n display: 'none',\n };\n }\n const { x, y } = currentOffset;\n const transform = `translate(${x}px, ${y}px)`;\n return {\n border: '1px solid var(--ant-border)',\n borderRadius: 4,\n transform,\n WebkitTransform: transform,\n background: 'var(--ant-bg)',\n width: 'calc(100% - 50px)',\n color: 'var(--primary-color)',\n maxWidth: window.innerWidth > 1440 ? 720 : 630,\n boxShadow: '0 6px 16px 0 var(--ant-border)',\n };\n}\n\nconst sortIndex = (index, optionLen) => css`\n border-top: ${index ? 0 : '1px solid var(--ant-border)'};\n border-bottom: ${index === optionLen - 1 ? '1px solid var(--ant-border)' : 0};\n border-radius: ${index ? 0 : '2px 2px 0 0 !important'};\n border-radius: ${index === optionLen - 1 ? '0 0 2px 2px !important' : 0};\n user-select: none;\n pointer-events: none;\n background: var(--ant-bg);\n color: var(--text-color);\n border-left: 1px solid var(--ant-border);\n border-right: 1px solid var(--ant-border);\n width: 29px;\n font-size: 16px;\n margin-right: 16px;\n display: flex;\n flex: none;\n flex-direction: column;\n align-items: center;\n justify-content: space-around;\n`;\n\nconst dragItemBox = css`\n flex: 1;\n max-width: ${window.innerWidth > 1440 ? 720 : 630}px;\n cursor: pointer;\n padding: 0;\n .ant-checkbox {\n display: flex;\n align-items: flex-start;\n }\n .ant-input {\n // border-color: var(--border-gray);\n border-color: var(--ant-border);\n }\n .option-error .ant-input {\n border-color: var(--text-red);\n }\n .other {\n width: auto;\n }\n .ant-checkbox + span {\n display: inline-block;\n margin-top: -3px;\n }\n .optionText {\n font-size: 1rem;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--text-color);\n }\n .indexBox {\n height: 18px;\n width: 18px;\n border-radius: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--ant-border);\n }\n`;\n","import React, { Component } from 'react';\nimport { List } from 'antd-mobile';\nimport { css } from 'emotion';\n\nexport default class FormItem extends Component {\n render() {\n const { label, error, children } = this.props;\n return (\n
\n label}>\n {!!error &&
{error}
}\n {children}\n
\n
\n );\n }\n}\n\nconst listBoxCla = css`\n &#listBox {\n background: var(--ant-bg);\n width: 100%;\n margin: 0;\n border-radius: 5px;\n .errorText {\n background: rgba(245, 74, 69, 0.11);\n color: var(--text-red);\n position: absolute;\n width: 100%;\n left: 0;\n transform: translateY(calc(-100% - 8px));\n height: 24px;\n z-index: 2;\n padding: 4px 16px;\n font-size: 12px;\n line-height: 1.5;\n }\n .errorLine {\n background: rgba(245, 74, 69, 0.11);\n color: var(--text-red);\n width: 100vw;\n height: 24px;\n padding: 4px 16px;\n font-size: 12px;\n line-height: 1.5;\n }\n .am-list-item .am-list-thumb:first-of-type {\n margin-right: 12px;\n }\n .am-list-header {\n }\n .am-list-body {\n padding: 32px 16px 0;\n border-top: 0px;\n border-bottom: 0px;\n }\n .am-list-line {\n border-bottom: 0px;\n }\n .am-list-body::before {\n background-color: var(--ant-bg) !important;\n }\n .am-list-body div:not(:last-child) .am-list-line::after {\n background-color: var(--ant-bg) !important;\n }\n .am-list .am-list-item.am-textarea-item {\n border-bottom: 0;\n background: var(--am-entity-bg) !important;\n }\n .am-list .am-list-item.am-textarea-item::after {\n background-color: var(--ant-bg) !important;\n }\n .am-list-body::after {\n background-color: var(--ant-bg) !important;\n }\n .am-list-item {\n padding-left: 0px;\n padding-right: 0px;\n min-height: auto;\n width: calc(100% - 10px);\n }\n .am-list .am-list-item.am-checkbox-item .am-list-thumb .am-checkbox {\n width: min-content;\n }\n .am-list .am-list-item.am-checkbox-item .am-list-thumb .am-checkbox-inner {\n left: 0px;\n right: 0px;\n top: 1px;\n }\n .am-checkbox-agree {\n margin: 0;\n padding: 0;\n }\n\n .am-list-item.am-checkbox-item .am-list-thumb {\n width: 22px;\n height: 22px;\n }\n\n .am-list-item .am-input-control {\n font-size: 16px !important;\n input {\n font-size: 16px !important;\n }\n }\n\n .am-list-item.am-input-focus .am-input-clear {\n position: absolute;\n right: 0;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n .am-list-item .am-input-control input::placeholder {\n font-family: PingFangSC sans-serif Arial Helvetica;\n font-size: 16px;\n font-weight: 400;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--text-color-thirdly);\n }\n .am-checkbox-agree .am-checkbox-agree-label {\n margin-left: 0px;\n margin-right: 0px;\n display: flex;\n align-items: flex-start;\n .am-checkbox {\n position: relative;\n & + div {\n margin-right: 20px;\n }\n .am-checkbox-inner {\n top: 1px;\n }\n }\n }\n .am-list-content {\n padding-top: 0px;\n font-family: PingFangSC sans-serif Arial Helvetica;\n font-weight: normal;\n font-size: 16px;\n text-align: start;\n padding-bottom: 0;\n .choice-selected {\n color: var(--primary-color);\n }\n span {\n overflow-wrap: break-word;\n word-break: break-word;\n }\n }\n .am-checkbox-agree-label {\n font-size: 16px;\n }\n .am-list-extra {\n font-size: 16px;\n }\n .am-list-item.am-input-error .am-input-error-extra {\n display: none;\n }\n .am-textarea-error .am-textarea-error-extra {\n display: none;\n }\n .am-list-item.am-input-error input {\n border-color: var(--text-red);\n }\n .am-textarea-error textarea {\n border-color: var(--text-red);\n }\n }\n .am-image-picker-list {\n margin: 0;\n padding: 0;\n }\n`;\n","import React from 'react';\nimport withPalette from './index';\nimport { useStyles } from '../../../common/Question/MaterialUI/materialTheme';\nimport Slider from '../../../common/Question/MaterialUI/MaterialSlider';\n\nfunction MaterialSlider(props) {\n const classes = useStyles();\n return (\n
\n \n
\n );\n}\n\nexport default withPalette(MaterialSlider);\n","import React, { PureComponent } from 'react';\nimport { ThemeProvider } from '@material-ui/styles';\nimport { theme } from '@/components/common/Question/MaterialUI/materialTheme';\nimport themesRepo from '@/theme';\n\nexport default function withPalette(UIComponent) {\n return class extends PureComponent {\n constructor(props) {\n super(props);\n\n const _theme = sessionStorage.getItem('survey-quest-theme');\n const presetTheme = themesRepo[_theme];\n\n this.state = {\n presetTheme,\n };\n }\n\n componentDidMount() {\n const _theme = sessionStorage.getItem('survey-quest-theme');\n let presetTheme = themesRepo[_theme];\n window.addEventListener('setItem', ({ newValue }) => {\n presetTheme = themesRepo[newValue];\n });\n this.setState({ presetTheme });\n }\n\n render() {\n return theme(this.state.presetTheme) ? (\n \n \n \n ) : (\n \n );\n }\n };\n}\n","import React, { useEffect, useState } from 'react';\nimport { Result, Checkbox, Divider, Tag } from 'antd';\nimport { css } from 'emotion';\nimport styled from '@emotion/styled';\nimport isEqual from 'lodash/isEqual';\nimport { getLocalText } from '../utilities/language';\nimport { scrollToTop } from '../utilities/pageLogic';\nimport IconFont from '@/components/common/IconFont';\n\nconst aReg = /JumpTarget=parent.*target>/g;\nconst needIdReg = /need_survey_id/g;\n\n// eslint-disable-next-line\nexport default props => {\n const {\n res,\n finishImgUrl,\n finishImgScale,\n realPrompt: prePrompt,\n title,\n type,\n did,\n uid,\n errorCode,\n } = props;\n const { lottery_url, score_analysis } = res;\n const [showAna, setShowAna] = useState(false);\n const [realPrompt, setPrompt] = useState('');\n\n useEffect(() => {\n const resultIconBox = document.querySelector('.ant-result-icon');\n const mask = document.createElement('div');\n mask.className = 'iconMask';\n resultIconBox.appendChild(mask);\n\n // FIXME: 根据约定关键字JumpTarget=parent修改a的target属性\n setPrompt(\n prePrompt\n ? prePrompt.split('', `target=\"_parent\">`))\n : acc.concat(i ? ' {\n if (type === 'success') {\n mask.style.width = 0;\n } else {\n mask.style.height = 0;\n }\n }, 100);\n }, []);\n\n function showAnswerAnalysis(e) {\n e.preventDefault();\n setShowAna(true);\n setTimeout(() => {\n scrollToTop();\n }, 0);\n }\n\n function hideAnswerAnalysis() {\n setShowAna(false);\n }\n\n function getRichOption({ option, img, video, audio, scale = 1 }) {\n return option\n ? option\n .concat(img ? `img` : '')\n .concat(audio ? `\n \n )}\n \n {finishImgUrl && (\n
\n \n
\n )}\n \n )\n }\n />\n \n );\n};\n\nconst AnalysisBox = styled.div`\n padding: 15px;\n overflow: hidden;\n color: var(--text-color);\n h2 {\n color: var(--text-color);\n }\n`;\n\nconst EndingBox = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n .ant-result-icon {\n position: relative;\n .iconMask {\n width: 36px;\n height: 36px;\n border-radius: 50%;\n bottom: 18px;\n right: 50%;\n transform: translateX(18px);\n z-index: 2;\n position: absolute;\n background: var(--primary-color);\n transition: width 0.5s;\n }\n }\n .score {\n font-size: 26px;\n font-weight: 500;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--primary-color);\n }\n`;\n\nconst tagTitle = css`\n display: flex;\n align-items: flex-start;\n margin-top: 10px;\n white-space: pre-line;\n`;\n\nconst singleAnalysisCard = css`\n padding: 10px;\n border: 1px solid var(--ant-bg);\n border-radius: 4px;\n background: var(--ant-bg);\n color: var(--text-color);\n h3,\n h4 {\n color: var(--text-color);\n }\n`;\n","import React from 'react';\nimport styled from '@emotion/styled';\nimport sanitizeHtml from 'sanitize-html';\nimport { Switch } from 'antd';\nimport { Consumer } from '@/store';\n\nconst pcTitleColor = 'var(--text-color)';\nexport default props => (\n \n {store => {\n const { loading, quest, page, questions } = store.state;\n if (loading) return 'loading...';\n const {\n header, title, desc, titleHide, enTitle, enDesc, showProgress, bilingual,\n } = quest;\n let { titleColor } = quest;\n if (titleColor === '#2d2d2d') {\n titleColor = pcTitleColor;\n }\n\n const leftTip = '中';\n const rightTip = 'EN';\n\n return (\n
\n {!window.isReport && (\n <>\n {bilingual && (\n \n {leftTip}{' '}\n {\n window.showEnQuest = checked;\n store.action.update(questions.map(q => q.id));\n }}\n />{' '}\n {rightTip}\n \n )}\n {header?.type === 'url' && header?.url && (\n
\n \"header\"\n
\n )}\n \n )}\n \n \n {window.showEnQuest ? enTitle : title}\n \n \n \n
\n );\n }}\n
\n);\n\nconst Header = styled.section`\n .header {\n overflow: hidden;\n background: transparent;\n\n p {\n margin-bottom: 0;\n }\n }\n .header-pic {\n position: relative;\n z-index: 1;\n img {\n width: 100%;\n }\n }\n`;\n","const tcpyConfig = require('../../tcpy-conf.json').TTP;\n\nconst config\n = process.env.IDC_ENV !== 'TTP'\n ? {}\n : {\n ...tcpyConfig,\n };\n\nexport default config;\n","import cloneDeep from 'lodash/cloneDeep';\nimport ttpConfig from './ttp';\nconst config = cloneDeep(ttpConfig);\nexport default config;\n","import React from 'react';\nimport { Icon } from 'antd';\nimport env from '@/env';\n\nconst IconFont = Icon.createFromIconfontCN({\n scriptUrl: env.cdn.iconfont,\n});\n\nexport default function IconFontComponent({\n type,\n style = {},\n className = '',\n color = 'var(--text-color)',\n}) {\n return (\n \n );\n}\n","import { Component } from 'react';\nimport { getLocalText } from '@/utilities/language';\nimport { getRealShowOption, inputChecker } from '@/utilities/quest';\nimport { randomArray, randomComp } from '@/utilities/common';\n\nconst defaultAnswer = {\n selected: [],\n text: '',\n type: 'single',\n};\nexport default class SingleChoice extends Component {\n constructor(props) {\n super(props);\n const { question = {}, answers, quotaStrategy } = props;\n this.state = {\n options: (question.custom || {}).options || [],\n errorOption: '',\n realShowOptions: getRealShowOption({ question, answers, quotaStrategy }),\n };\n if (question.custom.random) {\n // 随机排序\n this.state.realShowOptions = randomArray([...this.state.realShowOptions]);\n } else if (question.custom.reverse) {\n const actuallyReverse = Math.random() >= 0.5;\n if (actuallyReverse) {\n this.state.realShowOptions = this.state.realShowOptions.reverse();\n }\n }\n }\n\n static getDerivedStateFromProps(nextProps, state) {\n const { question, answers, quotaStrategy } = nextProps;\n let realShowOptions = getRealShowOption({\n question,\n answers,\n quotaStrategy,\n });\n window.allQuestions.find(\n el => el.id === question.id,\n ).custom.realShowOptions = realShowOptions;\n if (question.custom.random) {\n realShowOptions = randomArray(realShowOptions);\n }\n if (\n realShowOptions.length !== state.realShowOptions.length\n || realShowOptions.some(\n el => !state.realShowOptions.find(item => item.id === el.id),\n )\n || realShowOptions.some(\n el =>\n el.text\n !== state.realShowOptions.find(item => item.id === el.id).text,\n )\n ) {\n if (question.custom.random) {\n realShowOptions = randomArray(realShowOptions);\n }\n return {\n realShowOptions,\n };\n }\n return null;\n }\n\n componentDidUpdate(prevProps, prevState) {\n const prevQ = prevProps.question;\n const nextQ = this.props.question;\n if (nextQ.optionFilter && nextQ.optionFilter[0] && !window.isReport) {\n const [filterByQuestionId, lineId] = nextQ.optionFilter[0].id.split(\n '--matrix--',\n );\n const nowAnswers = this.props.answers;\n const prevAnswers = prevProps.answers;\n let nowThatQuestionSelectedOptionsIds = nowAnswers[filterByQuestionId]\n ? nowAnswers[filterByQuestionId].selected\n : [];\n let prevThatQuestionSelectedOptionsIds = prevAnswers[filterByQuestionId]\n ? prevAnswers[filterByQuestionId].selected\n : [];\n if (lineId) {\n nowThatQuestionSelectedOptionsIds\n = nowThatQuestionSelectedOptionsIds[lineId] || [];\n prevThatQuestionSelectedOptionsIds\n = prevThatQuestionSelectedOptionsIds[lineId] || [];\n }\n if (\n nowThatQuestionSelectedOptionsIds\n !== prevThatQuestionSelectedOptionsIds\n && !(\n nowThatQuestionSelectedOptionsIds.length === 0\n && prevThatQuestionSelectedOptionsIds.length === 0\n )\n ) {\n this.props.form.setFieldsValue({\n [nextQ.id]: { type: 'single', selected: [], text: '' },\n });\n }\n }\n\n // 如果选项变了 就清空答案\n if (\n prevState.realShowOptions !== this.state.realShowOptions\n && !window.isReport\n ) {\n this.props.form.setFieldsValue({\n [nextQ.id]: { type: 'single', selected: [], text: '' },\n });\n }\n\n // 预览模式下面始终不成立(broadcastchannel 使用JSON.stringify传递数据\n // 问卷模式下面始终成立, 问卷结构不会改变\n if (prevQ === nextQ) return;\n // 打开随机按钮\n if (!prevQ.custom.random && nextQ.custom.random) {\n // eslint-disable-next-line\n this.setState({ options: nextQ.custom.options.slice().sort(randomComp) });\n }\n // 关闭随机按钮\n if (prevQ.custom.random && !nextQ.custom.random) {\n // eslint-disable-next-line\n this.setState({ options: nextQ.custom.options });\n }\n // 判断是否修改了options, 但是broadcast channel始终是深拷贝传递。所以这里不能比较地址了。\n if (\n JSON.stringify(nextQ.custom.options)\n !== JSON.stringify(prevQ.custom.options)\n ) {\n if (nextQ.custom.random) {\n // eslint-disable-next-line\n this.setState({\n options: nextQ.custom.options.slice().sort(randomComp),\n });\n } else {\n // eslint-disable-next-line\n this.setState({ options: nextQ.custom.options });\n }\n }\n }\n\n getSelectedChange(id, answer) {\n let text = '';\n if (id === 'other') {\n text = (answer && answer.text) || '';\n }\n return {\n type: this.props.question.type,\n selected: id ? [id] : [],\n text,\n option_blank: {\n ...answer.option_blank,\n },\n };\n }\n\n getInputChange(id, input, answer) {\n const text = (answer && answer.text) || '';\n return {\n type: this.props.question.type,\n selected: [id],\n text,\n option_blank: {\n ...answer.option_blank,\n [id]: [input],\n },\n };\n }\n\n getOtherTextChange(text) {\n return {\n type: this.props.question.type,\n selected: ['other'],\n text,\n };\n }\n\n validator = (rules, answer, callback) => {\n const { question, quotaStrategy } = this.props;\n const disabledOpts = quotaStrategy?.optionsQuota.filter(\n q => !q.remaining\n );\n const { type } = question;\n const { realShowOptions } = this.state;\n if (disabledOpts?.length === realShowOptions.length && question.required) {\n this.setState({\n errorOption: '',\n });\n callback();\n return; // 全部选项满额的时候就不检查了\n }\n if (question.required && answer.selected.length === 0) {\n this.setState({ errorOption: '' });\n callback(getLocalText('SingleChoice.Selected'));\n return;\n }\n const otherRequired = question.custom.other.status === 2;\n const otherChecked = answer.selected.includes('other');\n const textRequired = otherRequired && otherChecked;\n if (textRequired && !answer.text) {\n this.setState({ errorOption: 'other' });\n callback(getLocalText('SingleChoice.otherText'));\n return;\n }\n const optionBlank = answer.option_blank || {};\n const selectedOption = realShowOptions.find(\n el => el.id === answer.selected[0],\n );\n if (\n (type === 'single' || type === 'nonScoreSingle')\n && selectedOption\n && selectedOption.input === 'required'\n ) {\n try {\n if (!answer.option_blank[selectedOption.id][0]) {\n this.setState({ errorOption: selectedOption.id });\n callback(getLocalText('SingleChoice.Selected'));\n return;\n }\n } catch (error) {\n this.setState({ errorOption: selectedOption.id });\n callback(getLocalText('SingleChoice.Selected'));\n return;\n }\n }\n if (\n (type === 'single' || type === 'nonScoreSingle')\n && selectedOption\n && !!selectedOption.input\n && selectedOption.restrictions\n && optionBlank[selectedOption.id]\n ) {\n const result = inputChecker(\n answer.option_blank[selectedOption.id][0],\n selectedOption.restrictions,\n );\n if (result !== true) {\n this.setState({ errorOption: selectedOption.id });\n callback(result);\n return;\n }\n }\n this.setState({\n errorOption: '',\n });\n callback();\n };\n\n render() {\n const {\n question,\n answer = JSON.parse(JSON.stringify(defaultAnswer)),\n quotaStrategy,\n } = this.props;\n const { realShowOptions } = this.state;\n const { getFieldProps, getFieldError } = this.props.form;\n const id = question.id || 'unknown-form-item';\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: answer,\n rules: [\n {\n validator: this.validator,\n },\n ],\n });\n // 因为getFieldError无法判断error的来源,所以只能用这样的trick方法,\n // rc-form 写的真心不好\n let errorSelected;\n let errorText;\n const error = getFieldError(id);\n if (error && error[0]) [errorSelected] = error;\n if (error && error[0] === getLocalText('SingleChoice.otherText')) {\n [errorText] = error;\n }\n const disabledOptIds\n = quotaStrategy?.optionsQuota\n .filter(q => !q.remaining)\n .map(q => q.id) || [];\n const params = {\n options: realShowOptions,\n formAnswer,\n error: {\n selected: errorSelected,\n text: errorText,\n errorOption: this.state.errorOption,\n },\n onChange: {\n selected: selected =>\n onChange(this.getSelectedChange(selected, formAnswer)),\n text: text => onChange(this.getOtherTextChange(text)),\n input: (id, input) => {\n onChange(this.getInputChange(id, input, formAnswer));\n },\n },\n disabledOptIds,\n };\n\n return this.props.children(params);\n }\n}\n","import React, { Component } from 'react';\nimport { getRealShowOption, inputChecker } from '@/utilities/quest';\nimport { getLocalText } from '@/utilities/language';\nimport { randomArray } from '@/utilities/common';\n\nconst defaultAnswer = {\n selected: [],\n text: '',\n type: 'multi',\n};\nexport default class MultiChoice extends Component {\n constructor(props) {\n super(props);\n const { question, answers, quotaStrategy } = props;\n this.state = {\n options: question.custom.options,\n errorOption: '',\n realShowOptions: getRealShowOption({ question, answers, quotaStrategy }),\n isFocus: false,\n overDisabledIds: [],\n };\n if (question.custom.random) {\n // 随机排序\n this.state.realShowOptions = randomArray(this.state.realShowOptions);\n } else if (question.custom.reverse) {\n const actuallyReverse = Math.random() >= 0.5;\n if (actuallyReverse) {\n this.state.realShowOptions = this.state.realShowOptions.reverse();\n }\n }\n }\n\n static getDerivedStateFromProps(nextProps, state) {\n const { question, answers, quotaStrategy } = nextProps;\n let realShowOptions = getRealShowOption({\n question,\n answers,\n quotaStrategy,\n });\n window.allQuestions.find(\n el => el.id === question.id,\n ).custom.realShowOptions = realShowOptions;\n if (\n realShowOptions.length !== state.realShowOptions.length\n || realShowOptions.some(\n el => !state.realShowOptions.find(item => item.id === el.id),\n )\n || realShowOptions.some(\n el =>\n el.text\n !== state.realShowOptions.find(item => item.id === el.id).text,\n )\n ) {\n if (question.custom.random) {\n realShowOptions = randomArray(realShowOptions);\n }\n return {\n realShowOptions,\n };\n }\n return null;\n }\n\n componentDidUpdate(prevProps, prevState) {\n const prevQ = prevProps.question;\n const nextQ = this.props.question;\n if (nextQ.optionFilter && nextQ.optionFilter[0]) {\n const [filterByQuestionId, lineId] = nextQ.optionFilter[0].id.split(\n '--matrix--',\n );\n const nowAnswers = this.props.answers;\n const prevAnswers = prevProps.answers;\n let nowThatQuestionSelectedOptionsIds = nowAnswers[filterByQuestionId]\n ? nowAnswers[filterByQuestionId].selected\n : [];\n let prevThatQuestionSelectedOptionsIds = prevAnswers[filterByQuestionId]\n ? prevAnswers[filterByQuestionId].selected\n : [];\n if (lineId) {\n nowThatQuestionSelectedOptionsIds\n = nowThatQuestionSelectedOptionsIds[lineId] || [];\n prevThatQuestionSelectedOptionsIds\n = prevThatQuestionSelectedOptionsIds[lineId] || [];\n }\n if (\n nowThatQuestionSelectedOptionsIds\n !== prevThatQuestionSelectedOptionsIds\n && !(\n nowThatQuestionSelectedOptionsIds.length === 0\n && prevThatQuestionSelectedOptionsIds.length === 0\n )\n && !window.isReport\n ) {\n this.props.form.setFieldsValue({\n [nextQ.id]: {\n type: this.props.question.type,\n selected: [],\n text: '',\n },\n });\n }\n }\n\n // 如果选项变了 就清空答案\n if (\n prevState.realShowOptions !== this.state.realShowOptions\n && !window.isReport\n ) {\n this.props.form.setFieldsValue({\n [nextQ.id]: { type: this.props.question.type, selected: [], text: '' },\n });\n }\n // 预览模式下面始终不成立(broadcastchannel 使用JSON.stringify传递数据\n // 问卷模式下面始终成立, 问卷结构不会改变\n if (prevQ === nextQ) return;\n // 打开随机按钮\n if (!prevQ.custom.random && nextQ.custom.random) {\n // eslint-disable-next-line\n this.setState({ options: randomOptions([...nextQ.custom.options]) });\n }\n // 关闭随机按钮\n if (prevQ.custom.random && !nextQ.custom.random) {\n // eslint-disable-next-line\n this.setState({ options: nextQ.custom.options });\n }\n // 判断是否修改了options, 但是broadcastchannell始终是深拷贝传递。所以这里不能比较地址了。\n if (\n JSON.stringify(nextQ.custom.options)\n !== JSON.stringify(prevQ.custom.options)\n ) {\n if (nextQ.custom.random) {\n // eslint-disable-next-line\n this.setState({ options: randomOptions([...nextQ.custom.options]) });\n } else {\n // eslint-disable-next-line\n this.setState({ options: nextQ.custom.options });\n }\n }\n }\n\n getSelectedChange(selected, answer) {\n let text = (answer && answer.text) || '';\n const { option_blank = {} } = answer;\n if (!selected.includes('other')) {\n text = '';\n }\n return { type: this.props.question.type, selected, text, option_blank };\n }\n\n getOtherTextChange(text, answer) {\n const selected = (answer.selected || []).slice();\n const { option_blank = {} } = answer;\n if (!selected.includes('other')) selected.push('other');\n return { type: this.props.question.type, selected, text, option_blank };\n }\n\n getInputChange(id, input, answer) {\n const text = (answer && answer.text) || '';\n const selected = (answer.selected || []).slice();\n if (!selected.includes(id)) {\n selected.push(id);\n }\n const { option_blank = {} } = answer;\n return {\n type: this.props.question.type,\n text,\n selected,\n option_blank: {\n ...option_blank,\n [id]: [input],\n },\n };\n }\n\n validator = (rules, answer, callback) => {\n const { question, quotaStrategy } = this.props;\n const disabledOpts = quotaStrategy?.optionsQuota.filter(\n q => !q.remaining\n );\n const { realShowOptions, isFocus } = this.state;\n console.log(realShowOptions, 'realShowOptions');\n if (disabledOpts?.length === realShowOptions.length && question.required) {\n this.setState({\n errorOption: '',\n });\n callback();\n return; // 全部选项满额的时候就不检查了\n }\n const { min, max, options } = question.custom;\n if (\n answer.selected.length !== 0\n && ((!isFocus && min && answer.selected.length < min)\n || (max && answer.selected.length > max))\n ) {\n // callback(`需要选择多于${min}个小于${max}个答案`);\n this.setState({ errorOption: '' });\n callback(\n getLocalText(\n 'MultiChoice.min.or.max',\n min || +question.required,\n max || options.length + +(!!question.custom.other.status !== 0),\n ),\n );\n }\n if (max && answer.selected.length == max) {\n const params = [];\n realShowOptions.forEach(option => {\n if (answer.selected.indexOf(option.id) < 0) {\n params.push(option.id);\n }\n this.setState({ overDisabledIds: params });\n });\n } else {\n this.setState({ overDisabledIds: [] });\n }\n\n if (question.required && answer.selected.length === 0) {\n this.setState({ errorOption: '' });\n callback(getLocalText('SingleChoice.Selected'));\n return;\n }\n const otherRequired = question.custom.other.status === 2;\n const otherChecked = answer.selected.includes('other');\n const textRequired = otherRequired && otherChecked;\n if (textRequired && !answer.text) {\n this.setState({ errorOption: 'other' });\n callback(getLocalText('SingleChoice.otherText'));\n return;\n }\n for (const id of answer.selected) {\n if (id === 'other') {\n continue;\n }\n const selectedOption = realShowOptions.find(el => el.id === id);\n if (selectedOption && selectedOption.input === 'required') {\n try {\n if (!answer.option_blank[selectedOption.id][0]) {\n this.setState({ errorOption: id });\n callback(getLocalText('SingleChoice.Selected'));\n return;\n }\n } catch (error) {\n this.setState({ errorOption: id });\n callback(getLocalText('SingleChoice.Selected'));\n return;\n }\n }\n const optionBlank = answer.option_blank || {};\n if (\n selectedOption\n && !!selectedOption.input\n && selectedOption.restrictions\n && optionBlank[selectedOption.id]\n ) {\n const result = inputChecker(\n answer.option_blank[selectedOption.id][0],\n selectedOption.restrictions,\n );\n if (result !== true) {\n this.setState({ errorOption: selectedOption.id });\n callback(result);\n return;\n }\n }\n }\n this.setState({ errorOption: '' });\n callback();\n };\n\n render() {\n const {\n question,\n answer = JSON.parse(JSON.stringify(defaultAnswer)),\n quotaStrategy,\n } = this.props;\n const { realShowOptions, isFocus } = this.state;\n const { min, max, options, other } = question.custom;\n const { getFieldProps, getFieldError } = this.props.form;\n const id = question.id || 'unknown-form-item';\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: answer,\n rules: [\n {\n validator: this.validator,\n },\n ],\n });\n // 因为getFieldError无法判断error的来源,所以只能用这样的trick方法,\n // rc-form 写的真心不好\n let errorSelected;\n let errorText;\n const error = getFieldError(id);\n if (error && error[0]) [errorSelected] = error;\n if (error && error[0] === getLocalText('SingleChoice.Selected')) [errorSelected] = error;\n if (error && error[0] === getLocalText('SingleChoice.otherText')) [errorText] = error;\n if (\n answer.selected.length !== 0\n && ((!isFocus && min && answer.selected.length < min)\n || (max && answer.selected.length > max))\n ) {\n // errorText = `需要选择多于${min}个小于${max}个答案`;\n // eslint-disable-next-line\n\n errorText = getLocalText(\n 'MultiChoice.min.or.max',\n min || +question.required,\n max || options.length + +(question.custom.other.status !== 0),\n );\n }\n let overDisabledIds = [];\n if (max && answer.selected.length == max) {\n realShowOptions.forEach(option => {\n if (answer.selected.indexOf(option.id) < 0) {\n overDisabledIds.push(option.id);\n }\n });\n } else {\n overDisabledIds = [];\n }\n let changeAnswer = false;\n const selectedLength = answer.selected.length;\n if (selectedLength) {\n const lastOneId = answer.selected[selectedLength - 1];\n if (lastOneId === 'other') {\n const { mutex = [] } = other;\n answer.selected = answer.selected.filter(id => {\n const result = !mutex.includes(id);\n if (!result) {\n changeAnswer = true;\n answer?.option_blank?.[id] && delete answer.option_blank[id];\n }\n return result;\n });\n } else {\n const { mutex } = options.find(el => el.id === lastOneId) || {};\n if (mutex) {\n answer.selected = answer.selected.filter(id => {\n const result = !mutex.includes(id);\n if (!result) {\n changeAnswer = true;\n answer?.option_blank?.[id] && delete answer.option_blank[id];\n }\n return result;\n });\n }\n }\n for (let i = 0; i < answer.selected.length; i++) {\n const id = answer.selected[i];\n const one = options.find(el => el.id === id);\n // 如果是other\n if (!one) continue;\n // eslint-disable-next-line\n if (one.mutex && one.mutex.includes(lastOneId)) {\n answer.selected.splice(i, 1);\n changeAnswer = true;\n answer?.option_blank?.[id] && delete answer.option_blank[id];\n i--;\n }\n }\n if (\n answer.selected.includes('other') // 如果选了other\n && lastOneId !== 'other' // 如果other不是最后一个 (最后一个的情况上面处理过了)\n && other\n && other.mutex\n && other.mutex.includes(lastOneId) // 如果other与lastOneId互斥\n ) {\n answer.selected = answer.selected.filter(id => id !== 'other');\n changeAnswer = true;\n }\n }\n if (changeAnswer) {\n onChange(answer);\n }\n const disabledOptIds\n = quotaStrategy?.optionsQuota\n .filter(q => !q.remaining)\n .map(q => q.id) || [];\n const params = {\n options: realShowOptions,\n formAnswer,\n error: {\n selected: errorSelected,\n text: errorText,\n errorOption: this.state.errorOption,\n },\n onChange: {\n selected: selected =>\n onChange(this.getSelectedChange(selected, formAnswer)),\n text: text => onChange(this.getOtherTextChange(text, formAnswer)),\n input: (id, input) =>\n onChange(this.getInputChange(id, input, formAnswer)),\n },\n disabledOptIds,\n overDisabledIds: overDisabledIds || this.state.overDisabledIds,\n };\n return (\n this.setState({ isFocus: true })}\n onBlur={() => this.setState({ isFocus: false })}\n >\n {this.props.children(params)}\n \n );\n }\n}\n","import { Component } from 'react';\nimport { getLocalText } from '@/utilities/language';\nimport { inputChecker } from '@/utilities/quest';\n\nexport default class LongText extends Component {\n static defaultProps = {\n answer: {\n text: '',\n type: 'long',\n },\n };\n\n getTextChange(text) {\n return {\n text,\n type: 'long',\n };\n }\n\n validator = (rules, answer, callback) => {\n const {\n question: { required, restrictions = {}, enRestrictions = {} },\n } = this.props;\n if (required && !answer.text.trim()) {\n callback(getLocalText('SingleChoice.Selected')); // '请填写答案');\n return;\n }\n this.checkRestrictions(\n answer,\n window.showEnQuest ? enRestrictions : restrictions,\n callback,\n );\n };\n\n checkRestrictions = (answer, restrictions, callback) => {\n if (\n restrictions.openWordsRestriction === undefined\n && answer.text.length > 2000\n ) {\n callback(getLocalText('LongText.placeholder')); // '字数已超2000');\n return;\n }\n if (answer.text && restrictions) {\n const checkResult = inputChecker(answer.text, restrictions);\n if (checkResult !== true) {\n callback(checkResult);\n return;\n }\n }\n callback();\n };\n\n render() {\n const { question, answer } = this.props;\n const { restrictions = {}, enRestrictions = {} } = question;\n const { getFieldProps, getFieldError } = this.props.form;\n const id = question.id || 'unknown-form-item';\n const { text = '', enText = '' } = question.custom;\n const placeholder = window.showEnQuest\n ? enText\n : text === '内容长度请控制在2000字以内'\n && text !== getLocalText('LongText.placeholder')\n ? ''\n : text;\n const { openWordsRestriction, maxWords } = window.showEnQuest\n ? enRestrictions\n : restrictions;\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: answer,\n rules: [\n {\n required: true,\n validator: this.validator,\n },\n ],\n });\n let error = getFieldError(id);\n if (error && error.length > 0) error = error.join(',');\n else error = null;\n\n const params = {\n error,\n formAnswer,\n placeholder,\n onChange: val => onChange(this.getTextChange(val)),\n maxWords: openWordsRestriction && maxWords,\n };\n return this.props.children(params);\n }\n}\n","import { Component } from 'react';\nimport { getLocalText } from '@/utilities/language';\nimport { inputChecker } from '@/utilities/quest';\n\nexport default class FillinLong extends Component {\n static defaultProps = {\n answer: {\n text: '',\n type: 'fillinLong',\n },\n };\n\n getTextChange(text) {\n return {\n text,\n type: 'fillinLong',\n };\n }\n\n validator = (rules, answer, callback) => {\n const {\n question: { required, restrictions = {}, enRestrictions = {} },\n } = this.props;\n if (required && !answer.text.trim()) {\n callback(getLocalText('SingleChoice.Selected')); // '请填写答案');\n return;\n }\n this.checkRestrictions(\n answer,\n window.showEnQuest ? enRestrictions : restrictions,\n callback,\n );\n };\n\n checkRestrictions = (answer, restrictions, callback) => {\n if (\n restrictions.openWordsRestriction === undefined\n && answer.text.length > 2000\n ) {\n callback(getLocalText('LongText.placeholder')); // '字数已超2000');\n return;\n }\n if (answer.text && restrictions) {\n const checkResult = inputChecker(answer.text, restrictions);\n if (checkResult !== true) {\n callback(checkResult);\n return;\n }\n }\n callback();\n };\n\n render() {\n const { question, answer } = this.props;\n const { restrictions = {}, enRestrictions = {} } = question;\n const { getFieldProps, getFieldError } = this.props.form;\n const id = question.id || 'unknown-form-item';\n const { text = '', enText = '' } = question.custom;\n const placeholder = window.showEnQuest\n ? enText\n : text === '内容长度请控制在2000字以内'\n && text !== getLocalText('LongText.placeholder')\n ? ''\n : text;\n const { openWordsRestriction, maxWords } = window.showEnQuest\n ? enRestrictions\n : restrictions;\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: answer,\n rules: [\n {\n required: true,\n validator: this.validator,\n },\n ],\n });\n let error = getFieldError(id);\n if (error && error.length > 0) error = error.join(',');\n else error = null;\n\n const params = {\n error,\n formAnswer,\n placeholder,\n onChange: val => onChange(this.getTextChange(val)),\n maxWords: openWordsRestriction && maxWords,\n };\n return this.props.children(params);\n }\n}\n","import { Component } from 'react';\nimport { getLocalText } from '@/utilities/language';\nimport { inputChecker } from '@/utilities/quest';\n\nexport default class ShortText extends Component {\n static defaultProps = {\n answer: {\n text: '',\n type: 'short',\n },\n };\n\n getTextChange(text) {\n return {\n text,\n type: 'short',\n };\n }\n\n validator = (rules, answer, callback) => {\n const {\n question: {\n required,\n custom: { type, numberOnly },\n restrictions,\n enRestrictions,\n },\n } = this.props;\n if (answer.text.length !== 0 && numberOnly) {\n if (!answer.text.match(/^[-+]?\\d*\\.?\\d*$/)) {\n callback(getLocalText('number-only'));\n return;\n }\n }\n if (required && !answer.text.trim()) {\n callback(getLocalText('SingleChoice.Selected')); // '请填写答案'\n return;\n }\n // if (answer.text.length > 50) {\n // callback(getLocalText(\"ShortText.overflow\")); // '字数已超50'\n // return;\n // }\n this.checkRestrictions(\n type,\n answer,\n window.showEnQuest ? enRestrictions : restrictions,\n callback,\n );\n };\n\n checkRestrictions = (type, answer, restrictions, callback) => {\n if (answer.text && restrictions) {\n const checkResult = inputChecker(answer.text, restrictions);\n if (checkResult !== true) {\n callback(checkResult);\n return;\n }\n }\n if (\n type === 'phoneNumber'\n && answer.text\n && !answer.text.match(/^1\\d{10}$/)\n ) {\n callback(getLocalText('ShortText.phoneNumber.wrong'));\n }\n callback();\n };\n\n render() {\n const { question, answer } = this.props;\n const { getFieldProps, getFieldError } = this.props.form;\n const { text = '', enText = '' } = question.custom;\n const id = question.id || 'unknown-form-item';\n const placeholder = window.showEnQuest\n ? enText\n : text === '内容长度请控制在50字以内'\n && text !== getLocalText('ShortText.placeholder')\n ? ''\n : text;\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: answer,\n rules: [\n {\n required: true,\n validator: this.validator,\n },\n ],\n });\n let error = getFieldError(id);\n if (error && error.length > 0) error = error.join(',');\n else error = null;\n\n const params = {\n error,\n formAnswer,\n placeholder,\n onChange: val => onChange(this.getTextChange(val)),\n };\n return this.props.children(params);\n }\n}\n","import { Component } from 'react';\nimport { getLocalText } from '@/utilities/language';\nimport { inputChecker } from '@/utilities/quest';\n\nexport default class FillinShort extends Component {\n static defaultProps = {\n answer: {\n text: '',\n type: 'fillinShort',\n },\n };\n\n getTextChange(text) {\n return {\n text,\n type: 'fillinShort',\n };\n }\n\n validator = (rules, answer, callback) => {\n const {\n question: {\n required,\n custom: { type, numberOnly },\n restrictions,\n enRestrictions,\n },\n } = this.props;\n if (answer.text.length !== 0 && numberOnly) {\n if (!answer.text.match(/^[-+]?\\d*\\.?\\d*$/)) {\n callback(getLocalText('number-only'));\n return;\n }\n }\n if (required && !answer.text.trim()) {\n callback(getLocalText('SingleChoice.Selected')); // '请填写答案'\n return;\n }\n // if (answer.text.length > 50) {\n // callback(getLocalText(\"ShortText.overflow\")); // '字数已超50'\n // return;\n // }\n this.checkRestrictions(\n type,\n answer,\n window.showEnQuest ? enRestrictions : restrictions,\n callback,\n );\n };\n\n checkRestrictions = (type, answer, restrictions, callback) => {\n if (answer.text && restrictions) {\n const checkResult = inputChecker(answer.text, restrictions);\n if (checkResult !== true) {\n callback(checkResult);\n return;\n }\n }\n if (\n type === 'phoneNumber'\n && answer.text\n && !answer.text.match(/^1\\d{10}$/)\n ) {\n callback(getLocalText('ShortText.phoneNumber.wrong'));\n }\n callback();\n };\n\n render() {\n const { question, answer } = this.props;\n const { getFieldProps, getFieldError } = this.props.form;\n const { text = '', enText = '' } = question.custom;\n const id = question.id || 'unknown-form-item';\n const placeholder = window.showEnQuest\n ? enText\n : text === '内容长度请控制在50字以内'\n && text !== getLocalText('ShortText.placeholder')\n ? ''\n : text;\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: answer,\n rules: [\n {\n required: true,\n validator: this.validator,\n },\n ],\n });\n let error = getFieldError(id);\n if (error && error.length > 0) error = error.join(',');\n else error = null;\n\n const params = {\n error,\n formAnswer,\n placeholder,\n onChange: val => onChange(this.getTextChange(val)),\n };\n return this.props.children(params);\n }\n}\n","import { Component } from 'react';\nimport { getLocalText } from '@/utilities/language';\n\nexport default class SingleChoice extends Component {\n static defaultProps = {\n answer: {\n degree: undefined,\n type: 'scale',\n },\n };\n\n getDegreeChange(degree) {\n return { degree: `${degree}`, type: 'scale' };\n }\n\n validator = (rules, answer, callback) => {\n const {\n question: { required },\n } = this.props;\n if (required) {\n if (answer.degree === 'undefined') {\n callback(getLocalText('SingleChoice.Selected')); // '请填写答案');\n return;\n }\n }\n callback();\n };\n\n render() {\n const { question, answer } = this.props;\n const { getFieldProps, getFieldError } = this.props.form;\n const { custom } = question;\n const { min, max, options = [] } = custom;\n // 老版量表没有options\n if (options.length === 0) {\n const options = [];\n for (let i = min.num; i <= max.num; i++) {\n let label = '';\n if (i === min.num) {\n label = window.showEnQuest ? min.enText : min.text;\n }\n if (i === max.num) {\n label = window.showEnQuest ? max.enText : max.text;\n }\n if (custom[i]?.text && !window.showEnQuest) {\n label = custom[i].text;\n } else if (custom[i]?.enText && window.showEnQuest) {\n label = custom[i].enText;\n }\n options.push({\n text: label,\n num: i,\n id: i,\n jumpId: '-1',\n });\n }\n }\n const marks = { [min.num]: min.num, [max.num]: max.num };\n for (let i = min.num; i <= max.num; i++) {\n if (window.showEnQuest) {\n marks[i] = custom[i]?.enText || '';\n } else {\n marks[i] = custom[i]?.text || '';\n }\n }\n\n const { degree } = answer;\n\n const id = question.id || 'unknown-form-item';\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: { ...answer, degree: `${degree}` },\n rules: [\n {\n required: true,\n validator: this.validator,\n },\n ],\n });\n let error = getFieldError(id);\n if (error && error.length > 0) error = error.join(',');\n else error = null;\n\n const params = {\n error,\n formAnswer,\n onChange: val => onChange(this.getDegreeChange(+val)),\n marks,\n options,\n max,\n min,\n };\n return this.props.children(params);\n }\n}\n","import React from 'react';\nimport { getLocalText } from '@/utilities/language';\n\nconst defaultAnswer = {\n date: undefined,\n type: 'date',\n};\nexport default class DateChoice extends React.Component {\n getDateChange(date) {\n return { date: `${date}`, type: 'date' };\n }\n\n validator = (_rules, answer, callback) => {\n const { question } = this.props;\n if (question.required && !answer.date) {\n callback(getLocalText('SingleChoice.Selected'));\n }\n callback();\n };\n\n render() {\n const {\n question,\n answer = JSON.parse(JSON.stringify(defaultAnswer)),\n } = this.props;\n const { getFieldProps, getFieldError } = this.props.form;\n const id = question.id || 'unknown-form-item';\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: { ...answer },\n rules: [\n {\n validator: this.validator,\n },\n ],\n });\n let error = getFieldError(id);\n if (error && error.length > 0) error = error.join(',');\n else error = null;\n\n const params = {\n error,\n formAnswer,\n onChange: val => onChange(this.getDateChange(val)),\n };\n return this.props.children(params);\n }\n}\n","import React from 'react';\nimport { getLocationMap } from '@/services/api';\nimport { getLocalText } from '@/utilities/language';\nimport { traceOnError } from '@/tracer';\nconst defaultAnswer = {\n location: [],\n type: 'location',\n};\nexport default class LocChoice extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n locationMap: [],\n };\n this.getLocationMap();\n }\n\n getLocationMap = () => {\n const { question } = this.props;\n const { custom } = question;\n const { country = 'cn' } = custom;\n getLocationMap(country)\n .then(res => this.setState({ locationMap: res.data }))\n .catch(e => {\n traceOnError(`${e.message}-${window.location.href}`, e.code, 'Loc接口');\n });\n };\n\n getLocChange(location) {\n return { location, type: 'location' };\n }\n\n validator = (rules, answer, callback) => {\n const {\n question: { required },\n } = this.props;\n if (required && answer.location.length === 0) {\n callback(getLocalText('SingleChoice.Selected')); // '请填写答案\n return;\n }\n callback();\n };\n\n render() {\n const {\n question,\n answer = JSON.parse(JSON.stringify(defaultAnswer)),\n } = this.props;\n const { custom } = question;\n const { getFieldProps, getFieldError } = this.props.form;\n const id = question.id || 'unknown-form-item';\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: { ...answer },\n rules: [\n {\n required: true,\n validator: this.validator,\n },\n ],\n });\n let options = this.state.locationMap;\n if (custom && custom.hideDistrict) {\n options.forEach(province => {\n if (province.children && Array.isArray(province.children)) {\n province.children.forEach(city => {\n if (city.children) {\n delete city.children;\n }\n });\n }\n });\n }\n if (custom && custom.provinceLock) {\n options = options.filter(el => el.value === custom.provinceLock);\n if (\n !custom.hideDistrict\n && custom.cityLock\n && options[0]\n && options[0].children\n ) {\n options[0].children = options[0].children.filter(\n item => item.value === custom.cityLock,\n );\n }\n }\n let error = getFieldError(id);\n if (error && error.length > 0) error = error.join(',');\n else error = null;\n\n const params = {\n options,\n error,\n formAnswer,\n onChange: val => onChange(this.getLocChange(val)),\n };\n return this.props.children(params);\n }\n}\n","import React from 'react';\nimport { getLocalText } from '@/utilities/language';\nconst defaultAnswer = {\n selected_values: [],\n selected_ids: [],\n type: 'cascader',\n};\nexport default class LocChoice extends React.Component {\n constructor(props) {\n super(props);\n const { question: { custom = {} } = {} } = props;\n this.state = {\n options: custom.options || [],\n enOptions: custom.enOptions || [],\n };\n }\n\n getSelectedChange(optsText) {\n const { options: defaultOpts = [], enOptions = [] } = this.state;\n const [fir, sec, third] = optsText;\n const options = window.showEnQuest ? enOptions : defaultOpts;\n const ids = [];\n if (fir) {\n const firOpt = options.find(e => e.value === fir);\n ids.push(firOpt.id);\n if (sec) {\n const secOpt = firOpt.children.find(e => e.value === sec);\n ids.push(secOpt.id);\n if (third) {\n ids.push(secOpt.children.find(e => e.value === third).id);\n }\n }\n }\n return {\n type: 'cascader',\n selected_values: optsText,\n selected_ids: ids,\n };\n }\n\n validator = (rules, answer, callback) => {\n const { question } = this.props;\n if (question.required && answer.selected_values.length === 0) {\n callback(getLocalText('SingleChoice.Selected'));\n return;\n }\n callback();\n };\n\n render() {\n const {\n question,\n answer = JSON.parse(JSON.stringify(defaultAnswer)),\n } = this.props;\n const { getFieldProps, getFieldError } = this.props.form;\n const id = question.id || 'unknown-form-item';\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: { ...answer },\n rules: [\n {\n required: true,\n validator: this.validator,\n },\n ],\n });\n const { options, enOptions } = this.state;\n let error = getFieldError(id);\n if (error && error.length > 0) error = error.join(',');\n else error = null;\n\n const titles = question.custom.titles || [];\n const enTitles = question.custom.enTitles || [];\n const params = {\n options: (window.showEnQuest ? enOptions : options).filter(e => e),\n titles: window.showEnQuest ? enTitles : titles,\n error,\n formAnswer,\n onChange: val => onChange(this.getSelectedChange(val)),\n };\n return this.props.children(params);\n }\n}\n","import React, { Component } from 'react';\nimport isEmpty from 'lodash/isEmpty';\nimport { getLocalText } from '@/utilities/language';\nimport { getRealShowOption, getRealShowLine } from '@/utilities/quest';\nimport { randomArray, randomComp } from '@/utilities/common';\n\nconst defaultAnswer = {\n selected: {},\n text: {},\n type: 'matrix',\n};\nconst deviceWidth = document.body.clientWidth;\nexport default class Matrix extends Component {\n constructor(props) {\n super(props);\n const { question, answers, form } = props;\n const { options, lines } = question.custom;\n const linesKeys = lines.map(el => el.id);\n const thisLines = getRealShowLine({ question, answers });\n this.state = {\n options,\n lines: thisLines,\n linesKeys,\n realShowOptions: getRealShowOption({ question, answers }),\n isFocus: false,\n };\n if (question.custom.random && !question.custom.isScaleMatrix) {\n // 随机选项排序\n this.state.realShowOptions = randomArray([...this.state.realShowOptions]);\n } else if (question.custom.reverse && !question.custom.isScaleMatrix) {\n const actuallyReverse = Math.random() >= 0.5;\n if (actuallyReverse) {\n this.state.realShowOptions = this.state.realShowOptions.reverse();\n }\n }\n if (question.custom.randomLine) {\n // 随机排序\n this.state.lines = randomArray([...this.state.lines]);\n }\n const lineIds = thisLines.map(el => el.id);\n const preThisAnswers = answers[question.id];\n const thisSelected = (preThisAnswers || {}).selected;\n // 删掉多余lines的答案\n if (!isEmpty(thisSelected)) {\n const thisAnswers = {};\n const tmp = { ...preThisAnswers };\n lineIds.map(id => {\n thisAnswers[id] = thisSelected[id] ? thisSelected[id] : [];\n return id;\n });\n tmp.selected = thisAnswers;\n if (form.getFieldValue(question.id)) {\n form.setFieldsValue({\n [question.id]: tmp,\n });\n }\n }\n }\n\n static getDerivedStateFromProps(nextProps, state) {\n const { question, answers } = nextProps;\n let realShowOptions = getRealShowOption({ question, answers });\n if (question.custom.random && !question.custom.isScaleMatrix) {\n realShowOptions = randomArray([...realShowOptions]);\n }\n let realShowLines = getRealShowLine({ question, answers });\n let newState = null;\n window.allQuestions.find(el => el.id === question.id).custom.realShowOptions = realShowOptions;\n if (\n realShowOptions.length !== state.realShowOptions.length\n || realShowOptions.some(el => !state.realShowOptions.find(item => item.id === el.id))\n || realShowOptions.some(\n el => el.text !== state.realShowOptions.find(item => item.id === el.id).text,\n )\n ) {\n if (question.custom.random && !question.custom.isScaleMatrix) {\n realShowOptions = randomArray([...realShowOptions]);\n }\n newState = {\n realShowOptions,\n };\n }\n if (\n realShowLines.length !== state.lines.length\n || realShowLines.some(el => !state.lines.find(item => item.id === el.id))\n ) {\n if (question.custom.randomLine) {\n realShowLines = randomArray([...realShowLines]);\n }\n if (question.custom.random) {\n realShowOptions = randomArray([...realShowOptions]);\n }\n newState = {\n lines: realShowLines,\n realShowOptions,\n };\n }\n\n return newState;\n }\n\n componentDidUpdate(prevProps, prevState) {\n const prevQ = prevProps.question;\n const nextQ = this.props.question;\n\n // 如果选项变了 就清空答案\n if (prevState.realShowOptions !== this.state.realShowOptions && !window.isReport) {\n this.props.form.setFieldsValue({\n [nextQ.id]: { type: 'matrix', selected: {}, text: '' },\n });\n }\n\n // 判断是否修改了options, 但是broadcastchannell始终是深拷贝传递。所以这里不能比较地址了。\n if (JSON.stringify(nextQ.custom.options) !== JSON.stringify(prevQ.custom.options)) {\n if (nextQ.custom.random) {\n // eslint-disable-next-line\n this.setState({\n options: nextQ.custom.options.slice().sort(randomComp),\n });\n } else {\n // eslint-disable-next-line\n this.setState({ options: nextQ.custom.options });\n }\n }\n if (JSON.stringify(nextQ.custom.lines) !== JSON.stringify(prevQ.custom.lines)) {\n if (nextQ.custom.random) {\n // eslint-disable-next-line\n this.setState({ lines: nextQ.custom.lines.slice().sort(randomComp) });\n } else {\n // eslint-disable-next-line\n this.setState({ lines: nextQ.custom.lines });\n }\n }\n }\n\n getSelectedChange(lineSelected, lineKey, answer, isSingleMatrix) {\n const { selected, text } = JSON.parse(JSON.stringify(answer));\n const { linesKeys } = this.state;\n Object.keys(selected).forEach(key => {\n if (!linesKeys.includes(key)) {\n delete selected[key];\n }\n });\n selected[lineKey] = [...lineSelected];\n\n if (lineSelected.length === 0) {\n delete selected[lineKey];\n }\n return { type: 'matrix', selected: { ...selected }, text, isSingleMatrix };\n }\n\n getOtherTextChange(lineText, lineKey, answer, isSingleMatrix) {\n const { selected, text } = answer;\n if (!selected[lineKey]) {\n selected[lineKey] = ['other'];\n } else if (!selected[lineKey].includes('other')) {\n selected[lineKey].push('other');\n }\n text[lineKey] = lineText;\n\n return { type: 'matrix', selected, text, isSingleMatrix };\n }\n\n setIsFocus = isFocus => {\n this.setState({ isFocus });\n };\n\n validator = (rules, answer, callback) => {\n const { question } = this.props;\n const { lines } = this.state;\n const { selected, text } = answer;\n if (\n question.required\n && Object.values(answer.selected).filter(\n el => (Array.isArray(el) && el.length) || (!Array.isArray(el) && el),\n ).length !== lines.length\n ) {\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const tmp = answer.selected[line.id];\n if (!tmp || (Array.isArray(tmp) && !tmp.length)) {\n callback(`${getLocalText('SingleChoice.Selected')}===${line.id}`);\n return;\n }\n }\n }\n const otherRequired = question.custom.other.status === 2;\n if (otherRequired) {\n let couldReturn = false;\n Object.keys(selected).forEach(key => {\n if (couldReturn) {\n return;\n }\n if (selected[key].includes('other') && (text[key] === undefined || text[key] === '')) {\n callback(getLocalText('SingleChoice.otherText'));\n couldReturn = true;\n }\n });\n if (couldReturn) {\n return;\n }\n }\n callback();\n };\n\n retrieveFunc = (question, funcName) => {\n const id = question.id || 'unknown-form-item';\n const { isSingleMatrix } = question.custom;\n const { onChange, formAnswer } = this.getFormAnswer(id);\n if (funcName === 'selected') {\n return (lineSelected, lineKey) =>\n onChange(this.getSelectedChange(lineSelected, lineKey, formAnswer, isSingleMatrix));\n } else if (funcName === 'text') {\n return (lineText, lineKey) => {\n const newText = this.getOtherTextChange(lineText, lineKey, formAnswer, isSingleMatrix);\n onChange(newText);\n };\n }\n };\n\n getSplitQuestion = (\n { isScaleMatrix, transpose = false, splitMode = \"auto\" },\n device\n ) => {\n const { realShowOptions, lines } = this.state;\n let splitModeNew = splitMode;\n if (isScaleMatrix) splitModeNew = \"disable\";\n const optionsLength = (transpose ? lines : realShowOptions).reduce(\n (sum, el) => sum + el.text.html2Text().length,\n 0\n );\n const splitQuestion =\n optionsLength * 13 > deviceWidth - 30 ||\n (device === \"mobile\" && realShowOptions.length > 8);\n\n return splitModeNew === \"disable\"\n ? false\n : splitModeNew === \"always\"\n ? true\n : splitQuestion;\n };\n\n getError = id => {\n const { getFieldError } = this.props.form;\n let errorSelected;\n let errorText;\n let errorLine;\n const error = getFieldError(id);\n if (error) {\n if (error[0] === getLocalText('SingleChoice.otherText')) {\n [errorText] = error;\n } else {\n [errorSelected, errorLine] = error[0].split('===');\n }\n }\n return { selected: errorSelected, text: errorText, errorLine };\n };\n\n getFormAnswer = id => {\n const {\n form: { getFieldProps },\n answer = JSON.parse(JSON.stringify(defaultAnswer)),\n } = this.props;\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: answer,\n rules: [\n {\n validator: this.validator,\n },\n ],\n });\n return { onChange, formAnswer };\n };\n\n render() {\n const { question, device = 'pc' } = this.props;\n const { realShowOptions, lines } = this.state;\n const { isSingleMatrix, transpose = false, isScaleMatrix, styleType, random } = question.custom;\n const splitQuestion = this.getSplitQuestion(question.custom, device);\n const id = question.id || 'unknown-form-item';\n\n const params = {\n options: realShowOptions,\n isRandomOpts: random,\n splitQuestion,\n lines,\n formAnswer: this.getFormAnswer(id).formAnswer,\n isScaleMatrix,\n isSingleMatrix,\n styleType,\n transpose,\n error: this.getError(id),\n onChange: {\n selected: this.retrieveFunc(question, 'selected'),\n text: this.retrieveFunc(question, 'text'),\n },\n };\n return (\n this.setIsFocus(true)}\n onBlur={() => this.setIsFocus(false)}\n className={device === 'mobile' ? 'matrix-line' : ''}\n >\n {this.props.children(params)}\n \n );\n }\n}\n","import { Component } from 'react';\nimport { getLocalText } from '@/utilities/language';\n// import env from '@/env';\n\nconst host = `${window.location.origin}/open_api/v1/api/upload/`;\n// const { href } = window.location;\n// if (href.includes('preview')) {\n// host = env.cdn.uploadFile;\n// } else {\n// host = `${window.location.origin}/open_api/v1/api/upload/`;\n// }\n\nexport default class Upload extends Component {\n static defaultProps = {\n answer: {\n list: [],\n type: 'upload',\n },\n };\n\n componentDidUpdate(prevProps, prevState) {\n if (window.isReport) {\n const nextQ = this.props.question;\n const nowAnswer = this.props.answers[nextQ.id];\n const prevAnswer = prevProps.answers[nextQ.id];\n if (nowAnswer.list?.[0] !== prevAnswer?.[0]) {\n this.getFileListChange({ fileList: nowAnswer.list });\n }\n }\n }\n\n getFileListChange({ fileList, text = '' }) {\n return {\n text,\n list: fileList,\n type: 'upload',\n };\n }\n\n validator = (rules, answer, callback) => {\n const {\n question: { required },\n } = this.props;\n if (required && answer.list.length === 0) {\n callback(getLocalText('SingleChoice.Selected')); // '请填写答案');\n return;\n }\n if (answer.list.some(el => !el)) {\n callback('uploading');\n return;\n }\n callback();\n };\n\n render() {\n const { question, answer } = this.props;\n const {\n custom: {\n max,\n withText = false,\n placeholder = '',\n accept = ['image/*', 'video/*', 'audio/*'],\n },\n } = question;\n const { getFieldProps, getFieldError } = this.props.form;\n const id = question.id || 'unknown-form-item';\n const { onChange, value: formAnswer } = getFieldProps(id, {\n initialValue: answer,\n rules: [\n {\n required: true,\n validator: this.validator,\n },\n ],\n });\n let error = getFieldError(id);\n if (error && error.length > 0) error = error.join(',');\n else error = null;\n\n const params = {\n withText,\n placeholder,\n max,\n host,\n error,\n accept: accept.length === 0 ? ['image/*', 'video/*', 'audio/*'] : accept,\n formAnswer,\n onChange: val => onChange(this.getFileListChange(val)),\n };\n return this.props.children(params);\n }\n}\n","import React from 'react';\nimport sanitizeHtml from 'sanitize-html';\nimport { css } from 'emotion';\n\nexport default class PureDescription extends React.Component {\n render() {\n const {\n question: { description, enDescription },\n } = this.props;\n return (\n \n );\n }\n}\n\nconst descriptionWrapper = css`\n background: transparent;\n color: var(--text-color-secondary);\n p {\n &:not(:first-of-type) {\n display: block;\n margin: 15px 0 !important;\n }\n }\n`;\n","import React, { useEffect, useRef } from 'react';\nimport { css } from 'emotion';\n\nconst ShoppingOrder = ({\n question: {\n custom: { title = '盐津铺子/小银线鱼130g(约8包)', img: imgSrc = '', ctime = 1629177344 } = {},\n },\n isMobile = false,\n}) => {\n const date = new Date(ctime * 1000);\n const m = date.getMonth() + 1;\n const d = date.getDate();\n\n const imgRef = useRef(null);\n\n const changeSize = img => {\n const width = img.naturalWidth;\n const height = img.naturalHeight;\n const maxW = Math.min(height, isMobile ? 80 : 100);\n if (maxW !== width) {\n img.setAttribute(\n 'style',\n `width: ${maxW}px !important; height: ${(maxW * height) / width}px !important;`,\n );\n }\n };\n\n useEffect(() => {\n if (imgRef.current && imgSrc) {\n const img = imgRef.current;\n img.onload = () => changeSize(img);\n }\n }, [imgRef.current]);\n\n return (\n
\n

{`订单信息`}

\n
\n {imgSrc && \"order-pic\"}\n
\n {title}\n

\n 下单日期:{' '}\n {`${date.getFullYear()}-${Math.floor(m / 10)}${m % 10}-${Math.floor(d / 10)}${d % 10}`}\n

\n
\n
\n
\n );\n};\n\nconst descriptionWrapper = isMobile => css`\n background: ${isMobile ? 'var(--am-entity-bg)' : 'var(--question-bg)'};\n color: var(--text-color-secondary);\n font-weight: 400;\n font-size: 1rem;\n font-size: 14px;\n padding: ${isMobile ? '9px' : '15px 42px 20px 36px'};\n p:first-of-type {\n margin-bottom: 10px;\n font-weight: 500;\n color: var(--text-color-thirdly);\n }\n img {\n margin-right: ${isMobile ? 20 : 50}px;\n }\n`;\n\nexport default ShoppingOrder;\n","export const navigatorLang = (navigator.language || 'en').toLowerCase().includes('en') ? 'en' : 'cn';\n\nexport function getLocalText(key, ...rest) {\n const select = (languageMap[key] || {})[\n window.showEnQuest ? 'en' : window.language || 'cn'\n ];\n if (typeof select === 'string') {\n return select;\n }\n if (select === undefined) {\n return languageMap[key].en;\n }\n return select(...rest);\n}\n\nconst languageMap = {\n 'RequestError.400': {\n cn: '请求错误',\n tc: '請求錯誤',\n en: 'Something went wrong. Please try again later.',\n ja: '要求にエラーが発生しました',\n ko: '잘못된 요청',\n pt: 'Solicitação inválida',\n de: 'Anforderungsfehler',\n fr: 'Requête incorrecte',\n it: 'Richiesta errata',\n hi: 'खराब आग्रह',\n ta: 'தவறான கோரிக்கை',\n te: 'తప్పుడు విన్నపం',\n ml: 'തെറ്റായ അഭ്യര്‍ത്ഥന',\n kn: 'ಕೆಟ್ಟ ಮನವಿ',\n mr: 'खराब विनंती',\n gu: 'અમાન્ય વિનંતી',\n bn: 'ব্যাড রিকোয়েস্ট',\n pa: 'ਬੁਰੀ ਗੁਜਾਰਸ਼',\n bh: 'खराब आग्रह',\n id: 'Permohonan salah',\n ar: 'طلب غير صالح',\n tr: 'Geçersiz İstek',\n my: 'Permintaan tidak berkenaan',\n Russian: 'Неверный запрос',\n Spanish: 'Solicitud errónea',\n Thai: 'คำขอไม่ถูกต้อง',\n Vietnamese: 'Yêu cầu không hợp lệ',\n Filipino: 'Maling kahilingan',\n },\n 'RequestError.404': {\n cn: '资源未找到',\n tc: '資源未找到',\n en: 'Page not found',\n ja: '指定されたページが見つかりません',\n ko: '찾을 수 없음',\n pt: 'Não encontrado',\n de: 'Nicht gefunden',\n fr: 'Ressource non trouvée',\n it: 'Nessun risultato',\n hi: 'नहीं मिला',\n ta: 'கிடைக்கவில்லை',\n te: 'దొరకలేదు',\n ml: 'കാണാനില്ല',\n kn: 'ದೊರಕುತ್ತಿಲ್ಲ',\n mr: 'सापडले नाही',\n gu: 'મળ્યું નહીં',\n bn: 'খুঁজে পাওয়া যাচ্ছে না',\n pa: 'ਨਹੀਂ ਲਭਿਆ',\n bh: 'नहीं मिला',\n id: 'Tidak ditemukan',\n ar: 'غير موجود',\n tr: 'Bulunamadı',\n my: 'Tidak ditemui',\n Russian: 'Не обнаружено ',\n Spanish: 'No encontrado',\n Thai: 'ไม่พบ',\n Vietnamese: 'Không tìm thấy',\n Filipino: 'Hindi nahanap',\n },\n 'RequestError.403': {\n cn: '没有访问权限',\n tc: '沒有訪問權限',\n en: \"You don't have access to this feature\",\n ja: 'アクセス許可がありません',\n ko: '접근 권한이 없음',\n pt: 'Proibido',\n de: 'Keine Zugriffsrechte',\n fr: 'Accès refusé',\n it: 'Proibito',\n hi: 'हटा दिया गया है',\n ta: 'தடைசெய்யப்பட்ட',\n te: 'నిషేధించబడింది',\n ml: 'വിലക്കപ്പെട്ടത്',\n kn: 'ನಿಷೇಧಿಸಲಾಗಿದೆ',\n mr: 'निषिद्ध',\n gu: 'પ્રતિબંધિત',\n bn: 'নিষিদ্ধ',\n pa: 'ਪਾਬੰਦੀ',\n bh: 'हटा दिया गया है',\n id: 'Tidak ada akses',\n ar: 'ممنوع',\n tr: 'Yasaklanmış',\n my: 'Dilarang',\n Russian: 'Нет доступа ',\n Spanish: 'No permitido',\n Thai: 'ไม่สามารถเข้าถึงได้',\n Vietnamese: 'Bị chặn',\n Filipino: 'Ipinagbabawal',\n },\n 'RequestError.401': {\n cn: '请求未授权',\n tc: '請求未授權',\n en: \"You don't have access to this feature\",\n ja: 'アクセス許可が承認されていません',\n ko: '요청이 위임되지 않음',\n pt: 'Não autorizado',\n de: 'Nicht autorisiert',\n fr: 'Non autorisé',\n it: 'Non autorizzato',\n hi: 'अनऑथराइज्ड',\n ta: 'அங்கீகரிக்கப்படாத',\n te: 'అనధికార',\n ml: 'നിയമാനുസൃതമല്ലാത്ത',\n kn: 'ಅನಧಿಕೃತ',\n mr: 'अनधिकृत',\n gu: 'અનધિકૃત',\n bn: 'অনধিকৃত',\n pa: 'ਅਣਅਧਿਕਾਰਤ',\n bh: 'अनऑथराइज्ड',\n id: 'Permohonan belum diberikan',\n ar: 'مَحْظُور',\n tr: 'Yetkisiz istek',\n my: 'Tidak dibenarkan',\n Russian: 'Запрос не авторизован',\n Spanish: 'Sin autorización',\n Thai: 'คำขอไม่ได้รับอนุญาต',\n Vietnamese: 'Không có quyền truy cập',\n Filipino: 'Hindi awtorisado',\n },\n 'RequestError.biggerThan400': {\n cn: '客户端错误',\n tc: '客戶端錯誤',\n en: 'Something went wrong. Please try again later.',\n ja: 'クライアント側でエラーが発生しました',\n ko: '클라이언트 오류',\n pt: 'Erro do cliente',\n de: 'Client-Fehler',\n fr: 'Erreur du client',\n it: 'Errore del client',\n hi: 'क्लाइंट एरर',\n ta: 'கிளையன்ட் பிழை',\n te: 'క్లయింట్ లోపం',\n ml: 'ക്ലൈന്‍റ് എറര്‍',\n kn: 'ಕ್ಲೈಂಟ್ ದೋಷ',\n mr: 'क्लायंट त्रुटी',\n gu: 'ક્લાઈન્ટ એરર',\n bn: 'ক্লায়েন্ট এরর',\n pa: 'ਕਲਾਇੰਟ ਐਰਰ',\n bh: 'क्लाइंट एरर',\n id: 'Klien eror',\n ar: 'خطأ في العميل',\n tr: 'Kullanıcı Hatası',\n my: 'Ralat Klien',\n Russian: 'Ошибка клиента ',\n Spanish: 'Error de cliente',\n Thai: 'ระบบลูกค้าเกิดข้อผิดพลาด',\n Vietnamese: 'Lỗi máy khách',\n Filipino: 'Error sa kliyente',\n },\n 'RequestError.biggerThan500': {\n cn: '服务器错误',\n tc: '服務器錯誤',\n en: 'Server Error',\n ja: 'サーバーエラーが発生しました',\n ko: '서버 오류',\n pt: 'Erro do servidor',\n de: 'Serverfehler',\n fr: 'Erreur du serveur',\n it: 'Errore del server',\n hi: 'सर्वर एरर',\n ta: 'சர்வர் பிழை',\n te: 'సర్వర్ లోపం',\n ml: 'സെര്‍വര്‍ എറര്‍',\n kn: 'ಸರ್ವರ್ ದೋಷ',\n mr: 'सर्व्हर त्रुटी',\n gu: 'સર્વર એરર',\n bn: 'সার্ভার এরর',\n pa: 'ਸਰਵਰ ਐਰਰ',\n bh: 'सर्वर एरर',\n id: 'Server eror',\n ar: 'خطأ في الخادم',\n tr: 'Server Hatası',\n my: 'Ralat Pelayan',\n Russian: 'Ошибка сервера ',\n Spanish: 'Error de servidor',\n Thai: 'เซิร์ฟเวอร์ผิดพลาด',\n Vietnamese: 'Lỗi máy chủ',\n Filipino: 'Error sa server',\n },\n 'RequestError.unknow': {\n cn: '未知错误',\n tc: '未知錯誤',\n en: 'Unknown Error',\n ja: '未知のエラーが発生しました',\n ko: '알 수 없는 오류',\n pt: 'Erro desconhecido',\n de: 'Unbekannter Fehler',\n fr: 'Erreur non identifiée',\n it: 'Errore sconosciuto',\n hi: 'अज्ञात एरर',\n ta: 'அறியப்படாத பிழை',\n te: 'గుర్తించలేని పొరపాటు',\n ml: 'തിരിച്ചറിയാന്‍ കഴിയാത്ത എറര്‍',\n kn: 'ಅಜ್ಞಾತ ದೋಷ',\n mr: 'अज्ञात त्रुटी',\n gu: 'અનનોન એરર',\n bn: 'অজ্ঞাত এরর',\n pa: 'ਅਣਜਾਣ ਐਰਰ',\n bh: 'अज्ञात एरर',\n id: 'Eror tidak diketahui',\n ar: 'خطأ غير معروف',\n tr: 'Bilinmeyen Hata',\n my: 'Ralat Tidak Diketahui',\n Russian: 'Неизвестная ошибка',\n Spanish: 'Error desconocido',\n Thai: 'ข้อผิดพลาดที่ไม่รู้จัก',\n Vietnamese: 'Không rõ lỗi',\n Filipino: 'Di-alam na error',\n },\n 'Content.Form.error.message': {\n cn: '问卷还有题目未完成',\n tc: '問卷還有題目未完成',\n en: 'Please answer all required questions',\n ja: 'フォーム認証に失敗しました',\n ko: '양식 심사에 통과하지 못함',\n pt: 'Falha na validação do formulário',\n de: 'Formularüberprüfung fehlgeschlagen',\n fr: 'La validation du formulaire ne fonctionne pas',\n it: 'Non carica il modulo',\n hi: 'फॉर्म वेलिडेशन काम नहीं कर रहा',\n ta: 'படிவம் சரிபார்த்தல் வேலை செய்யவில்லை',\n te: 'ఫారమ్ ధ్రువీకరణ పని కాదు',\n ml: 'ഫോം മൂല്യനിർണ്ണയം പ്രവർത്തിക്കുന്നില്ല',\n kn: 'ಮೌಲ್ಯಮಾಪನ ಕಾರ್ಯ ನಿರ್ವಹಿಸುತ್ತಿಲ್ಲ',\n mr: 'फॉर्म प्रमाणीकरण काम करत नाही',\n gu: 'ફોર્મ માન્યતા કામ કરી રહી નથી',\n bn: 'ফর্ম বৈধতা সম্পর্কিত কাজ করা যাচ্ছে না',\n pa: 'ਫਾਰਮ ਪ੍ਰਮਾਣਿਕਤਾ ਕੰਮ ਨਹੀਂ ਕਰ ਰਿਹਾ',\n bh: 'फॉर्म वेलिडेशन काम नहीं कर रहा',\n id: 'Masih ada pertanyaan yang belum dijawab.',\n ar: 'يرجى الإجابة على جميع الأسئلة قبل الارسال',\n tr: 'Gönderebilmek için lütfen gerekli bütün soruları cevaplayınız',\n my: 'Sila jawab semua soalan wajib untuk serahan',\n Russian: 'Пожалуйста, ответьте на все вопросы, помеченные звёздочкой.',\n Spanish:\n 'Por favor responde todas las preguntas requeridas para poder enviar',\n Thai: 'โปรดตอบคำถามที่จำเป็นทั้งหมดเพื่อส่ง',\n Vietnamese: 'Trả lời tất cả câu hỏi để hoàn thành bảng khảo sát',\n Filipino: 'Pakisagot ng lahat hinihinging tanong bago isumite',\n },\n 'Content.Form.submitting': {\n cn: '提交中…',\n tc: '提交中',\n en: 'Processing',\n ja: '送信中',\n ko: '제출 중',\n pt: 'Processando',\n de: 'Wird gesendet....',\n fr: 'Traitement en cours...',\n it: 'In lavorazione',\n hi: 'प्रोसेस हो रहा है',\n ta: 'செயலாக்கத்தில் உள்ளது',\n te: 'ప్రోసెసింగ్',\n ml: 'പ്രൊസസിങ്',\n kn: 'ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತಿದೆ',\n mr: 'प्रक्रिया',\n gu: 'પ્રક્રિયા થઇ રહી છે',\n bn: 'প্রসেস হচ্ছে',\n pa: 'ਪ੍ਰੋਸੈਸਿੰਗ',\n bh: 'प्रोसेस हो रहा है',\n id: 'Sedang diproses',\n ar: 'معالجه',\n tr: 'İşleniyor',\n my: 'Sedang diproses',\n Russian: 'Идет обработка ...',\n Spanish: 'Procesando',\n Thai: 'กำลังส่ง',\n Vietnamese: 'Đang gửi đi',\n Filipino: 'Pinoproseso...',\n },\n 'Content.Form.loading': {\n cn: '加载中…',\n tc: '加載中',\n en: 'Loading…',\n ja: '読み込み中',\n ko: '로딩 중',\n pt: 'Carregando...',\n de: 'Wird geladen....',\n fr: 'En cours de chargement...',\n it: 'Caricamento in corso…',\n hi: 'लोडिंग...',\n ta: 'லோடிங்...',\n te: 'లోడ్ అవుతుంది',\n ml: 'ലോഡിങ്...',\n kn: 'ಲೋಡಿಂಗ್..',\n mr: 'लोड करीत आहे ...',\n gu: 'લોડ થઇ રહ્યું છે...',\n bn: 'লোড হচ্ছে',\n pa: 'ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ ...',\n bh: 'लोडिंग...',\n id: 'Sedang memuat',\n ar: 'تحميل...',\n tr: 'Yükleniyor...',\n my: 'Sedang dimuat',\n Russian: 'Загрузка...',\n Spanish: 'Cargando',\n Thai: 'กำลังโหลด...',\n Vietnamese: 'Đang tải...',\n Filipino: 'Naglo-load',\n },\n 'Content.Form.submit.error': {\n cn: '提交失败',\n tc: '提交失敗',\n en: \"Couldn't submit\",\n ja: '送信に失敗しました',\n ko: '제출 실패',\n pt: 'Falha no envio',\n de: 'Einreichung fehlgeschlagen',\n fr: 'La validation a échoué',\n it: 'Operazione non riuscita',\n hi: 'सबमिशन फेल',\n ta: 'சமர்ப்பிப்பு தோல்வியடைந்தது',\n te: 'సమర్పణ విఫలమైంది',\n ml: 'സബ്മിഷന്‍ പരാജയപ്പെട്ടു',\n kn: 'ಸಲ್ಲಿಕೆ ವಿಫಲವಾಗಿದೆ',\n mr: 'सबमिशन अयशस्वी',\n gu: 'સબમિશન ફેઈલ ગયું',\n bn: 'সাবমিশন ফেল হয়ে গিয়েছে',\n pa: 'ਸਬਮਿਸ਼ਨ ਅਸਫਲ',\n bh: 'सबमिशन फेल',\n id: 'Gagal mengirim',\n ar: 'فشل الإرسال',\n tr: 'Gönderme Başarısız Oldu',\n my: 'Serahan gagal',\n Russian: 'Не удалось отправить',\n Spanish: 'Solicitud fallida',\n Thai: 'การส่งล้มเหลว',\n Vietnamese: 'Gửi thất bại',\n Filipino: 'Nabigo ang submisyon',\n },\n 'Content.Form.Ok': {\n cn: '确定',\n tc: '確定',\n en: 'OK',\n ja: '確認',\n ko: '확인',\n pt: 'OK',\n de: 'OK',\n fr: 'OK',\n it: 'OK',\n hi: 'ओके',\n ta: 'ஓகே',\n te: 'అలాగే',\n ml: 'ഒകെ',\n kn: 'ಸರಿ',\n mr: 'ठीक आहे',\n gu: 'ઓકે',\n bn: 'ঠিক আছে',\n pa: 'ਠੀਕ ਹੈ',\n bh: 'ओके',\n id: 'OK',\n ar: 'موافق',\n tr: 'Tamam',\n my: 'OK',\n Russian: 'Подтвердить',\n Spanish: 'OK',\n Thai: 'ยืนยัน',\n Vietnamese: 'OK',\n Filipino: 'OK',\n },\n 'Content.Form.submit': {\n cn: '提交',\n tc: '提交',\n en: 'Submit',\n ja: '送信',\n ko: '제출하기',\n pt: 'Enviar',\n de: 'Bestätigen',\n fr: 'Valider',\n it: 'Invia',\n hi: 'जमा करें',\n ta: 'சமர்ப்பிக்க',\n te: 'సమర్పించండి',\n ml: 'സബ്മിറ്റ്',\n kn: 'ಸಲ್ಲಿಕೆ',\n mr: 'सबमिट करा',\n gu: 'સબમિટ કરો',\n bn: 'সাবমিট',\n pa: 'ਜਮ੍ਹਾਂ ਕਰੋ',\n bh: 'जमा करें',\n id: 'Kirim',\n ar: 'إرسال',\n tr: 'Gönder',\n my: 'Serah',\n Russian: 'Отправить',\n Spanish: 'Enviar',\n Thai: 'ส่ง',\n Vietnamese: 'Gửi',\n Filipino: 'Isumite',\n },\n 'Content.Form.next.page': {\n cn: '下一页',\n tc: '下一頁',\n en: 'Next',\n ja: '次へ',\n ko: '다음 페이지',\n pt: 'Próximo',\n de: 'Nächste Seite',\n fr: 'Étape suivante',\n it: 'Il prossimo',\n hi: 'अगला',\n ta: 'அடுத்த',\n te: 'తరువాత',\n ml: 'അടുത്തത്',\n kn: 'ಮುಂದೆ',\n mr: 'पुढे',\n gu: 'આગળનું',\n bn: 'পরবর্তী',\n pa: 'ਅਗਲਾ',\n bh: 'अगला',\n id: 'Lanjut',\n ar: 'التالي',\n tr: 'Sonraki Sayfa',\n my: 'Seterusnya',\n Russian: 'Далее',\n Spanish: 'Siguiente',\n Thai: 'ถัดไป',\n Vietnamese: 'Tiếp',\n Filipino: 'Susunod',\n },\n 'Content.Form.last.page': {\n cn: '上一页',\n tc: '上一頁',\n en: 'Previous page',\n tr: 'Önceki Sayfa',\n },\n 'placeholder.other': {\n cn: '其他',\n tc: '其他',\n en: 'Other',\n ja: 'その他',\n ko: '기타',\n pt: 'Outro',\n de: 'Sonstiges',\n fr: 'Autres',\n it: 'Altri',\n hi: 'दूसरा',\n ta: 'மற்ற',\n te: 'ఇతర',\n ml: 'മറ്റുള്ളവ',\n kn: 'ಇತರೆ',\n mr: 'इतर',\n gu: 'અન્ય',\n bn: 'অন্যান্য',\n pa: 'ਹੋਰ',\n bh: 'दूसरा',\n id: 'Lain-lain',\n ar: 'أخرى',\n tr: 'Diğer',\n my: 'Lain-lain',\n Russian: 'Другое',\n Spanish: 'Otro',\n Thai: 'อื่นๆ',\n Vietnamese: 'Khác',\n Filipino: 'Iba',\n },\n 'placeholder.clickToChoose': {\n cn: '点击选择',\n tc: '點擊選擇',\n en: 'Select',\n ja: '選択してくだい',\n ko: '선택하기',\n pt: 'Selecionar',\n de: 'Zur Auswahl klicken',\n fr: 'Sélectionner',\n it: 'Seleziona',\n hi: 'चुनें',\n ta: 'தேர்ந்தெடு',\n te: 'ఎంచుకోండి',\n ml: 'തിരഞ്ഞെടുക്കുക',\n kn: 'ಆಯ್ಕೆಮಾಡಿ',\n mr: 'निवडा',\n gu: 'પસંદ કરો',\n bn: 'বেছে নিন',\n pa: 'ਚੁਣੋ',\n bh: 'चुनें',\n id: 'Pilih',\n ar: 'حدد',\n tr: 'Seç',\n my: 'Pilih',\n Russian: 'Выбрать',\n Spanish: 'Elegir',\n Thai: 'กดเพื่อเลือก',\n Vietnamese: 'Chọn',\n Filipino: 'Pili',\n },\n 'Footer.pages': {\n cn: '页',\n tc: '頁',\n en: 'Page/Pages',\n ja: 'ページ',\n ko: '페이지',\n pt: 'Página/Páginas',\n de: 'Seite/Seiten',\n fr: 'Page/Pages',\n it: 'Pagina/Pagine',\n hi: 'पेज/ पेजेस',\n ta: 'பக்கம் / பக்கங்கள்',\n te: 'పేజీ / పేజీలు',\n ml: 'പേജ്/ പേജുകള്‍',\n kn: 'ಪುಟ / ಪುಟಗಳು',\n mr: 'पृष्ठ / पृष्ठे',\n gu: 'પેજ/પેજીસ',\n bn: 'পেজ/পেজগুলি',\n pa: 'ਪੰਨਾ / ਪੰਨੇ',\n bh: 'पेज/ पेजेस',\n id: 'Halaman',\n ar: 'الصفحة/الصفحات',\n tr: 'Sayfa/Sayfalar',\n my: 'Halaman',\n Russian: 'Страница',\n Spanish: 'Página/páginas',\n Thai: 'หน้า',\n Vietnamese: 'Trang',\n Filipino: 'Pahina',\n },\n 'SingleChoice.Selected': {\n cn: '请填写答案',\n tc: '請填寫答案',\n en: 'Please respond to each question',\n ja: '回答を記入してください',\n ko: '답을 입력해 주세요.',\n pt: 'Favor preencher com resposta',\n de: 'Bitte die Antwort eingeben',\n fr: 'Veuillez entrer une réponse',\n it: 'Per favore compila',\n hi: 'कृपया जवाब भरें',\n ta: 'தயவுசெய்து ஒரு பதிலை நிரப்பவும்',\n te: 'దయచేసి ఒక సమాధానం పూరించండి',\n ml: 'ദയവായി ഒരു ഉത്തരം പൂരിപ്പിക്കുക',\n kn: 'ದಯವಿಟ್ಟು ಉತ್ತರವನ್ನು ಭರ್ತಿ ಮಾಡಿ',\n mr: 'कृपया उत्तर भरा',\n gu: 'કૃપા કરીને જવાબ ભરો',\n bn: 'দয়া করে উত্তর দিন',\n pa: 'ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਉੱਤਰ ਭਰੋ',\n bh: 'कृपया जवाब भरें',\n id: 'Silakan isi jawaban',\n ar: 'يرجى ترك إجابة',\n tr: 'Lütfen bir cevap belirtiniz',\n my: 'Sila isi jawapan',\n Russian: 'Пожалуйста, укажите ответ',\n Spanish: 'Por favor rellenar una respueta',\n Thai: 'โปรดกรอกคำตอบ',\n Vietnamese: 'Hãy điền câu trả lời',\n Filipino: 'Pakipuno ng isang sagot',\n },\n 'SingleChoice.otherText': {\n cn: '请填写其他',\n tc: '請填寫其他',\n en: 'If \"Other\", please specify',\n ja: 'その他を記入してください',\n ko: '명시해주세요',\n pt: 'Favor preencher \"outros\" se necessário',\n de: 'Bitte ggf. Sonstiges ausfüllen',\n fr: 'Veuillez remplir autres',\n it: 'Per favore compila gli altri il resto',\n hi: 'कृपया दूसरे भी हों तो भरें',\n ta: 'வேறு ஏதுமிருப்பின் தயவுசெய்து பிற என்று நிரப்பவும்',\n te: 'దయచేసి ఇతరులను ఏవైనా పూరించండి',\n ml: 'മറ്റെന്തെങ്കിലും ഉണ്ടെങ്കില്‍ പൂരിപ്പിക്കുക',\n kn: 'ಬೇರೆ ಯಾವುದಾದರೂ ಇದ್ದಲ್ಲಿ ದಯವಿಟ್ಟು ಭರ್ತಿ ಮಾಡಿ',\n mr: 'कृपया कोणतेही असल्यास इतरांना भरा',\n gu: 'જો હોય તો, કૃપા કરીને અન્ય વિગત ભરો',\n bn: 'দয়া করে অন্যন্য শূন্যস্থানও পূরণ করুন, যদি কিছু থাকে',\n pa: 'ਕਿਰਪਾ ਕਰਕੇ ਦੂਜਾ ਭਰੋ ਜੇਕਰ ਕੋਈ ਹੋਵੇ',\n bh: 'कृपया दूसरे भी हों तो भरें',\n id: 'Silakan isi lain-lain',\n ar: 'يرجى ترك اجابات اخرى إن وجدت',\n tr: 'Başka varsa lütfen doldurunuz',\n my: 'Sila isi dalam lain-lain jika ada',\n Russian: 'Укажите другие, если таковые имеются',\n Spanish: 'Por favor rellena otras si es posible',\n Thai: 'กรุณากรอกข้อมูลอื่น ๆ',\n Vietnamese: 'Hãy điền câu trả lời khác',\n Filipino: 'Pakipunan ang iba',\n },\n 'ShortText.phoneNumber.wrong': {\n cn: '请填写正确的手机号码',\n tc: '請填寫正確的手機號碼',\n en: 'Enter your phone number',\n ja: '電話番号(携帯)を記入してください',\n ko: '올바른 휴대폰 번호를 입력해 주세요.',\n pt: 'Favor preencher com um número de telefone válido',\n de: 'Bitte eine korrekte Telefonnummer eingeben',\n fr: 'Veuillez entrer un n° de portable correct',\n it: 'Per favore inserisci un numero di telefono corretto',\n hi: 'कृपया सही फोन नंबर डालें',\n ta: 'சரியான தொலைபேசி எண்ணை நிரப்பவும்',\n te: 'దయచేసి సరైన ఫోన్ నంబర్ని పూరించండి',\n ml: 'ശരിയായ ഫോൺ നമ്പർ പൂരിപ്പിക്കുക',\n kn: 'ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಭರ್ತಿ ಮಾಡಿ',\n mr: 'कृपया एक बरोबर फोन नंबर भरा',\n gu: 'કૃપા કરીને સાચો ફોન નંબર નાખો',\n bn: 'দয়া করে সঠিক ফোন নম্বর দিন',\n pa: 'ਕਿਰਪਾ ਕਰਕੇ ਸਹੀ ਫੋਨ ਨੰਬਰ ਭਰੋ',\n bh: 'कृपया सही फोन नंबर डालें',\n id: 'Silakan isi nomor telpon',\n ar: 'يرجى ترك رقم الهاتف الصحيح',\n tr: 'Lütfen doğru bir telefon numarası doldurunuz',\n my: 'Sila isi nombor telefon yang betul',\n Russian: 'Укажите действующий номер мобильного телефона',\n Spanish: 'Por favor rellena un número de teléfono correcto',\n Thai: 'กรุณากรอกหมายเลขโทรศัพท์ที่ถูกต้อง',\n Vietnamese: 'Hãy điền số điện thoại chính xác',\n Filipino: 'Pakipuno ng tamang phone number',\n },\n 'MultiChoice.min.or.max': {\n // min max 不要翻译啊 ${min} ${max} 是一个整体 不要动\n cn: (min, max) => `需要选择至少${min}个最多${max}个选项`,\n tc: (min, max) => `需要選擇至少${min}個最多${max}個選項`,\n en: (min, max) => `Please select ${min} ~ ${max} options`,\n ja: (min, max) => `${min} ~ ${max} 個で選択してください`,\n ko: (min, max) => ` ${min} ~ ${max}개 사이로 선택지를 선택해 주세요.`,\n pt: (min, max) => `Favor selecionar no máximo ${max} opções`,\n de: (min, max) => `Bitte wählen Sie ${min} ~ ${max} Optionen`,\n fr: (min, max) => `Veuillez sélectionner ${min} ~ ${max} options`,\n it: (min, max) => `Per favore seleziona ${min} ~ ${max} opzioni`,\n hi: (min, max) => `कृपया ${min} ~ ${max} ऑप्शन चुनें`,\n ta: (min, max) => `${min} ~ ${max} விருப்பங்களைத் தேர்ந்தெடுக்கவும்`,\n te: (min, max) => `దయచేసి ${min} ~ ${max} ఎంపికలను ఎంచుకోండి`,\n ml: (min, max) => `ദയവായി ${min} ~ ${max}ഓപ്ഷനുകള്‍ തെരഞ്ഞെടുക്കുക`,\n kn: (min, max) => `ದಯವಿಟ್ಟು ${min} ~ ${max} ಆಯ್ಕೆಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ`,\n mr: (min, max) => `कृपया ${min} ~ ${max} पर्याय निवडा`,\n gu: (min, max) => `કૃપા કરીને ${min} ~ ${max} વિકલ્પો પસંદ કરો`,\n bn: (min, max) => `দয়া করে ${min} ~ ${max} বিকল্প বাছুন`,\n pa: (min, max) => `ਕਿਰਪਾ ਕਰਕੇ ${min} ~ ${max} ਵਿਕਲਪਾਂ ਦੀ ਚੋਣ ਕਰੋ`,\n bh: (min, max) => `कृपया ${min} ~ ${max} ऑप्शन चुनें`,\n id: (min, max) => `Diharuskan pilih minimum ${min} dan maksimum ${max}`,\n ar: (min, max) => `يرجي اختيار ${min} ~ ${max}`,\n tr: (min, max) => `Lütfen ${min} ~ ${max} arası seçiniz`,\n my: (min, max) => `Sila guna pilihan ${min} ~ ${max}`,\n Russian: (min, max) => `Пожалуйста, выберите параметры ${min} ~ ${max}`,\n Spanish: (min, max) => `Por favor elige ${min} ~ ${max} de opciones`,\n Thai: (min, max) =>\n `โปรดเลือกตัวเลือกมากกว่า ${min} น้อยกว่า ${max} ตัวเลือก`,\n Vietnamese: (min, max) => `Hãy chọn từ ${min} ~ ${max} đáp án`,\n Filipino: (min, max) =>\n `Kailangang pumili mula sa ${min} hanggang sa ${max}`,\n },\n 'ShortText.overflow': {\n cn: '字数已超50',\n tc: '字數已經超過50',\n en: 'Character limit: 50 characters',\n ja: '50文字以内で入力してくだい',\n ko: '이미 50자를 초과했습니다.',\n pt: 'Texto excede 50 palavras',\n de: 'Die 50-Wörter-Grenze wurde überschritten',\n fr: 'Votre message dépasse les 50 mots',\n it: 'Supera 50 parole',\n hi: '50 शब्दों से ज्यादा हो गए हैं',\n ta: 'நீளம் 50 வார்த்தைகளை மீறுகிறது',\n te: 'పొడవు 50 పదాలను మించిపోయింది',\n ml: 'അക്ഷര പരിധി 50 വാക്കുകള്‍ കവിഞ്ഞു',\n kn: 'ಪದಗಳ ಮಿತಿ 50 ಮೀರಿದೆ',\n mr: 'लांबी 50 शब्द ओलांडली आहे',\n gu: 'વિગત 50 શબ્દો કરતા વધારે છે',\n bn: '৫০ শব্দের বেশি হয়ে গিয়েছে',\n pa: 'ਲੰਬਾਈ 50 ਸ਼ਬਦਾਂ ਤੋਂ ਵੱਧ ਹੈ',\n bh: '50 शब्दों से ज्यादा हो गए हैं',\n id: 'Melebihi 50 huruf',\n ar: 'تم تجاوز 50 رمزا',\n tr: 'Uzunluk 50 kelimeyi aşıyor',\n my: 'Panjang melebihi 50 patah perkataan',\n Russian: 'Количество слов превысило 50',\n Spanish: 'Longitud excede 50 palabras',\n Thai: 'ความยาวเกิน 50 คำ',\n Vietnamese: 'Độ dài quá 50 ký tự',\n Filipino: 'Ang bilang ng salita ay lampas sa 50',\n },\n 'ShortText.placeholder': {\n cn: '内容长度请控制在50字以内',\n tc: '內容長度請控制在50字以內',\n en: 'Character limit: 50 characters',\n ja: '50文字まで入力できます',\n ko: '50자 이내로 작성해 주세요',\n pt: 'Favor manter o limite de 50 palavras',\n de: 'Bitte die 50-Wörter-Grenze nicht überschreiten',\n fr: 'La limite autorisée est de 50 mots maximum',\n it: 'Per favore resta entro le 50 parole',\n hi: 'कृपया 50 शब्दों की सीमा में लिखें',\n ta: 'நீளம் 50 வார்த்தைகளுக்குள் இருக்கவேண்டும்',\n te: 'దయచేసి పొడవు 50 పదాలలో ఉంచండి',\n ml: 'ദയവായി അക്ഷര പരിധി 50 വാക്കിനുള്ളില്‍ നിലനിര്‍ത്തുക',\n kn: 'ಪದಗಳ ಮಿತಿ 50 ಮೀರಿದಂತೆ ನೋಡಿಕೊಳ್ಳಿ',\n mr: 'कृपया 50 शब्दांच्या आत लांबी ठेवा',\n gu: 'કૃપા કરીને વિગત 50 શબ્દોની અંદર રાખો',\n bn: 'দয়া করে ৫০০ শব্দের মধ্যে লিখুন',\n pa: 'ਕਿਰਪਾ ਕਰਕੇ ਲੰਬਾਈ 50 ਸ਼ਬਦਾਂ ਦੇ ਅੰਦਰ ਰੱਖੋ',\n bh: 'कृपया 50 शब्दों की सीमा में लिखें',\n id: 'Pastikan tidak melebihi 50 huruf',\n ar: 'يرجى عدم تجاوز 50 رمزا',\n tr: 'Lütfen uzunluğu 50 kelime içinde tutunuz',\n my: 'Sila pastikan panjang tidak melebihi 50 patah perkataan',\n Russian: 'Пожалуйста, придерживайтесь длины не более 50 слов',\n Spanish: 'Por favor mantén la longitud a 50 palabras',\n Thai: 'โปรดรักษาความยาวภายใน 50 คำ',\n Vietnamese: 'Độ dài câu trả lời không quá 50 ký tự',\n Filipino: 'Huwag lumampas sa 50 salita',\n },\n 'LongText.placeholder': {\n cn: '内容长度请控制在2000字以内',\n tc: '內容長度請控制在2000字以內',\n en: 'Character limit: 2000 characters',\n ja: '2000文字まで入力できます',\n ko: '2000자 이내로 작성해 주세요',\n pt: 'Favor manter o limite de 2000 palavras',\n de: 'Bitte die 2000-Wörter-Grenze nicht überschreiten',\n fr: 'La limite autorisée est de 2000 mots maximum',\n it: 'Per favore resta entro le 2000 parole',\n hi: 'कृपया 2000 शब्दों की सीमा में लिखें',\n ta: 'நீளம் 2000 வார்த்தைகளுக்குள் இருக்கவேண்டும்',\n te: 'దయచేసి పొడవు 2000 పదాలలో ఉంచండి',\n ml: 'ദയവായി അക്ഷര പരിധി 2000 വാക്കിനുള്ളില്‍ നിലനിര്‍ത്തുക',\n kn: 'ಪದಗಳ ಮಿತಿ 2000 ಮೀರಿದಂತೆ ನೋಡಿಕೊಳ್ಳಿ',\n mr: 'कृपया 2000 शब्दांच्या आत लांबी ठेवा',\n gu: 'કૃપા કરીને વિગત 2000 શબ્દોની અંદર રાખો',\n bn: 'দয়া করে ৫০০ শব্দের মধ্যে লিখুন',\n pa: 'ਕਿਰਪਾ ਕਰਕੇ ਲੰਬਾਈ 2000 ਸ਼ਬਦਾਂ ਦੇ ਅੰਦਰ ਰੱਖੋ',\n bh: 'कृपया 2000 शब्दों की सीमा में लिखें',\n id: 'Pastikan tidak melebihi 2000 huruf',\n ar: 'يرجى عدم تجاوز 2000 رمزا',\n tr: 'Lütfen uzunluğu 2000 kelime içinde tutunuz',\n my: 'Sila pastikan panjang tidak melebihi 2000 patah perkataan',\n Russian: 'Пожалуйста, придерживайтесь длины не более 2000 слов',\n Spanish: 'Por favor mantén la longitud a 2000 palabras',\n Thai: 'โปรดรักษาความยาวภายใน 2000 คำ',\n Vietnamese: 'Độ dài câu trả lời không quá 2000 ký tự',\n Filipino: 'Huwag lumampas sa 2000 salita',\n },\n 'LocChoice.placeholder': {\n cn: '选择省市区',\n tc: '選擇省市區',\n en: 'Select your state',\n ja: '都道府県を選択してください',\n ko: '도/시/구를 선택해 주세요.',\n pt: 'Selecione sua localização',\n de: 'Standort auswählen',\n fr: 'Choisissez votre ville',\n it: 'Seleziona la tua posizione',\n hi: 'अपनी लोकेशन चुनें',\n ta: 'உங்கள் இருப்பிடத்தைத் தேர்ந்தெடுக்கவும்',\n te: 'మీ స్థానాన్ని ఎంచుకోండి',\n ml: 'നിങ്ങളുടെ ലൊക്കേഷന്‍ തിരഞ്ഞെടുക്കുക',\n kn: 'ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಆಯ್ಕೆಮಾಡಿ',\n mr: 'आपले स्थान निवडा',\n gu: 'તમારું લોકેશન પસંદ કરો',\n bn: 'আপনার অবস্থান সিলেক্ট করুন',\n pa: 'ਆਪਣਾ ਲੋਕੇਸ਼ਨ ਚੁਣੋ',\n bh: 'अपनी लोकेशन चुनें',\n id: 'Pilih Kota',\n ar: 'حدد موقعك',\n tr: 'Konumunuzu Seçin',\n my: 'Pilih lokasi anda',\n Russian: 'Укажите вашу локацию',\n Spanish: 'Selecciona tu ubicación',\n Thai: 'เลือกตำแหน่งของคุณ',\n Vietnamese: 'Chọn tỉnh/thành phố của bạn',\n Filipino: 'Pilihin ang lakasyon',\n },\n 'LocChoice.placeholder.hideDistrict': {\n cn: '选择省市',\n tc: '選擇省市',\n en: 'Select your city',\n ja: '市区町村を選択してください',\n ko: '도/시를 선택해 주세요.',\n pt: 'Selecione sua localização',\n de: 'Standort auswählen',\n fr: 'Choisissez votre ville',\n it: 'Seleziona la tua posizione',\n hi: 'अपनी लोकेशन चुनें',\n ta: 'உங்கள் இருப்பிடத்தைத் தேர்ந்தெடுக்கவும்',\n te: 'మీ స్థానాన్ని ఎంచుకోండి',\n ml: 'നിങ്ങളുടെ ലൊക്കേഷന്‍ തിരഞ്ഞെടുക്കുക',\n kn: 'ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಆಯ್ಕೆಮಾಡಿ',\n mr: 'आपले स्थान निवडा',\n gu: 'તમારું લોકેશન પસંદ કરો',\n bn: 'আপনার অবস্থান সিলেক্ট করুন',\n pa: 'ਆਪਣਾ ਲੋਕੇਸ਼ਨ ਚੁਣੋ',\n bh: 'अपनी लोकेशन चुनें',\n id: 'Pilih Provinsi',\n ar: 'حدد موقعك',\n tr: 'Konumunuzu Seçin',\n my: 'Pilih lokasi anda',\n Russian: 'Укажите вашу локацию',\n Spanish: 'Selecciona tu ubicación',\n Thai: 'เลือกตำแหน่งของคุณ',\n Vietnamese: 'Chọn thành phố/thị xã của bạn',\n Filipino: 'Pilihin ang lakasyon',\n },\n 'Submit.success': {\n cn: '提交成功',\n tc: '提交成功',\n en: 'Submitted',\n ja: '送信完了',\n ko: '제출 성공',\n pt: 'Sucesso',\n de: 'Erfolgreich abgegeben',\n fr: 'Succès',\n it: 'Successo',\n hi: 'सफल',\n ta: 'வெற்றி',\n te: 'విజయం',\n ml: 'വിജയകരം',\n kn: 'ಯಶಸ್ಸು',\n mr: 'यशस्वी',\n gu: 'સફળતા',\n bn: 'সফল',\n pa: 'ਸਫਲ',\n bh: 'सफल',\n id: 'Sukses',\n ar: 'تمت العملية بنجاح',\n tr: 'Başarılı',\n my: 'Berjaya',\n Russian: 'Успешно отправлено',\n Spanish: 'Listo',\n Thai: 'สำเร็จ',\n Vietnamese: 'Gửi thành công',\n Filipino: 'Tagumpay',\n },\n 'Submit.thanks': {\n cn: '感谢你的参与!',\n tc: '感謝你的參與!',\n en: 'Thank you for your participation!',\n ja: 'ご協力ありがとうございました',\n ko: '참여해주셔서 감사합니다.',\n pt: 'Obrigado pela sua participação!',\n de: 'Vielen Dank für Ihre Teilnahme!',\n fr: 'Merci pour votre participation !',\n it: 'Grazie per aver partecipato!',\n hi: 'भाग लेने के लिए धन्यवाद',\n ta: 'தங்கள் பங்கேற்புக்கு நன்றி!',\n te: 'మీ భాగస్వామ్యానికి ధన్యవాదాలు!',\n ml: 'നിങ്ങളുടെ പങ്കാളിത്തത്തിന് നന്ദി!',\n kn: 'ನಿಮ್ಮ ಪಾಲ್ಗೊಳ್ಳುವಿಕೆಗೆ ಧನ್ಯವಾದಗಳು!',\n mr: 'आपल्या सहभागाबद्दल धन्यवाद!',\n gu: 'તમારા પાર્ટીસિપેશન બદલ આભાર',\n bn: 'অংশ নেওয়ার জন্য ধন্যবাদ',\n pa: 'ਤੁਹਾਡੀ ਭਾਗੀਦਾਰੀ ਲਈ ਧੰਨਵਾਦ!',\n bh: 'भाग लेने के लिए धन्यवाद',\n id: 'Terima kasih telah berpartisipasi!',\n ar: 'نشكركم على المشاركة!',\n tr: 'Katıldığınız için teşekkür ederiz!',\n my: 'Terima kasih di atas penyertaan anda!',\n Russian: 'Благодарим за участие!',\n Spanish: '¡Gracias por tu participación!',\n Thai: 'ขอบคุณสำหรับการเข้าร่วม!',\n Vietnamese: 'Cảm ơn bạn đã tham gia!',\n Filipino: 'Salamat sa iyong pagsali',\n },\n 'no.id': {\n cn: '找不到问卷ID',\n tc: '找不到問卷ID',\n en: 'The questionnaire ID could not be found',\n ja: 'アンケートIDが見つかりません',\n ko: '설문지 ID를 찾을 수 없습니다.',\n pt: 'A ID do questionário não foi encontrada',\n de: 'Die Fragebogen-ID kann nicht gefunden werden',\n fr: 'Ce questionnaire est introuvable',\n it: \"L'ID del questionario non è stato trovato\",\n hi: 'इस प्रश्नसूचि की आईडी नहीं मिल रही',\n ta: 'கேள்வி எண்களை கண்டுபிடிக்க முடியவில்லை',\n te: 'ప్రశ్నాపత్ర ID కనుగొనబడలేదు',\n ml: 'ചോദ്യാവലിയുടെ ഐഡി കണ്ടെത്താനായില്ല',\n kn: 'ಪ್ರಶ್ನಾವಳಿ ID ಅನ್ನು ಕಂಡುಹಿಡಿಯಲಾಗಲಿಲ್ಲ',\n mr: 'प्रश्नावली आयडी सापडला नाही',\n gu: 'પ્રશ્નાવલિ ID મળી શકાયો નથી',\n bn: 'প্রশ্নাবলীর আইডি খুঁজে পাওয়া যাচ্ছে না',\n pa: 'ਪ੍ਰਸ਼ਨਾਵਲੀ ਆਈਡੀ ਨਹੀਂ ਲੱਭਿਆ ਜਾ ਸਕਿਆ',\n bh: 'इस प्रश्नसूचि की आईडी नहीं मिल रही',\n id: 'Tidak ditemukan survey ID',\n ar: 'تعذر العثور على معرّف الاستبيان',\n tr: 'Anket numarası bulunamadı',\n my: 'ID soal selidik tidak dapat ditemui',\n Russian: 'Номер анкеты не найден',\n Spanish: 'El ID de cuestionario no pudo ser encontrada',\n Thai: 'ไม่พบรหัสของแบบสอบถาม',\n Vietnamese: 'Không thể tìm thấy ID bảng khảo sát',\n Filipino: 'Hindi nahanap ang ID ng questionnaire',\n },\n 'get.questionarie.error': {\n cn: '获取问卷失败',\n tc: '獲取問卷失敗',\n en: `Couldn't load questionnaire`,\n ja: 'アンケートの読込みに失敗しました',\n ko: '설문지 가져오기에 실패했습니다.',\n pt: 'Falha em obter questionário',\n de: 'Der Fragebogen kann nicht abgerufen werden',\n fr: \"Impossible d'accéder au questionnaire\",\n it: 'Caricamento del questionario non riuscito',\n hi: 'प्रश्नसूचि नहीं मिल रही',\n ta: 'கேள்விகளை பெற முடியவில்லை',\n te: 'ప్రశ్నావళిని పొందడంలో విఫలమైంది',\n ml: 'ചോദ്യാവലി ലഭിക്കുന്നില്ല',\n kn: 'ಪ್ರಶ್ನಾವಳಿ ಪಡೆಯಲು ವಿಫಲವಾಗಿದೆ',\n mr: 'प्रश्नावली मिळविण्यात अयशस्वी',\n gu: 'પ્રશ્નાવલિ મેળવવા માટે નિષ્ફળતા',\n bn: 'প্রশ্নাবলী পাওয়া যাচ্ছে না',\n pa: 'ਪ੍ਰਸ਼ਨਾਵਲੀ ਪ੍ਰਾਪਤ ਕਰਨ ਵਿੱਚ ਅਸਫਲ',\n bh: 'प्रश्नसूचि नहीं मिल रही',\n id: 'Gagal menampilkan survey',\n ar: 'فشل الحصول على الاستبيان',\n tr: 'Anket Alınamadı',\n my: 'Gagal mendapatkan soal selidik',\n Russian: 'Не удалось получить анкету',\n Spanish: 'Error al obtener el cuestionario',\n Thai: 'การรับแบบสอบถามล้มเหลว',\n Vietnamese: 'Không thể lấy bảng khảo sát',\n Filipino: 'Nabigong kunin ang questionnaire',\n },\n 'close.before.submit': {\n cn: '表单未提交,确认要关闭么?',\n tc: '表單未提交,確認要關閉嗎?',\n en: 'The form has not been submitted. Close the survey anyway?',\n ja: 'アンケートの内容はまだ送信されていません。本当に終了しますか。',\n ko: '설문조사가 완성되지 않았습니다. 정말 닫으시겠습니까?',\n pt: 'O formulário não foi enviado. Deseja sair assim mesmo?',\n de:\n 'Das Formular wurde nicht abgegeben. Möchten Sie es trotzdem schließen?',\n fr:\n \"Le formulaire n'a pas été pas validé. Êtes-vous sûr(e) de vouloir quitter ?\",\n it: 'Il modulo non è stato inviato. Sei sicuro di interrompere?',\n hi: 'फॉर्म अभी भरा नहीं है। क्या आप छोड़ना चाहते हैं?',\n ta: 'படிவம் சமர்ப்பிக்கப்படவில்லை. நீங்கள் நிச்சயமாக வெளியேற வேண்டுமா?',\n te: 'ఫోరమ్ సమర్పించబడలేదు. మీరు ఖచ్చితంగా నిష్క్రమించాలనుకుంటున్నారా?',\n ml:\n 'ഫോം ഇതുവരെ സമര്‍പ്പിച്ചിട്ടില്ല. നിങ്ങള്‍ ക്വിറ്റ്ചെയ്യുന്ന കാര്യം ഉറപ്പിച്ചോ?',\n kn: 'ಫಾರ್ಮ್ ಅನ್ನು ಸಲ್ಲಿಸಲಾಗುತ್ತಿಲ್ಲ. ನೀವು ನಿರ್ಗಮಿಸಲು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?',\n mr: 'फॉर्म सबमिट केला गेला नाही. आपण बाहेर पडायचे आहे का?',\n gu: 'ફોર્મ સબમિટ કરવામાં આવ્યું નથી. શું તમે બહાર નીકળવા માંગો છો?',\n bn: 'ফর্ম সাবমিট করা হয় নি।আপনি নিশ্চিত যে আপনি বেরিয়ে যেতে চান?',\n pa: 'ਫਾਰਮ ਨੂੰ ਜਮ੍ਹਾ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ। ਕੀ ਤੁਸੀਂ ਬੰਦ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?',\n bh: 'फॉर्म अभी भरा नहीं है। क्या आप छोड़ना चाहते हैं?',\n id: 'Form belum terkirim, yakin ingin keluar halaman ini?',\n ar: 'لم يتم إرسال النموذج. هل تريد تاكيد المغادرة؟',\n tr: 'Form gönderilmedi. Çıkmak istediğinizden emin misiniz?',\n my: 'Borang belum diserah, anda pasti ingin berhenti?',\n Russian: 'Анкета не отправлена. Вы уверены, что хотите закрыть?',\n Spanish: 'La encuesta no ha sido enviada. ¿Estás seguro que deseas salir?',\n Thai: 'คุณยังไม่ได้ส่งแบบฟอร์ม คุณยืนยันที่จะยกเลิกหรือไม่?',\n Vietnamese:\n 'Câu trả lời của bạn chưa được gửi đi. Bạn có chắc mình muốn đóng bảng khảo sát?',\n Filipino: 'Hindi pa isinumite ang questionnaire, sigurado ka bang tumigil?',\n },\n 'mobile.selected': {\n cn: '请选择',\n tc: '請選擇',\n en: 'Please select',\n ja: '選択してください',\n ko: '선택하세요.',\n pt: 'Favor selecionar',\n de: 'Bitte wählen',\n fr: 'Veuillez sélectionner',\n it: 'Per favore seleziona',\n hi: 'कृपया चुनें',\n ta: 'தயவு செய்து தேர்வு செய்யவும்',\n te: 'దయచేసి ఎంచుకోండి',\n ml: 'ദയവായി തിരഞ്ഞെടുക്കുക',\n kn: 'ದಯವಿಟ್ಟು ಆಯ್ಕೆ ಮಾಡಿ',\n mr: 'कृपया निवडा',\n gu: 'મહેરબાની કરી, પસંદ કરો',\n bn: 'দয়া করে বেছে নিন',\n pa: 'ਕਿਰਪਾ ਕਰਕੇ ਚੁਣੋ',\n bh: 'कृपया चुनें',\n id: 'Silakan pilih',\n ar: 'يرجى الاختيار',\n tr: 'Lütfen seçiniz',\n my: 'Sila pilih',\n Russian: 'Пожалуйста, выберите',\n Spanish: 'Por favor selecciona',\n Thai: 'โปรดเลือก',\n Vietnamese: 'Hãy chọn',\n Filipino: 'Pakipili',\n },\n 'error.forbidden': {\n cn: '你不在此次定向调研名单中',\n en: 'You are not on the list of this targeted research',\n },\n 'error.submitted': {\n cn: '你已经回答过该问卷了, 感谢你的参与',\n tc: '你已經回答過該問卷了,感謝你的參與',\n en:\n \"You've completed the questionnaire. Thank you very much for your cooperation.\",\n ja: 'アンケートにご回答いただき誠にありがとうございました。',\n ko: '본 설문조사에 이미 참여하신 적이 있습니다. 참여해 주셔서 감사합니다.',\n pt:\n 'Você completou o questionário com sucesso. Obrigado pela sua cooperação.',\n de:\n 'Sie haben den Fragebogen erfolgreich ausgefüllt. Vielen Dank für Ihre Zusammenarbeit!',\n fr: 'Vous avez répondu au questionnaire. Merci pour votre participation.',\n it: 'Hai completato il questionario. Grazie mille per la collaborazione.',\n hi: 'आपने प्रश्नावली पूरी कर ली है। आपके सहयोग के लिए बहुत-बहुत धन्यवाद।',\n ta:\n 'நீங்கள் கேள்வித்தாளை முடித்துவிட்டீர்கள். உங்களது ஒத்துழைப்பிற்கு நன்றி. ',\n te: 'మీరు ప్రశ్నాపత్రాన్ని పూర్తి చేసారు. మీ సహకారానికి చాల ధన్యవాధాలు.',\n ml:\n 'നിങ്ങൾ ചോദ്യാവലി പൂർത്തിയാക്കിയിരിക്കുന്നു. നിങ്ങളുടെ സഹകരണത്തിന് നന്ദി.',\n kn:\n 'ನೀವು ಪ್ರಶ್ನಾವಳಿಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಿದ್ದೀರಿ. ನಿಮ್ಮ ಸಹಕಾರಕ್ಕಾಗಿ ತುಂಬಾ ಧನ್ಯವಾದಗಳು.',\n mr: 'आपण प्रश्नावली पूर्ण केली आहे. आपल्या सहकार्याबद्दल आपले खूप आभार.',\n gu: 'તમે પ્રશ્નાવલી પૂર્ણ કરી છે. આપના સહયોગ અંગે ખૂબ ખૂબ આભાર',\n bn: 'প্রশ্নোত্তর পর্ব শেষ হয়ে গিয়েছে। আপনার সহযোগিতার জন্য ধন্যবাদ',\n pa: 'ਤੁਸੀਂ ਪ੍ਰਸ਼ਨਾਵਲੀ ਪੂਰੀ ਕਰ ਲਈ ਹੈ। ਤੁਹਾਡੇ ਸਹਿਯੋਗ ਲਈ ਬਹੁਤ ਧੰਨਵਾਦ। ',\n bh: 'आपने प्रश्नावली पूरी कर ली है। आपके सहयोग के लिए बहुत-बहुत धन्यवाद।',\n id: 'Anda telah mengisi survey ini, terima kasih.',\n ar: 'لقد أكملتم الاستبيان شكرا جزيلا على تعاونكم.',\n tr: 'Anketi tamamladınız. Yardımınız için teşekkür ederiz.',\n my:\n 'Anda telah melengkapkan soal selidik ini. Terima kasih banyak di atas kerjasama anda',\n Russian: 'Вы успешно ответили на все вопросы, благодарим за участие!',\n Spanish:\n 'Haz completado el cuestionario. Muchas gracias por tu cooperación.',\n Thai: 'คุณตอบแบบสอบถามสำเร็จแล้ว ขอขอบคุณสำหรับความร่วมมือของคุณ!',\n Vietnamese: 'Bạn đã hoàn thành bảng khảo sát. Cảm ơn bạn đã tham gia!',\n Filipino: 'Natapos mo ang questionnaire na ito, salamat sa iyong pagsali.',\n },\n 'error.expired': {\n cn: '该问卷已过期, 感谢你的参与',\n tc: '該問卷已經過期,感謝你的參與',\n en: 'This questionnaire has expired. Thanks for your participation. ',\n ja: 'アンケート回答期限が過ぎております。',\n ko: '본 설문조사는 이미 만기되었습니다. 참여해 주셔서 감사합니다.',\n pt: 'Este questionário expirou. Obrigado pela sua participação.',\n de:\n 'Die Zeit für diesen Fragebogen ist abgelaufen. Vielen Dank für Ihre Teilnahme. ',\n fr:\n \"Ce questionnaire n'est plus disponible Merci pour votre participation.\",\n it: 'Questo questionario è scaduto. Grazie per la tua partecipazone. ',\n hi: 'यह प्रश्नावली समाप्त हो गई है। इसमें भाग लेने के लिए धन्यवाद।',\n ta: 'இந்த கேள்வித்தாள் காலாவதியாகிவிட்டது. இதில் பங்கேற்றதற்கு நன்றி. ',\n te: 'ఈ ప్రశ్నాపత్రం గడువు ముగిసింది. మీ భాగస్వామ్యంకు ధన్యవాదాలు.',\n ml: 'ഈ ചോദ്യാവലിയുടെ കാലാവധി കഴിഞ്ഞു. പങ്കെടുത്തതിന് നന്ദി.',\n kn: 'ಈ ಪ್ರಶ್ನಾವಳಿ ಅವಧಿ ಮೀರಿದೆ. ನಿಮ್ಮ ಭಾಗವಹಿಸುವಿಕೆಗೆ ಧನ್ಯವಾದಗಳು.',\n mr: 'ही प्रश्नावली कालबाह्य झाली आहे. आपल्या सहभागाबद्दल धन्यवाद.',\n gu: 'આ પ્રશ્નાવલી પૂર્ણ થઇ ગઇ છે. આમાં ભાગ લેવા બદલ આપનો ખૂબ ખૂબ આભાર',\n bn: 'প্রশ্নাবলি সমাপ্ত হয়ে গিয়েছে। অংশগ্রহনের জন্য ধন্যবাদ',\n pa:\n 'ਇਸ ਪ੍ਰਸ਼ਨਾਵਲੀ ਦੀ ਆਖ਼ਿਰੀ ਤਰੀਕ ਖਤਮ ਹੋ ਗਈ ਹੈ. ਤੁਹਾਡੀ ਭਾਗੀਦਾਰੀ ਲਈ ਧੰਨਵਾਦ। ',\n bh: 'यह प्रश्नावली समाप्त हो गई है। इसमें भाग लेने के लिए धन्यवाद।',\n id: 'Survey ini telah tidak aktif, terima kasih.',\n ar: 'انتهت مدة صلاحية هذا الاستبيان. شكرا ً على المشاركة ',\n tr: 'Bu anketin süresi doldu. Katılımınız için teşekkür ederiz.',\n my:\n 'Soal selidik ini telah tamat tempoh. Terima kasih di atas penyertaan anda.',\n Russian: 'Срок действия анкеты истек, благодарим за участие!',\n Spanish: 'El cuestionario ha expirado. Gracias por tu participación',\n Thai: 'แบบสอบถามนี้หมดอายุแล้ว ขอขอบคุณสำหรับการเข้าร่วมของคุณ!',\n Vietnamese: 'Bảng khảo sát đã hết hiệu lực. Cảm ơn bạn đã tham gia!',\n Filipino: 'Lumipas na ang questionnaire na ito, salamat sa iyong pagsali.',\n },\n 'error.nonexistence': {\n cn: '该问卷不存在, 感谢你的参与',\n tc: '該問卷不存在,感謝你的參與',\n en: \"The questionnaire doesn't exist.\",\n ja: '本アンケートは存在しません。',\n ko: '해당 설문조사는 존재하지 않습니다. 참여해 주셔서 감사합니다.',\n pt: 'Este questionário não existe. Obrigado pela visita.',\n de:\n 'Dieser Fragebogen ist nicht mehr online. Vielen Dank dennoch für Ihr Interesse.',\n fr: \"Ce questionnaire n'est plus en ligne. Merci de votre visite.\",\n it: 'Questo questionario non esiste. Grazie per la tua partecipazone. ',\n hi: 'कोई प्रश्नावली नहीं मिली। जाँच के लिए धन्यवाद।',\n ta: 'இந்த கேள்வித்தாள் தற்போது இல்லை. உங்களது வருகைக்கு நன்றி.',\n te: 'ప్రశ్నాపత్రం కనబడలేదు. మీరు చెక్ చేసినందుకు ధన్యవాదాలు.',\n ml: 'ഈ ചോദ്യാവലി ഇപ്പോൾ നിലവിലില്ല. സന്ദർശിച്ചതിന് നന്ദി.',\n kn: 'ಪ್ರಶ್ನಾವಳಿ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ. ನಿಮ್ಮ ಭೇಟಿಗೆ ಧನ್ಯವಾದಗಳು.',\n mr: 'ही प्रश्नावली आता अस्तित्वात नाही. आपल्या भेटीसाठी धन्यवाद.',\n gu: 'કોઇ પ્રશ્નાવલી મળી નથી. તપાસ બદલ ધન્યવાદ',\n bn: 'কোনও প্রশ্ন পাওয়া যাচ্ছে না। সন্ধান করার জন্য ধন্যবাদ',\n pa: 'ਪ੍ਰਸ਼ਨਾਵਲੀ ਮੌਜੂਦ ਨਹੀਂ ਹੈ, ਤੁਹਾਡੇ ਆਉਣ ਲਈ ਧੰਨਵਾਦ।',\n bh: 'कोई प्रश्नावली नहीं मिली। जाँच के लिए धन्यवाद।',\n id: 'Survey tidak ditemukan, terima kasih.',\n ar: 'الاستبيان غير موجود. شكراً لزيارتك',\n tr: 'Anket bulunamadı. Ziyaretiniz için teşekkür ederiz.',\n my: 'Soal selidik ini tidak wujud. Terima kasih di atas kunjungan anda.',\n Russian: 'Анкета не существует, благодарим за участие!',\n Spanish: 'El cuestionario no existe. Gracias por su visita',\n Thai: 'ไม่มีแบบสอบถาม ขอบคุณสำหรับการเยี่ยมชม',\n Vietnamese: 'Bảng khảo sát không tồn tại. Cảm ơn bạn đã ghé thăm.',\n Filipino:\n 'Hindi umiiral ang questionnaire na ito, salamat sa iyong pagsali',\n },\n 'error.server_error': {\n cn: '服务异常',\n tc: '服務異常',\n en: \"The service isn't available.\",\n ja: 'サービスエラー',\n ko: '서버 오류',\n pt: 'Este serviço não está disponível.',\n de: 'Der Service ist nicht verfügbar.',\n fr: \"Ce service n'est pas disponible.\",\n it: 'Il servizio non è disponibile.',\n hi: 'सेवा अनुपलब्ध है।',\n ta: 'இந்த சேவை தற்போது பயன்பாட்டில் இல்லை ',\n te: 'సేవ అందుబాటులో లేదు.',\n ml: 'ഈ സേവനം ഇപ്പോൾ ലഭ്യമല്ല.',\n kn: 'ಸೇವೆ ಲಭ್ಯವಿಲ್ಲ.',\n mr: 'ही सेवा उपलब्ध नाही.',\n gu: 'સેવા ઉપલબ્ધ છે',\n bn: 'পরিষেবা উপলব্ধ নেই',\n pa: 'ਸੇਵਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ',\n bh: 'सेवा अनुपलब्ध है।',\n id: 'Servis eror',\n ar: 'الخدمة غير متوفرة.',\n tr: 'Servis mevcut değil.',\n my: 'Perkhidmatan tidak tersedia.',\n Russian: 'Сервис недоступен',\n Spanish: 'El servicio no se encuentra disponible.',\n Thai: 'ไม่สามารถใช้บริการได้',\n Vietnamese: 'Dịch vụ không khả dụng.',\n Filipino: 'Hindi available ang serbisyong ito.',\n },\n back: {\n cn: '返回',\n en: 'Back',\n },\n option: {\n cn: '选项',\n en: 'Option',\n },\n 'option-analysis': {\n cn: '选项解析',\n en: 'Option analysis',\n },\n 'correct-answer': {\n cn: '正确答案',\n en: 'Correct answer',\n },\n 'your-answer': {\n cn: '你的答案',\n en: 'Your answer',\n },\n 'this-question-score': {\n cn: '本题得分',\n en: 'Question score',\n },\n 'answer-analysis': {\n cn: '答案解析',\n en: 'Answer analysis',\n },\n 'show-analysis': {\n cn: '点击查看答案解析',\n en: 'Click to view answer analysis.',\n },\n 'to-lottery': {\n cn: '点击此处去抽奖',\n tc: '點擊此處去抽獎',\n en: 'Join the lucky draw now!',\n ja: '抽選へ',\n ko: '상품 추첨에 참가해 보십시오.',\n pt: 'Junte-se ao sorteio agora!',\n de: 'Nehmen Sie jetzt an der Verlosung teil! ',\n fr: 'Participez à notre tirage au sort !',\n it: \"Partecipa all'estrazione ora!\",\n hi: 'अब लकी ड्रा में शामिल हों!',\n ta: 'உடனே இந்த அதிருஷ்ட குலுக்கலில் இணையுங்கள் ',\n te: 'ఇప్పుడు లక్కీ డ్రాలో చేరండి!',\n ml: 'ലക്കി ഡ്രോയിൽ ഇപ്പോൾ പങ്കെടുക്കൂ!',\n kn: 'ಲಕ್ಕಿ ಡ್ರಾದಲ್ಲಿ ಈಗಲೇ ಭಾಗವಹಿಸಿ!',\n mr: 'आता लकी ड्रॉमध्ये सामील व्हा!',\n gu: 'હવે આપ લકી ડ્રોમાં સામેલ થાઓ',\n bn: 'লাকি ড্র-এ যোগ দিন',\n pa: 'ਹੁਣੇ ਲੱਕੀ ਡਰਾਅ ਨਾਲ ਜੁੜੋ!',\n bh: 'अब लकी ड्रा में शामिल हों!',\n id: 'Ikut undian!',\n ar: 'الانضمام إلى القرعة الان',\n tr: 'Şanslı çekilişe şimdi katılın!',\n my: 'Sertai cabutan bertuah sekarang!',\n Russian: 'Участвовать в розыгрыше',\n Spanish: '¡Únete al sorteo ahora!',\n Thai: 'เข้าร่วมการจับรางวัลตอนนี้!',\n Vietnamese: 'Tham gia ngay rút thăm may mắn!',\n Filipino: 'Sumali sa lucky draw ngayon!',\n },\n 'user-score': {\n cn: '你的得分',\n tc: '你的得分',\n en: 'Your score',\n ja: 'スコア',\n ko: '나의 점수',\n pt: 'Seus pontos',\n de: 'Ihre Punktzahl',\n fr: 'Votre score',\n it: 'Il tuo punteggio',\n hi: 'आपका स्कोर',\n ta: 'உங்களது மதிப்பெண் ',\n te: 'మీ స్కోర్',\n ml: 'നിങ്ങളുടെ സ്‌കോർ',\n kn: 'ನಿಮ್ಮ ಸ್ಕೋರ್',\n mr: 'आपले गुण',\n gu: 'તમારો સ્કોર',\n bn: 'আপনার স্কোর',\n pa: 'ਤੁਹਾਡਾ ਸਕੋਰ',\n bh: 'आपका स्कोर',\n id: 'Score anda',\n ar: 'نقاطك',\n tr: 'Skorunuz',\n my: 'Skor anda',\n Russian: 'Ваши баллы',\n Spanish: 'Tu puntaje',\n Thai: 'คะแนนของคุณ',\n Vietnamese: 'Điểm của bạn',\n Filipino: 'score mo',\n },\n 'number-only': {\n cn: '请填写数字',\n tc: '請填寫數字',\n en: 'Enter a number',\n ja: '数字を入力してください',\n ko: '숫자를 입력해 주십시오.',\n pt: 'Adicione um número por favor.',\n de: 'Bitte geben Sie eine Nummer an.',\n fr: 'Veuillez entrer un numéro.',\n it: 'Per favore inserisci un numero',\n hi: 'कृपया एक नंबर लिखें.',\n ta: 'ஏதாவது ஒரு எண்ணை இடவும் ',\n te: 'దయచేసి నంబర్ను వ్రాయండి.',\n ml: 'ഒരു നമ്പർ നൽകൂ.',\n kn: 'ದಯವಿಟ್ಟು ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ',\n mr: 'कृपया नंबर टाका.',\n gu: 'કૃપા કરી એક નંબર લખો',\n bn: 'দয়া করে নম্বর লিখুন',\n pa: 'ਕਿਰਪਾ ਕਰਕੇ ਇਕ ਨੰਬਰ ਲਿਖੋ। ',\n bh: 'कृपया एक नंबर लिखें.',\n id: 'Silakan masukkan nomor.',\n ar: 'ضع رقماً من فضلك',\n tr: 'Lütfen bir numara yazın',\n my: 'Sila masukkan nombor.',\n Russian: 'Пожалуйста, заполните цифру',\n Spanish: 'Por favor introduce un número',\n Thai: 'โปรดกรอกตัวเลข',\n Vietnamese: 'Hãy nhập số điện thoại.',\n Filipino: 'Pakipunan ng bilang.',\n },\n 'error.type_not_supported': {\n cn: '不支持该文件类型',\n tc: '不支持該文件類型',\n en: 'The file type is not supported',\n Russian: 'Этот тип файла не поддерживается',\n Spanish: 'Este tipo de archivo no es aceptado',\n Thai: 'ไม่รองรับประเภทไฟล์',\n Vietnamese: 'Không hỗ trợ loại tệp này',\n Filipino: 'Hindi suporta ang file type na ito',\n },\n};\n","import React from 'react';\nimport { css } from 'emotion';\nimport Header from '../common/Header';\n\nexport default () =>
;\n\nconst headerCls = css`\n padding: 0;\n #title {\n margin-top: 60px;\n font-size: 36px;\n line-height: 1.5;\n font-weight: 400;\n letter-spacing: 0.2px;\n margin-bottom: 24px;\n }\n #description {\n margin-top: 24px;\n font-size: 14px;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--text-color-secondary);\n font-weight: 350;\n font-stretch: normal;\n font-style: normal;\n margin-bottom: 60px;\n }\n`;\n","import React, { useEffect } from 'react';\nimport { css, cx } from 'emotion';\nimport { Input } from 'antd';\nimport IconFont from '@/components/common/IconFont';\n\nconst { TextArea } = Input;\n\nexport default props => {\n const { className, ...restProps } = props;\n const {\n required = false,\n value = '',\n maxwords = 50,\n chosen = false,\n id,\n } = restProps;\n\n useEffect(() => {\n const input = document.querySelector(`#${id}`);\n if (!window.isReport && chosen && input) {\n window.requestAnimationFrame(() => {\n const {\n value: { length },\n } = input;\n input.selectionStart = length;\n input.selectionEnd = length;\n input.focus();\n });\n }\n }, [chosen]);\n\n return (\n <>\n {required && !value.length && (\n \n )}\n \n {maxwords > 0 && (\n
\n {value.length} / {maxwords}\n
\n )}\n \n );\n};\n\nconst requiredIcon = css`\n position: absolute;\n left: 46px;\n top: 36px;\n z-index: 999;\n font-size: 7px;\n`;\n\nconst autoHeightText = css`\n padding: 16px 11px;\n background: var(--am-entity-bg) !important;\n outline: none;\n border: none;\n margin: 10px 0;\n &:focus {\n border: 1px solid var(--primary-color) !important;\n }\n .has-error &:focus {\n border: none !important;\n }\n`;\n\nconst countCls = css`\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: 0.2px;\n text-align: right;\n color: var(--text-color-secondary);\n position: absolute;\n bottom: 7px;\n right: 16px;\n`;\n","import React from 'react';\nimport TextField from '@material-ui/core/TextField';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { getLocalText } from '@/utilities/language';\nimport withPalette from './index';\n\nfunction MaterialSingleSelect({\n options,\n formAnswer,\n onChange,\n disabledOptIds,\n}) {\n const txt = getLocalText('mobile.selected');\n const answer = formAnswer.selected?.[0];\n const option = options.find(e => e.id === answer);\n const value = option\n ? {\n label: window.showEnQuest\n ? option.enText.html2Text()\n : option.text.html2Text(),\n value: option.id,\n }\n : {\n label: '',\n value: '',\n };\n return (\n e.id)\n .map(el => ({\n label: window.showEnQuest\n ? el.enText.html2Text()\n : el.text.html2Text(),\n value: el.id,\n }))}\n getOptionLabel={option => option.label}\n value={value}\n onChange={(event, newValue) => {\n onChange.selected(newValue?.value || '');\n }}\n getOptionSelected={(option, value) => option.value === value.value}\n getOptionDisabled={opt => disabledOptIds.includes(opt.value)}\n renderInput={params => (\n \n )}\n />\n );\n}\n\nexport default withPalette(MaterialSingleSelect);\n","import React, { Component } from 'react';\nimport { css } from 'emotion';\nimport { Radio, Form, Row, Col } from 'antd';\nimport sanitize from 'sanitize-html';\nimport { getLocalText } from '@/utilities/language';\nimport SingleChoice from '../../common/Question/SingleChoice';\nimport InputSingleLine from './InputSingleLine';\nimport MaterialSingleSelect from './MaterialUI/SingleSelect';\n\nconst RadioGroup = Radio.Group;\nconst FormItem = Form.Item;\n\nexport default class SingleChoicePC extends Component {\n render() {\n const { question, label, displayType } = this.props;\n return (\n \n {({ options = [], formAnswer, error, onChange, disabledOptIds = [] }) => {\n const { selected, text } = error;\n const {\n custom: { splitCols = 1, other },\n required,\n id,\n } = question;\n const rowCounts = Math.ceil(options.length / splitCols); // default to options.length\n const colsSpan = Math.ceil(24 / splitCols); // default to 24\n return (\n \n {/select/i.test(displayType) ? (\n \n ) : (\n onChange.selected(e.target.value)}\n value={formAnswer.selected?.[0]}\n className=\"allWidth\"\n >\n {new Array(rowCounts).fill('').map((_, i) => (\n \n {options.slice(i * splitCols, splitCols * (i + 1)).map(option => (\n \n id === option.id)}\n >\n {optionContentRender({\n option,\n error,\n formAnswer,\n onChange,\n })}\n \n \n ))}\n \n ))}\n {other.status > 0 && (\n \n \n
\n {getLocalText('placeholder.other')}\n onChange.text(e.target.value)}\n value={formAnswer.text}\n chosen={formAnswer.selected.includes('other')}\n required={other.status === 2}\n id={`other${id.replace('$', '')}`}\n />\n
\n
\n \n )}\n \n )}\n \n );\n }}\n
\n );\n }\n}\n\nconst wrapperCol = css`\n margin-top: 26px;\n &:first-of-type {\n margin-top: 0;\n }\n`;\n\nconst radioCls = css`\n display: flex !important;\n margin-top: 26px;\n &:first-of-type {\n margin-top: 0;\n }\n span:not(.ant-radio) {\n width: 100%;\n }\n .ant-input {\n border-color: var(--border-gray);\n }\n .option-error .ant-input {\n border-color: var(--text-red);\n }\n span.ant-radio + * {\n white-space: pre-wrap;\n display: inline-block;\n margin-top: -3px;\n padding-left: 16px;\n }\n &.ant-radio-wrapper-checked {\n color: var(--primary-color);\n }\n`;\nexport function optionContentRender({ option, error, onChange, formAnswer }) {\n const chosen = formAnswer.selected.includes(option.id);\n const restrictions = (window.showEnQuest ? option.enRestrictions : option.restrictions) || {};\n const { maxWords, openWordsRestriction } = restrictions;\n\n return (\n
\n
\n \n {!!option.input && chosen && (\n onChange.input(option.id, e.target.value)}\n value={((formAnswer.option_blank || {})[option.id] || [])[0] || ''}\n placeholder={restrictions.tips || ''}\n required={option.input === 'required'}\n maxwords={openWordsRestriction ? maxWords : -1}\n chosen={chosen}\n id={`other${option.id}`}\n />\n )}\n
\n {!window.showEnQuest && option.description && (\n
{option.description}
\n )}\n {window.showEnQuest && option.enDescription && (\n
{option.enDescription}
\n )}\n {option.img && (\n \n )}\n {option.audio &&
\n );\n}\n","import React, { Component } from 'react';\nimport { Checkbox, Form, Row, Col } from 'antd';\nimport { css, cx } from 'emotion';\nimport { optionContentRender } from './SingleChoice';\nimport { getLocalText } from '@/utilities/language';\nimport MultiChoice from '../../common/Question/MultiChoice';\nimport InputSingleLine from './InputSingleLine';\n\nconst CheckboxGroup = Checkbox.Group;\nconst FormItem = Form.Item;\n\nexport default class MultiChoicePC extends Component {\n render() {\n const { label, question } = this.props;\n return (\n \n {({ options = [], error, onChange, formAnswer, disabledOptIds, overDisabledIds }) => {\n const { selected, text } = error;\n const {\n custom: { splitCols = 1, other },\n required,\n id,\n } = question;\n const rowCounts = Math.ceil(options.length / splitCols); // default to options.length\n const colsSpan = Math.ceil(24 / splitCols); // default to 24\n\n return (\n \n onChange.selected(selected, formAnswer)}\n className={`${`allWidth` + ' '}${MultiChoiceGroupCls}`}\n >\n {new Array(rowCounts).fill('').map((_, i) => (\n \n {options.slice(i * splitCols, splitCols * (i + 1)).map(option => (\n \n id === option.id)) || Boolean(overDisabledIds.find(id => id === option.id))}\n className={checkboxCls}\n value={option.id}\n >\n {optionContentRender({ option, error, onChange, formAnswer })}\n \n \n ))}\n \n ))}\n {other.status > 0 && (\n \n \n
\n {getLocalText('placeholder.other')}\n onChange.text(e.target.value)}\n required={other.status === 2}\n chosen={formAnswer.selected.includes('other')}\n id={`other${id.replace('$', '')}`}\n />\n
\n
\n \n )}\n \n \n );\n }}\n
\n );\n }\n}\nconst MultiChoiceGroupCls = css`\n .ant-checkbox-wrapper-disabled {\n .ant-checkbox-disabled {\n opacity: 0.3;\n }\n .ant-checkbox-inner {\n background: var(--checkbox-disabled-color) !important;\n border-color: var(--checkbox-disabled-color) !important;\n }\n .allWidth {\n color: var(--checkbox-disabled-color) !important;\n }\n }\n `;\nconst wrapperCol = css`\n margin-top: 26px;\n &:first-of-type {\n margin-top: 0;\n }\n`;\n\nconst checkboxCls = css`\n display: flex;\n margin-left: 0;\n .ant-checkbox {\n display: flex;\n align-items: flex-start;\n height: 19px;\n width: 19px;\n }\n & + & {\n margin-left: 0;\n }\n .ant-input {\n border-color: var(--border-gray);\n }\n .option-error .ant-input {\n border-color: var(--text-red);\n }\n .ant-checkbox + span {\n display: inline-block;\n margin-top: -3px;\n padding-left: 16px;\n }\n &.ant-checkbox-wrapper-checked {\n color: var(--primary-color);\n }\n span {\n width: 100%;\n }\n`;\n","import React, { Component } from 'react';\nimport { Form } from 'antd';\nimport LongText from '../../common/Question/LongText';\nimport FillinLong from '../../common/Question/FillinLong';\nimport InputSingleLine from './InputSingleLine';\n\nconst FormItem = Form.Item;\nexport default class LongTextPC extends Component {\n render() {\n const { label, question } = this.props;\n const {\n restrictions: { openWordsRestriction } = {},\n required,\n type,\n } = question;\n const content = ({ error, formAnswer, onChange, placeholder, maxWords = 2000 }) => (\n\n \n onChange(e.target.value)}\n placeholder={placeholder}\n maxLength={openWordsRestriction ? maxWords : -1}\n maxwords={openWordsRestriction ? maxWords : -1}\n style={{ minHeight: 80, marginTop: 0 }}\n />\n \n );\n\n return /fillin/.test(type) ? (\n {content}\n ) : (\n {content}\n );\n }\n}\n","import React, { Component } from 'react';\nimport { Form } from 'antd';\nimport ShortText from '../../common/Question/ShortText';\nimport FillinShort from '../../common/Question/FillinShort';\nimport InputSingleLine from './InputSingleLine';\n\nconst FormItem = Form.Item;\nexport default class ShortTextPC extends Component {\n render() {\n const { label, question } = this.props;\n const {\n restrictions: { maxWords, openWordsRestriction } = {},\n } = question;\n const content = ({ error, formAnswer, onChange, placeholder }) => (\n \n onChange(e.target.value)}\n placeholder={placeholder}\n maxLength={openWordsRestriction ? maxWords : -1}\n maxwords={openWordsRestriction ? maxWords : -1}\n style={{ marginTop: 0 }}\n />\n \n );\n\n return /fillin/.test(question.type) ? (\n {content}\n ) : (\n {content}\n );\n }\n}\n","import React, { Component } from 'react';\nimport { Form } from 'antd';\nimport Scale from '../../common/Question/Scale';\nimport NewScale from '../../common/Question/NewScale';\n\nconst FormItem = Form.Item;\n\nexport default class ScalePC extends Component {\n render() {\n const { question, label } = this.props;\n const { custom } = question;\n const { min, max, styleType, descriptionType } = custom;\n const labels = [];\n for (let i = min.num; i <= max.num; i++) {\n labels.push(i);\n }\n if (!custom[min.num]) {\n custom[min.num] = min;\n }\n if (!custom[max.num]) {\n custom[max.num] = max;\n }\n\n return (\n \n {({\n error, onChange, marks, max, min, formAnswer, options,\n }) => (\n \n
\n \n
\n \n )}\n
\n );\n }\n}\n","import React, { Component } from 'react';\nimport { Form, DatePicker } from 'antd';\nimport moment from 'moment';\nimport DateChoice from '../../common/Question/DateChoice';\n\nconst FormItem = Form.Item;\nexport default class DateChoicePC extends Component {\n render() {\n const { label, question } = this.props;\n return (\n \n {({ error, formAnswer: { date }, onChange }) => (\n \n {\n if (!dateString) {\n return;\n }\n onChange(dateString);\n }}\n />\n \n )}\n \n );\n }\n}\n","import React, { Component } from 'react';\nimport { Form, Cascader } from 'antd';\nimport LocChoice from '../../common/Question/LocChoice';\nimport { getLocalText } from '@/utilities/language';\nimport IconFont from '@/components/common/IconFont';\n\nconst FormItem = Form.Item;\nexport default class LocChoicePC extends Component {\n render() {\n const { label, question } = this.props;\n\n return (\n \n {({ error, formAnswer, onChange, options }) => (\n \n onChange(location)}\n options={options}\n suffixIcon={\n \n \n \n }\n />\n \n )}\n \n );\n }\n}\n","import React, { Component } from 'react';\nimport { Form, Cascader } from 'antd';\nimport CascaderChoice from '../../common/Question/Cascader';\nimport { getLocalText } from '@/utilities/language';\nimport IconFont from '@/components/common/IconFont';\n\nconst FormItem = Form.Item;\nexport default class LocChoicePC extends Component {\n render() {\n const { label, question } = this.props;\n return (\n \n {({ error, formAnswer, onChange, options, titles }) => {\n const titleStr = titles\n .map(e => e.title)\n .filter(e => e)\n .join('/');\n return (\n \n onChange(choice)}\n options={options}\n suffixIcon={\n \n \n \n }\n />\n \n );\n }}\n \n );\n }\n}\n","import React, { Component } from 'react';\nimport { css } from 'emotion';\nimport { Checkbox, Form, Table } from 'antd';\nimport sanitizeHtml from 'sanitize-html';\nimport Matrix from '../../common/Question/Matrix';\nimport { Points } from '../../common/Question/NewScale';\nimport MaterialSlider from './MaterialUI/Slider';\n\nconst FormItem = Form.Item;\n\nexport default class MatrixPC extends Component {\n onValueClick = ({\n checked, selected, line, isSingleMatrix, option, options, onChange,\n }) => {\n if (checked) {\n if (!selected[line.id] || isSingleMatrix) {\n selected[line.id] = [option.id];\n } else {\n selected[line.id].push(option.id);\n if (option.mutex) {\n selected[line.id] = selected[line.id].filter(\n optionId => !option.mutex.includes(optionId),\n );\n }\n selected[line.id] = (selected[line.id] || []).filter(el => {\n if (el === 'other') {\n return true;\n }\n\n const opt = options.find(i => i.id === el);\n if (!opt.mutex || opt.mutex.length === 0) {\n return true;\n }\n return !opt.mutex.includes(option.id);\n });\n }\n } else if (selected[line.id]) {\n selected[line.id] = selected[line.id].filter(el => el !== option.id);\n }\n onChange.selected(selected[line.id], line.id);\n };\n\n getColumn = ({\n options,\n onChange,\n formAnswer,\n isSingleMatrix,\n transpose,\n lines,\n isScaleMatrix,\n styleType,\n }) => {\n const { selected } = formAnswer;\n const { length } = options;\n const columnLen = window.innerWidth > 1440 ? 660 / length : 500 / length;\n const column = [\n {\n title: '',\n align: 'left',\n dataIndex: 'text',\n width: 150,\n render: (text, record) => (\n \n ),\n },\n ];\n (transpose ? lines : options).forEach((el, index) => {\n column.push({\n title: (\n \n \n \n ),\n key: el.id,\n width: columnLen,\n render: (_, record) => {\n let line = record;\n let option = el;\n if (transpose) {\n line = el;\n option = record;\n }\n if (index === 0 && isScaleMatrix) {\n return {\n props: {\n colSpan: options.length,\n },\n children: this.renderScale({\n onChange,\n line,\n styleType,\n selected,\n options,\n }),\n };\n }\n return {\n props: {\n colSpan: isScaleMatrix ? 0 : 1,\n },\n children: (\n
\n \n this.onValueClick({\n checked: e.target.checked,\n selected,\n line,\n options,\n option,\n isSingleMatrix,\n onChange,\n })\n }\n />\n
\n ),\n };\n },\n });\n });\n return column;\n };\n\n renderScale = ({ line, styleType, selected, options, onChange: superOnChange }) => {\n const selectedOne = selected[line.id] && selected[line.id][0];\n let selectedIdx = options.findIndex(opt => opt.id === selectedOne);\n selectedIdx = selectedIdx < 0 ? undefined : selectedIdx + 1;\n const onChange = value => {\n if (!value) return;\n this.onValueClick({\n checked: value,\n selected,\n line,\n options,\n option: options.find(o => o.id === value.toString()),\n isSingleMatrix: true,\n onChange: superOnChange,\n });\n };\n const marks = options.reduce(\n (obj, option) => ({\n ...obj,\n [option.id]: (window.showEnQuest ? option.enLabel : option.label) || '',\n }),\n {},\n );\n if (styleType === 'point') {\n return (\n \n );\n }\n if (styleType === 'star') {\n return (\n \n );\n }\n if (styleType === 'slider') {\n const id = `${this.props.question.id}-${line.id}`;\n return (\n
\n \n
\n );\n }\n return ;\n };\n\n render() {\n const { question, label } = this.props;\n return (\n \n {({\n options,\n error,\n onChange,\n formAnswer,\n lines,\n isSingleMatrix,\n transpose,\n isScaleMatrix,\n styleType,\n }) => {\n const columns = this.getColumn({\n options,\n onChange,\n formAnswer,\n isSingleMatrix,\n transpose,\n lines,\n isScaleMatrix,\n styleType,\n });\n return (\n \n
\n record.id}\n style={{ borderColor: 'var(--text-color)' }}\n />\n
\n \n );\n }}\n
\n );\n }\n}\n\nconst matrixWrap = align => css`\n text-align: ${align};\n .ant-table table {\n text-align: ${align};\n color: var(--text-color) !important;\n }\n .ant-table-column-title {\n color: var(--text-color) !important;\n }\n`;\n\n// const checkboxCls = css`\n// display: flex;\n// margin-right: 20px;\n// margin-bottom: 10px;\n// .other{\n// width: auto;\n// }\n// .ant-checkbox + span {\n// display: inline-block;\n// margin-top: -3px;\n// }\n// `;\n","import React, { Component } from 'react';\nimport { Form, Upload, Modal, message, Input } from 'antd';\nimport UploadCommon from '@/components/common/Question/Upload';\nimport { getLocalText } from '@/utilities/language';\nimport IconFont from '@/components/common/IconFont';\n\n// const { Dragger } = Upload;\nconst FormItem = Form.Item;\nexport default class LongTextPC extends Component {\n constructor(props) {\n super(props);\n const { answer } = props;\n const fileList = [];\n if (answer && answer.list) {\n answer.list.forEach((url, index) => {\n fileList.push({\n uid: `-${index}`,\n name: '',\n status: 'done',\n url,\n thumbUrl: url,\n });\n });\n }\n this.state = {\n fileList,\n previewVisible: false,\n previewImage: '',\n text: '',\n };\n }\n\n handleCancel = () => this.setState({ previewVisible: false });\n\n handlePreview = file => {\n this.setState({\n previewImage: file.url || file.thumbUrl,\n previewVisible: true,\n });\n };\n\n handleChange = ({ fileList, onChange }) => {\n const validate = fileList.every(file => this.beforeUpload(file));\n if (!validate) {\n return;\n }\n let isFail = false;\n fileList.forEach(el => {\n if (isFail) return;\n if (el.response && el.response.code !== 200) {\n // 本地预览时code=0,url以//开头,需要特殊处理\n if (!/^\\/\\//.test(el.response.data?.url)) {\n message.error(getLocalText(`error.${el.response.i18n_prompt}`));\n isFail = true;\n }\n }\n });\n // 如果有失败的\n if (isFail) {\n this.setState({\n fileList: fileList.filter(el => !!el.url || (el.response && el.response.code === 200)),\n });\n return;\n }\n this.setState({ fileList });\n const { text = '' } = this.state;\n onChange({\n text,\n fileList: fileList.map(el => {\n // localStorage中的答案\n if (el.url) {\n return el.url;\n }\n if (el.response?.data) {\n const { url } = el.response.data;\n return /^\\/\\//.test(url) ? `https:${url}` : url;\n }\n // 测试环境假接口格式不一样\n return el.response && el.response.url;\n }),\n });\n };\n\n beforeUpload(file) {\n const isBigFile = file.size > 21000000;\n if (isBigFile) {\n message.error('>20MB');\n return false;\n }\n return true;\n }\n\n handleTextChange = (text, onChange) => {\n this.setState({ text });\n const { fileList } = this.state;\n onChange({\n text,\n fileList: fileList.map(el => {\n if (el.response && el.response.data) {\n return el.response.data.url;\n }\n // 测试环境假接口格式不一样\n return el.response && el.response.url;\n }),\n });\n };\n\n render() {\n const { label, question } = this.props;\n const { previewImage, previewVisible, fileList } = this.state;\n const uploadButton = (\n
\n \n
\n );\n return (\n \n {({\n error, host, onChange, max, withText, placeholder, accept,\n }) => (\n \n = max && 'max'}\n accept={accept.join(', ')}\n action={host}\n listType=\"picture-card\"\n fileList={fileList}\n onPreview={this.handlePreview}\n onChange={({ fileList }) => this.handleChange({ fileList, onChange })}\n >\n {fileList.length >= max ? null : uploadButton}\n \n \n \"example\"\n \n {withText && (\n this.handleTextChange(e.target.value.substring(0, 500), onChange)}\n />\n )}\n \n )}\n \n );\n }\n}\n","import React, { Component } from 'react';\nimport { Form } from 'antd';\n\nimport Sort from '../../common/Question/Sort';\nimport { OptionItem, CustomDragLayer } from '../../mobile/Question/Sort';\n\nconst FormItem = Form.Item;\n\nexport default class SortPC extends Component {\n render() {\n const { label, question } = this.props;\n const { sortType = 'drag' } = question.custom;\n return (\n \n {({\n options,\n error,\n onChange,\n formAnswer,\n handleDrop,\n handleDragStart,\n clickedOptions,\n }) => (\n \n
\n
\n \n {(options || []).map((option, index) => (\n \n ))}\n
\n
\n \n )}\n
\n );\n }\n}\n","import React, { Component } from 'react';\nimport styled from '@emotion/styled';\nimport sanitizeHtml from 'sanitize-html';\nimport SingleChoice from './SingleChoice';\nimport MultiChoice from './MultiChoice';\nimport LongText from './LongText';\nimport ShortText from './ShortText';\nimport Scale from './Scale';\nimport DateChoice from './DateChoice';\nimport LocChoice from './LocChoice';\nimport Cascader from './Cascader';\nimport Matrix from './Matrix';\nimport Upload from './Upload';\nimport Sort from './Sort';\nimport PureDescription from '../../common/Question/PureDescription';\nimport ShoppingOrder from '../../common/Question/ShoppingOrder';\nimport { getRealName } from '@/utilities/common';\nimport IconFont from '@/components/common/IconFont';\n\nfunction pauseAll() {\n const self = this;\n const audios = Array.from(document.querySelectorAll('audio'));\n [].forEach.call(audios, function(i) {\n if (i !== self) {\n i.pause();\n i.currentTime = 0;\n }\n });\n}\n\nexport default class Question extends Component {\n componentDidMount() {\n const audios = Array.from(document.querySelectorAll('audio'));\n [].forEach.call(audios, function(i) {\n i.addEventListener('play', pauseAll.bind(i));\n });\n }\n\n renderBody() {\n const { no, question, answer, answers, hideQuestionNo } = this.props;\n const name = getRealName({ question, answers });\n const label = (\n \n {!hideQuestionNo && (\n \n {`${Math.floor(no / 10)}${no % 10}`}\n

\n )}\n {question.required && (\n \n \n \n )}\n \n \n );\n const common = { ...this.props, label, key: question.id };\n switch (question.type) {\n default:\n return

{JSON.stringify(this.props)}

;\n case 'single':\n case 'singleSelect':\n case 'nonScoreSingle':\n case 'nonScoreSingleSelect':\n return (\n \n );\n case 'multi':\n case 'nonScoreMulti':\n return ;\n case 'cascader':\n return ;\n case 'sort':\n return ;\n case 'long':\n case 'fillinLong':\n return ;\n case 'short':\n case 'fillinShort':\n return ;\n case 'scale':\n return ;\n case 'date':\n return ;\n case 'location':\n return ;\n case 'description':\n return (\n \n \n \n );\n case 'matrix':\n return ;\n case 'upload':\n return ;\n case 'order':\n return ;\n }\n }\n\n render() {\n return (\n \n {this.renderBody()}\n \n );\n }\n}\n\nconst QuestionFrame = styled.section`\n background: var(--question-bg) !important;\n margin-bottom: 16px;\n border-radius: 2px;\n &:last-of-type {\n border-bottom: none;\n }\n .ant-form-item-required {\n white-space: nowrap;\n display: flex;\n }\n .ant-form-item-required::before {\n display: none;\n }\n .ant-form-item-label {\n width: 100%;\n white-space: normal;\n text-align: left;\n font-size: 18px;\n margin-bottom: 30px;\n font-weight: 400;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--text-color);\n .number {\n height: 28px;\n }\n }\n .ant-form-item-label label:after {\n content: '';\n }\n .ant-form-item {\n padding: 40px 72px 60px 56px;\n border: 1px solid transparent;\n margin-bottom: 0;\n }\n .ant-form-item.ant-form-item-with-help {\n border: 1px solid var(--text-red);\n }\n`;\n","import React, { Component, useEffect, useState } from 'react';\nimport { formShape, createForm } from 'rc-form';\nimport { Button, message, Modal } from 'antd';\nimport { css } from 'emotion';\nimport sanitizeHtml from 'sanitize-html';\nimport styled from '@emotion/styled';\nimport isEqual from 'lodash/isEqual';\nimport Question from './Question';\nimport { Consumer } from '@/store';\nimport { getLocalText } from '../../utilities/language';\nconst htmlReg = /<.*?>/g;\nconst onlyShowContent = window.location.href.includes('_dp_survey_only_content');\n\nexport default function Content() {\n const [formRef, handleFormRef] = useState(null);\n\n useEffect(() => {\n formRef && formRef.validateAllWithoutScroll();\n }, [window.showEnQuest]);\n\n const handleOnRef = ref => {\n handleFormRef(ref);\n };\n\n return (\n \n {store => {\n const { answers, page, allQuestions, cipherUrl } = store.state;\n const { submit, getPageContent, update, backLastPage, updateAnswers, emptyAllAnswers } =\n store.action;\n const { hideQuestionNo, showLastPage, privacy, quotaStrategy, hidePageNo } =\n store.state.quest;\n return (\n \n );\n }}\n \n );\n}\n\n@createForm({\n onValuesChange(props, changed) {\n props.update(changed);\n },\n})\nclass Form extends Component {\n static propTypes = {\n form: formShape,\n };\n\n state = {\n submitStack: [],\n intervalID: null,\n };\n\n componentDidMount() {\n this.handleTimeLimit();\n const { privacy, handleOnRef } = this.props;\n\n handleOnRef(this);\n if (privacy?.replace(htmlReg, '') && !window.isReport) {\n Modal.info({\n title: '',\n icon: null,\n width: 800,\n content: (\n \n ),\n okText: getLocalText('Content.Form.Ok'),\n });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n const {\n quotaStrategy,\n form,\n page: { current },\n } = nextProps;\n if (current > this.props.page.current) {\n this.handleTimeLimit(current);\n }\n if (!isEqual(this.props.quotaStrategy, quotaStrategy)) {\n this.validateAllWithoutScroll(form);\n }\n }\n\n componentWillUnmount() {\n this.props.handleOnRef(null);\n clearInterval(this.state.intervalID);\n this.setState = () => false;\n }\n\n handleTimeLimit = acCurrent => {\n const {\n allQuestions,\n page: { current },\n } = this.props;\n\n const { timeLimit } = allQuestions.filter(q => q.type === 'page_break')[\n acCurrent ? acCurrent - 1 : current - 1\n ];\n\n const { timeRef } = this;\n if (timeLimit && this.timeRef) {\n const intervalID = window.setInterval(pageTimeLimit, 1000);\n this.setState({ intervalID });\n const that = this;\n let t = timeLimit;\n // eslint-disable-next-line\n function pageTimeLimit() {\n t--;\n timeRef.innerHTML = `(${t}s)`;\n if (t <= 0) {\n clearInterval(intervalID);\n timeRef.innerHTML = '';\n that.setState({ intervalID: null });\n }\n }\n }\n };\n\n validateAllWithoutScroll = nextForm => {\n if (nextForm) {\n nextForm.validateFields({ force: true });\n return;\n }\n const { form } = this.props;\n form.validateFields({ force: true });\n };\n\n submit = fields => {\n if (!this.props.formRef) return;\n const { form, doSubmit } = this.props;\n const submitStep = [];\n form.validateFields(fields, { force: true }, async (error, value) => {\n if (error) {\n this.setState({\n submitStack: [getLocalText('Content.Form.error.message')],\n });\n try {\n message.error(getLocalText('Content.Form.error.message')); // '表单验证未通过');\n const key = Object.keys(error)[0];\n const element = document.getElementById(key);\n element.scrollIntoView();\n document.querySelector('body').scrollTop = element.offsetTop;\n document.querySelector('html').scrollTop = element.offsetTop;\n } catch (error) {\n submitStep.push(error.message);\n }\n\n return;\n }\n\n const submitPromise = doSubmit(value);\n if (!submitPromise) return;\n const hide = message.loading(getLocalText('Content.Form.submitting'), 0); // '提交中...'\n await submitPromise.catch(err => {\n submitStep.push(`submit error: ${err.message || '请求无结果'}`);\n });\n clearInterval(this.state.intervalID);\n this.setState({\n submitStack: submitStep,\n intervalID: null,\n });\n hide();\n });\n };\n\n goBackPage = () => {\n clearInterval(this.state.intervalID);\n this.setState({\n intervalID: null,\n });\n if (this.timeRef) {\n this.timeRef.innerHTML = '';\n }\n this.props.backLastPage();\n };\n\n emptyAllAnswers = () => {\n const { emptyAllAnswers, form } = this.props;\n form.resetFields();\n emptyAllAnswers();\n };\n\n render() {\n const {\n form,\n answers,\n page,\n getPageContent,\n hideQuestionNo,\n hidePageNo,\n allQuestions,\n showLastPage,\n quotaStrategy,\n cipherUrl,\n } = this.props;\n\n const { submitStack, intervalID } = this.state;\n const { no, questions, isNextEnd } = getPageContent();\n const breakPageInfo = questions.shift();\n const fields = questions.map(q => q.id);\n const { current, total } = page;\n\n return (\n \n {cipherUrl && (\n
\n \n {\n const el = document.querySelector('#cipher-span');\n el.focus();\n el.select();\n if (document.execCommand('copy')) {\n document.execCommand('copy');\n message.success(`链接复制成功, 可直接去对话框粘贴`);\n }\n el.blur();\n }}\n >\n 生成\n \n \n
\n )}\n {breakPageInfo.description && (\n \n )}\n
e.preventDefault()}>\n {\n questions.reduce(\n ([arr, index], q) => {\n arr.push(\n s.questionId === q.id)}\n questions={questions}\n allQuestions={allQuestions}\n answers={answers}\n form={form}\n key={q.id}\n no={index + no + 1}\n question={q}\n answer={answers[q.id]}\n />\n );\n if (q.type === 'description') {\n return [arr, index];\n }\n return [arr, index + 1];\n },\n [[], 0]\n )[0]\n }\n \n {!window.isReport && !onlyShowContent && (\n <>\n {!hidePageNo && (\n
\n {current}/{total}\n
\n )}\n {isNextEnd &&
1/2
}\n
\n {current !== 1 && showLastPage && (\n \n {getLocalText('Content.Form.last.page') || 'Last'}\n \n )}\n this.submit(fields)}\n className={submitBtnCls}\n disabled={intervalID}\n type='primary'\n >\n \n {\n page.current === page.total && !isNextEnd\n ? getLocalText('Content.Form.submit') // '提交'\n : getLocalText('Content.Form.next.page') // '下一页'\n }\n \n {\n this.timeRef = el;\n }}\n />\n \n
\n
\n {window.showErrorInfoAfterSubmitBtn && submitStack.join('=>')}\n
\n \n )}\n
\n );\n }\n}\n\nconst ContentWrap = styled.section`\n flex: 1 0 auto;\n padding: 0px;\n form {\n border: 0;\n padding: 0;\n background: transparent;\n }\n .pageInfo {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--text-color);\n text-align: center;\n margin-top: 20px;\n }\n .ant-select-selection--single {\n height: 48px;\n display: flex;\n align-items: center;\n }\n .ant-cascader-input {\n height: 48px;\n background: var(--ant-border);\n }\n .ant-form-item-children {\n display: block;\n }\n .ant-cascader-picker:hover .ant-cascader-picker-clear {\n right: 40px;\n }\n .ant-radio-group,\n .ant-radio-wrapper {\n display: block;\n color: var(--text-color);\n .description {\n margin-top: 4px;\n font-size: 12px;\n font-weight: 350;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--text-color-thirdly);\n }\n .ant-radio-inner::after {\n height: 6px;\n width: 6px;\n top: 5px;\n left: 5px;\n }\n .ant-radio-inner {\n height: 18px;\n width: 18px;\n top: -1px;\n }\n }\n .ant-radio-wrapper-checked .optionText {\n font-size: 14px;\n font-weight: 400;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--primary-color);\n }\n .ant-checkbox-checked .ant-checkbox-inner::after {\n border: 2px solid var(--ant-check-bg);\n border-top: 0;\n border-left: 0;\n height: 9px;\n width: 5px;\n left: 30%;\n top: 8px;\n transition: none;\n }\n .ant-checkbox-inner {\n height: 19px;\n width: 19px;\n border-radius: 2px;\n background-color: var(--ant-bg);\n }\n .ant-checkbox-wrapper-checked:not(.isSingle) .ant-checkbox-inner {\n background: var(--primary-color);\n border-radius: 2px;\n border: solid 1px var(--primary-color);\n transition: none;\n height: 19px;\n width: 19px;\n margin-right: 0;\n }\n .ant-checkbox:hover::after,\n .ant-checkbox-wrapper:hover .ant-checkbox::after {\n visibility: hidden;\n }\n .ant-checkbox-wrapper {\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--text-color);\n display: flex;\n flex-flow: row nowrap;\n &.ant-checkbox-wrapper-checked {\n color: var(--primary-color);\n }\n .description {\n margin-top: 4px;\n font-size: 12px;\n font-weight: 350;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: var(--text-color-thirdly);\n }\n }\n .ant-upload.ant-upload-drag {\n border-radius: 4px;\n border: dashed 1px var(--border-gray);\n background-color: var(--bg-gray);\n margin-bottom: 10px;\n }\n .max .ant-upload.ant-upload-drag {\n display: none;\n }\n .ant-form-explain {\n color: var(--text-red);\n position: absolute;\n width: 100vw;\n top: -29px;\n left: 0;\n z-index: 2;\n padding: 0px;\n transition: none;\n font-size: 12px;\n line-height: 1.5;\n }\n .ant-table-small {\n border: 0;\n .ant-table-row:last-child td {\n border-bottom: 1px solid var(--ant-table-border);\n }\n\n .ant-table-tbody > tr > td {\n padding: 16px 8px !important;\n font-size: 14px;\n line-height: 1.57;\n }\n\n .ant-table-tbody > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > td {\n background: var(--ant-table-hover);\n }\n }\n .optionText {\n display: flex;\n flex-flow: row wrap;\n .ant-input {\n border-color: var(--ant-border);\n &:focus,\n &:hover {\n border-color: var(--primary-color);\n }\n }\n }\n .ant-table-thead > tr > th {\n border-bottom-color: var(--ant-table-border);\n }\n .ant-table-tbody > tr > td {\n border-bottom-color: var(--ant-table-border);\n }\n .ant-cascader-picker-arrow {\n right: 20px;\n }\n .ant-cascader-picker .ant-input {\n border-color: var(--ant-border);\n }\n .ant-calendar-picker.ant-calendar-picker-large {\n .ant-input-lg {\n height: 48px;\n padding: 6px 20px;\n }\n // .anticon-calendar {\n // color: var(--primary-color);\n // }\n }\n .ant-input::-webkit-input-placeholder {\n font-weight: 350;\n color: var(--text-color-thirdly);\n }\n`;\n\nconst submitBtnCls = css`\n display: block;\n width: 220px;\n height: 40px;\n margin-left: auto;\n margin-top: 30px;\n margin-right: auto;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: 0.2px;\n color: #ffffff;\n`;\n","import React from 'react';\nimport styled from '@emotion/styled';\nimport { Consumer } from '@/store';\n\nexport default () => (\n \n {store => {\n const { loading, quest } = store.state;\n if (loading) return 'loading...';\n const { footer } = quest;\n\n return (\n !window.isReport && (\n
\n

{footer || ''}

\n
\n )\n );\n }}\n
\n);\n\nconst Footer = styled.footer`\n text-align: center;\n margin-top: 170px;\n .page-indicator {\n color: #666;\n }\n .footer-info {\n color: var(--text-color);\n text-shadow: 0 2px 2px #fff;\n }\n`;\n","import React, { Component } from 'react';\nimport enUS from 'antd/lib/locale-provider/en_US';\nimport zhCN from 'antd/lib/locale-provider/zh_CN';\nimport HTML5Backend from 'react-dnd-html5-backend';\nimport styled from '@emotion/styled';\nimport { ConfigProvider, Button } from 'antd';\nimport { css, keyframes } from 'emotion';\nimport { DndProvider } from 'react-dnd';\nimport Loading from '../Loading';\nimport Header from './Header';\nimport Content from './Content';\nimport Footer from './Footer';\nimport { traceClickAdv } from '@/tracer';\nimport { Consumer } from '@/store';\n\nconst tcpyConfig = require('../../../tcpy-conf.json').TTP;\nexport default class Layout extends Component {\n renderMessage(msg) {\n const url = window.location.href;\n return (\n \n
{msg.description}
\n
\n );\n }\n\n renderLayout(quest) {\n const { background = {} } = quest;\n const mainCls = css`\n // background-color: ${background.type === 'color' && background.color};\n // background-image: ${(background.type === 'url' && `url(${background.url})`) || 'none'};\n // background-position: center;\n // background-repeat: no-repeat;\n // background-size: cover;\n background: ${(background.type === 'url'\n && `url(${background.url}) center no-repeat cover, var(--page-bg)`)\n || 'var(--page-bg)'};\n `;\n return (\n \n \n
\n \n \n \n