user-manual.vue 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. <template>
  2. <div class="user-manual-box">
  3. <van-nav-bar title="学习积分" left-arrow @click-left="onClickLeft" />
  4. <div class="user-manual-div">
  5. <div class="user-manual-grades-div">
  6. <div class="user-manual-name-description">学习积分</div>
  7. <div class="user-manual-grades">
  8. {{ this.user.userInfo.points }}
  9. </div>
  10. <div class="user-manual-description" @click="clickLearnRule">
  11. 积分说明
  12. </div>
  13. </div>
  14. <div class="user-manual-earn-points-row">
  15. <div class="user-manual-earn-points">赚积分</div>
  16. <div class="user-manual-earn-points-text">
  17. 今日已累计<span class="user-manual-earn-points-today">{{
  18. todayEarnPoints
  19. }}</span
  20. ><span>积分</span>
  21. </div>
  22. </div>
  23. <div class="user-manual-list">
  24. <div
  25. v-for="(item, index) in eventList"
  26. :key="index"
  27. class="user-manual-item"
  28. >
  29. <div class="user-manual-item-left">
  30. <div class="user-manual-item-left-title">{{ item.name }}</div>
  31. <div>{{ item.rule }}</div>
  32. <div class="user-manual-item-left-percentage">
  33. <div class="user-manual-item-left-schedule">
  34. <van-progress
  35. :percentage="
  36. formatePercentageFun(item.getPoints, item.totaPonits)
  37. "
  38. :show-pivot="false"
  39. />
  40. </div>
  41. <div class="user-manual-item-left-schedule-text">
  42. 已获得{{ item.getPoints }}分 / 上限{{ item.totalPonits }}分
  43. </div>
  44. </div>
  45. </div>
  46. <div class="user-manual-item-right">
  47. <div class="user-manual-item-btn" @click="toManualEarnFun(item)">
  48. {{ item.rightButton }}
  49. </div>
  50. </div>
  51. </div>
  52. </div>
  53. </div>
  54. </div>
  55. </template>
  56. <script>
  57. import { mapState } from "vuex";
  58. import { getTodayStr } from "@/utils/date";
  59. export default {
  60. name: "user-manual",
  61. components: {},
  62. data() {
  63. return {
  64. loading: false,
  65. eventList: [
  66. {
  67. name: "每日登录",
  68. type: "DAILY_QUESTIONS",
  69. rule: "1分/登录",
  70. isFinish: false,
  71. getPoints: 0,
  72. totalPonits: 1,
  73. rightButton: "已完成",
  74. router: ""
  75. },
  76. {
  77. name: "阅读文章",
  78. type: "LEARNING_COMPLETE",
  79. rule: "1分/每阅读一篇非必学文章",
  80. isFinish: false,
  81. getPoints: 0,
  82. totalPonits: 10,
  83. rightButton: "去看看",
  84. router: ""
  85. },
  86. {
  87. name: "答题",
  88. type: "LEARNING_COMPLETE",
  89. rule: "1分/每答对一道非今日必答题目",
  90. isFinish: false,
  91. getPoints: 0,
  92. totalPonits: 10,
  93. rightButton: "去答题",
  94. router: ""
  95. },
  96. {
  97. name: "专项答题",
  98. type: "LEARNING_COMPLETE",
  99. rule: "1分/每答对一道专项答题",
  100. isFinish: false,
  101. getPoints: 0,
  102. totalPonits: 10,
  103. rightButton: "去答题",
  104. router: ""
  105. },
  106. {
  107. name: "今日必答",
  108. type: "LEARNING_COMPLETE",
  109. rule: "2分/完成今日必答",
  110. isFinish: false,
  111. getPoints: 0,
  112. totalPonits: 2,
  113. rightButton: "去答题",
  114. router: ""
  115. },
  116. {
  117. name: "今日必读",
  118. type: "DAILY_QUESTIONS",
  119. rule: "2分/阅读一篇必答文章",
  120. isFinish: false,
  121. getPoints: 0,
  122. totalPonits: 1000000000,
  123. rightButton: "去看看",
  124. router: ""
  125. }
  126. ],
  127. userTotalPonits: 0, // 用户的总积分
  128. todayEarnPoints: 0, // 今日已累计的积分
  129. sumPointsObj: {
  130. LOGIN: 0, // 登录
  131. DAILY_QUESTIONS: 0, // 每日答题
  132. WEEKLY_QUESTIONS: 0, // 每周考试
  133. READ_5_MINS: 0, // 阅读时长
  134. READ_2_HOURS: 0, // 阅读时长
  135. LEARNING_COMPLETE: 0 // 阅读完成
  136. }
  137. };
  138. },
  139. mounted() {
  140. this.getEvents();
  141. this.getDailyPoints();
  142. },
  143. computed: {
  144. ...mapState({
  145. user: state => state.user
  146. })
  147. },
  148. methods: {
  149. getEvents() {
  150. let path = {
  151. userName: this.user.userInfo.userName,
  152. date: getTodayStr()
  153. };
  154. this.$_http
  155. .get(this.$pathParams(this.$_API.JTXT_GET_EVENTS_USERNAME_DATE, path))
  156. .then(res => {
  157. if (res.data.length !== 0) {
  158. res.data.forEach(element => {
  159. this.sumPointsObj[element.event] += element.delta;
  160. });
  161. this.updateGetPoints();
  162. }
  163. })
  164. .catch(() => {
  165. this.$store.commit("toggleLoading", false);
  166. });
  167. },
  168. // 修改获得积分
  169. updateGetPoints() {
  170. this.eventList.forEach(element => {
  171. element.getPoints = this.sumPointsObj[element.type];
  172. });
  173. console.log("-this.eventList--" + JSON.stringify(this.eventList));
  174. },
  175. // 获取今日分数
  176. getDailyPoints() {
  177. let path = {
  178. userName: this.user.userInfo.userName
  179. };
  180. this.$_http
  181. .get(this.$pathParams(this.$_API.JTXT_GET_USER_DAIYL_POINTS, path))
  182. .then(res => {
  183. this.todayEarnPoints = res.data;
  184. })
  185. .catch(() => {
  186. this.$store.commit("toggleLoading", false);
  187. });
  188. },
  189. // 查询总积分
  190. getAllPoints() {
  191. let path = {
  192. userName: this.user.userInfo.userName
  193. };
  194. this.$_http
  195. .get(this.$pathParams(this.$_API.JTXT_GET_USER_ALL_POINTS, path))
  196. .then(res => {
  197. this.userTotalPonits = res.data;
  198. })
  199. .catch(() => {
  200. this.$store.commit("toggleLoading", false);
  201. });
  202. },
  203. // 格式化已获得的积分/总积分的数
  204. formatePercentageFun(getPoints, totaPonits) {
  205. return Math.round((getPoints / totaPonits) * 100) || 0;
  206. },
  207. // 操作:返回
  208. onClickLeft() {
  209. this.$router.back();
  210. },
  211. // 操作:点击积分说明按钮
  212. clickLearnRule() {
  213. this.$router.push({ name: "LearnPointRule" });
  214. },
  215. // 操作:点击了去看看、去学习、去训练
  216. toManualEarnFun(item) {
  217. console.log("item" + JSON.stringify(item));
  218. if (item.name === "今日必答") {
  219. this.$store.commit("updateAnswerItemStore", {
  220. field: "answerRecruitId",
  221. value: "daily-questions" // item.id
  222. });
  223. this.$router.push({ name: "answerRecruit" });
  224. } else if (item.name === "今日必读") {
  225. this.$router.push({
  226. name: "home"
  227. });
  228. this.$store.commit("updateStudyItemStore", {
  229. field: "isNeedChangeTab",
  230. value: true
  231. });
  232. }
  233. }
  234. }
  235. };
  236. </script>
  237. <style lang="scss" scoped>
  238. .user-manual-box {
  239. width: 100%;
  240. height: 100vh;
  241. font-size: 0.6rem;
  242. background-color: #fff;
  243. .user-manual-div {
  244. overflow-y: auto;
  245. padding: 0 0.75rem;
  246. .user-manual-grades-div {
  247. display: flex;
  248. flex-direction: column;
  249. justify-content: center;
  250. align-items: center;
  251. padding-top: 1rem;
  252. .user-manual-name-description {
  253. padding: 0.15rem 0.5rem;
  254. // border: 1px solid #7cc8ff;
  255. // border-radius: 0.25rem;
  256. color: #0088e9;
  257. font-size: 0.75rem;
  258. }
  259. .user-manual-grades {
  260. font-size: 1rem;
  261. color: #0088e9;
  262. margin-top: 0.5rem;
  263. }
  264. .user-manual-description {
  265. margin-top: 0.5rem;
  266. padding: 0.15rem 0.5rem;
  267. border: 1px solid #7cc8ff;
  268. border-radius: 0.25rem;
  269. color: #7cc8ff;
  270. }
  271. }
  272. .user-manual-earn-points-row {
  273. display: flex;
  274. justify-content: space-between;
  275. align-items: center;
  276. margin-top: 1rem;
  277. .user-manual-earn-points {
  278. font-size: 0.7rem;
  279. font-weight: bold;
  280. }
  281. .user-manual-earn-points-text {
  282. color: #696969;
  283. display: flex;
  284. align-items: center;
  285. span {
  286. color: #df371e;
  287. }
  288. .user-manual-earn-points-today {
  289. font-size: 0.8rem;
  290. margin: 0 0.25rem;
  291. }
  292. }
  293. }
  294. .user-manual-list {
  295. padding: 0.5rem 0;
  296. .user-manual-item {
  297. padding: 0.5rem 0;
  298. border-top: 1px solid #e5e5e5;
  299. display: flex;
  300. justify-content: space-between;
  301. align-items: center;
  302. .user-manual-item-left {
  303. .user-manual-item-left-title {
  304. font-weight: bold;
  305. word-break: break-all;
  306. word-wrap: break-word;
  307. }
  308. .user-manual-item-left-percentage {
  309. display: flex;
  310. align-items: center;
  311. margin-top: 0.5rem;
  312. .user-manual-item-left-schedule {
  313. width: 100px;
  314. }
  315. .user-manual-item-left-schedule-text {
  316. color: #999;
  317. font-size: 0.55rem;
  318. margin-left: 0.5rem;
  319. }
  320. }
  321. }
  322. .user-manual-item-right {
  323. .user-manual-item-btn {
  324. border-radius: 0.1rem;
  325. color: #0088e9;
  326. background-color: #d8e9f5;
  327. padding: 0.1rem 0.25rem;
  328. }
  329. }
  330. }
  331. }
  332. }
  333. }
  334. </style>