¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="questionnaire" :class="'survey-type-' + surveyType"> |
| | | <div class="CONTENT" v-if="!accomplish"> |
| | | <div class="preview-left"> |
| | | <div class="toptitle"> |
| | | <div class="title">{{ surveyTitle }}</div> |
| | | <div style="font-size: 22px; margin-bottom: 20px; line-height: 1.5"> |
| | | {{ surveyDescription }} |
| | | </div> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | |
| | | <!-- åéé¢ --> |
| | | <div |
| | | class="topic-dev" |
| | | v-for="(item, index) in questionList" |
| | | :key="item.scriptId" |
| | | > |
| | | <div class="scriptTopic-dev" :key="index" v-if="item.scriptType == 1"> |
| | | <div class="dev-text"> |
| | | {{ index + 1 }}ã<span style="line-height: 1.5" |
| | | >{{ item.scriptContent }} |
| | | <span style="color: #3ba2f7">[åé]</span></span |
| | | > |
| | | </div> |
| | | <div class="dev-xx"> |
| | | <el-radio-group |
| | | class="custom-radio" |
| | | v-model="item.scriptResult" |
| | | @change="handleOptionChange($event, index, item)" |
| | | > |
| | | <el-radio |
| | | border |
| | | v-for="(option, optIndex) in item.svyLibTemplateTargetoptions" |
| | | :class=" |
| | | option.isabnormal && |
| | | item.scriptResult == option.optioncontent |
| | | ? 'red-star' |
| | | : '' |
| | | " |
| | | :key="optIndex" |
| | | :label="option.optioncontent" |
| | | >{{ option.optioncontent }}</el-radio |
| | | > |
| | | </el-radio-group> |
| | | </div> |
| | | <div v-show="item.prompt"> |
| | | <el-alert :title="item.prompt" type="warning"> </el-alert> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- å¤éé¢ --> |
| | | <div class="scriptTopic-dev" :key="index" v-if="item.scriptType == 2"> |
| | | <div class="dev-text"> |
| | | {{ index + 1 }}ã<span style="line-height: 1.5" |
| | | >{{ item.scriptContent }} |
| | | <span style="color: #3ba2f7">[å¤é]</span></span |
| | | > |
| | | </div> |
| | | <div class="dev-xx"> |
| | | <el-checkbox-group |
| | | class="custom-radio" |
| | | v-model="item.scriptResult" |
| | | > |
| | | <el-checkbox |
| | | border |
| | | @change="$forceUpdate()" |
| | | v-for="(option, optIndex) in item.svyLibTemplateTargetoptions" |
| | | :key="optIndex" |
| | | :label="option.optioncontent" |
| | | > |
| | | {{ option.optioncontent }} |
| | | </el-checkbox> |
| | | </el-checkbox-group> |
| | | </div> |
| | | <div v-show="item.prompt && item.scriptResult[0]"> |
| | | <el-alert :title="item.prompt" type="warning"> </el-alert> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- å¡«ç©ºé¢ --> |
| | | <div class="scriptTopic-dev" :key="index" v-if="item.scriptType == 4"> |
| | | <div class="dev-text"> |
| | | {{ index + 1 }}ã<span style="line-height: 1.5" |
| | | >{{ item.scriptContent |
| | | }}<span style="color: #3ba2f7">[é®ç]</span></span |
| | | > |
| | | </div> |
| | | <div class="dev-xx"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请è¾å
¥æ¨çæè§æå»ºè®®" |
| | | v-model="item.scriptResult" |
| | | clearable |
| | | > |
| | | </el-input> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="bottom-fixed"> |
| | | <el-button |
| | | type="primary" |
| | | style="width: 80%; font-size: 20px" |
| | | @click="submitSurvey" |
| | | >æäº¤é®å·</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="CONTENT" v-else> |
| | | <div class="preview-lefts"> |
| | | <div class="completion-message"> |
| | | <div class="thank-you">{{ this.accomplish||'æè°¢æ¨çé
å!' }}</div> |
| | | <div class="feedback-message">{{ completionMessage }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getScriptByCondition, |
| | | saveMYDQuestionAnswer, |
| | | } from "@/api/AiCentre/index"; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | surveyType: null, // 'outpatient', 'inpatient' |
| | | surveyTitle: "", |
| | | surveyDescription: "", |
| | | questionList: [], |
| | | completionMessage: "", |
| | | accomplish: false, |
| | | |
| | | // å å¯åçåæ° |
| | | encryptedParams: { |
| | | param1: "", |
| | | param2: "", |
| | | param3: "", |
| | | param4: "", |
| | | }, |
| | | |
| | | // æµè¯æ°æ® |
| | | testData: { |
| | | 1: { |
| | | title: "é¨è¯æ»¡æåº¦è°æ¥", |
| | | description: |
| | | "亲ç±çæ£è
ï¼æè°¢æ¨éæ©æä»¬çå»çæå¡ã为äºä¸ææåæå¡è´¨éï¼è¯·æ¨è±å åéæ¶é´å¡«åæ¤é®å·ã", |
| | | questions: [ |
| | | { |
| | | scriptId: 1, |
| | | scriptType: 1, |
| | | scriptContent: "æ¨å¯¹é¨è¯å»ççè¯çæ°´å¹³æ¯å¦æ»¡æï¼", |
| | | scriptResult: null, |
| | | svyLibTemplateTargetoptions: [ |
| | | { optioncontent: "é常满æ", value: "5", isabnormal: false }, |
| | | { optioncontent: "满æ", value: "4", isabnormal: false }, |
| | | { optioncontent: "ä¸è¬", value: "3", isabnormal: true }, |
| | | { optioncontent: "䏿»¡æ", value: "2", isabnormal: true }, |
| | | { optioncontent: "é叏䏿»¡æ", value: "1", isabnormal: true }, |
| | | ], |
| | | }, |
| | | { |
| | | scriptId: 2, |
| | | scriptType: 1, |
| | | scriptContent: "æ¨å¯¹é¨è¯æ¤å£«çæå¡æåº¦æ¯å¦æ»¡æï¼", |
| | | scriptResult: null, |
| | | svyLibTemplateTargetoptions: [ |
| | | { optioncontent: "é常满æ", value: "5", isabnormal: false }, |
| | | { optioncontent: "满æ", value: "4", isabnormal: false }, |
| | | { optioncontent: "ä¸è¬", value: "3", isabnormal: true }, |
| | | { optioncontent: "䏿»¡æ", value: "2", isabnormal: true }, |
| | | { optioncontent: "é叏䏿»¡æ", value: "1", isabnormal: true }, |
| | | ], |
| | | }, |
| | | { |
| | | scriptId: 3, |
| | | scriptType: 2, |
| | | scriptContent: "æ¨è®¤ä¸ºé¨è¯åªäºæ¹é¢éè¦æ¹è¿ï¼ï¼å¯å¤éï¼", |
| | | scriptResult: [], |
| | | svyLibTemplateTargetoptions: [ |
| | | { |
| | | optioncontent: "æéçåæ¶é´", |
| | | value: "waiting_time", |
| | | isabnormal: false, |
| | | }, |
| | | { |
| | | optioncontent: "å»çæ²éæ¹å¼", |
| | | value: "communication", |
| | | isabnormal: false, |
| | | }, |
| | | { |
| | | optioncontent: "å°±è¯ç¯å¢", |
| | | value: "environment", |
| | | isabnormal: false, |
| | | }, |
| | | { |
| | | optioncontent: "å»ç设å¤", |
| | | value: "equipment", |
| | | isabnormal: false, |
| | | }, |
| | | { optioncontent: "å
¶ä»", value: "other", isabnormal: false }, |
| | | ], |
| | | }, |
| | | { |
| | | scriptId: 4, |
| | | scriptType: 4, |
| | | scriptContent: "æ¨å¯¹é¨è¯æå¡è¿æä»ä¹å
¶ä»å»ºè®®ï¼", |
| | | scriptResult: null, |
| | | }, |
| | | ], |
| | | completionMessage: |
| | | "æè°¢æ¨å®è´µçæè§ï¼æä»¬å°ä¸ææ¹è¿é¨è¯æå¡è´¨éï¼ä¸ºæ¨æä¾æ´å¥½çå»çæå¡ä½éªã", |
| | | }, |
| | | 2: { |
| | | title: "ä½é¢æ»¡æåº¦è°æ¥", |
| | | description: |
| | | "亲ç±çæ£è
åå®¶å±ï¼æè°¢æ¨éæ©å¨æé¢ä½é¢æ²»çãä¸ºäºæåä½é¢æå¡è´¨éï¼è¯·æ¨å¡«åæ¤é®å·ã", |
| | | questions: [ |
| | | { |
| | | scriptId: 1, |
| | | scriptType: 1, |
| | | scriptContent: "æ¨å¯¹ä½é¢æé´å»ççè¯çæ°´å¹³æ¯å¦æ»¡æï¼", |
| | | scriptResult: null, |
| | | svyLibTemplateTargetoptions: [ |
| | | { optioncontent: "é常满æ", value: "5", isabnormal: false }, |
| | | { optioncontent: "满æ", value: "4", isabnormal: false }, |
| | | { optioncontent: "ä¸è¬", value: "3", isabnormal: true }, |
| | | { optioncontent: "䏿»¡æ", value: "2", isabnormal: true }, |
| | | { optioncontent: "é叏䏿»¡æ", value: "1", isabnormal: true }, |
| | | ], |
| | | }, |
| | | { |
| | | scriptId: 2, |
| | | scriptType: 1, |
| | | scriptContent: "æ¨å¯¹ä½é¢æé´æ¤å£«çæ¤çæå¡æ¯å¦æ»¡æï¼", |
| | | scriptResult: null, |
| | | svyLibTemplateTargetoptions: [ |
| | | { optioncontent: "é常满æ", value: "5", isabnormal: false }, |
| | | { optioncontent: "满æ", value: "4", isabnormal: false }, |
| | | { optioncontent: "ä¸è¬", value: "3", isabnormal: true }, |
| | | { optioncontent: "䏿»¡æ", value: "2", isabnormal: true }, |
| | | { optioncontent: "é叏䏿»¡æ", value: "1", isabnormal: true }, |
| | | ], |
| | | }, |
| | | { |
| | | scriptId: 3, |
| | | scriptType: 1, |
| | | scriptContent: "æ¨å¯¹ä½é¢ç
æ¿çç¯å¢åå«çæ¯å¦æ»¡æï¼", |
| | | scriptResult: null, |
| | | svyLibTemplateTargetoptions: [ |
| | | { optioncontent: "é常满æ", value: "5", isabnormal: false }, |
| | | { optioncontent: "满æ", value: "4", isabnormal: false }, |
| | | { optioncontent: "ä¸è¬", value: "3", isabnormal: true }, |
| | | { optioncontent: "䏿»¡æ", value: "2", isabnormal: true }, |
| | | { optioncontent: "é叏䏿»¡æ", value: "1", isabnormal: true }, |
| | | ], |
| | | }, |
| | | { |
| | | scriptId: 4, |
| | | scriptType: 4, |
| | | scriptContent: "æ¨å¯¹ä½é¢æå¡è¿æä»ä¹å
¶ä»å»ºè®®ï¼", |
| | | scriptResult: null, |
| | | }, |
| | | ], |
| | | completionMessage: |
| | | "æè°¢æ¨å¯¹æä»¬å·¥ä½çæ¯æï¼æä»¬å°æ ¹æ®æ¨çåé¦æç»æ¹è¿ä½é¢æå¡è´¨éï¼ç¥æ¨æ©æ¥åº·å¤ï¼", |
| | | }, |
| | | }, |
| | | }; |
| | | }, |
| | | created() { |
| | | this.initSurveyData(); |
| | | }, |
| | | methods: { |
| | | // åå§åè°æ¥æ°æ® |
| | | initSurveyData() { |
| | | // ä»è·¯ç±åæ°è·åå å¯åçåæ° |
| | | this.encryptedParams.param1 = |
| | | this.$route.query.param1 || |
| | | "DBohZ1ARKfFmCdKrBKQ6JW3ddPTtDpgSaRZaKtxBMTJ4FngT06Vy-VskiwDYJJRwfvkHrPIZlkafgZybobGtKQ=="; |
| | | this.encryptedParams.param2 = |
| | | this.$route.query.param2 || |
| | | "WQXniB7BIlizOwOQ4KZqITNrqWpLU3SD5vXdHLeYaviA-1T5Dtk70IJWAHbtcDUuYz-2ObYuMj4YKHfWhlCLzw=="; |
| | | this.encryptedParams.param3 = this.$route.query.param3 || null; |
| | | this.encryptedParams.param4 = this.$route.query.param4 || "1"; // é»è®¤ä¸ºé¨è¯ |
| | | |
| | | this.surveyType = parseInt(this.encryptedParams.param4) || 1; |
| | | |
| | | // å è½½é®å·æ°æ® |
| | | this.loadSurveyData(); |
| | | }, |
| | | |
| | | // å è½½è°æ¥æ°æ® |
| | | // å è½½è°æ¥æ°æ® |
| | | loadSurveyData() { |
| | | // è°ç¨æ¥å£è·åé®å·æ°æ® |
| | | getScriptByCondition(this.encryptedParams) |
| | | .then((res) => { |
| | | if (res.code === 200) { |
| | | if (res.data.result) { |
| | | this.accomplish = res.data.result; |
| | | return |
| | | } |
| | | // å¤çæ¥å£è¿åçæ°æ® |
| | | this.questionList = res.data.svyLibTemplateScriptVOS.map((item) => { |
| | | return { |
| | | ...item, |
| | | scriptResult: item.scriptType === 2 ? [] : null, |
| | | }; |
| | | }); |
| | | |
| | | // æ ¹æ®surveyType设置æ é¢åæè¿° |
| | | switch (this.surveyType) { |
| | | case 1: // é¨è¯ |
| | | this.surveyTitle = "é¨è¯æ»¡æåº¦è°æ¥"; |
| | | this.surveyDescription = |
| | | "亲ç±çæ£è
ï¼æè°¢æ¨éæ©æä»¬çå»çæå¡ã为äºä¸ææåæå¡è´¨éï¼è¯·æ¨è±å åéæ¶é´å¡«åæ¤é®å·ã"; |
| | | this.completionMessage = |
| | | "æè°¢æ¨å®è´µçæè§ï¼æä»¬å°ä¸ææ¹è¿é¨è¯æå¡è´¨éï¼ä¸ºæ¨æä¾æ´å¥½çå»çæå¡ä½éªã"; |
| | | break; |
| | | case 2: // ä½é¢ |
| | | this.surveyTitle = "ä½é¢æ»¡æåº¦è°æ¥"; |
| | | this.surveyDescription = |
| | | "亲ç±çæ£è
åå®¶å±ï¼æè°¢æ¨éæ©å¨æé¢ä½é¢æ²»çãä¸ºäºæåä½é¢æå¡è´¨éï¼è¯·æ¨å¡«åæ¤é®å·ã"; |
| | | this.completionMessage = |
| | | "æè°¢æ¨å¯¹æä»¬å·¥ä½çæ¯æï¼æä»¬å°æ ¹æ®æ¨çåé¦æç»æ¹è¿ä½é¢æå¡è´¨éï¼ç¥æ¨æ©æ¥åº·å¤ï¼"; |
| | | break; |
| | | case 3: // æè¯å»ºè®® |
| | | this.surveyTitle = "æè¯å»ºè®®åé¦"; |
| | | this.surveyDescription = |
| | | "å°æ¬ç客æ·ï¼æè°¢æ¨æ½åºå®è´µæ¶é´æä¾åé¦ãæ¨çæè§å¯¹æä»¬æ¹è¿æå¡é常éè¦ã"; |
| | | this.completionMessage = |
| | | "æè°¢æ¨çåé¦ï¼æä»¬å·²æ¶å°æ¨çæè¯/建议ï¼å°å°½å¿«å¤ç并䏿¨èç³»ã"; |
| | | break; |
| | | default: |
| | | this.useTestData(1); // é»è®¤ä½¿ç¨é¨è¯æ°æ® |
| | | } |
| | | } else { |
| | | // æ¥å£æ æ°æ®æå¤±è´¥ï¼ä½¿ç¨æµè¯æ°æ® |
| | | this.useTestData(this.surveyType); |
| | | } |
| | | }) |
| | | .catch(() => { |
| | | // æ¥å£è°ç¨å¤±è´¥ï¼ä½¿ç¨æµè¯æ°æ® |
| | | this.useTestData(this.surveyType); |
| | | }); |
| | | }, |
| | | |
| | | // ä½¿ç¨æµè¯æ°æ® |
| | | useTestData(surveyType) { |
| | | const type = [1, 2, 3].includes(surveyType) ? surveyType : 1; |
| | | const testData = this.testData[type]; |
| | | |
| | | this.surveyTitle = testData.title; |
| | | this.surveyDescription = testData.description; |
| | | this.questionList = testData.questions; |
| | | this.completionMessage = testData.completionMessage; |
| | | }, |
| | | |
| | | // æäº¤è°æ¥é®å·ï¼ç´æ¥æäº¤ï¼ä¸ç»è¿ç¼åï¼ |
| | | async submitSurvey() { |
| | | // éªè¯å¿
填项 |
| | | if (this.hasUnansweredRequiredQuestions()) { |
| | | this.$message.error("è¯·å®æææå¿
å¡«é®é¢ååæäº¤"); |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | const submitData = this.prepareSubmitData(); |
| | | const res = await saveMYDQuestionAnswer(submitData); |
| | | |
| | | if (res.code === 200) { |
| | | this.accomplish = false; |
| | | this.$message.success("æäº¤æåï¼æè°¢æ¨çåé¦ã"); |
| | | } else { |
| | | this.$message.error(res.msg || "æäº¤å¤±è´¥ï¼è¯·ç¨ååè¯"); |
| | | } |
| | | } catch (error) { |
| | | this.$message.error("ç½ç»éè¯¯ï¼æäº¤å¤±è´¥"); |
| | | console.error("æäº¤å¤±è´¥:", error); |
| | | } |
| | | }, |
| | | |
| | | // æ£æ¥æ¯å¦ææªåççå¿
å¡«é®é¢ |
| | | hasUnansweredRequiredQuestions() { |
| | | return this.questionList.some((question) => { |
| | | return ( |
| | | question.required && |
| | | (question.scriptResult === null || |
| | | question.scriptResult === "" || |
| | | (Array.isArray(question.scriptResult) && |
| | | question.scriptResult.length === 0)) |
| | | ); |
| | | }); |
| | | }, |
| | | |
| | | // åå¤æäº¤æ°æ® |
| | | // åå¤æäº¤æ°æ® |
| | | prepareSubmitData() { |
| | | return { |
| | | taskId: this.encryptedParams.param1, |
| | | serialnum: this.encryptedParams.param2 || this.encryptedParams.param3, |
| | | mzzy: this.surveyType, // 1=é¨è¯, 2=ä½é¢, 3=æè¯å»ºè®® |
| | | svyLibTemplateScriptVOS: this.questionList.map((item) => { |
| | | return { |
| | | scriptId: item.scriptId, |
| | | scriptType: item.scriptType, |
| | | scriptResult: |
| | | item.scriptType === 2 |
| | | ? (item.scriptResult || []).join("&") |
| | | : item.scriptResult || "", |
| | | nextScriptno: item.nextScriptno, |
| | | score: item.score, |
| | | prompt: item.prompt, |
| | | ...item, |
| | | }; |
| | | }), |
| | | excep: this.checkAbnormalOptions() ? 1 : 0, |
| | | }; |
| | | }, |
| | | |
| | | // æ£æ¥å¼å¸¸é项 |
| | | checkAbnormalOptions() { |
| | | return this.questionList.some((question) => { |
| | | if (!question.scriptResult) return false; |
| | | |
| | | if (question.scriptType === 1) { |
| | | // åéé¢å¼å¸¸æ£æ¥ |
| | | const selectedOption = question.svyLibTemplateTargetoptions.find( |
| | | (opt) => opt.optioncontent === question.scriptResult |
| | | ); |
| | | return selectedOption?.isabnormal; |
| | | } else if (question.scriptType === 2) { |
| | | // å¤éé¢å¼å¸¸æ£æ¥ |
| | | return question.scriptResult.some((answer) => { |
| | | const option = question.svyLibTemplateTargetoptions.find( |
| | | (opt) => opt.optioncontent === answer |
| | | ); |
| | | return option?.isabnormal; |
| | | }); |
| | | } |
| | | return false; |
| | | }); |
| | | }, |
| | | |
| | | // å¤çåéé项åå |
| | | handleOptionChange(selectedValue, index, question) { |
| | | const selectedOption = question.svyLibTemplateTargetoptions.find( |
| | | (option) => option.optioncontent === selectedValue |
| | | ); |
| | | |
| | | if (selectedOption) { |
| | | this.questionList[index].nextScriptno = selectedOption.nextQuestion; |
| | | this.questionList[index].score = selectedOption.score; |
| | | this.questionList[index].prompt = selectedOption.prompt; |
| | | } |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | /* åºç¡æ ·å¼åé */ |
| | | :root { |
| | | --primary-color: #1a73e8; /* é»è®¤èè² */ |
| | | --secondary-color: #34d399; /* é»è®¤ç»¿è² */ |
| | | --alert-color: #ed8936; /* é»è®¤æ©è² */ |
| | | } |
| | | |
| | | /* é¨è¯æ ·å¼åé */ |
| | | .survey-type-1 { |
| | | --primary-color: #1a73e8; /* å»çè */ |
| | | --secondary-color: #34d399; /* å¥åº·ç»¿ */ |
| | | --alert-color: #ed8936; /* è¦ç¤ºæ© */ |
| | | } |
| | | |
| | | /* ä½é¢æ ·å¼åé */ |
| | | .survey-type-2 { |
| | | --primary-color: #5a67d8; /* æ·±èç´« */ |
| | | --secondary-color: #667eea; /* æµ
èç´« */ |
| | | --alert-color: #f56565; /* è¦ç¤ºçº¢ */ |
| | | } |
| | | |
| | | /* æè¯å»ºè®®æ ·å¼åé */ |
| | | .survey-type-3 { |
| | | --primary-color: #e53e3e; /* ç´§æ¥çº¢ */ |
| | | --secondary-color: #f6ad55; /* è¦ç¤ºé» */ |
| | | --alert-color: #f56565; /* è¦ç¤ºçº¢ */ |
| | | } |
| | | |
| | | .questionnaire { |
| | | font-family: "PingFang SC", "Helvetica Neue", Arial, sans-serif; |
| | | min-height: 100vh; |
| | | margin: 0; |
| | | padding: 0; |
| | | color: #333; |
| | | transition: all 0.3s ease; |
| | | |
| | | /* æ ¹æ®surveyTypeåºç¨ä¸åçä¸»é¢ */ |
| | | &.survey-type-1 { |
| | | background-color: #f5f9fc; |
| | | --theme-gradient: linear-gradient(135deg, #1a73e8, #34d399); |
| | | } |
| | | |
| | | &.survey-type-2 { |
| | | background-color: #f8f9ff; |
| | | --theme-gradient: linear-gradient(135deg, #5a67d8, #667eea); |
| | | } |
| | | |
| | | &.survey-type-3 { |
| | | background-color: #fff5f5; |
| | | --theme-gradient: linear-gradient(135deg, #e53e3e, #f6ad55); |
| | | } |
| | | } |
| | | |
| | | .CONTENT { |
| | | max-width: 900px; |
| | | margin: 0 auto; |
| | | padding: 20px; |
| | | |
| | | .title { |
| | | color: var(--primary-color); |
| | | font-size: 28px; |
| | | font-weight: 600; |
| | | margin-bottom: 15px; |
| | | text-align: center; |
| | | letter-spacing: 0.5px; |
| | | position: relative; |
| | | |
| | | &::after { |
| | | content: ""; |
| | | position: absolute; |
| | | bottom: -8px; |
| | | left: 50%; |
| | | transform: translateX(-50%); |
| | | width: 60px; |
| | | height: 3px; |
| | | background: var(--theme-gradient); |
| | | border-radius: 3px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .preview-left { |
| | | margin: 20px 0; |
| | | margin-bottom: 100px; |
| | | background-color: #fff; |
| | | border-radius: 12px; |
| | | padding: 30px; |
| | | border: none; |
| | | box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); |
| | | transition: all 0.3s ease; |
| | | |
| | | &:hover { |
| | | box-shadow: 0 6px 16px rgba(0, 0, 0, 0.1); |
| | | } |
| | | |
| | | .toptitle { |
| | | margin-bottom: 25px; |
| | | |
| | | div { |
| | | color: #4a5568; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | text-align: center; |
| | | } |
| | | } |
| | | |
| | | .el-divider { |
| | | background-color: #e2e8f0; |
| | | margin: 25px 0; |
| | | } |
| | | |
| | | .topic-dev { |
| | | margin-bottom: 30px; |
| | | font-size: 17px; |
| | | background-color: #f8fafc; |
| | | border-radius: 10px; |
| | | padding: 20px; |
| | | transition: all 0.3s ease; |
| | | position: relative; |
| | | overflow: hidden; |
| | | |
| | | &:hover { |
| | | background-color: #f1f5f9; |
| | | } |
| | | |
| | | /* æ·»å ç±»åæ è¯å°æ ç¾ */ |
| | | &::before { |
| | | content: ""; |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | width: 4px; |
| | | height: 100%; |
| | | background: var(--primary-color); |
| | | } |
| | | |
| | | .dev-text { |
| | | margin-bottom: 18px; |
| | | font-weight: 500; |
| | | color: #2d3748; |
| | | font-size: 18px; |
| | | line-height: 1.6; |
| | | |
| | | span[style*="color: #3ba2f7"] { |
| | | font-size: 14px; |
| | | margin-left: 8px; |
| | | color: var(--primary-color) !important; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .preview-lefts { |
| | | margin: 20px 0; |
| | | background-color: #fff; |
| | | border-radius: 12px; |
| | | padding: 40px; |
| | | min-height: 400px; |
| | | border: none; |
| | | box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | text-align: center; |
| | | |
| | | .completion-message { |
| | | padding: 40px; |
| | | max-width: 600px; |
| | | |
| | | .thank-you { |
| | | font-size: 32px; |
| | | color: var(--primary-color); |
| | | font-weight: 600; |
| | | margin-bottom: 25px; |
| | | position: relative; |
| | | display: inline-block; |
| | | |
| | | &::after { |
| | | content: ""; |
| | | position: absolute; |
| | | bottom: -10px; |
| | | left: 50%; |
| | | transform: translateX(-50%); |
| | | width: 80px; |
| | | height: 3px; |
| | | background: var(--theme-gradient); |
| | | border-radius: 3px; |
| | | } |
| | | } |
| | | |
| | | .feedback-message { |
| | | font-size: 20px; |
| | | line-height: 1.7; |
| | | color: #4a5568; |
| | | margin: 0 auto; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .red-star { |
| | | ::v-deep .el-radio__label, |
| | | ::v-deep .el-checkbox__label { |
| | | position: relative; |
| | | padding-right: 20px; |
| | | |
| | | &::after { |
| | | content: "*"; |
| | | color: #ef4444; |
| | | position: absolute; |
| | | right: 0; |
| | | top: 0; |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | ::v-deep { |
| | | .el-checkbox-group { |
| | | display: flex; |
| | | flex-direction: column; |
| | | margin: 15px 0; |
| | | gap: 12px; |
| | | } |
| | | |
| | | .el-radio-group { |
| | | display: flex; |
| | | flex-direction: column; |
| | | margin: 15px 0; |
| | | gap: 12px; |
| | | } |
| | | |
| | | .el-radio.is-bordered, |
| | | .el-checkbox.is-bordered { |
| | | width: 100%; |
| | | margin-right: 0; |
| | | margin-bottom: 10px; |
| | | max-width: 400px; |
| | | padding: 14px 20px 14px 15px; |
| | | border-radius: 8px; |
| | | height: auto; |
| | | min-height: 50px; |
| | | border: 1px solid #e2e8f0; |
| | | transition: all 0.3s ease; |
| | | margin-left: 0 !important; |
| | | margin-top: 0 !important; |
| | | .el-radio-group, |
| | | .el-checkbox-group { |
| | | align-items: center; |
| | | } |
| | | &:hover { |
| | | border-color: var(--primary-color); |
| | | box-shadow: 0 2px 8px rgba(var(--primary-color), 0.15); |
| | | } |
| | | |
| | | &.is-checked { |
| | | border-color: var(--primary-color); |
| | | background-color: rgba(var(--primary-color), 0.05); |
| | | } |
| | | } |
| | | |
| | | .el-radio__label, |
| | | .el-checkbox__label { |
| | | font-size: 16px; |
| | | color: #2d3748; |
| | | } |
| | | |
| | | .el-alert--warning.is-light { |
| | | background-color: #fff8f0; |
| | | color: var(--alert-color); |
| | | margin-top: 15px; |
| | | border-radius: 8px; |
| | | border-left: 4px solid var(--alert-color); |
| | | |
| | | .el-alert__title { |
| | | font-size: 15px; |
| | | line-height: 1.6; |
| | | color: var(--alert-color); |
| | | } |
| | | |
| | | .el-alert__closebtn { |
| | | color: var(--alert-color); |
| | | } |
| | | } |
| | | |
| | | .el-textarea__inner { |
| | | font-size: 16px; |
| | | border-radius: 8px; |
| | | border: 1px solid #e2e8f0; |
| | | padding: 12px 15px; |
| | | transition: all 0.3s ease; |
| | | min-height: 100px; |
| | | |
| | | &:focus { |
| | | border-color: var(--primary-color); |
| | | box-shadow: 0 0 0 2px rgba(var(--primary-color), 0.2); |
| | | } |
| | | |
| | | &::placeholder { |
| | | color: #a0aec0; |
| | | } |
| | | } |
| | | |
| | | .el-radio__input.is-checked .el-radio__inner { |
| | | background-color: var(--primary-color); |
| | | border-color: var(--primary-color); |
| | | } |
| | | |
| | | .el-checkbox__input.is-checked .el-checkbox__inner { |
| | | background-color: var(--primary-color); |
| | | border-color: var(--primary-color); |
| | | } |
| | | |
| | | .el-radio__inner, |
| | | .el-checkbox__inner { |
| | | width: 18px; |
| | | height: 18px; |
| | | } |
| | | } |
| | | |
| | | .bottom-fixed { |
| | | position: fixed; |
| | | bottom: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | text-align: center; |
| | | padding: 10px 0; |
| | | background: var(--theme-gradient); |
| | | box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.1); |
| | | z-index: 1000; |
| | | transition: all 0.3s ease; |
| | | |
| | | .el-button { |
| | | height: 56px; |
| | | font-size: 18px; |
| | | font-weight: 500; |
| | | letter-spacing: 0.5px; |
| | | border-radius: 8px; |
| | | background-color: #fff; |
| | | color: var(--primary-color); |
| | | border: none; |
| | | box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); |
| | | transition: all 0.3s ease; |
| | | width: 80%; |
| | | max-width: 400px; |
| | | position: relative; |
| | | overflow: hidden; |
| | | |
| | | &::before { |
| | | content: ""; |
| | | position: absolute; |
| | | top: 0; |
| | | left: -100%; |
| | | width: 100%; |
| | | height: 100%; |
| | | background: linear-gradient( |
| | | 90deg, |
| | | transparent, |
| | | rgba(255, 255, 255, 0.4), |
| | | transparent |
| | | ); |
| | | transition: all 0.5s ease; |
| | | } |
| | | |
| | | &:hover { |
| | | transform: translateY(-2px); |
| | | box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2); |
| | | |
| | | &::before { |
| | | left: 100%; |
| | | } |
| | | } |
| | | |
| | | &:active { |
| | | transform: translateY(0); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /* ååºå¼è®¾è®¡ */ |
| | | @media (max-width: 768px) { |
| | | .questionnaire { |
| | | .CONTENT { |
| | | padding: 15px; |
| | | } |
| | | |
| | | .preview-left, |
| | | .preview-lefts { |
| | | padding: 20px; |
| | | margin-bottom: 80px; |
| | | } |
| | | |
| | | .title { |
| | | font-size: 24px !important; |
| | | } |
| | | |
| | | .dev-text { |
| | | font-size: 16px !important; |
| | | } |
| | | |
| | | .bottom-fixed .el-button { |
| | | height: 50px; |
| | | font-size: 16px; |
| | | width: 90%; |
| | | } |
| | | } |
| | | } |
| | | </style> |