Browse Source

Initial Commit

TheLittlePrince 4 years ago
commit
f79020e16a
100 changed files with 1056 additions and 0 deletions
  1. 14 0
      .gitignore
  2. 321 0
      app.js
  3. 94 0
      app.json
  4. 627 0
      app.wxss
  5. BIN
      assets/Less-icon.png
  6. BIN
      assets/Norecord.png
  7. BIN
      assets/Nosign.png
  8. BIN
      assets/SearchIcon.png
  9. BIN
      assets/Selectgroup.png
  10. BIN
      assets/add-icon.png
  11. BIN
      assets/address_gray.png
  12. BIN
      assets/aijia_icon.png
  13. BIN
      assets/allot_lists.png
  14. BIN
      assets/apply_pages.png
  15. BIN
      assets/arrow_blue.png
  16. BIN
      assets/arrow_gray.png
  17. BIN
      assets/arrow_gray_right.png
  18. BIN
      assets/arrow_left.png
  19. BIN
      assets/arrow_right.png
  20. BIN
      assets/arrow_two_blue.png
  21. BIN
      assets/banner1.png
  22. BIN
      assets/banner2.png
  23. BIN
      assets/banner3.png
  24. BIN
      assets/banner4.png
  25. BIN
      assets/bgIcon.png
  26. BIN
      assets/blue_active.png
  27. BIN
      assets/book.png
  28. BIN
      assets/book_blue.png
  29. BIN
      assets/book_gray.png
  30. BIN
      assets/cameare.png
  31. BIN
      assets/che_guan.png
  32. BIN
      assets/cheng_zhang_ji_lu.png
  33. BIN
      assets/circle_blue.png
  34. BIN
      assets/circle_gray.png
  35. BIN
      assets/circle_gray_2.png
  36. BIN
      assets/circle_red.png
  37. BIN
      assets/dai_shu_li_guan_blue.png
  38. BIN
      assets/dai_shu_li_guan_gray.png
  39. BIN
      assets/data_ansyc.png
  40. BIN
      assets/default_headicon.png
  41. BIN
      assets/delete.png
  42. BIN
      assets/delete_white.png
  43. BIN
      assets/diao_shu_qing_dan_blue.png
  44. BIN
      assets/diao_shu_qing_dan_gray.png
  45. BIN
      assets/dispatch_icon_1_blue.png
  46. BIN
      assets/dispatch_icon_1_gray.png
  47. BIN
      assets/dispatch_icon_2_blue.png
  48. BIN
      assets/dispatch_icon_2_gray.png
  49. BIN
      assets/dispatch_icon_3_blue.png
  50. BIN
      assets/dispatch_icon_3_gray.png
  51. BIN
      assets/error_gray.png
  52. BIN
      assets/fire.png
  53. BIN
      assets/gan_tan.png
  54. BIN
      assets/goodboos_icon.png
  55. BIN
      assets/grade.png
  56. BIN
      assets/guan_bi.png
  57. BIN
      assets/heart.png
  58. BIN
      assets/heart2_gray.png
  59. BIN
      assets/heart_gray.png
  60. BIN
      assets/heart_red.png
  61. BIN
      assets/home.png
  62. BIN
      assets/home_yellow.png
  63. BIN
      assets/index_bg.png
  64. BIN
      assets/jia_fa.png
  65. BIN
      assets/jian_fa.png
  66. BIN
      assets/jie_yue.png
  67. BIN
      assets/jin_gao.png
  68. BIN
      assets/left_icon.png
  69. BIN
      assets/library_books.png
  70. BIN
      assets/linetip.png
  71. BIN
      assets/linkicon.png
  72. BIN
      assets/loading_1.png
  73. BIN
      assets/loading_2.png
  74. BIN
      assets/loading_3.png
  75. BIN
      assets/lock_blue.png
  76. BIN
      assets/lock_gary.png
  77. BIN
      assets/main_banner1.png
  78. BIN
      assets/me_blue.png
  79. BIN
      assets/me_gray.png
  80. BIN
      assets/month_bg.png
  81. BIN
      assets/no_one.png
  82. BIN
      assets/no_one_bg.png
  83. BIN
      assets/no_three.png
  84. BIN
      assets/no_three_bg.png
  85. BIN
      assets/no_two.png
  86. BIN
      assets/no_two_bg.png
  87. BIN
      assets/nodata.png
  88. BIN
      assets/nodata_1.png
  89. BIN
      assets/nodata_2.png
  90. BIN
      assets/nodata_3.png
  91. BIN
      assets/nodata_4.png
  92. BIN
      assets/nodata_5.png
  93. BIN
      assets/numberOne.png
  94. BIN
      assets/numberTwo.png
  95. BIN
      assets/number_three.png
  96. BIN
      assets/one.png
  97. BIN
      assets/pai_hang_bang.png
  98. BIN
      assets/pai_hang_bg.png
  99. BIN
      assets/people_manager_blue.png
  100. 0 0
      assets/people_manager_gary.png

+ 14 - 0
.gitignore

@@ -0,0 +1,14 @@
+# Windows
+[Dd]esktop.ini
+Thumbs.db
+$RECYCLE.BIN/
+
+# macOS
+.DS_Store
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+
+# Node.js
+node_modules/

+ 321 - 0
app.js

@@ -0,0 +1,321 @@
+//app.js
+import { systemInfo, routers, isFn, getGlobalVal, getWxUserInfoSetting, getUpdateManager } from './utils/util.js'
+import { WxLogin, FirstWxLogin, GetMineInfo } from './utils/api.js'
+const { reLaunch, redirectTo } = routers()
+
+App({
+  onLaunch: function (options) {
+    this.globalData.options = options
+    getUpdateManager()
+    wx.getSystemInfo({
+      success: e => {
+        let modelmes = e.model;
+        if (modelmes.search('iPhone X' || 'iPhone 11') != -1) {
+          this.globalData.isIphoneX = true
+        }
+      }
+    })
+    wx.onMemoryWarning(function (e) {
+      console.log('onMemoryWarningReceive', e)
+    })
+  },
+
+  onShow: function (options) {
+    this.globalData.options = options
+  },
+
+  onHide: function (e) {
+
+  },
+
+  onError: function (e) {
+    wx.showToast({
+      title: '程序执行失败',
+      icon: 'none'
+    })
+  },
+
+  onPageNotFound: function (e) {
+    wx.showToast({
+      title: '没有找到对应页面',
+      icon: 'none'
+    })
+    setTimeout(() => {
+      redirectTo({ url: 'pages/index/index' })
+    }, 2000)
+  },
+
+  /**
+   * 初始化 
+   */
+  init: function () {
+    // redirectTo({ url: 'president/pages/home/home' })
+    // reLaunch({ url: 'dispatcher/pages/withdraw/withdraw'})
+    // reLaunch({ url: 'dispatcher/pages/dispatch_go/dispatch_go'})
+    // reLaunch({ url: 'parents/pages/home/home'})
+    // reLaunch({ url: 'dispatcher/pages/home/home' })
+    // return
+
+    const userInfo = getGlobalVal('userInfo')
+    getWxUserInfoSetting((type, res) => {
+      // if (type != 1 || !userInfo) {
+      //   redirectTo({ url: 'pages/wx_authority/wx_authority' })
+      //   return
+      // }
+      this.globalData.userInfo = userInfo
+      wx.checkSession({
+        success: res => {
+          const arr1 = ['accessToken', 'userInfo', 'userId']
+          const arr2 = ['vipList', 'vip', 'vipIndex', 'vipId']
+          const temp = {}
+          for (let i in arr1) {
+            temp[arr1[i]] = getGlobalVal(arr1[i])
+          }
+          for (let i in arr2) {
+            temp[arr2[i]] = getGlobalVal(arr2[i], `${arr2[i]}_${temp['userId']}`)
+          }
+          for (let i in temp) {
+            this.globalData[i] = temp[i]
+          }
+
+          this.permissionsJumpFn()
+        },
+        fail: res => {
+          this.login()
+        }
+      })
+    })
+  },
+
+  /**
+   * 获取微信code 
+   */
+  getWxloginCode: function (cb) {
+    wx.login({
+      success: res => {
+        if (isFn(cb)) cb(res.code)
+      },
+      fail: res => {
+        wx.showToast({
+          title: '获取微信code失败',
+          icon: 'none'
+        })
+      }
+    })
+  },
+
+  /**
+   * 获取微信用户信息
+   */
+  login: function () {
+    this.getWxloginCode(code => {
+      WxLogin({ data: { code } }).then(this.handleLogin).catch(e => {
+        if (e.data.code == '888') {
+          redirectTo({ url: 'pages/wx_authority/wx_authority' })
+        }
+      })
+    })
+  },
+
+  /**
+   * 处理登录信息
+   */
+  handleLogin: function (res) {
+    const { accessToken, userId, isDispatcher, list } = res.data
+    const arr = { accessToken, userId, isDispatcher, list }
+    for (let i in arr) {
+      this.globalData[i] = arr[i]
+      wx.setStorageSync(i, arr[i])
+    }
+    this.permissionsJumpFn()
+  },
+
+  /**
+   * 权限跳转
+   */
+  permissionsJumpFn: function (e) {
+    const { tempOptions, options } = this.globalData
+    const isDispatcher = getGlobalVal('isDispatcher')
+    const userId = getGlobalVal('userId')
+    const libId = getGlobalVal(`dispatchLibId_${userId}`)
+    const userInfo = getGlobalVal('userInfo')
+    const { query = {}, scene, path } = options || tempOptions
+    let url = ''
+    if (query && query.type > 1) {
+      url = path ? path : 'pages/index/index'
+    } else {
+      // url = 'dispatcher/pages/sweeped_books/sweeped_books'
+      if (isDispatcher == 1) {
+        if (!userInfo) {
+          redirectTo({ url: 'pages/wx_authority/wx_authority' })
+          return
+        }
+        if (libId) {
+          // url = 'dispatcher/pages/dispatch_leave/dispatch_leave'
+          url = 'dispatcher/pages/dispatch_go/dispatch_go'
+        } else {
+          url = 'dispatcher/pages/home/home'
+        }
+      } else if (isDispatcher == 3) {
+        // console.log('111')
+        if (!userInfo) {
+          redirectTo({ url: 'pages/wx_authority/wx_authority' })
+          return
+        }
+        url = 'president/pages/home/home'
+      } else {
+        url = 'parents/pages/main/main'
+        this.getVipList()
+      }
+    }
+    const paras = { ...query, url, scene }
+    // console.log(this.globalData)
+    // console.log(paras)
+    if (isFn(reLaunch)) reLaunch({ url, paras })
+    this.globalData.options = tempOptions
+  },
+
+  /**
+   * 获取会员卡列表
+   */
+  getVipList: function () {
+    const continuousFn = { fn: this.getVipList, param: { ...arguments } }
+    const userId = getGlobalVal('userId')
+    const vipId = getGlobalVal('vipId', `vipId_${userId}`)
+    const { noVipListToastText } = this.globalData
+    const fn = (i, v) => {
+      this.globalData['vip'] = v
+      wx.setStorageSync(`vip_${userId}`, v)
+
+      this.globalData['vipIndex'] = i
+      wx.setStorageSync(`vipIndex_${userId}`, i)
+
+      this.globalData['vipId'] = v['vip_id']
+      wx.setStorageSync(`vipId_${userId}`, v['vip_id'])
+    }
+    GetMineInfo({ continuousFn }).then(res => {
+      const { vipList = null } = res.data
+      if (vipList.length > 0) {
+        let isSame = false
+        for (let i in vipList) {
+          if (vipList[i]['vip_id'] == vipId) {
+            isSame = true
+            fn(i, vipList[i])      
+            break
+          }
+        }
+        if (!isSame) {
+          fn(0, vipList[0])
+        }
+        this.globalData['vipList'] = vipList
+        wx.setStorageSync(`vipList_${userId}`, vipList)
+      } else {
+        wx.showToast({
+          title: noVipListToastText,
+          icon: 'none'
+        })
+      }
+    })
+  },
+
+  /**
+   * 保存微信用户数据
+   */
+  saveUserInfo: function (res, code) {
+    const { accessToken, userId } = this.globalData
+    const { encryptedData, iv, signature, userInfo } = res
+    const user = Object.assign(userInfo, { encryptedData, iv, signature })
+    FirstWxLogin({ data: { code, ...user } }).then(res => {
+      this.globalData.userInfo = user
+      wx.setStorageSync('userInfo', user)
+      wx.setStorageSync('hiddenModel', true)
+      wx.setStorageSync('isfirstLogin', true)
+      wx.setStorageSync('hiddenGetallModel', true)
+      wx.setStorageSync('infofrominput', [])
+      this.handleLogin(res)
+    })
+  },
+
+  /**
+   * 是否有会员卡服务
+   */
+  hasVipService: function () {
+    const vipId = getGlobalVal('vipId')
+    if (vipId) {
+      return true
+    } else {
+      wx.showToast({
+        title: this.globalData.noVipServiceToastText,
+        icon: 'none'
+      })
+      return false
+    }
+  },
+
+  /**
+   * 是否有当前图书馆服务
+   */
+  hasLibraryService: function () {
+    const { stype = 0, id } = getGlobalVal('library')
+    if (!id) {
+      wx.showToast({
+        title: this.globalData.noLibraryToastText,
+        icon: 'none'
+      })
+      return false
+    } else {
+      if (stype == 1) {
+        return true
+      } else {
+        wx.showToast({
+          title: this.globalData.noLibraryServiceToastText,
+          icon: 'none'
+        })
+        return false
+      }
+    }
+  },
+
+  /**
+   * 全局变量
+   */
+  globalData: {
+    systemInfo,
+    wechatsys: systemInfo.version + ' ' + systemInfo.SDKVersion,
+    phoneimei: '',
+    phonesys: systemInfo.system,
+    phonetype: systemInfo.brand + ' ' + systemInfo.model,
+    version: '1.3.3',
+    platform: '3',
+    build: '1.3.3',
+    initStatus: 0,
+    loginTime: 0,
+    appid: 'wxe9cdca7c3365e448',
+    // host: 'https://t.sharingschool.com/gz',
+    // baseImgUrl: 'https://img.sharingschool.com',
+    // thumbnail: '?x-oss-process=image/resize,m_fill,h_300,w_200',
+    host: 'https://xt.sharingschool.com/gz',
+    baseImgUrl: 'https://xtimg.sharingschool.com',
+    thumbnail: '!t200x300.jpg',
+    tempOptions: { query: {}, path: 'pages/index/index', scene: 1001 },
+    options: null,
+    continuousFn: null,
+    accessToken: null,
+    userId: null,
+    vipList: null,
+    vip: null,
+    vipIndex: null,
+    vipId: null,
+    userInfo: null,
+    isIphoneX:null,
+    noVipListToastText: '您尚未开通私塾家共享图书馆借阅服务,请就近至私塾家共享图书馆开通服务',
+    noVipServiceToastText: '您非本馆会员,无法进行此操作,如想继续操作可联系管理员',
+    noLibraryServiceToastText: '您非本馆会员,无法进行此操作,请切换到您所在的馆继续操作',
+    noLibraryToastText: '您暂未选择图书馆,请回到首页进行定位匹配',
+    noBorrowToastText: '您已经预约过此书',
+    qrcodeInvalidToastText: '二维码已失效',
+    borrowToastText: '此书库存有货,点击我想借阅将在下一次调书时移至您的服务所在馆',
+    reservationsToastText: '您可直接扫描书本上二维码借阅,也可预约,如预约,其他人将暂时不可借。',
+    wishToastText: '更多人将此书加入心愿单会成为我们的优先采购书籍'
+  }
+})

+ 94 - 0
app.json

@@ -0,0 +1,94 @@
+{
+  "pages": [
+    "pages/index/index",
+    "pages/wx_authority/wx_authority",
+    "pages/question/question",
+    "pages/webview/webview",
+    "pages/borrow_car/borrow_car",
+    "pages/about_aijia/about_aijia",
+    "pages/apply_bookLists/apply_bookLists"
+  ],
+  "subPackages": [
+    {
+      "root": "parents/",
+      "name": "parents",
+      "pages": [
+        "pages/main/main",
+        "pages/borrow_car/borrow_car",
+        "pages/borrow_record/borrow_record",
+        "pages/book_classification/book_classification",
+        "pages/apply_book/apply_book",
+        "pages/apply_bookform/apply_bookform",
+        "pages/growth_track/growth_track",
+        "pages/all_books/all_books",
+        "pages/ranking/ranking",
+        "pages/borrow/borrow",
+        "pages/growth/growth",
+        "pages/me/me",
+        "pages/good_books/good_books",
+        "pages/book_detail/book_detail",
+        "pages/wish/wish",
+        "pages/wish_detail/wish_detail",
+        "pages/borrow_success/borrow_success",
+        "pages/search/search",
+        "pages/information/information",
+        "pages/library/library",
+        "pages/reservations/reservations"
+      ]
+    },
+    {
+      "root": "president/",
+      "name": "president",
+      "pages": [
+        "pages/home/home",
+        "pages/book_inventory/book_inventory",
+        "pages/good_books/good_books",
+        "pages/good_books_new/good_books_new",
+        "pages/random_books/random_books",
+        "pages/part_call_in/part_call_in",
+        "pages/search_books_new/search_books_new",
+        "pages/book_Imformation/book_Imformation",
+        "pages/search_books/search_books",
+        "pages/search_headquarters_books/search_headquarters_books",
+        "pages/book_delete_list/book_delete_list",
+        "pages/apply_bookLists/apply_booklists",
+        "pages/apply_bookform/apply_bookform",
+        "pages/library_books/library_books",
+        "pages/sign_leave_in/sign_leave_in",
+        "pages/data_statistics/data_statistics"
+      ]
+    },
+    {
+      "root": "dispatcher/",
+      "name": "dispatcher",
+      "pages": [
+        "pages/home/home",
+        "pages/sweeped_books/sweeped_books",
+        "pages/dispatch_go/dispatch_go",
+        "pages/dispatch_leave/dispatch_leave",
+        "pages/information/information",
+        "pages/me/me",
+        "pages/withdraw_library/withdraw_library",
+        "pages/withdraw_detail/withdraw_detail",
+        "pages/withdraw/withdraw"
+      ]
+    }
+  ],
+  "window": {
+    "backgroundTextStyle": "light",
+    "navigationBarBackgroundColor": "#fff",
+    "navigationBarTitleText": "私塾家图书馆",
+    "navigationBarTextStyle": "black"
+  },
+  "permission": {
+    "scope.userLocation": {
+      "desc": "你的位置信息将用于小程序位置接口的效果展示"
+    }
+  },
+  "networkTimeout": {
+    "request": 20000,
+    "downloadFile": 60000
+  },
+  "debug": false,
+  "sitemapLocation": "sitemap.json"
+}

+ 627 - 0
app.wxss

@@ -0,0 +1,627 @@
+/**app.wxss**/
+page {
+  font-family: PingFangSC-Regular;
+  font-size: 32rpx;
+  color: #333;
+  background: #F5F5F5;
+}
+view {
+  word-break: break-all;
+}
+image,
+text {
+  display: inline-block;
+  vertical-align: middle;
+}
+button,
+button::after {
+  border: none;
+  border-radius: 0;
+  padding: 0;
+  margin: 0;
+}
+.pb {
+  padding-bottom: 98rpx;
+}
+.container {
+  position: relative;
+}
+.wrapper {
+  position: absolute;
+  top: 0; 
+  left: 0;
+  width: 100%;
+}
+.list {
+  padding: 10rpx 40rpx;
+}
+.li {
+  margin: 20rpx auto;
+  background: #fff;
+  border-radius: 18rpx;
+  padding: 30rpx;
+}
+.li-label {
+  font-size: 28rpx;
+  color: #666;
+  margin: 40rpx auto 20rpx auto;
+}
+
+/* 搜索框统一样式  ===== start ===== */
+.search-container {
+  width: 100%;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.search-wrapper {
+  flex: 1;
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+  padding: 16rpx 30rpx;
+  margin-right: 30rpx;
+  background:rgba(255,255,255,1);
+  box-shadow:0px 4rpx 10rpx 0px rgba(11,71,94,0.2);
+  border-radius:86rpx;
+}
+.search-icon {
+  width: 30rpx;
+  height: 30rpx;
+}
+.search-input {
+  flex: 1;
+  color: #666;
+  font-size: 26rpx;
+  margin: 0 20rpx;
+}
+.search-placeholder {
+  color: #999;
+  font-size: 26rpx;
+}
+.search-button {
+  background:linear-gradient(90deg,rgba(81,206,255,1) 0%,rgba(0,183,255,1) 100%);
+  box-shadow:0px 4rpx 10rpx 0rpx rgba(11,71,94,0.2);
+  padding: 20rpx 39rpx;
+  font-size: 28rpx;
+  color: #fff;
+  cursor: pointer;
+  border-radius:86rpx;
+}
+.search-button-active {
+  background: linear-gradient(90deg,rgba(81,206,255,1) 0%,rgba(0,183,255,1) 100%);
+}
+/* 搜索框统一样式  ===== end ===== */
+
+/* 弹框统一样式  ===== start ===== */
+.showModel{
+  width: 100%;
+  height: 100%;
+  position: fixed;
+  top: 0;
+  left: 0;
+  background: #000;
+  opacity: 0.5;
+  overflow: hidden;
+  z-index: 1000;
+  color: #fff;
+  
+}
+.model{
+  z-index: 1001;
+  position: fixed;
+  top: 30%;
+  margin: 0 60rpx;
+  background: #fff;
+  border-radius:30rpx;
+  text-align: center;
+}
+.screen-footer{
+  padding: 40rpx
+}
+/* 弹框统一样式  ===== end ===== */
+/* 导航头部统一样式  ===== start ===== */
+.nav {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background: #fff;
+  
+}
+.nav-item {
+  flex: 1;
+  text-align: center;
+  position: relative;
+}
+.nav-item-row {
+  display: inline-flex;
+  justify-content: center;
+  align-items: center;
+  padding: 25rpx 0;
+  transition: all .3s;
+  border-bottom: solid 6rpx transparent;
+}
+.nav-item-row-active {
+  border-bottom: solid 6rpx #00B7FF;
+}
+.nav-item::after {
+  content: "";
+  position: absolute;
+  right: 0;
+  top: 24rpx;
+  width: 2rpx;
+  height: 46rpx;
+  background: #e6e6e6;
+}
+.nav-item:nth-last-of-type(1):after {
+  content: "";
+  position: absolute;
+  right: 0;
+  top: 0;
+  width: 0;
+  height: 0;
+}
+.nav-item-text {
+  font-size: 30rpx;
+  color: #6C6C80;
+}
+.nav-item-text-active {
+  color: #41414C;
+}
+.nav-item-button {
+  font-size: 24rpx;
+  color: #6C6C80;
+  border-radius: 4rpx;
+  padding: 0 14rpx;
+  margin-left: 10rpx;
+  border: 1rpx solid #6C6C80;
+}
+.nav-item-button-active {
+  color: #41414C;
+  border: 1rpx solid #41414C;
+}
+/* 导航头部统一样式  ===== end ===== */
+
+/* 底部按钮统一样式  ===== start ===== */
+.footer-box {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  padding: 20rpx 0;
+  background: linear-gradient(90deg,rgba(81,206,255,1),rgba(0,183,255,1));
+  opacity: 0.9;
+  cursor: pointer;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  z-index: 99;
+}
+.footer-box-gray {
+  background: #ccc;
+  color: #999;
+}
+.footer-box-item {
+  flex: 1;
+  padding: 4rpx 0;
+  text-align: center;
+  font-size: 30rpx;
+  color: #fff;
+  border-right: solid 1rpx #fff;
+  cursor: pointer;
+}
+.footer-box-item:nth-last-of-type(1) {
+  border-right: none;
+}
+
+/* 底部按钮统一样式  ===== end ===== */
+
+/* 图书介绍统一样式  ===== start ===== */
+.book-container {
+  width: 100%;
+}
+.book-wrapper {
+  display: flex;
+  justify-content: space-between;
+  align-items: flex-start;
+}
+.book-content {
+  flex: 1;
+}
+.book-images {
+  width: 200rpx;
+  height: 230rpx;
+  box-shadow: 0rpx 0rpx 8rpx 0px rgba(204,204,204,1);
+  border-radius: 6rpx;
+  margin-right: 24rpx;
+  overflow: hidden;
+  position: relative;
+  /* top:-24rpx; */
+}
+.book-image {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+.book-tip {
+  position: absolute;
+  top: 0;
+  left: 0;
+  background: rgba(255,84,43,1);
+  border-radius: 6rpx 0rpx 6rpx 0rpx;
+  opacity: 0.8;
+  font-size: 28rpx;
+  color: #fff;
+  padding: 14rpx 15rpx;
+}
+.book-tip-two {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  background:rgba(255,128,168,1);
+  border-radius: 6rpx 0rpx 6rpx 0rpx;
+  opacity: 0.8;
+  font-size: 28rpx;
+  color: #fff;
+  padding: 14rpx 15rpx;
+  text-align: center;
+}
+.book-title,
+.book-text,
+.book-content {
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 2;
+  overflow: hidden;
+}
+.book-text,
+.book-context {
+  font-size: 28rpx;
+  color: #666;
+  /* margin-top: 16rpx; */
+}
+.book-title {
+  font-size: 32rpx;
+  color: #333;
+}
+.book-text {
+  -webkit-line-clamp: 1;
+}
+.book-footer {
+  margin-top: 30rpx;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.book-footer-two {
+  margin-top: 30rpx;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+}
+.book-footer-right {
+  justify-content: flex-end;
+}
+.book-footer-item {
+  position: relative;
+  font-size: 28rpx;
+  cursor: pointer;
+  margin-left: 30rpx;
+}
+.book-footer-item-two {
+  position: relative;
+  font-size: 28rpx;
+  cursor: pointer;
+  margin-top: 30rpx;
+}
+.book-footer-item:nth-of-type(1) {
+  margin-left: 0;
+}
+.book-footer-item-two:nth-of-type(1) {
+  margin-top: 0;
+}
+.book-icon {
+  width: 30rpx;
+  height: 30rpx;
+  margin-right: 14rpx;
+}
+.book-icon-two {
+  width: 28rpx;
+  height: 34rpx;
+  margin-right: 14rpx;
+}
+.book-text-large {
+  font-size: 32rpx;
+}
+.book-text-blue {
+  color: #00B7FF;
+}
+.book-text-gray {
+  color: #999;
+}
+.book-text-red {
+  color: #FF80A8;
+}
+.book-text-yellow {
+  color: #FF542B;
+}
+.book-button-yellow {
+  background: rgba(255,255,255,1);
+  border-radius: 200rpx;
+  border: 1rpx solid rgba(255,84,43,1);
+  color: rgba(255,84,43,1);
+  padding: 12rpx 24rpx;
+  min-width: 98rpx;
+  text-align: center;
+}
+.book-button-blue {
+  background: rgba(255,255,255,1);
+  border-radius: 200rpx;
+  border: 1rpx solid rgba(0,183,255,1);
+  color: rgba(0,183,255,1);
+  padding: 12rpx 24rpx;
+  min-width: 98rpx;
+  text-align: center;
+}
+.book-button-fill-blue {
+  background: linear-gradient(90deg,rgba(81,206,255,1) 0%,rgba(0,183,255,1) 100%);
+  border-radius: 200rpx;
+  border: 1rpx solid transparent;
+  color: rgba(255,255,255,1);
+  padding: 12rpx 24rpx;
+  min-width: 98rpx;
+  text-align: center;
+}
+.book-modal {
+  position: absolute;
+  top: 200%;
+  right: -30rpx;
+  width: 400rpx;
+  padding: 30rpx;
+  background: rgba(0,0,0,1);
+  border-radius: 16rpx;
+  opacity: 0.5;
+  font-size: 30rpx;
+  color: #fff;
+  line-height: 42rpx;
+  z-index: 9;
+}
+.book-modal::after {
+  content: "";
+  position: absolute;
+  top: -18rpx;
+  right: 15%;
+  border-left: solid 16rpx transparent;
+  border-right: solid 16rpx transparent;
+  border-bottom: solid 20rpx rgba(0,0,0,1);
+}
+@keyframes snake {
+  0%, 20%, 40%, 60%, 80% {
+    transform: translate(0, 0);
+    opacity: 0.5;
+  }
+  5%, 15%, 25%, 35%, 45%, 55%, 65%, 75% {
+    transform: translate(0, -10rpx);
+    opacity: 0.4;
+  }
+  10%, 30%, 50%, 70% {
+    transform: translate(0, 10rpx);
+    opacity: 0.6;
+  }
+  90% {
+    opacity: 0;
+    z-index: 9;
+  }
+  100% {
+    z-index: -9;
+    opacity: 0;
+  }
+}
+@keyframes snake-slow {
+  0%, 100% {
+    transform: translate(0%, 0);
+  }
+  25%, 75% {
+    transform: translate(0%, -10rpx);
+  }
+  50% {
+    transform: translate(0%, 10rpx);
+  }
+}
+.book-nav{
+  display: flex;
+  justify-content: space-between
+}
+.canvas {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  display: flex;
+  flex-direction: column;
+  height: 617rpx;
+  align-items: center;
+  justify-content: space-between;
+  box-sizing: border-box;
+} 
+/* 图书介绍统一样式  ===== end ===== */
+/* 列表2.0统一样式  ===== end ===== */
+.ul{
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+  background:rgba(255,255,255,1);
+  border-radius:18rpx;
+  margin-bottom: 50rpx;
+  position: relative;
+}
+.ui-image{
+  position: relative;
+  top: -30rpx;
+}
+.li-img{
+  width: 178rpx;
+  height: 210rpx;
+  box-shadow:0px 0px 8rpx 0px rgba(204,204,204,1);
+  border-radius:6rpx;
+}
+.li-right{
+  color: #333333;
+  font-size: 34rpx;
+  margin-left: 10rpx;
+  padding: 20rpx;
+  
+}
+.li-right-tips{
+  margin: 20rpx 0;
+}
+.li-right-tips-items{
+  height:40rpx;
+  line-height: 40rpx;
+  border-radius:8rpx;
+  border:2rpx solid rgba(103,163,255,1);
+  color: #67A3FF;
+  font-size: 24rpx;
+  padding:0 8rpx;
+  display: inline-block;
+  /* margin: 10rpx 0; */
+}
+.li-right-grade{
+  width: 28rpx;
+  height: 34rpx;
+  margin-right: 10rpx;
+}
+.ul-num{
+  position: absolute;
+  bottom: 42rpx;
+  right: 30rpx;
+}
+.ul-num-img{
+  width: 50rpx;
+  height: 50rpx;
+}
+.ul-num-text{
+  color: #666666;
+  font-size: 30rpx;
+  margin: 0 20rpx;
+}
+/* 加载统一样式  ===== end ===== */
+.load{
+  color: #999999;
+  font-size: 26rpx;
+  text-align: center;
+  margin: 30rpx;
+}
+.load-img{
+  width: 40rpx;
+  height: 40rpx;
+  animation: loading 3s linear infinite;
+}
+@keyframes loading {
+        0% {
+            transform: rotate(0deg);
+        }
+        100% {
+            transform: rotate(360deg);
+        }
+    }
+.firstaddBooks{
+  height:60rpx;
+  text-align:center;
+  line-height:60rpx;
+  width:160rpx;
+   background: linear-gradient(#51CEFF, #00B7FF);
+  color:#ffff;
+  border-radius:36rpx;
+  font-size:14px;
+  padding:5rpx 10rpx;
+  margin: 0 auto;
+  margin-top:100rpx;
+}
+
+/* 书籍列表迭代样式 */
+.list-items{
+  margin: 0;
+  padding: 0;
+}
+.list-items-title{
+  color: #41414C;
+  font-size: 36rpx;
+  margin: 40rpx 0;
+  font-weight: bold;
+}
+.list-item{
+  display: flex;
+  justify-content: flex-start;
+  margin-bottom: 50rpx;
+}
+.list-item-img-items{
+  width:210rpx;
+  height:220rpx;
+  border-radius:10rpx;
+}
+.list-item-content{
+  color: #41414C;
+  font-size: 32rpx;
+  margin-left: 40rpx;
+  text-align: left;
+  font-weight:500;
+}
+.list-item-content-tips{
+  color: #6C6C80;
+  font-size: 26rpx;
+  margin: 8rpx 0;
+}
+.list-item-content-title{
+  font-weight: bold;
+}
+.list-item-content-label{
+  font-size: 24rpx;
+  font-weight:400;
+}
+.list-item-content-label-one{
+  color: #20A3E0;
+  background:rgba(226,243,251,1);
+  border-radius:20px;
+  text-align: center;
+  padding: 5rpx 15rpx;
+  display: inline-block;
+  margin-right: 15rpx;
+}
+.list-item-content-label-two{
+  color: #D59F10;
+  background:#FEF6DF;
+  border-radius:20px;
+  text-align: center;
+  padding: 5rpx 15rpx;
+  display: inline-block
+}
+.list-item-content-fire{
+  width: 26rpx;
+  height: 30rpx;
+  margin:5rpx 0 0 13rpx;
+}
+.list-detail-head{
+  display: flex;
+  justify-content: space-between;
+  color: #6C6C80;
+  font-size: 30rpx;
+  margin-bottom: 10rpx
+}
+.list-dedail-item{
+  background:rgba(246,245,251,1);
+  border-radius:20rpx;
+  padding: 40rpx;
+  margin-bottom: 18rpx;
+}
+.list-dedail-date{
+  border-top: 1rpx solid #E6E6EC;
+  padding-top: 25rpx;
+  color: #A1A1B3;
+  font-size: 26rpx;
+}

BIN
assets/Less-icon.png


BIN
assets/Norecord.png


BIN
assets/Nosign.png


BIN
assets/SearchIcon.png


BIN
assets/Selectgroup.png


BIN
assets/add-icon.png


BIN
assets/address_gray.png


BIN
assets/aijia_icon.png


BIN
assets/allot_lists.png


BIN
assets/apply_pages.png


BIN
assets/arrow_blue.png


BIN
assets/arrow_gray.png


BIN
assets/arrow_gray_right.png


BIN
assets/arrow_left.png


BIN
assets/arrow_right.png


BIN
assets/arrow_two_blue.png


BIN
assets/banner1.png


BIN
assets/banner2.png


BIN
assets/banner3.png


BIN
assets/banner4.png


BIN
assets/bgIcon.png


BIN
assets/blue_active.png


BIN
assets/book.png


BIN
assets/book_blue.png


BIN
assets/book_gray.png


BIN
assets/cameare.png


BIN
assets/che_guan.png


BIN
assets/cheng_zhang_ji_lu.png


BIN
assets/circle_blue.png


BIN
assets/circle_gray.png


BIN
assets/circle_gray_2.png


BIN
assets/circle_red.png


BIN
assets/dai_shu_li_guan_blue.png


BIN
assets/dai_shu_li_guan_gray.png


BIN
assets/data_ansyc.png


BIN
assets/default_headicon.png


BIN
assets/delete.png


BIN
assets/delete_white.png


BIN
assets/diao_shu_qing_dan_blue.png


BIN
assets/diao_shu_qing_dan_gray.png


BIN
assets/dispatch_icon_1_blue.png


BIN
assets/dispatch_icon_1_gray.png


BIN
assets/dispatch_icon_2_blue.png


BIN
assets/dispatch_icon_2_gray.png


BIN
assets/dispatch_icon_3_blue.png


BIN
assets/dispatch_icon_3_gray.png


BIN
assets/error_gray.png


BIN
assets/fire.png


BIN
assets/gan_tan.png


BIN
assets/goodboos_icon.png


BIN
assets/grade.png


BIN
assets/guan_bi.png


BIN
assets/heart.png


BIN
assets/heart2_gray.png


BIN
assets/heart_gray.png


BIN
assets/heart_red.png


BIN
assets/home.png


BIN
assets/home_yellow.png


BIN
assets/index_bg.png


BIN
assets/jia_fa.png


BIN
assets/jian_fa.png


BIN
assets/jie_yue.png


BIN
assets/jin_gao.png


BIN
assets/left_icon.png


BIN
assets/library_books.png


BIN
assets/linetip.png


BIN
assets/linkicon.png


BIN
assets/loading_1.png


BIN
assets/loading_2.png


BIN
assets/loading_3.png


BIN
assets/lock_blue.png


BIN
assets/lock_gary.png


BIN
assets/main_banner1.png


BIN
assets/me_blue.png


BIN
assets/me_gray.png


BIN
assets/month_bg.png


BIN
assets/no_one.png


BIN
assets/no_one_bg.png


BIN
assets/no_three.png


BIN
assets/no_three_bg.png


BIN
assets/no_two.png


BIN
assets/no_two_bg.png


BIN
assets/nodata.png


BIN
assets/nodata_1.png


BIN
assets/nodata_2.png


BIN
assets/nodata_3.png


BIN
assets/nodata_4.png


BIN
assets/nodata_5.png


BIN
assets/numberOne.png


BIN
assets/numberTwo.png


BIN
assets/number_three.png


BIN
assets/one.png


BIN
assets/pai_hang_bang.png


BIN
assets/pai_hang_bg.png


BIN
assets/people_manager_blue.png


+ 0 - 0
assets/people_manager_gary.png


Some files were not shown because too many files changed in this diff