From 75a9abca4f4cf0ebe579705abc369489cfe20e7c Mon Sep 17 00:00:00 2001
From: litian <C21AF165>
Date: 星期五, 28 六月 2024 11:16:37 +0800
Subject: [PATCH] 小程序,课程

---
 pages/digitalCourses/digitalCoursesDetails/index.js |  605 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 604 insertions(+), 1 deletions(-)

diff --git a/pages/digitalCourses/digitalCoursesDetails/index.js b/pages/digitalCourses/digitalCoursesDetails/index.js
index 423eb66..27e1095 100644
--- a/pages/digitalCourses/digitalCoursesDetails/index.js
+++ b/pages/digitalCourses/digitalCoursesDetails/index.js
@@ -1,18 +1,121 @@
 // pages/digitalCourses/digitalCoursesDetails/index.js
+const app = getApp()
+import moment from 'moment'
+import Toast from "tdesign-miniprogram/toast";
 Page({
 
   /**
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
+    loading: true,
+    digitalsData: {},
+    expire: false, //鍟嗗搧鎴栧瓙鍟嗗搧閿�鍞柟寮忔槸鍚﹁繃鏈�
+    isBuy: false,
+    tabValue: 0,
+    learnResourceIcon: {
+      name: "/static/images/digitalTextbooks/shengshu-t@2x.png",
+    },
+    learnResourceClickIcon: {
+      name: "/static/images/digitalTextbooks/zhengshu-t-click@3x.png",
+    },
+    briefIcon: {
+      name: "/static/images/digitalTextbooks/jibenxinxi-t@2x.png",
+    },
+    briefIconClick: {
+      name: "/static/images/digitalTextbooks/jibenxinxi-t-click@3x.png",
+    },
+    courseLearning: {
+      name: "/static/images/digitalCourses/jiaoxueziyuan@2x.png"
+    },
+    courseLearningClick: {
+      name: "/static/images/digitalCourses/jiaoxueziyuan.png"
+    },
+    learningNotes: {
+      name: "/static/images/digitalCourses/biji锛廼con@2x.png"
+    },
+    learningNotesClick: {
+      name: "/static/images/bookService/detail/biji-click-icon.png",
+    },
 
+    onlineQuestioning: {
+      name: "/static/images/digitalCourses/tiwen@2x.png"
+    },
+    onlineQuestioningClick: {
+      name: "/static/images/digitalCourses/tiwen-click@2x.png"
+    },
+
+    dialogBox: false,
+    lecturerList: [],
+    selectActive: 'learn',
+    learnList: [],
+    testList: [],
+    openTeachids: [],
+    onlineQuestionsList: [],
+    //鍒嗛〉
+    page: 1,
+    limit: 6,
+    questionTotalCount: 0,
+    bottomLoading: false,
+    isMoreData: false,
+    noteList: [],
+    notePage: 1,
+    noteLimit: 6,
+    noteTotalCount: 0,
   },
+  formatDate(dateString) {
+    if (!dateString) {
+      return "";
+    }
+    const match = dateString.match(
+      /^(\d{4})\/(\d{1,2})\/(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/
+    );
+    if (!match) {
+      throw new Error("Invalid date format");
+    }
 
+    const [, year, month, day, hours, minutes, seconds] = match;
+    const date = new Date(
+      parseInt(year, 10),
+      parseInt(month, 10) - 1,
+      parseInt(day, 10),
+      parseInt(hours, 10),
+      parseInt(minutes, 10),
+      parseInt(seconds, 10)
+    );
+
+    if (isNaN(date.getTime())) {
+      throw new Error("Invalid date");
+    }
+
+    // 鐢变簬灏忕▼搴忕幆澧冨彲鑳戒笉鏀寔 Intl.DateTimeFormat锛屾垜浠娇鐢ㄧ畝鍖栫殑鏍煎紡鍖栨柟娉�
+    const formatted = `${year}骞�${this.formatMonth(month)}`;
+    return formatted;
+  },
+  formatMonth(month) {
+    const months = [
+      "1鏈�",
+      "2鏈�",
+      "3鏈�",
+      "4鏈�",
+      "5鏈�",
+      "6鏈�",
+      "7鏈�",
+      "8鏈�",
+      "9鏈�",
+      "10鏈�",
+      "11鏈�",
+      "12鏈�",
+    ];
+    return months[parseInt(month, 10) - 1];
+  },
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
   onLoad(options) {
     console.log(options);
+    this.digitalCoursesDetailsGet(options.id)
+
   },
 
   /**
@@ -62,5 +165,505 @@
    */
   onShareAppMessage() {
 
-  }
+  },
+  digitalCoursesDetailsGet(digitalTextId) {
+    let query = {
+      path: '*',
+      queryType: '*',
+      productId: digitalTextId,
+      storeInfo: 'jsek_digitalCourses',
+      coverSize: {
+        height: 300
+      },
+      fields: {
+        seriesName: [],
+        author: [],
+        isbn: [],
+        publicationDate: [],
+        speaker: [],
+        bookClassification: [],
+        paperPrice: [],
+        JDLink: [],
+        tmallLink: [],
+        dangdangLink: [],
+        weidianLink: [],
+        content: [],
+        authorIntroduction: [],
+        isApplyBook: [],
+        isSell: [],
+        pdf: [],
+        protectedEpub: [],
+        probationPage: [], //pdf璇曡椤垫暟
+        freeEpubPage: [],
+        courseLeader: [],
+        affiliatedUnit: [],
+        publishingUnit: [],
+        classHours: [],
+        productLinkPath: [],
+
+        //epub璇曡鐧惧垎姣�
+      }
+    }
+    app.MG.store.getProductDetail(query).then(res => {
+      console.log(res);
+      if (res.datas.purchasedSaleMethodIdList.includes(res.datas.defaultSaleMethodId)) {
+        this.setData({
+          isBuy: true
+        })
+      } else {
+        this.setData({
+          isBuy: false
+        })
+      }
+      let times = new Date(res.datas.defaultSaleMethod.endDate).getTime()
+      let startTime = new Date(res.datas.defaultSaleMethod.beginDate).getTime()
+      if (times < new Date().getTime() || new Date().getTime() < startTime) {
+        this.setData({
+          expire: true
+        })
+      } else {
+        this.setData({
+          expire: res.false
+        })
+      }
+      res.datas.publicationDate = this.formatDate(res.datas.publicationDate)
+      res.datas.price = res.datas.price.toFixed(2)
+
+      wx.setNavigationBarTitle({
+        title: res.datas.name,
+      })
+      let lecturer = []
+      if (res.datas.datas.speaker && res.datas.datas.speaker.length > 0) {
+        res.datas.datas.speaker.forEach(item => {
+          if (res.datas.subItems && res.datas.subItems.QueryCms.length > 0) {
+            res.datas.subItems.QueryCms.forEach(item1 => {
+              if (JSON.parse(item.Data.Value).items[0] == item1.id) {
+                lecturer.push({
+                  name: item1.name,
+                  icon: item1.icon ? item1.icon : '',
+                  description: item1.description ? item1.description : '',
+                })
+              }
+            })
+
+          }
+        })
+      }
+
+      this.setData({
+        lecturerList: lecturer,
+        digitalsData: res.datas,
+        loading: false
+      })
+    })
+  },
+  onTabsChange(event) {
+    const value = event.detail.value
+    this.setData({
+      tabValue: value
+    })
+    console.log(this.data.tabValue);
+    if (this.data.tabValue == 2) {
+      this.getResource()
+    }
+    if (this.data.tabValue == 3) {
+      this.selectComponent("#note").getNoteList();
+    }
+    if (this.data.tabValue == 4) {
+      this.selectComponent("#question").getDataList();
+    }
+  },
+
+  selectChange(event) {
+    console.log(event)
+    const value = event.target.dataset.value
+    this.setData({
+      selectActive: value
+    })
+    this.getResource()
+  },
+
+  getResource() {
+    let query = {
+      storeInfo: app.config.digitalCourses,
+      path: '*',
+      queryType: '*',
+      productId: this.data.digitalsData.id,
+      cmsPath: this.data.digitalsData.rootCmsItemId + '',
+      cmsType: '*',
+      itemFields: {
+        SysType: 'CmsFolder',
+        selectType: [],
+        freeFile: [],
+        file: [],
+        protectedFile: [],
+        resourcesClassification: [],
+        isDownload: [],
+        jsek_resourceBrief: [],
+        jsek_link: [],
+        jsek_questionBank: [],
+        learnSelectType: []
+      },
+      pading: {
+        start: 99,
+        size: 0
+      }
+    }
+    app.MG.store.getProductDetail(query).then((res) => {
+      console.log(res.datas, 1111)
+      let test = []
+      let learn = []
+      if (res.datas.cmsDatas[0].datas.length > 0) {
+        res.datas.cmsDatas[0].datas.forEach((item) => {
+          if (item.type == 'questionBankFolder' || item.type == 'questionBankItem') {
+            test.push(item)
+          } else if (item.type != "resourceItem") {
+            learn.push(item)
+          }
+        })
+        if (this.data.selectActive === 'learn') {
+          let list = []
+          // 娴嬭瘯 6浣�// 姝e紡 5浣�//  娴嬭瘯璋冪敤浼�20锛屽唴閮�7  姝e紡璋冪敤浼�17 鍐呴儴浼�6
+          let addNum = query.cmsPath.length > 5 ? 7 : query.cmsPath.length > 6 ? 8 : 6
+          const num = query.cmsPath.length + addNum
+          if (learn.some((item) => item.sysType == 'CmsFolder')) {
+            this.getTreeList(learn, num, list, '\\', addNum)
+            list = this.ensureTreeConsistency(list)
+          } else {
+            list = learn
+          }
+          let result = [];
+          this.findChildIds(list, result)
+          if (list.length > 0) {
+            this.setData({
+              learnList: list,
+              openTeachids: result,
+            });
+          }
+        } else {
+          const data = test.filter(
+            (item) => item.type == 'questionBankFolder' && item.childrenFolderCount > 0
+          )
+          if (data.length > 0) {
+            let list = []
+            let addNum = query.cmsPath.length > 5 ? 7 : query.cmsPath.length > 6 ? 8 : 6
+            const num = query.cmsPath.length + addNum
+            this.getTreeList(data, num, list, '\\', addNum)
+            list = this.ensureTreeConsistency(list)
+            let result = [];
+            this.findChildIds(list[0].children, result)
+            this.setData({
+              testList: list[0].children,
+              openTeachids: result,
+            });
+          }
+        }
+      }
+    })
+  },
+  // 鎵佸钩鍖栨暟鎹浆鎹ree
+  getTreeList(rootList, pathLength, newArr, path, addNum) {
+    for (const item of rootList) {
+      // 姝ゅ鍘熸湰 item.productLinkPath.length == pathLength 浣� productLinkPath 闀垮害涓埆涔﹀瓨鍦�4銆�5浣嶄氦閿�
+      if ((pathLength - item.productLinkPath.length >= 0 && pathLength - item.productLinkPath.length <= 3) && item.productLinkPath.includes(path)) {
+        if (item.sysType == 'CmsItem') {
+          if (item.selectType == 'webpage') {
+            item.disabled = true
+          } else {
+            if (item.isDownload != 1) {
+              item.disabled = true
+            }
+          }
+          if (item.file && item.fileMap && item.fileMap[item.file]) {
+            if (item.fileMap[item.file].protectType == 'Private') item.disabled = true
+          }
+        }
+        // newArr.push(item)
+        // 鍦ㄦ彃鍏ヨ繃绋嬩腑瀵规暟鎹繘琛屾帓搴�
+        newArr = this.insertAndSortObjectsByProductLinkPath(newArr, item, addNum)
+      }
+    }
+    //缁欐暟缁勯噷闈㈠啀娣诲姞涓�涓猚hildren鐨勭┖鏁扮粍
+    for (const i of newArr) {
+      i.children = []
+      this.getTreeList(rootList, pathLength + addNum, i.children, i.productLinkPath, addNum)
+      if (i.children.length == 0) {
+        delete i.children
+      }
+    }
+    return newArr
+  },
+
+  // 鍘婚櫎鏍戠粨鏋勫浣欓」
+  ensureTreeConsistency(tree) {
+    for (let index = 0; index < tree.length; index++) {
+      const item = tree[index];
+      if (item.children && item.children.length) {
+        const isFloder = item.children.findIndex(citem => citem.sysType == 'CmsFolder')
+        const isItem = item.children.findIndex(citem => citem.sysType == 'CmsItem')
+        if (isFloder > -1 && isItem > -1) {
+          item.children = item.children.filter(ditem => ditem.sysType == 'CmsItem')
+        }
+        this.ensureTreeConsistency(item.children)
+      }
+    }
+    return tree
+  },
+
+  // 鎺掑簭鏁扮粍 鎸夌収productLinkPath
+  insertAndSortObjectsByProductLinkPath(array, newObj, addNum) {
+    // 鏌ユ壘鏂板璞″簲璇ユ彃鍏ョ殑浣嶇疆  
+    let insertIndex = array.findIndex(obj => Number(newObj.productLinkPath.substring(newObj.productLinkPath.length - addNum, newObj.productLinkPath.length)) < Number(obj.productLinkPath.substring(obj.productLinkPath.length - addNum, obj.productLinkPath.length)));
+
+    // 濡傛灉娌℃湁鎵惧埌鍚堥�傜殑浣嶇疆锛屽垯鏀惧湪鏁扮粍鏈熬  
+    if (insertIndex === -1) {
+      insertIndex = array.length;
+    }
+    // 鎻掑叆鏂板璞″埌鏁扮粍  
+    array.splice(insertIndex, 0, newObj);
+    // 娴嬭瘯6 姝e紡5
+    // 瀵规暟缁勮繘琛屾帓搴�  
+    array.sort((a, b) => {
+      if (Number(a.productLinkPath.substring(a.productLinkPath.length - addNum, a.productLinkPath.length)) < Number(b.productLinkPath.substring(b.productLinkPath.length - addNum, b.productLinkPath.length))) {
+        return -1;
+      }
+      if (Number(a.productLinkPath.substring(a.productLinkPath.length - addNum, a.productLinkPath.length)) > Number(b.productLinkPath.substring(b.productLinkPath.length - addNum, b.productLinkPath.length))) {
+        return 1;
+      }
+      // a must be equal to b  
+      return 0;
+    });
+
+    // 杩斿洖鏇存柊鍚庣殑鏁扮粍  
+    return array;
+  },
+
+  // 鑾峰彇灞曞紑椤�
+  findChildIds(data, result) {
+    let index = 0
+    for (let i = 0; i < data.length; i++) {
+      if (index < 3) {
+        const item = data[i]
+        if (item.childrenFolderCount > 0) {
+          result.push(item.id)
+          for (let j = 0; j < item.children.length; j++) {
+            if (index < 3) {
+              const childrenItme = item.children[j]
+              if (item.childrenCount > 0) {
+                result.push(childrenItme.id)
+                index += 1
+              }
+            } else {
+              break
+            }
+          }
+        } else if (item.childrenCount > 0) {
+          result.push(item.id)
+          index += 1
+        }
+      } else {
+        break
+      }
+    }
+  },
+  //瀛︿範绗旇
+  //鍦ㄧ嚎鎻愰棶
+  // 鍥句功娣诲姞璐墿杞�
+  async addBookShopcCar() {
+    if (!this.data.expire) {
+      const shoppingCartGetId = [];
+      let query = {
+        start: 0,
+        size: 9999,
+        filterList: [],
+        searchList: [],
+      };
+      const res = await app.MG.store.getShoppingCartProductList(query);
+      res.datas.forEach((item) => {
+        shoppingCartGetId.push(item.saleMethod.id);
+      });
+      const determine = shoppingCartGetId.some(
+        (item) => item == this.data.digitalsData.defaultSaleMethodId
+      );
+      if (!determine) {
+        let query = {
+          requests: [{
+            saleMethodId: this.data.digitalsData.defaultSaleMethodId,
+            storeEventId: null,
+            agentCode: "鐢靛瓙涔�",
+          }, ],
+        };
+        const addRes = app.MG.store.addShoppingCart(query);
+        this.showSuccessToast();
+      } else {
+        Toast({
+          context: this,
+          selector: "#t-toast",
+          message: "璇ヤ功宸插湪璐墿杞︼紝璇峰嬁閲嶅娣诲姞",
+          theme: "warning",
+          direction: "column",
+        });
+      }
+    } else {
+      wx.showToast({
+        title: "鍟嗗搧涓嶅湪鏈夋晥鏈�",
+        icon: "none",
+        duration: 1000,
+      });
+    }
+  },
+  showSuccessToast() {
+    Toast({
+      context: this,
+      selector: "#t-toast",
+      message: "娣诲姞鎴愬姛",
+      theme: "success",
+      direction: "column",
+    });
+  },
+
+  //璐拱鎸夐挳
+  async buyBtn() {
+    if (!this.data.expire) {
+      let bookOrdersId = "";
+      let query = {
+        remarks: "鐢靛瓙涔�",
+        requests: [{
+          saleMethodId: this.data.digitalsData.defaultSaleMethodId,
+          count: 1,
+        }, ],
+      };
+      // 鍙戣捣璁㈠崟鍒濆鍖栬姹傚苟绛夊緟缁撴灉
+      const res = await app.MG.store.initOrder(query);
+      // 鑾峰彇璁㈠崟鍙峰苟璧嬪�肩粰 orderNumber.value
+      console.log(res, 'res456');
+      bookOrdersId = res.orderNumber;
+      // 妫�鏌ヨ鍗曞彿鏄惁瀛樺湪
+      if (bookOrdersId) {
+        if (this.data.digitalsData.price == "0.00") {
+          app.MG.store
+            .confirmOrder({
+              orderNum: bookOrdersId,
+            })
+            .then((res) => {
+              if (res) {
+                wx.showToast({
+                  title: "棰嗗彇鎴愬姛",
+                  icon: "none",
+                  duration: 1000,
+                });
+                this.getBookInfo(this.data.bookDetail.id);
+              }
+            });
+        } else {
+          const url = "/pages/cart/paymentPage/index?orderNumber=" + bookOrdersId + '&onNorderSaleMethod=' + res.saleMethodLinks[0].orderSaleMethod.id;
+          wx.navigateTo({
+            url,
+          });
+        }
+      } else {
+        console.log(222);
+      }
+    } else {
+      wx.showToast({
+        title: "鍟嗗搧涓嶅湪鏈夋晥鏈�",
+        icon: "none",
+        duration: 1000,
+      });
+    }
+  },
+
+
+
+  closeDialog() {
+    const {
+      dialogKey
+    } = this.data;
+    this.setData({
+      [dialogKey]: false
+    });
+  },
+  //鐢宠璇佷功
+  onCertificate() {
+    var page = getCurrentPages().pop(); // 鑾峰彇褰撳墠椤甸潰瀹炰緥
+    page.setData({
+      // 鍔ㄦ�佽缃姝㈡粴鍔ㄧ殑鏍峰紡
+      disableScrollStyle: 'overflow: hidden;'
+    });
+    this.setData({
+      dialogBox: true,
+      scrollJudge: ''
+    })
+  },
+  closeDialog() {
+    this.setData({
+      dialogBox: false,
+      scrollJudge: true
+    })
+  },
+  confirmM() {
+    this.setData({
+      dialogBox: false,
+      scrollJudge: true
+    })
+  },
+  setCoolect() {
+    // 棣栭〉娴嬭瘯鐧诲綍鍔熻兘锛屽悗缁敞閲�
+    // 妫�鏌ョ櫥褰曠姸鎬�
+    const token = wx.getStorageSync(app.config.tokenKey)
+    if (!token) {
+      loginInfo(app, (data) => {
+        // 濡傛灉涓嶆槸绗竴娆$櫥褰曪紝浼氭墽琛屽洖璋�
+        if (data) {
+          if (this.data.digitalsData.isFavourite) {
+            app.MG.store
+              .delProductLink({
+                productIds: [this.data.digitalsData.id],
+                linkType: 'Favoriteclass'
+              })
+              .then(() => {
+                this.setData({
+                  "digitalsData.isFavourite": false
+                })
+              })
+          } else {
+            let params = {
+              productIds: [this.data.digitalsData.id],
+              linkType: 'Favoriteclass'
+            }
+            app.MG.store.addProductLink(params).then((res) => {
+              this.setData({
+                "digitalsData.isFavourite": true
+              })
+            })
+          }
+        } else {
+          // 鍑虹幇閿欒锛岃繑鍥瀎alse
+        }
+      })
+    } else {
+      if (this.data.digitalsData.isFavourite) {
+        app.MG.store
+          .delProductLink({
+            productIds: [this.data.digitalsData.id],
+            linkType: 'Favoriteclass'
+          })
+          .then(() => {
+            this.setData({
+              "digitalsData.isFavourite": false
+            })
+          })
+      } else {
+        let params = {
+          productIds: [this.data.digitalsData.id],
+          linkType: 'Favoriteclass'
+        }
+        app.MG.store.addProductLink(params).then((res) => {
+          this.setData({
+            "digitalsData.isFavourite": true
+          })
+        })
+      }
+    }
+  },
 })
\ No newline at end of file

--
Gitblit v1.9.1