Pārlūkot izejas kodu

三力测试结构修改9

JXDS18FUJT 1 gadu atpakaļ
vecāks
revīzija
be9f9cdaed

+ 14 - 1
src/api/modules/exam.js

@@ -355,8 +355,21 @@ const exam = {
 			method: "get",
 
 		})
+	},
+	//查询色盲题列表
+	studentQuestionSeList(){
+		return request({
+			url:"student/question/se/list",
+			method:'GET'
+		})
+	},
+	//查询考试色盲考试题列表
+	studentQuestionSeTestList(){
+		return request({
+			url:"student/question/se/testList",
+			method:'get'
+		})
 	}
-	//
 }
 
 export default exam

+ 472 - 0
src/otherPages/beforeColorExam/index.vue

@@ -0,0 +1,472 @@
+<template>
+    <view class="threeExam">
+        <!-- <view style="position: absolute;top: 0;left: 0;z-index:99;">
+        <image style="width: 100vw;" mode="widthFix" src="https://ndata.zzxcx.net/ctjk/mp-wx/threeExam/bg.png"></image>
+      </view> -->
+        <topbar>
+            <view class="nav">
+                <image @click="back" mode="widthFix" class="leftArrow"
+                    src="https://ndata.zzxcx.net/ctjk/mp-wx/mockExamEnd/arrow-left.png"></image>
+                <text class="title">色盲测试</text>
+            </view>
+        </topbar>
+
+        <view class="mid1">
+            <view class="mid1-line1">
+                <view class="mid1-line1-title">考试类型 </view>
+                <view class="mid1-line1-content">
+                    <view>小车(C1/C2)</view>
+                    <view>摩托车(D/E/F)</view>
+                    <view>轻型牵引挂车(C6)</view>
+                </view>
+            </view>
+            <!-- <view class="mid1-line1">
+          <view class="mid1-line1-title">考试标准 </view>
+          <view class="mid1-line1-content">
+            <view>20题,20分钟 </view>
+          </view>
+        </view>
+        <view class="mid1-line1">
+          <view class="mid1-line1-title">合格标准 </view>
+          <view class="mid1-line1-content">
+            <view>90分及格(满分100分) </view>
+          </view>
+        </view>
+        <view class="mid1-line1">
+          <view class="mid1-line1-title">出题规则 </view>
+          <view class="mid1-line1-content">
+            <view>根据公安部出题规则组卷</view>
+          </view>
+        </view> -->
+            <!-- <view class="mid1-line2">
+                <view class="mid1-line2-content">
+                    温馨提示:考试模式不能修改答案,每错1题扣5分,错题累计超过2题,考试不能通过,系统自动提醒交卷。
+                </view>
+            </view> -->
+            <view class="mid1-submit">
+                <navigator url="/otherPages/colorExam/index?showSubmit=1">
+                    <view class="mid1-submit-begin">
+                        <view style="width: 300rpx;">
+                            <view class="mid1-submit-begin-line1">
+                                模拟考试
+                            </view>
+                            <view style="color: #CCE0FF;" class="mid1-submit-begin-line2">
+                                仿真模拟考试
+                            </view>
+                        </view>
+                        <view class="mid1-submit-begin-button1">
+                            开始考试
+                        </view>
+                    </view>
+                </navigator>
+
+
+                <navigator url="/otherPages/colorExam/index?showSubmit=0">
+                    <view class="mid1-submit-continue">
+                        <view style="width: 300rpx;">
+                            <view class="mid1-submit-continue-line1">
+                                全部题库
+                            </view>
+                            <view style="color: #D1FFE5;" class="mid1-submit-continue-line2">
+                                顺序练习全部题目
+                            </view>
+                        </view>
+                        <view class="mid1-submit-continue-button1">
+                            开始练习
+                        </view>
+                    </view>
+                </navigator>
+
+                <view @click="watchColorGlass" style="background: linear-gradient( 265deg, #F5893B 0%, #F5AD7A 100%);"
+                    class="mid1-submit-begin">
+                    <view style="width: 300rpx;">
+                        <view class="mid1-submit-begin-line1">
+                            色弱眼镜
+                        </view>
+                        <view style="color: #FFE4D1;" class="mid1-submit-begin-line2">
+                            帮助矫正色弱
+                        </view>
+                    </view>
+                    <view style="color: #F5893B;background: linear-gradient( 90deg, #FFFFFF 0%, #FFD9BD 100%);"
+                        class="mid1-submit-begin-button1">
+                        使用眼镜
+                    </view>
+                </view>
+
+                <!-- <view class="mid1-submit-continue">
+              <view style="width: 300rpx;">
+                <view class="mid1-submit-continue-line1">
+                  全部题库
+                </view>
+                <view class="mid1-submit-continue-line2">
+                  顺序练习全部题目
+                </view>
+              </view>
+              <view class="mid1-submit-continue-button1">
+                开始练习
+              </view>
+            </view> -->
+            </view>
+        </view>
+        <view class="mid2">
+            <view class="mid2-line1">
+                <image class="mid2-line1-icon"
+                    src="https://ndata.zzxcx.net/ctjk/mp-wx/threeExam/%E9%97%AE%E5%8F%B7%402x.png" mode="widthFix">
+                </image>
+                <text style="color: #498ef5; font-size: 34rpx;font-weight: bold;">色盲测试的重要性</text>
+            </view>
+            <view class="mid2-line2">
+                安全驾驶其中很大一部分来源于身体健康的支持, 考前体检就是对驾驶者身体健康的一个确认,其中一项就是让体检者观察色盲测试图,也称辨色力,看是否有红绿色盲,如果有就不可以考驾照。
+            </view>
+        </view>
+        <view style="height: 2vw;"></view>
+        <view class="wxad">
+            <ad ad-type="video" :ad-intervals="100" unit-id="adunit-8eb44bbd7e3147d4"></ad>
+        </view>
+    </view>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+export default {
+    data() {
+        return {};
+    },
+    computed: {
+        ...mapGetters(['nbjk_set'])
+    },
+    onLoad(){
+        let interstitialAd
+        if (uni.createInterstitialAd) {
+        interstitialAd = uni.createInterstitialAd({
+          adUnitId: "adunit-7f8366efc6a07d93",
+        });
+        interstitialAd.onLoad(() => {});
+        interstitialAd.onError((err) => {
+        //   console.error(err);
+        //   uni.navigateTo({
+        //     url: "/pages/extraWeb/index?" + utils.mapToUrlQuery(query),
+        //   });
+        });
+        interstitialAd.onClose(() => {
+        //   uni.navigateTo({
+        //     url: "/pages/extraWeb/index?" + utils.mapToUrlQuery(query),
+        //   });
+        });
+      }
+
+      // 在适合的场景显示插屏广告
+      if (interstitialAd) {
+        interstitialAd.show().catch((err) => {
+        //   console.error(err);
+        //   uni.navigateTo({
+        //     url: "/pages/extraWeb/index?" + utils.mapToUrlQuery(query),
+        //   });
+        });
+      }
+    },
+    methods: {
+        watchColorGlass() {
+            let that = this
+            console.log(that.nbjk_set)
+            wx.openChannelsActivity({
+                finderUserName: "sphQVbhe9O04tqB",
+                feedId: that.nbjk_set.CTJK_SP_YJ
+            })
+
+        },
+        watchAdToExam() {
+            let that = this
+            let interstitialAd = null;
+            uni.showModal({
+                title: '观看插屏广告',
+                content: '广告关闭后开始考试',
+                success(res) {
+                    if (res.confirm) {
+
+                        if (uni.createInterstitialAd) {
+                            interstitialAd = uni.createInterstitialAd({
+                                adUnitId: "adunit-7f8366efc6a07d93",
+                            });
+                            interstitialAd.onLoad(() => {
+
+                            });
+                            interstitialAd.onError((err) => {
+                                console.log(err)
+                            });
+                            interstitialAd.offClose();
+                            interstitialAd.onClose((res) => {
+
+                                // if (!res.isEnded) {
+                                //     return
+                                // }
+                                //	that.wxadWatchTip=false
+                                uni.navigateTo({
+                                    url: "/otherPages/colorExam/index?showSubmit=1"
+                                })
+                            });
+                            // interstitialAd.show().catch(() => {
+                            //     // 失败重试
+                            //     interstitialAd
+                            //         .load()
+                            //         .then(() => interstitialAd.show())
+                            //         .catch((err) => {
+                            //             console.log("激励视频 广告显示失败");
+                            //         });
+                            // });
+                        } else if (res.cancel) {
+                            console.log('用户点击取消')
+                        }
+                    }
+
+                }
+
+            })
+
+
+
+        },
+        back() {
+            uni.navigateBack();
+        },
+    },
+};
+</script>
+
+<style lang="scss" scoped>
+.threeExam {
+    background: url("https://ndata.zzxcx.net/ctjk/mp-wx/threeExam/bg.png");
+    background-size: 100%;
+    background-repeat: no-repeat;
+    padding-bottom: constant(safe-area-inset-bottom);
+    padding-bottom: env(safe-area-inset-bottom);
+    position: relative;
+    background-color: #fff;
+    background-size: 100% auto;
+
+    .nav {
+        width: 100%;
+        height: 100%;
+        position: relative;
+        display: flex;
+        align-items: center;
+
+        .leftArrow {
+            width: 18rpx;
+            position: absolute;
+            left: 30rpx;
+        }
+
+        .title {
+            position: absolute;
+            left: 50%;
+        }
+    }
+
+    .mid1 {
+
+        width: 690rpx;
+
+        margin: 0 auto;
+        padding-top: 40rpx;
+        background-size: 100%;
+
+        .mid1-line1 {
+            display: flex;
+
+            flex-direction: row;
+
+            padding: 10rpx 30rpx;
+
+
+            .mid1-line1-title {
+                width: 270rpx;
+                padding-right: 66rpx;
+                text-align: right;
+                color: #8a9099;
+                font-size: 30rpx;
+            }
+
+            .mid1-line1-content {
+                width: 412rpx;
+                padding-right: 30rpx;
+                text-align: left;
+                font-size: 30rpx;
+                color: #5c6066;
+            }
+        }
+
+        .mid1-line2 {
+            padding: 0 10rpx;
+            margin-top: 28rpx;
+
+            .mid1-line2-content {
+                background: rgba(255, 77, 83, 0.1);
+                color: #ff4d53;
+                padding: 15rpx;
+                font-size: 26rpx;
+            }
+        }
+
+        .mid1-submit {
+            margin-top: 30rpx;
+            display: flex;
+            justify-content: space-between;
+            flex-wrap: wrap;
+            height: 364rpx;
+            flex-direction: column;
+            align-items: center;
+            align-content: center;
+            flex-wrap: wrap;
+
+
+            .mid1-submit-begin {
+                width: 630rpx;
+                height: 108rpx;
+                background: #498ef5;
+                border-radius: 40px 40px 40px 40px;
+                opacity: 1;
+                color: #fff;
+                padding: 0 50rpx;
+                text-align: center;
+                display: flex;
+                align-items: center;
+                align-content: center;
+                justify-content: space-between;
+
+                .mid1-submit-begin-line1 {
+                    font-size: 30rpx;
+                    text-align: left;
+
+
+                }
+
+                .mid1-submit-begin-line2 {
+                    font-size: 24rpx;
+                    color: #CCE0FF;
+                    text-align: left;
+
+
+                }
+
+                .mid1-submit-begin-button1 {
+                    width: 200rpx;
+                    height: 68rpx;
+                    background: linear-gradient(90deg, #FFFFFF 0%, #BAD5FF 100%);
+                    border-radius: 34rpx 34rpx 34rpx 34rpx;
+                    line-height: 68rpx;
+                    color: #498EF5;
+                }
+            }
+
+            .mid1-submit-continue {
+                width: 630rpx;
+                height: 108rpx;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                align-content: center;
+                border-radius: 40rpx 40rpx 40rpx 40rpx;
+                opacity: 1;
+
+
+
+                text-align: center;
+                padding: 0 50rpx;
+                background: linear-gradient(265deg, #31CC74 0%, #63E897 100%);
+
+                .mid1-submit-continue-line1 {
+                    font-size: 30rpx;
+                    text-align: left;
+                    color: #fff;
+
+
+                }
+
+                .mid1-submit-continue-line2 {
+                    font-size: 24rpx;
+                    color: #CCE0FF;
+                    text-align: left;
+
+
+                }
+
+                .mid1-submit-continue-button1 {
+                    width: 200rpx;
+                    height: 68rpx;
+                    background: linear-gradient(90deg, #FFFFFF 0%, #BDFFD9 100%);
+                    border-radius: 34rpx 34rpx 34rpx 34rpx;
+                    line-height: 68rpx;
+                    color: #31CC74;
+                }
+            }
+        }
+    }
+
+    .mid2 {
+        width: 690rpx;
+        background: #fff;
+        margin: 0 auto;
+        margin-top: 30rpx;
+        box-shadow: 0px 0px 12px 2px rgba(0, 0, 0, 0.1);
+        padding-top: 40rpx;
+        padding-bottom: 40rpx;
+
+        .mid2-line1 {
+            display: flex;
+
+            padding-bottom: 30rpx;
+            padding-left: 30rpx;
+            padding-right: 30rpx;
+            align-content: center;
+            align-items: center;
+
+            .mid2-line1-icon {
+                width: 58rpx;
+                margin-right: 16rpx;
+            }
+        }
+
+        .mid2-line2 {
+            width: 630rpx;
+            margin: 0 auto;
+            background: #f2f3f5;
+            color: #5c6066;
+            padding: 20rpx;
+        }
+    }
+
+    .mid3 {
+        width: 690rpx;
+        background: #fff;
+        margin: 0 auto;
+        margin-top: 30rpx;
+        box-shadow: 0px 0px 12px 2px rgba(0, 0, 0, 0.1);
+        padding-top: 40rpx;
+        padding-bottom: 40rpx;
+
+        .mid3-line1 {
+            display: flex;
+
+            padding-bottom: 30rpx;
+            padding-left: 30rpx;
+            padding-right: 30rpx;
+            align-content: center;
+            align-items: center;
+
+            .mid3-line1-icon {
+                width: 58rpx;
+                margin-right: 16rpx;
+            }
+        }
+
+        .mid3-line2 {
+            width: 630rpx;
+            margin: 0 auto;
+            background: #f2f3f5;
+            color: #5c6066;
+            padding: 20rpx;
+        }
+    }
+}
+</style>

+ 2 - 2
src/otherPages/beforeThreeExam/index.vue

@@ -45,7 +45,7 @@
       </view>
       <view class="mid1-submit">
 
-        <view @click="watchAdTobegin" class="mid1-submit-begin">
+        <view @click="watchAdToExam" class="mid1-submit-begin">
           <view style="width: 300rpx;">
             <view class="mid1-submit-begin-line1">
               模拟考试
@@ -115,7 +115,7 @@ export default {
     return {};
   },
   methods: {
-    watchAdTobegin() {
+    watchAdToExam() {
       let that = this
       let videoAd = null;
       uni.showModal({

+ 1066 - 0
src/otherPages/colorExam/index.vue

@@ -0,0 +1,1066 @@
+<template>
+  <view class="threeExam">
+    <!-- <view class="topad">
+      <ad class="wxad" :ad-intervals="100" unit-id="adunit-f9ac1a546be5b3f0"></ad>
+    </view> -->
+    <view class="problem">
+      <!-- <text class="problem-type"> 判断题 </text> -->
+      <!-- <text class="problem-issue"
+        >{{ problemListIndex + 1 }}、{{
+          problemList[problemListIndex].question
+        }}</text
+      > -->
+      <rich-text style="font-size: 42rpx; vertical-align: top" :nodes="createProblemTypeHtml(problemList[problemListIndex].questionType) +
+        (problemListIndex + 1) +
+        '、' +
+        problemList[problemListIndex].issue
+        "></rich-text>
+      <!-- <span class="problem-type">{{
+        problemList[problemListIndex].questionType | questionType
+      }}</span>
+        <span style="font-size: 30rpx;">
+          {{ problemListIndex+1 }}  {{  problemList[problemListIndex].issue }}
+        </span> -->
+      <view class="problem-media">
+        <image mode="widthFix" v-if="getFileType(problemList[problemListIndex].image) == 'image'"
+          :src="problemList[problemListIndex].image"></image>
+        <video :controls="false" autoplay loop v-if="getFileType(problemList[problemListIndex].image) == 'video'"
+          :src="problemList[problemListIndex].image"></video>
+      </view>
+      <view class="problem-radio">
+        <van-radio-group v-if="!problemList[problemListIndex].isComplete" @change="changeUserAnswer"
+          :value="problemList[problemListIndex].userAnswer">
+          <view :key="index" v-for="(item, index) in problemList[problemListIndex].optsArr">
+            <van-radio label-class="pl0" custom-class="mt40" use-icon-slot :name="item">
+              <view class="problem-radio-flex">
+                <view class="problem-radio-icon">
+                  <view class="problem-radio-letter">{{
+        numberToLetter(index)
+      }}</view>
+                </view>
+                <text style="
+                    font-size: 42rpx;
+                    font-weight: bold;
+                    margin-left: 20rpx;
+                  ">{{ item }}</text>
+              </view>
+            </van-radio>
+          </view>
+
+          <!-- <van-radio
+            v-if="problemList[problemListIndex].an2"
+            label-class="pl0"
+            custom-class="mt40"
+            use-icon-slot
+            :name="problemList[problemListIndex].an2"
+          >
+            <view class="problem-radio-flex">
+              <view class="problem-radio-icon">
+                <view class="problem-radio-letter">{{
+                  numberToLetter(1)
+                }}</view>
+              </view>
+              <text
+                style="font-size: 42rpx; font-weight: bold; margin-left: 20rpx"
+                >{{ problemList[problemListIndex].an2 }}</text
+              >
+            </view>
+          </van-radio>
+          <van-radio
+            v-if="problemList[problemListIndex].an3"
+            label-class="pl0"
+            custom-class="mt40"
+            use-icon-slot
+            :name="problemList[problemListIndex].an3"
+          >
+            <view class="problem-radio-flex">
+              <view class="problem-radio-icon">
+                <view class="problem-radio-letter">{{
+                  numberToLetter(2)
+                }}</view>
+              </view>
+              <text
+                style="font-size: 42rpx; font-weight: bold; margin-left: 20rpx"
+                >{{ problemList[problemListIndex].an3 }}</text
+              >
+            </view>
+          </van-radio>
+          <van-radio
+            v-if="problemList[problemListIndex].an4"
+            label-class="pl0"
+            custom-class="mt40"
+            use-icon-slot
+            :name="problemList[problemListIndex].an4"
+          >
+            <view class="problem-radio-flex">
+              <view class="problem-radio-icon">
+                <view class="problem-radio-letter">{{
+                  numberToLetter(3)
+                }}</view>
+              </view>
+              <text
+                style="font-size: 42rpx; font-weight: bold; margin-left: 20rpx"
+                >{{ problemList[problemListIndex].an4 }}</text
+              >
+            </view>
+          </van-radio>
+          <van-radio
+            v-if="problemList[problemListIndex].an5"
+            label-class="pl0"
+            custom-class="mt40"
+            use-icon-slot
+            :name="problemList[problemListIndex].an5"
+          >
+            <view class="problem-radio-flex">
+              <view class="problem-radio-icon">
+                <view class="problem-radio-letter">{{
+                  numberToLetter(4)
+                }}</view>
+              </view>
+              <text
+                style="font-size: 42rpx; font-weight: bold; margin-left: 20rpx"
+                >{{ problemList[problemListIndex].an5 }}</text
+              >
+            </view>
+          </van-radio>
+          <van-radio
+            v-if="problemList[problemListIndex].an6"
+            label-class="pl0"
+            custom-class="mt40"
+            use-icon-slot
+            :name="problemList[problemListIndex].an6"
+          >
+            <view class="problem-radio-flex">
+              <view class="problem-radio-icon">
+                <view class="problem-radio-letter">{{
+                  numberToLetter(5)
+                }}</view>
+              </view>
+              <text
+                style="font-size: 42rpx; font-weight: bold; margin-left: 20rpx"
+                >{{ problemList[problemListIndex].an6 }}</text
+              >
+            </view>
+          </van-radio>
+          <van-radio
+            v-if="problemList[problemListIndex].an7"
+            label-class="pl0"
+            custom-class="mt40"
+            use-icon-slot
+            :name="problemList[problemListIndex].an7"
+          >
+            <view class="problem-radio-flex">
+              <view class="problem-radio-icon">
+                <view class="problem-radio-letter">{{
+                  numberToLetter(6)
+                }}</view>
+              </view>
+              <text
+                style="font-size: 42rpx; font-weight: bold; margin-left: 20rpx"
+                >{{ problemList[problemListIndex].an7 }}</text
+              >
+            </view>
+          </van-radio> -->
+        </van-radio-group>
+        <van-radio-group v-if="problemList[problemListIndex].isComplete"
+          :value="problemList[problemListIndex].userAnswer">
+          <view :key="index" v-for="(item, index) in problemList[problemListIndex].optsArr">
+            <van-radio label-class="pl0" custom-class="mt40" use-icon-slot :name="item">
+              <view class="problem-radio-flex">
+                <view class="problem-radio-icon">
+                  <icon type="clear" v-if="item ==
+        problemList[problemListIndex].userAnswer &&
+        problemList[problemListIndex].userAnswer !=
+        problemList[problemListIndex].answer
+        " class="problem-radio-letter" color="red" size="60rpx"></icon>
+                  <icon type="success" v-else-if="item ==
+        problemList[problemListIndex].userAnswer &&
+        problemList[problemListIndex].userAnswer ==
+        problemList[problemListIndex].answer
+        " class="problem-radio-letter" color="#33CDA4" size="60rpx"></icon>
+                  <view v-else class="problem-radio-letter">{{
+        numberToLetter(index)
+      }}</view>
+                </view>
+                <text style="
+                    font-size: 42rpx;
+                    font-weight: bold;
+                    margin-left: 20rpx;
+                  ">{{ item }}</text>
+              </view>
+            </van-radio>
+          </view>
+        </van-radio-group>
+      </view>
+      <!-- <view  v-if="query.showSubmit == '0'" @click="collectTopics" class="problem-collect">
+        <van-icon
+            v-if="!problemList[problemListIndex].isCollect"
+            name="star-o"
+            size="25px"
+          />
+          <van-icon
+            color="#ffde00ff"
+            v-if="problemList[problemListIndex].isCollect"
+            name="star"
+            size="25px"
+          />
+          <view>收藏</view>
+      </view> -->
+
+    </view>
+    <view class="bottom">
+      <view class="switch">
+        <view @click="prePage" class="pre"> 上一题</view>
+        <view @click="nextPage" class="next"> 下一题</view>
+      </view>
+      <view class="submit">
+        <view>
+          <view v-if="query.showSubmit == '1'" @click="() => {
+        submitExamVisible = true;
+      }
+        " class="submit-button"><text>交卷</text>
+            <countDown @change="getThreeExamTime" @end="submitExam" background="" :time="examTime"></countDown>
+          </view>
+        </view>
+
+        <view class="count">
+          <view class="col">
+            <icon type="success" size="26rpx" color="#33CDA4"></icon>
+            <text style="font-size: 24rpx; color: #8a9099; margin-left: 8rpx">{{
+        trueNum
+      }}</text>
+          </view>
+          <view class="col">
+            <icon type="clear" size="26rpx" color="#FF4D53"></icon>
+            <text style="font-size: 24rpx; color: #8a9099; margin-left: 8rpx">{{
+          falseNum
+        }}</text>
+          </view>
+          <view @click="() => {
+          selectQuestionVisible = true
+        }" class="col">
+            <van-icon name="description" />
+            <text style="font-size: 24rpx; color: #8a9099; margin-left: 8rpx">{{ problemListIndex + 1 }}/{{
+        problemList.length }}</text>
+          </view>
+        </view>
+      </view>
+    </view>
+    <van-popup :zIndex="1005" round :show="submitExamVisible">
+      <view class="tip1">
+        <view class="title"> 确认交卷 </view>
+        <view class="score">
+          <view class="score-list">
+            <view class="score-dont">
+              {{ problemList.length - trueNum - falseNum }}</view>
+            <view style="font-size: 28rpx; color: #8a9099">未答题数</view>
+          </view>
+          <view class="score-list">
+            <view class="score-rest" style="margin: 0 auto">
+              {{ restTime }}</view>
+            <view style="font-size: 28rpx; color: #8a9099">剩余时间</view>
+          </view>
+          <view class="score-list">
+            <view class="score-exam"> {{ trueNum }}</view>
+            <view style="font-size: 28rpx; color: #8a9099">正确数</view>
+          </view>
+        </view>
+        <view class="bottom">
+          <view @click="() => {
+        submitExamVisible = false;
+      }
+        " class="left">继续答题</view>
+          <view @click="() => {
+
+        submitExamVisible = false;
+        goPath('/otherPages/colorExamScore/index?trueNum=' + trueNum+'&falseNum='+falseNum)
+      }
+        " class="right">现在交卷</view>
+        </view>
+      </view>
+    </van-popup>
+    <van-popup :zIndex="1006" round :show="resultExamVisible">
+      <view class="tip2">
+        <view style="position: relative">
+          <image mode="widthFix" style="width: 628rpx" src="https://ndata.zzxcx.net/ctjk/mp-wx/threeExam/bg_dialog.png">
+          </image>
+          <image mode="widthFix" v-if="score < 90" class="tip2-cry" style="width: 187rpx"
+            src="https://ndata.zzxcx.net/ctjk/mp-wx/threeExam/cry.png"></image>
+          <image mode="widthFix" v-if="score >= 90" class="tip2-cry" style="width: 187rpx"
+            src="https://ndata.zzxcx.net/ctjk/mp-wx/threeExam/laugh.png"></image>
+          <view class="tip2-text">
+            <view>恭喜您</view>
+            <view>您的成绩<text style="color: #01c18d" v-if="score >= 90">合格</text><text style="color: #ff4d53"
+                v-if="score < 90">不合格</text></view>
+            <view class="tip2-text-line3">当前已答错<text style="color: #ff4d53; padding: 0 8rpx">{{
+        falseNum
+      }}</text>
+              题</view>
+            <view class="tip2-bottom">
+              <!-- <view class="tip2-bottom-1">试试答题技巧,提分更快</view> -->
+              <view @click="
+      goPath('/otherPages/threeExamScore/index?score=' + score)
+        " class="tip2-bottom-2">现在交卷</view>
+              <view @click="() => {
+        resultExamVisible = false;
+        submitExamVisible = false;
+      }
+        " class="tip2-bottom-3">继续答题</view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </van-popup>
+    <van-popup :zIndex="1007" round :close-on-click-overlay="true" :show="selectQuestionVisible" position="bottom">
+      <view class="select-problem">
+        <view class="problem-index">
+          <view class="problem-header">
+            <view class="problem-header-left">
+              <view class="problem-dui">
+                <icon class="icon-box-img" color="#06c05f" type="success" size="18"></icon>
+                <text style="color: #06c05f; font-size: 14px; margin-left: 8rpx">{{ trueNum }}</text>
+              </view>
+              <view class="problem-cuo" style="margin-left: 16rpx">
+                <icon class="icon-box-img" type="cancel" size="18"></icon>
+                <text style="color: red; font-size: 14px; margin-left: 8rpx">{{ falseNum }}</text>
+              </view>
+            </view>
+            <view class="problem-header-right">
+              <van-icon size="18px" name="description" />
+              <view style="font-size: 14px; display: flex; align-items: center">{{ problemListIndex + 1 }}/{{
+        problemList.length }}</view>
+            </view>
+          </view>
+          <view class="problem-body">
+            <scroll-view scroll-y class="problem-listBody">
+              <view class="problem-listItem" :key="index" @click="() => {
+        problemListIndex = index
+      }
+        " v-for="(item, index) in problemList" :class="{
+        'problem-listItem_current': problemListIndex == index,
+        'problem-listItem_dui':
+          item.userAnswer.length && item.userAnswer == item.answer,
+        'problem-listItem_cuo':
+          item.userAnswer.length && item.userAnswer !== item.answer,
+      }">
+                {{ index + 1 }}
+              </view>
+            </scroll-view>
+          </view>
+          <view class="problem-bottom">
+            <!-- <view @click="
+                () => {
+                  selectProblemListVisible = false;
+                }
+              " class="problem-bottom-sure">确定
+              </view> -->
+            <view @click="() => {
+        selectQuestionVisible = false;
+      }
+        " class="problem-bottom-close">
+              关闭</view>
+          </view>
+        </view>
+      </view>
+    </van-popup>
+  </view>
+</template>
+
+<script>
+import api from "@/api";
+import utils from "@/utils";
+import countDown from "@/components/countDown/index";
+export default {
+  data() {
+    return {
+      query: {
+        showSubmit: true,
+      },
+      anLength: 7,
+      problemList: [
+        {
+          answer: "×",
+          answerkeyword: "",
+          answermp3: "https://sucai.kuaitongjiakao.com/mp3/answer120004.mp3",
+          chapterId: null,
+          columnAll: "0,4000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
+          createTime: "2024-03-14 11:47:35",
+          diffDegree: null,
+          errorRate: null,
+          explainGif: "",
+          explainJq: "注意.题中问的是“文字”的颜色,图中的文字是“紫”,文字的颜色是黄色",
+          explainJs: "注意.题中问的是“文字”的颜色,图中的文字是“紫”,文字的颜色是黄色",
+          explainMp3: "https://sucai.kuaitongjiakao.com/mp3/explain120004.mp3",
+          explainjsmp3: "https://sucai.kuaitongjiakao.com/mp3/explainJS120004.mp3",
+          id: 120004,
+          idYdt: null,
+          image: "https://sucai.app.kuaitongjiakao.com/kuaitong/issue_xin/image/image120004.jpg",
+          imageYdt: "",
+          isNew: 0,
+          issue: "下图文字的颜色是红色。",
+          issuemp3: "https://sucai.kuaitongjiakao.com/mp3/issue120004.mp3",
+          model: "cart",
+          number: 120000,
+          opts: "√-×",
+          optsArr: ["√", "×"],
+          questionType: 1,
+          skillkeyword: "",
+          subject: "9",
+          titlekeyword: "",
+          updateTime: "2024-03-15 14:08:45"
+        }
+      ],
+      trueNum: 0,
+      falseNum: 0,
+      problemListIndex: 0,
+      submitExamVisible: false,
+      resultExamVisible: false,
+      selectQuestionVisible: false,
+      examTime: 1000 * 60 * 20,
+      restTime: "",
+      useTime: "",
+    };
+  },
+  computed: {
+    score() {
+      return this.trueNum * 5;
+    },
+  },
+  onLoad(query) {
+    this.query = query;
+    if (this.query.showSubmit == "1") {
+      api.exam.studentQuestionSeTestList().then((res) => {
+        if (Array.isArray(res.data) && res.data.length > 0) {
+          res.data.forEach((element) => {
+            element.optsArr = [];
+            element.optsArr = element.opts.split('-');
+            element.userAnswer = ''
+            element.userAnswerIndex = -1;
+            element.isComplete = false;
+
+          });
+          this.problemList = res.data;
+        } else {
+          uni.showToast({
+            icon: "error",
+            title: "加载失败",
+          });
+        }
+      });
+    } else if (this.query.showSubmit == "0") {
+      api.exam.studentQuestionSeList().then((res) => {
+        if (Array.isArray(res.rows) && res.rows.length > 0) {
+          res.rows.forEach((element) => {
+            element.optsArr = [];
+            element.optsArr = element.opts.split('-');
+            element.userAnswer = ''
+            element.userAnswerIndex = -1;
+            element.isComplete = false;
+          });
+          this.problemList = res.rows;
+          let key = `${uni.getStorageSync("userInfo").xcxOpenid}_threeExam_${this.query.subject}`
+          if (uni.getStorageSync(key)) {
+            uni.showModal({
+              title: "回到上次的题目",
+              content: `你上次做到第${uni.getStorageSync(key) + 1
+                }题,是否前往`,
+              success: (res) => {
+                if (res.confirm) {
+                  this.problemListIndex = Number(uni.getStorageSync(key))
+                  // this.$emit(
+                  //   "update:problemListIndex",
+                  //   uni.getStorageSync(key)
+                  // );
+                } else {
+                  uni.setStorageSync(key, 0);
+                }
+              },
+            });
+          }
+        } else {
+          uni.showToast({
+            icon: "error",
+            title: "加载失败",
+          });
+        }
+      });
+    }
+  },
+  methods: {
+    collectTopics() {
+      let storageName =
+        uni.getStorageSync("userInfo").xcxOpenid +
+        "_userThreeIds_" +
+        9;
+      let userThreeIds = uni.getStorageSync(storageName) || [];
+
+      if (!this.problemList[this.problemListIndex].isCollect) {
+        if (
+          !userThreeIds.some((item) => {
+            return item.id === this.problemList[this.problemListIndex].id;
+          })
+        ) {
+          userThreeIds.push({
+            id: this.problemList[this.problemListIndex].id,
+            timestamp: +new Date(),
+          });
+          uni.setStorageSync(storageName, userThreeIds);
+        }
+        this.$set(this.problemList[this.problemListIndex], "isCollect", true);
+        uni.showToast({
+          title: "收藏成功",
+        });
+      } else {
+        if (
+          userThreeIds.indexOf(
+            this.problemList[this.problemListIndex].id
+          ) > 0
+        ) {
+          userThreeIds.splice(
+            userThreeIds.indexOf(
+              this.problemList[this.problemListIndex].id
+            ),
+            1
+          );
+          uni.setStorageSync(storageName, userThreeIds);
+        }
+
+        this.$set(this.problemList[this.problemListIndex], "isCollect", false);
+        uni.showToast({
+          title: "取消收藏",
+          icon: "fail",
+        });
+      }
+    },
+    goPath(url) {
+      console.log(url);
+
+      uni.navigateTo({
+        url,
+      });
+    },
+    getThreeExamTime(a, b) {
+      this.restTime = a;
+      this.useTime = b;
+    },
+    submitExam(e) {
+      let that = this;
+      console.log(e);
+      uni.showModal({
+        title: "是否交卷",
+        success(res) {
+          if (res.confirm) {
+            api.exam
+              .studentScoreInfo({
+                type: "三力测试",
+                score: Number(that.score),
+              })
+              .then((result) => {
+                uni.navigateTo({
+                  url: "/otherPages/threeExamScore/index?score=" + that.score,
+                });
+              })
+              .catch((error) => {
+                uni.navigateTo({
+                  url: "/otherPages/threeExamScore/index?score=" + that.score,
+                });
+              });
+          }
+        },
+      });
+    },
+    getFileType(src) {
+      let suffix = src.substring(src.lastIndexOf(".") + 1);
+      let type = "";
+      switch (suffix) {
+        case "mp4":
+        case "WebM":
+        case "Ogg":
+          type = "video";
+          break;
+        case "png":
+        case "jpg":
+        case "webp":
+          type = "image";
+          break;
+        case "pdf":
+          type = "pdf";
+          break;
+        default:
+          type = "other";
+      }
+      return type;
+    },
+    changeUserAnswer(e) {
+      console.log(e);
+      let key = `${uni.getStorageSync("userInfo").xcxOpenid}_threeExam_${this.query.subject}`
+      // this.problemList[this.problemListIndex].userAnswerIndex = e.detail;
+      // this.problemList[this.problemListIndex].userAnswer =
+      //   this.problemList[this.problemListIndex]["an" + e.detail];
+      this.problemList[this.problemListIndex].userAnswer = e.detail
+      this.problemList[this.problemListIndex].isComplete = true;
+      this.problemList[this.problemListIndex].userAnswer == this.problemList[this.problemListIndex].answer ? this.trueNum++ : this.falseNum++;
+      uni.setStorageSync(key, this.problemListIndex)
+      // this.problemList[this.problemListIndex].userAnswerIndex ==
+      //   this.problemList[this.problemListIndex].answertrue
+      //   ? this.trueNum++
+      //   : this.falseNum++;
+    },
+    prePage(e) {
+      if (this.problemListIndex <= 0) {
+        uni.showToast({
+          icon: "none",
+          title: "到底了",
+        });
+      } else {
+        this.problemListIndex = this.problemListIndex - 1;
+      }
+    },
+    nextPage(e) {
+      if (this.problemListIndex >= this.problemList.length - 1) {
+        uni.showToast({
+          icon: "none",
+          title: "到底了",
+        });
+      } else {
+        this.problemListIndex = this.problemListIndex + 1;
+      }
+    },
+    numberToLetter(index) {
+      index = Number(index);
+      return String.fromCharCode(index + 65);
+    },
+    createProblemTypeHtml(index) {
+      if (index == 1) {
+        return '<span style="font-size: 11px;color: #fff;background: #2878ff;padding: 3px 10px;border-radius: 4px;margin-right: 5px;vertical-align: middle;">判断题</span>';
+      } else {
+        return '<span style="font-size: 11px;color: #fff;background: #2878ff;padding: 3px 10px;border-radius: 4px;margin-right: 5px;vertical-align: middle;">选择题</span>';
+      }
+    },
+  },
+
+  components: {
+    countDown,
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.topad {
+  padding: 0 30rpx;
+}
+
+.threeExam {
+  background: #fff;
+  width: 100%;
+  height: 100vh;
+  display: flex;
+  flex-direction: column;
+}
+
+.wxad {
+  border: none;
+}
+
+.select-problem {
+  display: flex;
+  width: 100vw;
+  align-content: flex-end;
+  align-items: flex-end;
+
+  .problem-index {
+    width: 100vw;
+    height: 650rpx;
+    background: #fff;
+    border-top-right-radius: 16rpx;
+    border-top-left-radius: 16rpx;
+    padding-top: 50rpx;
+    -webkit-overflow-scrolling: touch;
+  }
+
+  .problem-bottom {
+    width: 100%;
+    display: flex;
+    height: 80rpx;
+
+    .problem-bottom-sure {
+      width: 50%;
+      height: 100%;
+      border-right: 2rpx solid #d8d8d8;
+      border-top: 2rpx solid #d8d8d8;
+      text-align: center;
+      color: #498ef5;
+      line-height: 80rpx;
+    }
+
+    .problem-bottom-close {
+      width: 100%;
+      height: 100%;
+      color: red;
+      text-align: center;
+      border-top: 2rpx solid #d8d8d8;
+      line-height: 80rpx;
+    }
+  }
+
+  .problem-header {
+    display: flex;
+    justify-content: space-between;
+    align-content: center;
+    align-items: center;
+    padding: 0rpx 30rpx;
+
+    .problem-header-left {
+      display: flex;
+
+      .problem-dui {
+        display: flex;
+        align-content: center;
+        align-items: center;
+      }
+
+      .problem-cuo {
+        display: flex;
+        align-content: center;
+        align-items: center;
+      }
+    }
+
+    .problem-header-right {
+      display: flex;
+      align-content: center;
+    }
+  }
+
+  .problem-body {
+    height: 480rpx;
+    padding-top: 30rpx;
+    overflow-y: scroll;
+
+
+    .problem-listBody {
+      display: inline-block;
+      overflow-y: scroll;
+      height: 440rpx;
+
+      .problem-listItem {
+        display: inline-block;
+        width: 99rpx;
+        height: 99rpx;
+        line-height: 100rpx;
+        text-align: center;
+        border-radius: 50%;
+        border: 2rpx #d8d8d8 solid;
+        margin-bottom: 15rpx;
+        margin-left: 13rpx;
+        margin-right: 13rpx;
+        font-size: 40rpx;
+      }
+
+      .problem-listItem_current {
+        background: rgba(138, 144, 153, 0.15);
+        border-color: #bfbfbf;
+        color: #5c6066;
+      }
+
+      .problem-listItem_dui {
+        background: #c1e6db;
+        color: #4eb79a;
+        border-color: #4eb79a;
+      }
+
+      .problem-listItem_cuo {
+        background: #ffbcbe;
+        color: #e65055;
+        border-color: #e65055;
+      }
+    }
+  }
+}
+
+.problem {
+  padding: 0 30rpx;
+  height: 500rpx;
+  flex-grow: 1;
+  overflow-y: scroll;
+  padding-bottom: 30rpx;
+
+  .problem-type {
+    font-size: 22rpx;
+    color: #fff;
+    background: #2878ff;
+    width: 94rpx;
+    height: 40rpx;
+    padding: 6rpx 20rpx;
+    border-radius: 8rpx;
+    margin-right: 10rpx;
+    vertical-align: middle;
+  }
+
+  .problem-issue {
+    font-size: 42rpx;
+    vertical-align: middle;
+    font-weight: bold;
+    color: #0a1a33;
+  }
+
+  .problem-radio {
+    .problem-radio-flex {
+      display: flex;
+      width: 100%;
+      flex-wrap: wrap;
+      align-items: center;
+    }
+
+    .problem-radio-icon {
+      width: 70rpx;
+      height: 70rpx;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+
+      .problem-radio-letter {
+        width: 60rpx;
+        height: 60rpx;
+        line-height: 60rpx;
+        font-size: 42rpx;
+        color: #333;
+
+        box-shadow: 0px 4rpx 12rpx 0rpx rgba(0, 0, 0, 0.26);
+        text-align: center;
+        border-radius: 50%;
+      }
+    }
+  }
+
+  .problem-media {
+    width: 100%;
+    display: flex;
+    justify-content: center;
+    padding-top: 15rpx;
+
+    >image {
+      width: 100%;
+    }
+  }
+
+  .problem-collect {
+    width: 100rpx;
+    text-align: center;
+    padding-top: 15rpx;
+  }
+}
+
+.bottom {
+  // position: absolute;
+  // bottom: 0;
+  width: 100%;
+  padding-bottom: constant(safe-area-inset-bottom);
+  padding-bottom: env(safe-area-inset-bottom);
+
+  .switch {
+    bottom: 48rpx;
+    padding: 0 30rpx;
+    display: flex;
+    justify-content: space-between;
+    width: 100%;
+
+    .pre {
+      width: 156rpx;
+      height: 76rpx;
+      line-height: 76rpx;
+      background: #ffffff;
+      color: #8a9099;
+      border-radius: 40rpx 40rpx 40rpx 40rpx;
+      opacity: 1;
+      border: 2rpx solid #707070;
+      text-align: center;
+    }
+
+    .next {
+      width: 156rpx;
+      height: 76rpx;
+      line-height: 76rpx;
+      color: #8a9099;
+      background: #ffffff;
+      border-radius: 40rpx 40rpx 40rpx 40rpx;
+      opacity: 1;
+      border: 2rpx solid #707070;
+      text-align: center;
+    }
+  }
+
+  .submit {
+    margin-top: 50rpx;
+    width: 100%;
+    height: 98rpx;
+    box-shadow: 2rpx -2rpx 6rpx 2rpx rgba(0, 0, 0, 0.16);
+    display: flex;
+    justify-content: space-between;
+    align-content: center;
+    align-items: center;
+    padding: 0 30rpx;
+
+    .submit-button {
+      width: 180rpx;
+      line-height: 68rpx;
+      background: #498ef5;
+      border-radius: 34rpx 34rpx 34rpx 34rpx;
+      opacity: 1;
+      color: #fff;
+      text-align: center;
+      display: flex;
+      font-size: 24rpx;
+      padding: 0 16rpx;
+      justify-content: space-evenly;
+    }
+  }
+
+  .count {
+    width: 390rpx;
+    display: flex;
+    justify-content: space-between;
+
+    .col {
+      display: flex;
+    }
+  }
+}
+
+.tip1 {
+  width: 580rpx;
+  height: 402rpx;
+  padding: 0 30rpx;
+
+  .title {
+    color: #0a1a33;
+    width: 100%;
+    font-size: 42rpx;
+    font-weight: bold;
+    margin-top: 48rpx;
+    text-align: center;
+  }
+
+  .score {
+    display: flex;
+    justify-content: space-between;
+    font-size: 0;
+    width: 100%;
+
+    .score-list {
+      text-align: center;
+      color: #ff4d53;
+      font-size: 28rpx;
+      display: inline-block;
+      margin-top: 64rpx;
+    }
+
+    .score-dont {
+      font-size: 42rpx;
+
+      text-align: center;
+    }
+
+    .score-rest {
+      text-align: center;
+      font-size: 42rpx;
+      color: #0a1a33;
+    }
+
+    .score-exam {
+      text-align: center;
+      font-size: 42rpx;
+      color: #0a1a33;
+    }
+  }
+
+  .bottom {
+    width: 100%;
+    display: flex;
+    justify-content: space-between;
+    margin-top: 48rpx;
+
+    .left {
+      width: 250rpx;
+      line-height: 80rpx;
+      border-radius: 40rpx 40rpx 40rpx 40rpx;
+      opacity: 1;
+      border: 2rpx solid #707070;
+      text-align: center;
+
+      font-size: 30rpx;
+    }
+
+    .right {
+      width: 250rpx;
+      line-height: 80rpx;
+      background: #498ef5;
+      border-radius: 40rpx 40rpx 40rpx 40rpx;
+      opacity: 1;
+      color: #fff;
+      text-align: center;
+      font-size: 30rpx;
+    }
+  }
+}
+
+.tip2 {
+  .tip2-cry {
+    position: absolute;
+    z-index: 1002;
+    left: 50%;
+    top: 48rpx;
+    transform: translate(-50%, 0);
+  }
+
+  .tip2-text {
+    position: absolute;
+    top: 284rpx;
+    width: 100%;
+    color: #0a1a33;
+    font-size: 42rpx;
+    text-align: center;
+    font-weight: bold;
+    line-height: 1.5;
+  }
+
+  .tip2-text-line3 {
+    color: #0a1a33;
+    font-size: 30rpx;
+    margin-top: 25rpx;
+  }
+
+  .tip2-bottom {
+    width: 100%;
+
+    .tip2-bottom-1 {
+      width: 480rpx;
+      line-height: 80rpx;
+      background: #498ef5;
+      border-radius: 40rpx 40rpx 40rpx 40rpx;
+      opacity: 1;
+      margin: 0 auto;
+      font-size: 30rpx;
+      color: #ffffff;
+      margin-top: 60rpx;
+    }
+
+    .tip2-bottom-2 {
+      width: 480rpx;
+      line-height: 80rpx;
+      border-radius: 40rpx 40rpx 40rpx 40rpx;
+      opacity: 1;
+      border: 2rpx solid #707070;
+      margin: 0 auto;
+      font-size: 30rpx;
+      margin-top: 30rpx;
+    }
+
+    .tip2-bottom-3 {
+      margin-top: 30rpx;
+      color: #5c6066;
+      font-size: 30rpx;
+    }
+  }
+}
+</style>

+ 134 - 0
src/otherPages/colorExamScore/index.vue

@@ -0,0 +1,134 @@
+<template>
+    <view id="colorExamScore">
+        <topbar>
+            <view class="nav">
+                <image @click="back" mode="widthFix" class="leftArrow"
+                    src="https://ndata.zzxcx.net/ctjk/mp-wx/beforeMockExam/arrow-left.png"></image>
+                <text class="title">色盲测试结果</text>
+            </view>
+        </topbar>
+        <view class="score">
+            <image mode="widthFix" class="title" src="https://ndata.zzxcx.net/ctjk/mp-wx/colorExamScore/title_bg@2x.png"></image>
+            <view class="content">
+                <view style="width: 33%;" class="">
+                    <view style="color: #5C6066;font-size: 60rpx;">10</view>
+                    <view style="color: #8A9099;">总题数</view>
+                </view>
+                <view style="width: 33%;">
+                    <view style="color: #20C89B;font-size: 60rpx;">{{ query.trueNum }}</view>
+                    <view style="color: #8A9099;">答对数</view>
+                </view>
+                <view style="width: 33%;">
+                    <view style="color: #FF4D53;font-size: 60rpx;">{{ query.falseNum }}</view>
+                    <view style="color: #5C6066;">答错数</view>
+                </view>
+            </view>
+
+        </view>
+        <view class="myad">
+            <image @click="watchColorGlass" style="width: 100%;" mode="widthFix" src="https://ndata.zzxcx.net/ctjk/mp-wx/colorExamScore/ad@2x.png"></image>
+        </view>
+        <view  class="wxad">
+            <ad ad-type="video" :ad-intervals="100" unit-id="adunit-8eb44bbd7e3147d4"></ad>
+        </view>
+    </view>
+</template>
+
+<script>
+import {mapGetters} from 'vuex'
+export default {
+    computed: {
+       ...mapGetters(['nbjk_set'])
+    },
+    onLoad(query){
+        console.log(query)
+        this.query.trueNum = Number(query.trueNum)
+        this.query.falseNum = Number(query.falseNum)
+
+    },
+    data() {
+        return {
+            query:{
+                trueNum:0,
+                falseNum:0
+            }
+        }
+    },
+    methods: {
+        back() {
+            uni.navigateBack();
+        },
+        watchColorGlass() {
+            let that =this
+            console.log(that.nbjk_set)
+            wx.openChannelsActivity({
+                finderUserName: "sphQVbhe9O04tqB",
+                feedId: that.nbjk_set.CTJK_SP_YJ
+            })
+
+        },
+    },
+
+}
+</script>
+
+<style lang="less" scoped>
+#colorExamScore{
+    width: 100vw;
+    min-height:100vh;
+    background-image: url("https://ndata.zzxcx.net/ctjk/mp-wx/colorExamScore/bg@2x.png");
+}
+.nav {
+    width: 100%;
+    height: 100%;
+    position: relative;
+    display: flex;
+    align-items: center;
+
+    .leftArrow {
+        width: 18rpx;
+        position: absolute;
+        left: 30rpx;
+    }
+
+    .title {
+        position: absolute;
+        left: 50%;
+        color: #fff;
+       
+    }
+}
+
+
+.score{
+    width: 100%;
+    padding: 0 30rpx;
+    .title{
+        position: absolute;
+        left: 50%;
+        transform: translateX(-50%);
+        width: 478rpx;
+        top:210rpx;
+    }
+    .content{
+        margin-top: 140rpx;
+        width: 100%;
+        padding: 0 64rpx;
+        display: flex;
+        justify-content: space-between;
+        text-align: center;
+        height: 290rpx;
+        background-color: #fff;
+        align-items: center;
+        align-content: center;
+        border-radius: 20rpx 20rpx 20rpx 20rpx;
+
+    }
+}
+
+.myad{
+    width: 100%;
+    padding: 0 30rpx;
+    margin-top: 40rpx;
+}
+</style>

+ 4 - 3
src/otherPages/donation/index.vue

@@ -3,9 +3,9 @@
         <div style="width: 50vw;margin: 15rpx auto;">
             <button @click="friendlyDonation()" type="primary">友情捐赠</button>
         </div>
-        <!-- <div style="width: 50vw;margin: 15rpx auto;">
+        <div style="width: 50vw;margin: 15rpx auto;">
             <button @click="goVideoGroup()" type="primary">视频号</button>
-        </div> -->
+        </div>
     </div>
 </template>
 
@@ -59,8 +59,9 @@ export default {
 
         },
         goVideoGroup(){
-            wx.openChannelsUserProfile({
+            wx.openChannelsActivity({
                 finderUserName:"sphQVbhe9O04tqB",
+                feedId:"export/UzFfAgtgekIEAQAAAAAAJXo6IOZ81wAAAAstQy6ubaLX4KHWvLEZgBPEoqNUAhgxcvaHzNPgMJrCizVlT8Vn4kaJKobMZZuP"
             })
         }
     },

+ 31 - 2
src/pages.json

@@ -473,6 +473,27 @@
             "enablePullDownRefresh": false
           }
         },
+        {
+          "path": "colorExam/index",
+          "style": {
+            "navigationBarTitleText": "色盲测试",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "colorExamScore/index",
+          "style": {
+            "navigationStyle": "custom",
+            "enablePullDownRefresh": false
+          }
+        },
+        {
+          "path": "beforeColorExam/index",
+          "style": {
+            "navigationStyle": "custom"
+          },
+          "name": "进入色盲测试"
+        },
         {
           "path": "createReferCode/index",
           "style": {
@@ -484,7 +505,7 @@
     }
   ],
   "tabBar": {
-    "custom":true,
+    "custom": true,
     "color": "#7A7E83",
     "selectedColor": "#498EF5",
     "borderStyle": "white",
@@ -524,7 +545,7 @@
     "navigationBarBackgroundColor": "#F8F8F8",
     "backgroundColor": "#F8F8F8",
     "usingComponents": {
-      "custom-tab-bar":"./custom-tab-bar/index",
+      "custom-tab-bar": "./custom-tab-bar/index",
       "van-empty": "./wxcomponents/vant/empty/index",
       "van-overlay": "./wxcomponents/vant/overlay/index",
       "van-tabbar": "./wxcomponents/vant/tabbar/index",
@@ -570,6 +591,14 @@
     //模式配置,仅开发期间生效
     "current": 0, //当前激活的模式(list 的索引项)
     "list": [
+      {
+        "path": "otherPages/beforeColorExam/index",
+        "name": "色盲测试"
+      },
+      {
+        "path": "otherPages/colorExam/index",
+        "name": "色盲测试"
+      },
       {
         "path": "otherPages/joinBusiness/index",
         "name": "招商加盟"

+ 5 - 5
src/pages/carVideo/index.vue

@@ -279,8 +279,8 @@ export default {
       },
       {
         img: "https://ndata.zzxcx.net/ctjk/mp-wx/carVideo/NotesBeforeExamination@2x.png",
-        text: "考前须知",
-        path: "/otherPages/marked/index?markdown=考前须知",
+        text: "色盲测试",
+        path: "/otherPages/beforeColorExam/index",
       },
       {
         img: "https://ndata.zzxcx.net/ctjk/mp-wx/carVideo/learnToSee@2x.png",
@@ -337,8 +337,8 @@ export default {
       },
       {
         img: "https://ndata.zzxcx.net/ctjk/mp-wx/carVideo/notesBeforeExamination%402x.png",
-        text: "考前须知",
-        path: "/otherPages/marked/index?markdown=学车必看",
+        text: "色盲测试",
+        path: "/otherPages/beforeColorExam/index",
       },
       {
         img: "https://ndata.zzxcx.net/ctjk/mp-wx/carVideo/learnToSee@2x.png",
@@ -478,7 +478,7 @@ export default {
         uni.setStorageSync("userInfo", res.data);
         this.$store.commit("SET_USERINFO", res.data);
         this.$store.dispatch("GetRoadExamVip");
-        this.$store.dispatch("GetVideoFreeAndBaziPay");
+        this.$store.dispatch("GetNbjkSet");
         // if (!res.data.nickName) {
         //   uni.showModal({
         //     title: "新用户更新信息",

+ 3 - 1
src/pages/user/index.vue

@@ -22,7 +22,9 @@
         <van-cell title-class="uni-app-fontsize-paragraph" title="学车必看" is-link center
           url="/otherPages/marked/index?markdown=学车必看">
         </van-cell>
-
+        <van-cell title-class="uni-app-fontsize-paragraph" title="考前须知" is-link center
+          url="/otherPages/marked/index?markdown=考前须知">
+        </van-cell>
         <van-cell title-class="uni-app-fontsize-paragraph" title="关注公众号" is-link center url="/otherPages/careGzh/index">
         </van-cell>
         <van-cell title-class="uni-app-fontsize-paragraph" title="电子资料" is-link @click="

+ 3 - 0
src/store/getters.js

@@ -74,6 +74,9 @@ const getters = {
   roadExamIds:state=>state.user.roadExamList.map(item=>{
     return item.examId
   }),
+  nbjk_set:state=>{
+    return state.user.nbjk_set
+  },
   avatar: state => state.user.avatar,
   name: state => state.user.name,
   introduction: state => state.user.introduction,

+ 45 - 29
src/store/modules/user.js

@@ -10,10 +10,15 @@ const user = {
 		jpcjUserInfo: {
 
 		},
-		isVideoFree:"0",
-		baZiIsPay:'0',
-		gzhGuanZhu:'0',
-		roadExamList:[],
+		nbjk_set: {
+			IS_SWITCH: '0',
+			BAZI_IS_PAY: '0',
+			CTJK_SP_YJ: 'export/UzFfAgtgekIEAQAAAAAA_28Vw2QtxAAAAAstQy6ubaLX4KHWvLEZgBPEz6FscmQHJf2EzNPgMJop8x9nIWpt5Bxn-VOBUagD'
+		},
+		isVideoFree: "0",
+		baZiIsPay: '0',
+		gzhGuanZhu: '0',
+		roadExamList: [],
 		openExamRoom: [],
 		userInfo: '',
 		name: '',
@@ -33,18 +38,22 @@ const user = {
 		}
 	},
 	mutations: {
-		SET_GZH_GUANZHU:(state,gzhGuanZhu)=>{
+		SET_NBJK_SET: (state, config) => {
+			state.nbjk_set = config
+
+		},
+		SET_GZH_GUANZHU: (state, gzhGuanZhu) => {
 			state.gzhGuanZhu = gzhGuanZhu
 
 		},
-		SET_BAZIISPAY:(state,baZiIsPay)=>{
+		SET_BAZIISPAY: (state, baZiIsPay) => {
 			state.baZiIsPay = baZiIsPay
 		},
-		SET_ISVIDEOFREE:(state,isVideoFree)=>{
+		SET_ISVIDEOFREE: (state, isVideoFree) => {
 			state.isVideoFree = isVideoFree
 
 		},
-		SET_ROADEXAMLIST:(state,roadExamList)=>{
+		SET_ROADEXAMLIST: (state, roadExamList) => {
 			state.roadExamList = roadExamList
 		},
 		SET_OPENEXAMROOM: (state, openExamRoom) => {
@@ -124,43 +133,50 @@ const user = {
 			}
 		},
 		async GetRoadExamVip(store) {
-			let res =await userApi.studentVipExamList()
+			let res = await userApi.studentVipExamList()
 			let rows = res.rows
-			store.commit('SET_ROADEXAMLIST',rows)
+			store.commit('SET_ROADEXAMLIST', rows)
 		},
-		async GetRoadExamIsAllFree(store){
+		async GetRoadExamIsAllFree(store) {
 			let res = await openApi.systemDictDataType("nbjk_set")
-			let IS_VIDEO_FREE = res.data.filter(item=>{
-				return item.dictLabel=='IS_VIDEO_FREE'
+			let IS_VIDEO_FREE = res.data.filter(item => {
+				return item.dictLabel == 'IS_VIDEO_FREE'
 			})
-			console.log(IS_VIDEO_FREE,"IS_VIDEO_FREE")
-			store.commit("SET_ISVIDEOFREE",IS_VIDEO_FREE[0].dictValue)
-			
+			console.log(IS_VIDEO_FREE, "IS_VIDEO_FREE")
+			store.commit("SET_ISVIDEOFREE", IS_VIDEO_FREE[0].dictValue)
+
 		},
-		async GetBaziispay(store){
+		async GetBaziispay(store) {
 			let res = await openApi.systemDictDataType("nbjk_set")
-		
-			let BAZI_IS_PAY = res.data.filter(item=>{
-				return item.dictLabel=='BAZI_IS_PAY'
+
+			let BAZI_IS_PAY = res.data.filter(item => {
+				return item.dictLabel == 'BAZI_IS_PAY'
 			})
 
-			store.commit('BAZI_IS_PAY',BAZI_IS_PAY[0].dictValue)
+			store.commit('BAZI_IS_PAY', BAZI_IS_PAY[0].dictValue)
 
 		},
-		async GetVideoFreeAndBaziPay(store){
+		async GetNbjkSet(store) {
 			let res = await openApi.systemDictDataType("nbjk_set")
-			let IS_VIDEO_FREE = res.data.filter(item=>{
-				return item.dictLabel=='IS_VIDEO_FREE'
+
+			let IS_VIDEO_FREE = res.data.filter(item => {
+				return item.dictLabel == 'IS_VIDEO_FREE'
 			})
-			let BAZI_IS_PAY = res.data.filter(item=>{
-				return item.dictLabel=='BAZI_IS_PAY'
+			let BAZI_IS_PAY = res.data.filter(item => {
+				return item.dictLabel == 'BAZI_IS_PAY'
 			})
 			// let GZH_GUANZHU = res.data.filter(item=>{
 			// 	return item.dictLabel=='GZH_GUANZHU'
 			// })
-			console.log(IS_VIDEO_FREE,"IS_VIDEO_FREE")
-			store.commit("SET_ISVIDEOFREE",IS_VIDEO_FREE[0].dictValue)
-			store.commit('SET_BAZIISPAY',BAZI_IS_PAY[0].dictValue)
+			console.log(IS_VIDEO_FREE, "IS_VIDEO_FREE")
+			store.commit("SET_ISVIDEOFREE", IS_VIDEO_FREE[0].dictValue)
+			store.commit('SET_BAZIISPAY', BAZI_IS_PAY[0].dictValue)
+			store.commit('SET_NBJK_SET', {
+				IS_SWITCH: res.data[0].dictValue,
+				BAZI_IS_PAY: res.data[7].dictValue,
+				CTJK_SP_YJ: res.data[8].dictValue
+
+			})
 			// store.commit('SET_GZH_GUANZHU',GZH_GUANZHU[0].dictValue)
 		},
 		/**