Commit 4d5e105e45f1c324c61ac6675a75e39f7ed55171

Authored by 伽蓝
1 parent a3fab231
Exists in master

feat:答题模块

src/main.js
... ... @@ -15,6 +15,7 @@ Vue.prototype.kqUrl = 'https://proxy.shunzhi.net/achieve'
15 15  
16 16 import yxAxios from '@/https/yxAxios'
17 17 Vue.prototype.yxAxios = yxAxios;
  18 +Vue.prototype.dialog = Dialog;
18 19  
19 20 import { mgop } from '@aligov/jssdk-mgop';
20 21 Vue.prototype.mgop = mgop;
... ...
src/views/Service/ServiceKQ.vue
... ... @@ -4,6 +4,7 @@
4 4  
5 5 <script>
6 6 import ServiceBasekq from './ServiceBaseKQ.vue'
  7 +const userData = require('@/views/answerRank/data.json');
7 8 export default {
8 9 name: 'ServiceKQ',
9 10 data() {
... ... @@ -49,10 +50,10 @@ export default {
49 50 window.location.href = `https://puser.zjzwfw.gov.cn/sso/alipay.do?action=ssoLogin&servicecode=hswsy`
50 51 } else {
51 52 alert('非浙里办渠道访问,显示测试用户数据')
52   - console.log('非浙里办渠道访问,显示测试用户数据')
  53 + console.log('非浙里办渠道访问,显示测试用户数据',userData)
53 54 this.centerNo = '2021111017103639979048000010279'
54 55 localStorage.setItem('centerNo', '2021111017103639979048000010279')
55   - let userInfo = JSON.stringify({'userId': 10})
  56 + let userInfo = JSON.stringify(userData)
56 57 localStorage.setItem('userInfo', userInfo)
57 58 this.getUserInfo()
58 59 }
... ...
src/views/Yanxue/achievementsOne.vue
... ... @@ -66,7 +66,7 @@ export default {
66 66 if (res.data.code == 200) {
67 67 this.newsList = res.data.data.list;
68 68 } else {
69   - this.$message.warning(res.data.message);
  69 + this.$toast.fail(res.data.message);
70 70 }
71 71 });
72 72 // this.yxAxios
... ... @@ -79,7 +79,7 @@ export default {
79 79 // if (res.data.success) {
80 80 // this.newsList = res.data.data.list;
81 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 50 this.schoolList = res.data.data;
51 51 console.log(this.schoolList)
52 52 } else {
53   - this.$message.warning(res.data.message);
  53 + this.$toast.fail(res.data.message);
54 54 }
55 55 });
56 56 // this.yxAxios
... ... @@ -63,7 +63,7 @@ export default {
63 63 // if (res.data.success) {
64 64 // this.schoolList = res.data.data.list;
65 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 58 this.modelList = arr;
59 59 // this.showFrame();
60 60 } else {
61   - this.$message.warning(res.data.message);
  61 + this.$toast.fail(res.data.message);
62 62 }
63 63 });
64 64 // this.yxAxios
... ... @@ -77,7 +77,7 @@ export default {
77 77 // this.modelList = arr;
78 78 // // this.showFrame();
79 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 2 <div class="bck">
3 3 <div class="title">
4 4 <div>单向选择</div>
5   - <div>1<span>/5</span></div>
  5 + <div>
  6 + {{ dataObj.curNum }}<span>/{{ dataObj.totalNum }}</span>
  7 + </div>
6 8 </div>
7 9 <div class="ans">
8   - 这是一套题的题目,这是一题非常有难度的题,其考点在于对地理知识的储备量
  10 + {{ dataObj.title }}
9 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 23 </div>
16 24  
17 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 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 40 </div>
28 41 </template>
29 42  
30 43 <script>
31 44 export default {
32 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 183 </script>
... ... @@ -102,7 +249,7 @@ export default {
102 249 bottom: 5vw;
103 250 width: 70vw;
104 251 height: 100px;
105   - background-color: #FF3636;
  252 + background-color: #ff3636;
106 253 font-size: 4.4vw;
107 254 margin: 30vw 0 10vw;
108 255 color: #fff;
... ... @@ -112,5 +259,8 @@ export default {
112 259 border-radius: 10vw;
113 260 letter-spacing: 10px;
114 261 }
  262 + .blue {
  263 + background-color: #409eff;
  264 + }
115 265 }
116 266 </style>
117 267 \ No newline at end of file
... ...
src/views/answerRank/data.json 0 → 100644
... ... @@ -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 131 \ No newline at end of file
... ...
src/views/answerRank/rank.vue
... ... @@ -55,12 +55,7 @@ export default {
55 55 data() {
56 56 return {
57 57 active: "a",
58   - rankList: [
59   - {},
60   - {},
61   - {},
62   - {},
63   - ]
  58 + rankList: []
64 59 };
65 60 },
66 61 methods: {
... ...
src/views/answerRank/stars.vue
... ... @@ -7,21 +7,23 @@
7 7 <img src="@/assets/rank/tx.png" />
8 8 </div>
9 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 14 </div>
13 15 </div>
14 16 <div class="L_mid">
15 17 <div class="mid_item">
16 18 <div>
17   - <span class="strong_font">23</span>
  19 + <span class="strong_font">xx</span>
18 20 <span>分</span>
19 21 </div>
20 22 <div class="grey_font">已完成题数</div>
21 23 </div>
22 24 <div class="mid_item">
23 25 <div>
24   - <span class="strong_font">50</span>
  26 + <span class="strong_font">xx</span>
25 27 <span>%</span>
26 28 </div>
27 29 <div class="grey_font">正确率</div>
... ... @@ -59,14 +61,19 @@
59 61  
60 62 <div class="flexBox" v-for="(v, i) in libraryList" :key="i">
61 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 68 </div>
64 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 74 </div>
68 75 <div class="btnBox">
69   - <div class="btn" @click="toAns(i + 1)">开始答题</div>
  76 + <div class="btn" @click="toAns(v)">开始答题</div>
70 77 </div>
71 78 </div>
72 79 </div>
... ... @@ -78,30 +85,75 @@ export default {
78 85 data() {
79 86 return {
80 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 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 132 toAns(val) {
101 133 this.$router.push({
102 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 159 </script>
... ... @@ -262,6 +314,7 @@ export default {
262 314 border-bottom: 1px solid #f1f1f1;
263 315  
264 316 .tipPic {
  317 + width: 15vw;
265 318 img {
266 319 width: 16vw;
267 320 height: 16vw;
... ...