detail.js 16 KB

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