闫增涛
2025-03-31 04c7b0163caeae4ab1c5da62e301fa993101cfad
pages/bibliographyList/index.js
@@ -1,458 +1,520 @@
// pages/bibliographyList/index.js
import Toast from 'tdesign-miniprogram/toast/index';
const app = getApp()
const config =
  Page({
import {
  loginInfo
} from '../../assets/js/login';
Page({
    /**
     * 页面的初始数据
     */
    data: {
      input: '',
      dialogKey: '',
      showWithInput: false,
      showTextAndTitleWithInput: false,
      downloadLoadin: false,
  /**
   * 页面的初始数据
   */
  data: {
    personalDataEmail: '',
    hiddenmodalput: false,
    name: "",
    phoneNum: '',
    input: '',
    dialogKey: '',
    showWithInput: false,
    showTextAndTitleWithInput: false,
    downloadLoadin: false,
    isMore: null,
    higherList: [],
    vocationalList: [],
    teacherList: [],
    higherTotal: 0,
    vocationalTotal: 0,
    teacherTotal: 0,
    value: '',
    BarHeight: '',
    navBarHeight: '',
    start: 1,
    tabValue: '',
    keyword: '',
    Md5: '',
    emailError: false,
    loading: true, //开启骨架屏加载
    hidden: true, //是否展示内容
    height: '',
    dialogBox: false,
    inputStyle: 'border: 2rpx solid rgba(220,220,220,1);border-radius: 12rpx; padding: 0 0 0 16rpx;height:70rpx',
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.higherGet()
    this.vocationalGet()
    this.teacherGet()
    const systInfo = wx.getSystemInfoSync();
    const menu = wx.getMenuButtonBoundingClientRect(); // 胶囊信息
    const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 导航栏高度
    this.setData({
      navBarHeight: navBarHeight,
      barHeight: systInfo.statusBarHeight,
    })
    let event = {
      detail: {
        value: "0"
      }
    }
    this.onTabsChange(event)
    var that = this;
    // 动态获取屏幕高度
    wx.getSystemInfo({
      success: (result) => {
        that.setData({
          height: result.windowHeight
        });
      },
    })
    const token = wx.getStorageSync(app.config.tokenKey)
    if (token) {
      this.getUserInfo()
    }
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // console.log(this.data.value);
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},
  onShareTimeline() {},
  // 获取登录用户身份
  getUserInfo() {
    app.MG.identity.getCurrentAppUser().then(res => {
      // 用户信息优先级:教师认证 > 微信 > 学生(注册时默认)
      if (res) {
        //获取用户类型
        let teacherRole = res.roleLinks.find((item) => item.role.refCode == 'teacher')
        let teacherInfos = res.infoList.find((item) => item.type == 'teacherInfo')
        let eMailData = res.secretList.find(i => i.type == 'EMail')
        if (eMailData) {
          this.setData({
            input: eMailData.credential
          })
        } else if (teacherRole && teacherInfos) {
          this.setData({
            input: JSON.parse(teacherInfos.data).email
          })
        } else {
          this.setData({
            input: ''
          })
        }
      }
    });
  },
  onTabsChange(event) {
    const value = event.detail.value
    this.setData({
      isMore: null,
      higherList: [],
      vocationalList: [],
      teacherList: [],
      higherTotal: 0,
      vocationalTotal: 0,
      teacherTotal: 0,
      value: '',
      BarHeight: '',
      navBarHeight: '',
      start: 1,
      tabValue: '',
      keyword: '',
      Md5: '',
      emailError: false,
    },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
      tabValue: value,
    })
    if (value == '0') {
      this.higherGet()
    } else if (value == '1') {
      this.vocationalGet()
    } else if (value == '2') {
      this.teacherGet()
      const systInfo = wx.getSystemInfoSync();
      const menu = wx.getMenuButtonBoundingClientRect(); // 胶囊信息
      const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 导航栏高度
      this.setData({
        navBarHeight: navBarHeight,
        barHeight: systInfo.statusBarHeight,
    }
  },
  //高等教育
  higherGet(keyword) {
    let searchObj = {
      'Name*': keyword,
      '||author*': keyword,
      '||isbn*': keyword
    }
    app.MG.resource.getItem({
      path: 'jsek_biblioClassification\\jsek_bCHigherEducation',
      queryType: '*',
      paging: {
        start: '0',
        size: this.data.start * 12
      },
      coverSize: {
        width: 260
      },
      fields: {
        jsek_link: [],
        subtitle: [],
        content: [],
        fileType: [],
        jsek_resource: [],
        freeFile: [],
        ...searchObj,
      },
      SysType: 'CmsItem'
    }).then(res => {
      res.datas.forEach(item => {
        item.determine = true
      })
      let event = {
        detail: {
          value: "0"
        }
      }
      this.onTabsChange(event)
    },
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {
    },
    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
      console.log(this.data.value);
    },
    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {
    },
    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {
    },
    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {
    },
    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {
    },
    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {
    },
    onTabsChange(event) {
      const value = event.detail.value
      if (value === '0') {
        console.log(value);
      this.setData({
        higherList: res.datas,
        higherTotal: res.total
      })
      this.setData({
        loading: false, //开启骨架屏加载
        hidden: false, //是否展示内容
      })
      if (res.datas.length < 7 && res.datas.length > 0) {
        this.setData({
          tabValue: value,
          isMore: false
        })
      } else if (value === '1') {
        console.log(value);
        this.setData({
          tabValue: value,
          isMore: false
        })
      } else if (value === '2') {
        console.log(value);
        this.setData({
          tabValue: value,
          isMore: false
        })
      }
    },
    })
    wx.stopPullDownRefresh()
  },
    //高等教育
    higherGet(keyword) {
      console.log(keyword, 'keyword');
      let searchObj = {
        'Name*': keyword,
        '||author*': keyword,
        '||isbn*': keyword
      }
      app.MG.resource.getItem({
        path: 'jsek_biblioClassification\\jsek_bCHigherEducation',
        queryType: '*',
        paging: {
          start: '0',
          size: this.data.start * 9
        },
        coverSize: {
          width: 260
        },
        fields: {
          jsek_link: [],
          content: [],
          subtitle: [],
          fileType: [],
          jsek_resource: [],
          freeFile: [],
          ...searchObj,
        },
        SysType: 'CmsItem'
      }).then(res => {
        res.datas.forEach(item => {
          item.determine = true
        })
        console.log(res, 789111);
        this.setData({
          higherList: res.datas,
          higherTotal: res.total
        })
        console.log(this.data.higherList, '5555');
  //教师教育
  vocationalGet(keyword) {
    let searchObj = {
      'Name*': keyword,
      '||author*': keyword,
      '||isbn*': keyword
    }
    app.MG.resource.getItem({
      path: 'jsek_biblioClassification\\jsek_bCVocationalEducation',
      queryType: '*',
      paging: {
        start: '0',
        size: this.data.start * 12
      },
      coverSize: {
        width: 260
      },
      fields: {
        jsek_link: [],
        content: [],
        subtitle: [],
        fileType: [],
        jsek_resource: [],
        freeFile: [],
        ...searchObj
      },
      SysType: 'CmsItem'
    }).then(res => {
      console.log(res);
      res.datas.forEach(item => {
        item.determine = true
      })
      wx.stopPullDownRefresh()
    },
    //教师教育
    vocationalGet(keyword) {
      let searchObj = {
        'Name*': keyword,
        '||author*': keyword,
        '||isbn*': keyword
      }
      app.MG.resource.getItem({
        path: 'jsek_biblioClassification\\jsek_bCVocationalEducation',
        queryType: '*',
        paging: {
          start: '0',
          size: this.data.start * 9
        },
        coverSize: {
          width: 260
        },
        fields: {
          jsek_link: [],
          content: [],
          subtitle: [],
          fileType: [],
          jsek_resource: [],
          freeFile: [],
          ...searchObj
        },
        SysType: 'CmsItem'
      }).then(res => {
        res.datas.forEach(item => {
          item.determine = true
        })
        this.setData({
          vocationalList: res.datas,
          vocationalTotal: res.total
        })
      })
      wx.stopPullDownRefresh()
    },
    // 职业教育
    teacherGet(keyword) {
      let searchObj = {
        'Name*': keyword,
        '||author*': keyword,
        '||isbn*': keyword
      }
      app.MG.resource.getItem({
        path: 'jsek_biblioClassification\\jsek_bCTeacherEducation',
        queryType: '*',
        paging: {
          start: '0',
          size: this.data.start * 9
        },
        coverSize: {
          width: 260
        },
        fields: {
          jsek_link: [],
          content: [],
          subtitle: [],
          fileType: [],
          jsek_resource: [],
          freeFile: [],
          ...searchObj
        },
        SysType: 'CmsItem'
      }).then(res => {
        res.datas.forEach(item => {
          item.determine = true
        })
        this.setData({
          teacherList: res.datas,
          teacherTotal: res.total
        })
      })
      wx.stopPullDownRefresh()
    },
    downloadData(event) {
      this.setData({
        downloadLoadin: true
        vocationalList: res.datas,
        vocationalTotal: res.total
      })
      console.log(111);
      const item = event.currentTarget.dataset.item;
      // console.log(item.datas.freeFile.Value);
      const URL = app.config.requestCtx + '/file/api/ApiDownload?md5=' + item.datas.freeFile.Value
      item.determine = false
      console.log(URL, 'URL');
      setTimeout(() => {
        if (URL) {
          item.determine = true
        }
      }, 600)
      wx.downloadFile({
        url: URL,
        success: function (res) {
          const filePath = res.tempFilePath;
          wx.openDocument({
            filePath: filePath,
            success: function (res) {
              console.log('打开文档成功');
            },
            fail: function (res) {
              console.log('打开文档失败', res);
            }
          });
        },
        fail: function (res) {
          console.log('下载文件失败', res);
        }
      if (res.datas.length < 7 && this.datas.length > 0) {
        this.setData({
          isMore: false
        })
      }
    })
    wx.stopPullDownRefresh()
  },
  // 职业教育
  teacherGet(keyword) {
    let searchObj = {
      'Name*': keyword,
      '||author*': keyword,
      '||isbn*': keyword
    }
    app.MG.resource.getItem({
      path: 'jsek_biblioClassification\\jsek_bCTeacherEducation',
      queryType: '*',
      paging: {
        start: '0',
        size: this.data.start * 12
      },
      coverSize: {
        width: 260
      },
      fields: {
        jsek_link: [],
        content: [],
        subtitle: [],
        fileType: [],
        jsek_resource: [],
        freeFile: [],
        bookshelf_freeEpub: [], //epub试读百分比
        bookshelf_probationPage: [], //pdf试读页数
        ...searchObj
      },
      SysType: 'CmsItem'
    }).then(res => {
      res.datas.forEach(item => {
        item.determine = true
      })
      this.setData({
        teacherList: res.datas,
        teacherTotal: res.total
      })
      if (res.datas.length < 7 && this.datas.length > 0) {
        this.setData({
          isMore: false
        })
      }
    })
    wx.stopPullDownRefresh()
  },
  // downloadData(event) {
  //   this.setData({
  //     downloadLoadin: true
  //   })
  //   console.log(111);
  //   const item = event.currentTarget.dataset.item;
  //   // console.log(item.datas.freeFile.Value);
  //   const URL = app.config.requestCtx + '/file/api/ApiDownload?md5=' + item.datas.freeFile.Value
  //   item.determine = false
  //   console.log(URL, 'URL');
  //   setTimeout(() => {
  //     if (URL) {
  //       item.determine = true
  //     }
  //   }, 600)
  //   wx.downloadFile({
  //     url: URL,
  //     success: function (res) {
  //       const filePath = res.tempFilePath;
  //       wx.openDocument({
  //         filePath: filePath,
  //         success: function (res) {
  //           console.log('打开文档成功');
  //         },
  //         fail: function (res) {
  //           console.log('打开文档失败', res);
  //         }
  //       });
  //     },
  //     fail: function (res) {
  //       console.log('下载文件失败', res);
  //     }
  //   });
  //   setTimeout(() => {
  //     this.setData({
  //       downloadLoadin: false
  //     });
  //   }, 2000);
  // },
  downloadData(event) {
    const item = event.currentTarget.dataset.item
    if (item.fileType == "pdf") {
      wx.navigateTo({
        url: "/packageBookService/pages/components/webView/index?md5=" +
          item.freeFile +
          "&fileName=" +
          item.name +
          "&fileType=" +
          item.fileType + "&bookBuy=true"
          // "&freePage=" +
          // this.data.fileInfo.freePage +
          +
          "&bookId=" +
          item.id,
      });
      setTimeout(() => {
        this.setData({
          downloadLoadin: false
        });
      }, 2000);
    },
    onSearchSubmit: function (e) {
      const keyword = e.detail.value;
      // 处理搜索逻辑,例如发送搜索请求等
      console.log('搜索关键词:', keyword);
      this.higherGet(keyword)
      this.vocationalGet(keyword)
      this.teacherGet(keyword)
    },
    goBack() {
      wx.navigateBack();
    },
    onReachBottom(e) {
      if (this.data.tabValue == 0) {
        console.log(0);
        if (this.data.higherList.length < this.data.higherTotal) {
          this.setData({
            isMore: true,
            start: this.data.start + 1
          })
          this.higherGet()
        } else {
          this.setData({
            isMore: true,
          })
          setTimeout(() => {
            this.setData({
              isMore: false
            })
          }, 100)
        }
      } else if (this.data.tabValue == 1) {
        if (this.data.teacherList.length < this.data.teacherTotal) {
          this.setData({
            isMore: true,
            start: this.data.start + 1
          })
          this.teacherGet()
        } else {
          this.setData({
            isMore: true,
          })
          setTimeout(() => {
            this.setData({
              isMore: false
            })
          }, 100)
        }
        console.log(2);
      } else if (this.data.tabValue == 2) {
        if (this.data.vocationalList.length < this.data.vocationalTotal && this.data.vocationalList.length > 9) {
          this.setData({
            isMore: true,
            start: this.data.start + 1
          })
          this.vocationalGet()
        } else {
          this.setData({
            isMore: true,
          })
          setTimeout(() => {
            this.setData({
              isMore: false
            })
          }, 100)
        }
        console.log(2);
      }
    },
    onPullDownRefresh() {
      let keyword = this.data.value
      this.setData({
        start: 1,
      })
      this.higherGet(keyword)
      this.vocationalGet(keyword)
      this.teacherGet(keyword)
    },
    // 邮箱点击
    mailbox(e) {
      const key = e.currentTarget.dataset.key;
      const item = e.currentTarget.dataset.item;
      this.setData({
        [key]: true,
        dialogKey: key,
        input: '',
        Md5: item.datas.freeFile.FileList[0].Md5
    } else {
      Toast({
        context: this,
        selector: '#t-toast',
        message: '此书不能查看',
        theme: 'warning',
        direction: 'column',
      });
    },
    onEmailInput(e) {
      const isEmailValid = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/.test(e.detail.value);
      this.setData({
        emailError: !isEmailValid,
        "input": e.detail.value,
      });
    },
    //弹窗确认
    onConfirm() {
      if (!this.data.emailError && this.data.input) {
        const {
          dialogKey
        } = this.data;
    }
  },
  onSearchSubmit: function (e) {
    const keyword = e.detail.value;
    // 处理搜索逻辑,例如发送搜索请求等
    console.log('搜索关键词:', keyword);
    this.higherGet(keyword)
    this.vocationalGet(keyword)
    this.teacherGet(keyword)
  },
  goBack() {
    wx.navigateBack();
  },
  onReachBottom(e) {
    if (this.data.tabValue == 0) {
      if (this.data.higherList.length < this.data.higherTotal) {
        this.setData({
          [dialogKey]: false
        });
        console.log(this.data.input);
        console.log(this.data.Md5);
        if (this.data.input) {
          let query = {
            eMail: this.data.input,
            md5s: [this.data.Md5]
          }
          app.MG.file.sendFileWithEmail(query).then(res => {
            console.log(res);
          })
        }
          isMore: true,
          start: this.data.start + 1
        })
        this.higherGet()
      } else {
        // 校验不通过,给出错误提示
        wx.showToast({
          title: '邮箱格式不正确',
          icon: 'none',
        });
        this.setData({
          isMore: true,
        })
        setTimeout(() => {
          this.setData({
            isMore: false
          })
        }, 100)
      }
    } else if (this.data.tabValue == 2) {
      if (this.data.teacherList.length < this.data.teacherTotal) {
        this.setData({
          isMore: true,
          start: this.data.start + 1
        })
        this.teacherGet()
      } else {
        this.setData({
          isMore: true,
        })
        setTimeout(() => {
          this.setData({
            isMore: false
          })
        }, 100)
      }
    } else if (this.data.tabValue == 1) {
      console.log(this.data.vocationalList.length);
      console.log(this.data.vocationalTotal);
      if (this.data.vocationalList.length < this.data.vocationalTotal) {
        this.setData({
          isMore: true,
          start: this.data.start + 1
        })
        this.vocationalGet()
      } else {
        this.setData({
          isMore: true,
        })
        setTimeout(() => {
          this.setData({
            isMore: false
          })
        }, 100)
      }
    }
  },
    },
    // 弹窗取消
    closeDialog() {
      const {
        dialogKey
      } = this.data;
  onPullDownRefresh() {
    let keyword = this.data.value
    this.setData({
      start: 1,
    })
    this.higherGet(keyword)
    this.vocationalGet(keyword)
    this.teacherGet(keyword)
  },
  // 邮箱点击
  mailbox(e) {
    const key = e.currentTarget.dataset.key;
    const item = e.currentTarget.dataset.item;
    // 检查登录状态
    const token = wx.getStorageSync(app.config.tokenKey)
    if (!token) {
      loginInfo(app, (data) => {
        if (data) {
          this.getUserInfo()
          this.setData({
            Md5: item.datas.freeFile.FileList[0].Md5,
            dialogBox: true
          })
        } else {}
      })
    } else {
      this.setData({
        [dialogKey]: false
        Md5: item.datas.freeFile.FileList[0].Md5,
        dialogBox: true
      })
    }
    // wx.scanCode({
    //   success: res => {
    //     console.log(res);
    //   }
    // })
  },
  // 弹窗取消
  closeDialog() {
    this.setData({
      dialogBox: false,
      // input: ''
    })
  },
  //提交
  confirmM(e) {
    wx.showLoading({
      title: '发送中...',
    })
    const isEmailValid = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/.test(this.data.input);
    if (isEmailValid && this.data.input) {
      this.setData({
        dialogBox: false
      })
      let query = {
        eMail: this.data.input,
        md5s: [this.data.Md5]
      }
      app.MG.file.sendFileWithEmail(query).then(res => {
        wx.hideLoading()
        if (res) {
          wx.showToast({
            icon: 'success',
            title: '邮件已发送',
          })
        }
      })
    } else {
      // 校验不通过,给出错误提示
      wx.showToast({
        title: '邮箱格式不正确',
        icon: 'none',
      });
      console.log(111);
    },
    }
  },
  inputChange(e) {
    this.setData({
      input: e.detail.value
    })
  },
  })
})