From b18427122c04e2b2f9589ebe77dce882511f3b94 Mon Sep 17 00:00:00 2001 From: binbin_pan Date: Tue, 3 Sep 2024 15:20:18 +0800 Subject: [PATCH 01/10] =?UTF-8?q?pdf+=E5=9B=BE=E7=89=87=E5=AD=A6=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages.json | 7 + .../YNEduApp/learnProj/components/PdfView.vue | 2 +- pages/YNEduApp/learnProj/imageStudy.vue | 154 ++++++++++++++++++ pages/YNEduApp/learnProj/learnProjDetail.vue | 2 + pages/YNEduApp/learnProj/pdfStudy.vue | 70 ++++---- pages/YNEduApp/prac/exercises.vue | 64 ++++---- 6 files changed, 239 insertions(+), 60 deletions(-) create mode 100644 pages/YNEduApp/learnProj/imageStudy.vue diff --git a/pages.json b/pages.json index 2fd41dd..3ba06e9 100644 --- a/pages.json +++ b/pages.json @@ -234,6 +234,13 @@ { "navigationBarTitleText" : "公告通知" } + }, + { + "path" : "pages/YNEduApp/learnProj/imageStudy", + "style" : + { + "navigationBarTitleText" : "图片学习" + } } ], "globalStyle": { diff --git a/pages/YNEduApp/learnProj/components/PdfView.vue b/pages/YNEduApp/learnProj/components/PdfView.vue index fa163ca..c5e9e50 100644 --- a/pages/YNEduApp/learnProj/components/PdfView.vue +++ b/pages/YNEduApp/learnProj/components/PdfView.vue @@ -80,7 +80,7 @@ export default { handlePostMessage(data) { let arr = data.detail.data.pop() this.totalPage = arr[0].totalPage //总页数 - this.currentReadPage = arr[1].page + 1 //当前页数 + this.currentReadPage = arr[1].page //当前页数 console.log('app:', this.totalPage, this.currentReadPage) }, //h5 监听 diff --git a/pages/YNEduApp/learnProj/imageStudy.vue b/pages/YNEduApp/learnProj/imageStudy.vue new file mode 100644 index 0000000..1a6fa6a --- /dev/null +++ b/pages/YNEduApp/learnProj/imageStudy.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/pages/YNEduApp/learnProj/learnProjDetail.vue b/pages/YNEduApp/learnProj/learnProjDetail.vue index 5d43504..9a6fbef 100644 --- a/pages/YNEduApp/learnProj/learnProjDetail.vue +++ b/pages/YNEduApp/learnProj/learnProjDetail.vue @@ -286,6 +286,8 @@ export default { url = '/pages/YNEduApp/learn/learn' } else if (item.path.includes('.pdf')) { url = '/pages/YNEduApp/learnProj/pdfStudy' + } else { + url = '/pages/YNEduApp/learnProj/imageStudy' } uni.navigateTo({ diff --git a/pages/YNEduApp/learnProj/pdfStudy.vue b/pages/YNEduApp/learnProj/pdfStudy.vue index 8725906..05c8045 100644 --- a/pages/YNEduApp/learnProj/pdfStudy.vue +++ b/pages/YNEduApp/learnProj/pdfStudy.vue @@ -1,7 +1,7 @@ @@ -26,30 +26,37 @@ export default { this.params = JSON.parse(JSON.stringify(opt)) this.params.studyDuration = Number(opt.studyDuration) this.params.allStudyDuration = Number(opt.allStudyDuration) - // this.path = - // config.fileUrl + opt.path + `&studyDuration=${opt.studyDuration}&allStudyDuration=${opt.allStudyDuration}` - this.path = opt.path + // 如果路径中带有http或者https则直接使用路径,否则拼接路径 + if (opt.path.indexOf('http') !== -1) { + this.path = opt.path + } else { + this.path = config.fileUrl + opt.path + } console.log('🚀 ~ onLoad ~ this.params:', this.path) console.log('🚀 ~ onLoad ~ this.params:', Number(opt.studyDuration), Number(opt.allStudyDuration)) - - // if (Number(opt.studyDuration) <= Number(opt.allStudyDuration)) { - // setTimeout(() => { - // this.countDown() - // }, 1000) - // } else { - // // 提示-学习时长已满 - // uni.showToast({ - // title: '学习时长已满, 随时可以结束学习', - // icon: 'none' - // }) - // } + if (Number(opt.studyDuration) <= Number(opt.allStudyDuration)) { + setTimeout(() => { + this.countDown() + }, 1000) + } else { + // 提示-学习时长已满 + uni.showToast({ + title: '学习时长已满, 随时可以结束学习', + icon: 'none' + }) + } + }, + onHide() { + clearInterval(this.timer) + // 关闭页面时,修改项目进度 + this.updStudyDuration() }, // 卸载 onUnload() { console.log('🚀 ~ onUnload ~ 页面关闭') clearInterval(this.timer) // 关闭页面时,修改项目进度 - // this.updStudyDuration() + this.updStudyDuration() }, methods: { // 根据allStudyDuration 倒计时 @@ -58,23 +65,23 @@ export default { // let studyDuration = Number(this.params.studyDuration) this.timer = setInterval(() => { allStudyDuration-- - // studyDuration++ - this.params.studyDuration++ - // this.$set(this.params, 'studyDuration', studyDuration) - console.log('🚀 ~ countDown ~ this.params.studyDuration:', this.params.studyDuration) + // studyDuration++ + this.params.studyDuration++ + // this.$set(this.params, 'studyDuration', studyDuration) + console.log('🚀 ~ countDown ~ this.params.studyDuration:', this.params.studyDuration) if (allStudyDuration <= 0) { clearInterval(this.timer) - // 提示-学习时长已满 - uni.showToast({ - title: '学习时长已满', - icon: 'none' - }) setTimeout(() => { this.updStudyDuration() + // 提示-学习时长已满 + uni.showToast({ + title: '学习时长已满', + icon: 'none' + }) }, 1000) } console.log('🚀 ~ countDown ~ 剩余时间-->:', allStudyDuration) - console.log('🚀 ~ countDown ~ this.params.studyDuration:', this.params.studyDuration) + console.log('🚀 ~ countDown ~ this.params.studyDuration:', this.params.studyDuration) }, 1000) }, // 修改项目进度 @@ -88,9 +95,10 @@ export default { studyCourseId: this.params.studyCourseId, sourceId: this.params.sourceId, studyDuration: this.params.studyDuration, - studyPercentage: Math.ceil( - (Number(this.params.studyDuration) / Number(this.params.allStudyDuration)) * 100 - ).toFixed(2) + studyPercentage: + Math.ceil((Number(this.params.studyDuration) / Number(this.params.allStudyDuration)) * 100).toFixed(2) > 100 + ? 100 + : Math.ceil((Number(this.params.studyDuration) / Number(this.params.allStudyDuration)) * 100).toFixed(2) } console.log('🚀 ~ updStudyDuration ~ params:', params) uni.request({ @@ -104,7 +112,7 @@ export default { success: res => { console.log('🚀 ~ handleEnd ~ res:', res) this.isShow = false - uni.navigateTo({ + uni.reLaunch({ url: '/pages/YNEduApp/learnProj/learnProjDetail?id=' + this.params.studyId }) }, diff --git a/pages/YNEduApp/prac/exercises.vue b/pages/YNEduApp/prac/exercises.vue index 062c463..40422b0 100644 --- a/pages/YNEduApp/prac/exercises.vue +++ b/pages/YNEduApp/prac/exercises.vue @@ -230,6 +230,7 @@ export default { correctRate: '0', // 已用时间 - 计时器 - 用于显示已用时间 格式 00:00:00 usedTime: '00:00:00', + serviceTime: 0, // 正确题数 trueNum: 0, // 错误题数 @@ -412,24 +413,36 @@ export default { // 开始计时 - 实时更新已用时间 startTimer() { this.intervalId = setInterval(() => { - const time = this.usedTime.split(':') - let hours = parseInt(time[0]) - let minutes = parseInt(time[1]) - let seconds = parseInt(time[2]) - seconds++ - if (seconds === 60) { - seconds = 0 - minutes++ - if (minutes === 60) { - minutes = 0 - hours++ - } - } - this.usedTime = `${hours < 10 ? '0' + hours : hours}:${minutes < 10 ? '0' + minutes : minutes}:${ - seconds < 10 ? '0' + seconds : seconds - }` + this.serviceTime++ + this.handleTime() + // const time = this.usedTime.split(':') + // let hours = parseInt(time[0]) + // let minutes = parseInt(time[1]) + // let seconds = parseInt(time[2]) + // seconds++ + // if (seconds === 60) { + // seconds = 0 + // minutes++ + // if (minutes === 60) { + // minutes = 0 + // hours++ + // } + // } + // this.usedTime = `${hours < 10 ? '0' + hours : hours}:${minutes < 10 ? '0' + minutes : minutes}:${ + // seconds < 10 ? '0' + seconds : seconds + // }` }, 1000) }, + // 处理时间 + handleTime() { + // this.serviceTime 是秒数 + let hours = parseInt(this.serviceTime / 3600) + let minutes = parseInt((this.serviceTime % 3600) / 60) + let seconds = parseInt(this.serviceTime % 60) + this.usedTime = `${hours < 10 ? '0' + hours : hours}:${minutes < 10 ? '0' + minutes : minutes}:${ + seconds < 10 ? '0' + seconds : seconds + }` + }, clickImg(url) { console.log('🚀 ~ clickImg ~ url:', url) uni.previewImage({ @@ -580,6 +593,8 @@ export default { }, // 提交 async handleSubmit() { + // 暂停时间 + clearInterval(this.intervalId) console.log('提交') this.answerNum = this.trueNum + this.falseNum let rate = ((Number(this.trueNum) / Number(this.answerNum)) * 100).toFixed(2) @@ -609,24 +624,17 @@ export default { handleConfirm() { console.log('确认') this.showModal = false + // 继续计时 + this.startTimer() }, // 结束答题 handleClose() { this.isEnd = true // 停止计时 - clearInterval() - console.log('结束', this.usedTime) + clearInterval(this.intervalId) + console.log('结束', this.usedTime, this.serviceTime) // 保存练习时长 - // savePracticeDuration({ - // id: this.practiceId, - // practiceDuration: Math.ceil(this.usedTime.split(':')[0] * 60 + this.usedTime.split(':')[1] / 60) - // }) - // 将this.usedTime 00:00:00 转换为分钟 - let time = this.usedTime.split(':').reduce((acc, cur, index) => { - return acc + cur * Math.pow(60, 2 - index) - }, 0) - // 再将秒数转换为分钟, 不足一分钟算一分钟 - time = Math.ceil(time / 60) + let time = Math.ceil(this.serviceTime / 60) console.log('🚀 ~ handleClose ~ time:', time) const params = { id: this.recordId, From bcfa1ef05013c90e80e23ffddb443ecc8a6e35d9 Mon Sep 17 00:00:00 2001 From: binbin_pan Date: Tue, 3 Sep 2024 16:07:30 +0800 Subject: [PATCH 02/10] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/YNEduApp/exam/examination.vue | 6 ++++++ pages/YNEduApp/exam/examinationList.vue | 2 +- pages/YNEduApp/exam/examinationResultDetails.vue | 6 +++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/pages/YNEduApp/exam/examination.vue b/pages/YNEduApp/exam/examination.vue index c3f03c4..fa7477e 100644 --- a/pages/YNEduApp/exam/examination.vue +++ b/pages/YNEduApp/exam/examination.vue @@ -336,6 +336,9 @@ export default { questionId: item.id, selectAnswer } + if (item.examType == 3) { + params.selectAnswer = selectAnswer == 'A' ? '对' : '错' + } console.log('🚀 ~ handleSelectOption ~ params:', params) // insertQuestionAnswerById(params) uni.request({ @@ -345,6 +348,9 @@ export default { header: { 'Content-Type': 'application/x-www-form-urlencoded', Authorization: uni.getStorageSync('access_token') + }, + success: res => { + console.log('🚀 ~ handleSelectOption ~ res:', res) } }) }, diff --git a/pages/YNEduApp/exam/examinationList.vue b/pages/YNEduApp/exam/examinationList.vue index f256bec..3a6374f 100644 --- a/pages/YNEduApp/exam/examinationList.vue +++ b/pages/YNEduApp/exam/examinationList.vue @@ -18,7 +18,7 @@
得分/总分: - {{ item.score }}/{{ item.examGrade }} + {{ item.examGrade }}/{{ item.score }}
得分率: diff --git a/pages/YNEduApp/exam/examinationResultDetails.vue b/pages/YNEduApp/exam/examinationResultDetails.vue index 41b1a4a..1982014 100644 --- a/pages/YNEduApp/exam/examinationResultDetails.vue +++ b/pages/YNEduApp/exam/examinationResultDetails.vue @@ -95,9 +95,9 @@
-
+ {{ grade }}{{ gradeIndex + 1 == item.selectAnswer.split('').length ? '' : ', ' }} -
+
@@ -115,7 +115,7 @@
-
+
From 76ccdca6627cd160745b7d852187514891c5572d Mon Sep 17 00:00:00 2001 From: binbin_pan Date: Wed, 4 Sep 2024 15:18:01 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E4=BD=93=E6=A3=80=E4=B8=8E=E5=9F=B9?= =?UTF-8?q?=E8=AE=ADbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 11 + package.json | 1 + pages.json | 7 + .../appointment/appointment.vue | 508 +++++++++++++++++- pages/HealthExaminationApp/index/index.vue | 68 ++- .../myAppointment/bookSuccessfully.vue | 51 ++ .../myAppointment/myAppointment.vue | 15 +- pages/YNEduApp/exam/beforeExam.vue | 6 +- pages/YNEduApp/exam/exam.vue | 17 +- pages/YNEduApp/exam/examination.vue | 76 +-- pages/YNEduApp/exam/examinationDetails.vue | 33 +- pages/YNEduApp/index/index.vue | 2 +- pages/YNEduApp/learn/learn.vue | 33 +- pages/YNEduApp/learnProj/learnProjDetail.vue | 3 +- pages/YNEduApp/prac/exercises.vue | 33 ++ pages/gzt/index.vue | 5 +- static/images-tijian/success.png | Bin 0 -> 69338 bytes utils/aescbc.js | 35 ++ utils/request.js | 8 +- 19 files changed, 830 insertions(+), 82 deletions(-) create mode 100644 pages/HealthExaminationApp/myAppointment/bookSuccessfully.vue create mode 100644 static/images-tijian/success.png create mode 100644 utils/aescbc.js diff --git a/package-lock.json b/package-lock.json index de0bb9a..c70d2b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "3.4.5", "license": "MIT", "dependencies": { + "crypto-js": "^4.2.0", "image-tools": "^1.4.0", "luch-request": "^3.1.1" } @@ -18,6 +19,11 @@ "resolved": "https://registry.npmjs.org/@dcloudio/types/-/types-2.6.12.tgz", "integrity": "sha512-mrCMwcINy1IFjU9VUqLeWBkj404yWs5paLDttBcA+eqUjanuUQbBcTVPqlrGgkyzLXDcV2oDDZRSNxNpXi4kMQ==" }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, "node_modules/image-tools": { "version": "1.4.0", "resolved": "https://registry.npmmirror.com/image-tools/-/image-tools-1.4.0.tgz", @@ -38,6 +44,11 @@ "resolved": "https://registry.npmjs.org/@dcloudio/types/-/types-2.6.12.tgz", "integrity": "sha512-mrCMwcINy1IFjU9VUqLeWBkj404yWs5paLDttBcA+eqUjanuUQbBcTVPqlrGgkyzLXDcV2oDDZRSNxNpXi4kMQ==" }, + "crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, "image-tools": { "version": "1.4.0", "resolved": "https://registry.npmmirror.com/image-tools/-/image-tools-1.4.0.tgz", diff --git a/package.json b/package.json index 0bbe15b..1452229 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ }, "homepage": "https://github.com/dcloudio/hello-uniapp#readme", "dependencies": { + "crypto-js": "^4.2.0", "image-tools": "^1.4.0", "luch-request": "^3.1.1" }, diff --git a/pages.json b/pages.json index 3ba06e9..92acebe 100644 --- a/pages.json +++ b/pages.json @@ -241,6 +241,13 @@ { "navigationBarTitleText" : "图片学习" } + }, + { + "path" : "pages/HealthExaminationApp/myAppointment/bookSuccessfully", + "style" : + { + "navigationBarTitleText" : "体检预约" + } } ], "globalStyle": { diff --git a/pages/HealthExaminationApp/appointment/appointment.vue b/pages/HealthExaminationApp/appointment/appointment.vue index 5b11614..2512f06 100644 --- a/pages/HealthExaminationApp/appointment/appointment.vue +++ b/pages/HealthExaminationApp/appointment/appointment.vue @@ -1,19 +1,507 @@ diff --git a/pages/HealthExaminationApp/index/index.vue b/pages/HealthExaminationApp/index/index.vue index b8bf5c4..9f5c90e 100644 --- a/pages/HealthExaminationApp/index/index.vue +++ b/pages/HealthExaminationApp/index/index.vue @@ -33,10 +33,14 @@ + + diff --git a/pages/HealthExaminationApp/myAppointment/myAppointment.vue b/pages/HealthExaminationApp/myAppointment/myAppointment.vue index a75ba8d..a5a662f 100644 --- a/pages/HealthExaminationApp/myAppointment/myAppointment.vue +++ b/pages/HealthExaminationApp/myAppointment/myAppointment.vue @@ -1,19 +1,20 @@ + \ No newline at end of file diff --git a/pages/YNEduApp/exam/beforeExam.vue b/pages/YNEduApp/exam/beforeExam.vue index 811a783..917118c 100644 --- a/pages/YNEduApp/exam/beforeExam.vue +++ b/pages/YNEduApp/exam/beforeExam.vue @@ -62,7 +62,7 @@ export default { content: '是否确认进入考试?', examId: '', examNum: 0, // 考试次数 - examCount: 1, // 1: 不限次 2: 及格终止 3: 自定义 + examCount: '', // 1: 不限次 2: 及格终止 3: 自定义 examCustom: 0, // 自定义次数 score: 0, passScore: 0 @@ -75,6 +75,10 @@ export default { this.title = opt.name this.subtitle = opt.validityDate this.duration = opt.responseTime + this.examNum = opt.examNum + this.count = opt.examCount === 1 ? '不限次' : opt.examCount === 2 ? '及格终止' : opt.examCustom + this.examCount = opt.examCount + this.examCustom = opt.examCustom this.switchCount = opt.cutNum.includes('null') || opt.cutNum.includes('undefined') ? '不限次' : opt.cutNum this.studyId = opt.studyId this.score = opt.score diff --git a/pages/YNEduApp/exam/exam.vue b/pages/YNEduApp/exam/exam.vue index 1e1a987..cdf9ef9 100644 --- a/pages/YNEduApp/exam/exam.vue +++ b/pages/YNEduApp/exam/exam.vue @@ -95,11 +95,13 @@ export default { }, success: res => { console.log('🚀 ~ getList ~ res:', res) + this.activeIndex = 0 res = res.data this.list = this.allList this.allList = this.list = res.data this.waitList = res.data.filter(item => item.status === 1) this.alreadyList = res.data.filter(item => item.status === 2) + this.absentList = res.data.filter(item => item.status === 3 && item.examNum === 0) }, fail: err => { console.log(err) @@ -121,6 +123,19 @@ export default { // 开始考试 handleExamination(item) { console.log('🚀 ~ handleExamination ~ item:', item) + // 获取当前考试限制时间 item.validityDate 2021-09-01~2021-09-30 如果今天不在这个范围内, 不能考试 + const date = new Date() + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + const today = `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}` + if (today < item.validityDate.split('~')[0] || today > item.validityDate.split('~')[1]) { + uni.showToast({ + title: '当前时间不在考试时间范围内', + icon: 'none' + }) + return + } if (item.examEquipment == 2) { uni.showToast({ title: '请在电脑端进行考试', @@ -151,7 +166,7 @@ export default { examNum: item.examNum, // 考试次数 examCount: item.examCount, // 考试次数类型 examCustom: item.examCustom, // 自定义考试次数 - score: item.score, // 总分 + score: item.score, // 总 passScore: item.passScore // 及格分数 } uni.navigateTo({ diff --git a/pages/YNEduApp/exam/examination.vue b/pages/YNEduApp/exam/examination.vue index fa7477e..06280ed 100644 --- a/pages/YNEduApp/exam/examination.vue +++ b/pages/YNEduApp/exam/examination.vue @@ -66,15 +66,24 @@ @click="clickImg(fileUrl + item.examTopicUrl)" />
-
-
{{ option.optionIdent }}.
-
{{ option.optionContent }}
+
+
+
{{ option.optionIdent }}.
+
{{ option.optionContent }}
+
+
@@ -391,7 +400,7 @@ export default { examTime: this.examTime, questionCount: this.questionList.length, switchCount: this.switchCount, - examNum: this.examNum, + examNum: this.examNum + 1, examCount: this.examCount, examCustom: this.examCustom, results: res.examResult, @@ -626,27 +635,32 @@ export default { } .options { margin-top: 10px; - .option { - display: flex; - justify-content: flex-start; - align-items: center; - margin-top: 10px; - background: #f4f9fe; - border-radius: 5px; - &.isActive { - background: #8cbff1; - color: #fff; - } - .option-item { - width: 33px; - height: 33px; - line-height: 33px; - text-align: center; - color: #333; - } - .option-content { - margin-left: 10px; - color: #333; + margin-bottom: 30px; + .option-wrapper { + max-height: 500px; + overflow: auto; + .option { + display: flex; + justify-content: flex-start; + align-items: center; + margin-top: 10px; + background: #f4f9fe; + border-radius: 5px; + &.isActive { + background: #8cbff1; + color: #fff; + } + .option-item { + width: 33px; + height: 33px; + line-height: 33px; + text-align: center; + color: #333; + } + .option-content { + margin-left: 10px; + color: #333; + } } } } diff --git a/pages/YNEduApp/exam/examinationDetails.vue b/pages/YNEduApp/exam/examinationDetails.vue index 84dba6b..120946e 100644 --- a/pages/YNEduApp/exam/examinationDetails.vue +++ b/pages/YNEduApp/exam/examinationDetails.vue @@ -94,7 +94,7 @@ export default { questionCount: 0, // 考试次数 examNum: 0, - examCount: 1, // 考试次数 1: 不限次 2: 及格终止 3: 自定义 + examCount: '', // 考试次数 1: 不限次 2: 及格终止 3: 自定义 examCustom: 0, // 自定义次数 results: 0, // 考试结果 studyId: '', @@ -138,7 +138,7 @@ export default { } else { from = '/pages/YNEduApp/exam/exam' } - + // examCount 1: 不限次 2: 及格终止 3: 自定义 if (this.examCount == 2 && this.results == 1) { uni.showToast({ @@ -146,7 +146,7 @@ export default { icon: 'none' }) setTimeout(() => { - uni.navigateTo({ + uni.reLaunch({ url: from }) }, 1000) @@ -156,23 +156,24 @@ export default { icon: 'none' }) setTimeout(() => { - uni.navigateTo({ + uni.reLaunch({ url: from }) }, 1000) + } else { + const params = { + examId: this.examId, + examNum: this.examNum, + examCount: this.examCount, + examCustom: this.examCustom, + switchCount: this.switchCount, + studyId: this.studyId + } + console.log('🚀 ~ handleResetExamination ~ params:', params) + uni.navigateTo({ + url: `/pages/YNEduApp/exam/examination?params=${JSON.stringify(params)}` + }) } - const params = { - examId: this.examId, - examNum: this.examNum, - examCount: this.examCount, - examCustom: this.examCustom, - switchCount: this.switchCount, - studyId: this.studyId - } - console.log('🚀 ~ handleResetExamination ~ params:', params) - uni.navigateTo({ - url: `/pages/YNEduApp/exam/examination?params=${JSON.stringify(params)}` - }) }, handleArrow() { let from = '' diff --git a/pages/YNEduApp/index/index.vue b/pages/YNEduApp/index/index.vue index 1cdaded..b59a2c3 100644 --- a/pages/YNEduApp/index/index.vue +++ b/pages/YNEduApp/index/index.vue @@ -45,7 +45,7 @@ height="8" activeColor="#579AF8" /> -
{{ item.trainPercentage }}%
+
{{ item.trainPercentage || 0 }}%
diff --git a/pages/YNEduApp/learn/learn.vue b/pages/YNEduApp/learn/learn.vue index 2826801..02fec65 100644 --- a/pages/YNEduApp/learn/learn.vue +++ b/pages/YNEduApp/learn/learn.vue @@ -53,7 +53,8 @@ export default { // 当前播放时间 currentTime: 0, showModal: false, // 是否显示弹窗 - content: '是否确认结束学习?' + content: '是否确认结束学习?', + isEnd: false } }, onLoad(opt) { @@ -69,11 +70,24 @@ export default { console.log('🚀 ~ onLoad ~ this.path:', this.path) this.studyDuration = this.currentTime = Number(opt.studyDuration) this.allStudyDuration = Number(opt.allStudyDuration) + this.isEnd = opt.isEnd + if (opt.isEnd) { + this.studyDuration = 0 + } + }, + onHide() { + console.log('🚀 ~ onHide ~ 页面隐藏') + if (!this.isEnd) { + // 关闭页面时,修改项目进度 + this.handleEnd() + } }, onUnload() { console.log('🚀 ~ onUnload ~ 页面关闭') - // 关闭页面时,修改项目进度 - this.handleEnd() + if (!this.isEnd) { + // 关闭页面时,修改项目进度 + this.handleEnd() + } }, methods: { videoErrorCallback(e) { @@ -89,6 +103,12 @@ export default { }, // 结束学习 handleEnd() { + if (this.isEnd) { + uni.reLaunch({ + url: '/pages/YNEduApp/learnProj/learnProjDetail?id=' + this.studyId + }) + return + } // 手动暂停视频 const video = uni.createVideoContext('myVideo') video.pause() @@ -96,7 +116,10 @@ export default { console.log('当前播放时间:', this.currentTime, this.allStudyDuration) this.studyDuration = this.currentTime // 计算学习进度 - this.studyPercentage = Math.ceil((this.studyDuration / this.allStudyDuration) * 100).toFixed(2) + this.studyPercentage = + Math.ceil((this.studyDuration / this.allStudyDuration) * 100).toFixed(2) > 100 + ? 100 + : Math.ceil((this.studyDuration / this.allStudyDuration) * 100).toFixed(2) console.log('🚀 ~ handleEnd ~ this.studyPercentage:', this.studyPercentage) const params = { @@ -127,7 +150,7 @@ export default { success: res => { console.log('🚀 ~ handleEnd ~ res:', res) this.showModal = false - uni.navigateTo({ + uni.reLaunch({ url: '/pages/YNEduApp/learnProj/learnProjDetail?id=' + this.studyId }) }, diff --git a/pages/YNEduApp/learnProj/learnProjDetail.vue b/pages/YNEduApp/learnProj/learnProjDetail.vue index 9a6fbef..d638c59 100644 --- a/pages/YNEduApp/learnProj/learnProjDetail.vue +++ b/pages/YNEduApp/learnProj/learnProjDetail.vue @@ -276,7 +276,8 @@ export default { sourceId: item.id, // 素材id path: item.path, // 视频路径 studyDuration: item.studyDuration || 0, // 学习时长 - allStudyDuration: item.allStudyDuration // 总时长 + allStudyDuration: item.allStudyDuration, // 总时长 + isEnd: item.studyPercentage >= 100 ? true : false } console.log('🚀 ~ toggleTheoryLearn ~ params:', params) console.log('🚀 ~ toggleTheoryLearn ~ item:', item.path) diff --git a/pages/YNEduApp/prac/exercises.vue b/pages/YNEduApp/prac/exercises.vue index 40422b0..d09304a 100644 --- a/pages/YNEduApp/prac/exercises.vue +++ b/pages/YNEduApp/prac/exercises.vue @@ -376,6 +376,39 @@ export default { console.log('🚀 ~ handleJump ~ res:', res) res = res.data this.questionList.push(res.data) + if (res.data.selectAnswer) { + if (this.questionList[0].examType === 2) { + this.questionList[0].select = res.data.selectAnswer.split('') + this.questionList[0].isSelect = true + // 给selectAnswer选项如果正确添加正确标记, 错误添加错误标记并给正确选项添加标记 + this.questionList[0].listOption.forEach(item => { + if (res.data.selectAnswer.includes(item.optionIdent)) { + item.isSelect = true + } + if (item.optionIdent === this.questionList[0].correctGrade) { + item.isCorrect = true + } + if (item.isSelect && !this.questionList[0].correctGrade.includes(item.optionIdent)) { + item.isError = true + } + }) + } else { + this.questionList[0].select = res.data.selectAnswer + this.questionList[0].isSelect = true + // 给selectAnswer选项如果正确添加正确标记, 错误添加错误标记并给正确选项添加标记 + this.questionList[0].listOption.forEach(item => { + if (res.data.selectAnswer === item.optionIdent) { + item.isSelect = true + } + if (item.optionIdent === this.questionList[0].correctGrade) { + item.isCorrect = true + } + if (item.isSelect && item.optionIdent !== this.questionList[0].correctGrade) { + item.isError = true + } + }) + } + } }, fail: err => { console.log(err) diff --git a/pages/gzt/index.vue b/pages/gzt/index.vue index f97353e..6211a52 100644 --- a/pages/gzt/index.vue +++ b/pages/gzt/index.vue @@ -197,7 +197,7 @@ jwtToken: uni.getStorageSync('App-Token') } const tjparams = { - username: '13908860263', + username: '13708411772', password: 'YNsbd@123456' } console.log('🚀 ~ gotoYy ~ tjparams:', tjparams) @@ -251,7 +251,10 @@ console.log('🚀 ~ gotoYy ~ res:', res,) console.log('🚀 ~ gotoYy ~ res:', res.data.token) if (res.statusCode == 200) { + uni.removeStorageSync('tjToken') + uni.removeStorageSync('tjPhone') uni.setStorageSync('tjToken', res.data.token) + uni.setStorageSync('tjPhone', tjparams.username) setTimeout(() => { uni.reLaunch({ url: '/pages/HealthExaminationApp/index/index' diff --git a/static/images-tijian/success.png b/static/images-tijian/success.png new file mode 100644 index 0000000000000000000000000000000000000000..811e3316e694225fc7cf7bc163945506d9201903 GIT binary patch literal 69338 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 m { config.header['Authorization'] = 'Bearer ' + getToken() } else { // 没有token - 去登录 - // store.dispatch('LogOut').then(() => { - // uni.reLaunch({ url: '/pages/login' }) - // }) - // const token = 'eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjozMSwidXNlcl9rZXkiOiJiZmJmOGEzZC1hYTc1LTQ4MzQtOGM3NC0yZmQzOTEwZDllYzAiLCJ1c2VybmFtZSI6IuaWueS6riJ9.kv1WmthbgTrqapbsGLvevk-nwbWbYJMniyjj8DC3BSnQjCwm8csQ5GaNpfsLFFFYIHBYa8CrN_sBxXhDKOfR_A' - // const userId = 31 - // setUserId(userId) - // setToken(token) + uni.reLaunch({ url: '/pages/login' }) } // get请求映射params参数 if (config.params) { From e7a1274dbf99eac47c567f6bc707892b2790545d Mon Sep 17 00:00:00 2001 From: binbin_pan Date: Wed, 4 Sep 2024 18:29:27 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E4=BD=93=E6=A3=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages.json | 7 + .../appointment/appointment.vue | 6 +- .../jobAppointment/jobAppointment.vue | 513 +++++++++++++++++- .../myAppointment/healthExamDetails.vue | 123 +++++ .../myAppointment/myAppointment.vue | 192 ++++++- pages/gzt/index.vue | 2 +- static/images-tijian/isCanceled.png | Bin 0 -> 6380 bytes static/images-tijian/isExamed.png | Bin 0 -> 6300 bytes static/images-tijian/readyExam.png | Bin 0 -> 6043 bytes 9 files changed, 820 insertions(+), 23 deletions(-) create mode 100644 pages/HealthExaminationApp/myAppointment/healthExamDetails.vue create mode 100644 static/images-tijian/isCanceled.png create mode 100644 static/images-tijian/isExamed.png create mode 100644 static/images-tijian/readyExam.png diff --git a/pages.json b/pages.json index 92acebe..cfcaa42 100644 --- a/pages.json +++ b/pages.json @@ -248,6 +248,13 @@ { "navigationBarTitleText" : "体检预约" } + }, + { + "path" : "pages/HealthExaminationApp/myAppointment/healthExamDetails", + "style" : + { + "navigationBarTitleText" : "体检预约单" + } } ], "globalStyle": { diff --git a/pages/HealthExaminationApp/appointment/appointment.vue b/pages/HealthExaminationApp/appointment/appointment.vue index 2512f06..d5772a5 100644 --- a/pages/HealthExaminationApp/appointment/appointment.vue +++ b/pages/HealthExaminationApp/appointment/appointment.vue @@ -158,7 +158,7 @@ export default { this.getCheckType() }, methods: { - // 获取医院列表 app/getCareerHospital + // 获取医院列表 app/gethospital getHospitalList() { const params = { token: this.token, @@ -166,7 +166,7 @@ export default { } console.log('🚀 ~ getHospitalList ~ params:', params) uni.request({ - url: config.tjBaseUrl + '/app/getCareerHospital', + url: config.tjBaseUrl + '/app/gethospital', method: 'post', data: params, header: { @@ -356,7 +356,7 @@ export default { icon: 'success' }) uni.reLaunch({ - // url: '/pages/HealthExaminationApp/index/index' + url: '/pages/HealthExaminationApp/myAppointment/bookSuccessfully' }) } }, diff --git a/pages/HealthExaminationApp/jobAppointment/jobAppointment.vue b/pages/HealthExaminationApp/jobAppointment/jobAppointment.vue index 8dd0490..3fe727b 100644 --- a/pages/HealthExaminationApp/jobAppointment/jobAppointment.vue +++ b/pages/HealthExaminationApp/jobAppointment/jobAppointment.vue @@ -1,19 +1,512 @@ diff --git a/pages/HealthExaminationApp/myAppointment/healthExamDetails.vue b/pages/HealthExaminationApp/myAppointment/healthExamDetails.vue new file mode 100644 index 0000000..fb53fe7 --- /dev/null +++ b/pages/HealthExaminationApp/myAppointment/healthExamDetails.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/pages/HealthExaminationApp/myAppointment/myAppointment.vue b/pages/HealthExaminationApp/myAppointment/myAppointment.vue index a5a662f..a8593fe 100644 --- a/pages/HealthExaminationApp/myAppointment/myAppointment.vue +++ b/pages/HealthExaminationApp/myAppointment/myAppointment.vue @@ -1,20 +1,194 @@ \ No newline at end of file + .swipe-action { + padding: 10px; + border-radius: 5px; + word-break: break-all; + + .item-icon { + //定位 移到左上角 + position: absolute; + top: -42px; + left: -36px; + } + + .item-cont { + margin-left: 50px; + + .hospital-name { + font-size: 15px; + font-weight: bold; + line-height: 1.5; + } + + .combName { + display: flex; + justify-content: space-between; + } + } + } +} + diff --git a/pages/gzt/index.vue b/pages/gzt/index.vue index 6211a52..75259dd 100644 --- a/pages/gzt/index.vue +++ b/pages/gzt/index.vue @@ -197,7 +197,7 @@ jwtToken: uni.getStorageSync('App-Token') } const tjparams = { - username: '13708411772', + username: '13708411772', // 15912575796 password: 'YNsbd@123456' } console.log('🚀 ~ gotoYy ~ tjparams:', tjparams) diff --git a/static/images-tijian/isCanceled.png b/static/images-tijian/isCanceled.png new file mode 100644 index 0000000000000000000000000000000000000000..06bc79780f27e10b913181b8154bfd22ac543dab GIT binary patch literal 6380 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 literal 0 HcmV?d00001 diff --git a/static/images-tijian/isExamed.png b/static/images-tijian/isExamed.png new file mode 100644 index 0000000000000000000000000000000000000000..61d17e0a034509d18caa730c933e784bfad57d97 GIT binary patch literal 6300 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 literal 0 HcmV?d00001 diff --git a/static/images-tijian/readyExam.png b/static/images-tijian/readyExam.png new file mode 100644 index 0000000000000000000000000000000000000000..a30ba704d89dbceb4f63c9e285845e8304764e88 GIT binary patch literal 6043 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 literal 0 HcmV?d00001 From 7bf27993b3c6c58ab668d1c7487a6aab99d52dce Mon Sep 17 00:00:00 2001 From: binbin_pan Date: Wed, 4 Sep 2024 19:20:45 +0800 Subject: [PATCH 05/10] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/YNEduApp/exam/examination.vue | 15 ++++++++++- pages/YNEduApp/learn/learn.vue | 14 ++++++++++- pages/YNEduApp/learnProj/learnProjDetail.vue | 26 ++++++++++++++++++++ pages/YNEduApp/prac/exercises.vue | 17 +++++++++++-- 4 files changed, 68 insertions(+), 4 deletions(-) diff --git a/pages/YNEduApp/exam/examination.vue b/pages/YNEduApp/exam/examination.vue index 06280ed..c2abcbb 100644 --- a/pages/YNEduApp/exam/examination.vue +++ b/pages/YNEduApp/exam/examination.vue @@ -139,6 +139,7 @@ import config from '@/config' export default { data() { return { + isLoading: false, // 考试id examId: '', // 考试记录id @@ -369,6 +370,15 @@ export default { }, // 确认提交 handleConfirmSubmit() { + console.log('🚀 ~ 提交-->', this.isLoading) + if (this.isLoading) { + uni.showToast({ + title: '正在提交中, 请稍后', + icon: 'none' + }) + return + } + this.isLoading = true // 停止计时 this.$refs.countDown.pause() const params = { @@ -390,7 +400,6 @@ export default { success: res => { console.log('🚀 ~ handleConfirmSubmit ~ res:', res) res = res.data - this.showConfirmModal = false const params2 = { examId: this.examId, examGrade: res.examGrade, @@ -411,6 +420,10 @@ export default { uni.navigateTo({ url: `/pages/YNEduApp/exam/examinationDetails?params=${JSON.stringify(params2)}` }) + setTimeout(() => { + this.showConfirmModal = false + this.isLoading = false + }, 1000) } }) if (this.studyId) { diff --git a/pages/YNEduApp/learn/learn.vue b/pages/YNEduApp/learn/learn.vue index 02fec65..c0eb9e8 100644 --- a/pages/YNEduApp/learn/learn.vue +++ b/pages/YNEduApp/learn/learn.vue @@ -40,6 +40,7 @@ export default { }, data() { return { + isLoading: false, studyId: '', // 学习id stageId: '', // 阶段id stageContentId: '', // 阶段内容id @@ -103,6 +104,14 @@ export default { }, // 结束学习 handleEnd() { + if (this.isLoading) { + uni.showToast({ + title: '正在提交中, 请稍后', + icon: 'none' + }) + return + } + this.isLoading = true if (this.isEnd) { uni.reLaunch({ url: '/pages/YNEduApp/learnProj/learnProjDetail?id=' + this.studyId @@ -149,10 +158,13 @@ export default { }, success: res => { console.log('🚀 ~ handleEnd ~ res:', res) - this.showModal = false uni.reLaunch({ url: '/pages/YNEduApp/learnProj/learnProjDetail?id=' + this.studyId }) + setTimeout(() => { + this.isLoading = false + this.showModal = false + }, 1000) }, fail: err => { console.log('🚀 ~ handleEnd ~ err:', err) diff --git a/pages/YNEduApp/learnProj/learnProjDetail.vue b/pages/YNEduApp/learnProj/learnProjDetail.vue index d638c59..32144c4 100644 --- a/pages/YNEduApp/learnProj/learnProjDetail.vue +++ b/pages/YNEduApp/learnProj/learnProjDetail.vue @@ -317,6 +317,18 @@ export default { // 跳转考试 toggleTheoryExam(item) { console.log('🚀 ~ toggleTheoryExam ~ item:', item, item.examMsg.examEquipment) + const date = new Date() + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + const today = `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}` + if (today < item.examMsg.validityDate.split('~')[0] || today > item.examMsg.validityDate.split('~')[1]) { + uni.showToast({ + title: '当前时间不在考试时间范围内', + icon: 'none' + }) + return + } if (item.examMsg.examEquipment == 2) { uni.showToast({ title: '请在电脑端进行考试', @@ -324,6 +336,20 @@ export default { }) return } + // examCount 1: 不限次 2: 及格终止 3: 自定义 + if (item.examMsg.examCount == 2 && item.examMsg.results == 1) { + uni.showToast({ + title: '此考试及格终止, 考试以及格, 无需再次考试', + icon: 'none' + }) + return + } else if (item.examMsg.examCount == 3 && item.examMsg.examNum >= item.examMsg.examCustom) { + uni.showToast({ + title: '此考试有次数限制, 考试次数已达上限, 无法再考试了', + icon: 'none' + }) + return + } const params = { id: item.examMsg.id, // 考试id cutNum: item.examMsg.isCut, // 切屏次数 diff --git a/pages/YNEduApp/prac/exercises.vue b/pages/YNEduApp/prac/exercises.vue index d09304a..c7946c6 100644 --- a/pages/YNEduApp/prac/exercises.vue +++ b/pages/YNEduApp/prac/exercises.vue @@ -218,6 +218,7 @@ import config from '@/config' export default { data() { return { + isLoading: false, practiceId: '', // 练习id recordId: '', // 记录id isNew: 1, // 是否新练习 @@ -606,7 +607,8 @@ export default { recordId: this.recordId, questionId: this.questionList[0].questionId, selectAnswer: select.join(''), - isTrue: isCorrect ? 1 : 0 + isTrue: isCorrect ? 1 : 0, + isMiss: this.isError ? '1' : '' } console.log('🚀 ~ handleOk ~ params-多选:', params) // insertPracticeAnswerById(params) @@ -662,6 +664,14 @@ export default { }, // 结束答题 handleClose() { + if (this.isLoading) { + uni.showToast({ + title: '正在提交中, 请稍后', + icon: 'none' + }) + return + } + this.isLoading = true this.isEnd = true // 停止计时 clearInterval(this.intervalId) @@ -734,7 +744,10 @@ export default { url: '/pages/YNEduApp/prac/prac' }) } - this.showModal = false + setTimeout(() => { + this.isLoading = false + this.showModal = false + }, 500) }, // 打开题目选择弹框 async openSelect() { From c73e25f07d63165512965022b9f06b149127eeab Mon Sep 17 00:00:00 2001 From: binbin_pan Date: Thu, 5 Sep 2024 15:05:17 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E4=BD=93=E6=A3=80-=E4=BD=93=E6=A3=80?= =?UTF-8?q?=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.js | 4 +- pages.json | 10 +- .../appointment/appointment.vue | 3 +- pages/HealthExaminationApp/index/index.vue | 11 +- .../jobAppointment/jobAppointment.vue | 105 +------- .../myAppointment/healthExamDetails.vue | 38 +-- .../myAppointment/myAppointment.vue | 214 +++++++++++----- pages/HealthExaminationApp/report/pdfView.vue | 104 ++++++++ pages/HealthExaminationApp/report/report.vue | 230 +++++++++++++++++- pages/gzt/index.vue | 4 +- 10 files changed, 511 insertions(+), 212 deletions(-) create mode 100644 pages/HealthExaminationApp/report/pdfView.vue diff --git a/config.js b/config.js index 7cc9c74..fd91051 100644 --- a/config.js +++ b/config.js @@ -36,7 +36,9 @@ module.exports = { uploadUrl: 'http://192.168.0.14:19999/exam-file/file/uploadBase64', bmwUrl: 'http://192.168.0.14:19999/exam-bmw', // 体检-基础路径 - tjBaseUrl: 'http://192.168.0.14:20000/AppPeaManager', + // tjBaseUrl: 'http://192.168.0.14:20000/AppPeaManager', + tjBaseUrl: 'http://192.168.2.147:20000/AppPeaManager', + tjFile: 'http://112.29.103.165:1616/medicalDocumentation/statics/', // 应用信息 appInfo: { // 应用名称 diff --git a/pages.json b/pages.json index cfcaa42..14eb1d7 100644 --- a/pages.json +++ b/pages.json @@ -213,13 +213,19 @@ { "path": "pages/HealthExaminationApp/report/report", "style": { - "navigationBarTitleText": "提交报告" + "navigationBarTitleText": "体检报告" + } + }, + { + "path": "pages/HealthExaminationApp/report/pdfView", + "style": { + "navigationBarTitleText": "体检报告" } }, { "path": "pages/HealthExaminationApp/myAppointment/myAppointment", "style": { - "navigationBarTitleText": "我的预约" + "navigationStyle": "custom" } }, { diff --git a/pages/HealthExaminationApp/appointment/appointment.vue b/pages/HealthExaminationApp/appointment/appointment.vue index d5772a5..225d8d4 100644 --- a/pages/HealthExaminationApp/appointment/appointment.vue +++ b/pages/HealthExaminationApp/appointment/appointment.vue @@ -107,7 +107,7 @@
联系方式: {{ hospitalInfo.telPhone }}
-
+
@@ -351,6 +351,7 @@ export default { res = res.data console.log('🚀 ~ handleSave ~ res:', res) if (res.res == 1) { + uni.setStorageSync('appoint', true) uni.showToast({ title: '预约成功', icon: 'success' diff --git a/pages/HealthExaminationApp/index/index.vue b/pages/HealthExaminationApp/index/index.vue index 9f5c90e..eb6f8fa 100644 --- a/pages/HealthExaminationApp/index/index.vue +++ b/pages/HealthExaminationApp/index/index.vue @@ -72,6 +72,16 @@ export default { }, // 跳转页面 handlePage(url) { + if ( + (url == 'appointment' && uni.getStorageSync('appoint')) || + (url == 'jobAppointment' && uni.getStorageSync('jobAppoint')) + ) { + uni.showToast({ + title: '您已经预约过,无法再次预约!', + icon: 'none' + }) + return + } uni.navigateTo({ url: `/pages/HealthExaminationApp/${url}/${url}?params=${JSON.stringify(this.userInfo)}` }) @@ -126,7 +136,6 @@ export default { if (res.res === 1) { this.userInfo = res.obj[0] } - }, fail: err => { console.log('🚀 ~ getapplogininfo ~ err:', err) diff --git a/pages/HealthExaminationApp/jobAppointment/jobAppointment.vue b/pages/HealthExaminationApp/jobAppointment/jobAppointment.vue index 3fe727b..0d5a284 100644 --- a/pages/HealthExaminationApp/jobAppointment/jobAppointment.vue +++ b/pages/HealthExaminationApp/jobAppointment/jobAppointment.vue @@ -34,67 +34,6 @@ @confirm="confirmHospital" > - - -
-

请选择套餐

-
-
-
请选择
-
-
-
-
{{ checkType }}
-
-
-
- -
-
- -
-
- -
-
{{ checkTypeContent }}
-
-
展开
-
- -
-
-
-
收起
-
- -
-
-
-
- -
-
-
{{ item.combinName }}
-
项目内容:{{ item.combinContent }}
-
- 项目价格: - {{ item.combinPrice }}元 -
-
-
- -
- -
-
-
- @@ -109,7 +48,7 @@
联系方式: {{ hospitalInfo.telPhone }}
-
+
@@ -161,7 +100,7 @@ export default { this.getCheckType() }, methods: { - // 获取医院列表 app/getCareerHospital + // 获取医院列表 getHospitalList() { const params = { token: this.token, @@ -169,7 +108,7 @@ export default { } console.log('🚀 ~ getHospitalList ~ params:', params) uni.request({ - url: config.tjBaseUrl + '/app/getCareerHospital', + url: config.tjBaseUrl + '/app/getOccupationHospital', method: 'post', data: params, header: { @@ -230,43 +169,6 @@ export default { if (this.hospitalInfo.id) this.isDisabled = false this.show = false }, - // 选择检查类型 - handleCheckType(item, index) { - console.log('🚀 ~ handleCheckType ~ item:', item) - this.active = index - this.checkType = item.combName - this.getCheckTypeContent(item) - }, - // 获取套餐内容 - getCheckTypeContent(item) { - const params = { - token: this.token, - checkId: item.id, - combType: 2 - } - console.log('🚀 ~ getCheckTypeContent ~ params:', params) - uni.request({ - url: config.tjBaseUrl + '/app/getexamination', - method: 'post', - data: params, - header: { - 'Content-Type': 'application/x-www-form-urlencoded', - token: this.token - }, - success: res => { - res = res.data - console.log('🚀 ~ getCheckTypeContent ~ res:', res) - if (res.res == 1) { - this.setMealId = res.obj.tibean[0].id - this.checkTypeContent = res.obj.tibean[0].combName - this.checkTypeContentList = res.obj.tibeanson - } - }, - fail: err => { - console.log('🚀 ~ getCheckTypeContent ~ err:', err) - } - }) - }, handleShowTime() { if (this.isDisabled) { uni.showToast({ @@ -356,6 +258,7 @@ export default { res = res.data console.log('🚀 ~ handleSave ~ res:', res) if (res.res == 1) { + uni.setStorageSync('jobAppoint', true) uni.showToast({ title: '预约成功', icon: 'success' diff --git a/pages/HealthExaminationApp/myAppointment/healthExamDetails.vue b/pages/HealthExaminationApp/myAppointment/healthExamDetails.vue index fb53fe7..bb29a8c 100644 --- a/pages/HealthExaminationApp/myAppointment/healthExamDetails.vue +++ b/pages/HealthExaminationApp/myAppointment/healthExamDetails.vue @@ -14,7 +14,7 @@
{{ item.mealName }}:{{ item.mealContent }}
{{ item.mealPrice }} 元
- +
体检总价:{{ totalPrice }} 元
@@ -33,28 +33,11 @@ export default { // 套餐名称 combName: '', // 体检项目 - combItem: '项目1、项目2、项目3', + combItem: '', // 体检内容 - combContent: [ - { - mealName: '项目1', - mealContent: - '项目1内容项目1内容项目1内容项目1内容项目1内容项目1内容项目1内容项目1内容项目1内容项目1内容项目1内容项目1内容', - mealPrice: '100' - }, - { - mealName: '项目2', - mealContent: '项目2内容', - mealPrice: '200' - }, - { - mealName: '项目3', - mealContent: '项目3内容', - mealPrice: '300' - } - ], - // 体检总价 - totalPrice: 0 + combContent: [], + // 体检总价 + totalPrice: 0 } }, onLoad(opt) { @@ -65,14 +48,14 @@ export default { this.token = uni.getStorageSync('tjToken') }, mounted() { - // this.getDetail() + this.getDetail() }, methods: { // 获取详情 getDetail() { const params = { - token: this.token, - cancelId: this.cancelId + cancelId: String(this.cancelId), + token: this.token } console.log('🚀 ~ getDetail ~ params:', params) uni.request({ @@ -80,6 +63,7 @@ export default { method: 'post', data: params, header: { + 'Content-Type': 'application/x-www-form-urlencoded', token: this.token }, success: res => { @@ -88,7 +72,7 @@ export default { if (res.res == 1) { this.combContent = res.obj this.combItem = res.obj.map(item => item.mealName).join('、') - this.totalPrice = res.obj.reduce((total, item) => total + Number(item.mealPrice), 0) + this.totalPrice = res.obj.reduce((total, item) => total + Number(item.mealPrice), 0) } } }) @@ -117,7 +101,5 @@ export default { margin-bottom: 10px; word-break: break-all; } - - } diff --git a/pages/HealthExaminationApp/myAppointment/myAppointment.vue b/pages/HealthExaminationApp/myAppointment/myAppointment.vue index a8593fe..e2c0344 100644 --- a/pages/HealthExaminationApp/myAppointment/myAppointment.vue +++ b/pages/HealthExaminationApp/myAppointment/myAppointment.vue @@ -1,49 +1,52 @@ @@ -55,16 +58,31 @@ export default { return { token: '', show: false, - columns: [['全部', '已取消', '待体检', '已体检']], + columns: [ + [ + { label: '全部', value: 4 }, + { label: '已取消', value: 1 }, + { label: '待体检', value: 2 }, + { label: '已体检', value: 3 } + ] + ], // 体检状态 makeStatus: '', + makeStatusValue: 4, // 列表 makeList: [], + // 全部列表 + allList: [], + // 已取消列表 + canceledList: [], + // 待体检列表 + readyList: [], + // 已体检 + examList: [], isDisabled: false, options: [ { - text: '删除', - // disabled: isDisabled, + text: '取消', style: { backgroundColor: '#f56c6c' } @@ -81,9 +99,21 @@ export default { methods: { handleSearch(e) { console.log('🚀 ~ handleSearch ~ e:', e) - this.makeStatus = e.value[0] + this.makeStatus = e.value[0].label + this.makeStatusValue = e.value[0].value this.show = false }, + handleQuery(){ + if (this.makeStatusValue == 4) { + this.makeList = this.allList + } else if (this.makeStatusValue == 1) { + this.makeList = this.canceledList + } else if (this.makeStatusValue == 2) { + this.makeList = this.readyList + } else if (this.makeStatusValue == 3) { + this.makeList = this.examList + } + }, // 获取列表 getpersonappointInfo getList() { console.log('🚀 ~ 列表 ~ this.token:', this.token) @@ -99,7 +129,10 @@ export default { res = res.data console.log('🚀 ~ 列表 ~ res:', res) if (res.res == 1) { - this.makeList = res.obj + this.makeList = this.allList = res.obj + this.canceledList = res.obj.filter(item => item.ifCancel == 1) + this.readyList = res.obj.filter(item => item.ifCancel == 2) + this.examList = res.obj.filter(item => item.ifCancel == 3) } }, fail: err => { @@ -107,23 +140,72 @@ export default { } }) }, - // 操作-删除 - handleDelete(item) { - console.log('🚀 ~ handleDelete ~ item:', item) - - }, - // - handleOption(item) { - console.log('🚀 ~ handleOption ~ item:', item) - const params = { - id: item.id, - combName: item.combName, - } - console.log('🚀 ~ handleOption ~ params:', params) - uni.navigateTo({ - url: '/pages/HealthExaminationApp/myAppointment/healthExamDetails?params=' + JSON.stringify(params) - }) - } + // 操作-删除 cancelpoint + handleDelete(item) { + console.log('🚀 ~ handleDelete ~ item:', item) + const params = { + cancelId: item.id, + mealType: item.setMealType, + token: this.token + } + // 弹框确认 + uni.showModal({ + title: '提示', + content: '确认取消预约吗?', + success: res => { + console.log('🚀 ~ handleDelete ~ res:', res) + if (res.confirm) { + uni.request({ + url: config.tjBaseUrl + '/app/cancelpoint', + method: 'post', + data: params, + header: { + 'Content-Type': 'application/x-www-form-urlencoded', + token: this.token + }, + success: res => { + res = res.data + console.log('🚀 ~ 取消预约 ~ res:', res) + if (res.res == 1) { + if (item.setMealType == '2') { + uni.removeStorageSync('appoint') + } else if (item.setMealType == '3') { + uni.removeStorageSync('jobAppoint') + } + // 刷新 - 重定向 + uni.redirectTo({ + url: '/pages/HealthExaminationApp/myAppointment/myAppointment' + }) + } + }, + fail: err => { + console.log('🚀 ~ 列表 ~ err:', err) + } + }) + } + }, + fail: err => { + console.log('🚀 ~ handleDelete ~ err:', err) + } + }) + }, + // + handleOption(item) { + console.log('🚀 ~ handleOption ~ item:', item) + const params = { + id: item.id, + combName: item.combName + } + console.log('🚀 ~ handleOption ~ params:', params) + uni.navigateTo({ + url: '/pages/HealthExaminationApp/myAppointment/healthExamDetails?params=' + JSON.stringify(params) + }) + }, + leftClick() { + uni.reLaunch({ + url: '/pages/HealthExaminationApp/index/index' + }) + } } } diff --git a/pages/HealthExaminationApp/report/pdfView.vue b/pages/HealthExaminationApp/report/pdfView.vue new file mode 100644 index 0000000..41088f8 --- /dev/null +++ b/pages/HealthExaminationApp/report/pdfView.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/pages/HealthExaminationApp/report/report.vue b/pages/HealthExaminationApp/report/report.vue index 748742a..d6cf40f 100644 --- a/pages/HealthExaminationApp/report/report.vue +++ b/pages/HealthExaminationApp/report/report.vue @@ -1,19 +1,229 @@ diff --git a/pages/gzt/index.vue b/pages/gzt/index.vue index 75259dd..32e0cc0 100644 --- a/pages/gzt/index.vue +++ b/pages/gzt/index.vue @@ -197,7 +197,7 @@ jwtToken: uni.getStorageSync('App-Token') } const tjparams = { - username: '13708411772', // 15912575796 + username: '17681010134', // 15912575796 password: 'YNsbd@123456' } console.log('🚀 ~ gotoYy ~ tjparams:', tjparams) @@ -262,7 +262,7 @@ }, 500) } else { uni.showToast({ - title: req.message, + title: res.msg, icon: 'none' }) } From a03f5c08b4cd745a4adf2a3de62898a49743c85a Mon Sep 17 00:00:00 2001 From: binbin_pan Date: Thu, 5 Sep 2024 18:17:59 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E5=9F=B9=E8=AE=AD=20bug=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/YNEduApp/exam/examination.vue | 58 ++++++------ pages/YNEduApp/learnProj/imageStudy.vue | 5 +- pages/YNEduApp/learnProj/pdfStudy.vue | 6 +- pages/YNEduApp/prac/exercises.vue | 114 +++++++++++++++++------- pages/YNEduApp/user/faceScan.vue | 8 +- 5 files changed, 118 insertions(+), 73 deletions(-) diff --git a/pages/YNEduApp/exam/examination.vue b/pages/YNEduApp/exam/examination.vue index c2abcbb..870abfd 100644 --- a/pages/YNEduApp/exam/examination.vue +++ b/pages/YNEduApp/exam/examination.vue @@ -208,10 +208,6 @@ export default { }, mounted() { this.getList() - this.random1 = Math.ceil(Math.random() * 100000) + 420000 // random1 在 7-13分钟之间 - // this.random1 = 10000 - this.random2 = Math.ceil(Math.random() * 100000) + 900000 // random2 在 15-19分钟之间 - console.log('🚀 ~ mounted ~ this.random1:', this.random1, this.random2) }, // onUnload() { // console.log('🚀 ~ onUnload ~ 页面关闭') @@ -224,14 +220,7 @@ export default { const params = { examId: this.examId } - // const res = await getExamQuestionList(params) - // const data = res.data - // this.questionList = data.examPaperData - // this.recordId = data.recordId - // this.examTime = data.answerTime - // this.time = Number(data.answerTime) * 60 * 1000 - // console.log('🚀 ~ getList ~ this.time:', this.time) - // console.log('🚀 ~ getList ~ res考试题:', res) + uni.request({ url: config.baseUrl + '/exam-student/studentExam/getExamQuestionList', method: 'post', @@ -250,6 +239,9 @@ export default { this.time = Number(data.answerTime) * 60 * 1000 console.log('🚀 ~ getList ~ this.time:', this.time) console.log('🚀 ~ getList ~ this.questionList:', this.questionList) + this.random1 = (data.answerTime/3) * 60 + Math.ceil(Math.random() * 20) + 20 + this.random2 = (data.answerTime/2) * 60 + Math.ceil(Math.random() * 30) + 30 + console.log('🚀 ~ getList ~ this.random1:', this.random1, this.random2) if (this.questionList.length > 0) { this.questionList.forEach((item, index) => { this.$set(item, 'isShow', index < 7) @@ -282,12 +274,12 @@ export default { this.time - (time.days * 24 * 60 * 60 + time.hours * 60 * 60 + time.minutes * 60 + time.seconds) * 1000 // console.log('🚀 ~ changeCountDown ~ this.answerTime:', this.answerTime) if (this.answerTime > this.random1 && this.answerTime < this.random2 && !this.hasScanned) { - this.openFaceScan() // Android 人脸识别 - // this.openPhotograph() // IOS 拍照识别 + // this.openFaceScan() // Android 人脸识别 + this.openPhotograph() // IOS 拍照识别 this.hasScanned = true } else if (this.answerTime > this.random2 && this.hasScanned) { - this.openFaceScan() - // this.openPhotograph() + // this.openFaceScan() + this.openPhotograph() this.hasScanned = false } if (this.answerTime == this.time) { @@ -452,18 +444,18 @@ export default { // }) }, // 人脸识别 - async openFaceScan() { - face.open(['a'], e => { - console.log('🚀 ~ e-人脸识别:', e) - face.close() - let params = { - userId: uni.getStorageSync('userId'), - img: e - } - params = JSON.stringify(params) - this.getFaceRecognition(params) - }) - }, + // async openFaceScan() { + // face.open(['a'], e => { + // console.log('🚀 ~ e-人脸识别:', e) + // face.close() + // let params = { + // userId: uni.getStorageSync('userId'), + // img: e + // } + // params = JSON.stringify(params) + // this.getFaceRecognition(params) + // }) + // }, // 拍照录入 openPhotograph() { this.isHide = true @@ -478,7 +470,7 @@ export default { this.imgToBase64(res.tempFilePaths[0]).then(base64 => { url = base64 console.log('🚀 ~ this.imgToBase64 ~ base64:', url) - this.getFaceRecognition(url) + this.getFaceRecognition({ userId: uni.getStorageSync('userId'), img: url }) }) }, fail: err => { @@ -501,6 +493,7 @@ export default { }, // 发送请求 getFaceRecognition(params) { + console.log('🚀 ~ getFaceRecognition ~ params:', params) uni.request({ url: config.baseUrl + '/exam-student/personalCenter/getFaceRecognition', method: 'POST', @@ -510,8 +503,9 @@ export default { }, data: params, success: res => { + console.log('🚀 ~ openFaceScan ~ res-人脸识别:', res) res = res.data - console.log('🚀 ~ openFaceScan ~ res-人脸识别:', res, res.code) + console.log('🚀 ~ openFaceScan ~ res-人脸识别:', res.code) if (res.code == 200) { this.$refs.uToast.show({ message: '人脸识别成功', @@ -529,6 +523,10 @@ export default { }, fail(err) { console.log('🚀 ~ openFaceScan ~ 人脸识别失败', err) + this.$refs.uToast.show({ + message: err.errMsg, + duration: 1000 + }) } }) }, diff --git a/pages/YNEduApp/learnProj/imageStudy.vue b/pages/YNEduApp/learnProj/imageStudy.vue index 1a6fa6a..cd83aeb 100644 --- a/pages/YNEduApp/learnProj/imageStudy.vue +++ b/pages/YNEduApp/learnProj/imageStudy.vue @@ -29,7 +29,7 @@ export default { console.log('🚀 ~ onLoad ~ this.params:', this.path) console.log('🚀 ~ onLoad ~ this.params:', Number(opt.studyDuration), Number(opt.allStudyDuration)) - if (Number(opt.studyDuration) <= Number(opt.allStudyDuration)) { + if (Number(opt.studyDuration) < Number(opt.allStudyDuration)) { this.isEnd = false setTimeout(() => { this.countDown() @@ -77,11 +77,10 @@ export default { // let studyDuration = Number(this.params.studyDuration) this.timer = setInterval(() => { allStudyDuration-- - // studyDuration++ this.params.studyDuration++ - // this.$set(this.params, 'studyDuration', studyDuration) console.log('🚀 ~ countDown ~ this.params.studyDuration:', this.params.studyDuration) if (allStudyDuration <= 0) { + this.params.studyDuration = this.params.allStudyDuration this.isEnd = true clearInterval(this.timer) // 提示-学习时长已满 diff --git a/pages/YNEduApp/learnProj/pdfStudy.vue b/pages/YNEduApp/learnProj/pdfStudy.vue index 05c8045..d22a8e0 100644 --- a/pages/YNEduApp/learnProj/pdfStudy.vue +++ b/pages/YNEduApp/learnProj/pdfStudy.vue @@ -34,7 +34,7 @@ export default { } console.log('🚀 ~ onLoad ~ this.params:', this.path) console.log('🚀 ~ onLoad ~ this.params:', Number(opt.studyDuration), Number(opt.allStudyDuration)) - if (Number(opt.studyDuration) <= Number(opt.allStudyDuration)) { + if (Number(opt.studyDuration) < Number(opt.allStudyDuration)) { setTimeout(() => { this.countDown() }, 1000) @@ -62,14 +62,12 @@ export default { // 根据allStudyDuration 倒计时 countDown() { let allStudyDuration = Number(this.params.allStudyDuration) - Number(this.params.studyDuration) - // let studyDuration = Number(this.params.studyDuration) this.timer = setInterval(() => { allStudyDuration-- - // studyDuration++ this.params.studyDuration++ - // this.$set(this.params, 'studyDuration', studyDuration) console.log('🚀 ~ countDown ~ this.params.studyDuration:', this.params.studyDuration) if (allStudyDuration <= 0) { + this.params.studyDuration = this.params.allStudyDuration clearInterval(this.timer) setTimeout(() => { this.updStudyDuration() diff --git a/pages/YNEduApp/prac/exercises.vue b/pages/YNEduApp/prac/exercises.vue index c7946c6..ecbd815 100644 --- a/pages/YNEduApp/prac/exercises.vue +++ b/pages/YNEduApp/prac/exercises.vue @@ -17,7 +17,7 @@
-
+
{{ nowNum }}.{{ item.paperTopic }}{{ item.examType == 1 ? '(单选题)' : '(判断题)' }}
-
{{ option.optionIdent }}.{{ option.optionContent }}
+
+
+
{{ option.optionIdent }}.
+
{{ option.optionContent }}
+
+ +
@@ -46,15 +60,15 @@
正确答案:{{ item.correctGrade }}
你的答案:{{ item.select }}
-
+
答案解析:
{{ item.answerAnaly }}
-
-
{{ index + 1 }}. {{ item.paperTopic }}(多选题)
+
+
{{ nowNum }}. {{ item.paperTopic }}(多选题)
-
+
{{ option.optionIdent }}.
{{ option.optionContent }}
@@ -80,11 +94,11 @@
@@ -224,7 +238,7 @@ export default { isNew: 1, // 是否新练习 isOutOfOrder: 1, // 是否乱序 isError: false, // 是否错题消除 - nowNum: 0, // 当前题目索引 + nowNum: '', // 当前题目索引 showModal: false, showModalSelect: false, // 正确率 @@ -273,19 +287,13 @@ export default { }, methods: { // 获取题目-上方数量 - async getPracticeItData() { + getPracticeItData() { const params = { practiceId: this.practiceId, recordId: this.recordId, isNew: this.isNew || '', isMiss: this.isError ? '1' : '' } - // const res = await getPracticeItData(params) - // this.trueNum = res.data.trueNum - // this.falseNum = res.data.falseNum - // this.allNum = res.data.allNum - // this.nowNum = res.data.nowNum - // console.log('🚀 ~ getPracticeItData ~ res:', res) uni.request({ url: config.baseUrl + '/exam-student/studentPractice/getPracticeItData', method: 'post', @@ -308,7 +316,7 @@ export default { }) }, // 获取题目 - async getPracticeQuestion() { + getPracticeQuestion() { this.questionList = [] const params = { practiceId: this.practiceId, @@ -333,8 +341,43 @@ export default { success: res => { console.log('🚀 ~ getPracticeQuestion ~ res:', res) res = res.data - this.recordId = res.data.recordId ? res.data.recordId : this.recordId this.questionList.push(res.data) + console.log('🚀 ~ getPracticeQuestion ~ :', this.questionList[0]) + this.recordId = res.data.recordId ? res.data.recordId : this.recordId + if (res.data.selectAnswer) { + console.log('执行了--') + if (this.questionList[0].examType == 2) { + this.questionList[0].select = res.data.selectAnswer.split('') + this.questionList[0].isSelect = true + // 给selectAnswer选项如果正确添加正确标记, 错误添加错误标记并给正确选项添加标记 + this.questionList[0].listOption.forEach(item => { + if (res.data.selectAnswer.includes(item.optionIdent)) { + item.isSelect = true + } + if (res.data.correctGrade.includes(item.optionIdent)) { + item.isCorrect = true + } + if (item.isSelect && !this.questionList[0].correctGrade.includes(item.optionIdent)) { + item.isError = true + } + }) + } else { + this.questionList[0].select = res.data.selectAnswer + this.questionList[0].isSelect = true + // 给selectAnswer选项如果正确添加正确标记, 错误添加错误标记并给正确选项添加标记 + this.questionList[0].listOption.forEach(item => { + if (res.data.selectAnswer === item.optionIdent) { + item.isSelect = true + } + if (item.optionIdent === this.questionList[0].correctGrade) { + item.isCorrect = true + } + if (item.isSelect && item.optionIdent !== this.questionList[0].correctGrade) { + item.isError = true + } + }) + } + } }, fail: err => { console.log(err) @@ -342,15 +385,16 @@ export default { }) }, // 跳题 - async handleJump(item, index) { + handleJump(item, index) { console.log('🚀 ~ handleJump ~ item:', item, this.recordId) if (item === 'prev') { - this.nowNum -= 1 + this.nowNum-- } else if (item === 'next') { - this.nowNum += 1 + this.nowNum++ } else if (item === 'jump') { this.nowNum = index } + console.log('🚀 ~ handleJump ~ this.nowNum:', this.nowNum) this.currentIndex = index this.questionList = [] @@ -378,7 +422,7 @@ export default { res = res.data this.questionList.push(res.data) if (res.data.selectAnswer) { - if (this.questionList[0].examType === 2) { + if (this.questionList[0].examType == 2) { this.questionList[0].select = res.data.selectAnswer.split('') this.questionList[0].isSelect = true // 给selectAnswer选项如果正确添加正确标记, 错误添加错误标记并给正确选项添加标记 @@ -386,7 +430,7 @@ export default { if (res.data.selectAnswer.includes(item.optionIdent)) { item.isSelect = true } - if (item.optionIdent === this.questionList[0].correctGrade) { + if (res.data.correctGrade.includes(item.optionIdent)) { item.isCorrect = true } if (item.isSelect && !this.questionList[0].correctGrade.includes(item.optionIdent)) { @@ -417,7 +461,7 @@ export default { }) }, // 获取题目列表-弹框 - async getPracticeQuestionList() { + getPracticeQuestionList() { const params = { recordId: this.recordId, practiceId: this.practiceId, @@ -627,7 +671,7 @@ export default { } }, // 提交 - async handleSubmit() { + handleSubmit() { // 暂停时间 clearInterval(this.intervalId) console.log('提交') @@ -750,7 +794,7 @@ export default { }, 500) }, // 打开题目选择弹框 - async openSelect() { + openSelect() { this.showModalSelect = true // const res = await this.getPracticeQuestionList() // console.log('🚀 ~ openSelect ~ res:', res) @@ -882,6 +926,8 @@ export default { } .question-wrapper { + max-height: 500px; + overflow: auto; padding: 30px; color: #08428d; @@ -901,11 +947,15 @@ export default { background: #ffffff; border-radius: 8px; overflow: auto; - .label { - display: flex; - align-items: center; - justify-content: flex-start; - text-align: left; + .label-wrapper { + max-height: 100px; + overflow: auto; + .label { + display: flex; + align-items: center; + justify-content: flex-start; + text-align: left; + } } } .active { diff --git a/pages/YNEduApp/user/faceScan.vue b/pages/YNEduApp/user/faceScan.vue index f7c17c8..97e1162 100644 --- a/pages/YNEduApp/user/faceScan.vue +++ b/pages/YNEduApp/user/faceScan.vue @@ -22,8 +22,8 @@
- - + +
@@ -36,8 +36,8 @@
收集您的信息,以实现在考试中检测是否是您本人操作,请务必录入您本人的面部信息
- - + +
From c4dec49f2831a6e1806d96bde0b9db08ae36a858 Mon Sep 17 00:00:00 2001 From: binbin_pan Date: Fri, 6 Sep 2024 14:53:49 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E4=BD=93=E6=A3=80=20=E4=B8=8E=20?= =?UTF-8?q?=E5=9F=B9=E8=AE=AD=E9=AA=8C=E8=AF=81token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.js | 67 ++++++--- pages.json | 14 ++ pages/HealthExaminationApp/index/index.vue | 134 +++++++++++++++--- pages/HealthExaminationApp/index/message.vue | 111 +++++++++++++++ pages/HealthExaminationApp/index/userInfo.vue | 62 ++++++++ pages/YNEduApp/exam/exam.vue | 1 + pages/YNEduApp/exam/examination.vue | 22 +-- pages/YNEduApp/exam/examinationDetails.vue | 1 + pages/YNEduApp/exam/examinationList.vue | 1 + .../exam/examinationResultDetails.vue | 1 + pages/YNEduApp/index/index.vue | 9 +- pages/YNEduApp/index/notices.vue | 3 +- pages/YNEduApp/learn/learn.vue | 1 + pages/YNEduApp/learnProj/imageStudy.vue | 1 + pages/YNEduApp/learnProj/learnProj.vue | 1 + pages/YNEduApp/learnProj/learnProjDetail.vue | 1 + pages/YNEduApp/learnProj/pdfStudy.vue | 1 + pages/YNEduApp/prac/exercises.vue | 10 ++ pages/YNEduApp/prac/prac.vue | 1 + pages/YNEduApp/prac/pracDetail.vue | 1 + pages/YNEduApp/user/faceScan.vue | 1 + pages/YNEduApp/user/myMsg.vue | 3 + pages/YNEduApp/user/user.vue | 1 + pages/gzt/index.vue | 10 +- pages/login.vue | 2 +- static/images-tijian/logout.png | Bin 0 -> 1270 bytes static/images-tijian/message.png | Bin 0 -> 1940 bytes static/images-tijian/userInfo.png | Bin 0 -> 2745 bytes utils/request.js | 3 - 29 files changed, 408 insertions(+), 55 deletions(-) create mode 100644 pages/HealthExaminationApp/index/message.vue create mode 100644 pages/HealthExaminationApp/index/userInfo.vue create mode 100644 static/images-tijian/logout.png create mode 100644 static/images-tijian/message.png create mode 100644 static/images-tijian/userInfo.png diff --git a/main.js b/main.js index bfd88d8..f5ef3a8 100644 --- a/main.js +++ b/main.js @@ -7,11 +7,11 @@ import Vue from 'vue' Vue.config.productionTip = false // Vue.prototype.$api = $api Vue.prototype.$store = store -Vue.prototype.$adpid = "1111111111" +Vue.prototype.$adpid = '1111111111' Vue.prototype.$backgroundAudioData = { - playing: false, - playTime: 0, - formatedPlayTime: '00:00:00' + playing: false, + playTime: 0, + formatedPlayTime: '00:00:00' } import uView from '@/uni_modules/uview-ui' @@ -24,29 +24,56 @@ Vue.use(uView) // const vconsole = require('vconsole') // Vue.prototype.$vconsole = new vconsole() // 使用vconsole +Vue.prototype.$verificationToken = function () { + console.log('验证Token-->') + uni.request({ + url: 'http://192.168.0.14:19999/exam-bmw/users/current', + method: 'get', + header: { + Authorization: uni.getStorageSync('access_token') + }, + success: (res) => { + console.log('🚀 ~ res:', res) + let data = res.data + console.log('🚀 ~ res.data:', data) + if (data === '' || data === undefined) { + uni.showToast({ + title: '已在其他设备登录,请重新登录', + icon: 'none' + }) + uni.reLaunch({ + url: '/pages/login' + }) + } + }, + fail: (err) => { + console.log('🚀 ~ err:', err) + } + }) +} + App.mpType = 'app' const app = new Vue({ - store, - ...App + store, + ...App }) app.$mount() // #endif // #ifdef VUE3 -import { - createSSRApp -} from 'vue' +import { createSSRApp } from 'vue' +import { data } from 'uview-ui/libs/mixin/mixin'; export function createApp() { - const app = createSSRApp(App) - app.use(store) - app.config.globalProperties.$adpid = "1111111111" - app.config.globalProperties.$backgroundAudioData = { - playing: false, - playTime: 0, - formatedPlayTime: '00:00:00' - } - return { - app - } + const app = createSSRApp(App) + app.use(store) + app.config.globalProperties.$adpid = '1111111111' + app.config.globalProperties.$backgroundAudioData = { + playing: false, + playTime: 0, + formatedPlayTime: '00:00:00' + } + return { + app + } } // #endif diff --git a/pages.json b/pages.json index 14eb1d7..2be0f27 100644 --- a/pages.json +++ b/pages.json @@ -261,6 +261,20 @@ { "navigationBarTitleText" : "体检预约单" } + }, + { + "path" : "pages/HealthExaminationApp/index/userInfo", + "style" : + { + "navigationBarTitleText" : "个人信息" + } + }, + { + "path" : "pages/HealthExaminationApp/index/message", + "style" : + { + "navigationBarTitleText" : "消息通知" + } } ], "globalStyle": { diff --git a/pages/HealthExaminationApp/index/index.vue b/pages/HealthExaminationApp/index/index.vue index eb6f8fa..cc301d7 100644 --- a/pages/HealthExaminationApp/index/index.vue +++ b/pages/HealthExaminationApp/index/index.vue @@ -1,6 +1,5 @@