Commit 4d5e105e45f1c324c61ac6675a75e39f7ed55171

Authored by 伽蓝
1 parent a3fab231
Exists in master

feat:答题模块

@@ -15,6 +15,7 @@ Vue.prototype.kqUrl = 'https://proxy.shunzhi.net/achieve' @@ -15,6 +15,7 @@ Vue.prototype.kqUrl = 'https://proxy.shunzhi.net/achieve'
15 15
16 import yxAxios from '@/https/yxAxios' 16 import yxAxios from '@/https/yxAxios'
17 Vue.prototype.yxAxios = yxAxios; 17 Vue.prototype.yxAxios = yxAxios;
  18 +Vue.prototype.dialog = Dialog;
18 19
19 import { mgop } from '@aligov/jssdk-mgop'; 20 import { mgop } from '@aligov/jssdk-mgop';
20 Vue.prototype.mgop = mgop; 21 Vue.prototype.mgop = mgop;
src/views/Service/ServiceKQ.vue
@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 4
5 <script> 5 <script>
6 import ServiceBasekq from './ServiceBaseKQ.vue' 6 import ServiceBasekq from './ServiceBaseKQ.vue'
  7 +const userData = require('@/views/answerRank/data.json');
7 export default { 8 export default {
8 name: 'ServiceKQ', 9 name: 'ServiceKQ',
9 data() { 10 data() {
@@ -49,10 +50,10 @@ export default { @@ -49,10 +50,10 @@ export default {
49 window.location.href = `https://puser.zjzwfw.gov.cn/sso/alipay.do?action=ssoLogin&servicecode=hswsy` 50 window.location.href = `https://puser.zjzwfw.gov.cn/sso/alipay.do?action=ssoLogin&servicecode=hswsy`
50 } else { 51 } else {
51 alert('非浙里办渠道访问,显示测试用户数据') 52 alert('非浙里办渠道访问,显示测试用户数据')
52 - console.log('非浙里办渠道访问,显示测试用户数据') 53 + console.log('非浙里办渠道访问,显示测试用户数据',userData)
53 this.centerNo = '2021111017103639979048000010279' 54 this.centerNo = '2021111017103639979048000010279'
54 localStorage.setItem('centerNo', '2021111017103639979048000010279') 55 localStorage.setItem('centerNo', '2021111017103639979048000010279')
55 - let userInfo = JSON.stringify({'userId': 10}) 56 + let userInfo = JSON.stringify(userData)
56 localStorage.setItem('userInfo', userInfo) 57 localStorage.setItem('userInfo', userInfo)
57 this.getUserInfo() 58 this.getUserInfo()
58 } 59 }
src/views/Yanxue/achievementsOne.vue
@@ -66,7 +66,7 @@ export default { @@ -66,7 +66,7 @@ export default {
66 if (res.data.code == 200) { 66 if (res.data.code == 200) {
67 this.newsList = res.data.data.list; 67 this.newsList = res.data.data.list;
68 } else { 68 } else {
69 - this.$message.warning(res.data.message); 69 + this.$toast.fail(res.data.message);
70 } 70 }
71 }); 71 });
72 // this.yxAxios 72 // this.yxAxios
@@ -79,7 +79,7 @@ export default { @@ -79,7 +79,7 @@ export default {
79 // if (res.data.success) { 79 // if (res.data.success) {
80 // this.newsList = res.data.data.list; 80 // this.newsList = res.data.data.list;
81 // } else { 81 // } else {
82 - // this.$message.warning(res.data.message); 82 + // this.$toast.fail(res.data.message);
83 // } 83 // }
84 // }); 84 // });
85 }, 85 },
src/views/Yanxue/chooseSchoolOne.vue
@@ -50,7 +50,7 @@ export default { @@ -50,7 +50,7 @@ export default {
50 this.schoolList = res.data.data; 50 this.schoolList = res.data.data;
51 console.log(this.schoolList) 51 console.log(this.schoolList)
52 } else { 52 } else {
53 - this.$message.warning(res.data.message); 53 + this.$toast.fail(res.data.message);
54 } 54 }
55 }); 55 });
56 // this.yxAxios 56 // this.yxAxios
@@ -63,7 +63,7 @@ export default { @@ -63,7 +63,7 @@ export default {
63 // if (res.data.success) { 63 // if (res.data.success) {
64 // this.schoolList = res.data.data.list; 64 // this.schoolList = res.data.data.list;
65 // } else { 65 // } else {
66 - // this.$message.warning(res.data.message); 66 + // this.$toast.fail(res.data.message);
67 // } 67 // }
68 // }); 68 // });
69 }, 69 },
src/views/Yanxue/pageDetails.vue
@@ -58,7 +58,7 @@ export default { @@ -58,7 +58,7 @@ export default {
58 this.modelList = arr; 58 this.modelList = arr;
59 // this.showFrame(); 59 // this.showFrame();
60 } else { 60 } else {
61 - this.$message.warning(res.data.message); 61 + this.$toast.fail(res.data.message);
62 } 62 }
63 }); 63 });
64 // this.yxAxios 64 // this.yxAxios
@@ -77,7 +77,7 @@ export default { @@ -77,7 +77,7 @@ export default {
77 // this.modelList = arr; 77 // this.modelList = arr;
78 // // this.showFrame(); 78 // // this.showFrame();
79 // } else { 79 // } else {
80 - // this.$message.warning(res.data.message); 80 + // this.$toast.fail(res.data.message);
81 // } 81 // }
82 // }); 82 // });
83 }, 83 },
src/views/answerRank/ans_question.vue
@@ -2,35 +2,182 @@ @@ -2,35 +2,182 @@
2 <div class="bck"> 2 <div class="bck">
3 <div class="title"> 3 <div class="title">
4 <div>单向选择</div> 4 <div>单向选择</div>
5 - <div>1<span>/5</span></div> 5 + <div>
  6 + {{ dataObj.curNum }}<span>/{{ dataObj.totalNum }}</span>
  7 + </div>
6 </div> 8 </div>
7 <div class="ans"> 9 <div class="ans">
8 - 这是一套题的题目,这是一题非常有难度的题,其考点在于对地理知识的储备量 10 + {{ dataObj.title }}
9 </div> 11 </div>
10 12
11 - <div class="ans_card">  
12 - <div class="ans_item yellow">A.火星</div>  
13 - <div class="ans_item grey">B.水性</div>  
14 - <div class="ans_item grey">C.绍兴</div> 13 + <div class="ans_card" v-for="(v, i) in contentJsonArray" :key="i">
  14 + <div
  15 + class="ans_item grey"
  16 + :class="checkIndex === i ? 'yellow' : 'grey'"
  17 + @click="subAns(v.k, i)"
  18 + >
  19 + {{ v.k + " . " + v.v }}
  20 + </div>
  21 + <!-- <div class="ans_item grey">B.水性</div>
  22 + <div class="ans_item yellow">C.绍兴</div> -->
15 </div> 23 </div>
16 24
17 <div class="whiteLine"></div> 25 <div class="whiteLine"></div>
18 26
19 - <div class="reply">  
20 - <div class="reply_title">正确答案:a</div>  
21 - <div class="reply_text">  
22 - 解析:本题的难点在于基础知识的掌握,同学们要注意这个陷阱问题,区别火星和水星在初级阶段是比较容易混淆,所以本题答案选a  
23 - </div> 27 + <div class="reply" v-if="rightData.isShow">
  28 + <div class="reply_title">正确答案:{{ rightData.rightAnswer }}</div>
  29 + <div class="reply_text">解析:{{ rightData.remark }}</div>
24 </div> 30 </div>
25 31
26 - <div class="btn">下一题</div> 32 + <div
  33 + class="btn blue"
  34 + v-if="dataObj.curNum != 0 && dataObj.curNum == dataObj.totalNum"
  35 + @click="toEnd"
  36 + >
  37 + 完成
  38 + </div>
  39 + <div class="btn" v-else @click="toNext">下一题</div>
27 </div> 40 </div>
28 </template> 41 </template>
29 42
30 <script> 43 <script>
31 export default { 44 export default {
32 data() { 45 data() {
33 - return {}; 46 + return {
  47 + categoryId: 0,
  48 + dataObj: {
  49 + answer: null,
  50 + contentJsonArray: null,
  51 + curNum: 0,
  52 + id: 0,
  53 + itemCategoryId: 0,
  54 + remark: null,
  55 + score: 0,
  56 + sort: 0,
  57 + status: 0,
  58 + title: "",
  59 + totalNum: 0,
  60 + version: 0,
  61 + },
  62 + contentJsonArray: [], //选项
  63 + checkIndex: "",
  64 + //答案-解析
  65 + rightData: {
  66 + rightAnswer: "",
  67 + remark: "",
  68 + isShow: false,
  69 + },
  70 + };
  71 + },
  72 + methods: {
  73 + //获取题目-开始答题
  74 + toBank() {
  75 + if (!this.categoryId) return this.$toast.fail("题库Id为空");
  76 + this.yxAxios
  77 + .get(
  78 + `${
  79 + this.kqUrl
  80 + }/item/getItemBank?travelerNum=${localStorage.getItem(
  81 + "travelerNum"
  82 + )}&categoryId=${this.categoryId}`
  83 + )
  84 + .then((res) => {
  85 + if (res.data.code == 200) {
  86 + this.dataObj = res.data.data;
  87 + this.contentJsonArray = JSON.parse(
  88 + this.dataObj.contentJsonArray
  89 + );
  90 + } else {
  91 + this.$toast.fail(res.data.message);
  92 + }
  93 + });
  94 + },
  95 + //提交答案
  96 + subAns(val, index) {
  97 + this.checkIndex = index;
  98 + this.yxAxios
  99 + .get(
  100 + `${
  101 + this.kqUrl
  102 + }/item/submit?travelerNum=${localStorage.getItem(
  103 + "travelerNum"
  104 + )}&itemBankId=${this.dataObj.id}&answer=${val}`
  105 + )
  106 + .then((res) => {
  107 + if (res.data.code == 200) {
  108 + const data = res.data.data;
  109 + this.rightData = {
  110 + rightAnswer: data.rightAnswer,
  111 + remark: data.remark,
  112 + isShow: true,
  113 + };
  114 + } else {
  115 + this.$toast.fail(res.data.message);
  116 + }
  117 + });
  118 + },
  119 + //下一题
  120 + toNext() {
  121 + this.yxAxios
  122 + .get(
  123 + `${
  124 + this.kqUrl
  125 + }/item/nextOne?travelerNum=${localStorage.getItem(
  126 + "travelerNum"
  127 + )}&curItemBankId=${this.dataObj.id}&categoryId=${
  128 + this.categoryId
  129 + }`
  130 + )
  131 + .then((res) => {
  132 + if (res.data.code == 200) {
  133 + this.remakeData();
  134 + this.dataObj = res.data.data;
  135 + } else {
  136 + this.$toast.fail(res.data.message);
  137 + }
  138 + });
  139 + },
  140 + //完成
  141 + toEnd() {
  142 + this.yxAxios
  143 + .get(
  144 + `${
  145 + this.kqUrl
  146 + }/item/finish?travelerNum=${localStorage.getItem(
  147 + "travelerNum"
  148 + )}&categoryId=${this.categoryId}`
  149 + )
  150 + .then((res) => {
  151 + if (res.data.code == 200) {
  152 + this.$dialog.alert({
  153 + title: "完成答题",
  154 + message: "您的分数是:" + res.data.data,
  155 + theme: "round-button",
  156 + }).then(() => {
  157 + this.$router.push({
  158 + name: 'stars'
  159 + })
  160 + });
  161 + } else {
  162 + this.$toast.fail(res.data.message);
  163 + }
  164 + });
  165 + },
  166 + //重置数据
  167 + remakeData() {
  168 + this.rightData = {
  169 + rightAnswer: "",
  170 + remark: "",
  171 + isShow: false,
  172 + };
  173 + (this.contentJsonArray = []), //选项
  174 + (this.checkIndex = "");
  175 + this.dataObj = this.$options.data().dataObj;
  176 + },
  177 + },
  178 + mounted() {
  179 + this.categoryId = this.$route.query.categoryId;
  180 + this.toBank();
34 }, 181 },
35 }; 182 };
36 </script> 183 </script>
@@ -102,7 +249,7 @@ export default { @@ -102,7 +249,7 @@ export default {
102 bottom: 5vw; 249 bottom: 5vw;
103 width: 70vw; 250 width: 70vw;
104 height: 100px; 251 height: 100px;
105 - background-color: #FF3636; 252 + background-color: #ff3636;
106 font-size: 4.4vw; 253 font-size: 4.4vw;
107 margin: 30vw 0 10vw; 254 margin: 30vw 0 10vw;
108 color: #fff; 255 color: #fff;
@@ -112,5 +259,8 @@ export default { @@ -112,5 +259,8 @@ export default {
112 border-radius: 10vw; 259 border-radius: 10vw;
113 letter-spacing: 10px; 260 letter-spacing: 10px;
114 } 261 }
  262 + .blue {
  263 + background-color: #409eff;
  264 + }
115 } 265 }
116 </style> 266 </style>
117 \ No newline at end of file 267 \ No newline at end of file
src/views/answerRank/data.json 0 → 100644
@@ -0,0 +1,130 @@ @@ -0,0 +1,130 @@
  1 +{
  2 + "nickName": null,
  3 + "travelerName": "夏洋涛",
  4 + "phone": "17858500169",
  5 + "centerNo": "2022031508525674030748540013076",
  6 + "idCard": "330881199606054935",
  7 + "thirdSource": 1,
  8 + "unionId": "oJPmPuLaAx2x2DaRGfCFeYuLWzLU",
  9 + "userState": null,
  10 + "userType": 2,
  11 + "gender": 1,
  12 + "isMember": 2,
  13 + "subUsers": [{
  14 + "id": 49238,
  15 + "travelerName": "xia",
  16 + "travelerIdCard": "330881199606054935",
  17 + "travelerNum": "2022042515320607668704830046683",
  18 + "travelerMobile": "17858500169",
  19 + "travelerType": 0,
  20 + "enrollYear": "2016",
  21 + "age": null,
  22 + "gender": 1,
  23 + "channelCode": null,
  24 + "unionId": null,
  25 + "province": "浙江省",
  26 + "city": "温州市",
  27 + "area": "瓯海区",
  28 + "schoolName": "温州市第二十一中学",
  29 + "gradeName": "1班",
  30 + "className": "1班",
  31 + "whiteFlag": 1,
  32 + "studyCode": null,
  33 + "userState": 1,
  34 + "userType": 1,
  35 + "memberId": null,
  36 + "bingMobile": "17858500169",
  37 + "isBing": 1,
  38 + "ssoId": null,
  39 + "sex": null,
  40 + "pass": null,
  41 + "syncTime": "2022-04-25T15:32:06.250+08:00",
  42 + "updateTime": "2022-04-28T11:09:57.667+08:00"
  43 + }, {
  44 + "id": 52229,
  45 + "travelerName": "林淡",
  46 + "travelerIdCard": "331081198803306735",
  47 + "travelerNum": "2022050615163709304353550045179",
  48 + "travelerMobile": "15168313607",
  49 + "travelerType": null,
  50 + "enrollYear": null,
  51 + "age": null,
  52 + "gender": 1,
  53 + "channelCode": null,
  54 + "unionId": null,
  55 + "province": null,
  56 + "city": null,
  57 + "area": null,
  58 + "schoolName": null,
  59 + "gradeName": null,
  60 + "className": null,
  61 + "whiteFlag": null,
  62 + "studyCode": null,
  63 + "userState": 1,
  64 + "userType": 2,
  65 + "memberId": null,
  66 + "bingMobile": "13989547857,17858500169",
  67 + "isBing": 1,
  68 + "ssoId": null,
  69 + "sex": null,
  70 + "pass": null,
  71 + "syncTime": "2022-05-06T15:16:37.933+08:00",
  72 + "updateTime": "2022-05-06T15:23:51.297+08:00"
  73 + }, {
  74 + "id": 52230,
  75 + "travelerName": "林珈逸",
  76 + "travelerIdCard": "330602201507040021",
  77 + "travelerNum": "2022050615244927688271930045180",
  78 + "travelerMobile": "15168313607",
  79 + "travelerType": 1,
  80 + "enrollYear": "2021",
  81 + "age": null,
  82 + "gender": 2,
  83 + "channelCode": null,
  84 + "unionId": null,
  85 + "province": "浙江省",
  86 + "city": "绍兴市",
  87 + "area": "越城区",
  88 + "schoolName": "绍兴市塔山中心小学",
  89 + "gradeName": "3班",
  90 + "className": "3班",
  91 + "whiteFlag": null,
  92 + "studyCode": null,
  93 + "userState": 1,
  94 + "userType": 1,
  95 + "memberId": null,
  96 + "bingMobile": "17858500169,13989547857",
  97 + "isBing": 1,
  98 + "ssoId": null,
  99 + "sex": null,
  100 + "pass": null,
  101 + "syncTime": "2022-05-06T15:24:49.563+08:00",
  102 + "updateTime": "2022-07-09T12:20:29.790+08:00"
  103 + }],
  104 + "schoolNames": [{
  105 + "schoolId": 7,
  106 + "schoolName": "绍兴市塔山中心小学",
  107 + "province": null,
  108 + "city": null,
  109 + "area": null
  110 + }, {
  111 + "schoolId": 4804,
  112 + "schoolName": "绍兴市建功中学",
  113 + "province": null,
  114 + "city": null,
  115 + "area": null
  116 + }, {
  117 + "schoolId": 355,
  118 + "schoolName": "绍兴蕺山外国语学校",
  119 + "province": null,
  120 + "city": null,
  121 + "area": null
  122 + }, {
  123 + "schoolId": 188,
  124 + "schoolName": "温州市第二十一中学",
  125 + "province": null,
  126 + "city": null,
  127 + "area": null
  128 + }],
  129 + "auth": false
  130 +}
0 \ No newline at end of file 131 \ No newline at end of file
src/views/answerRank/rank.vue
@@ -55,12 +55,7 @@ export default { @@ -55,12 +55,7 @@ export default {
55 data() { 55 data() {
56 return { 56 return {
57 active: "a", 57 active: "a",
58 - rankList: [  
59 - {},  
60 - {},  
61 - {},  
62 - {},  
63 - ] 58 + rankList: []
64 }; 59 };
65 }, 60 },
66 methods: { 61 methods: {
src/views/answerRank/stars.vue
@@ -7,21 +7,23 @@ @@ -7,21 +7,23 @@
7 <img src="@/assets/rank/tx.png" /> 7 <img src="@/assets/rank/tx.png" />
8 </div> 8 </div>
9 <div class="font_box"> 9 <div class="font_box">
10 - <div class="font_name">熊初墨</div>  
11 - <div class="font_sch">柯桥实验小学元培学院</div> 10 + <div class="font_name" @click="getUser">
  11 + {{ user.travelerName }}
  12 + </div>
  13 + <div class="font_sch">{{ user.schoolName }}</div>
12 </div> 14 </div>
13 </div> 15 </div>
14 <div class="L_mid"> 16 <div class="L_mid">
15 <div class="mid_item"> 17 <div class="mid_item">
16 <div> 18 <div>
17 - <span class="strong_font">23</span> 19 + <span class="strong_font">xx</span>
18 <span>分</span> 20 <span>分</span>
19 </div> 21 </div>
20 <div class="grey_font">已完成题数</div> 22 <div class="grey_font">已完成题数</div>
21 </div> 23 </div>
22 <div class="mid_item"> 24 <div class="mid_item">
23 <div> 25 <div>
24 - <span class="strong_font">50</span> 26 + <span class="strong_font">xx</span>
25 <span>%</span> 27 <span>%</span>
26 </div> 28 </div>
27 <div class="grey_font">正确率</div> 29 <div class="grey_font">正确率</div>
@@ -59,14 +61,19 @@ @@ -59,14 +61,19 @@
59 61
60 <div class="flexBox" v-for="(v, i) in libraryList" :key="i"> 62 <div class="flexBox" v-for="(v, i) in libraryList" :key="i">
61 <div class="tipPic"> 63 <div class="tipPic">
62 - <img :src="v.imgUrl" /> 64 + <!-- <img :src="v.imgUrl" /> -->
  65 + <img v-if="v.type == 1" src="@/assets/rank/qt.png" />
  66 + <img v-if="v.type == 2" src="@/assets/rank/hj.png" />
  67 + <img v-if="v.type == 3" src="@/assets/rank/bj.png" />
63 </div> 68 </div>
64 <div class="context"> 69 <div class="context">
65 - <div class="context_title">{{ v.name }}</div>  
66 - <div class="context_grey">{{ v.text }}</div> 70 + <div class="context_title" v-if="v.type == 1">青铜级</div>
  71 + <div class="context_title" v-if="v.type == 2">黄金级</div>
  72 + <div class="context_title" v-if="v.type == 3">白金级</div>
  73 + <div class="context_grey">{{ v.remark }}</div>
67 </div> 74 </div>
68 <div class="btnBox"> 75 <div class="btnBox">
69 - <div class="btn" @click="toAns(i + 1)">开始答题</div> 76 + <div class="btn" @click="toAns(v)">开始答题</div>
70 </div> 77 </div>
71 </div> 78 </div>
72 </div> 79 </div>
@@ -78,30 +85,75 @@ export default { @@ -78,30 +85,75 @@ export default {
78 data() { 85 data() {
79 return { 86 return {
80 libraryList: [ 87 libraryList: [
81 - {  
82 - name: "青铜级",  
83 - text: "夯实基础,稳步前进",  
84 - imgUrl: require("@/assets/rank/qt.png"),  
85 - },  
86 - {  
87 - name: "黄金级",  
88 - text: "夯实基础,稳步前进",  
89 - imgUrl: require("@/assets/rank/hj.png"),  
90 - },  
91 - {  
92 - name: "白金级",  
93 - text: "夯实基础,稳步前进",  
94 - imgUrl: require("@/assets/rank/bj.png"),  
95 - }, 88 + // {
  89 + // name: "青铜级",
  90 + // text: "夯实基础,稳步前进",
  91 + // imgUrl: require("@/assets/rank/qt.png"),
  92 + // },
  93 + // {
  94 + // name: "黄金级",
  95 + // text: "夯实基础,稳步前进",
  96 + // imgUrl: require("@/assets/rank/hj.png"),
  97 + // },
  98 + // {
  99 + // name: "白金级",
  100 + // text: "夯实基础,稳步前进",
  101 + // imgUrl: require("@/assets/rank/bj.png"),
  102 + // },
96 ], 103 ],
  104 + userInfo: {},
  105 + user: {
  106 + travelerName: "",
  107 + travelerNum: 0,
  108 + schoolName: "",
  109 + },
97 }; 110 };
98 }, 111 },
99 methods: { 112 methods: {
  113 + //获取用户信息
  114 + getUser() {
  115 + this.userInfo = JSON.parse(localStorage.getItem("userInfo"));
  116 + console.log(this.userInfo);
  117 + if (!this.userInfo.subUsers || this.userInfo.subUsers.length == 0) {
  118 + return this.$toast.fail("暂无绑定出行人");
  119 + }
  120 + localStorage.setItem(
  121 + "travelerNum",
  122 + this.userInfo.subUsers[0].travelerNum
  123 + );
  124 +
  125 + this.user = {
  126 + travelerNum: this.userInfo.subUsers[0].travelerNum,
  127 + travelerName: this.userInfo.subUsers[0].travelerName,
  128 + schoolName: this.userInfo.subUsers[0].schoolName,
  129 + };
  130 + },
  131 + //开始答题
100 toAns(val) { 132 toAns(val) {
101 this.$router.push({ 133 this.$router.push({
102 name: "ans_question", 134 name: "ans_question",
  135 + query: {categoryId:val.itemCategoryId}
103 }); 136 });
104 }, 137 },
  138 + //获取类型
  139 + getType() {
  140 + this.yxAxios
  141 + .get(
  142 + `${this.kqUrl}/item/getItemCategory?travelerNum=` +
  143 + localStorage.getItem("travelerNum")
  144 + )
  145 + .then((res) => {
  146 + if (res.data.code == 200) {
  147 + this.libraryList = res.data.data
  148 + } else {
  149 + this.$toast.fail(res.data.message);
  150 + }
  151 + });
  152 + },
  153 + },
  154 + mounted() {
  155 + this.getUser();
  156 + this.getType();
105 }, 157 },
106 }; 158 };
107 </script> 159 </script>
@@ -262,6 +314,7 @@ export default { @@ -262,6 +314,7 @@ export default {
262 border-bottom: 1px solid #f1f1f1; 314 border-bottom: 1px solid #f1f1f1;
263 315
264 .tipPic { 316 .tipPic {
  317 + width: 15vw;
265 img { 318 img {
266 width: 16vw; 319 width: 16vw;
267 height: 16vw; 320 height: 16vw;