| | |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div :class="form.serviceType == 2 ? 'Followuserinfo' : 'Followuserinfos'"> |
| | | <div :class="form.serviceType ? 'Followuserinfo' : 'Followuserinfos'"> |
| | | <div> |
| | | <el-form ref="form" :model="form" label-width="120px"> |
| | | <div class="headline"> |
| | |
| | | </el-form> |
| | | </div> |
| | | </div> |
| | | <div v-if="form.serviceType == 2"> |
| | | <div> |
| | | <el-tabs v-model="activeName" type="border-card"> |
| | | <el-tab-pane name="wj"> |
| | | <span class="mulsz" slot="label" |
| | |
| | | subId: this.id, |
| | | taskid: this.taskid, |
| | | scriptid: item.id, |
| | | sendstate: 6, |
| | | templatequestionnum: item.scriptno, |
| | | questiontext: item.scriptContent, |
| | | }; |
| | |
| | | param1: this.taskid, |
| | | param2: this.patid, |
| | | subId: this.id, |
| | | sendstate: 6, |
| | | }; |
| | | |
| | | addPersonVoices(obj).then((res) => { |
| | |
| | | let objson = {}; |
| | | getTaskservelist({ |
| | | patid: this.patid, |
| | | subId: this.id, |
| | | subid: this.id, |
| | | }).then((res) => { |
| | | if (res.code == 200) { |
| | | objson = res.rows[0].serviceSubtaskList[0]; |
| | |
| | | let objson = {}; |
| | | getTaskservelist({ |
| | | patid: this.patid, |
| | | subId: this.id, |
| | | subid: this.id, |
| | | }).then((res) => { |
| | | if (res.code == 200) { |
| | | objson = res.rows[0].serviceSubtaskList[0]; |
| | | objson.remark = this.form.remark; |
| | | if (sendstate) objson.sendstate = sendstate; |
| | | objson.sendstate = 6; |
| | | Editsingletaskson(objson).then((res) => { |
| | | if (res.code) { |
| | | this.$modal.msgSuccess("æå¡ä¿®æ¹æå"); |
| | |
| | | total: 0, |
| | | // ç¨è¯è®°å½æ°æ® |
| | | medicationList: [ |
| | | { |
| | | id: 1, |
| | | patientId: 'P1001', |
| | | patientName: 'å¼ æ¸
æ¬', |
| | | patientAge: 65, |
| | | patientGender: '1', |
| | | patientNo: '20241209001', |
| | | allergyHistory: 'ééç´ è¿æ', |
| | | drugId: 'D1001', |
| | | drugName: 'é¿å¸å¹æè 溶ç', |
| | | drugSpecification: '100mg*30ç/ç', |
| | | dosage: 1, |
| | | dosageUnit: 'ç', |
| | | frequency: '1', |
| | | usageMethod: '壿', |
| | | startTime: '2024-12-01 08:00:00', |
| | | endTime: '', |
| | | durationType: '1', |
| | | instructions: 'é¥åæç¨ï¼æ³¨æèè éååºãé¿ææç¨éå®ææ£æ¥è¡å¸¸è§ã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'ææç½', |
| | | stopReason: '', |
| | | stopDescription: '' |
| | | }, |
| | | { |
| | | id: 2, |
| | | patientId: 'P1001', |
| | | patientName: 'å¼ æ¸
æ¬', |
| | | patientAge: 65, |
| | | patientGender: '1', |
| | | patientNo: '20241209001', |
| | | allergyHistory: 'ééç´ è¿æ', |
| | | drugId: 'D1002', |
| | | drugName: 'é¿æä¼ä»æ±éç', |
| | | drugSpecification: '20mg*7ç/ç', |
| | | dosage: 1, |
| | | dosageUnit: 'ç', |
| | | frequency: '1', |
| | | usageMethod: '壿', |
| | | startTime: '2024-11-20 20:00:00', |
| | | endTime: '', |
| | | durationType: '1', |
| | | instructions: 'æ¯æç¡åæç¨ã注æçæµèåè½ï¼å¦æèèé
¸çè¯·åæ¶å°±å»ã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'ææç½', |
| | | stopReason: '', |
| | | stopDescription: '' |
| | | }, |
| | | { |
| | | id: 3, |
| | | patientId: 'P2001', |
| | | patientName: 'çè³', |
| | | patientAge: 33, |
| | | patientGender: '0', |
| | | patientNo: '20241115002', |
| | | allergyHistory: 'æ ', |
| | | drugId: 'D1003', |
| | | drugName: '泼尼æ¾ç', |
| | | drugSpecification: '5mg*100ç/ç¶', |
| | | dosage: 2, |
| | | dosageUnit: 'ç', |
| | | frequency: '3', |
| | | usageMethod: '壿', |
| | | startTime: '2024-12-05 09:00:00', |
| | | endTime: '2024-12-20 09:00:00', |
| | | durationType: '2', |
| | | instructions: 'æ©ãä¸ãæé¤åæç¨ãéä¸¥æ ¼éµå»å±éæ¸åéï¼ä¸å¯çªç¶åè¯ã', |
| | | medicationStatus: '0', |
| | | prescribingDoctor: 'åç¿æ ', |
| | | stopReason: 'çç¨ç»æ', |
| | | stopDescription: 'æ åçç¨ç¨è¯å®æ¯ï¼è¡å°æ¿è®¡æ°å·²æ¢å¤æ£å¸¸èå´ã' |
| | | }, |
| | | { |
| | | id: 4, |
| | | patientId: 'P2001', |
| | | patientName: 'çè³', |
| | | patientAge: 33, |
| | | patientGender: '0', |
| | | patientNo: '20241115002', |
| | | allergyHistory: 'æ ', |
| | | drugId: 'D1004', |
| | | drugName: 'å¤ç³éå¤åç©è¶å', |
| | | drugSpecification: '150mg*10ç²/ç', |
| | | dosage: 1, |
| | | dosageUnit: 'ç²', |
| | | frequency: '2', |
| | | usageMethod: '壿', |
| | | startTime: '2024-12-05 09:00:00', |
| | | endTime: '', |
| | | durationType: '1', |
| | | instructions: 'é¤åæç¨ï¼å¯åè½»èè éåºæ¿ãæè¯åå¯è½åºç°é»ä¾¿ï¼å±æ£å¸¸ç°è±¡ã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'åç¿æ ', |
| | | stopReason: '', |
| | | stopDescription: '' |
| | | }, |
| | | { |
| | | id: 5, |
| | | patientId: 'P3001', |
| | | patientName: 'æä¼', |
| | | patientAge: 58, |
| | | patientGender: '1', |
| | | patientNo: '20241022005', |
| | | allergyHistory: '磺èºç±»è¯ç©è¿æ', |
| | | drugId: 'D1005', |
| | | drugName: 'çé
¸äºç²åèç', |
| | | drugSpecification: '0.5g*20ç/æ¿', |
| | | dosage: 1, |
| | | dosageUnit: 'ç', |
| | | frequency: '2', |
| | | usageMethod: '壿', |
| | | startTime: '2024-10-22 08:00:00', |
| | | endTime: '', |
| | | durationType: '1', |
| | | instructions: 'é餿é¤åç«å³æç¨ï¼ä»¥åå°èè éä¸éã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'å¼ åæ¶µ', |
| | | stopReason: '', |
| | | stopDescription: '' |
| | | }, |
| | | { |
| | | id: 6, |
| | | patientId: 'P4001', |
| | | patientName: 'èµµç£', |
| | | patientAge: 70, |
| | | patientGender: '1', |
| | | patientNo: '20241202011', |
| | | allergyHistory: 'æµ·é²è¿æ', |
| | | drugId: 'D1006', |
| | | drugName: 'åå¡ç±³ç', |
| | | drugSpecification: '20mg*100ç/ç¶', |
| | | dosage: 1, |
| | | dosageUnit: 'ç', |
| | | frequency: '1', |
| | | usageMethod: '壿', |
| | | startTime: '2024-12-02 07:00:00', |
| | | endTime: '', |
| | | durationType: '1', |
| | | instructions: 'æ¨èµ·æç¨ï¼é¿å
å¤é´å¤æ¬¡èµ·å¤ã注æçæµçµè§£è´¨æ°´å¹³ã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'å´æç¿°', |
| | | stopReason: '', |
| | | stopDescription: '' |
| | | }, |
| | | { |
| | | id: 7, |
| | | patientId: 'P5001', |
| | | patientName: 'å¨å', |
| | | patientAge: 52, |
| | | patientGender: '0', |
| | | patientNo: '20241128009', |
| | | allergyHistory: 'æ ', |
| | | drugId: 'D1007', |
| | | drugName: 'ç¡è¯å°å¹³æ§éç', |
| | | drugSpecification: '30mg*7ç/ç', |
| | | dosage: 1, |
| | | dosageUnit: 'ç', |
| | | frequency: '1', |
| | | usageMethod: '壿', |
| | | startTime: '2024-11-28 08:00:00', |
| | | endTime: '', |
| | | durationType: '1', |
| | | instructions: 'æ´çåæï¼ä¸å¯å¼ç¢ææ°å¼ã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'éæ¿å©', |
| | | stopReason: '', |
| | | stopDescription: '' |
| | | } |
| | | ], |
| | | { |
| | | id: 1, |
| | | patientId: 'C1001', |
| | | patientName: 'æä¿å®', |
| | | patientAge: 2, |
| | | ageGroup: 'å©´å¹¼å¿(0-3å²)', |
| | | patientGender: '1', |
| | | patientNo: 'P202412001', |
| | | allergyHistory: 'ééç´ è¿æã鸡èè¿æ', |
| | | drugId: 'D1001', |
| | | drugName: '叿´è¬æ··æ¬æ»´å', |
| | | drugSpecification: '100mg:5ml*15ml/ç¶', |
| | | drugCategory: 'è§£çéçè¯', |
| | | dosage: 2.5, |
| | | dosageUnit: 'ml', |
| | | frequency: '3', |
| | | usageMethod: '壿', |
| | | startTime: '2024-12-10 08:00:00', |
| | | endTime: '', |
| | | durationType: '1', |
| | | instructions: 'ç¨äºåçï¼ä½é10kgï¼æä½é计ç®åéãé¥åæç¨ï¼æ³¨æè§å¯ææ èè éååºã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'çå»ç', |
| | | guardianName: 'æç¸ç¸' |
| | | }, |
| | | { |
| | | id: 2, |
| | | patientId: 'C1002', |
| | | patientName: 'å¼ è', |
| | | patientAge: 4, |
| | | ageGroup: 'å¦é¾å(3-6å²)', |
| | | patientGender: '0', |
| | | patientNo: 'P202411002', |
| | | allergyHistory: 'æ ', |
| | | drugId: 'D1002', |
| | | drugName: 'é¿è«è¥¿æé¢ç²', |
| | | drugSpecification: '125mg*12è¢/ç', |
| | | drugCategory: 'æçç´ ', |
| | | dosage: 1, |
| | | dosageUnit: 'è¢', |
| | | frequency: '3', |
| | | usageMethod: '壿', |
| | | startTime: '2024-12-08 09:00:00', |
| | | endTime: '2024-12-18 09:00:00', |
| | | durationType: '2', |
| | | instructions: 'æ²»çæ¥æ§ä¸è³çï¼éè¿ç»æç¨10天ï¼ä¸å¯èªè¡åè¯ã注æè§å¯ææ è¿æååºã', |
| | | medicationStatus: '0', |
| | | prescribingDoctor: 'åå»ç', |
| | | guardianName: 'å¼ å¦å¦', |
| | | stopReason: 'çç¨ç»æ', |
| | | stopDescription: '宿10天æçç´ çç¨ï¼ä¸è³ççç¶å®å
¨ç¼è§£ã' |
| | | }, |
| | | { |
| | | id: 3, |
| | | patientId: 'C1003', |
| | | patientName: 'çéå®', |
| | | patientAge: 8, |
| | | ageGroup: 'å¦é¾æ(7-12å²)', |
| | | patientGender: '1', |
| | | patientNo: 'P202412003', |
| | | allergyHistory: 'æµ·é²è¿æ', |
| | | drugId: 'D1003', |
| | | drugName: 'åé²å¸ç¹é åå¼ç', |
| | | drugSpecification: '5mg*5ç/ç', |
| | | drugCategory: 'æè¿æè¯', |
| | | dosage: 1, |
| | | dosageUnit: 'ç', |
| | | frequency: '1', |
| | | usageMethod: '壿', |
| | | startTime: '2024-11-15 20:00:00', |
| | | endTime: '', |
| | | durationType: '1', |
| | | instructions: 'æ¯æç¡åå弿ç¨ï¼ç¨äºæ§å¶å®åçç¶ã注æçæµèº«é«ä½éååã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'éå»ç', |
| | | guardianName: 'çå¦å¦' |
| | | }, |
| | | { |
| | | id: 4, |
| | | patientId: 'C1004', |
| | | patientName: 'å驰欣', |
| | | patientAge: 14, |
| | | ageGroup: 'éå°å¹´(13-18å²)', |
| | | patientGender: '0', |
| | | patientNo: 'P202410004', |
| | | allergyHistory: '磺èºç±»è¯ç©è¿æ', |
| | | drugId: 'D1004', |
| | | drugName: 'å¼ç»´Aé
¸è½¯è¶å', |
| | | drugSpecification: '10mg*20ç²/ç', |
| | | drugCategory: 'ç®è¤ç§ç¨è¯', |
| | | dosage: 1, |
| | | dosageUnit: 'ç²', |
| | | frequency: '2', |
| | | usageMethod: '壿', |
| | | startTime: '2024-10-20 08:00:00', |
| | | endTime: '2025-01-20 08:00:00', |
| | | durationType: '2', |
| | | instructions: 'æ²»çé度ç¤ç®ï¼éå®ææ£æ¥èåè½ãæè¯æé´ååè¯å1个æå
é¿å
æåã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'èµµå»ç', |
| | | guardianName: 'åç¸ç¸' |
| | | }, |
| | | { |
| | | id: 5, |
| | | patientId: 'C1005', |
| | | patientName: 'éæµ©', |
| | | patientAge: 1, |
| | | ageGroup: 'å©´å¹¼å¿(0-3å²)', |
| | | patientGender: '1', |
| | | patientNo: 'P202412005', |
| | | allergyHistory: 'ç奶èç½è¿æ', |
| | | drugId: 'D1005', |
| | | drugName: 'çé
¸è¥¿æ¿å©åªæ»´å', |
| | | drugSpecification: '10mg:1ml*5ml/ç¶', |
| | | drugCategory: 'æè¿æè¯', |
| | | dosage: 0.25, |
| | | dosageUnit: 'ml', |
| | | frequency: '1', |
| | | usageMethod: '壿', |
| | | startTime: '2024-12-05 08:00:00', |
| | | endTime: '', |
| | | durationType: '1', |
| | | instructions: 'ç¨äºè¿ææ§é¼»çï¼ä½é8kgï¼æä½é精确计ç®åéãæ³¨æè§å¯ææ åç¡å¯ä½ç¨ã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'åå»ç', |
| | | guardianName: 'éå¦å¦' |
| | | }, |
| | | { |
| | | id: 6, |
| | | patientId: 'C1006', |
| | | patientName: 'æ¨è·æ¦', |
| | | patientAge: 16, |
| | | ageGroup: 'éå°å¹´(13-18å²)', |
| | | patientGender: '0', |
| | | patientNo: 'P202409006', |
| | | allergyHistory: 'æ ', |
| | | drugId: 'D1006', |
| | | drugName: 'å·¦ç²ç¶è
ºç´ é ç', |
| | | drugSpecification: '50μg*100ç/ç', |
| | | drugCategory: 'å
åæ³ç¨è¯', |
| | | dosage: 1, |
| | | dosageUnit: 'ç', |
| | | frequency: '1', |
| | | usageMethod: '壿', |
| | | startTime: '2024-09-01 07:00:00', |
| | | endTime: '', |
| | | durationType: '1', |
| | | instructions: 'æ²»çç²ç¶è
ºåè½åéçï¼æ¯æ¥æ¸
æ¨ç©ºè
¹æç¨ï¼éç»èº«æè¯ã宿夿¥ç²ç¶è
ºåè½ã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'å¨å»ç', |
| | | guardianName: 'æ¨ç¸ç¸' |
| | | }, |
| | | { |
| | | id: 7, |
| | | patientId: 'C1007', |
| | | patientName: 'é»é轩', |
| | | patientAge: 5, |
| | | ageGroup: 'å¦é¾å(3-6å²)', |
| | | patientGender: '1', |
| | | patientNo: 'P202412007', |
| | | allergyHistory: 'è±ç²è¿æ', |
| | | drugId: 'D1007', |
| | | drugName: 'æ²ä¸èºéæ°é¾å', |
| | | drugSpecification: '100μg*200æ¿/ç¶', |
| | | drugCategory: 'å¹³åè¯', |
| | | dosage: 1, |
| | | dosageUnit: 'æ¿', |
| | | frequency: '0', |
| | | usageMethod: 'å¸å
¥', |
| | | startTime: '2024-11-20 08:00:00', |
| | | endTime: '', |
| | | durationType: '1', |
| | | instructions: 'ç¨äºå®åæ¥æ§å使¶ç¼è§£çç¶ï¼æé使ç¨ãæå¯¼æ£ç¡®å¸å
¥æ¹æ³ã', |
| | | medicationStatus: '1', |
| | | prescribingDoctor: 'å´å»ç', |
| | | guardianName: 'é»å¦å¦' |
| | | } |
| | | ], |
| | | // åé
ç¨è¯å¼¹åºå± |
| | | assignOpen: false, |
| | | assignTitle: "", |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="questionnaire-optimized"> |
| | | <div class="content-wrapper" v-if="!accomplish"> |
| | | <div class="questionnaire-container"> |
| | | <!-- é®å·æ é¢åºå --> |
| | | <div class="questionnaire-header"> |
| | | <h1 class="questionnaire-title"> |
| | | {{ taskname ? taskname : "é®å·" }} |
| | | </h1> |
| | | <div class="questionnaire-description"> |
| | | {{ |
| | | kcb |
| | | ? kcb |
| | | : "亲ç±çæ£è
-å®¶å±ï¼æä»¬æ¯å»é¢ç廿¤äººåï¼ä¸ºäºæ´å¥½å°äºè§£æ¨çåº·å¤æ
åµï¼è¯·æ¨æ½ä¸ç¹å®è´µæ¶é´ï¼å®æè¿ä»½é访é®å·ã" |
| | | }} |
| | | </div> |
| | | </div> |
| | | |
| | | <el-divider class="custom-divider"></el-divider> |
| | | |
| | | <!-- é®å·é¢ç®åºå --> |
| | | <div class="questions-section"> |
| | | <div |
| | | class="question-item" |
| | | v-for="(item, index) in visibleQuestions" |
| | | :key="item.id" |
| | | :class="{ |
| | | 'has-warning': |
| | | item.prompt && |
| | | item.scriptResult && |
| | | (item.scriptType !== 2 || item.scriptResult.length > 0), |
| | | }" |
| | | > |
| | | <!-- é¢ç®é¢å¹² --> |
| | | <div class="question-stem"> |
| | | <span class="question-number" |
| | | >{{ getVisibleQuestionIndex(index) }}.</span |
| | | > |
| | | <span class="question-text">{{ item.scriptContent }}</span> |
| | | <span class="question-type-tag"> |
| | | {{ |
| | | item.scriptType === 1 |
| | | ? "[åé]" |
| | | : item.scriptType === 2 |
| | | ? "[å¤é]" |
| | | : "[é®ç]" |
| | | }} |
| | | </span> |
| | | </div> |
| | | |
| | | <!-- åéé¢ç® --> |
| | | <div |
| | | class="question-options" |
| | | v-if="item.scriptType == 1 && !item.ishide" |
| | | > |
| | | <el-radio-group class="options-group" v-model="item.scriptResult"> |
| | | <el-radio |
| | | v-for="( |
| | | option, optionIndex |
| | | ) in item.svyTaskTemplateTargetoptions" |
| | | :key="optionIndex" |
| | | :label="option.optioncontent" |
| | | :class="{ |
| | | 'abnormal-option': |
| | | option.isabnormal && |
| | | item.scriptResult == option.optioncontent, |
| | | }" |
| | | @click.native.prevent=" |
| | | handleRadioToggle( |
| | | item, |
| | | index, |
| | | item.svyTaskTemplateTargetoptions, |
| | | option.optioncontent |
| | | ) |
| | | " |
| | | class="option-radio" |
| | | > |
| | | <span class="option-text">{{ option.optioncontent }}</span> |
| | | </el-radio> |
| | | </el-radio-group> |
| | | </div> |
| | | |
| | | <!-- å¤éé¢ç® --> |
| | | <div class="question-options" v-if="item.scriptType == 2"> |
| | | <el-checkbox-group |
| | | class="options-group" |
| | | v-model="item.scriptResult" |
| | | > |
| | | <el-checkbox |
| | | v-for="( |
| | | option, optionIndex |
| | | ) in item.svyTaskTemplateTargetoptions" |
| | | :key="optionIndex" |
| | | :label="option.optioncontent" |
| | | :class="{ |
| | | 'abnormal-option': option.isabnormal, |
| | | }" |
| | | @change="$forceUpdate()" |
| | | class="option-checkbox" |
| | | > |
| | | <span class="option-text">{{ option.optioncontent }}</span> |
| | | </el-checkbox> |
| | | </el-checkbox-group> |
| | | </div> |
| | | |
| | | <!-- 填空é¢ç® --> |
| | | <div class="question-input" v-if="item.scriptType == 4"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请è¾å
¥æ¨çåç" |
| | | v-model="item.scriptResult" |
| | | clearable |
| | | class="answer-textarea" |
| | | ></el-input> |
| | | </div> |
| | | |
| | | <!-- æç¤ºä¿¡æ¯ --> |
| | | <div |
| | | class="question-warning" |
| | | v-show=" |
| | | item.prompt && |
| | | item.scriptResult && |
| | | (item.scriptType !== 2 || item.scriptResult.length > 0) |
| | | " |
| | | > |
| | | <el-alert |
| | | :title="item.prompt" |
| | | type="warning" |
| | | :closable="false" |
| | | class="warning-alert" |
| | | ></el-alert> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- æäº¤æé® --> |
| | | <div class="submit-section"> |
| | | <el-button type="primary" @click="cache(true)" class="submit-button"> |
| | | æäº¤é®å· |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- å®æé¡µé¢ --> |
| | | <div class="completion-page" v-else> |
| | | <div class="completion-content"> |
| | | <div class="completion-icon">â</div> |
| | | <h2 class="completion-title">æè°¢æ¨çé
å!</h2> |
| | | <p class="completion-message"> |
| | | {{ |
| | | jsy |
| | | ? jsy |
| | | : "çæ´»ä¸è¦å³é¸ç»åï¼æ³¨æä¼æ¯åè¥å
»ï¼éå½é»ç¼ï¼æçéé
ï¼ä¿æå¿æ
èç
ï¼å®æå¤è¯ã飿¬æ¬¡å访就å°è¿éï¼ç¥æ¨èº«ä½å¥åº·ï¼" |
| | | }} |
| | | </p> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | getExternalfollowup, |
| | | getCachequestionnaire, |
| | | Cachequestionnaire, |
| | | Submitaquestionnaire, |
| | | geturlinfo, |
| | | } from "@/api/AiCentre/index"; |
| | | import JSEncrypt from "jsencrypt"; |
| | | export default { |
| | | data() { |
| | | return { |
| | | taskid: 355, |
| | | patid: 265823, |
| | | kcb: "", |
| | | excep: 0, |
| | | isabnormal: 0, |
| | | taskname: "", |
| | | questionList: [], |
| | | jsy: null, |
| | | dialogVisible: false, |
| | | Endornot: true, |
| | | accomplish: false, |
| | | // å端å
¬é¥ |
| | | publicKey: |
| | | "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKR0yHv0rbJWQE+Sc7/FwpW66qMd9qX2k6z+SDgkSdxWh/1GbBoAP7bDQQRF6vXmoKsD2ya42H6XRLSDXAoayuMCAwEAAQ== ", |
| | | // å端ç§é¥ |
| | | privateKey: |
| | | " MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEAtDOpbUQhcEoYy77agRhIHmAzs7H+KHJhN56gTTI9fWq23j77nI055MFV3oQQziIrNUTNaPpEQhZXBpI0+f9K9QIDAQABAkB3n0fcWfrcoMN/FU3VnrnZOEF6CzFNxkgU9P8y36QECWKZ9JhYQkNpKrMC9oXlN3VSaRigV7B+L/I/a0Rs1W+tAiEA4jx7xcXJ4y4BNwAmVHt6NNiEkzIwWnwC/0qsEu8NsOsCIQDL6MMn1D2uznC6OuOWpxDCkBh1JL1NzZTZeH2G+hj7nwIgKGAC9tjFnvWm4dn0/T7MIIJDpsFeP8fCAS2iZ/6hwuECIAS/eLvWr1EAsZNEh8QcQ8GkBU3E+ztyjAK8UX/xFt/VAiBf79/1tDErX4/DChecM8w3c3DhbBcjuE3fHZn7p6/UKg==", |
| | | formData: { |
| | | question1: "", |
| | | question2: "", |
| | | question3: "", |
| | | }, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | // window.addEventListener("beforeunload", this.cache); |
| | | }, |
| | | beforeDestroy() { |
| | | // window.removeEventListener("beforeunload", this.cache); |
| | | }, |
| | | created() { |
| | | this.geturlinfo(); |
| | | }, |
| | | computed: { |
| | | // 计ç®å±æ§ï¼è·åææå¯è§çé¢ç® |
| | | visibleQuestions() { |
| | | if (!Array.isArray(this.questionList)) { |
| | | return []; |
| | | } |
| | | return this.questionList.filter((question) => !question.ishide); |
| | | }, |
| | | }, |
| | | methods: { |
| | | // è§£æurlid |
| | | geturlinfo() { |
| | | // let url = window.location.href; |
| | | let url = this.$route.query.p; |
| | | console.log(url, "url"); |
| | | // let url = 'http://218.108.11.22:8093/sf/003'; |
| | | // let urlid = this.extractLastSegmentFromUrl(url); |
| | | |
| | | geturlinfo(url).then((res) => { |
| | | if (res.code == 200) { |
| | | this.getQuestionnaire( |
| | | res.data.param1, |
| | | res.data.param2, |
| | | res.data.param3, |
| | | res.data.param5 |
| | | ); |
| | | } |
| | | }); |
| | | }, |
| | | // extractLastSegmentFromUrl(url) { |
| | | // // æ¾å°æåä¸ä¸ª'/'çä½ç½® |
| | | // const lastSlashIndex = url.lastIndexOf('/'); |
| | | // // 妿æ¾å°äº'/'ï¼æªåå
¶åçææå符 |
| | | // if (lastSlashIndex !== -1) { |
| | | // return url.substring(lastSlashIndex + 1); |
| | | // } |
| | | // // å¦ææ²¡ææ¾å°'/'ï¼è¿å空å符串 |
| | | // return ''; |
| | | // }, |
| | | |
| | | // è·åæ°æ® |
| | | getQuestionnaire(param1, param2, param3) { |
| | | this.taskid = decodeURIComponent(param1); |
| | | this.patid = decodeURIComponent(param2); |
| | | this.taskname = decodeURIComponent(param3); |
| | | // let taskid = |
| | | // "OFp7tn/B6x7IzKJetvGWHdSWBj7msRlnlj6am9dyuHTH6sEt4uBbVCUXs5kcF/e4O2W6vqHf2Bz9K3/evbYDmw=="; |
| | | // let patid = |
| | | // "CVk0j8O86AeCqhV5WPsBBYDg9fec0wDoDlP9imYK4wDBNIkxywZzMJEGlPagOxnq6qr2WYZo0U8MUGWRGnq8ZA=="; |
| | | // this.taskid = this.decrypt(taskid); |
| | | // this.patid = this.decrypt(patid); |
| | | // let taskids = this.encrypt(this.taskid); |
| | | // let patids = this.encrypt(this.patid); |
| | | // å
åç¼å |
| | | getCachequestionnaire({ param1: this.taskid, param2: this.patid }).then( |
| | | (res) => { |
| | | if (res.code == 200) { |
| | | this.questionList = res.data.result; |
| | | this.accomplish = res.data.submit; |
| | | if (this.questionList[0]) { |
| | | this.questionList.forEach((item) => { |
| | | if (item.scriptResult && item.scriptType != 2) { |
| | | item.scriptResult = JSON.parse(item.scriptResult); |
| | | } else if (item.scriptResult && item.scriptType == 2) { |
| | | item.scriptResult = item.scriptResult.split("&"); |
| | | } |
| | | }); |
| | | return; |
| | | } else { |
| | | this.getExternalfollowup(); |
| | | } |
| | | } else { |
| | | this.getExternalfollowup(); |
| | | } |
| | | } |
| | | ); |
| | | }, |
| | | // è·åæ°æ® |
| | | getExternalfollowup() { |
| | | getExternalfollowup({ param1: this.taskid, param2: this.patid }).then( |
| | | (res) => { |
| | | if (res.code == 200) { |
| | | this.questionList = res.data.script; |
| | | this.jsy = res.data.jsy; |
| | | this.kcb = res.data.kcb; |
| | | // å¤çé¢ç®æ¶éç»ææ ¼å¼ |
| | | this.questionList.forEach((item) => { |
| | | item.nextScriptno = Number(item.nextScriptno); |
| | | if (item.scriptType == 2) { |
| | | item.scriptResult = []; |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | ); |
| | | }, |
| | | // å å¯å½æ° |
| | | encrypt(txt) { |
| | | const encryptor = new JSEncrypt(); |
| | | encryptor.setPublicKey(this.publicKey); // 设置å
¬é¥ |
| | | return encryptor.encrypt(txt); // å¯¹æ°æ®è¿è¡å å¯ |
| | | }, |
| | | // è§£å¯å½æ° |
| | | decrypt(txt) { |
| | | const encryptor = new JSEncrypt(); |
| | | encryptor.setPrivateKey(this.privateKey); // 设置ç§é¥ |
| | | return encryptor.decrypt(txt); // å¯¹æ°æ®è¿è¡è§£å¯ |
| | | }, |
| | | // æäº¤ |
| | | submitForm() { |
| | | // æäº¤è¡¨åé»è¾ |
| | | let form = { |
| | | param1: this.taskid, |
| | | param2: this.patid, |
| | | excep: this.excep, |
| | | isabnormal: this.isabnormal, |
| | | serviceSubtaskDetailList: [], |
| | | }; |
| | | console.log(form.isabnormal, "formisabnormal"); |
| | | |
| | | const arr = structuredClone(this.questionList); |
| | | // arr.forEach((item) => { |
| | | // item.asrtext = JSON.stringify(item.scriptResult); |
| | | // if (item.scriptType == 2 && item.scriptResult[0]) { |
| | | // item.scriptResult = item.scriptResult.join("&"); |
| | | // } |
| | | // }); |
| | | form.serviceSubtaskDetailList = arr; |
| | | Submitaquestionnaire(form).then((res) => { |
| | | if (res.code == 200) { |
| | | if (this.jsy) { |
| | | this.dialogVisible = true; |
| | | } |
| | | this.accomplish = true; |
| | | this.$modal.msgSuccess("æäº¤æå"); |
| | | } |
| | | }); |
| | | }, |
| | | // ç¼å |
| | | cache(subm) { |
| | | console.log("è¿å
¥ç¼å"); |
| | | let form = { |
| | | param1: this.taskid, |
| | | param2: this.patid, |
| | | svyTaskTemplateScriptVOS: [], |
| | | }; |
| | | const arr = structuredClone(this.questionList); |
| | | arr.forEach((item) => { |
| | | item.ishide = item.ishide ? 1 : 0; |
| | | }); |
| | | arr.forEach((item, index) => { |
| | | if (item.scriptType == 1 && item.scriptResult) { |
| | | var obj = item.svyTaskTemplateTargetoptions.find( |
| | | (items) => items.optioncontent == item.scriptResult |
| | | ); |
| | | console.log(item); |
| | | |
| | | console.log(obj, "obj"); |
| | | if (obj.sendTaskid) { |
| | | item.sendTaskname = obj.sendTaskname; |
| | | item.sendTaskid = obj.sendTaskid; |
| | | console.log(String(obj.sendTaskid).split(",")); |
| | | item.sendTaskids = String(obj.sendTaskid).split(","); |
| | | } |
| | | if (obj) { |
| | | form.excep = obj.isabnormal; |
| | | form.isabnormal = obj.isabnormal; |
| | | if (this.isabnormal != 1 && obj.isabnormal) { |
| | | this.excep = obj.isabnormal; |
| | | this.isabnormal = obj.isabnormal; |
| | | } |
| | | console.log(obj.isabnormal); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | arr.forEach((item) => { |
| | | if (item.scriptType == 2 && item.scriptResult[0]) { |
| | | item.scriptResult = item.scriptResult.join("&"); |
| | | } else if (item.scriptType != 2 && item.scriptResult) { |
| | | item.scriptResult = JSON.stringify(item.scriptResult); |
| | | } |
| | | }); |
| | | form.svyTaskTemplateScriptVOS = arr; |
| | | form.type = 2; |
| | | Cachequestionnaire(form).then((res) => { |
| | | if (res.code == 200) { |
| | | if (subm) { |
| | | this.submitForm(); |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | // è·åå¯è§é¢ç®çæ£ç¡®åºå·ï¼è§£å³è·³é¢ååºå·ä¸è¿ç»çé®é¢ï¼ |
| | | getVisibleQuestionIndex(index) { |
| | | return index + 1; |
| | | }, |
| | | // æ°å¢ç忢éä¸/åæ¶é䏿¹æ³ |
| | | handleRadioToggle(questionItem, index, options, optionValue) { |
| | | // ä¿åå½åç¶æä»¥ä¾¿åç»æ¯è¾ |
| | | const previousState = JSON.parse(JSON.stringify(this.questionList)); |
| | | |
| | | // åæçå¤çé»è¾ |
| | | if (questionItem.scriptResult === optionValue) { |
| | | questionItem.scriptResult = ""; |
| | | questionItem.isabnormal = 0; |
| | | questionItem.showAppendInput = false; |
| | | } else { |
| | | questionItem.scriptResult = optionValue; |
| | | this.handleOptionChange(optionValue, index, options, questionItem); |
| | | } |
| | | |
| | | // å¤ç宿åï¼ç¡®ä¿éæ°è®¡ç®å¯è§é¢ç®çåºå· |
| | | this.$forceUpdate(); |
| | | }, |
| | | |
| | | // å¨methodsé¨åï¼ä¿®æ¹handleOptionChangeæ¹æ³: |
| | | handleOptionChange(selectedOption, questionIndex, options, a) { |
| | | console.log(selectedOption, questionIndex, options, a, "888"); |
| | | |
| | | if (document.activeElement) { |
| | | document.activeElement.blur(); |
| | | } |
| | | |
| | | // æ¾å°è¢«éä¸çé项对象 |
| | | const selectedOptionObj = options.find( |
| | | (item) => item.optioncontent == selectedOption |
| | | ); |
| | | if (selectedOptionObj) { |
| | | this.questionList[questionIndex].nextScriptno = |
| | | selectedOptionObj.nextQuestion; |
| | | this.questionList[questionIndex].score = selectedOptionObj.score; |
| | | this.questionList[questionIndex].prompt = selectedOptionObj.prompt; |
| | | } |
| | | // å¤çå¼å¸¸ç¶æé«äº® |
| | | this.questionList[questionIndex].isabnormal = |
| | | selectedOptionObj.isabnormal; |
| | | // å¤çéå è¾å
¥æ¡æ¾ç¤º |
| | | |
| | | this.questionList[questionIndex].showAppendInput = |
| | | selectedOptionObj.appendflag == 1; |
| | | console.log(this.questionList); |
| | | |
| | | // if (!this.questionList[questionIndex].showAppendInput) { |
| | | // this.questionList[questionIndex].answerps = ""; // æ¸
é¤éå ä¿¡æ¯ |
| | | // } |
| | | // ä¿åå½åé¢ç®ä¹åå·²ç»éèçé¢ç®ç¶æ |
| | | const previouslyHiddenBeforeCurrent = this.questionList |
| | | .slice(0, questionIndex) |
| | | .map((item, index) => (item.ishide ? index : -1)) |
| | | .filter((index) => index !== -1); |
| | | |
| | | // ä¿åä¹åå nextQuestion=0èéèçé¢ç®èå´ |
| | | const previouslyHiddenByEnd = this.questionList |
| | | .map((item, index) => (item.hiddenByEnd ? index : -1)) |
| | | .filter((index) => index !== -1); |
| | | |
| | | // 妿branchFlag为1ï¼å¤çé¢ç®è·³è½¬ |
| | | if (a.branchFlag == 1) { |
| | | if (selectedOptionObj.nextQuestion == 0) { |
| | | // ç»æé®ç - éèå颿æé¢ç®å¹¶æ è®° |
| | | this.questionList = this.questionList.map((item, index) => ({ |
| | | ...item, |
| | | ishide: index > questionIndex, |
| | | hiddenByEnd: index > questionIndex, // æ è®°è¿äºé¢ç®æ¯è¢«ç»æé®çéèç |
| | | })); |
| | | } else { |
| | | // æ£å¸¸è·³è½¬é»è¾ |
| | | const nextQuestionIndex = selectedOptionObj.nextQuestion - 1; |
| | | console.log(nextQuestionIndex, 4); |
| | | console.log(selectedOptionObj); |
| | | |
| | | this.questionList = this.questionList.map((item, index) => { |
| | | // ä¿çå½åé¢ç®ä¹åçéèç¶æ |
| | | if (index < questionIndex) { |
| | | return { |
| | | ...item, |
| | | ishide: previouslyHiddenBeforeCurrent.includes(index), |
| | | hiddenByEnd: false, // æ¸
é¤ç»ææ è®° |
| | | }; |
| | | } |
| | | |
| | | // å½åé¢ç®æ»æ¯å¯è§ |
| | | if (index === questionIndex) { |
| | | return { ...item, ishide: 0, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // æ¾ç¤ºç®æ ä¸ä¸é¢ |
| | | if (index === nextQuestionIndex) { |
| | | return { ...item, ishide: 0, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // 妿æ¯ä¹åè¢«ç»æé®çéèçé¢ç®ï¼ç°å¨åºè¯¥æ¢å¤æ¾ç¤º |
| | | if (item.hiddenByEnd) { |
| | | return { ...item, ishide: 0, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // éèå½åé¢åç®æ é¢ä¹é´çé¢ç® |
| | | if (index > questionIndex && index < nextQuestionIndex) { |
| | | return { ...item, ishide: 1, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // å
¶ä»æ
åµä¿æåç¶ |
| | | return item; |
| | | }); |
| | | } |
| | | } else { |
| | | // å¦ææ²¡æè·³è½¬ï¼åªéç¡®ä¿ä¸ä¸é¢å¯è§ |
| | | this.questionList = this.questionList.map((item, index) => ({ |
| | | ...item, |
| | | ishide: index === questionIndex + 1 ? 0 : item.ishide, |
| | | hiddenByEnd: index === questionIndex + 1 ? false : item.hiddenByEnd, |
| | | })); |
| | | } |
| | | |
| | | // å¨å¤çå®é¢ç®æ¾ç¤º/éèåï¼å¼ºå¶æ´æ°è§å¾ä»¥ç¡®ä¿åºå·æ£ç¡® |
| | | this.$nextTick(() => { |
| | | this.$forceUpdate(); |
| | | }); |
| | | }, |
| | | // å¤çåéé项 |
| | | // handleOptionChange(selectedvalue, index, arr) { |
| | | // // æ¥æ¾éä¸çé项对象 |
| | | // const selectedOption = arr.svyTaskTemplateTargetoptions.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; |
| | | // } |
| | | // }, |
| | | // å¤çå¤éé项 |
| | | // updateScore(selectedvalues, index, arr) { |
| | | // // ��å åæ° |
| | | // let score = 0; |
| | | // selectedvalues.forEach((value) => { |
| | | // const selectedOption = arr.svyTaskTemplateTargetoptions.find( |
| | | // (option) => option.optioncontent == value |
| | | // ); |
| | | // if (selectedOption) { |
| | | // score += Number(selectedOption.score); |
| | | // } |
| | | // }); |
| | | // this.questionList[index].score = score; |
| | | // }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .questionnaire-optimized { |
| | | min-height: 100vh; |
| | | background: linear-gradient(135deg, #f5f7fa 0%, #e4edf5 100%); |
| | | padding: 20px 0; |
| | | font-family: "PingFang SC", "Microsoft YaHei", sans-serif; |
| | | } |
| | | |
| | | .content-wrapper { |
| | | max-width: 800px; |
| | | margin: 0 auto; |
| | | padding: 0 15px; |
| | | } |
| | | |
| | | .questionnaire-container { |
| | | background: #ffffff; |
| | | border-radius: 12px; |
| | | box-shadow: 0 5px 20px rgba(0, 0, 0, 0.08); |
| | | padding: 30px; |
| | | margin-bottom: 30px; |
| | | } |
| | | |
| | | .questionnaire-header { |
| | | text-align: center; |
| | | margin-bottom: 25px; |
| | | } |
| | | |
| | | .questionnaire-title { |
| | | color: #175997; |
| | | font-size: 28px; |
| | | font-weight: 700; |
| | | margin-bottom: 15px; |
| | | line-height: 1.3; |
| | | } |
| | | |
| | | .questionnaire-description { |
| | | font-size: 18px; |
| | | color: #5a6c84; |
| | | line-height: 1.6; |
| | | max-width: 700px; |
| | | margin: 0 auto; |
| | | } |
| | | |
| | | .custom-divider { |
| | | margin: 25px 0; |
| | | background-color: #eaeef2; |
| | | } |
| | | |
| | | .questions-section { |
| | | margin-bottom: 40px; |
| | | } |
| | | |
| | | .question-item { |
| | | margin-bottom: 35px; |
| | | padding: 20px; |
| | | border-radius: 8px; |
| | | border: 1px solid #eaeef2; |
| | | transition: all 0.3s ease; |
| | | |
| | | &:hover { |
| | | border-color: #d1e0f0; |
| | | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); |
| | | } |
| | | |
| | | &.has-warning { |
| | | border-left: 4px solid #e6a23c; |
| | | } |
| | | } |
| | | |
| | | .question-stem { |
| | | display: flex; |
| | | align-items: flex-start; |
| | | margin-bottom: 20px; |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .question-number { |
| | | font-weight: 600; |
| | | color: #175997; |
| | | margin-right: 8px; |
| | | min-width: 24px; |
| | | } |
| | | |
| | | .question-text { |
| | | flex: 1; |
| | | line-height: 1.5; |
| | | color: #2c3e50; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | .question-type-tag { |
| | | color: #3ba2f7; |
| | | font-size: 14px; |
| | | margin-left: 10px; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | .question-options { |
| | | margin: 15px 0; |
| | | } |
| | | |
| | | .options-group { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 12px; |
| | | } |
| | | |
| | | .option-radio, |
| | | .option-checkbox { |
| | | margin: 0; |
| | | padding: 12px 15px; |
| | | border-radius: 6px; |
| | | border: 1px solid #e0e0e0; |
| | | transition: all 0.2s; |
| | | |
| | | &:hover { |
| | | border-color: #c0c4cc; |
| | | background-color: #f8fafc; |
| | | } |
| | | } |
| | | |
| | | :deep(.option-radio .el-radio__label), |
| | | :deep(.option-checkbox .el-checkbox__label) { |
| | | display: flex; |
| | | align-items: center; |
| | | font-size: 16px; |
| | | } |
| | | |
| | | .option-text { |
| | | margin-right: 5px; |
| | | } |
| | | |
| | | .abnormal-indicator { |
| | | color: #f56c6c; |
| | | font-weight: bold; |
| | | } |
| | | |
| | | .abnormal-option { |
| | | :deep(.el-radio__inner) { |
| | | border-color: #f56c6c; |
| | | } |
| | | |
| | | :deep(.el-checkbox__inner) { |
| | | border-color: #f56c6c; |
| | | } |
| | | } |
| | | |
| | | .question-input { |
| | | margin: 15px 0; |
| | | } |
| | | |
| | | .answer-textarea { |
| | | :deep(.el-textarea__inner) { |
| | | font-size: 16px; |
| | | line-height: 1.5; |
| | | } |
| | | } |
| | | |
| | | .question-warning { |
| | | margin-top: 15px; |
| | | } |
| | | |
| | | .warning-alert { |
| | | :deep(.el-alert__title) { |
| | | font-size: 15px; |
| | | line-height: 1.4; |
| | | } |
| | | } |
| | | |
| | | .submit-section { |
| | | text-align: center; |
| | | padding: 20px 0 10px; |
| | | } |
| | | |
| | | .submit-button { |
| | | width: 100%; |
| | | max-width: 300px; |
| | | height: 50px; |
| | | font-size: 18px; |
| | | font-weight: 500; |
| | | border-radius: 8px; |
| | | background: linear-gradient(135deg, #175997 0%, #2a77c9 100%); |
| | | border: none; |
| | | box-shadow: 0 4px 12px rgba(23, 89, 151, 0.3); |
| | | transition: all 0.3s; |
| | | |
| | | &:hover { |
| | | transform: translateY(-2px); |
| | | box-shadow: 0 6px 16px rgba(23, 89, 151, 0.4); |
| | | } |
| | | |
| | | &:active { |
| | | transform: translateY(0); |
| | | } |
| | | } |
| | | |
| | | .completion-page { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | min-height: 70vh; |
| | | padding: 20px; |
| | | } |
| | | |
| | | .completion-content { |
| | | text-align: center; |
| | | max-width: 600px; |
| | | padding: 40px; |
| | | background: #ffffff; |
| | | border-radius: 12px; |
| | | box-shadow: 0 5px 20px rgba(0, 0, 0, 0.08); |
| | | } |
| | | |
| | | .completion-icon { |
| | | font-size: 80px; |
| | | color: #52c41a; |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .completion-title { |
| | | color: #175997; |
| | | font-size: 32px; |
| | | font-weight: 700; |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .completion-message { |
| | | font-size: 18px; |
| | | color: #5a6c84; |
| | | line-height: 1.6; |
| | | } |
| | | |
| | | /* ååºå¼è®¾è®¡ */ |
| | | @media (max-width: 768px) { |
| | | .content-wrapper { |
| | | padding: 0 10px; |
| | | } |
| | | |
| | | .questionnaire-container { |
| | | padding: 20px 15px; |
| | | } |
| | | |
| | | .questionnaire-title { |
| | | font-size: 24px; |
| | | } |
| | | |
| | | .questionnaire-description { |
| | | font-size: 16px; |
| | | } |
| | | |
| | | .question-stem { |
| | | font-size: 16px; |
| | | flex-direction: column; |
| | | align-items: flex-start; |
| | | } |
| | | |
| | | .question-type-tag { |
| | | margin-left: 0; |
| | | margin-top: 5px; |
| | | } |
| | | |
| | | .question-item { |
| | | padding: 15px; |
| | | } |
| | | |
| | | .completion-content { |
| | | padding: 30px 20px; |
| | | } |
| | | |
| | | .completion-title { |
| | | font-size: 28px; |
| | | } |
| | | |
| | | .completion-message { |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | |
| | | @media (max-width: 480px) { |
| | | .questionnaire-title { |
| | | font-size: 22px; |
| | | } |
| | | |
| | | .completion-title { |
| | | font-size: 24px; |
| | | } |
| | | |
| | | .completion-icon { |
| | | font-size: 60px; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="questionnaire"> |
| | | <div class="CONTENT" v-if="!accomplish"> |
| | | <div class="preview-left"> |
| | | <div class="toptitle"> |
| | | <div class="title">{{ taskname ? taskname : "é®å·" }}</div> |
| | | <div style="font-size: 22px; margin-bottom: 20px; line-height: 1.5"> |
| | | <div class="questionnaire-optimized"> |
| | | <div class="content-wrapper" v-if="!accomplish"> |
| | | <div class="questionnaire-container"> |
| | | <!-- é®å·æ é¢åºå --> |
| | | <div class="questionnaire-header"> |
| | | <h1 class="questionnaire-title"> |
| | | {{ taskname ? taskname : "é®å·" }} |
| | | </h1> |
| | | <div class="questionnaire-description"> |
| | | {{ |
| | | kcb |
| | | ? kcb |
| | | : "亲ç±çæ£è
-å®¶å±ï¼æ¨å¥½ï¼æä»¬æ¯æ é¡å¿ç«¥å»é¢ç廿¤äººåï¼ä¸ºäºæ´å¥½å°äºè§£æ¨çåº·å¤æ
åµï¼è¯·æ¨æ½ä¸ç¹å®è´µæ¶é´ï¼å®æè¿ä»½é访é®å·ã" |
| | | : "亲ç±çæ£è
-å®¶å±ï¼æä»¬æ¯å»é¢ç廿¤äººåï¼ä¸ºäºæ´å¥½å°äºè§£æ¨çåº·å¤æ
åµï¼è¯·æ¨æ½ä¸ç¹å®è´µæ¶é´ï¼å®æè¿ä»½é访é®å·ã" |
| | | }} |
| | | <!-- 亲ç±çæ£è
/家屿¨å¥½ï¼ä¸ºäºæ´å¥½çäºè§£æ¨åºé¢åçåº·å¤æ
åµï¼ç»æ¨éå½åæ¶çå¥åº·æå¯¼ï¼è¯·æ¨æ½ä¸ç¹å®è´µæ¶é´ï¼å®æè¿ä»½åºé¢é访é®å·è°æ¥ã --> |
| | | </div> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | <!-- åé --> |
| | | <div |
| | | class="topic-dev" |
| | | v-for="(item, index) in questionList" |
| | | :key="item.aaa" |
| | | > |
| | | <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 |
| | | |
| | | <el-divider class="custom-divider"></el-divider> |
| | | |
| | | <!-- é®å·é¢ç®åºå --> |
| | | <div class="questions-section"> |
| | | <div |
| | | class="question-item" |
| | | v-for="(item, index) in visibleQuestions" |
| | | :key="item.id" |
| | | :class="{ |
| | | 'has-warning': |
| | | item.prompt && |
| | | item.scriptResult && |
| | | (item.scriptType !== 2 || item.scriptResult.length > 0), |
| | | }" |
| | | > |
| | | <!-- é¢ç®é¢å¹² --> |
| | | <div class="question-stem"> |
| | | <span class="question-number" |
| | | >{{ getVisibleQuestionIndex(index) }}.</span |
| | | > |
| | | <span class="question-text">{{ item.scriptContent }}</span> |
| | | <span class="question-type-tag"> |
| | | {{ |
| | | item.scriptType == 1 |
| | | ? "[åé]" |
| | | : item.scriptType == 2 |
| | | ? "[å¤é]" |
| | | : "[é®ç]" |
| | | }} |
| | | </span> |
| | | </div> |
| | | <div class="dev-xx"> |
| | | <el-radio-group |
| | | class="custom-radio" |
| | | v-model="item.scriptResult" |
| | | @change="handleOptionChange($event, index, item)" |
| | | > |
| | | |
| | | <!-- åéé¢ç® --> |
| | | <div |
| | | class="question-options" |
| | | v-if="item.scriptType == 1 && !item.ishide" |
| | | > |
| | | <el-radio-group class="options-group" v-model="item.scriptResult"> |
| | | <el-radio |
| | | border |
| | | v-for="(items, index) in item.svyLibTemplateTargetoptions" |
| | | :class=" |
| | | items.isabnormal && item.scriptResult == items.optioncontent |
| | | ? 'red-star' |
| | | : '' |
| | | v-for="( |
| | | option, optionIndex |
| | | ) in item.svyLibTemplateTargetoptions" |
| | | :key="optionIndex" |
| | | :label="option.optioncontent" |
| | | :class="{ |
| | | 'abnormal-option': |
| | | option.isabnormal && |
| | | item.scriptResult == option.optioncontent, |
| | | }" |
| | | @click.native.prevent=" |
| | | handleRadioToggle( |
| | | item, |
| | | index, |
| | | item.svyLibTemplateTargetoptions, |
| | | option.optioncontent |
| | | ) |
| | | " |
| | | :key="index" |
| | | :label="items.optioncontent" |
| | | >{{ items.optioncontent }}</el-radio |
| | | class="option-radio" |
| | | > |
| | | <span class="option-text">{{ option.optioncontent }}</span> |
| | | </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"> |
| | | |
| | | <!-- å¤éé¢ç® --> |
| | | <div class="question-options" v-if="item.scriptType == 2"> |
| | | <el-checkbox-group |
| | | class="custom-radio" |
| | | class="options-group" |
| | | v-model="item.scriptResult" |
| | | > |
| | | <el-checkbox |
| | | border |
| | | v-for="( |
| | | option, optionIndex |
| | | ) in item.svyLibTemplateTargetoptions" |
| | | :key="optionIndex" |
| | | :label="option.optioncontent" |
| | | :class="{ |
| | | 'abnormal-option': option.isabnormal, |
| | | }" |
| | | @change="$forceUpdate()" |
| | | v-for="(items, indexs) in item.svyLibTemplateTargetoptions" |
| | | :key="indexs" |
| | | :label="items.optioncontent" |
| | | class="option-checkbox" |
| | | > |
| | | {{ items.optioncontent }} |
| | | <span class="option-text">{{ option.optioncontent }}</span> |
| | | </el-checkbox> |
| | | </el-checkbox-group> |
| | | </div> |
| | | <!-- :class="items.isabnormal ? 'red-star' : ''" --> |
| | | <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"> |
| | | |
| | | <!-- 填空é¢ç® --> |
| | | <div class="question-input" v-if="item.scriptType == 4"> |
| | | <el-input |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请è¾å
¥çæ¡" |
| | | placeholder="请è¾å
¥æ¨çåç" |
| | | v-model="item.scriptResult" |
| | | clearable |
| | | > |
| | | </el-input> |
| | | class="answer-textarea" |
| | | ></el-input> |
| | | </div> |
| | | |
| | | <!-- æç¤ºä¿¡æ¯ --> |
| | | <div |
| | | class="question-warning" |
| | | v-show=" |
| | | item.prompt && |
| | | item.scriptResult && |
| | | (item.scriptType !== 2 || item.scriptResult.length > 0) |
| | | " |
| | | > |
| | | <el-alert |
| | | :title="item.prompt" |
| | | type="warning" |
| | | :closable="false" |
| | | class="warning-alert" |
| | | ></el-alert> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="bottom-fixed"> |
| | | <el-button |
| | | type="primary" |
| | | style="width: 80%; font-size: 20px" |
| | | @click="cache(true)" |
| | | >æäº¤é®å·</el-button |
| | | > |
| | | |
| | | <!-- æäº¤æé® --> |
| | | <div class="submit-section"> |
| | | <el-button type="primary" @click="cache(true)" class="submit-button"> |
| | | æäº¤é®å· |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="CONTENT" v-else> |
| | | <div class="preview-lefts"> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | padding-top: 50px; |
| | | font-size: 24px; |
| | | color: #175997; |
| | | font-weight: 600; |
| | | margin-bottom: 10px; |
| | | " |
| | | > |
| | | æè°¢æ¨çé
å! |
| | | </div> |
| | | <div style="font-size: 20px"> |
| | | |
| | | <!-- å®æé¡µé¢ --> |
| | | <div class="completion-page" v-else> |
| | | <div class="completion-content"> |
| | | <div class="completion-icon">â</div> |
| | | <h2 class="completion-title">æè°¢æ¨çé
å!</h2> |
| | | <p class="completion-message"> |
| | | {{ |
| | | jsy |
| | | ? jsy |
| | | : "æè°¢æ¨å䏿¬æ¬¡éè®¿ãæ¨çåé¦å¸®å©æä»¬æ´å¥½å°äºè§£å®å®çéåºæ
åµï¼å¹¶ä¸ºæ¨æä¾æ´ç²¾åçæ¤ç建议ä¸å¥åº·æå¯¼ãç¥æ¨åå®å®å¥åº·å¿«ä¹" |
| | | : "çæ´»ä¸è¦å³é¸ç»åï¼æ³¨æä¼æ¯åè¥å
»ï¼éå½é»ç¼ï¼æçéé
ï¼ä¿æå¿æ
èç
ï¼å®æå¤è¯ã飿¬æ¬¡å访就å°è¿éï¼ç¥æ¨èº«ä½å¥åº·ï¼" |
| | | }} |
| | | </div> |
| | | </p> |
| | | </div> |
| | | </div> |
| | | <!-- <el-dialog |
| | | :visible.sync="dialogVisible" |
| | | width="50%" |
| | | > |
| | | <div> |
| | | <el-alert :title="jsy" type="success"> </el-alert> |
| | | </div> |
| | | </el-dialog> --> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | taskid: 355, |
| | | patid: 265823, |
| | | kcb: "", |
| | | excep: "", |
| | | questionList: [ |
| | | // { |
| | | // scriptType: 1, |
| | | // scriptContent: "æ¨çå¹´é¾èå´æ¯ï¼", |
| | | // scriptResult: null, |
| | | // svyLibTemplateTargetoptions: [ |
| | | // { optioncontent: "18-25", value: "18-25", isabnormal: true }, |
| | | // { optioncontent: "26-35", value: "26-35" }, |
| | | // { optioncontent: "36-45", value: "36-45" }, |
| | | // { optioncontent: "46-55", value: "46-55" }, |
| | | // { optioncontent: "56+", value: "56+" }, |
| | | // ], |
| | | // required: true, |
| | | // }, |
| | | // { |
| | | // scriptType: 1, |
| | | // scriptContent: "æ¨çè䏿¯ä»ä¹ï¼", |
| | | // scriptResult: null, |
| | | // svyLibTemplateTargetoptions: [ |
| | | // { optioncontent: "å¦ç", value: "student" }, |
| | | // { optioncontent: "æå¸", value: "teacher" }, |
| | | // { optioncontent: "å·¥ç¨å¸", value: "engineer" }, |
| | | // { optioncontent: "å»ç", value: "doctor" }, |
| | | // { optioncontent: "å
¶ä»", value: "other" }, |
| | | // ], |
| | | // required: false, |
| | | // }, |
| | | // { |
| | | // scriptType: 2, |
| | | // scriptContent: "æ¨æå
´è¶£çæ´»å¨æåªäºï¼", |
| | | // scriptResult: [], |
| | | // svyLibTemplateTargetoptions: [ |
| | | // { optioncontent: "æ
游", value: "travel", isabnormal: true }, |
| | | // { optioncontent: "é
读", value: "reading", isabnormal: true }, |
| | | // { optioncontent: "è¿å¨", value: "sports", isabnormal: true }, |
| | | // { optioncontent: "é³ä¹", value: "music" }, |
| | | // { optioncontent: "çµå½±", value: "movies" }, |
| | | // ], |
| | | // required: false, |
| | | // }, |
| | | // { |
| | | // scriptType: 1, |
| | | // scriptContent: "æ¨çè䏿¯ä»ä¹ï¼", |
| | | // scriptResult: null, |
| | | // svyLibTemplateTargetoptions: [ |
| | | // { optioncontent: "å¦ç", value: "student" }, |
| | | // { optioncontent: "æå¸", value: "teacher" }, |
| | | // { optioncontent: "å·¥ç¨å¸", value: "engineer" }, |
| | | // { optioncontent: "å»ç", value: "doctor" }, |
| | | // { optioncontent: "å
¶ä»", value: "other" }, |
| | | // ], |
| | | // required: false, |
| | | // }, |
| | | // { |
| | | // scriptType: 1, |
| | | // scriptContent: "æ¨çè䏿¯ä»ä¹ï¼", |
| | | // scriptResult: null, |
| | | // svyLibTemplateTargetoptions: [ |
| | | // { optioncontent: "å¦ç", value: "student" }, |
| | | // { optioncontent: "æå¸", value: "teacher" }, |
| | | // { optioncontent: "å·¥ç¨å¸", value: "engineer", isabnormal: true }, |
| | | // { optioncontent: "å»ç", value: "doctor" }, |
| | | // { optioncontent: "å
¶ä»", value: "other" }, |
| | | // ], |
| | | // required: false, |
| | | // }, |
| | | // { |
| | | // scriptType: 1, |
| | | // scriptContent: "æ¨çè䏿¯ä»ä¹ï¼", |
| | | // scriptResult: null, |
| | | // svyLibTemplateTargetoptions: [ |
| | | // { optioncontent: "å¦ç", value: "student" }, |
| | | // { optioncontent: "æå¸", value: "teacher" }, |
| | | // { optioncontent: "å·¥ç¨å¸", value: "engineer" }, |
| | | // { optioncontent: "å»ç", value: "doctor" }, |
| | | // { optioncontent: "å
¶ä»", value: "other" }, |
| | | // ], |
| | | // required: false, |
| | | // }, |
| | | // { |
| | | // scriptType: 4, |
| | | // scriptContent: "æ¨çå§åæ¯ä»ä¹ï¼", |
| | | // scriptResult: "name", |
| | | // required: true, |
| | | // scriptResult: null, |
| | | // }, |
| | | ], |
| | | excep: 0, |
| | | isabnormal: 0, |
| | | taskname: "", |
| | | questionList: [], |
| | | jsy: null, |
| | | dialogVisible: false, |
| | | Endornot: true, |
| | |
| | | }; |
| | | }, |
| | | mounted() { |
| | | window.addEventListener("beforeunload", this.cache); |
| | | // window.addEventListener("beforeunload", this.cache); |
| | | }, |
| | | beforeDestroy() { |
| | | window.removeEventListener("beforeunload", this.cache); |
| | | // window.removeEventListener("beforeunload", this.cache); |
| | | }, |
| | | created() { |
| | | this.geturlinfo(); |
| | | }, |
| | | computed: { |
| | | // 计ç®å±æ§ï¼è·åææå¯è§çé¢ç® |
| | | visibleQuestions() { |
| | | if (!Array.isArray(this.questionList)) { |
| | | return []; |
| | | } |
| | | return this.questionList.filter((question) => !question.ishide); |
| | | }, |
| | | }, |
| | | methods: { |
| | | // è§£æurlid |
| | | geturlinfo() { |
| | | // let url = window.location.href; |
| | | let url = this.$route.query.p; |
| | | console.log(url,"url"); |
| | | // let url = window.location.href; |
| | | let url = this.$route.query.p; |
| | | console.log(url, "url"); |
| | | // let url = 'http://218.108.11.22:8093/sf/003'; |
| | | // let urlid = this.extractLastSegmentFromUrl(url); |
| | | |
| | | geturlinfo( url ).then((res) => { |
| | | if (res.code==200) { |
| | | this.getQuestionnaire(res.data.param1,res.data.param2,res.data.param3,res.data.param5,) |
| | | } |
| | | geturlinfo(url).then((res) => { |
| | | if (res.code == 200) { |
| | | this.getQuestionnaire( |
| | | res.data.param1, |
| | | res.data.param2, |
| | | res.data.param3, |
| | | res.data.param5 |
| | | ); |
| | | } |
| | | }); |
| | | }, |
| | | // extractLastSegmentFromUrl(url) { |
| | | // // æ¾å°æåä¸ä¸ª'/'çä½ç½® |
| | | // const lastSlashIndex = url.lastIndexOf('/'); |
| | | // // 妿æ¾å°äº'/'ï¼æªåå
¶åçææå符 |
| | | // if (lastSlashIndex !== -1) { |
| | | // return url.substring(lastSlashIndex + 1); |
| | | // } |
| | | // // å¦ææ²¡ææ¾å°'/'ï¼è¿å空å符串 |
| | | // return ''; |
| | | // }, |
| | | // extractLastSegmentFromUrl(url) { |
| | | // // æ¾å°æåä¸ä¸ª'/'çä½ç½® |
| | | // const lastSlashIndex = url.lastIndexOf('/'); |
| | | // // 妿æ¾å°äº'/'ï¼æªåå
¶åçææå符 |
| | | // if (lastSlashIndex !== -1) { |
| | | // return url.substring(lastSlashIndex + 1); |
| | | // } |
| | | // // å¦ææ²¡ææ¾å°'/'ï¼è¿å空å符串 |
| | | // return ''; |
| | | // }, |
| | | |
| | | // è·åæ°æ® |
| | | getQuestionnaire(param1,param2,param3) { |
| | | this.taskid = decodeURIComponent(param1); |
| | | this.patid = decodeURIComponent(param2); |
| | | this.taskname = decodeURIComponent(param3); |
| | | getQuestionnaire(param1, param2, param3) { |
| | | console.log(param1,'param1'); |
| | | |
| | | this.taskid = param1; |
| | | this.patid = param2; |
| | | this.taskname = param3; |
| | | // let taskid = |
| | | // "OFp7tn/B6x7IzKJetvGWHdSWBj7msRlnlj6am9dyuHTH6sEt4uBbVCUXs5kcF/e4O2W6vqHf2Bz9K3/evbYDmw=="; |
| | | // let patid = |
| | |
| | | getCachequestionnaire({ param1: this.taskid, param2: this.patid }).then( |
| | | (res) => { |
| | | if (res.code == 200) { |
| | | this.questionList = res.data; |
| | | this.questionList = res.data.result; |
| | | this.accomplish = res.data.submit; |
| | | if (this.questionList[0]) { |
| | | this.questionList.forEach((item) => { |
| | |
| | | item.scriptResult = []; |
| | | } |
| | | }); |
| | | console.log(this.questionList,'this.questionList'); |
| | | |
| | | } |
| | | } |
| | | ); |
| | |
| | | param1: this.taskid, |
| | | param2: this.patid, |
| | | excep: this.excep, |
| | | isabnormal: this.isabnormal, |
| | | serviceSubtaskDetailList: [], |
| | | }; |
| | | console.log(form.isabnormal, "formisabnormal"); |
| | | |
| | | const arr = structuredClone(this.questionList); |
| | | // arr.forEach((item) => { |
| | | // item.asrtext = JSON.stringify(item.scriptResult); |
| | |
| | | svyLibTemplateScriptVOS: [], |
| | | }; |
| | | const arr = structuredClone(this.questionList); |
| | | console.log(arr, "srr"); |
| | | arr.forEach((item) => { |
| | | item.ishide = item.ishide ? 1 : 0; |
| | | }); |
| | | arr.forEach((item, index) => { |
| | | var obj = item.svyLibTemplateTargetoptions.find( |
| | | (items) => items.optioncontent == item.scriptResult |
| | | ); |
| | | console.log(obj,'obj'); |
| | | if (item.scriptType == 1 && item.scriptResult) { |
| | | var obj = item.svyLibTemplateTargetoptions.find( |
| | | (items) => items.optioncontent == item.scriptResult |
| | | ); |
| | | console.log(item); |
| | | |
| | | if (obj) { |
| | | if (obj.isabnormal) { |
| | | console.log(obj, "obj"); |
| | | if (obj.sendTaskid) { |
| | | item.sendTaskname = obj.sendTaskname; |
| | | item.sendTaskid = obj.sendTaskid; |
| | | console.log(String(obj.sendTaskid).split(",")); |
| | | item.sendTaskids = String(obj.sendTaskid).split(","); |
| | | } |
| | | if (obj) { |
| | | form.excep = obj.isabnormal; |
| | | form.isabnormal = obj.isabnormal; |
| | | if (this.isabnormal != 1 && obj.isabnormal) { |
| | | this.excep = obj.isabnormal; |
| | | this.isabnormal = obj.isabnormal; |
| | | } |
| | | console.log(obj.isabnormal); |
| | | form.excep = 1; |
| | | this.excep = 1; |
| | | } |
| | | } |
| | | }); |
| | |
| | | } |
| | | }); |
| | | }, |
| | | // å¤çåéé项 |
| | | handleOptionChange(selectedvalue, index, arr) { |
| | | // æ¥æ¾éä¸çé项对象 |
| | | const selectedOption = arr.svyLibTemplateTargetoptions.find( |
| | | (option) => option.optioncontent == selectedvalue |
| | | ); |
| | | if (selectedOption) { |
| | | // å°éä¸çé项对象ç id èµå¼ç» obj.sonId |
| | | this.questionList[index].nextScriptno = selectedOption.nextQuestion; |
| | | this.questionList[index].score = selectedOption.score; |
| | | this.questionList[index].prompt = selectedOption.prompt; |
| | | } |
| | | // è·åå¯è§é¢ç®çæ£ç¡®åºå·ï¼è§£å³è·³é¢ååºå·ä¸è¿ç»çé®é¢ï¼ |
| | | getVisibleQuestionIndex(index) { |
| | | return index + 1; |
| | | }, |
| | | // æ°å¢ç忢éä¸/åæ¶é䏿¹æ³ |
| | | handleRadioToggle(questionItem, index, options, optionValue) { |
| | | // ä¿åå½åç¶æä»¥ä¾¿åç»æ¯è¾ |
| | | const previousState = JSON.parse(JSON.stringify(this.questionList)); |
| | | |
| | | // åæçå¤çé»è¾ |
| | | if (questionItem.scriptResult === optionValue) { |
| | | questionItem.scriptResult = ""; |
| | | questionItem.isabnormal = 0; |
| | | questionItem.showAppendInput = false; |
| | | } else { |
| | | questionItem.scriptResult = optionValue; |
| | | this.handleOptionChange(optionValue, index, options, questionItem); |
| | | } |
| | | |
| | | // å¤ç宿åï¼ç¡®ä¿éæ°è®¡ç®å¯è§é¢ç®çåºå· |
| | | this.$forceUpdate(); |
| | | }, |
| | | |
| | | // å¨methodsé¨åï¼ä¿®æ¹handleOptionChangeæ¹æ³: |
| | | handleOptionChange(selectedOption, questionIndex, options, a) { |
| | | console.log(selectedOption, questionIndex, options, a, "888"); |
| | | |
| | | if (document.activeElement) { |
| | | document.activeElement.blur(); |
| | | } |
| | | |
| | | // æ¾å°è¢«éä¸çé项对象 |
| | | const selectedOptionObj = options.find( |
| | | (item) => item.optioncontent == selectedOption |
| | | ); |
| | | if (selectedOptionObj) { |
| | | this.questionList[questionIndex].nextScriptno = |
| | | selectedOptionObj.nextQuestion; |
| | | this.questionList[questionIndex].score = selectedOptionObj.score; |
| | | this.questionList[questionIndex].prompt = selectedOptionObj.prompt; |
| | | } |
| | | // å¤çå¼å¸¸ç¶æé«äº® |
| | | this.questionList[questionIndex].isabnormal = |
| | | selectedOptionObj.isabnormal; |
| | | // å¤çéå è¾å
¥æ¡æ¾ç¤º |
| | | |
| | | this.questionList[questionIndex].showAppendInput = |
| | | selectedOptionObj.appendflag == 1; |
| | | console.log(this.questionList); |
| | | |
| | | // if (!this.questionList[questionIndex].showAppendInput) { |
| | | // this.questionList[questionIndex].answerps = ""; // æ¸
é¤éå ä¿¡æ¯ |
| | | // } |
| | | // ä¿åå½åé¢ç®ä¹åå·²ç»éèçé¢ç®ç¶æ |
| | | const previouslyHiddenBeforeCurrent = this.questionList |
| | | .slice(0, questionIndex) |
| | | .map((item, index) => (item.ishide ? index : -1)) |
| | | .filter((index) => index !== -1); |
| | | |
| | | // ä¿åä¹åå nextQuestion=0èéèçé¢ç®èå´ |
| | | const previouslyHiddenByEnd = this.questionList |
| | | .map((item, index) => (item.hiddenByEnd ? index : -1)) |
| | | .filter((index) => index !== -1); |
| | | |
| | | // 妿branchFlag为1ï¼å¤çé¢ç®è·³è½¬ |
| | | if (a.branchFlag == 1) { |
| | | if (selectedOptionObj.nextQuestion == 0) { |
| | | // ç»æé®ç - éèå颿æé¢ç®å¹¶æ è®° |
| | | this.questionList = this.questionList.map((item, index) => ({ |
| | | ...item, |
| | | ishide: index > questionIndex, |
| | | hiddenByEnd: index > questionIndex, // æ è®°è¿äºé¢ç®æ¯è¢«ç»æé®çéèç |
| | | })); |
| | | } else { |
| | | // æ£å¸¸è·³è½¬é»è¾ |
| | | const nextQuestionIndex = selectedOptionObj.nextQuestion - 1; |
| | | console.log(nextQuestionIndex, 4); |
| | | console.log(selectedOptionObj); |
| | | |
| | | this.questionList = this.questionList.map((item, index) => { |
| | | // ä¿çå½åé¢ç®ä¹åçéèç¶æ |
| | | if (index < questionIndex) { |
| | | return { |
| | | ...item, |
| | | ishide: previouslyHiddenBeforeCurrent.includes(index), |
| | | hiddenByEnd: false, // æ¸
é¤ç»ææ è®° |
| | | }; |
| | | } |
| | | |
| | | // å½åé¢ç®æ»æ¯å¯è§ |
| | | if (index === questionIndex) { |
| | | return { ...item, ishide: 0, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // æ¾ç¤ºç®æ ä¸ä¸é¢ |
| | | if (index === nextQuestionIndex) { |
| | | return { ...item, ishide: 0, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // 妿æ¯ä¹åè¢«ç»æé®çéèçé¢ç®ï¼ç°å¨åºè¯¥æ¢å¤æ¾ç¤º |
| | | if (item.hiddenByEnd) { |
| | | return { ...item, ishide: 0, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // éèå½åé¢åç®æ é¢ä¹é´çé¢ç® |
| | | if (index > questionIndex && index < nextQuestionIndex) { |
| | | return { ...item, ishide: 1, hiddenByEnd: false }; |
| | | } |
| | | |
| | | // å
¶ä»æ
åµä¿æåç¶ |
| | | return item; |
| | | }); |
| | | } |
| | | } else { |
| | | // å¦ææ²¡æè·³è½¬ï¼åªéç¡®ä¿ä¸ä¸é¢å¯è§ |
| | | this.questionList = this.questionList.map((item, index) => ({ |
| | | ...item, |
| | | ishide: index === questionIndex + 1 ? 0 : item.ishide, |
| | | hiddenByEnd: index === questionIndex + 1 ? false : item.hiddenByEnd, |
| | | })); |
| | | } |
| | | |
| | | // å¨å¤çå®é¢ç®æ¾ç¤º/éèåï¼å¼ºå¶æ´æ°è§å¾ä»¥ç¡®ä¿åºå·æ£ç¡® |
| | | this.$nextTick(() => { |
| | | this.$forceUpdate(); |
| | | }); |
| | | }, |
| | | // å¤çåéé项 |
| | | // handleOptionChange(selectedvalue, index, arr) { |
| | | // // æ¥æ¾éä¸çé项对象 |
| | | // const selectedOption = arr.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; |
| | | // } |
| | | // }, |
| | | // å¤çå¤éé项 |
| | | // updateScore(selectedvalues, index, arr) { |
| | | // // ��å åæ° |
| | |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .questionnaire { |
| | | // background-image: url("../assets/images/chainbackground.jpg"); |
| | | background-color: #f9f9fb; |
| | | background-size: cover; |
| | | background-attachment: fixed; /* ä¿æèæ¯åºå® */ |
| | | background-position: center; |
| | | font-family: Arial, sans-serif; |
| | | .questionnaire-optimized { |
| | | min-height: 100vh; |
| | | margin: 0; |
| | | padding: 0; |
| | | .CONTENT { |
| | | .title { |
| | | color: #3769f3; |
| | | font-size: 22px; |
| | | font-weight: bold; |
| | | margin-bottom: 20px; |
| | | text-align: center; |
| | | } |
| | | } |
| | | } |
| | | .preview-left { |
| | | margin: 10px; |
| | | margin-bottom: 60px; |
| | | background-color: #fff; |
| | | border-radius: 5px; |
| | | // margin: 20px; |
| | | padding: 10px; |
| | | height: 100%; |
| | | // background: #ffff; |
| | | border: 1px solid #dcdfe6; |
| | | -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), |
| | | 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | .topic-dev { |
| | | margin-bottom: 25px; |
| | | font-size: 20px !important; |
| | | .dev-text { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | } |
| | | .preview-lefts { |
| | | margin: 10px; |
| | | background-color: #fff; |
| | | border-radius: 5px; |
| | | // margin: 20px; |
| | | padding: 10px; |
| | | height: 95vh; // background: #ffff; |
| | | border: 1px solid #dcdfe6; |
| | | -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), |
| | | 0 0 6px 0 rgba(0, 0, 0, 0.04); |
| | | .topic-dev { |
| | | margin-bottom: 25px; |
| | | font-size: 20px !important; |
| | | .dev-text { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | background: linear-gradient(135deg, #f5f7fa 0%, #e4edf5 100%); |
| | | padding: 20px 0; |
| | | font-family: "PingFang SC", "Microsoft YaHei", sans-serif; |
| | | } |
| | | |
| | | .red-star { |
| | | ::v-deep.el-radio__label { |
| | | position: relative; |
| | | padding-right: 10px; /* æ ¹æ®éè¦è°æ´ */ |
| | | } |
| | | ::v-deep.el-radio__label::after { |
| | | content: "*"; |
| | | color: red; |
| | | position: absolute; |
| | | right: -5px; /* æ ¹æ®éè¦è°æ´ */ |
| | | top: 0; |
| | | } |
| | | ::v-deep.el-checkbox__label { |
| | | position: relative; |
| | | padding-right: 10px; /* æ ¹æ®éè¦è°æ´ */ |
| | | } |
| | | ::v-deep.el-checkbox__label::after { |
| | | content: "*"; |
| | | color: red; |
| | | position: absolute; |
| | | right: -5px; /* æ ¹æ®éè¦è°æ´ */ |
| | | top: 0; |
| | | } |
| | | } |
| | | ::v-deep.el-checkbox-group { |
| | | font-size: 0; |
| | | display: flex; |
| | | flex-direction: column; |
| | | margin: 5px 0; |
| | | } |
| | | ::v-deep.el-checkbox.is-bordered + .el-checkbox.is-bordered { |
| | | margin-left: 0; |
| | | .content-wrapper { |
| | | max-width: 800px; |
| | | margin: 0 auto; |
| | | padding: 0 15px; |
| | | } |
| | | |
| | | ::v-deep.el-radio-group { |
| | | display: flex; |
| | | flex-direction: column; |
| | | margin: 5px 0; |
| | | } |
| | | ::v-deep.el-radio.is-bordered + .el-radio.is-bordered { |
| | | /* margin-left: 10px; */ |
| | | margin-left: 0; |
| | | } |
| | | ::v-deep.custom-radio .el-radio { |
| | | margin: 2px 0; |
| | | .questionnaire-container { |
| | | background: #ffffff; |
| | | border-radius: 12px; |
| | | box-shadow: 0 5px 20px rgba(0, 0, 0, 0.08); |
| | | padding: 30px; |
| | | margin-bottom: 30px; |
| | | } |
| | | |
| | | .radio-option { |
| | | flex: none; /* ä¸è®©é项èªå¨å¡«å
ç©ºé´ */ |
| | | white-space: nowrap; /* 鲿¢éé¡¹ææ¬æ¢è¡ */ |
| | | margin: 0 10px; /* 设置é项左å³çé´é */ |
| | | font-size: 20px; /* å¢å¤§åä½å¤§å° */ |
| | | } |
| | | |
| | | .el-radio__label { |
| | | font-size: 20px; /* å¢å¤§æ ç¾æåå¤§å° */ |
| | | } |
| | | .toptitle { |
| | | } |
| | | .bottom-fixed { |
| | | position: fixed; |
| | | bottom: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | .questionnaire-header { |
| | | text-align: center; |
| | | padding: 10px 0; /* æ ¹æ®éè¦è°æ´å
è¾¹è· */ |
| | | background: #fff; /* æ ¹æ®éè¦è°æ´èæ¯é¢è² */ |
| | | box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.1); /* å¯éçé´å½±ææ */ |
| | | z-index: 1000; /* ç¡®ä¿æé®å¨é¡µé¢æä¸å± */ |
| | | margin-bottom: 25px; |
| | | } |
| | | ::v-deep.el-alert--warning.is-light { |
| | | background-color: #fbf9f3; |
| | | color: #ffba00; |
| | | |
| | | .questionnaire-title { |
| | | color: #175997; |
| | | font-size: 28px; |
| | | font-weight: 700; |
| | | margin-bottom: 15px; |
| | | line-height: 1.3; |
| | | } |
| | | ::v-deep { |
| | | .el-alert__title { |
| | | font-size: 20px; |
| | | line-height: 18px; |
| | | |
| | | .questionnaire-description { |
| | | font-size: 18px; |
| | | color: #5a6c84; |
| | | line-height: 1.6; |
| | | max-width: 700px; |
| | | margin: 0 auto; |
| | | } |
| | | |
| | | .custom-divider { |
| | | margin: 25px 0; |
| | | background-color: #eaeef2; |
| | | } |
| | | |
| | | .questions-section { |
| | | margin-bottom: 40px; |
| | | } |
| | | |
| | | .question-item { |
| | | margin-bottom: 35px; |
| | | padding: 20px; |
| | | border-radius: 8px; |
| | | border: 1px solid #eaeef2; |
| | | transition: all 0.3s ease; |
| | | |
| | | &:hover { |
| | | border-color: #d1e0f0; |
| | | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); |
| | | } |
| | | |
| | | &.has-warning { |
| | | border-left: 4px solid #e6a23c; |
| | | } |
| | | } |
| | | ::v-deep.el-radio--medium.is-bordered .el-radio__label { |
| | | font-size: 20px; |
| | | |
| | | .question-stem { |
| | | display: flex; |
| | | align-items: flex-start; |
| | | margin-bottom: 20px; |
| | | font-size: 18px; |
| | | } |
| | | ::v-deep.el-radio--medium.is-bordered { |
| | | padding: 5px 20px 0px 10px; |
| | | border-radius: 4px; |
| | | height: 36px; |
| | | |
| | | .question-number { |
| | | font-weight: 600; |
| | | color: #175997; |
| | | margin-right: 8px; |
| | | min-width: 24px; |
| | | } |
| | | ::v-deep.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label { |
| | | line-height: 17px; |
| | | font-size: 20px; |
| | | |
| | | .question-text { |
| | | flex: 1; |
| | | line-height: 1.5; |
| | | color: #2c3e50; |
| | | font-weight: 500; |
| | | } |
| | | ::v-deep.el-checkbox { |
| | | margin-right: 0px; |
| | | |
| | | .question-type-tag { |
| | | color: #3ba2f7; |
| | | font-size: 14px; |
| | | margin-left: 10px; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | .question-options { |
| | | margin: 15px 0; |
| | | } |
| | | |
| | | .options-group { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 12px; |
| | | } |
| | | |
| | | .option-radio, |
| | | .option-checkbox { |
| | | margin: 0; |
| | | padding: 12px 15px; |
| | | border-radius: 6px; |
| | | border: 1px solid #e0e0e0; |
| | | transition: all 0.2s; |
| | | |
| | | &:hover { |
| | | border-color: #c0c4cc; |
| | | background-color: #f8fafc; |
| | | } |
| | | } |
| | | |
| | | :deep(.option-radio .el-radio__label), |
| | | :deep(.option-checkbox .el-checkbox__label) { |
| | | display: flex; |
| | | align-items: center; |
| | | font-size: 16px; |
| | | } |
| | | |
| | | .option-text { |
| | | margin-right: 5px; |
| | | } |
| | | |
| | | .abnormal-indicator { |
| | | color: #f56c6c; |
| | | font-weight: bold; |
| | | } |
| | | |
| | | .abnormal-option { |
| | | :deep(.el-radio__inner) { |
| | | border-color: #f56c6c; |
| | | } |
| | | |
| | | :deep(.el-checkbox__inner) { |
| | | border-color: #f56c6c; |
| | | } |
| | | } |
| | | |
| | | .question-input { |
| | | margin: 15px 0; |
| | | } |
| | | |
| | | .answer-textarea { |
| | | :deep(.el-textarea__inner) { |
| | | font-size: 16px; |
| | | line-height: 1.5; |
| | | } |
| | | } |
| | | |
| | | .question-warning { |
| | | margin-top: 15px; |
| | | } |
| | | |
| | | .warning-alert { |
| | | :deep(.el-alert__title) { |
| | | font-size: 15px; |
| | | line-height: 1.4; |
| | | } |
| | | } |
| | | |
| | | .submit-section { |
| | | text-align: center; |
| | | padding: 20px 0 10px; |
| | | } |
| | | |
| | | .submit-button { |
| | | width: 100%; |
| | | max-width: 300px; |
| | | height: 50px; |
| | | font-size: 18px; |
| | | font-weight: 500; |
| | | border-radius: 8px; |
| | | background: linear-gradient(135deg, #175997 0%, #2a77c9 100%); |
| | | border: none; |
| | | box-shadow: 0 4px 12px rgba(23, 89, 151, 0.3); |
| | | transition: all 0.3s; |
| | | |
| | | &:hover { |
| | | transform: translateY(-2px); |
| | | box-shadow: 0 6px 16px rgba(23, 89, 151, 0.4); |
| | | } |
| | | |
| | | &:active { |
| | | transform: translateY(0); |
| | | } |
| | | } |
| | | |
| | | .completion-page { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | min-height: 70vh; |
| | | padding: 20px; |
| | | } |
| | | |
| | | .completion-content { |
| | | text-align: center; |
| | | max-width: 600px; |
| | | padding: 40px; |
| | | background: #ffffff; |
| | | border-radius: 12px; |
| | | box-shadow: 0 5px 20px rgba(0, 0, 0, 0.08); |
| | | } |
| | | |
| | | .completion-icon { |
| | | font-size: 80px; |
| | | color: #52c41a; |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .completion-title { |
| | | color: #175997; |
| | | font-size: 32px; |
| | | font-weight: 700; |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .completion-message { |
| | | font-size: 18px; |
| | | color: #5a6c84; |
| | | line-height: 1.6; |
| | | } |
| | | |
| | | /* ååºå¼è®¾è®¡ */ |
| | | @media (max-width: 768px) { |
| | | .content-wrapper { |
| | | padding: 0 10px; |
| | | } |
| | | |
| | | .questionnaire-container { |
| | | padding: 20px 15px; |
| | | } |
| | | |
| | | .questionnaire-title { |
| | | font-size: 24px; |
| | | } |
| | | |
| | | .questionnaire-description { |
| | | font-size: 16px; |
| | | } |
| | | |
| | | .question-stem { |
| | | font-size: 16px; |
| | | flex-direction: column; |
| | | align-items: flex-start; |
| | | } |
| | | |
| | | .question-type-tag { |
| | | margin-left: 0; |
| | | margin-top: 5px; |
| | | } |
| | | |
| | | .question-item { |
| | | padding: 15px; |
| | | } |
| | | |
| | | .completion-content { |
| | | padding: 30px 20px; |
| | | } |
| | | |
| | | .completion-title { |
| | | font-size: 28px; |
| | | } |
| | | |
| | | .completion-message { |
| | | font-size: 16px; |
| | | } |
| | | } |
| | | |
| | | @media (max-width: 480px) { |
| | | .questionnaire-title { |
| | | font-size: 22px; |
| | | } |
| | | |
| | | .completion-title { |
| | | font-size: 24px; |
| | | } |
| | | |
| | | .completion-icon { |
| | | font-size: 60px; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="100px"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="6"> |
| | | <el-form-item label="æ£è
å§å" prop="patientName"> |
| | | <el-form-item label="å¿ç«¥å§å" prop="patientName"> |
| | | <el-input |
| | | v-model="queryParams.patientName" |
| | | placeholder="请è¾å
¥æ£è
å§å" |
| | | placeholder="请è¾å
¥å¿ç«¥å§å" |
| | | clearable |
| | | @keyup.enter="handleQuery" |
| | | /> |
| | |
| | | style="width: 100%" |
| | | :default-sort="{prop: 'applyTime', order: 'descending'}" |
| | | > |
| | | <el-table-column label="æ£è
ä¿¡æ¯" min-width="200" fixed> |
| | | <el-table-column label="å¿ç«¥ä¿¡æ¯" min-width="200" fixed> |
| | | <template slot-scope="scope"> |
| | | <div class="patient-info"> |
| | | <div class="patient-name">{{ scope.row.patientName }}</div> |
| | | <div class="patient-detail"> |
| | | {{ scope.row.gender }} | {{ scope.row.age }}å² | {{ scope.row.phone }} |
| | | <div style="color: #909399; font-size: 12px; margin-top: 2px;"> |
| | | {{ scope.row.applicableAge }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | </el-table-column> |
| | | <el-table-column label="ç³è¯·æ¶é´" prop="applyTime" width="160" sortable /> |
| | | <el-table-column label="ææå»ç" prop="expectDoctor" width="120" /> |
| | | <el-table-column label="ç¹æ®è¦æ±" min-width="200"> |
| | | <el-table-column label="çæ¤äººè¦æ±" min-width="200"> |
| | | <template slot-scope="scope"> |
| | | <span v-if="scope.row.specialRequirements" :title="scope.row.specialRequirements"> |
| | | {{ scope.row.specialRequirements.substring(0, 30) }}... |
| | |
| | | type="textarea" |
| | | :rows="3" |
| | | v-model="reviewForm.rejectReason" |
| | | placeholder="请è¾å
¥é©³åçå
·ä½åå ï¼ä¾¿äºæ£è
äºè§£æ
åµ" |
| | | placeholder="请è¾å
¥é©³åçå
·ä½åå ï¼ä¾¿äºçæ¤äººäºè§£æ
åµ" |
| | | maxlength="200" |
| | | show-word-limit |
| | | /> |
| | |
| | | rejected: 0 |
| | | }, |
| | | availableDoctors: [ |
| | | { id: '1', name: 'çå»ç', department: 'å
ç§' }, |
| | | { id: '2', name: 'æå»ç', department: 'èå¹´ç§' }, |
| | | { id: '3', name: 'å¼ å»ç', department: 'å¦äº§ç§' }, |
| | | { id: '4', name: 'åå»ç', department: 'å¿ç§' }, |
| | | { id: '1', name: 'çå»ç', department: 'å¿ç§' }, |
| | | { id: '2', name: 'æå»ç', department: 'å¿ç«¥ä¿å¥ç§' }, |
| | | { id: '3', name: 'å¼ å»ç', department: 'å¿ç§' }, |
| | | { id: '4', name: 'åå»ç', department: 'å¿ç«¥è¥å
»ç§' }, |
| | | { id: '5', name: 'éå»ç', department: 'å
¨ç§' } |
| | | ], |
| | | // å¿ç«¥æå¡å¥é¤é
ç½® |
| | | servicePackages: { |
| | | '1': { name: 'åºç¡å¥åº·ç®¡çå
', color: 'info' }, |
| | | '2': { name: 'æ
¢æ§ç
管çå
', color: 'success' }, |
| | | '3': { name: 'è年人å¥åº·å
', color: 'warning' }, |
| | | '4': { name: 'å产å¦ä¿å¥å
', color: 'danger' }, |
| | | '5': { name: 'å¿ç«¥ä¿å¥å
', color: 'primary' } |
| | | '1': { |
| | | name: 'å©´å¹¼å¿å¥åº·åºç¡å
', |
| | | color: 'primary', |
| | | applicableAge: '0-3å²' |
| | | }, |
| | | '2': { |
| | | name: 'å¦é¾åå¿ç«¥å¥åº·å
', |
| | | color: 'success', |
| | | applicableAge: '3-6å²' |
| | | }, |
| | | '3': { |
| | | name: 'å¦é¾å¿ç«¥ç»¼åå¥åº·å
', |
| | | color: 'warning', |
| | | applicableAge: '7-12å²' |
| | | }, |
| | | '4': { |
| | | name: 'éå°å¹´å¥åº·æ¯æå
', |
| | | color: 'danger', |
| | | applicableAge: '13-18å²' |
| | | }, |
| | | '5': { |
| | | name: 'å¿ç«¥è¥å
»ä¸çé¿åè²å¢å¼å
', |
| | | color: 'info', |
| | | applicableAge: '3-18å²' |
| | | }, |
| | | '6': { |
| | | name: 'å¿ç«¥ä¸å»ç¹è²ä¿å¥å
', |
| | | color: 'primary', |
| | | applicableAge: '0-6å²' |
| | | } |
| | | }, |
| | | rules: { |
| | | rejectReason: [ |
| | |
| | | this.calculateStats() |
| | | }, |
| | | methods: { |
| | | //ä¼ååçæ¨¡ææ°æ®çææ¹æ³ |
| | | generateMockData() { |
| | | const mockData = [] |
| | | // çææ¨¡ææ°æ® |
| | | generateMockData() { |
| | | const mockData = [] |
| | | |
| | | // ä½¿ç¨æ¨æä¾ççå®å§åå表 |
| | | const patientNames = [ |
| | | 'æèè¬', '墿¨ä»²', 'ææç½', 'æ¹å
ç', 'åç¿æ ', '䏿±è»', 'å´ä½³ç', 'è绿ç®', |
| | | 'å¨ç½è·', 'å¼ å§¿å¦¤', 'å¼ è¹ä¼¦', 'å¨ç¼ç', 'åªæ¡è³', 'éè´µå¦', 'æ¨ä½©è³', '黿æº', |
| | | 'é»çç«', 'é丽é', '许æºäº', 'å¼ åæ¶µ', 'æå°ç±', 'çæ©é¾', 'æ±æ¿å»·', 'éè¯æ¶µ', |
| | | 'éæ¿å©', 'å´ä¿ä¼¯', 'é®é¦¨å¦', 'ç¿æ ç ', 'å´æç¿°', 'æä½©ç²' |
| | | ] |
| | | // 使ç¨å¿ç«¥å§åå表 |
| | | const patientNames = [ |
| | | 'æå°å®', 'å¼ å°æ', 'ç鍿¬£', 'åæµ©ç¶', 'éæçª', 'æ¨å®èª', 'é»è¯æ¶µ', '赵天å®', |
| | | 'å¨å°è', 'å´ä¿æ°', 'éé
é¯', 'åæ²è¾°', 'æ±é¨è±', '马浩å®', 'è¡å¯é¦¨', 'æä¿ç', |
| | | 'éå轩', '使¬£æ¡', 'é«å¤©ä½', 'æ¢éæ¡', 'ç½æµ©ç¶', 'å®é¨æ³½', 'åè¯å«£', '许åæ', |
| | | '谢欣å¦', 'å¯åé»', 'è£é¨æ¡', 'è§å¤©ä¹', 'æ¹å¿æ¡', 'è¢å豪' |
| | | ] |
| | | |
| | | const specialReqs = [ |
| | | '叿å»çè½å®æä¸é¨æ£æ¥', |
| | | 'éè¦å¨æ«æ¶é´æ®µçæå¡', |
| | | '对è¯ç©æè¿æå²ï¼éç¹å«æ³¨æ', |
| | | 'è¡å¨ä¸ä¾¿ï¼éè¦ä¸é¨æå¡', |
| | | 'æ ç¹æ®è¦æ±', |
| | | 'éè¦è±è¯æå¡æ¯æ', |
| | | 'æé«è¡åç
å²ï¼ééç¹å
³æ³¨', |
| | | 'éè¦å®æè¡ç³çæµæå¡', |
| | | '叿æåºå®çå®¶åºå»ç', |
| | | 'éè¦å¿çç导æå¡' |
| | | ] |
| | | const specialReqs = [ |
| | | '叿å»çè½å®æä¸é¨æ£æ¥', |
| | | 'éè¦å¨æ«æ¶é´æ®µçæå¡', |
| | | '对è¯ç©æè¿æå²ï¼éç¹å«æ³¨æ', |
| | | 'è¡å¨ä¸ä¾¿ï¼éè¦ä¸é¨æå¡', |
| | | 'æ ç¹æ®è¦æ±', |
| | | 'éè¦è±è¯æå¡æ¯æ', |
| | | 'æå®åç
å²ï¼ééç¹å
³æ³¨', |
| | | 'éè¦å®æçé¿åè²çæµ', |
| | | '叿æåºå®çå¿ç§å»ç', |
| | | 'éè¦ç«èæ¥ç§æéæå¡' |
| | | ] |
| | | |
| | | const rejectReasons = [ |
| | | 'èµæä¸å®æ´ï¼è¯·è¡¥å
å¥åº·æ¡£æ¡', |
| | | 'ä¸ç¬¦åå½åç¾çº¦æ¡ä»¶', |
| | | 'éæ©çå»çæ¡£æå·²æ»¡', |
| | | 'æå¡å¥é¤ä¸ç
æ
ä¸å¹é
', |
| | | 'å¹´é¾ä¸ç¬¦åå¥é¤è¦æ±', |
| | | '请补å
宿´çç
å²èµæ' |
| | | ] |
| | | const rejectReasons = [ |
| | | 'çæ¤äººèµæä¸å®æ´ï¼è¯·è¡¥å
èº«ä»½è¯æ', |
| | | 'å¿ç«¥å¹´é¾ä¸ç¬¦åå¥é¤è¦æ±', |
| | | 'éæ©çå»çä¸é¿ä¸å¿ç«¥éæ±ä¸å¹é
', |
| | | 'æå¡å¥é¤ä¸å¿ç«¥å¥åº·ç¶åµä¸å¹é
', |
| | | '请补å
宿´çå¿ç«¥å¥åº·æ¡£æ¡', |
| | | 'ç«èæ¥ç§è®°å½ä¸å®æ´' |
| | | ] |
| | | |
| | | // çæçº¦30æ¡æ°æ®ï¼ä¸å§åæ°éå¹é
ï¼ |
| | | for (let i = 0; i < patientNames.length; i++) { |
| | | const packageId = (i % 5) + 1 + '' |
| | | const reviewStatus = i % 3 // 0:å¾
å®¡æ ¸, 1:éè¿, 2:驳å |
| | | const applyDate = this.generateRandomDate('2024-10-01', '2024-12-08') |
| | | for (let i = 0; i < patientNames.length; i++) { |
| | | const packageId = (i % 6) + 1 + '' |
| | | const packageInfo = this.servicePackages[packageId] |
| | | const reviewStatus = i % 3 // 0:å¾
å®¡æ ¸, 1:éè¿, 2:驳å |
| | | const applyDate = this.generateRandomDate('2024-10-01', '2024-12-08') |
| | | |
| | | // çææ´çå®ççµè¯å·ç |
| | | const phonePrefix = ['138', '139', '150', '151', '152', '186', '187', '188'] |
| | | const phone = `${phonePrefix[i % phonePrefix.length]}${this.padNumber(1000 + i * 37, 4)}${this.padNumber(i % 100, 2)}` |
| | | // æ ¹æ®å¥é¤éç¨å¹´é¾çæåççå®é
å¹´é¾ |
| | | let age |
| | | switch(packageInfo.applicableAge) { |
| | | case '0-3å²': |
| | | age = Math.floor(Math.random() * 3) + 1 |
| | | break |
| | | case '3-6å²': |
| | | age = Math.floor(Math.random() * 3) + 3 |
| | | break |
| | | case '7-12å²': |
| | | age = Math.floor(Math.random() * 6) + 7 |
| | | break |
| | | case '13-18å²': |
| | | age = Math.floor(Math.random() * 6) + 13 |
| | | break |
| | | default: |
| | | age = Math.floor(Math.random() * 18) + 1 |
| | | } |
| | | |
| | | // çæåççå¹´é¾ï¼0-80å²ï¼ |
| | | const age = i % 80 |
| | | const gender = i % 2 === 0 ? 'ç·' : '女' |
| | | // çæçæ¤äººçµè¯å·ç |
| | | const phonePrefix = ['138', '139', '150', '151', '152', '186', '187', '188'] |
| | | const phone = `${phonePrefix[i % phonePrefix.length]}${this.padNumber(1000 + i * 37, 4)}${this.padNumber(i % 100, 2)}` |
| | | |
| | | mockData.push({ |
| | | id: `A${2024000 + i}`, |
| | | patientName: patientNames[i], |
| | | gender: gender, |
| | | age: age, |
| | | phone: phone, |
| | | servicePackageId: packageId, |
| | | servicePackage: this.servicePackages[packageId].name, |
| | | services: this.getServicesByPackage(packageId), |
| | | contractPeriod: [1, 2][i % 2], |
| | | applyTime: `${applyDate} ${this.padNumber(8 + (i % 10), 2)}:${this.padNumber(i % 60, 2)}:${this.padNumber(i % 60, 2)}`, |
| | | expectDoctor: ['çå»ç', 'æå»ç', 'å¼ å»ç', 'åå»ç', 'éå»ç'][i % 5], |
| | | specialRequirements: specialReqs[i % specialReqs.length], |
| | | reviewStatus: reviewStatus, |
| | | reviewer: reviewStatus !== 0 ? ['管çå', 'ç³»ç»ç®¡çå', 'å®¡æ ¸ä¸å'][i % 3] : '', |
| | | reviewTime: reviewStatus !== 0 ? |
| | | `${this.addDays(applyDate, 1 + (i % 3))} 14:${this.padNumber(i % 60, 2)}:00` : '', |
| | | rejectReason: reviewStatus === 2 ? rejectReasons[i % rejectReasons.length] : '' |
| | | }) |
| | | } |
| | | mockData.push({ |
| | | id: `A${2024000 + i}`, |
| | | patientName: patientNames[i], |
| | | gender: i % 2 === 0 ? 'ç·' : '女', |
| | | age: age, |
| | | phone: phone, |
| | | servicePackageId: packageId, |
| | | servicePackage: packageInfo.name, |
| | | services: this.getServicesByPackage(packageId), |
| | | contractPeriod: [1, 2][i % 2], |
| | | applicableAge: packageInfo.applicableAge, |
| | | applyTime: `${applyDate} ${this.padNumber(8 + (i % 10), 2)}:${this.padNumber(i % 60, 2)}:${this.padNumber(i % 60, 2)}`, |
| | | expectDoctor: ['çå»ç', 'æå»ç', 'å¼ å»ç', 'åå»ç', 'éå»ç'][i % 5], |
| | | specialRequirements: specialReqs[i % specialReqs.length], |
| | | reviewStatus: reviewStatus, |
| | | reviewer: reviewStatus !== 0 ? ['管çå', 'ç³»ç»ç®¡çå', 'å®¡æ ¸ä¸å'][i % 3] : '', |
| | | reviewTime: reviewStatus !== 0 ? |
| | | `${this.addDays(applyDate, 1 + (i % 3))} 14:${this.padNumber(i % 60, 2)}:00` : '', |
| | | rejectReason: reviewStatus === 2 ? rejectReasons[i % rejectReasons.length] : '' |
| | | }) |
| | | } |
| | | |
| | | return mockData |
| | | }, |
| | | return mockData |
| | | }, |
| | | |
| | | // æ ¹æ®å¥é¤è·åæå¡å表 |
| | | getServicesByPackage(packageId) { |
| | | const servicesMap = { |
| | | '1': ['年度å¥åº·è¯ä¼°', 'å¨çº¿å¥åº·å¨è¯¢', 'å¥åº·æ¡£æ¡ç®¡ç', '宿å¥åº·æé'], |
| | | '2': ['ä¸å±å»çæå¡', 'ç¨è¯æå¯¼ç®¡ç', '宿éè®¿çæµ', '个æ§å康å¤è®¡å', 'ç´§æ¥å»çå¨è¯¢'], |
| | | '3': ['è·åé£é©è¯ä¼°', '康å¤è®ç»æå¯¼', 'ç¨è¯å®å
¨ç®¡ç', '宿ä¸é¨è®¿è§', 'ç´§æ¥èç³»æå¡', 'å¿çå¥åº·å
³æ'], |
| | | '4': ['åæå¥åº·ç®¡ç', '产ååº·å¤æå¯¼', 'æ°çå¿æ¤çå¨è¯¢', 'è¥å
»è³é£å»ºè®®', 'å¿çæ
ç»ªæ¯æ'], |
| | | '5': ['çé¿åè²çæµ', 'ç«èæ¥ç§ç®¡ç', '常è§ç
鲿²»', 'è¥å
»æå¯¼', 'æ©ææè²å¨è¯¢'] |
| | | } |
| | | return servicesMap[packageId] || [] |
| | | }, |
| | | // æ ¹æ®å¥é¤è·åæå¡å表 |
| | | getServicesByPackage(packageId) { |
| | | const servicesMap = { |
| | | '1': ['æ°çå¿å®¶åºè®¿è§', '宿使 ¼æ£æ¥ä¸åè²è¯ä¼°', 'è¡å¸¸è§æ£æµ', 'å¬åçæ¥', 'åå
»ä¸æ¤çæå¯¼', 'é¢é²æ¥ç§æå¡', 'ä¸å»ä¿å¥æå¯¼'], |
| | | '2': ['çé¿åè²è¯ä¼°', 'è§åçæ¥ä¸å£è
ä¿å¥', 'è¡å¸¸è§æ£æ¥', 'åçè³é£ä¸è¡ä¸ºæå¯¼', 'ç¾ç
é¢é²ä¸å¥åº·å¹²é¢', 'ä¸å»é¥®é£è°å
»æå¯¼'], |
| | | '3': ['年度å¥åº·æ£æ¥', 'å¿çè¡ä¸ºåè²è¯ä¼°', 'ç§å¦ç¨ç¼ä¸å£è
ä¿å¥', 'åçè³é£æå¯¼', 'å¥åº·çæ´»æ¹å¼å¹²é¢', 'ä¸å®¶è½¬è¯ç»¿è²éé'], |
| | | '4': ['鿥æå¥åº·æè²', '年度å¥åº·è¯ä¼°', 'å¿çå¥åº·æ¯æ', 'å¥åº·é£é©è¡ä¸ºå¹²é¢', '个æ§åå¥åº·æ¹æ¡', 'ä¼å
é¢çº¦æ£æ¥æå¡'], |
| | | '5': ['å¾®éå
ç´ æµå®', '骨å¯åº¦æ£æµ', '个æ§åè³é£æ¹æ¡', 'çé¿åè²ä¸é¡¹è¯ä¼°', 'è¿å¨å¤æ¹æå¯¼', '宿è¥å
»çæµ'], |
| | | '6': ['ä¸å»ä½è´¨è¾¨è¯', 'ä¸ä¼è´´æå¡', 'å°å¿æ¨æ¿', 'è³ç©´æ²»ç', '鲿é¦å', 'é£çæå¯¼'] |
| | | } |
| | | return servicesMap[packageId] || [] |
| | | }, |
| | | |
| | | // è¾
婿¹æ³ï¼çæéæºæ¥æ |
| | | generateRandomDate(start, end) { |
| | | const startDate = new Date(start).getTime() |
| | | const endDate = new Date(end).getTime() |
| | | const randomTime = startDate + Math.random() * (endDate - startDate) |
| | | return new Date(randomTime).toISOString().split('T')[0] |
| | | }, |
| | | // è¾
婿¹æ³ï¼çæéæºæ¥æ |
| | | generateRandomDate(start, end) { |
| | | const startDate = new Date(start).getTime() |
| | | const endDate = new Date(end).getTime() |
| | | const randomTime = startDate + Math.random() * (endDate - startDate) |
| | | return new Date(randomTime).toISOString().split('T')[0] |
| | | }, |
| | | |
| | | // è¾
婿¹æ³ï¼æ·»å å¤©æ° |
| | | addDays(date, days) { |
| | | const result = new Date(date) |
| | | result.setDate(result.getDate() + days) |
| | | return result.toISOString().split('T')[0] |
| | | }, |
| | | // è¾
婿¹æ³ï¼æ·»å å¤©æ° |
| | | addDays(date, days) { |
| | | const result = new Date(date) |
| | | result.setDate(result.getDate() + days) |
| | | return result.toISOString().split('T')[0] |
| | | }, |
| | | |
| | | // è¾
婿¹æ³ï¼æ°åè¡¥é¶ |
| | | padNumber(num, length) { |
| | | return num.toString().padStart(length, '0') |
| | | }, |
| | | // è¾
婿¹æ³ï¼æ°åè¡¥é¶ |
| | | padNumber(num, length) { |
| | | return num.toString().padStart(length, '0') |
| | | }, |
| | | |
| | | // è·åå®¡æ ¸å表 [1](@ref) |
| | | // è·åå®¡æ ¸å表 |
| | | async getList() { |
| | | this.loading = true |
| | | try { |
| | |
| | | this.stats.rejected = allData.filter(item => item.reviewStatus === 2).length |
| | | }, |
| | | |
| | | // è·åå®¡æ ¸ç¶æææ¬ [2](@ref) |
| | | // è·åå®¡æ ¸ç¶æææ¬ |
| | | getReviewStatusText(status) { |
| | | const statusMap = { 0: 'å¾
å®¡æ ¸', 1: 'å®¡æ ¸éè¿', 2: 'å®¡æ ¸é©³å' } |
| | | return statusMap[status] || 'æªç¥' |
| | |
| | | |
| | | // è·åå¥é¤ç±»å |
| | | getPackageType(packageId) { |
| | | const typeMap = { '1': 'info', '2': 'success', '3': 'warning', '4': 'danger', '5': 'primary' } |
| | | const typeMap = { |
| | | '1': 'primary', '2': 'success', '3': 'warning', |
| | | '4': 'danger', '5': 'info', '6': 'primary' |
| | | } |
| | | return typeMap[packageId] || 'info' |
| | | }, |
| | | |
| | | // æç´¢æä½ [1](@ref) |
| | | // æç´¢æä½ |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1 |
| | | this.getList() |
| | |
| | | this.handleQuery() |
| | | }, |
| | | |
| | | // å¤çå®¡æ ¸æä½ [2](@ref) |
| | | // å¤çå®¡æ ¸æä½ |
| | | handleReview(row, status) { |
| | | this.currentRow = row |
| | | this.reviewForm = { |
| | |
| | | } |
| | | this.reviewDialogVisible = true |
| | | |
| | | // æ¸
é¤è¡¨åéªè¯ |
| | | this.$nextTick(() => { |
| | | if (this.$refs.reviewFormRef) { |
| | | this.$refs.reviewFormRef.clearValidate() |
| | |
| | | }) |
| | | }, |
| | | |
| | | // æäº¤å®¡æ ¸ [2,6](@ref) |
| | | // æäº¤å®¡æ ¸ |
| | | async submitReview() { |
| | | try { |
| | | // 表åéªè¯ |
| | | if (this.reviewForm.reviewStatus === 2) { |
| | | if (!this.reviewForm.rejectReason) { |
| | | this.$message.error('请填å驳ååå ') |
| | |
| | | return |
| | | } |
| | | |
| | | // 模æAPIè°ç¨ |
| | | await new Promise(resolve => setTimeout(resolve, 1000)) |
| | | |
| | | // æ´æ°å½åè¡çç¶æ |
| | | const currentIndex = this.reviewList.findIndex(item => item.id === this.currentRow.id) |
| | | if (currentIndex !== -1) { |
| | | this.reviewList[currentIndex].reviewStatus = this.reviewForm.reviewStatus |
| | |
| | | this.reviewList[currentIndex].reviewTime = new Date().toLocaleString() |
| | | this.reviewList[currentIndex].rejectReason = this.reviewForm.rejectReason |
| | | |
| | | // å¦æå®¡æ ¸éè¿ï¼åé
å»ç |
| | | if (this.reviewForm.reviewStatus === 1) { |
| | | const doctor = this.availableDoctors.find(d => d.id === this.reviewForm.assignDoctor) |
| | | this.reviewList[currentIndex].expectDoctor = doctor ? doctor.name : this.reviewList[currentIndex].expectDoctor |
| | |
| | | |
| | | this.$message.success(this.reviewForm.reviewStatus === 1 ? 'å®¡æ ¸éè¿æå' : 'å®¡æ ¸é©³åæå') |
| | | this.reviewDialogVisible = false |
| | | this.calculateStats() // éæ°è®¡ç®ç»è®¡ä¿¡æ¯ |
| | | this.calculateStats() |
| | | } catch (error) { |
| | | console.error('å®¡æ ¸æä½å¤±è´¥:', error) |
| | | this.$message.error('å®¡æ ¸æä½å¤±è´¥') |
| | |
| | | |
| | | // æ¥ç详æ
|
| | | handleView(row) { |
| | | this.$message.info(`æ¥çæ£è
${row.patientName} çç³è¯·è¯¦æ
`) |
| | | // å®é
å¼åä¸è·³è½¬å°è¯¦æ
页 |
| | | // this.$router.push({ path: '/patient/contract/apply-detail', query: { id: row.id } }) |
| | | }, |
| | | |
| | | // æ¹éå®¡æ ¸éè¿ |
| | | handleBatchApprove() { |
| | | const pendingItems = this.reviewList.filter(item => item.reviewStatus === 0) |
| | | if (pendingItems.length === 0) { |
| | | this.$message.warning('没æå¾
å®¡æ ¸çç³è¯·') |
| | | return |
| | | } |
| | | |
| | | this.$confirm(`ç¡®å®è¦æ¹ééè¿ ${pendingItems.length} 个å¾
å®¡æ ¸ç³è¯·åï¼`, 'æ¹éå®¡æ ¸', { |
| | | type: 'warning' |
| | | }).then(async () => { |
| | | try { |
| | | this.loading = true |
| | | // æ¨¡ææ¹éå®¡æ ¸APIè°ç¨ |
| | | await new Promise(resolve => setTimeout(resolve, 2000)) |
| | | |
| | | // æ´æ°ææå¾
å®¡æ ¸é¡¹çç¶æ |
| | | pendingItems.forEach(item => { |
| | | item.reviewStatus = 1 |
| | | item.reviewer = 'å½åç¨æ·' |
| | | item.reviewTime = new Date().toLocaleString() |
| | | }) |
| | | |
| | | this.$message.success(`æ¹éå®¡æ ¸éè¿æåï¼å
±å¤ç ${pendingItems.length} 个ç³è¯·`) |
| | | this.calculateStats() |
| | | } catch (error) { |
| | | this.$message.error('æ¹éå®¡æ ¸å¤±è´¥') |
| | | } finally { |
| | | this.loading = false |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºå®¡æ ¸æ°æ® |
| | | handleExport() { |
| | | const exportData = this.generateMockData() |
| | | // å®é
å¼åä¸è¿éåºè¯¥è°ç¨å¯¼åºAPI |
| | | console.log('å¯¼åºæ°æ®:', exportData) |
| | | this.$message.info('导åºåè½å¼åä¸ï¼æ°æ®å·²æå°å°æ§å¶å°') |
| | | this.$message.info(`æ¥çå¿ç«¥ ${row.patientName} çç³è¯·è¯¦æ
`) |
| | | } |
| | | }, |
| | | watch: { |
| | | // çå¬å®¡æ ¸ç¶æååï¼å¨æè®¾ç½®éªè¯è§å [6](@ref) |
| | | 'reviewForm.reviewStatus': function(newVal) { |
| | | this.$nextTick(() => { |
| | | if (this.$refs.reviewFormRef) { |
| | |
| | | .patient-detail { |
| | | font-size: 12px; |
| | | color: #909399; |
| | | line-height: 1.4; |
| | | } |
| | | } |
| | | |
| | | // å®¡æ ¸ç¶ææ ·å¼ |
| | | .review-status { |
| | | padding: 4px 8px; |
| | | border-radius: 4px; |
| | | font-size: 12px; |
| | | font-weight: 500; |
| | | |
| | | &.status-pending { |
| | | background: #fdf6ec; |
| | | color: #e6a23c; |
| | | } |
| | | |
| | | &.status-approved { |
| | | background: #f0f9e8; |
| | | color: #67c23a; |
| | | } |
| | | |
| | | &.status-rejected { |
| | | background: #fef0f0; |
| | | color: #f56c6c; |
| | | } |
| | | } |
| | | |
| | | // ç¹æ®è¦æ±ææ¬æ ·å¼ |
| | | .special-requirements { |
| | | max-width: 200px; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | white-space: nowrap; |
| | | |
| | | &:hover { |
| | | white-space: normal; |
| | | overflow: visible; |
| | | background: white; |
| | | box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); |
| | | padding: 8px; |
| | | border-radius: 4px; |
| | | position: absolute; |
| | | z-index: 1000; |
| | | max-width: 300px; |
| | | } |
| | | } |
| | | |
| | | // è¡¨æ ¼æ ·å¼ |
| | | // è¡¨æ ¼æ ·å¼ä¼å |
| | | ::v-deep .el-table { |
| | | .el-table__header-wrapper { |
| | | th { |
| | |
| | | } |
| | | } |
| | | |
| | | // å®¡æ ¸å¯¹è¯æ¡æ ·å¼ |
| | | .review-dialog { |
| | | ::v-deep .el-dialog { |
| | | border-radius: 8px; |
| | | box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); |
| | | } |
| | | |
| | | .dialog-footer { |
| | | text-align: right; |
| | | margin-top: 20px; |
| | | } |
| | | } |
| | | |
| | | // æä½æé®æ ·å¼ |
| | | .action-buttons { |
| | | display: flex; |
| | | gap: 8px; |
| | | |
| | | .el-button { |
| | | padding: 7px 12px; |
| | | border-radius: 4px; |
| | | font-size: 12px; |
| | | |
| | | &.approve-btn { |
| | | background: #67c23a; |
| | | border-color: #67c23a; |
| | | color: white; |
| | | |
| | | &:hover { |
| | | background: #5daf34; |
| | | border-color: #5daf34; |
| | | } |
| | | } |
| | | |
| | | &.reject-btn { |
| | | background: #f56c6c; |
| | | border-color: #f56c6c; |
| | | color: white; |
| | | |
| | | &:hover { |
| | | background: #e65c5c; |
| | | border-color: #e65c5c; |
| | | } |
| | | } |
| | | |
| | | &.detail-btn { |
| | | color: #409eff; |
| | | border-color: #409eff; |
| | | |
| | | &:hover { |
| | | background: #ecf5ff; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // æ¹éæä½æ |
| | | .batch-actions { |
| | | background: #ecf5ff; |
| | | padding: 12px 20px; |
| | | margin-bottom: 16px; |
| | | border-radius: 4px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | |
| | | .batch-info { |
| | | color: #409eff; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | |
| | | // ç©ºç¶ææ ·å¼ |
| | | .empty-state { |
| | | text-align: center; |
| | | padding: 40px 20px; |
| | | color: #909399; |
| | | |
| | | .empty-icon { |
| | | font-size: 48px; |
| | | margin-bottom: 16px; |
| | | opacity: 0.5; |
| | | } |
| | | |
| | | .empty-text { |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | |
| | | // ååºå¼è®¾è®¡ |
| | | @media (max-width: 768px) { |
| | | padding: 10px; |
| | |
| | | .el-col { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | |
| | | .action-buttons { |
| | | flex-direction: column; |
| | | } |
| | | |
| | | .batch-actions { |
| | | flex-direction: column; |
| | | gap: 10px; |
| | | align-items: stretch; |
| | | } |
| | | } |
| | | } |
| | |
| | | <el-col :span="6"> |
| | | <el-form-item label="æå¡å¥é¤" prop="servicePackage"> |
| | | <el-select v-model="queryParams.servicePackage" placeholder="è¯·éæ©å¥é¤" clearable> |
| | | <el-option label="åºç¡å¥åº·ç®¡çå
" value="1" /> |
| | | <el-option label="æ
¢æ§ç
管çå
" value="2" /> |
| | | <el-option label="è年人å¥åº·å
" value="3" /> |
| | | <el-option label="å产å¦ä¿å¥å
" value="4" /> |
| | | <el-option label="å¿ç«¥ä¿å¥å
" value="5" /> |
| | | <el-option |
| | | v-for="pkg in packageOptions" |
| | | :key="pkg.id" |
| | | :label="pkg.name" |
| | | :value="pkg.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <el-card class="stats-card" shadow="hover"> |
| | | <div class="stats-content"> |
| | | <div class="stats-number">{{ stats.total }}</div> |
| | | <div class="stats-label">æ»ç¾çº¦æ£è
</div> |
| | | <div class="stats-label">æ»ç¾çº¦å¿ç«¥</div> |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | |
| | | :default-sort="{prop: 'signDate', order: 'descending'}" |
| | | > |
| | | <el-table-column type="selection" width="55" /> |
| | | <el-table-column label="æ£è
ä¿¡æ¯" min-width="180" fixed> |
| | | <el-table-column label="å¿ç«¥ä¿¡æ¯" min-width="180" fixed> |
| | | <template slot-scope="scope"> |
| | | <div class="patient-info"> |
| | | <div class="patient-name">{{ scope.row.patientName }}</div> |
| | | <div class="patient-detail"> |
| | | {{ scope.row.gender }} | {{ scope.row.age }}å² | {{ scope.row.phone }} |
| | | <div style="color: #909399; font-size: 12px; margin-top: 2px;"> |
| | | {{ scope.row.applicableAge }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | }, |
| | | total: 0, |
| | | patientList: [], |
| | | // æå¡å¥é¤é
ç½® |
| | | // å¿ç«¥æå¡å¥é¤é
ç½® [1,3,5](@ref) |
| | | servicePackages: { |
| | | '1': { |
| | | name: 'åºç¡å¥åº·ç®¡çå
', |
| | | services: ['年度å¥åº·è¯ä¼°', 'å¨çº¿å¥åº·å¨è¯¢', 'å¥åº·æ¡£æ¡ç®¡ç', '宿å¥åº·æé'], |
| | | name: 'å©´å¹¼å¿å¥åº·åºç¡å
', |
| | | description: '为0-3å²å©´å¹¼å¿æä¾å
¨é¢çå¥åº·çæµä¸åè²æå¯¼', |
| | | services: ['æ°çå¿å®¶åºè®¿è§', '宿使 ¼æ£æ¥ä¸åè²è¯ä¼°', 'è¡å¸¸è§æ£æµ', 'å¬åçæ¥', 'åå
»ä¸æ¤çæå¯¼', 'é¢é²æ¥ç§æå¡', 'ä¸å»ä¿å¥æå¯¼'], |
| | | price: 0, |
| | | color: 'info' |
| | | color: 'primary', |
| | | applicableAge: '0-3å²' |
| | | }, |
| | | '2': { |
| | | name: 'æ
¢æ§ç
管çå
', |
| | | services: ['ä¸å±å»çæå¡', 'ç¨è¯æå¯¼ç®¡ç', '宿éè®¿çæµ', '个æ§å康å¤è®¡å', 'ç´§æ¥å»çå¨è¯¢'], |
| | | price: 299, |
| | | color: 'success' |
| | | name: 'å¦é¾åå¿ç«¥å¥åº·å
', |
| | | description: 'å
³æ³¨3-6å²å¿ç«¥çé¿åè²ã常è§ç
é¢é²åä¹ æ¯å
Ⱦ', |
| | | services: ['çé¿åè²è¯ä¼°', 'è§åçæ¥ä¸å£è
ä¿å¥', 'è¡å¸¸è§æ£æ¥', 'åçè³é£ä¸è¡ä¸ºæå¯¼', 'ç¾ç
é¢é²ä¸å¥åº·å¹²é¢', 'ä¸å»é¥®é£è°å
»æå¯¼'], |
| | | price: 0, |
| | | color: 'success', |
| | | applicableAge: '3-6å²' |
| | | }, |
| | | '3': { |
| | | name: 'è年人å¥åº·å
', |
| | | services: ['è·åé£é©è¯ä¼°', '康å¤è®ç»æå¯¼', 'ç¨è¯å®å
¨ç®¡ç', '宿ä¸é¨è®¿è§', 'ç´§æ¥èç³»æå¡', 'å¿çå¥åº·å
³æ'], |
| | | price: 499, |
| | | color: 'warning' |
| | | name: 'å¦é¾å¿ç«¥ç»¼åå¥åº·å
', |
| | | description: '为7-12å²å¿ç«¥æä¾å¦ä¹ æå¥åº·ä¿éä¸å屿¯æ', |
| | | services: ['年度å¥åº·æ£æ¥', 'å¿çè¡ä¸ºåè²è¯ä¼°', 'ç§å¦ç¨ç¼ä¸å£è
ä¿å¥', 'åçè³é£æå¯¼', 'å¥åº·çæ´»æ¹å¼å¹²é¢', 'ä¸å®¶è½¬è¯ç»¿è²éé'], |
| | | price: 0, |
| | | color: 'warning', |
| | | applicableAge: '7-12å²' |
| | | }, |
| | | '4': { |
| | | name: 'å产å¦ä¿å¥å
', |
| | | services: ['åæå¥åº·ç®¡ç', '产ååº·å¤æå¯¼', 'æ°çå¿æ¤çå¨è¯¢', 'è¥å
»è³é£å»ºè®®', 'å¿çæ
ç»ªæ¯æ'], |
| | | price: 399, |
| | | color: 'danger' |
| | | name: 'éå°å¹´å¥åº·æ¯æå
', |
| | | description: 'é对13-18å²éå°å¹´éæ¥æç¹ç¹çå¥åº·ç®¡ç', |
| | | services: ['鿥æå¥åº·æè²', '年度å¥åº·è¯ä¼°', 'å¿çå¥åº·æ¯æ', 'å¥åº·é£é©è¡ä¸ºå¹²é¢', '个æ§åå¥åº·æ¹æ¡', 'ä¼å
é¢çº¦æ£æ¥æå¡'], |
| | | price: 0, |
| | | color: 'danger', |
| | | applicableAge: '13-18å²' |
| | | }, |
| | | '5': { |
| | | name: 'å¿ç«¥ä¿å¥å
', |
| | | services: ['çé¿åè²çæµ', 'ç«èæ¥ç§ç®¡ç', '常è§ç
鲿²»', 'è¥å
»æå¯¼', 'æ©ææè²å¨è¯¢'], |
| | | price: 199, |
| | | color: 'primary' |
| | | name: 'å¿ç«¥è¥å
»ä¸çé¿åè²å¢å¼å
', |
| | | description: 'é对è¥èãè¥å
»ä¸è¯çé®é¢çä¸é¡¹ç®¡ç', |
| | | services: ['å¾®éå
ç´ æµå®', '骨å¯åº¦æ£æµ', '个æ§åè³é£æ¹æ¡', 'çé¿åè²ä¸é¡¹è¯ä¼°', 'è¿å¨å¤æ¹æå¯¼', '宿è¥å
»çæµ'], |
| | | price: 150, |
| | | color: 'info', |
| | | applicableAge: '3-18å²' |
| | | }, |
| | | '6': { |
| | | name: 'å¿ç«¥ä¸å»ç¹è²ä¿å¥å
', |
| | | description: 'è¿ç¨ä¸å»è¯æ¹æ³å¢å¼ºå¿ç«¥ä½è´¨', |
| | | services: ['ä¸å»ä½è´¨è¾¨è¯', 'ä¸ä¼è´´æå¡', 'å°å¿æ¨æ¿', 'è³ç©´æ²»ç', '鲿é¦å', 'é£çæå¯¼'], |
| | | price: 200, |
| | | color: 'primary', |
| | | applicableAge: '0-6å²' |
| | | } |
| | | } |
| | | }, |
| | | packageOptions: [] |
| | | } |
| | | }, |
| | | created() { |
| | | this.initPackageOptions() |
| | | this.getList() |
| | | this.calculateStats() |
| | | }, |
| | | methods: { |
| | | // çææ´çå®çæ¨¡ææ°æ® |
| | | // ç²¾ç®åçæ¨¡ææ°æ®çææ¹æ³ |
| | | // ä¼ååçæ¨¡ææ°æ®çææ¹æ³ |
| | | generateMockData() { |
| | | const mockData = [] |
| | | // åå§åå¥é¤é项 |
| | | initPackageOptions() { |
| | | this.packageOptions = Object.keys(this.servicePackages).map(key => ({ |
| | | id: key, |
| | | name: this.servicePackages[key].name |
| | | })) |
| | | }, |
| | | |
| | | // ä½¿ç¨æ¨æä¾ççå®å§åå表 |
| | | const patientNames = [ |
| | | 'æèè¬', '墿¨ä»²', 'ææç½', 'æ¹å
ç', 'åç¿æ ', '䏿±è»', 'å´ä½³ç', 'è绿ç®', |
| | | 'å¨ç½è·', 'å¼ å§¿å¦¤', 'å¼ è¹ä¼¦', 'å¨ç¼ç', 'åªæ¡è³', 'éè´µå¦', 'æ¨ä½©è³', '黿æº', |
| | | 'é»çç«', 'é丽é', '许æºäº', 'å¼ åæ¶µ', 'æå°ç±', 'çæ©é¾', 'æ±æ¿å»·', 'éè¯æ¶µ', |
| | | 'éæ¿å©', 'å´ä¿ä¼¯', 'é®é¦¨å¦', 'ç¿æ ç ', 'å´æç¿°', 'æä½©ç²' |
| | | ] |
| | | // çææ¨¡ææ°æ® |
| | | generateMockData() { |
| | | const mockData = [] |
| | | |
| | | const doctors = ['çå»ç', 'æå»ç', 'å¼ å»ç', 'åå»ç', 'éå»ç'] |
| | | const cities = ['å京å¸', '䏿µ·å¸', '广å·å¸', 'æ·±å³å¸', 'æå·å¸', 'å京å¸', 'æé½å¸'] |
| | | const areas = ['æé³åº', 'æµ·æ·åº', 'æµ¦ä¸æ°åº', '黿µ¦åº', '天河åº', 'ç¦ç°åº', '西æ¹åº'] |
| | | // 使ç¨å¿ç«¥å§åå表 |
| | | const patientNames = [ |
| | | 'æå°å®', 'å¼ å°æ', 'ç鍿¬£', 'åæµ©ç¶', 'éæçª', 'æ¨å®èª', 'é»è¯æ¶µ', '赵天å®', |
| | | 'å¨å°è', 'å´ä¿æ°', 'éé
é¯', 'åæ²è¾°', 'æ±é¨è±', '马浩å®', 'è¡å¯é¦¨', 'æä¿ç', |
| | | 'éå轩', '使¬£æ¡', 'é«å¤©ä½', 'æ¢éæ¡', 'ç½æµ©ç¶', 'å®é¨æ³½', 'åè¯å«£', '许åæ', |
| | | '谢欣å¦', 'å¯åé»', 'è£é¨æ¡', 'è§å¤©ä¹', 'æ¹å¿æ¡', 'è¢å豪' |
| | | ] |
| | | |
| | | // çæçº¦20æ¡æ°æ® |
| | | for (let i = 0; i < patientNames.length; i++) { |
| | | const packageId = (i % 5) + 1 + '' |
| | | const packageInfo = this.servicePackages[packageId] |
| | | const doctors = ['çå»ç', 'æå»ç', 'å¼ å»ç', 'åå»ç', 'éå»ç'] |
| | | const cities = ['å京å¸', '䏿µ·å¸', '广å·å¸', 'æ·±å³å¸', 'æå·å¸', 'å京å¸', 'æé½å¸'] |
| | | const areas = ['æé³åº', 'æµ·æ·åº', 'æµ¦ä¸æ°åº', '黿µ¦åº', '天河åº', 'ç¦ç°åº', '西æ¹åº'] |
| | | |
| | | // çææ´åççç¾çº¦æ¶é´ï¼è¿å»1å¹´å
ï¼ |
| | | const signDate = this.generateRandomDate('2023-12-01', '2024-11-30') |
| | | const contractPeriod = [1, 2][i % 2] // 1å¹´æ2å¹´åå |
| | | const expireDate = this.addYears(signDate, contractPeriod) |
| | | const remainingDays = this.calculateRemainingDays(expireDate) |
| | | const contractStatus = this.getContractStatus(expireDate, remainingDays) |
| | | for (let i = 0; i < patientNames.length; i++) { |
| | | const packageId = (i % 6) + 1 + '' |
| | | const packageInfo = this.servicePackages[packageId] |
| | | |
| | | // çææ´çå®ççµè¯å·ç å身份è¯å· |
| | | const phonePrefix = ['138', '139', '150', '151', '152', '186', '187', '188'] |
| | | const phone = `${phonePrefix[i % phonePrefix.length]}${this.padNumber(1000 + i * 37, 4)}${this.padNumber(i % 100, 2)}` |
| | | // æ ¹æ®å¥é¤éç¨å¹´é¾çæåççå®é
å¹´é¾ |
| | | let age |
| | | switch(packageInfo.applicableAge) { |
| | | case '0-3å²': |
| | | age = Math.floor(Math.random() * 3) + 1 |
| | | break |
| | | case '3-6å²': |
| | | age = Math.floor(Math.random() * 3) + 3 |
| | | break |
| | | case '7-12å²': |
| | | age = Math.floor(Math.random() * 6) + 7 |
| | | break |
| | | case '13-18å²': |
| | | age = Math.floor(Math.random() * 6) + 13 |
| | | break |
| | | default: |
| | | age = Math.floor(Math.random() * 18) + 1 |
| | | } |
| | | |
| | | // çæåççå¹´é¾ï¼20-80å²ï¼ |
| | | const age = 20 + (i % 60) |
| | | const birthYear = new Date().getFullYear() - age |
| | | const idCard = `11010${birthYear}${this.padNumber(1 + (i % 12), 2)}${this.padNumber(1 + (i % 28), 2)}${this.padNumber(i % 1000, 3)}X` |
| | | // çæç¾çº¦æ¶é´ï¼è¿å»1å¹´å
ï¼ |
| | | const signDate = this.generateRandomDate('2023-12-01', '2024-11-30') |
| | | const contractPeriod = [1, 2][i % 2] // 1å¹´æ2å¹´åå |
| | | const expireDate = this.addYears(signDate, contractPeriod) |
| | | const remainingDays = this.calculateRemainingDays(expireDate) |
| | | const contractStatus = this.getContractStatus(expireDate, remainingDays) |
| | | |
| | | mockData.push({ |
| | | id: `P${2024000 + i}`, |
| | | patientName: patientNames[i], |
| | | gender: i % 2 === 0 ? 'ç·' : '女', |
| | | age: age, |
| | | phone: phone, |
| | | idCard: idCard, |
| | | doctorName: doctors[i % doctors.length], |
| | | servicePackageId: packageId, |
| | | servicePackage: packageInfo.name, |
| | | services: packageInfo.services, |
| | | contractPeriod: contractPeriod, |
| | | signDate: signDate, |
| | | expireDate: expireDate, |
| | | remainingDays: remainingDays, |
| | | contractStatus: contractStatus, |
| | | address: `${cities[i % cities.length]}${areas[i % areas.length]}${this.generateStreet(i)}` // æ°å¢å°ååæ®µ |
| | | }) |
| | | } |
| | | // çæçµè¯å·ç ï¼ä½¿ç¨å®¶é¿çµè¯ï¼ |
| | | const phonePrefix = ['138', '139', '150', '151', '152', '186', '187', '188'] |
| | | const phone = `${phonePrefix[i % phonePrefix.length]}${this.padNumber(1000 + i * 37, 4)}${this.padNumber(i % 100, 2)}` |
| | | |
| | | return mockData |
| | | }, |
| | | // çæå¿ç«¥èº«ä»½è¯å· |
| | | const birthYear = new Date().getFullYear() - age |
| | | const idCard = `11010${birthYear}${this.padNumber(1 + (i % 12), 2)}${this.padNumber(1 + (i % 28), 2)}${this.padNumber(i % 1000, 3)}X` |
| | | |
| | | // æ°å¢è¾
婿¹æ³ï¼çæè¡éå°å |
| | | generateStreet(index) { |
| | | const streets = [ |
| | | 'ä¸å±±è·¯123å·', '人æ°è·¯456å·', 'è§£æ¾è·¯789å·', '建设路101å·', 'å平路202å·', |
| | | 'æ°åè·¯303å·', 'å
æè·¯404å·', '幸ç¦è·¯505å·', 'å¢ç»è·¯606å·', 'ææè·¯707å·' |
| | | ] |
| | | return streets[index % streets.length] |
| | | }, |
| | | mockData.push({ |
| | | id: `C${2024000 + i}`, |
| | | patientName: patientNames[i], |
| | | gender: i % 2 === 0 ? 'ç·' : '女', |
| | | age: age, |
| | | phone: phone, |
| | | idCard: idCard, |
| | | doctorName: doctors[i % doctors.length], |
| | | servicePackageId: packageId, |
| | | servicePackage: packageInfo.name, |
| | | services: packageInfo.services, |
| | | contractPeriod: contractPeriod, |
| | | signDate: signDate, |
| | | expireDate: expireDate, |
| | | remainingDays: remainingDays, |
| | | contractStatus: contractStatus, |
| | | applicableAge: packageInfo.applicableAge, |
| | | address: `${cities[i % cities.length]}${areas[i % areas.length]}${this.generateStreet(i)}` |
| | | }) |
| | | } |
| | | |
| | | // è¾
婿¹æ³ |
| | | return mockData |
| | | }, |
| | | |
| | | // è¾
婿¹æ³ä¿æä¸å |
| | | generateStreet(index) { |
| | | const streets = [ |
| | | 'ä¸å±±è·¯123å·', '人æ°è·¯456å·', 'è§£æ¾è·¯789å·', '建设路101å·', 'å平路202å·', |
| | | 'æ°åè·¯303å·', 'å
æè·¯404å·', '幸ç¦è·¯505å·', 'å¢ç»è·¯606å·', 'ææè·¯707å·' |
| | | ] |
| | | return streets[index % streets.length] |
| | | }, |
| | | |
| | | generateRandomDate(start, end) { |
| | | const startDate = new Date(start).getTime() |
| | | const endDate = new Date(end).getTime() |
| | |
| | | async getList() { |
| | | this.loading = true |
| | | try { |
| | | // 模æAPIè°ç¨å»¶è¿ |
| | | await new Promise(resolve => setTimeout(resolve, 500)) |
| | | |
| | | const allData = this.generateMockData() |
| | | // ç®åçæ¬å°çé |
| | | // çéé»è¾ |
| | | let filteredData = allData.filter(item => { |
| | | if (this.queryParams.patientName && |
| | | !item.patientName.includes(this.queryParams.patientName)) { |
| | |
| | | }, |
| | | |
| | | getPackageType(packageId) { |
| | | const typeMap = { '1': 'info', '2': 'success', '3': 'warning', '4': 'danger', '5': 'primary' } |
| | | const typeMap = { |
| | | '1': 'primary', '2': 'success', '3': 'warning', |
| | | '4': 'danger', '5': 'info', '6': 'primary' |
| | | } |
| | | return typeMap[packageId] || 'info' |
| | | }, |
| | | |
| | |
| | | }, |
| | | |
| | | handleView(row) { |
| | | this.$message.info(`æ¥çæ£è
${row.patientName} ç详æ
`) |
| | | this.$message.info(`æ¥çå¿ç«¥ ${row.patientName} ç详æ
`) |
| | | // å®é
å¼åä¸è·³è½¬å°è¯¦æ
页 |
| | | // this.$router.push({ path: '/patient/contract/detail', query: { id: row.id } }) |
| | | }, |
| | | |
| | | handleRenew(row) { |
| | | this.$confirm(`ç¡®å®è¦ä¸ºæ£è
${row.patientName} åçç»çº¦åï¼`, 'æç¤º', { |
| | | this.$confirm(`ç¡®å®è¦ä¸ºå¿ç«¥ ${row.patientName} åçç»çº¦åï¼`, 'æç¤º', { |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.$message.success('ç»çº¦æä½æå') |
| | |
| | | |
| | | .search-card { |
| | | margin-bottom: 20px; |
| | | |
| | | ::v-deep .el-form-item { |
| | | margin-bottom: 0; |
| | | } |
| | | } |
| | | |
| | | .stats-row { |
| | |
| | | .patient-name { |
| | | font-weight: 600; |
| | | margin-bottom: 4px; |
| | | color: #2c3e50; |
| | | } |
| | | |
| | | .patient-detail { |
| | | font-size: 12px; |
| | | color: #666; |
| | | line-height: 1.4; |
| | | } |
| | | } |
| | | |
| | |
| | | color: #67C23A; |
| | | } |
| | | } |
| | | |
| | | // ååºå¼è®¾è®¡ |
| | | @media (max-width: 768px) { |
| | | .signed-patient-page { |
| | | padding: 10px; |
| | | |
| | | .search-card { |
| | | ::v-deep .el-col { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | |
| | | .stats-row { |
| | | .el-col { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | v-model="tempContractData.servicePackage" |
| | | style="width: 100%" |
| | | > |
| | | <el-row :gutter="16"> |
| | | <el-col :span="8" v-for="pkg in servicePackages" :key="pkg.id"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="7" v-for="pkg in servicePackages" :key="pkg.id"> |
| | | <el-card |
| | | :class="[ |
| | | 'package-card', |
| | |
| | | servicePackages: [ |
| | | { |
| | | id: 1, |
| | | name: "åºç¡å¥åº·ç®¡çå
", |
| | | description: "å
å«å®æå¥åº·è¯ä¼°ãåºæ¬å¨è¯¢", |
| | | name: "å©´å¹¼å¿å¥åº·åºç¡å
", |
| | | description: "为0-3å²å©´å¹¼å¿æä¾å
¨é¢çå¥åº·çæµä¸åè²æå¯¼", |
| | | price: 0, |
| | | features: ["年度å¥åº·è¯ä¼°", "å¨çº¿å¨è¯¢"], |
| | | features: [ |
| | | "æ°çå¿å®¶åºè®¿è§", |
| | | "宿使 ¼æ£æ¥ä¸åè²è¯ä¼°", |
| | | "è¡å¸¸è§æ£æµ", |
| | | "å¬åçæ¥", |
| | | "åå
»ä¸æ¤çæå¯¼", |
| | | "é¢é²æ¥ç§æå¡", |
| | | "ä¸å»ä¿å¥æå¯¼ï¼å¦æ©è
¹ãæèï¼", |
| | | ], |
| | | applicableAge: "0-3å²", |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: "æ
¢æ§ç
管çå
", |
| | | description: "ä¸ä¸ºæ
¢æ§ç
æ£è
设计", |
| | | price: 299, |
| | | features: ["ä¸å±å»ç", "ç¨è¯æé", "宿é访"], |
| | | name: "å¦é¾åå¿ç«¥å¥åº·å
", |
| | | description: "å
³æ³¨3-6å²å¿ç«¥çé¿åè²ã常è§ç
é¢é²åä¹ æ¯å
Ⱦ", |
| | | price: 0, |
| | | features: [ |
| | | "çé¿åè²è¯ä¼°", |
| | | "è§åçæ¥ä¸å£è
ä¿å¥", |
| | | "è¡å¸¸è§æ£æ¥", |
| | | "åçè³é£ä¸è¡ä¸ºæå¯¼", |
| | | "ç¾ç
é¢é²ä¸å¥åº·å¹²é¢", |
| | | "ä¸å»é¥®é£è°å
»æå¯¼", |
| | | ], |
| | | applicableAge: "3-6å²", |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: "è年人å¥åº·å
", |
| | | description: "å
³æ³¨è年人å¥åº·é®é¢", |
| | | price: 499, |
| | | features: ["è·åé£é©è¯ä¼°", "åº·å¤æå¯¼", "ç´§æ¥èç³»"], |
| | | name: "å¦é¾å¿ç«¥ç»¼åå¥åº·å
", |
| | | description: "为7-12å²å¿ç«¥æä¾å¦ä¹ æå¥åº·ä¿éä¸å屿¯æ", |
| | | price: 0, |
| | | features: [ |
| | | "年度å¥åº·æ£æ¥", |
| | | "å¿çè¡ä¸ºåè²è¯ä¼°", |
| | | "ç§å¦ç¨ç¼ä¸å£è
ä¿å¥", |
| | | "åçè³é£æå¯¼", |
| | | "å¥åº·çæ´»æ¹å¼å¹²é¢", |
| | | "ä¸å®¶è½¬è¯ç»¿è²éé", |
| | | ], |
| | | applicableAge: "7-12å²", |
| | | }, |
| | | { |
| | | id: 4, |
| | | name: "éå°å¹´å¥åº·æ¯æå
", |
| | | description: "é对13-18å²éå°å¹´éæ¥æç¹ç¹çå¥åº·ç®¡ç", |
| | | price: 0, |
| | | features: [ |
| | | "鿥æå¥åº·æè²", |
| | | "年度å¥åº·è¯ä¼°", |
| | | "å¿çå¥åº·æ¯æ", |
| | | "å¥åº·é£é©è¡ä¸ºå¹²é¢", |
| | | "个æ§åå¥åº·æ¹æ¡", |
| | | "ä¼å
é¢çº¦æ£æ¥æå¡", |
| | | ], |
| | | applicableAge: "13-18å²", |
| | | }, |
| | | { |
| | | id: 5, |
| | | name: "å¿ç«¥è¥å
»ä¸çé¿åè²å¢å¼å
", |
| | | description: "é对è¥èãè¥å
»ä¸è¯çé®é¢çä¸é¡¹ç®¡ç", |
| | | price: 150, |
| | | features: [ |
| | | "å¾®éå
ç´ æµå®", |
| | | "骨å¯åº¦æ£æµ", |
| | | "个æ§åè³é£æ¹æ¡", |
| | | "çé¿åè²ä¸é¡¹è¯ä¼°", |
| | | "è¿å¨å¤æ¹æå¯¼", |
| | | "宿è¥å
»çæµ", |
| | | ], |
| | | applicableAge: "3-18å²", |
| | | }, |
| | | |
| | | ], |
| | | taskoptions: [ |
| | | // { |
| | |
| | | } |
| | | } |
| | | .package-card.active { |
| | | border-color: #409EFF; |
| | | border-color: #409eff; |
| | | background-color: #f0f9ff; |
| | | } |
| | | |
| | |
| | | > |
| | | |
| | | <el-tabs v-model="sontwoactiveName"> |
| | | <!-- <el-tab-pane name="blood" |
| | | ><span class="mulsz" slot="label" |
| | | ><i class="el-icon-s-operation"></i> è¡å</span |
| | | ></el-tab-pane |
| | | > |
| | | <el-tab-pane name="glucose" |
| | | ><span class="mulsz" slot="label" |
| | | ><i class="el-icon-odometer"></i>è¡ç³ |
| | | </span></el-tab-pane |
| | | > --> |
| | | |
| | | <el-tab-pane name="weight" |
| | | ><span class="mulsz" slot="label" |
| | | ><i class="el-icon-s-data"></i>身é¿å¤´å´è¶å¿ |
| | | </span></el-tab-pane |
| | | > |
| | | <!-- <el-tab-pane name="heartrate" |
| | | ><span class="mulsz" slot="label" |
| | | ><i class="el-icon-s-operation"></i>å¿ç |
| | | </span></el-tab-pane |
| | | > |
| | | <el-tab-pane name="bloodoxygen" |
| | | ><span class="mulsz" slot="label" |
| | | ><i class="el-icon-s-data"></i>è¡æ°§ |
| | | </span></el-tab-pane |
| | | > |
| | | <el-tab-pane name="animalheat" |
| | | ><span class="mulsz" slot="label" |
| | | ><i class="el-icon-s-opportunity"></i>使¸© |
| | | </span></el-tab-pane |
| | | > --> |
| | | |
| | | </el-tabs> |
| | | </el-tab-pane> |
| | | <el-tab-pane name="serve"> |
| | |
| | | </div> |
| | | <!-- å¥åº·çæµ --> |
| | | <div class="medical-record" v-show="activeName == 'monitor'"> |
| | | <!-- <div v-show="sontwoactiveName == 'blood'" style="display: flex"> |
| | | <div |
| | | id="xyeCharts" |
| | | class="sontwoactiveName" |
| | | style="width: 880px; height: 560px" |
| | | ></div> |
| | | <div style="width: 400px"> |
| | | <el-card class="box-card"> |
| | | <SFtable |
| | | :currentList="tableDatalist" |
| | | :tableLabel="tableLabelxy" |
| | | :center="false" |
| | | :multiplechoice="false" |
| | | /> |
| | | </el-card> |
| | | </div> |
| | | </div> --> |
| | | <!-- <div v-show="sontwoactiveName == 'glucose'" style="display: flex"> |
| | | <div |
| | | id="xteCharts" |
| | | class="sontwoactiveName" |
| | | style="width: 880px; height: 560px" |
| | | ></div> |
| | | <div style="width: 400px"> |
| | | <el-card class="box-card"> |
| | | <SFtable |
| | | :currentList="tableDatalist" |
| | | :tableLabel="tableLabelxt" |
| | | :center="false" |
| | | :multiplechoice="false" |
| | | /> |
| | | </el-card> |
| | | </div> |
| | | </div> --> |
| | | |
| | | <div v-show="sontwoactiveName == 'weight'" style="display: flex"> |
| | | <div |
| | | id="tzeCharts" |
| | |
| | | <span v-if="!scope.row.editing">{{ |
| | | scope.row.generatedTime |
| | | }}</span> |
| | | <!-- <el-date-picker |
| | | v-else |
| | | v-model="scope.row.generatedTime" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" |
| | | value-format="yyyy-MM-dd" |
| | | size="small" |
| | | ></el-date-picker> --> |
| | | |
| | | <el-date-picker |
| | | v-else |
| | | v-model="scope.row.generatedTime" |
| | |
| | | </el-card> |
| | | </div> |
| | | </div> |
| | | <!-- <div v-show="sontwoactiveName == 'heartrate'" style="display: flex"> |
| | | <div |
| | | id="xleCharts" |
| | | class="sontwoactiveName" |
| | | style="width: 880px; height: 560px" |
| | | ></div> |
| | | <div style="width: 400px"> |
| | | <el-card class="box-card"> |
| | | <SFtable |
| | | :currentList="tableDatalist" |
| | | :tableLabel="tableLabelxl" |
| | | :center="false" |
| | | :multiplechoice="false" |
| | | /> |
| | | </el-card> |
| | | </div> |
| | | </div> --> |
| | | <!-- <div v-show="sontwoactiveName == 'bloodoxygen'" style="display: flex"> |
| | | <div |
| | | id="xueyangeCharts" |
| | | class="sontwoactiveName" |
| | | style="width: 880px; height: 560px" |
| | | ></div> |
| | | <div style="width: 400px"> |
| | | <el-card class="box-card"> |
| | | <SFtable |
| | | :currentList="tableDatalist" |
| | | :tableLabel="tableLabelxueyang" |
| | | :center="false" |
| | | :multiplechoice="false" |
| | | /> |
| | | </el-card> |
| | | </div> |
| | | </div> --> |
| | | <!-- <div v-show="sontwoactiveName == 'animalheat'" style="display: flex"> |
| | | <div |
| | | id="tweCharts" |
| | | class="sontwoactiveName" |
| | | style="width: 880px; height: 560px" |
| | | ></div> |
| | | <div style="width: 400px"> |
| | | <el-card class="box-card"> |
| | | <SFtable |
| | | :currentList="tableDatalist" |
| | | :tableLabel="tableLabeltw" |
| | | :center="false" |
| | | :multiplechoice="false" |
| | | /> |
| | | </el-card> |
| | | </div> |
| | | </div> --> |
| | | |
| | | </div> |
| | | <!-- çæ¥æè¦ç¼è¾å¯¹è¯æ¡ --> |
| | | <el-dialog |
| | |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="è®°å½æ¥æ" prop="generatedTime"> |
| | | <!-- <el-date-picker |
| | | v-model="borninfoform.generatedTime" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" |
| | | > |
| | | </el-date-picker> --> |
| | | |
| | | <el-date-picker |
| | | v-model="borninfoform.generatedTime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | |
| | | ], |
| | | }, |
| | | record: [ |
| | | { |
| | | name: "宣æä»»å¡", |
| | | serviceType: "4", |
| | | templatename: "管饲宣æä¸æ", |
| | | createTime: "2024-11-10", |
| | | finishtime: "2024-11-12", |
| | | createBy: "çæ¿", |
| | | drname: "åæ", |
| | | nurseName: "å¼ æ·ç´", |
| | | excep: "0", |
| | | deptname: "å¼å¸ç§", |
| | | leavehospitaldistrictname: "äºç
åº", |
| | | }, |
| | | { |
| | | name: "é访任å¡", |
| | | serviceType: "2", |
| | | templatename: "å¿è¡ç®¡éè®¿ä¸æ", |
| | | createTime: "2024-11-11", |
| | | finishtime: "2024-11-14", |
| | | createBy: "ç« ç¨", |
| | | drname: "åæ", |
| | | nurseName: "æä¸½", |
| | | excep: "0", |
| | | deptname: "å¼å¸ç§", |
| | | leavehospitaldistrictname: "äºç
åº", |
| | | }, |
| | | |
| | | // { |
| | | // name: "é®å·è°æ¥", |
| | | // }, |
| | |
| | | // target: `http://192.168.168.60:8095`, |
| | | // target: `http://192.168.144.34:8095`, |
| | | // target: `http://220.66.136.101:8095`, |
| | | target: `http://192.168.100.10:8099`, |
| | | // target:`http://localhost:8095`, |
| | | // target: `http://192.168.100.10:8099`, |
| | | target:`http://localhost:8095`, |
| | | changeOrigin: true, |
| | | pathRewrite: { |
| | | ['^' + process.env.VUE_APP_BASE_API]: '' |