detail.js 16 KB

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