item.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. import common from '../../utils/util';
  2. import server from '../../utils/main';
  3. const app = getApp();
  4. var currentIndex = 0, tempCurrentIndex = -1;
  5. var audioArray = [];
  6. var AnswerID = 0;
  7. Page({
  8. data: {
  9. version: app.globalData.version,
  10. IsPlaying: 0,
  11. PlayStr: "本",
  12. selectTab0: "btn1",
  13. selectTab1: "",
  14. selectTab2: "",
  15. },
  16. onLoad: function (options) {
  17. var that = this;
  18. this.audioCtxNumber = wx.createAudioContext('numberAudio');
  19. this.setData({
  20. Containnerheight: server.getWindowHeight(),
  21. IsPlaying: 0,
  22. });
  23. audioArray = [];
  24. currentIndex = 0;
  25. tempCurrentIndex = -1;
  26. AnswerID = options.id;
  27. this.getItem();
  28. wx.setNavigationBarTitle({
  29. title: "试卷答案 " + AnswerID,
  30. });
  31. common.getStorageValue(this, "HelpHidden6", false, function () {
  32. that.showHelp();
  33. });
  34. },
  35. onUnload: function () {
  36. this.closeHelp();
  37. var list = wx.getStorageSync("AnswerList");
  38. if (list && list.length > 0) {
  39. for (var i = 0; i < list.length; i++) {
  40. if (AnswerID == list[i].AnswerID) {
  41. list[i] = this.data.AnswerItem;
  42. wx.setStorageSync("AnswerList", list);
  43. break;
  44. }
  45. }
  46. }
  47. },
  48. scrollTop: function (e) {
  49. var id = Number(e.currentTarget.dataset.id);
  50. var selectTab0 = "", selectTab1 = "", selectTab2 = "";
  51. if (id == 0)
  52. selectTab0 = "btn1";
  53. else if (id == 1)
  54. selectTab1 = "btn1";
  55. else if (id == 2)
  56. selectTab2 = "btn1";
  57. this.setData({
  58. selectTab0: selectTab0,
  59. selectTab1: selectTab1,
  60. selectTab2: selectTab2,
  61. });
  62. var top = 0;
  63. var query = wx.createSelectorQuery();
  64. query.select('#panelRowTop' + id).boundingClientRect();
  65. query.selectViewport().scrollOffset();
  66. query.exec(function (res) {
  67. top = res[0].top + res[1].scrollTop
  68. wx.pageScrollTo({
  69. scrollTop: top,
  70. duration: 500
  71. });
  72. });
  73. },
  74. getItem: function () {
  75. var that = this;
  76. var list = wx.getStorageSync("AnswerList");
  77. if (list && list.length > 0) {
  78. var item;
  79. for (var i = 0; i < list.length; i++) {
  80. if (AnswerID == list[i].AnswerID) {
  81. item = list[i];
  82. break;
  83. }
  84. }
  85. var list = item.QuestionList;
  86. for (var i = 0; i < list.length; i++) {
  87. if (i == 0 && list[i].Vertical && item.Category > 0) {
  88. list[i].IsShowVertical = true;
  89. }
  90. if (item.Category == -1)
  91. list[i].ErrorClass = "";
  92. }
  93. var list = item.QuestionList;
  94. for (var i = 0; i < list.length; i++) {
  95. if (list[i].OperateAB == '÷' && list[i].Vertical) {
  96. list[i].LineLength = list[i].A.toString().length;
  97. for (var k = 0; k < list[i].Vertical[1].Array.length; k++) {
  98. list[i].Vertical[1].Array[k] = "";
  99. }
  100. for (var k = 0; k < list[i].Vertical[2].Array.length; k++) {
  101. if (list[i].Vertical[2].Array[k] == "√" && list[i].Vertical[2].Array[list[i].Vertical[2].Array.length - 1] != "√") {
  102. list[i].Vertical[2].Array[k] = "";
  103. list[i].Vertical[2].Array.push("√");
  104. break;
  105. }
  106. }
  107. }
  108. }
  109. var pageNum = 0;
  110. if (item.QuestionList.length % 3 == 0)
  111. pageNum = item.QuestionList.length / 3;
  112. else if (item.QuestionList.length % 3 == 1)
  113. pageNum = (item.QuestionList.length + 2) / 3;
  114. else if (item.QuestionList.length % 3 == 2)
  115. pageNum = (item.QuestionList.length + 1) / 3;
  116. that.setData({
  117. AnswerItem: item,
  118. PageColumnNum: pageNum,
  119. });
  120. }
  121. },
  122. selectedItem: function (e) {
  123. var id = e.currentTarget.dataset.id;
  124. var list = this.data.AnswerItem.QuestionList;
  125. for (var i = 0; i < list.length; i++) {
  126. if (id == list[i].ID) {
  127. list[i].IsShowVertical = !list[i].IsShowVertical;
  128. } else {
  129. list[i].IsShowVertical = false;
  130. }
  131. }
  132. this.data.AnswerItem.QuestionList = list;
  133. this.setData({
  134. AnswerItem: this.data.AnswerItem,
  135. });
  136. },
  137. setErrorItem: function (e) {
  138. var id = e.currentTarget.dataset.id;
  139. var list = this.data.AnswerItem.QuestionList;
  140. for (var i = 0; i < list.length; i++) {
  141. if (id == list[i].ID) {
  142. if (!list[i].ErrorClass || list[i].ErrorClass == "") {
  143. list[i].ErrorClass = "ErrorClass";
  144. wx.showToast({ title: "记号已保存", duration: 1000 });
  145. this.saveErrorList(list[i], "add");
  146. }
  147. else {
  148. list[i].ErrorClass = "";
  149. wx.showToast({ title: "记号已消除", duration: 1000 });
  150. this.saveErrorList(list[i], "delete");
  151. }
  152. break;
  153. }
  154. }
  155. this.data.AnswerItem.QuestionList = list;
  156. this.setData({
  157. AnswerItem: this.data.AnswerItem,
  158. });
  159. },
  160. saveErrorList: function (item, action) {
  161. var list = wx.getStorageSync("ErrorList");
  162. if (!list)
  163. list = [];
  164. var b = false;
  165. for (var i = 0; i < list.length; i++) {
  166. if (item.A == list[i].A && item.B == list[i].B && item.R == list[i].R && item.OperateAB == list[i].OperateAB) {
  167. if (item.C) {
  168. if (item.C == list[i].C && item.OperateBC == list[i].OperateBC) {
  169. if (item.D) {
  170. if (item.D == list[i].D && item.OperateCD == list[i].OperateCD) {
  171. b = true;
  172. }
  173. }
  174. else
  175. b = true;
  176. }
  177. }
  178. else
  179. b = true;
  180. }
  181. if (b) {
  182. list.splice(i, 1);
  183. break;
  184. }
  185. }
  186. if (action == "add") {
  187. item.ID = new Date().getTime();
  188. list.unshift(item);
  189. }
  190. wx.setStorageSync("ErrorList", list);
  191. },
  192. showImage: function (e) {
  193. var that = this;
  194. wx.previewImage({
  195. current: that.data.AnswerItem.TempImagePath, // 当前显示图片的http链接
  196. urls: [that.data.AnswerItem.TempImagePath] // 需要预览的图片http链接列表
  197. });
  198. },
  199. playAudioStart: function () {
  200. if (this.data.IsPlaying == 1) {
  201. this.audioCtxNumber.pause();
  202. }
  203. else if (this.data.IsPlaying == -1) {
  204. this.audioCtxNumber.play();
  205. }
  206. else if (this.data.IsPlaying == 0) {
  207. server.playSound("/sounds/startend.mp3");
  208. var arr = [];
  209. var item = this.data.AnswerItem;
  210. var list = item.QuestionList;
  211. for (var i = 0; i < list.length; i++) {
  212. if (i % this.data.PageColumnNum == 0) {
  213. if (i > 0) {
  214. arr.push("");
  215. audioArray.push(arr);
  216. arr = [];
  217. }
  218. arr.push("第" + (1 + Math.floor(i / this.data.PageColumnNum)) + "列");
  219. }
  220. var str = list[i].Result;
  221. if (str.toString().indexOf("......") > 0) {
  222. str = str.toString().replace("......", "”余数");
  223. str = "商“" + str;
  224. }
  225. arr.push(str);
  226. }
  227. arr.push("");
  228. audioArray.push(arr);
  229. this.playAudioAll();
  230. }
  231. if (this.data.IsPlaying == 1)
  232. this.data.IsPlaying = -1;
  233. else
  234. this.data.IsPlaying = 1;
  235. this.setData({
  236. IsPlaying: this.data.IsPlaying,
  237. });
  238. },
  239. playAudioAll: function () {
  240. if (currentIndex >= 3) {
  241. currentIndex = 0;
  242. this.setData({
  243. IsPlaying: true,
  244. });
  245. server.playSound("/sounds/startend.mp3");
  246. return;
  247. } else {
  248. var str = audioArray[currentIndex].join(", ");
  249. server.playAudio(this.audioCtxNumber, str, 1);
  250. }
  251. },
  252. onPlayEnded: function (e) {
  253. currentIndex++;
  254. this.playAudioAll();
  255. },
  256. playPrev: function () {
  257. var playstr = "本";
  258. if (currentIndex > 0 && tempCurrentIndex == currentIndex) {
  259. currentIndex--;
  260. }
  261. else {
  262. tempCurrentIndex = currentIndex;
  263. playstr = "前";
  264. if (currentIndex <= 0)
  265. playstr = "本";
  266. }
  267. this.playAudioAll();
  268. this.setData({
  269. PlayStr: playstr,
  270. });
  271. },
  272. showHelp: function () {
  273. if (!this.data.HelpHidden6) {
  274. this.audioCtx = wx.createAudioContext('myAudio');
  275. var str = "对答案可以用听的也可以用看的。答案在左边,题目在右边。想给做错的题目打记号,就点击答案左侧的1、2、3……题目序号,这样就可以去首页的错题集里复习它们了。还有一个特殊功能!在有竖式题目的情况下,题目右侧会有这样的图标 ,点它就能提供完整的解题步骤,这个独门神器是倾力为你准备的,对找出错误所在非常有效。";
  276. server.playAudio(this.audioCtx, str);
  277. }
  278. },
  279. closeHelp: function () {
  280. this.setData({
  281. HelpHidden6: true,
  282. });
  283. wx.setStorageSync("HelpHidden6", true);
  284. this.audioCtx = wx.createAudioContext('myAudio');
  285. this.audioCtx.pause();
  286. },
  287. onShareAppMessage: function () {
  288. return {
  289. title: app.globalData.ShareTitle,
  290. path: 'pages/index/index?UserID=' + app.globalData.userInfo.UserID,
  291. imageUrl: app.globalData.ShareImage,
  292. }
  293. },
  294. })