detail.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. import common from '../../utils/util';
  2. import main from '../../utils/main';
  3. const app = getApp();
  4. var innerAudioContext1;
  5. var listTaskFinished = []; //完成的任务
  6. var listTaskReview = []; //需重新复习的任务
  7. var timeStart; //计算时长
  8. Page({
  9. data: {
  10. NumberNew: 0,
  11. NumberReview: 0,
  12. NumberHistory: 0,
  13. IsShowNumberInfo: false,
  14. },
  15. onLoad: function () {
  16. var that = this;
  17. that.setData({
  18. Containnerheight: main.getWindowHeight(),
  19. IsShowAnswer: [0, 0],
  20. });
  21. innerAudioContext1 = wx.createInnerAudioContext();
  22. this.audioCtx = wx.createAudioContext('playAudio');
  23. this.getList();
  24. },
  25. onShow: function () {
  26. var that = this;
  27. if (wx.getStorageSync("CardUpdateOK")) {
  28. var item = wx.getStorageSync("CardEditItem");
  29. this.data.TaskList[0].Content = item.Content;
  30. this.setData({
  31. TaskList: this.data.TaskList,
  32. });
  33. wx.removeStorageSync("CardUpdateOK");
  34. }
  35. if (that.data.NumberNew == 0 &&
  36. that.data.NumberReview == 0 &&
  37. that.data.NumberHistory == 0) {
  38. listTaskFinished = [];
  39. that.setBackColor(1);
  40. }
  41. else
  42. that.setBackColor(-1);
  43. },
  44. setBackColor: function (isFinish) {//isFinish=1 结束 =0正常 =-1开始
  45. var that = this;
  46. var url = "/pages/sounds/";
  47. if (isFinish == 1) {
  48. wx.setNavigationBarColor({
  49. frontColor: '#ffffff',
  50. backgroundColor: '#47413D',
  51. });
  52. if (wx.canIUse('setBackgroundColor')) {
  53. wx.setBackgroundColor({
  54. backgroundColor: '#47413D',
  55. });
  56. }
  57. url += "end.mp3";
  58. }
  59. else {
  60. wx.setNavigationBarColor({
  61. frontColor: '#ffffff',
  62. backgroundColor: "#A5656E",
  63. });
  64. if (wx.canIUse('setBackgroundColor')) {
  65. wx.setBackgroundColor({
  66. backgroundColor: "#A5656E",
  67. });
  68. }
  69. }
  70. wx.pageScrollTo({
  71. scrollTop: 0,
  72. });
  73. },
  74. getList: function () {
  75. var task = wx.getStorageSync("TaskToday");
  76. var that = this;
  77. var arrNew = task.ListNew;
  78. var arrHistory = task.ListHistory;
  79. listTaskReview = task.ListReview;
  80. var nMax = [1, 1];
  81. if (arrNew.length == 0 || arrHistory.length == 0) {
  82. if (arrNew.length == 0) {
  83. nMax[0] = 0;
  84. }
  85. if (arrHistory.length == 0) {
  86. nMax[1] = 0;
  87. }
  88. } else if (arrNew.length >= arrHistory.length) {
  89. nMax[0] = Math.floor(arrNew.length / arrHistory.length);
  90. } else if (arrNew.length < arrHistory.length) {
  91. nMax[1] = Math.floor(arrHistory.length / arrNew.length);
  92. }
  93. arrNew = common.randomArray(arrNew);
  94. arrHistory = common.randomArray(arrHistory);
  95. var Len = arrNew.length + arrHistory.length;
  96. var list = [],
  97. indexNew = 0,
  98. indexHistory = 0;
  99. for (var i = 0; i < Len; i++) {
  100. for (var j = 0; j < nMax[0]; j++) {
  101. if (indexNew < arrNew.length) {
  102. arrNew[indexNew].IsNew = true;
  103. list.push(arrNew[indexNew++]);
  104. }
  105. }
  106. for (var j = 0; j < nMax[1]; j++) {
  107. if (indexHistory < arrHistory.length) {
  108. arrHistory[indexHistory].IsHistory = true;
  109. list.push(arrHistory[indexHistory++]);
  110. }
  111. }
  112. }
  113. that.data.NumberReview = listTaskReview.length;
  114. if (list.length == 0 && listTaskReview.length > 0) {
  115. list.push(listTaskReview.shift());
  116. }
  117. list = updateNumberStr(list);
  118. listTaskReview = updateNumberStr(listTaskReview);
  119. wx.setStorageSync("CardEditItem", list[0]);
  120. //处理列表
  121. list = formatList(list);
  122. listTaskReview = formatList(listTaskReview);
  123. that.setData({
  124. NumberNew: arrNew.length,
  125. NumberReview: that.data.NumberReview,
  126. NumberHistory: arrHistory.length,
  127. TaskList: list,
  128. FontSize:list[0].FontSize,
  129. CanUndo: 0,
  130. });
  131. listTaskFinished = [];
  132. timeStart = new Date(); //起始时间
  133. function formatList(list) {
  134. for (var i = 0; i < list.length; i++) {
  135. list[i].Content = main.changeStringToView(list[i].Content);
  136. }
  137. return list;
  138. }
  139. function replaceStr(data) {
  140. var result = "";
  141. if (data.indexOf("d") > 0) {
  142. var dayNum = Number(data.replace("d", ""));
  143. if (dayNum >= 365) {
  144. var year1 = Math.floor(dayNum / 365);
  145. var year = year1 + Math.round(10 * (dayNum - year1 * 365) / 365) / 10;
  146. result = year + "年";
  147. } else {
  148. if (dayNum > 31) {
  149. var month1 = Math.floor(dayNum / 30);
  150. var month = month1 + Math.round(10 * (dayNum - month1 * 30) / 30) / 10;
  151. result = month + "月";
  152. } else
  153. result = data.replace("d", "天");
  154. }
  155. } else if (data.indexOf("m") > 0)
  156. result = data.replace("m", "分钟");
  157. return result;
  158. }
  159. function updateNumberStr(list) {
  160. for (var i = 0; i < list.length; i++) {
  161. if (list[i].Number0)
  162. list[i].Number0Str = replaceStr(list[i].Number0);
  163. if (list[i].Number1)
  164. list[i].Number1Str = replaceStr(list[i].Number1);
  165. if (list[i].Number2)
  166. list[i].Number2Str = replaceStr(list[i].Number2);
  167. if (list[i].Number3)
  168. list[i].Number3Str = replaceStr(list[i].Number3);
  169. }
  170. return list;
  171. }
  172. },
  173. onShowAnswer: function (e) {
  174. var start = e.currentTarget.dataset.start;
  175. var that = this;
  176. if (!(that.data.NumberNew == 0 &&
  177. that.data.NumberReview == 0 &&
  178. that.data.NumberHistory == 0)) {
  179. if (start) {
  180. that.data.IsShowAnswer[0] = 0;
  181. that.data.IsShowAnswer[1] = 0;
  182. }
  183. else {
  184. if (!that.data.IsShowAnswer[0] && !that.data.IsShowAnswer[1]) {
  185. that.data.IsShowAnswer[0] = 1;
  186. if (that.data.TaskList[0].Content.Field[3].length == 0) {
  187. that.data.IsShowAnswer[1] = 1;
  188. }
  189. }
  190. else if (that.data.IsShowAnswer[0] && !that.data.IsShowAnswer[1]) {
  191. that.data.IsShowAnswer[1] = 1;
  192. }
  193. }
  194. that.setData({
  195. IsShowAnswer: that.data.IsShowAnswer,
  196. });
  197. }
  198. },
  199. onAddQuestion: function () {
  200. wx.navigateTo({
  201. url: './add'
  202. });
  203. },
  204. onMore: function () {
  205. var that = this;
  206. wx.showActionSheet({
  207. itemList: ["详细信息", "编辑笔记", "字体紧凑", "字体标准", "字体宽松"],
  208. success(res) {
  209. console.log(res.tapIndex);
  210. wx.setStorageSync("CardEditItem", that.data.TaskList[0]);
  211. if (res.tapIndex == 0) {
  212. wx.navigateTo({
  213. url: './cardInfo',
  214. });
  215. }
  216. else if (res.tapIndex == 1) {
  217. wx.navigateTo({
  218. url: './add?type=edit'
  219. });
  220. }
  221. else if (res.tapIndex == 2) {
  222. that.data.TaskList[0].FontSize=46;
  223. that.setData({
  224. TaskList: that.data.TaskList,
  225. });
  226. }
  227. else if (res.tapIndex == 3) {
  228. that.data.TaskList[0].FontSize = 68;
  229. that.setData({
  230. TaskList: that.data.TaskList,
  231. });
  232. }
  233. else if (res.tapIndex == 4) {
  234. that.data.TaskList[0].FontSize = 108;
  235. that.setData({
  236. TaskList: that.data.TaskList,
  237. });
  238. }
  239. },
  240. })
  241. },
  242. gotoPrev: function () {
  243. if (listTaskFinished.length > 0) {
  244. var card = listTaskFinished.pop();
  245. console.log(card);
  246. var that = this;
  247. var url = "UndoMiaoguoCard?";
  248. url += "ID=" + card.Card.ID;
  249. url += "&UserID=" + app.globalData.userInfo.UserID;
  250. url += "&IntervalTime=" + card.IntervalTime;
  251. url += "&IntervalDay=" + card.IntervalDay;
  252. url += "&RepetitionCoefficient=" + card.RepetitionCoefficient;
  253. if (card.Card.FirstTime)
  254. url += "&FirstTime=" + card.Card.FirstTime;
  255. if (card.Card.LastTime)
  256. url += "&LastTime=" + card.Card.LastTime;
  257. main.getData(url, function (data) {
  258. timeStart = new Date();
  259. card.Card.Number0 = card.Number0Old;
  260. card.Card.Number0Str = card.Number0StrOld;
  261. card.Card.Number1 = card.Number1Old;
  262. card.Card.Number1Str = card.Number1StrOld;
  263. card.Card.Number2 = card.Number2Old;
  264. card.Card.Number2Str = card.Number2StrOld;
  265. card.Card.Number3 = card.Number3Old;
  266. card.Card.Number3Str = card.Number3StrOld;
  267. if (card.NumberReview < that.data.NumberReview) {
  268. listTaskReview.pop();
  269. }
  270. wx.setStorageSync("CardEditItem", card.Card);
  271. that.data.TaskList.unshift(card.Card);
  272. var canUndo = 1;
  273. if (listTaskFinished.length == 0)
  274. canUndo = 0;
  275. that.setData({
  276. IsShowAnswer: [0, 0],
  277. TaskList: that.data.TaskList,
  278. NumberNew: card.NumberNew,
  279. NumberReview: card.NumberReview,
  280. NumberHistory: card.NumberHistory,
  281. CanUndo: canUndo,
  282. });
  283. });
  284. }
  285. that.setBackColor(0);
  286. },
  287. gotoNext: function (e) {
  288. var that = this;
  289. var btnnumber = e.currentTarget.dataset.btnnumber;
  290. var time = e.currentTarget.dataset.time;
  291. var finishCard = {};
  292. finishCard.Card = that.data.TaskList[0];
  293. finishCard.NumberNew = this.data.NumberNew;
  294. finishCard.NumberReview = this.data.NumberReview;
  295. finishCard.NumberHistory = this.data.NumberHistory;
  296. finishCard.Number0Old = this.data.TaskList[0].Number0;
  297. finishCard.Number0StrOld = this.data.TaskList[0].Number0Str;
  298. finishCard.Number1Old = this.data.TaskList[0].Number1;
  299. finishCard.Number1StrOld = this.data.TaskList[0].Number1Str;
  300. finishCard.Number2Old = this.data.TaskList[0].Number2;
  301. finishCard.Number2StrOld = this.data.TaskList[0].Number2Str;
  302. finishCard.Number3Old = this.data.TaskList[0].Number3;
  303. finishCard.Number3StrOld = this.data.TaskList[0].Number3Str;
  304. //若不是搁置
  305. if (btnnumber != "1") {
  306. //若是分钟,则进入复习列表
  307. if (time.lastIndexOf("m") == time.length - 1) {
  308. var minute = Number(time.substr(0, time.indexOf("m")));
  309. this.data.TaskList[0].LimitTime = common.formatTime(common.addDate("n", minute, new Date()));
  310. //若是新增,则10m 1d 4d
  311. if (this.data.TaskList[0].IsNew) {
  312. this.data.TaskList[0].Number0 = "10m";
  313. this.data.TaskList[0].Number0Str = "10分钟";
  314. delete this.data.TaskList[0].Number1;
  315. delete this.data.TaskList[0].Number1Str;
  316. this.data.TaskList[0].Number2 = "1d";
  317. this.data.TaskList[0].Number2Str = "1天";
  318. this.data.TaskList[0].Number3 = "4d";
  319. this.data.TaskList[0].Number3Str = "4天";
  320. this.data.TaskList[0].FirstTime = null;
  321. this.data.TaskList[0].LastTime = null;
  322. }
  323. //若是历史的,则10m 1d
  324. else if (this.data.TaskList[0].IsHistory) {
  325. this.data.TaskList[0].Number0 = "10m";
  326. this.data.TaskList[0].Number0Str = "10分钟";
  327. delete this.data.TaskList[0].Number1;
  328. delete this.data.TaskList[0].Number1Str;
  329. this.data.TaskList[0].Number2 = "1d";
  330. this.data.TaskList[0].Number2Str = "1天";
  331. delete this.data.TaskList[0].Number3;
  332. delete this.data.TaskList[0].Number3Str;
  333. }
  334. this.data.TaskList[0].IsReview = true;
  335. listTaskReview.push(this.data.TaskList[0]);
  336. }
  337. //若是天月年
  338. else {
  339. var dayNum = Number(time.substr(0, time.indexOf("d")));
  340. var date = common.addDate("d", dayNum, new Date());
  341. this.data.TaskList[0].LimitTime = common.formatTime(date);
  342. }
  343. }
  344. //修改学习任务个数
  345. var learningType = 0;
  346. if (this.data.TaskList[0].IsReview) {
  347. learningType = 2;
  348. this.data.NumberReview = listTaskReview.length;
  349. }
  350. if (this.data.TaskList[0].IsNew) {
  351. learningType = 0;
  352. this.data.NumberNew--;
  353. if (this.data.NumberNew < 0)
  354. this.data.NumberNew = 0;
  355. } else if (this.data.TaskList[0].IsHistory) {
  356. learningType = 1;
  357. this.data.NumberHistory--;
  358. if (this.data.NumberHistory < 0)
  359. this.data.NumberHistory = 0;
  360. }
  361. if (btnnumber == "1") {
  362. learningType = 3;
  363. }
  364. finishCard.IntervalTime = time;
  365. finishCard.BtnNumber = btnnumber;
  366. finishCard.LearningType = learningType;
  367. //保存上传
  368. var obj = {
  369. ID: this.data.TaskList[0].ID,
  370. IntervalTime: time,
  371. BtnNumber: btnnumber,
  372. LearningType: learningType,
  373. IsUndo: 0,
  374. }
  375. this.saveCard(obj, function () {
  376. //添加完成列表,去掉任务列表数据
  377. listTaskFinished.push(finishCard);
  378. that.data.TaskList.shift();
  379. that.data.NumberReview = listTaskReview.length;
  380. //查看复习卡是否到时间
  381. if (listTaskReview.length > 0 && listTaskReview[0].LimitTime < common.formatTime(new Date()) || that.data.TaskList.length == 0) {
  382. that.data.TaskList.unshift(listTaskReview.shift());
  383. }
  384. console.log(JSON.stringify(that.data.TaskList[0]));
  385. wx.setStorageSync("CardEditItem", that.data.TaskList[0]);
  386. if (that.data.NumberNew == 0 &&
  387. that.data.NumberReview == 0 &&
  388. that.data.NumberHistory == 0) {
  389. that.setData({
  390. IsShowAnswer: [0, 0],
  391. NumberNew: 0,
  392. NumberReview: 0,
  393. NumberHistory: 0,
  394. CanUndo: 1,
  395. });
  396. that.setBackColor(1);
  397. } else {
  398. //任务没有完成,下一张卡片
  399. that.setData({
  400. IsShowAnswer: [0, 0],
  401. TaskList: that.data.TaskList,
  402. NumberNew: that.data.NumberNew,
  403. NumberReview: that.data.NumberReview,
  404. NumberHistory: that.data.NumberHistory,
  405. FontSize: that.data.TaskList[0].FontSize,
  406. CanUndo: 1,
  407. });
  408. that.setBackColor(0);
  409. }
  410. });
  411. },
  412. saveCard: function (obj, callback) {
  413. var url = "UpdateMiaoguoCardToday?";
  414. url += "ID=" + obj.ID;
  415. url += "&UserID=" + app.globalData.userInfo.UserID;
  416. url += "&IntervalTime=" + obj.IntervalTime;
  417. url += "&BtnNumber=" + obj.BtnNumber;
  418. url += "&LearningType=" + obj.LearningType;
  419. url += "&FontSize=" + this.data.TaskList[0].FontSize;
  420. var duration = common.diffDate("s", timeStart, new Date());
  421. url += "&Duration=" + duration;
  422. url += "&IsUndo=" + obj.IsUndo;
  423. if (obj.LastTime)
  424. url += "&LastTime=" + obj.LastTime;
  425. main.getData(url, function (data) {
  426. timeStart = new Date();
  427. callback();
  428. });
  429. },
  430. playSound: function (e) {
  431. var str = e.currentTarget.dataset.content;
  432. var url;
  433. if (str.indexOf("英 [") >= 0 || str.indexOf("美 [") >= 0) {
  434. str = str.replace("英 [", "[");
  435. str = str.replace("美 [", "[");
  436. url = e.currentTarget.dataset.soundmark;
  437. }
  438. else {
  439. var url = app.globalData.audioUrlBaidu;
  440. url = url.replace("[token]", app.globalData.BaiduToken);
  441. url = url.replace("[word]", str);
  442. }
  443. this.audioCtx.setSrc(url);
  444. this.audioCtx.play();
  445. },
  446. showNumberContainner: function () {
  447. this.setData({
  448. IsShowNumberInfo: true,
  449. });
  450. },
  451. closeNumberContainner: function () {
  452. this.setData({
  453. IsShowNumberInfo: false,
  454. });
  455. },
  456. onShareAppMessage: function () {
  457. return {
  458. title: '',
  459. path: 'pages/miaoguo/default',
  460. success: function (res) { },
  461. fail: function (err) {
  462. console.log(err);
  463. },
  464. complete: function (res) {
  465. console.log(res);
  466. },
  467. }
  468. },
  469. });