add.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672
  1. import common from '../../utils/util';
  2. import main from '../../utils/main';
  3. const app = getApp();
  4. var field = [[], [], [], []];
  5. var arrTag = [];
  6. var tempCursor = 0,
  7. btnName = "";
  8. var arrSoundMark = [];
  9. var isUnload = true;
  10. var isEdit = true;
  11. Page({
  12. data: {
  13. PracticeTimeStr:"智能安排",
  14. HiddenFieldEdit:true,
  15. FieldContent: "",
  16. SoundSign: "[读]",
  17. LineSign: "[线]",
  18. IsTodayStudy:false,
  19. BtnArray: ["+", "-", "×", "÷", "=", "<", ">"],
  20. },
  21. onLoad: function (options) {
  22. wx.hideShareMenu();
  23. var that = this;
  24. var type2=0;
  25. if (options.type2)
  26. type2=options.type2;
  27. var fieldNumber=0;
  28. if (options.fieldid)
  29. fieldNumber=options.fieldid;
  30. that.setData({
  31. Containnerheight: main.getWindowHeight(),
  32. UpdateType: options.type,
  33. ShowType:type2,
  34. MiaoguoCardID: options.id,
  35. FieldNumber:fieldNumber,
  36. });
  37. var list = app.globalData.CardList;
  38. for (var i = 0; i < list.length; i++) {
  39. if (that.data.MiaoguoCardID == list[i].MiaoguoCardID) {
  40. wx.setStorageSync("TempCardInfo", list[i]);
  41. break;
  42. }
  43. }
  44. app.globalData.TempFieldNumber=0;
  45. app.globalData.TempMiaoguoCardID=that.data.MiaoguoCardID;
  46. },
  47. onShow: function () {
  48. var that = this;
  49. if (that.data.UpdateType == "add") {
  50. that.initAddCard();
  51. }
  52. else {
  53. var card = {},content="";
  54. var list = app.globalData.CardList;
  55. for (var i = 0; i < list.length; i++) {
  56. if (that.data.MiaoguoCardID == list[i].MiaoguoCardID) {
  57. card = main.changeStringToView(list[i].Content);
  58. card.MiaoguoCardID = list[i].MiaoguoCardID;
  59. card.LimitTime = list[i].LimitTime;
  60. if (that.data.FieldNumber && that.data.FieldNumber>0)
  61. content = main.encryptUrl(list[i].Content[that.data.FieldNumber].Content);
  62. break;
  63. }
  64. }
  65. that.setData({
  66. MiaoguoCardID: card.MiaoguoCardID,
  67. Field: card.Field,
  68. Tags: card.Tags,
  69. FieldContent:content,
  70. });
  71. if (that.data.UpdateType != "add2") {
  72. wx.setNavigationBarTitle({
  73. title: '编辑题卡'
  74. });
  75. }
  76. if (that.data.UpdateType == "edit3") {
  77. that.gotoAddItem({ currentTarget: { dataset: { fieldid: that.data.FieldNumber}}});
  78. }
  79. }
  80. },
  81. onUnload: function () {
  82. field = [[], [], [], []];
  83. var card = wx.getStorageSync("TempCardInfo");
  84. if (card) {
  85. var list = app.globalData.CardList;
  86. for (var i = 0; i < list.length; i++) {
  87. if (this.data.MiaoguoCardID == list[i].MiaoguoCardID) {
  88. list[i] = card;
  89. break;
  90. }
  91. }
  92. app.globalData.CardList=list;
  93. wx.removeStorageSync("TempCardInfo");
  94. }
  95. },
  96. onClose: function () {
  97. wx.navigateBack({
  98. delta: 1,
  99. });
  100. },
  101. gotoAddItem: function (e) {
  102. var that=this;
  103. var fieldid = e.currentTarget.dataset.fieldid;
  104. var content;
  105. var list = app.globalData.CardList;
  106. for (var i = 0; i < list.length; i++) {
  107. if (that.data.MiaoguoCardID == list[i].MiaoguoCardID) {
  108. content = main.encryptUrl(list[i].Content[fieldid].Content);
  109. break;
  110. }
  111. }
  112. that.setData({
  113. HiddenFieldEdit: false,
  114. Focus: true,
  115. FieldNumber: fieldid,
  116. FieldContent:content,
  117. });
  118. wx.setNavigationBarTitle({
  119. title: '编辑 段落' + fieldid,
  120. });
  121. },
  122. onSearch: function (e) {
  123. app.globalData.TempFieldNumber = 0;
  124. wx.navigateTo({
  125. url: './searchWeb',
  126. })
  127. },
  128. onPreview: function (e) {
  129. var that = this;
  130. if (that.data.Field[1] == "") {
  131. wx.showToast({
  132. title: '第一段必填',
  133. image: "../images/universalpic_wrong_white_120x120.png",
  134. });
  135. }
  136. else {
  137. wx.navigateTo({
  138. url: './preview?type=preview&id=' + this.data.MiaoguoCardID,
  139. });
  140. }
  141. },
  142. switch1Change(e) {
  143. var str="智能安排";
  144. if (e.detail.value){
  145. str="今日必练";
  146. }
  147. this.setData({
  148. IsTodayStudy: e.detail.value,
  149. });
  150. },
  151. saveCard: function () {
  152. var that = this;
  153. if (that.data.Field[1] == "") {
  154. wx.showToast({
  155. title: '第一段必填',
  156. image: "../images/universalpic_wrong_white_120x120.png",
  157. });
  158. }
  159. else {
  160. that.uploadImageAll(that.data.Field, function (field) {
  161. that.data.Field=field;
  162. var userid = app.globalData.userInfo.UserID;
  163. var isTodayStudy = 0;
  164. if (that.data.IsTodayStudy && that.data.UpdateType == "add2")
  165. isTodayStudy = 1;
  166. var tags = [];
  167. for (var i = 0; i < that.data.Tags.length; i++) {
  168. if (that.data.Tags[i])
  169. tags.push(that.data.Tags[i]);
  170. }
  171. var param1 = {
  172. Tags: tags,
  173. Field1: "",
  174. Field2: "",
  175. Field3: "",
  176. IsTodayStudy: isTodayStudy,
  177. ID: that.data.MiaoguoCardID,
  178. };
  179. for (var i = 1; i <= 3; i++) {
  180. for (var key in that.data.Field[i]) {
  181. var item = that.data.Field[i][key];
  182. var str = "";
  183. if (item.Type == "image") {
  184. str = "[图]" + item.Content + "[/图]";
  185. }
  186. else if (item.Type == "line") {
  187. for (var j = 0; j < item.Content.length; j++) {
  188. if (item.Content[j].key == "normal")
  189. str += item.Content[j].value;
  190. if (item.Content[j].key == "line") {
  191. str += "[线]" + item.Content[j].value + "[/线]";
  192. }
  193. }
  194. }
  195. else if (item.Type == "sound") {
  196. if (item.SoundMark)
  197. str = "[读 src='" + item.SoundMark + "']" + item.Content + "[/读]";
  198. else
  199. str = "[读]" + item.Content + "[/读]";
  200. }
  201. else if (item.Type == "normal") {
  202. str = item.Content;
  203. }
  204. else if (item.Type == "return") {
  205. str = "\n";
  206. }
  207. param1["Field" + i] += str;
  208. }
  209. param1["Field" + i] = main.changeViewToString(param1["Field" + i]);
  210. }
  211. that.saveLocalCardList(param1);
  212. // var param2 = {
  213. // param: common.Encrypt(JSON.stringify(param1))
  214. // }
  215. main.postData('AddMiaoguoCard?Type=' + that.data.UpdateType + '&UserID=' + userid, param1, function (data) {
  216. if (that.data.UpdateType == "edit" || that.data.UpdateType == "edit2" || that.data.UpdateType == "edit3") {
  217. that.onClose();
  218. }
  219. else {
  220. wx.showToast({
  221. title: '已保存!',
  222. image: "../images/universalpic_saved_white_120x120.png",
  223. });
  224. if (that.data.UpdateType == "add2") {
  225. that.initAddCard();
  226. }
  227. var taskToday = app.globalData.TaskToday;
  228. taskToday.CardNumber++;
  229. app.globalData.TaskToday=taskToday;
  230. }
  231. wx.removeStorageSync("TempCardInfo");
  232. });
  233. });
  234. }
  235. },
  236. uploadImageAll: function (arr, callback) {
  237. var that=this;
  238. var arrSource=[], arrResult=[];
  239. for(var i=0;i<arr.length;i++){
  240. for(var j=0;j<arr[i].length;j++){
  241. if (arr[i][j].Type == "image" && arr[i][j].Content){
  242. arrSource.push(arr[i][j].Content);
  243. if (arr[i][j].ContentServer.indexOf(app.globalData.uploadImageUrl)>=0
  244. || arr[i][j].ContentServer.indexOf("baidu.com")>=0 ){
  245. arrResult.push(arr[i][j].ContentServer);
  246. }
  247. else{
  248. that.uploadImage(arr[i][j].Content, function (data) {
  249. //console.log("Target:"+data);
  250. data = app.globalData.uploadImageUrl + data;
  251. arrResult.push(data);
  252. });
  253. }
  254. }
  255. }
  256. }
  257. var interval=setInterval(function(){
  258. //console.log(arrResult.length);
  259. if (arrResult.length >= arrSource.length){
  260. clearInterval(interval);
  261. var ari=0;
  262. for (var i = 0; i < arr.length; i++) {
  263. for (var j = 0; j < arr[i].length; j++) {
  264. if (arr[i][j].Type == "image" && arr[i][j].Content) {
  265. var tempUrl = arr[i][j].Content;
  266. var serverUrl = arrResult[ari++];
  267. main.saveTempImage(serverUrl, tempUrl);
  268. arr[i][j].Content = serverUrl;
  269. arr[i][j].ContentServer = serverUrl;
  270. }
  271. }
  272. }
  273. //console.log(JSON.stringify(arr));
  274. callback(arr);
  275. }
  276. },500);
  277. },
  278. uploadImage:function(file,callback){
  279. var url = common.Encrypt("MiaoguoUploadFile");
  280. wx.uploadFile({
  281. url: app.globalData.serverUrl + url,
  282. filePath: file,
  283. name: 'file',
  284. success(res) {
  285. wx.hideLoading();
  286. callback(res.data);
  287. },
  288. fail: function (err) {
  289. wx.hideLoading();
  290. wx.showModal({
  291. title: '上传图片失败',
  292. showCancel: false,
  293. content: JSON.stringify(err),
  294. });
  295. }
  296. });
  297. },
  298. saveLocalCardList:function(param1){
  299. var that=this;
  300. var list = app.globalData.CardList;
  301. for (var i = 0; i < list.length; i++) {
  302. if (that.data.MiaoguoCardID == list[i].MiaoguoCardID) {
  303. for (var j = 0; j < 4; j++) {
  304. if (j == 0){
  305. if (param1.tags && param1.tags.length > 0)
  306. list[i].Content[j].Content = param1.tags.join(",");
  307. }
  308. else
  309. list[i].Content[j].Content = param1["Field" + j];
  310. }
  311. app.globalData.CardList=list;
  312. break;
  313. }
  314. }
  315. },
  316. initAddCard: function () {
  317. var card = {};
  318. card.MiaoguoCardID = 0;
  319. card.Content = [];
  320. for (var i = 0; i < 4; i++) {
  321. var obj = {};
  322. obj.ContentType = i;
  323. obj.Content = [];
  324. card.Content.push(obj);
  325. }
  326. app.globalData.CardList=[card];
  327. this.setData({
  328. MiaoguoCardID: 0,
  329. Field: [[], [], [], []],
  330. Tags: [],
  331. UpdateType: "add2",
  332. });
  333. },
  334. onBindError: function (e) {
  335. for (var i = 1; i < this.data.Field.length; i++) {
  336. for (var j = 0; j < this.data.Field[i].length; j++) {
  337. if (this.data.Field[i][j].Type == "image") {
  338. this.data.Field[i][j].Url = this.data.Field[i][j].Content;
  339. }
  340. }
  341. }
  342. this.setData({
  343. Field: this.data.Field,
  344. });
  345. },
  346. deleteItem: function (e) {
  347. var that = this;
  348. var index = e.currentTarget.dataset.id;
  349. wx.showModal({
  350. title: '提醒',
  351. content: '记号“'+that.data.Tags[index]+'”要删除吗?',
  352. success(res) {
  353. if (res.confirm) {
  354. that.data.Tags.splice(index, 1);
  355. that.setData({
  356. Tags: that.data.Tags,
  357. });
  358. var list = app.globalData.CardList;
  359. for (var i = 0; i < list.length; i++) {
  360. if (that.data.MiaoguoCardID == list[i].MiaoguoCardID) {
  361. list[i].Content[0].Content = that.data.Tags;
  362. break;
  363. }
  364. }
  365. app.globalData.CardList = list;
  366. }
  367. }
  368. });
  369. },
  370. onGotoList:function(){
  371. var that = this;
  372. if (that.data.Field[1] != "" && that.data.Field[2] != "" && that.data.Field[2] != "") {
  373. wx.showModal({
  374. title: '尚未保存',
  375. content: '即将前往“全部题卡”,但当前题卡尚未保存,按继续将放弃保存。',
  376. confirmText:'继续',
  377. success(res) {
  378. if (res.confirm) {
  379. goto();
  380. }
  381. }
  382. });
  383. }
  384. else{
  385. goto();
  386. }
  387. function goto(){
  388. wx.showLoading({
  389. title: '请稍候',
  390. });
  391. var url = 'GetMiaoguoCardList?UserID=' + app.globalData.userInfo.UserID;
  392. main.getData(url, function (data) {
  393. wx.hideLoading();
  394. if (data) {
  395. app.globalData.CardList = data.List;
  396. wx.redirectTo({
  397. url: './searchCardList?type=0&Count=' + data.Count,
  398. })
  399. }
  400. });
  401. }
  402. },
  403. //段落编辑**************************
  404. //字段输入
  405. bindinputField: function (e) {
  406. //console.log("bindinputField:" + e.detail.value + " isEdit:" + isEdit);
  407. var that = this;
  408. if (app.globalData.IsAndroid && !isEdit) {
  409. return;
  410. }
  411. this.setData({
  412. FieldContent: e.detail.value,
  413. });
  414. //this.updateField();
  415. },
  416. //加符号
  417. addSymbol: function (e) {
  418. //console.log("addSymbol");
  419. isEdit = true;
  420. var that = this;
  421. btnName = e.currentTarget.dataset.id;
  422. if (btnName == "[读]") {
  423. this.setData({
  424. SoundSign: "[/读]",
  425. });
  426. } else if (btnName == "[/读]") {
  427. this.setData({
  428. SoundSign: "[读]",
  429. });
  430. } else if (btnName == "[线]") {
  431. this.setData({
  432. LineSign: "[/线]",
  433. });
  434. } else if (btnName == "[/线]") {
  435. this.setData({
  436. LineSign: "[线]",
  437. });
  438. }
  439. if (!this.data.Focus) {
  440. this.data.FieldContent = this.data.FieldContent + btnName;
  441. this.setData({
  442. FieldContent: this.data.FieldContent,
  443. });
  444. }
  445. //console.log("addSymbol:" + this.data.FieldContent);
  446. setTimeout(function () {
  447. that.setData({
  448. Focus: true,
  449. });
  450. }, 300);
  451. },
  452. //焦点聚焦
  453. onBindFocus: function () {
  454. this.setData({
  455. Focus: true,
  456. });
  457. },
  458. //失焦
  459. onBindblur: function (e) {
  460. var that = this;
  461. //console.log("onBindblur:" + isEdit + " Filed:" + this.data.FieldContent);
  462. if (app.globalData.IsAndroid && !isEdit) {
  463. setTimeout(function () {
  464. isEdit = true;
  465. console.log("onBindblur2:" + isEdit);
  466. }, 500);
  467. return;
  468. }
  469. isEdit = false;
  470. if (app.globalData.IsAndroid && !isEdit) {
  471. setTimeout(function () {
  472. isEdit = true;
  473. console.log("onBindblur2:" + isEdit);
  474. }, 500);
  475. }
  476. //console.log("onBindblur:"+isEdit);
  477. this.updateField();
  478. tempCursor = e.detail.cursor;
  479. //console.log("tempCursor:" + tempCursor);
  480. if (tempCursor == undefined)
  481. tempCursor = this.data["FieldContent"].length;
  482. var str1 = "",
  483. str2 = "";
  484. if (this.data.FieldContent.length > 0) {
  485. str1 = this.data.FieldContent.substr(0, tempCursor);
  486. str2 = this.data.FieldContent.substring(tempCursor, this.data.FieldContent.length);
  487. }
  488. //console.log("str1:" + str1);
  489. //console.log("str2:" + str2);
  490. var cur = 1;
  491. if (btnName == "[读]" || btnName == "[线]") {
  492. cur = 3;
  493. } else if (btnName == "[/读]" || btnName == "[/线]") {
  494. cur = 4;
  495. } else if (btnName == "(   )") {
  496. cur = 5;
  497. } else if (btnName == "_____") {
  498. cur = 5;
  499. }
  500. this.data.FieldContent = str1 + btnName + str2;
  501. this.setData({
  502. FieldContent: this.data.FieldContent,
  503. Focus: false,
  504. Cursor: tempCursor + cur,
  505. });
  506. btnName = "";
  507. },
  508. onSearchField: function (e) {
  509. app.globalData.TempFieldNumber = this.data.FieldNumber;
  510. wx.navigateTo({
  511. url: './searchWeb',
  512. });
  513. this.updateField();
  514. setTimeout(function () {
  515. isEdit = true;
  516. //console.log("onSearchEnd");
  517. }, 1000);
  518. },
  519. clear: function () {
  520. var that = this;
  521. //console.log("clear");
  522. this.setData({
  523. FieldContent: "",
  524. Focus: true,
  525. Cursor: 0,
  526. });
  527. btnName = "";
  528. isEdit = false;
  529. this.updateField();
  530. },
  531. closeAddItem: function (e) {
  532. var that=this;
  533. var isSave = e.currentTarget.dataset.idsave;
  534. if (isSave == "true") {
  535. isUnload = false;
  536. wx.removeStorageSync("TempCardInfoAddItem");
  537. this.updateField();
  538. }
  539. this.setData({
  540. HiddenFieldEdit:true,
  541. });
  542. var title = "编辑题卡";
  543. if (that.data.UpdateType == "add2") {
  544. title = "添加题卡";
  545. }
  546. wx.setNavigationBarTitle({
  547. title: title,
  548. });
  549. },
  550. updateField: function (history) {
  551. var str = this.data.FieldContent;
  552. var list = app.globalData.CardList;
  553. var card={};
  554. for (var i = 0; i < list.length; i++) {
  555. if (this.data.MiaoguoCardID == list[i].MiaoguoCardID) {
  556. if (history != undefined)
  557. list[i].Content[this.data.FieldNumber].Content = history;
  558. else
  559. list[i].Content[this.data.FieldNumber].Content = str;
  560. card = main.changeStringToView(list[i].Content);
  561. break;
  562. }
  563. }
  564. app.globalData.CardList = list;
  565. this.setData({
  566. Field: card.Field,
  567. Tags: card.Tags,
  568. });
  569. },
  570. uploadImageField: function () {
  571. //console.log("uploadImageStart");
  572. var that = this;
  573. wx.chooseImage({
  574. count: 1,
  575. sizeType: ['compressed'],
  576. sourceType: ['album', 'camera'],
  577. success(res) {
  578. // tempFilePath可以作为img标签的src属性显示图片
  579. const tempFilePaths = res.tempFilePaths;
  580. //console.log(tempFilePaths[0]);
  581. //that.data.FieldContent = that.data.FieldContent + "[图 url='" + tempFilePaths[0] + "']" + tempFilePaths[0] + "[/图]";
  582. if (tempCursor == undefined)
  583. tempCursor = that.data.FieldContent.length;
  584. var str1 = "",
  585. str2 = "";
  586. if (that.data.FieldContent.length > 0) {
  587. str1 = that.data.FieldContent.substr(0, tempCursor);
  588. str2 = that.data.FieldContent.substring(tempCursor, that.data.FieldContent.length);
  589. }
  590. var str0 = "[图]" + tempFilePaths[0] + "[/图]";
  591. that.data.FieldContent = str1 + str0 + str2;
  592. //console.log("uploadImageEnd:" + that.data.FieldContent);
  593. that.setData({
  594. FieldContent: that.data.FieldContent,
  595. Focus: false,
  596. });
  597. that.updateField();
  598. },
  599. fail: function () {
  600. }
  601. });
  602. },
  603. onShareAppMessage: function () {
  604. return {
  605. title: app.globalData.ShareTitle,
  606. path: app.globalData.SharePath + '?UserID=' + app.globalData.userInfo.UserID,
  607. imageUrl: app.globalData.ShareImage,
  608. }
  609. },
  610. })