detail.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591
  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. var that = this;
  18. that.setData({
  19. Containnerheight: main.getWindowHeight(),
  20. IsShowAnswer: [0, 0],
  21. CanUndo: 1,
  22. });
  23. innerAudioContext1 = wx.createInnerAudioContext();
  24. this.audioCtx = wx.createAudioContext('playAudio');
  25. this.getList();
  26. },
  27. onShow: function () {
  28. var that = this;
  29. if (that.data.NumberNew == 0 &&
  30. that.data.NumberReview == 0 &&
  31. that.data.NumberHistory == 0) {
  32. listTaskFinished = [];
  33. that.setSoundFile(1);
  34. }
  35. else{
  36. that.setSoundFile(-1);
  37. var list = wx.getStorageSync("CardList");
  38. if (list && list.length>0){
  39. for (var i = 0; i < list.length; i++) {
  40. if (that.data.TaskList[0].MiaoguoCardID == list[i].MiaoguoCardID) {
  41. var card = {};
  42. that.data.TaskList[0].Content = list[i].Content;
  43. that.data.TaskList[0].ContentNew = main.changeStringToView(list[i].Content);
  44. that.setData({
  45. TaskList:that.data.TaskList,
  46. });
  47. wx.removeStorageSync("CardList");
  48. break;
  49. }
  50. }
  51. }
  52. }
  53. },
  54. onPullDownRefresh: function () {
  55. this.gotoEdit(1);
  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. onMore: function () {
  213. var that = this;
  214. wx.showActionSheet({
  215. itemList: ["详细信息", "编辑笔记"],
  216. success(res) {
  217. that.gotoEdit(res.tapIndex);
  218. },
  219. })
  220. },
  221. gotoEdit:function(tapIndex){
  222. var that = this;
  223. //console.log(res.tapIndex);
  224. var list = [];
  225. that.data.TaskList[0].MiaoguoCardID = that.data.TaskList[0].ID;
  226. list.push(that.data.TaskList[0]);
  227. wx.setStorageSync("CardList", list);
  228. if (tapIndex == 0) {
  229. wx.navigateTo({
  230. url: './cardInfo?id=' + that.data.TaskList[0].MiaoguoCardID,
  231. });
  232. }
  233. else if (tapIndex == 1) {
  234. wx.navigateTo({
  235. url: './add?type=edit&id=' + that.data.TaskList[0].MiaoguoCardID,
  236. });
  237. }
  238. },
  239. onFontSize:function(){
  240. for(var i=0;i<arrFontSize.length;i++){
  241. if (arrFontSize[i] == this.data.TaskList[0].FontSize){
  242. i++;
  243. if (i==arrFontSize.length)
  244. i=0;
  245. this.data.TaskList[0].FontSize = arrFontSize[i];
  246. break;
  247. }
  248. }
  249. this.setData({
  250. TaskList: this.data.TaskList,
  251. });
  252. },
  253. gotoPrev: function () {
  254. if (listTaskFinished.length > 0) {
  255. var card = listTaskFinished.pop();
  256. //console.log(card);
  257. var that = this;
  258. var url = "UndoMiaoguoCard?";
  259. url += "ID=" + card.Card.ID;
  260. url += "&UserID=" + app.globalData.userInfo.UserID;
  261. url += "&IntervalTime=" + card.IntervalTime;
  262. url += "&IntervalDay=" + card.IntervalDay;
  263. url += "&RepetitionCoefficient=" + card.RepetitionCoefficient;
  264. if (card.Card.FirstTime)
  265. url += "&FirstTime=" + card.Card.FirstTime;
  266. if (card.Card.LastTime)
  267. url += "&LastTime=" + card.Card.LastTime;
  268. main.getData(url, function (data) {
  269. timeStart = new Date();
  270. card.Card.Number0 = card.Number0Old;
  271. card.Card.Number0Str = card.Number0StrOld;
  272. card.Card.Number1 = card.Number1Old;
  273. card.Card.Number1Str = card.Number1StrOld;
  274. card.Card.Number2 = card.Number2Old;
  275. card.Card.Number2Str = card.Number2StrOld;
  276. card.Card.Number3 = card.Number3Old;
  277. card.Card.Number3Str = card.Number3StrOld;
  278. if (card.NumberReview < that.data.NumberReview) {
  279. listTaskReview.pop();
  280. }
  281. that.data.TaskList.unshift(card.Card);
  282. var canUndo = 1;
  283. if (listTaskFinished.length == 0)
  284. canUndo = 0;
  285. that.setData({
  286. IsShowAnswer: [0, 0],
  287. TaskList: that.data.TaskList,
  288. NumberNew: card.NumberNew,
  289. NumberReview: card.NumberReview,
  290. NumberHistory: card.NumberHistory,
  291. CanUndo: canUndo,
  292. });
  293. });
  294. wx.showToast({
  295. title: '已返回',
  296. icon:'none',
  297. });
  298. }
  299. that.setSoundFile(0);
  300. },
  301. gotoNext: function (e) {
  302. var that = this;
  303. wx.showLoading({
  304. title: '请稍候',
  305. });
  306. var btnnumber = e.currentTarget.dataset.btnnumber;
  307. var time = e.currentTarget.dataset.time;
  308. var finishCard = {};
  309. finishCard.Card = that.data.TaskList[0];
  310. finishCard.NumberNew = this.data.NumberNew;
  311. finishCard.NumberReview = this.data.NumberReview;
  312. finishCard.NumberHistory = this.data.NumberHistory;
  313. finishCard.Number0Old = this.data.TaskList[0].Number0;
  314. finishCard.Number0StrOld = this.data.TaskList[0].Number0Str;
  315. finishCard.Number1Old = this.data.TaskList[0].Number1;
  316. finishCard.Number1StrOld = this.data.TaskList[0].Number1Str;
  317. finishCard.Number2Old = this.data.TaskList[0].Number2;
  318. finishCard.Number2StrOld = this.data.TaskList[0].Number2Str;
  319. finishCard.Number3Old = this.data.TaskList[0].Number3;
  320. finishCard.Number3StrOld = this.data.TaskList[0].Number3Str;
  321. //若不是搁置
  322. if (btnnumber != "1") {
  323. //若是分钟,则进入复习列表
  324. if (time.lastIndexOf("m") == time.length - 1) {
  325. var minute = Number(time.substr(0, time.indexOf("m")));
  326. this.data.TaskList[0].LimitTime = common.formatTime(common.addDate("n", minute, new Date()));
  327. //若是新增,则10m 1d 4d
  328. if (this.data.TaskList[0].IsNew) {
  329. this.data.TaskList[0].Number0 = "10m";
  330. this.data.TaskList[0].Number0Str = "10分钟";
  331. delete this.data.TaskList[0].Number1;
  332. delete this.data.TaskList[0].Number1Str;
  333. this.data.TaskList[0].Number2 = "1d";
  334. this.data.TaskList[0].Number2Str = "1天";
  335. this.data.TaskList[0].Number3 = "4d";
  336. this.data.TaskList[0].Number3Str = "4天";
  337. this.data.TaskList[0].FirstTime = null;
  338. this.data.TaskList[0].LastTime = null;
  339. }
  340. //若是历史的,则10m 1d
  341. else if (this.data.TaskList[0].IsHistory) {
  342. this.data.TaskList[0].Number0 = "10m";
  343. this.data.TaskList[0].Number0Str = "10分钟";
  344. delete this.data.TaskList[0].Number1;
  345. delete this.data.TaskList[0].Number1Str;
  346. this.data.TaskList[0].Number2 = "1d";
  347. this.data.TaskList[0].Number2Str = "1天";
  348. delete this.data.TaskList[0].Number3;
  349. delete this.data.TaskList[0].Number3Str;
  350. }
  351. this.data.TaskList[0].IsReview = true;
  352. listTaskReview.push(this.data.TaskList[0]);
  353. }
  354. //若是天月年
  355. else {
  356. var dayNum = Number(time.substr(0, time.indexOf("d")));
  357. var date = common.addDate("d", dayNum, new Date());
  358. this.data.TaskList[0].LimitTime = common.formatTime(date);
  359. }
  360. }
  361. else{
  362. wx.showToast({
  363. title: '已搁置',
  364. icon: 'none',
  365. });
  366. }
  367. //修改学习任务个数
  368. var learningType = 0;
  369. if (this.data.TaskList[0].IsReview) {
  370. learningType = 2;
  371. this.data.NumberReview = listTaskReview.length;
  372. }
  373. if (this.data.TaskList[0].IsNew) {
  374. learningType = 0;
  375. this.data.NumberNew--;
  376. if (this.data.NumberNew < 0)
  377. this.data.NumberNew = 0;
  378. } else if (this.data.TaskList[0].IsHistory) {
  379. learningType = 1;
  380. this.data.NumberHistory--;
  381. if (this.data.NumberHistory < 0)
  382. this.data.NumberHistory = 0;
  383. }
  384. if (btnnumber == "1") {
  385. learningType = 3;
  386. }
  387. finishCard.IntervalTime = time;
  388. finishCard.BtnNumber = btnnumber;
  389. finishCard.LearningType = learningType;
  390. //保存上传
  391. var obj = {
  392. ID: this.data.TaskList[0].ID,
  393. IntervalTime: time,
  394. BtnNumber: btnnumber,
  395. LearningType: learningType,
  396. IsUndo: 0,
  397. }
  398. this.saveCard(obj, function () {
  399. wx.hideLoading();
  400. //添加完成列表,去掉任务列表数据
  401. listTaskFinished.push(finishCard);
  402. that.data.TaskList.shift();
  403. that.data.NumberReview = listTaskReview.length;
  404. //查看复习卡是否到时间
  405. if (listTaskReview.length > 0 && listTaskReview[0].LimitTime < common.formatTime(new Date()) || that.data.TaskList.length == 0) {
  406. that.data.TaskList.unshift(listTaskReview.shift());
  407. }
  408. //console.log(JSON.stringify(that.data.TaskList[0]));
  409. if (that.data.NumberNew == 0 &&
  410. that.data.NumberReview == 0 &&
  411. that.data.NumberHistory == 0) {
  412. that.setData({
  413. IsShowAnswer: [0, 0],
  414. NumberNew: 0,
  415. NumberReview: 0,
  416. NumberHistory: 0,
  417. CanUndo: 1,
  418. });
  419. that.setSoundFile(1);
  420. } else {
  421. //任务没有完成,下一张卡片
  422. that.setData({
  423. IsShowAnswer: [0, 0],
  424. TaskList: that.data.TaskList,
  425. NumberNew: that.data.NumberNew,
  426. NumberReview: that.data.NumberReview,
  427. NumberHistory: that.data.NumberHistory,
  428. FontSize: that.data.TaskList[0].FontSize,
  429. CanUndo: 1,
  430. });
  431. that.setSoundFile(0);
  432. }
  433. });
  434. },
  435. saveCard: function (obj, callback) {
  436. var url = "UpdateMiaoguoCardToday?";
  437. url += "ID=" + obj.ID;
  438. url += "&UserID=" + app.globalData.userInfo.UserID;
  439. url += "&IntervalTime=" + obj.IntervalTime;
  440. url += "&BtnNumber=" + obj.BtnNumber;
  441. url += "&LearningType=" + obj.LearningType;
  442. url += "&FontSize=" + this.data.TaskList[0].FontSize;
  443. var duration = common.diffDate("s", timeStart, new Date());
  444. url += "&Duration=" + duration;
  445. url += "&IsUndo=" + obj.IsUndo;
  446. if (obj.LastTime)
  447. url += "&LastTime=" + obj.LastTime;
  448. main.getData(url, function (data) {
  449. timeStart = new Date();
  450. callback();
  451. });
  452. },
  453. playSound: function (e) {
  454. var that=this;
  455. var str = e.currentTarget.dataset.content;
  456. var url;
  457. if (str.indexOf("英 [") >= 0 || str.indexOf("美 [") >= 0) {
  458. str = str.replace("英 [", "[");
  459. str = str.replace("美 [", "[");
  460. url = e.currentTarget.dataset.soundmark;
  461. }
  462. else {
  463. var url = app.globalData.audioUrlBaidu;
  464. url = url.replace("[token]", app.globalData.BaiduToken);
  465. url = url.replace("[word]", str);
  466. }
  467. this.audioCtx.setSrc(url);
  468. this.audioCtx.play();
  469. var fieldid = e.currentTarget.dataset.fieldid;
  470. var content = that.data.TaskList[0].ContentNew.Field[fieldid];
  471. var selectIndex=0;
  472. for (var i = 0; i < content.length;i++){
  473. if (content[i].Type == 'sound'){
  474. if (content[i].Content == e.currentTarget.dataset.content) {
  475. content[i].SoundImageName="gif";
  476. selectIndex=i;
  477. break;
  478. }
  479. }
  480. }
  481. that.setData({
  482. TaskList: that.data.TaskList,
  483. });
  484. setTimeout(function(){
  485. content[selectIndex].SoundImageName = "png";
  486. that.data.TaskList[0].ContentNew.Field[fieldid]=content;
  487. that.setData({
  488. TaskList: that.data.TaskList,
  489. });
  490. },2000);
  491. },
  492. getTaskTime: function () {
  493. var that=this;
  494. var url = "GetMiaoguoTaskTime?";
  495. url += "UserID=" + app.globalData.userInfo.UserID;
  496. main.getData(url, function (data) {
  497. if (data){
  498. data = common.getMinuteSecond(data);
  499. that.setData({
  500. TodayTime: data,
  501. });
  502. }
  503. });
  504. },
  505. showNumberContainner: function () {
  506. this.setData({
  507. IsShowNumberInfo: true,
  508. });
  509. },
  510. closeNumberContainner: function () {
  511. this.setData({
  512. IsShowNumberInfo: false,
  513. });
  514. },
  515. onShareAppMessage: function () {
  516. return {
  517. title: app.globalData.ShareTitle,
  518. path: app.globalData.SharePath + '?UserID=' + app.globalData.userInfo.UserID,
  519. imageUrl: app.globalData.ShareImage,
  520. }
  521. },
  522. });