litian
2024-02-28 50aaa9d0da14c1568107f29813c7fe5858b033b3
个人中心
4个文件已删除
13个文件已修改
96个文件已添加
2335 ■■■■■ 已修改文件
app.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app.json 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
assets/js/middleGround/api/identity.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
assets/js/userAction.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
assets/request/index.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
custom-tab-bar/data.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/home.js 285 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/home.json 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/home.wxml 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/home.wxss 250 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/activateProduct/index.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/activateProduct/index.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/activateProduct/index.wxml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/activateProduct/index.wxss 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/certificate/index.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/certificate/index.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/certificate/index.wxml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/certificate/index.wxss 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/components/user-center-card/index.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/components/user-center-card/index.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/components/user-center-card/index.wxml 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/components/user-center-card/index.wxss 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/downloads/index.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/downloads/index.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/downloads/index.wxml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/downloads/index.wxss 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/feedBack/index.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/feedBack/index.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/feedBack/index.wxml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/feedBack/index.wxss 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/feedBackSubmit/index.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/feedBackSubmit/index.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/feedBackSubmit/index.wxml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/feedBackSubmit/index.wxss 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/index.js 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/index.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/index.wxml 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/index.wxss 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myCollection/index.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myCollection/index.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myCollection/index.wxml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myCollection/index.wxss 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myMassage/index.js 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myMassage/index.json 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myMassage/index.wxml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myMassage/index.wxss 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myOrder/index.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myOrder/index.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myOrder/index.wxml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/myOrder/index.wxss 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/publishBooks/index.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/publishBooks/index.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/publishBooks/index.wxml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/publishBooks/index.wxss 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/sampleBooks/index.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/sampleBooks/index.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/sampleBooks/index.wxml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/personalCenter/sampleBooks/index.wxss 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/teacherCertification/index.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/teacherCertification/index.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/teacherCertification/index.wxml 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/teacherCertification/index.wxss 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/usercenter/index.wxss 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
services/home/home.js 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/1.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/Home-click@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/Home@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/cart-click@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/cart@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/click-icon@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/home-bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/home-cart.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/jiaoshirenzheng@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/jingxuankecheng.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/jingxuankecheng@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/learn-click@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/learn@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/my-click@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/my@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/paihangbang@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/service-click@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/service@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/shumuxiazai@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/shuzijiaocai.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/shuzijiaocai1@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/shuzijiaocai@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/shuzikecheng@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/shuziyuedu1@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/shuziyuedu@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/tushufuwu.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/tushufuwu@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/xianshangshuzhan@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/xueshuzhuzuo@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/yangshushenqing@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/zhuantitaolun.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/zhuantitaolun1@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/zhuantitaolun@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/zhutichuban@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/home/zuoxia-p@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/about.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/certificate.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/chushu.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/contact.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/download.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/feedback.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/jihuo.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/my-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/notification.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/order.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/setting.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/upload.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/wodeshoucang.png 补丁 | 查看 | 原始文档 | blame | 历史
static/images/personal/yangshushenqing.png 补丁 | 查看 | 原始文档 | blame | 历史
app.js
@@ -1,7 +1,9 @@
import updateManager from './common/updateManager';
import MG from './assets/js/middleGround/WebMiddleGroundApi'
import config from "./assets/js/config.js"
App({
  MG:MG,
  config: config,
  onLaunch: function () { },
  onShow: function () {
    updateManager();
app.json
@@ -29,7 +29,19 @@
    "pages/order/fill-tracking-no/index",
    "pages/order/delivery-detail/index",
    "pages/order/invoice/index",
    "pages/usercenter/name-edit/index"
    "pages/usercenter/name-edit/index",
    "pages/teacherCertification/index",
    "pages/personalCenter/index",
    "pages/personalCenter/myOrder/index",
    "pages/personalCenter/myCollection/index",
    "pages/personalCenter/myMassage/index",
    "pages/personalCenter/feedBack/index",
    "pages/personalCenter/feedBackSubmit/index",
    "pages/personalCenter/certificate/index",
    "pages/personalCenter/publishBooks/index",
    "pages/personalCenter/sampleBooks/index",
    "pages/personalCenter/downloads/index",
    "pages/personalCenter/activateProduct/index"
  ],
  "tabBar": {
    "custom": true,
@@ -55,7 +67,7 @@
        "text": "购物车"
      },
      {
        "pagePath": "pages/usercenter/index",
        "pagePath": "pages/personalCenter/index",
        "text": "我的"
      }
    ]
assets/js/middleGround/api/identity.js
@@ -123,6 +123,15 @@
    });
  },
  //检查微信小程序是否注册
  checkWeChatAppAccount(data) {
    return request({
      url: "/identity/api/CheckWeChatAppAccount",
      method: "post",
      data,
    });
  },
  // 通过手机号重置密码
  changePasswordByMobilePhone(data) {
@@ -159,6 +168,13 @@
      data,
    });
  },
  loginByWeChatAppCode(data) {
    return request({
      url: "/identity/api/LoginByWeChatAppCode",
      method: "post",
      data,
    });
  },
  // 获取邮箱验证码
  getEmailCode(data) {
assets/js/userAction.js
@@ -1,5 +1,4 @@
import config from "@/assets/js/config.js";
import config from "./config.js";
import jobApi from "./middleGround/api/job"; // newJobWithNewView // newSession,
export function setSessionGuid(type, id) {
@@ -34,7 +33,7 @@
  };
  jobApi.newSession(params).then(res => {
    storage.set("sessionGuid", res, 30);
    wx.setStorageSync("sessionGuid", res);
    setNewView(type, id);
  });
}
@@ -112,13 +111,12 @@
}
export function setNewView(type, id) {
  if (!sessionStorage.getItem("sessionGuid")) {
  if (!wx.getStorageSync("sessionGuid")) {
    setSessionGuid(type, id);
  }
  const sessionGuid = sessionStorage.getItem("sessionGuid");
  const fromPath = sessionStorage.getItem("fromPath");
  const toPath = sessionStorage.getItem("toPath");
  const sessionGuid = wx.getStorageSync("sessionGuid");
  const fromPath = wx.getStorageSync("fromPath");
  const toPath = wx.getStorageSync("toPath");
  if (sessionGuid) {
    let params = {
      sessionGuid: sessionGuid,
assets/request/index.js
@@ -1,6 +1,6 @@
import config from "../js/config"
let clearStorage = false;
let timer = null;
const request = (params) => {
  let fullUrl = `${config.requestCtx}${params.url}`
  let token = wx.getStorageSync(config.tokenKey) ? wx.getStorageSync(config.tokenKey) : ''
custom-tab-bar/data.js
@@ -22,6 +22,6 @@
  {
    icon: 'person',
    text: '个人中心',
    url: 'pages/usercenter/index',
    url: 'pages/personalCenter/index',
  },
];
pages/home/home.js
@@ -1,7 +1,11 @@
import { fetchHome } from '../../services/home/home';
import moment from 'moment'
import { setSessionGuid } from "../../assets/js/userAction"
const app = getApp()
Page({
  data: {
    backUrl: null,
    userInfo: {},
    tabList: [], //目录
    pageLoading: false,
    current: 1,//轮播图参数
@@ -11,30 +15,38 @@
    navigation: { type: 'dots' },//轮播图参数
    bannerList: [], //轮播图列表
    specialSubjectList: [],//专题讨论
    activeItem: 0,//精选课程默认选中
    courseTypeList: [],//精选课程分类
    courseList: [],
    bookTypeList: [],//图书类型
    activeItem1: 0,
    booksList: [],
    textbookList: []
    readBookList: [], //数字阅读
    textbookList: [], //数字教材
    rankingList: []//排行榜
  },
  goodListPagination: {
    index: 0,
    num: 20,
  },
  privateData: {
    tabIndex: 0,
  },
  onShow() {
    this.getTabBar().init();
    this.loadHomePage();
    this.getBannerList()
  },
  onLoad() {
  onLoad(options) {
    if (options.backUrl) {
      let backUrl = JSON.parse(decodeURIComponent(options.backUrl));
      if (backUrl.options) {
        for (let key in backUrl.options) {
          const value = backUrl.options[key]
          backUrl.backUrl += `${key}=${value}&`
        }
      }
      this.setData({
        backUrl: backUrl.backUrl
      })
    }
    this.getTestLoginInfo()
    this.init();
  },
  onReachBottom() {
  },
  onPullDownRefresh() {
@@ -42,7 +54,92 @@
  },
  init() {
    this.getSubjectList();
    this.getCourseList();
    this.getCourseTypeListList();
    this.getBookTypeList();
    this.getReadBookList();
    this.getTextbookListList();
    this.getRankingList()
  },
  // 获取测试登录时的token
  getTestLoginInfo() {
    const token = wx.getStorageSync(app.config.tokenKey)
    if (!token) {
      wx.login({
        success: (res) => {
          wx.getUserInfo({
            success: (infoRes) => {
              app.MG.identity.checkWeChatAppAccount({
                code: res.code,
                appCode: app.config.appRefCode,
                encryptedData: infoRes.encryptedData,
                iv: infoRes.iv
              }).then(loginRes => {
                if (!loginRes) {
                  // wx.navigateTo({
                  //   url: "/pages/index/bindInfo/index?code=" + res.code,
                  // });
                } else {
                  wx.login({
                    success: (res) => {
                      app.MG.identity.loginByWeChatAppCode({
                        code: res.code,
                        appRefCode: app.config.appRefCode,
                        platform: "weChatApp",
                        encryptedData: infoRes.encryptedData,
                        iv: infoRes.iv
                      }).then(res => {
                        if (res && res.status == "Ok") {
                          wx.setStorageSync(app.config.tokenKey, res.token);
                          setSessionGuid()
                          this.getCurrentUserInfo()
                        }
                      })
                    },
                  })
                }
              })
            }
          })
        },
      })
    }
  },
  getCurrentUserInfo() {
    app.MG.identity.getCurrentAppUser().then(res => {
      console.log(res, "userInfo");
      // 用户信息优先级:教师认证 > 微信 > 学生(注册时默认)
      if (res) {
        let defaultUser = {};
        let WeChatInfo = res.infoList.find((item) => item.type === "WeChat");
        let phoneNumber = res.secretList.find(i => i.type == 'MobilePhone')
        if (WeChatInfo) {
          defaultUser = {
            nickName: WeChatInfo.name,
            avatarUrl: WeChatInfo.icon,
            weChatId: WeChatInfo.id
          }
        }
        if (phoneNumber) {
          defaultUser.phoneNumber = phoneNumber.credential
        }
        this.setData({
          userInfo: defaultUser,
        })
        wx.setStorageSync(app.config.userInfoKey, JSON.stringify(this.data.userInfo));
      }
      if (this.data.backUrl) {
        wx.navigateTo({
          url: this.data.backUrl,
        })
      } else {
        wx.switchTab({
          url: '/pages/home/home'
        })
      }
    });
  },
  getBannerList() {
    const list = []
@@ -115,7 +212,7 @@
      },
      paging: {
        start: 0,
        size: 3
        size: 4
      },
      fields: {
        liveTime: [],
@@ -125,16 +222,46 @@
      }
    }
    app.MG.store.getProductList(obj).then((res) => {
      res.datas.forEach((item) => {
        item.liveTime = item.liveTime ? moment(item.liveTime).format("MM-DD HH:mm:ss") : '';
        item.startTime = item.startTime ? moment(item.startTime).format("MM-DD HH:mm:ss") : '';
        item.price = item.price ? item.price.toFixed(2) : item.price;
      });
      this.setData({
        specialSubjectList: res.datas
      })
    })
  },
  //精选课程分类
  getCourseTypeListList() {
    const data = {
      path: 'jsek_homepageDigitalCourses',
      filterList: [],
      queryType: '\\',
      searchList: [],
      size: '20',
      start: '0',
      storeRefCode: app.config.digitalCourses,
      sort: { type: 'Asc', field: 'LinkOrder' }
    }
    app.MG.store.getStoreChannelList(data).then((res) => {
      if (res.datas && res.datas.length > 0) {
        let dataList = [];
        dataList.push(...res.datas)
        this.setData({
          courseTypeList: dataList,
          activeItem: 0
        })
        this.getCourseList(res.datas[0])
      }
    })
  },
  //精选课程列表
  getCourseList(item) {
    const obj = {
      storeInfo: "app.config.goodsStore",
      path: 'jsek_homepageDigitalTextbooks',
      path: item.pathList + '\\' + item.id,
      coverSize: {
        width: 260
      },
@@ -150,9 +277,135 @@
      }
    }
    app.MG.store.getProductList(obj).then((res) => {
      res.datas.forEach((item) => {
        item.price = item.price ? item.price.toFixed(2) : item.price;
      });
      this.setData({
        courseList: res.datas
      })
    })
  },
  tabChangeHandle(item) {
    let info = this.data.courseTypeList[item.detail.value]
    this.getCourseList(info)
  },
  //图书服务分类
  getBookTypeList() {
    const data = {
      path: 'jsek_homepageBookService',
      filterList: [],
      queryType: '\\',
      searchList: [],
      size: '20',
      start: '0',
      storeRefCode: app.config.goodsStore,
      sort: { type: 'Asc', field: 'LinkOrder' }
  }
    app.MG.store.getStoreChannelList(data).then((res) => {
      if (res.datas && res.datas.length > 0) {
        let dataList = [];
        dataList.push(...res.datas)
        this.setData({
          bookTypeList: dataList,
          activeItem1: 0
        })
        this.getBooksList(dataList[0])
      }
    })
  },
  //图书服务列表
  getBooksList(item) {
    const obj = {
      storeInfo: app.config.goodsStore,
      path: item.pathList + '\\' + item.id,
      queryType: '*',
      coverSize: {
        width: 150
      },
      paging: {
        start: 0,
        size: 6
      },
      fields: {
        author: []
      }
    }
    app.MG.store.getProductList(obj).then((res) => {
      this.setData({
        booksList: res.datas,
      })
    })
  },
  //图书服务
  tabBookClick(item) {
    let info = this.data.bookTypeList[item.detail.value]
    this.getBooksList(info)
  },
  //数字阅读
  getReadBookList() {
    const obj = {
      storeInfo: app.config.digitalTextbooks,
      path: 'jsek_homepageDigitalTextbooks',
      coverSize: {
        width: 150
      },
      paging: {
        start: 0,
        size: 3
      },
      fields: {
        author: []
      }
    }
    app.MG.store.getProductList(obj).then((res) => {
      this.setData({
        readBookList: res.datas
      })
    })
  },
  //数字教材
  getTextbookListList() {
    const obj = {
      storeInfo: app.config.digitalTextbooks,
      path: 'jsek_homepageDigitalTextbooks',
      coverSize: {
        width: 150
      },
      paging: {
        start: 0,
        size: 6
      },
      fields: {
        author: [],
      }
    }
    app.MG.store.getProductList(obj).then((res) => {
      this.setData({
        textbookList: res.datas
      })
    })
  },
  //获取排行榜
  getRankingList() {
    const obj = {
      storeInfo: app.config.digitalTextbooks,
      path: 'jsek_homepageDigitalTextbooks',
      coverSize: {
        width: 150
      },
      paging: {
        start: 0,
        size: 6
      },
      fields: {
        author: [],
      }
    }
    app.MG.store.getProductList(obj).then((res) => {
      this.setData({
        rankingList: res.datas
      })
    })
  }
});
pages/home/home.json
@@ -16,6 +16,7 @@
    "goods-list": "/components/goods-list/index",
    "load-more": "/components/load-more/index",
    "t-grid": "tdesign-miniprogram/grid/grid",
    "t-grid-item": "tdesign-miniprogram/grid-item/grid-item"
    "t-grid-item": "tdesign-miniprogram/grid-item/grid-item",
    "t-empty": "tdesign-miniprogram/empty/empty"
  }
}
pages/home/home.wxml
@@ -22,22 +22,180 @@
      <view class="icon">
        <t-image src="/static/images/home/zhuantitaolun.png" mode="heightFix" class="iconImage" />
      </view>
      <view bindtap="onMoreGuide">
      <view bindtap="onMoreGuide" class="flex">
        <text class="more">更多</text>
        <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
      </view>
    </view>
    <view>
      <view wx:for="{{specialSubjectList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}">
    <view class="listBox">
      <view wx:for="{{specialSubjectList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="listItemBox">
        <view class="listItem">
        <view class="specialSubject-img">
          <t-image src="{{item.icon}}" mode="aspectFill" width="50" height="50" />
            <image src="{{item.icon}}" mode="aspectFill" class="img" />
        </view>
        <view class="body-info">
          <view>{{item.name}}</view>
            <view class="name">{{item.name}}</view>
            <view class="time" wx:if="{{item.liveTime}}">直播时间:<text>{{item.liveTime}}</text></view>
            <view class="time" wx:if="{{item.startTime}}">开播时间:<text>{{ item.startTime }}</text></view>
            <view class="time" wx:if="{{!item.liveTime && !item.startTime}}">开播时间:<text class="grey">待定</text></view>
            <view class="flex jc-sb">
              <text class="author">{{item.lecturer}}</text>
              <text class="price" wx:if="{{item.price == 0}}">免费</text>
              <text class="price" wx:if="{{item.price !== 0}}">¥{{item.price}}</text>
        </view>
      </view>
    </view>
      </view>
    </view>
    <view class="tabCardPublic">
      <view class="icon">
        <t-image src="/static/images/home/jingxuankecheng@2x.png" mode="heightFix" class="iconImage" />
      </view>
      <view bindtap="onMoreGuide" class="flex">
        <text class="more">更多</text>
        <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
      </view>
    </view>
    <view class="home-page-tabs">
      <t-tabs t-class="t-tabs" t-class-active="tabs-external__active" t-class-item="tabs-external__item" defaultValue="{{activeItem}}" space-evenly="{{false}}" bind:change="tabChangeHandle">
        <t-tab-panel wx:for="{{courseTypeList}}" wx:for-index="index" wx:key="index" label="{{item.name}}" value="{{index}}" />
      </t-tabs>
    </view>
    <view class="listBox1">
      <view wx:if="{{courseList.length>0}}">
        <view wx:for="{{courseList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="listItemBox">
          <view class="listItem flex">
            <view class="specialSubject-img">
              <image src="{{item.icon}}" mode="aspectFill" class="img" />
            </view>
            <view class="body-info">
              <view class="name">{{item.name}}</view>
              <view class="flex jc-sb">
                <text class="author">{{item.courseLeader}}</text>
                <text>{{item.classHours}}课时</text>
              </view>
              <view class="priceBox flex jc-sb">
                <text class="price" wx:if="{{item.price == 0}}">免费</text>
                <text class="price" wx:if="{{item.price !== 0}}">¥{{item.price}}</text>
                <image src="/static/images/home/home-cart.png" mode="aspectFill" class="addCartImg" />
              </view>
            </view>
          </view>
        </view>
      </view>
      <view class="empyt" wx:else>
        <t-empty icon="folder-open" description="暂无数据" font-size="80" />
      </view>
    </view>
    <view class="tabCardPublic">
      <view class="icon">
        <t-image src="/static/images/home/tushufuwu@2x.png" mode="heightFix" class="iconImage" />
      </view>
      <view bindtap="onMoreGuide" class="flex">
        <text class="more">更多</text>
        <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
      </view>
    </view>
    <view class="home-page-tabs">
      <t-tabs t-class="t-tabs" t-class-active="tabs-external__active" t-class-item="tabs-external__item" defaultValue="{{activeItem1}}" space-evenly="{{false}}" bind:change="tabBookClick">
        <t-tab-panel wx:for="{{bookTypeList}}" wx:for-index="index" wx:key="index" label="{{item.name}}" value="{{index}}" />
      </t-tabs>
    </view>
    <view class="listBox2">
      <view wx:if="{{booksList.length > 0}}" class="flex">
        <view wx:for="{{booksList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="booksListItemBox">
          <view class="listItem">
            <view class="specialSubject-img">
              <image src="{{item.icon}}" mode="aspectFill" class="img" />
            </view>
            <view class="body-info">
              <view class="name">{{item.name}}</view>
              <view class="author">{{item.author}}</view>
            </view>
          </view>
        </view>
      </view>
      <view class="empyt" wx:else>
        <t-empty icon="folder-open" description="暂无数据" font-size="80" />
      </view>
    </view>
    <view class="tabCardPublic">
      <view class="icon">
        <t-image src="/static/images/home/shuziyuedu1@2x.png" mode="heightFix" class="iconImage" />
      </view>
      <view bindtap="onMoreGuide" class="flex">
        <text class="more">更多</text>
        <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
      </view>
    </view>
    <view class="listBox2 flex">
      <view wx:for="{{readBookList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="booksListItemBox">
        <view class="listItem">
          <view class="specialSubject-img">
            <image src="{{item.icon}}" mode="aspectFill" class="img" />
          </view>
          <view class="body-info">
            <view class="name">{{item.name}}</view>
            <view class="author">{{item.author}}</view>
          </view>
        </view>
      </view>
    </view>
    <view class="tabCardPublic">
      <view class="icon">
        <t-image src="/static/images/home/shuzijiaocai1@2x.png" mode="heightFix" class="iconImage" />
      </view>
      <view bindtap="onMoreGuide" class="flex">
        <text class="more">更多</text>
        <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
      </view>
    </view>
    <view class="listBox3">
      <view wx:if="{{textbookList.length > 0}}" class="listBox3">
        <view wx:for="{{textbookList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="textbooksItemBox">
          <view class="listItem flex">
            <view class="specialSubject-img">
              <image src="{{item.icon}}" mode="aspectFill" class="img" />
            </view>
            <view class="body-info">
              <view class="name">{{item.name}}</view>
              <view class="introduction">{{item.description}}</view>
              <view class="author">{{item.author}}</view>
              <view class="priceBox flex jc-sb">
                <text class="price" wx:if="{{item.price == 0}}">免费</text>
                <text class="price" wx:if="{{item.price !== 0}}">¥{{item.price}}</text>
                <image src="/static/images/home/home-cart.png" mode="aspectFill" class="addCartImg" />
              </view>
            </view>
          </view>
        </view>
      </view>
      <view class="empyt" wx:else>
        <t-empty icon="folder-open" description="暂无数据" font-size="80" />
      </view>
    </view>
    <view class="tabCardPublic">
      <view class="icon">
        <t-image src="/static/images/home/paihangbang@2x.png" mode="heightFix" class="iconImage" />
      </view>
      <view bindtap="onMoreGuide" class="flex">
        <text class="more">更多</text>
        <t-icon name="chevron-right" size="32rpx" color="#ff6d00" />
      </view>
    </view>
    <view class="listBox2 rankingList flex">
      <view wx:for="{{rankingList}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}" class="booksListItemBox">
        <view class="listItem">
          <view class="specialSubject-img">
            <image src="{{item.icon}}" mode="aspectFill" class="img" />
          </view>
          <view class="body-info">
            <view class="name">{{item.name}}</view>
            <view class="author">{{item.author}}</view>
          </view>
        </view>
      </view>
    </view>
  </view>
  <load-more list-is-empty="{{!goodsList.length}}" status="{{goodsListLoadStatus}}" bind:retry="onReTry" />
  <t-toast id="t-toast" />
pages/home/home.wxss
@@ -3,39 +3,16 @@
  padding-bottom: calc(env(safe-area-inset-bottom) + 96rpx);
}
.home-page-header {
  position: relative;
.flex {
  display: flex;
}
.home-page-header .search {
  position: absolute;
  top: 20rpx;
  left: 0;
  width: 100%;
  z-index: 99;
}
.home-page-header .t-search__input-container {
  border-radius: 15rpx !important;
  margin: 0 24rpx;
  height: 64rpx !important;
}
.home-page-header .t-search__input {
  font-size: 28rpx !important;
  color: rgb(116, 116, 116) !important;
}
.home-page-header .swiper-wrap .t-swiper-host {
  border-radius: 0;
}
.home-page-header .t-image__swiper {
  width: 100%;
  height: 300rpx;
.jc-sb {
  justify-content: space-between
}
.home-page-container {
  margin-top: 20rpx;
  display: block;
  padding: 0 24rpx;
}
@@ -45,13 +22,14 @@
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20rpx 5rpx;
  margin: 20rpx 5rpx;
  box-sizing: border-box;
  border-bottom: 2rpx solid #fadfbc;
}
.tabCardPublic .icon {
  width: 246rpx;
  height: 72rpx;
  width: 156rpx;
  height: 48rpx;
}
.tabCardPublic .icon .t-image {
@@ -61,5 +39,213 @@
.tabCardPublic .more {
  font-size: 24rpx;
  color: #999;
  color: #ff6d00;
}
.listBox {
  padding: 20rpx 0;
  display: flex;
  flex-flow: row wrap;
  justify-content: space-between;
}
.listBox .listItemBox {
  width: 49%;
  margin-bottom: 30rpx;
}
.listItemBox .listItem {
  background: #fff;
  box-sizing: border-box;
  border-radius: 5px;
  overflow: hidden;
  box-shadow: 0px 0px 20rpx 2px #f1f1f1;
}
.listBox .specialSubject-img {
  width: 100%;
  height: 120rpx;
}
.specialSubject-img image {
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.body-info {
  padding: 20rpx;
  font-size: 28rpx;
}
.body-info .name {
  font-size: 32rpx;
  height: 88rpx;
  color: #333333;
  font-weight: bold;
  line-height: 44rpx;
  display: -webkit-box;
  margin-bottom: 10rpx;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  text-overflow: ellipsis;
}
.body-info .time {
  font-size: 26rpx;
  margin-bottom: 10rpx;
}
.body-info .author {
  font-size: 26rpx;
  display: flex;
  justify-content: space-between;
}
.body-info .price {
  font-size: 26rpx;
  color: #ff6d00;
}
.t-tabs .t-tabs__item--active {
  color: #ff6d00;
  font-size: 30rpx;
  /* background-image: url('/static/images/home/click-icon@2x.png'); */
  background-repeat: no-repeat;
  background-size: cover;
  /* 确保背景图像不会被拉伸 */
  /* background-position: right; */
}
.t-tabs .t-tabs__track {
  display: none;
}
.t-tabs .t-tabs--top .t-tabs__scroll {
  border-bottom: none !important;
}
.t-tabs .t-tabs-scroll {
  border: none !important;
}
.listBox1,
.listBox2 {
  padding: 50rpx 0;
}
.listBox1 .listItemBox {
  height: 220rpx;
  margin-bottom: 30rpx;
}
.listBox1 .specialSubject-img {
  width: 400rpx;
  height: 218rpx;
}
.listBox1 .addCartImg,
.listBox3 .addCartImg {
  width: 30rpx;
  height: 30rpx;
}
.listBox1 .priceBox {
  margin-top: 14rpx;
}
.listBox2 {
  flex-flow: row wrap;
}
.listBox2 .flex {
  flex-flow: row wrap;
}
.listBox2 .booksListItemBox {
  width: calc(100%/3 - 30rpx);
  margin-bottom: 30rpx;
  margin-right: 45rpx;
}
.listBox2 :nth-child(3),
.listBox2 :nth-child(6) {
  margin-right: 0;
}
.listBox2 .specialSubject-img {
  height: 300rpx;
  width: 100%;
  box-shadow: 0px 0px 20rpx 2px #f1f1f1;
}
.listBox2 .body-info {
  padding: 20rpx 0;
}
.listBox2 .author {
  height: 30rpx;
  color: #333333;
  font-weight: bold;
  line-height: 30rpx;
  display: -webkit-box;
  margin-bottom: 10rpx;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
  overflow: hidden;
  text-overflow: ellipsis;
}
.listBox2 .empyt {
  padding: 20rpx;
  box-sizing: border-box;
}
.listBox3 .textbooksItemBox {
  margin-bottom: 30rpx;
}
.listBox3 .textbooksItemBox .specialSubject-img {
  width: 190rpx;
  height: 260rpx;
  box-shadow: 0px 0px 20rpx 2px #f1f1f1;
}
.listBox3 .body-info {
  width: calc(100% - 190rpx);
}
.listBox3 .name {
  font-size: 32rpx;
  height: 44rpx;
  color: #333333;
  font-weight: bold;
  line-height: 44rpx;
  display: -webkit-box;
  margin-bottom: 10rpx;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
  overflow: hidden;
  text-overflow: ellipsis;
}
.listBox3 .introduction {
  color: #B4B6BD;
  line-height: 36rpx;
  display: -webkit-box;
  margin-bottom: 10rpx;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  text-overflow: ellipsis;
}
.listBox3 .author {
  line-height: 40rpx;
  margin-bottom: 30rpx;
}
.readList {
  overflow: auto;
}
pages/personalCenter/activateProduct/index.js
New file
@@ -0,0 +1,66 @@
// pages/personalCenter/activateProduct/index.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/personalCenter/activateProduct/index.json
New file
@@ -0,0 +1,4 @@
{
  "navigationBarTitleText": "激活商品",
  "usingComponents": {}
}
pages/personalCenter/activateProduct/index.wxml
New file
@@ -0,0 +1,2 @@
<!--pages/personalCenter/activateProduct/index.wxml-->
<text>pages/personalCenter/activateProduct/index.wxml</text>
pages/personalCenter/activateProduct/index.wxss
New file
@@ -0,0 +1 @@
/* pages/personalCenter/activateProduct/index.wxss */
pages/personalCenter/certificate/index.js
New file
@@ -0,0 +1,66 @@
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/personalCenter/certificate/index.json
New file
@@ -0,0 +1,4 @@
{
  "navigationBarTitleText": "我的证书",
  "usingComponents": {}
}
pages/personalCenter/certificate/index.wxml
New file
@@ -0,0 +1 @@
pages/personalCenter/certificate/index.wxss
pages/personalCenter/components/user-center-card/index.js
New file
@@ -0,0 +1,35 @@
const AuthStepType = {
  ONE: 1,
  TWO: 2,
  THREE: 3,
};
Component({
  options: {
    multipleSlots: true,
  },
  properties: {
    currAuthStep: {
      type: Number,
      value: AuthStepType.ONE,
    },
    userInfo: {
      type: Object,
      value: {},
    },
    isNeedGetUserInfo: {
      type: Boolean,
      value: false,
    },
  },
  data: {
    defaultAvatarUrl:
      'https://cdn-we-retail.ym.tencent.com/miniapp/usercenter/icon-user-center-avatar@2x.png',
    AuthStepType,
  },
  methods: {
    gotoUserEditPage() {
      this.triggerEvent('gotoUserEditPage');
    },
  },
});
pages/personalCenter/components/user-center-card/index.json
New file
@@ -0,0 +1,7 @@
{
  "component": true,
  "usingComponents": {
    "t-icon": "tdesign-miniprogram/icon/icon",
    "t-avatar": "tdesign-miniprogram/avatar/avatar"
  }
}
pages/personalCenter/components/user-center-card/index.wxml
New file
@@ -0,0 +1,30 @@
<view class="user-center-card">
  <!-- 未登录的情况 -->
  <block wx:if="{{currAuthStep === AuthStepType.ONE}}">
    <view class="user-center-card__header" bind:tap="gotoUserEditPage">
      <t-avatar image="{{userInfo.avatarUrl || defaultAvatarUrl}}" class="user-center-card__header__avatar" />
      <view class="user-center-card__header__name">{{'请登录'}}</view>
      <view>设置</view>
    </view>
  </block>
  <!-- 已登录但未授权用户信息情况 -->
  <block wx:if="{{currAuthStep === AuthStepType.TWO}}">
    <view class="user-center-card__header">
      <t-avatar image="{{userInfo.avatarUrl || defaultAvatarUrl}}" class="user-center-card__header__avatar" />
      <view class="user-center-card__header__name">{{userInfo.nickName || '微信用户'}}</view>
      <!-- 需要授权用户信息,通过slot添加弹窗 -->
      <view class="user-center-card__header__transparent" wx:if="{{isNeedGetUserInfo}}">
        <slot name="getUserInfo" />
      </view>
      <!-- 不需要授权用户信息,仍然触发gotoUserEditPage事件 -->
      <view class="user-center-card__header__transparent" bind:tap="gotoUserEditPage" wx:else></view>
    </view>
  </block>
  <!-- 已登录且已经授权用户信息的情况 -->
  <block wx:if="{{currAuthStep === AuthStepType.THREE}}">
    <view class="user-center-card__header" bind:tap="gotoUserEditPage">
      <t-avatar t-class="avatar" mode="aspectFill" class="user-center-card__header__avatar" image="{{userInfo.avatarUrl || defaultAvatarUrl}}" />
      <view class="user-center-card__header__name">{{userInfo.nickName || '微信用户'}}</view>
    </view>
  </block>
</view>
pages/personalCenter/components/user-center-card/index.wxss
New file
@@ -0,0 +1,48 @@
.user-center-card {
  background-image: url('https://cdn-we-retail.ym.tencent.com/miniapp/template/user-center-bg-v1.png');
  background-size: cover;
  background-repeat: no-repeat;
  padding: 0 24rpx;
}
.user-center-card__header {
  margin-top: 160rpx;
  margin-bottom: 30rpx;
  margin-left: 20rpx;
  height: 96rpx;
  line-height: 48rpx;
  display: flex;
  justify-content: flex-start;
  align-items: center;
  color: #333;
  position: relative;
}
.user-center-card__header__avatar {
  width: 96rpx;
  height: 96rpx;
  border-radius: 48rpx;
  overflow: hidden;
}
.user-center-card__header__name {
  font-size: 36rpx;
  line-height: 48rpx;
  color: #333;
  font-weight: bold;
  margin-left: 24rpx;
  margin-right: 16rpx;
}
.user-center-card__header__transparent {
  position: absolute;
  left: 0;
  top: 0;
  background-color: transparent;
  height: 100%;
  width: 100%;
}
.user-center-card__icon {
  line-height: 96rpx;
}
pages/personalCenter/downloads/index.js
New file
@@ -0,0 +1,66 @@
// pages/personalCenter/downloads/index.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/personalCenter/downloads/index.json
New file
@@ -0,0 +1,4 @@
{
  "navigationBarTitleText": "我的下载",
  "usingComponents": {}
}
pages/personalCenter/downloads/index.wxml
New file
@@ -0,0 +1,2 @@
<!--pages/personalCenter/downloads/index.wxml-->
<text>pages/personalCenter/downloads/index.wxml</text>
pages/personalCenter/downloads/index.wxss
New file
@@ -0,0 +1 @@
/* pages/personalCenter/downloads/index.wxss */
pages/personalCenter/feedBack/index.js
New file
@@ -0,0 +1,66 @@
// pages/personalCenter/feedBack/index.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/personalCenter/feedBack/index.json
New file
@@ -0,0 +1,4 @@
{
  "navigationBarTitleText": "建议与反馈",
  "usingComponents": {}
}
pages/personalCenter/feedBack/index.wxml
New file
@@ -0,0 +1,2 @@
<!--pages/personalCenter/feedBack/index.wxml-->
<text>pages/personalCenter/feedBack/index.wxml</text>
pages/personalCenter/feedBack/index.wxss
New file
@@ -0,0 +1 @@
/* pages/personalCenter/feedBack/index.wxss */
pages/personalCenter/feedBackSubmit/index.js
New file
@@ -0,0 +1,66 @@
// pages/personalCenter/feedBackSubmit/index.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/personalCenter/feedBackSubmit/index.json
New file
@@ -0,0 +1,4 @@
{
  "navigationBarTitleText": "意见反馈",
  "usingComponents": {}
}
pages/personalCenter/feedBackSubmit/index.wxml
New file
@@ -0,0 +1,2 @@
<!--pages/personalCenter/feedBackSubmit/index.wxml-->
<text>pages/personalCenter/feedBackSubmit/index.wxml</text>
pages/personalCenter/feedBackSubmit/index.wxss
New file
@@ -0,0 +1 @@
/* pages/personalCenter/feedBackSubmit/index.wxss */
pages/personalCenter/index.js
New file
@@ -0,0 +1,197 @@
const app = getApp()
const menuData = [
  {
    title: '我的订单',
    icon: '/static/images/personal/order.png',
    url: '/pages/personalCenter/myOrder/index',
    type: 'order',
  },
  {
    title: '激活商品',
    icon: '/static/images/personal/jihuo.png',
    url: '/pages/personalCenter/activateProduct/index',
    type: 'activateProduct',
  },
  {
    title: '我的证书',
    icon: '/static/images/personal/certificate.png',
    url: '/pages/personalCenter/certificate/index',
    type: 'certificate',
  },
  {
    title: '我的收藏',
    icon: '/static/images/personal/wodeshoucang.png',
    url: '/pages/personalCenter/myCollection/index',
    type: 'collection',
  },
  {
    title: '我的下载',
    icon: '/static/images/personal/download.png',
    url: '/pages/personalCenter/downloads/index',
    type: 'download',
  },
  {
    title: '样书申请',
    icon: '/static/images/personal/yangshushenqing.png',
    url: '/pages/personalCenter/sampleBooks/index',
    type: 'sampleBook',
  },
  {
    title: '出书申请',
    icon: '/static/images/personal/chushu.png',
    url: '/pages/personalCenter/publishBooks/index',
    type: 'publishBooks',
  },
  {
    title: '我的上传',
    icon: '/static/images/personal/upload.png',
    url: '',
    type: 'upload',
  }
];
const moreMenu = [
  {
    title: '我的消息',
    icon: '/static/images/personal/notification.png',
    url: '/pages/personalCenter/myMassage/index',
    type: 'message',
  },
  {
    title: '建议与反馈',
    icon: '/static/images/personal/feedback.png',
    url: '/pages/personalCenter/feedback/index',
    type: 'feedback',
  }
];
const moreMenu1 = [
  {
    title: '关于我们',
    icon: '/static/images/personal/about.png',
    url: '',
    type: 'aboutUs',
  },
  {
    title: '联系我们',
    icon: '/static/images/personal/contact.png',
    url: '',
    type: 'contact',
  }
];
Page({
  /**
   * 页面的初始数据
   */
  data: {
    show: false,
    userInfo: {
      avatarUrl:
        'https://we-retail-static-1300977798.cos.ap-guangzhou.myqcloud.com/retail-ui/components-exp/avatar/avatar-1.jpg',
      nickName: 'TDesign',
      phoneNumber: '13438358888',
    },
    currAuthStep: 1,
    teacherState: {
      state: '',
      reasonTxt: '',
    },
    integral: 0,
    menuData,
    moreMenu,
    moreMenu1
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    if (wx.getStorageSync(app.config.userInfoKey)) {
      this.setData({
        show: true,
        userInfo: JSON.parse(wx.getStorageSync(app.config.userInfoKey))
      })
      if (typeof this.getTabBar === 'function' && this.getTabBar()) {
        this.getTabBar().setData({
          selected: 4 //这个数字是当前页面在tabBar中list数组的索引
        })
      }
      if (this.data.userInfo) {
        this.getTeacherInfo()
      }
    }
  },
  /**
 * 生命周期函数--监听页面隐藏
 */
  onHide() {
    this.setData({
      show: false
    })
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.init();
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  //教师信息
  getTeacherInfo() {
    const data = {
      start: 0,
      size: 10,
      topicIdOrRefCode: 'teacherRoleApproval',
      appRefCode: app.config.appRefCode,
      sort: {
        type: 'Desc',
        field: 'CreateDate'
      }
    }
    app.MG.ugc.getTopicMessageList(data).then((res) => {
      const resData = res.datas.find((i) => i.appUserCreator.userId == userId.value)
      if (resData) {
        this.setData({
          teacherState: {
            state: resData.state,
            reasonTxt: resData.feedBack != null ? JSON.parse(resData.feedBack).reason : ''
          }
        })
      }
    })
  },
  //点击目录
  toPages(item) {
    console.log(item)
    let info = item.target.dataset.info
    if (info.url) {
      wx.navigateTo({
        url: info.url
      })
    } else {
      wx.showToast({
        title: "建设中",
        icon: 'none',
        duration: 2000
      })
    }
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/personalCenter/index.json
New file
@@ -0,0 +1,9 @@
{
  "navigationBarTitleText": "个人中心",
  "navigationStyle": "custom",
  "usingComponents": {
    "t-user-center-card": "./components/user-center-card/index",
    "t-image": "/components/webp-image/index"
  },
  "enablePullDownRefresh": true
}
pages/personalCenter/index.wxml
New file
@@ -0,0 +1,63 @@
<image class="background" src="/static/images/personal/my-bg.png" mode="heightFix" />
<t-user-center-card userInfo="{{userInfo}}" isPhoneHide="{{true}}" name-class="custom-name-class" phone-class="custom-phone-class" avatar-class="customer-avatar-class" currAuthStep="{{currAuthStep}}" bind:gotoUserEditPage="gotoUserEditPage" />
<view class="content-wrapper">
  <view class="topBox">
    <view class="teacherBox">
      <view>
        <view class="wait" wx:if="{{teacherState.state == 'WaitAudit'}}">等待审核</view>
        <view class="yes" wx:if="{{teacherState.state == 'Normal'}}">已认证</view>
        <view class="no" wx:if="{{teacherState.state == 'Reject'}}">已驳回</view>
        <view class="wait" wx:if="{{teacherState.state == ''}}">待认证</view>
        <view class="title"><text>教师认证</text>
          <text class="change-info" wx:if="{{teacherState.state == ''}}">认证</text>
          <text class="change-info" wx:if="{{teacherState.state == 'Normal' || teacherState.state == 'Reject'}}">修改</text>
        </view>
      </view>
      <view>
        <view>{{integral}}</view>
        <view class="title">积分</view>
      </view>
    </view>
  </view>
  <view class="domainBox">
    <view class="title">
      <text>常用功能</text>
    </view>
    <view class="domainList">
      <view wx:for="{{menuData}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toPages" data-info="{{item}}" class="listItem">
        <view class="icon">
          <t-image src="{{item.icon}}" mode="heightFix" class="img" />
        </view>
        <view class="label">
          <text>{{item.title}}</text>
        </view>
      </view>
    </view>
  </view>
  <view class="domainBox">
    <view class="title">
      <text>更多功能</text>
    </view>
    <view class="domainList1">
      <view wx:for="{{moreMenu}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toPages" data-info="{{item}}" class="listItem">
        <view class="icon">
          <t-image src="{{item.icon}}" mode="heightFix" class="img" />
        </view>
        <view class="label">
          <text>{{item.title}}</text>
        </view>
      </view>
    </view>
    <view class="domainList2">
      <view wx:for="{{moreMenu1}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toPages" data-info="{{item}}" class="listItem">
        <view class="icon">
          <t-image src="{{item.icon}}" mode="heightFix" class="img" />
        </view>
        <view class="label">
          <text>{{item.title}}</text>
        </view>
      </view>
    </view>
  </view>
</view>
pages/personalCenter/index.wxss
New file
@@ -0,0 +1,116 @@
page {
  background-color: #f0f2f5;
  box-sizing: border-box;
  padding-bottom: calc(env(safe-area-inset-bottom) + 96rpx);
}
.background {
  position: fixed;
  top: 0;
  left: 0;
  width: 100% !important;
  height: 680rpx;
}
.content-wrapper {
  position: relative;
  padding: 30rpx;
}
.topBox {
  width: 100%;
  background-color: #fff;
  border-radius: 20rpx;
  box-shadow: 0px 0px 20rpx 2px #f1f1f1;
}
.teacherBox {
  display: flex;
  padding: 40rpx 20rpx;
  justify-content: space-around;
  text-align: center;
  font-size: 28rpx;
}
.teacherBox .title {
  margin-top: 20rpx;
  line-height: 40rpx;
}
.teacherBox .change-info {
  color: #ff6d00;
  margin-left: 20rpx;
}
.wait {
  color: #ff6d00;
}
.no {
  color: #EE1818
}
.yes {
  color: #1FBC1F
}
.domainBox {
  width: 100%;
  margin: 20rpx auto;
  background-color: #fff;
  border-radius: 20rpx;
  box-shadow: 0px 0px 20rpx 2px #f1f1f1;
}
.domainBox .title {
  font-weight: bold;
  padding: 30rpx;
}
.domainList {
  width: 100%;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  padding-bottom: 30rpx;
}
.domainList1 {
  /* width: 100%; */
  display: flex;
  /* flex-wrap: wrap; */
  border-bottom: 2rpx solid #f1f1f1;
  margin: 0 30rpx;
}
.domainList2 {
  display: flex;
  margin: 0 30rpx;
}
.listItem {
  width: 160rpx;
  min-width: 160rpx;
  flex-shrink: 0;
  padding: 30rpx 0;
}
.listItem .icon {
  width: 46rpx;
  height: 46rpx;
  margin: 0 auto;
}
.listItem .icon .t-image {
  width: 100%;
  height: 100%;
  object-fit: contain;
}
.listItem .label {
  width: 100%;
  font-size: 28rpx;
  line-height: 40rpx;
  text-align: center;
  margin-top: 20rpx;
}
pages/personalCenter/myCollection/index.js
New file
@@ -0,0 +1,66 @@
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/personalCenter/myCollection/index.json
New file
@@ -0,0 +1,4 @@
{
  "navigationBarTitleText": "我的收藏",
  "usingComponents": {}
}
pages/personalCenter/myCollection/index.wxml
New file
@@ -0,0 +1 @@
<text>我的收藏</text>
pages/personalCenter/myCollection/index.wxss
pages/personalCenter/myMassage/index.js
New file
@@ -0,0 +1,144 @@
const app = getApp();
Page({
  /**
   * 页面的初始数据
   */
  data: {
    list: [],
    //分页
    page: 1,
    limit: 10,
    pageTotalCount: 0,
    bottomLoading: false,
    isMoreData: false,
    // 返回顶部
    isBackTop: false,
    setScrollValue: 0,
    skeletonLoding: true,
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getDataList(false);
  },
  getDataList(isReachBottom) {
    app.MG.app.getAppMessageList({
      appRefCode: app.config.appRefCode,
      start: this.data.page * this.data.limit - this.data.limit,
      size: this.data.limit,
      sort: {
        type: "Desc",
        field: "CreateDate"
      }
    })
      .then(res => {
        try {
          if (res.datas.length > 0) {
            let dataList = res.datas;
            //触底加载新数据并保留老数据
            if (isReachBottom) {
              dataList = [...this.data.list, ...dataList] //将新数据加入老数据中
            }
            this.setData({
              list: dataList,
              pageTotalCount: res.total,
              bottomLoading: false,
              isMoreData: dataList.length > 0 ? false : true,
              skeletonLoding: false,
            })
          } else {
            this.setData({
              skeletonLoding: false,
            })
          }
        } catch (error) {
          console.log(error)
        }
      })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    if (this._freshing) return
    this.setData({
      page: 1,
      limit: 10,
      pageTotalCount: 0,
      bottomLoading: false,
      isMoreData: false
    })
    this._freshing = true;
    this.setData({
      triggered: false,
    })
    this.getDataList(false);
    this._freshing = false
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    this.setData({
      bottomLoading: true,
      isMoreData: false
    })
    let bool = false;
    if (this.data.pageTotalCount > this.data.list.length) {
      bool = true;
      this.setData({
        page: this.data.page + 1,
      })
    } else {
      setTimeout(() => {
        this.setData({
          bottomLoading: false,
          isMoreData: true
        })
      }, 100)
      return false;
    }
    this.getDataList(bool);
  },
  // 监听滚动距离
  onPageScroll(e) {
    if (e && e.scrollTop >= 1000) {
      this.setData({
        isBackTop: true
      })
    } else {
      this.setData({
        isBackTop: false
      })
    }
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/personalCenter/myMassage/index.json
New file
@@ -0,0 +1,10 @@
{
  "navigationBarTitleText": "我的消息",
  "usingComponents": {
    "t-back-top": "tdesign-miniprogram/back-top/back-top",
    "t-image": "tdesign-miniprogram/image/image",
    "t-pull-down-refresh": "tdesign-miniprogram/pull-down-refresh/pull-down-refresh",
    "t-loading": "tdesign-miniprogram/loading/loading",
    "t-empty": "tdesign-miniprogram/empty/empty"
  }
}
pages/personalCenter/myMassage/index.wxml
New file
@@ -0,0 +1,29 @@
<view class="container" wx:if="{{!skeletonLoding}}">
  <scroll-view class="scroll content" bind:scroll="onPageScroll" model:scroll-top="{{setScrollValue}}" scroll-y refresher-enabled="{{true}}" lower-threshold="{{200}}" refresher-threshold="{{80}}" refresher-default-style="none" refresher-triggered="{{triggered}}" bindrefresherpulling="{{refresh.onPulling}}" bindrefresherrefresh="onPullDownRefresh" bindscrolltolower="onReachBottom">
    <view slot="refresher" class="refresh-container">
      <view class="loading">
        <t-loading theme="circular" size="40rpx" text="正在刷新..." class="wrapper" />
      </view>
    </view>
    <view class="pageInfo" wx:if="{{list.length > 0}}">
      <view class="content-item" wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="index" bindtap="toList" data-info="{{item}}">
        <view>
          <text class="item-title">{{item.name}}</text>
        </view>
        <view class="imageBox">
          <t-image src="{{item.icon}}" mode="aspectFill" width="50" height="50" class="item-icon" />
        </view>
      </view>
    </view>
    <view wx:if="{{list.length == 0}}" class="empyt">
      <t-empty icon="folder-open" description="暂无数据" />
    </view>
    <view class="bottom-loading" wx:if="{{bottomLoading}}">
      <t-loading theme="circular" size="40rpx" text="加载中..." class="wrapper" />
    </view>
    <view class="bottom-loading" style="color: #ccc;font-size: 28rpx;" wx:if="{{isMoreData}}">
      <text>没有更多了</text>
    </view>
  </scroll-view>
  <t-back-top theme="round" wx:if="{{isBackTop}}" text="顶部" bind:to-top="onToTop"></t-back-top>
</view>
pages/personalCenter/myMassage/index.wxss
pages/personalCenter/myOrder/index.js
New file
@@ -0,0 +1,66 @@
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/personalCenter/myOrder/index.json
New file
@@ -0,0 +1,4 @@
{
  "navigationBarTitleText": "我的订单",
  "usingComponents": {}
}
pages/personalCenter/myOrder/index.wxml
New file
@@ -0,0 +1 @@
<text>我的订单</text>
pages/personalCenter/myOrder/index.wxss
pages/personalCenter/publishBooks/index.js
New file
@@ -0,0 +1,66 @@
// pages/personalCenter/publishBooks/index.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/personalCenter/publishBooks/index.json
New file
@@ -0,0 +1,4 @@
{
  "navigationBarTitleText": "出书申请",
  "usingComponents": {}
}
pages/personalCenter/publishBooks/index.wxml
New file
@@ -0,0 +1,2 @@
<!--pages/personalCenter/publishBooks/index.wxml-->
<text>pages/personalCenter/publishBooks/index.wxml</text>
pages/personalCenter/publishBooks/index.wxss
New file
@@ -0,0 +1 @@
/* pages/personalCenter/publishBooks/index.wxss */
pages/personalCenter/sampleBooks/index.js
New file
@@ -0,0 +1,66 @@
// pages/personalCenter/sampleBooks/index.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/personalCenter/sampleBooks/index.json
New file
@@ -0,0 +1,4 @@
{
  "navigationBarTitleText": "样书申请",
  "usingComponents": {}
}
pages/personalCenter/sampleBooks/index.wxml
New file
@@ -0,0 +1,2 @@
<!--pages/personalCenter/sampleBooks/index.wxml-->
<text>pages/personalCenter/sampleBooks/index.wxml</text>
pages/personalCenter/sampleBooks/index.wxss
New file
@@ -0,0 +1 @@
/* pages/personalCenter/sampleBooks/index.wxss */
pages/teacherCertification/index.js
New file
@@ -0,0 +1,66 @@
// pages/bookServices/index.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  }
})
pages/teacherCertification/index.json
New file
@@ -0,0 +1,6 @@
{
  "navigationBarTitleText": "教师认证",
  "enablePullDownRefresh": true,
  "backgroundTextStyle": "light",
  "usingComponents": {}
}
pages/teacherCertification/index.wxml
New file
@@ -0,0 +1,92 @@
<view class="container">
  <view class="tips">
    仅限学校本课程任课教师申请;请上传有效在职教师工作证将有助于审核。
  </view>
  <view class="page-body">
    <form catchsubmit="formSubmit" catchreset="formReset" class="formBox">
      <view class="from-item">
        <view class="label">
          当前状态:
        </view>
        <view class="item-content">
          <input class="weui-input" name="input" placeholder="" />
        </view>
      </view>
      <view class="from-item">
        <view class="label">
          学校:
        </view>
        <view class="item-content">
          <input class="weui-input" name="input" placeholder="请输入学校" />
        </view>
      </view>
      <view class="from-item">
        <view class="label">
          真实姓名:
        </view>
        <view class="item-content">
          <input class="weui-input" name="input" placeholder="请输入真实姓名" />
        </view>
      </view>
      <view class="from-item">
        <view class="label">
          职称:
        </view>
        <view class="item-content">
          <!-- <input class="weui-input" name="input" placeholder="请选择职称" /> -->
        </view>
      </view>
      <view class="from-item">
        <view class="label">
          任教课程:
        </view>
        <view class="item-content">
          <input class="weui-input" name="input" placeholder="请输入任教课程" />
        </view>
      </view>
      <view class="from-item">
        <view class="label">
          手机号:
        </view>
        <view class="item-content">
          <input class="weui-input" name="input" placeholder="请输入手机号" />
        </view>
      </view>
      <view class="from-item">
        <view class="label">
          座机:
        </view>
        <view class="item-content">
          <input class="weui-input" name="input" placeholder="请输入座机" />
        </view>
      </view>
      <view class="from-item">
        <view class="label">
          邮箱:
        </view>
        <view class="item-content">
          <input class="weui-input" name="input" placeholder="请输入邮箱" />
        </view>
      </view>
      <view class="from-item">
        <view class="label">
          详细地址:
        </view>
        <view class="item-content">
          <input class="weui-input" name="input" placeholder="请输入详细地址" />
        </view>
      </view>
      <view class="from-item">
        <view class="label">
          在职教师工作证:
        </view>
        <view class="item-content">
        </view>
      </view>
      <view class="btn-area">
        <button class="submit" formType="submit">提交</button>
      </view>
    </form>
  </view>
</view>
pages/teacherCertification/index.wxss
New file
@@ -0,0 +1,36 @@
.tips {
  line-height: 24px;
  font-size: 28rpx;
  padding: 5px;
  background: rgba(255, 108, 0, 0.1);
  color: #ff6c00;
  text-align: center;
  margin: 0 auto 20px auto;
}
.page-body {
  padding: 20rpx;
  font-size: 28rpx;
}
.from-item {
  margin-bottom: 20rpx;
  display: flex;
}
.from-item .label {
  width: 240rpx;
  height: 68rpx;
  line-height: 68rpx;
}
.from-item .item-content {
  width: 56%;
  border: 2rpx solid #D9D9D9;
  padding: 10rpx;
}
.submit {
  background: #ff6c00;
  color: #fff;
}
pages/usercenter/index.wxss
@@ -25,9 +25,11 @@
  overflow: hidden;
  margin-bottom: 20rpx;
}
.icon-color {
  color: #aaa;
}
.cell-class {
  height: 100rpx;
  display: flex;
@@ -60,6 +62,7 @@
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
.order-content-t {
  margin-top: 10rpx;
  font-size: 24rpx;
@@ -73,6 +76,7 @@
  margin-bottom: env(safe-area-inset-bottom);
  border-radius: 16rpx 16rpx 0 0;
}
.popup-content .popup-title {
  background: #fff;
  text-align: center;
@@ -101,6 +105,7 @@
  transform-origin: left top;
  border-bottom: 2rpx solid #e5e5e5;
}
.popup-content .popup-phone,
.popup-content .popup-close {
  background: #fff;
@@ -114,12 +119,15 @@
  font-weight: 400;
  color: #333;
}
.popup-content .popup-phone.online {
  margin-bottom: 20rpx;
}
.popup-content .popup-phone.online::after {
  content: none;
}
.popup-content .popup-close {
  color: #333;
  border: 0;
@@ -138,9 +146,11 @@
  font-size: 24rpx;
  line-height: 32rpx;
}
.cell-box .order-group__left {
  margin-right: 0;
}
.cell-box .t-cell-padding {
  padding: 24rpx 18rpx 24rpx 32rpx;
}
services/home/home.js
@@ -8,61 +8,61 @@
        {
          text: '图书服务',
          key: 0,
          icon: '/static/images/home/1.png',
          icon: '/static/images/home/zhutichuban@2x.png',
          url: '/pages/bookServices/index',
        },
        {
          text: '数字阅读',
          key: 1,
          icon: '',
          icon: '/static/images/home/shuziyuedu@2x.png',
          url: '',
        },
        {
          text: '数字课程',
          key: 2,
          icon: "",
          icon: '/static/images/home/shuzikecheng@2x.png',
          url: '',
        },
        {
          text: '数字教材',
          key: 3,
          icon: "",
          icon: '/static/images/home/shuzijiaocai@2x.png',
          url: '',
        },
        {
          text: '专题讨论',
          key: 4,
          icon: "",
          icon: '/static/images/home/zhuantitaolun@2x.png',
          url: '',
        },
        {
          text: '线上书展',
          key: 5,
          icon: "",
          icon: '/static/images/home/xianshangshuzhan@2x.png',
          url: '',
        },
        {
          text: '书目下载',
          key: 6,
          icon: "",
          icon: '/static/images/home/shumuxiazai@2x.png',
          url: '',
        },
        {
          text: '教师认证',
          key: 7,
          icon: "",
          url: '',
          icon: '/static/images/home/jiaoshirenzheng@2x.png',
          url: '/pages/teacherCertification/index',
        },
        {
          text: '样书申请',
          key: 8,
          icon: "",
          icon: '/static/images/home/yangshushenqing@2x.png',
          url: '',
        },
        {
          text: '我要出书',
          key: 9,
          icon: "",
          icon: '/static/images/home/xueshuzhuzuo@2x.png',
          url: '',
        }
      ],
static/images/home/1.png
Binary files differ
static/images/home/Home-click@2x.png
static/images/home/Home@2x.png
static/images/home/cart-click@2x.png
static/images/home/cart@2x.png
static/images/home/click-icon@2x.png
static/images/home/home-bg@2x.png
static/images/home/home-cart.png
static/images/home/jiaoshirenzheng@2x.png
static/images/home/jingxuankecheng.png
Binary files differ
static/images/home/jingxuankecheng@2x.png
static/images/home/learn-click@2x.png
static/images/home/learn@2x.png
static/images/home/my-click@2x.png
static/images/home/my@2x.png
static/images/home/paihangbang@2x.png
static/images/home/service-click@2x.png
static/images/home/service@2x.png
static/images/home/shumuxiazai@2x.png
static/images/home/shuzijiaocai.png
Binary files differ
static/images/home/shuzijiaocai1@2x.png
static/images/home/shuzijiaocai@2x.png
static/images/home/shuzikecheng@2x.png
static/images/home/shuziyuedu1@2x.png
static/images/home/shuziyuedu@2x.png
static/images/home/tushufuwu.png
Binary files differ
static/images/home/tushufuwu@2x.png
static/images/home/xianshangshuzhan@2x.png
static/images/home/xueshuzhuzuo@2x.png
static/images/home/yangshushenqing@2x.png
static/images/home/zhuantitaolun.png

static/images/home/zhuantitaolun1@2x.png
static/images/home/zhuantitaolun@2x.png
static/images/home/zhutichuban@2x.png
static/images/home/zuoxia-p@2x.png
static/images/personal/about.png
static/images/personal/certificate.png
static/images/personal/chushu.png
static/images/personal/contact.png
static/images/personal/download.png
static/images/personal/feedback.png
static/images/personal/jihuo.png
static/images/personal/my-bg.png
static/images/personal/notification.png
static/images/personal/order.png
static/images/personal/setting.png
static/images/personal/upload.png
static/images/personal/wodeshoucang.png
static/images/personal/yangshushenqing.png