闫增涛
2024-03-22 986d4798a9dad75b6ae617e52ea2918dfacd3708
图书详情、答题器bug修改
17个文件已修改
944 ■■■■ 已修改文件
.vscode/settings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/detail/components/brief/index.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/detail/components/testResource/testResource.js 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/detail/index.wxml 225 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/detail/index.wxss 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/examination/examination.js 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/examination/examination.wxml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/examination/questionList/index.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/examination/questionList/index.wxml 237 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/examination/questionList/index.wxss 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/examination/questionOptions/index.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/examination/questionOptions/index.wxml 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/examination/questionSchedule/index.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/examination/questionSchedule/index.wxml 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/examination/questionSchedule/index.wxss 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/list/index.wxml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packageBookService/pages/bookServices/list/index.wxss 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vscode/settings.json
@@ -32,7 +32,7 @@
  },
  "editor.tabSize": 2,
  "[wxml]": {
    "editor.defaultFormatter": "wechat.miniprogram.wxml-language-features"
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[css]": {
    "editor.defaultFormatter": "HookyQR.beautify"
packageBookService/pages/bookServices/detail/components/brief/index.js
@@ -8,6 +8,5 @@
      type: String,
      value: '',
    },
  },
  }
});
packageBookService/pages/bookServices/detail/components/testResource/testResource.js
@@ -42,6 +42,9 @@
          }
        })
      }
      wx.showLoading({
        title: '加载中',
      })
      // 获取章节下是否有题目
      let idPathList = []
      let query = {
@@ -55,6 +58,7 @@
        }
      }
      if (value.childrenFolderCount == 0) {
        wx.hideLoading()
        return wx.showToast({
          icon: "error",
          title: '暂无数据',
@@ -70,16 +74,7 @@
          })
        })
      }
      // query: {
      //   title: bookData.value.test,
      //   bookId: route.query.bookId,
      //   productLinkPath: data.productLinkPath,
      //   answerTitle: data.name,
      //   answerType: 'option',
      //   rootCmsItemId: bookData.value.rootCmsItemId,
      //   idPathList: JSON.stringify(idPathList)
      // }
      wx.hideLoading()
      wx.navigateTo({
        url: `/packageBookService/pages/bookServices/examination/examination?bookId=${this.properties.bookInfo.id}&productLinkPath=${value.productLinkPath}&rootCmsItemId=${this.properties.bookInfo.rootCmsItemId}&idPathList=${JSON.stringify(idPathList)}&answerTitle=${value.name}&answerType=${'option'}`,
      })
@@ -106,6 +101,9 @@
      })
    },
    async getMockId() {
      wx.showLoading({
        title: '加载中'
      })
      let id
      let query = {
        start: 0,
@@ -124,6 +122,7 @@
      //   return logIn()
      // }
      const mockid = await this.getMockId()
      wx.hideLoading()
      const item = e.currentTarget.dataset.item
      wx.navigateTo({
        url: `/packageBookService/pages/bookServices/examination/examination?bookId=${this.properties.bookInfo.id}&rootCmsItemId=${this.properties.bookInfo.rootCmsItemId}&answerTitle=${item.name}&answerType=${'mock'}&uuid=${item.id}&mockid=${mockid}`,
packageBookService/pages/bookServices/detail/index.wxml
@@ -3,7 +3,12 @@
<view style="width: 100%; height: {{barHeight}}px; "></view>
<view class="nacigationBar" style="width: 70%; height: {{navBarHeight}}px;">
  <view>
    <t-icon name="chevron-left" size="30" data-name="{{item}}" bind:click="goBack" />
    <t-icon
      name="chevron-left"
      size="30"
      data-name="{{item}}"
      bind:click="goBack"
    />
  </view>
  <view class="navbar-title">{{options.name}}</view>
</view>
@@ -14,19 +19,33 @@
    <view class="book-detail">
      <view class="detail-left">
        <view class="book-img">
          <t-image src="{{bookDetail.icon}}" mode="aspectFill" width="120" height="170" aria-label="{{bookDetail.name}}" />
          <t-image
            src="{{bookDetail.icon}}"
            mode="aspectFill"
            width="120"
            height="170"
            aria-label="{{bookDetail.name}}"
          />
        </view>
        <view class="book-use">
          <view class="collect" bind:tap="setCollect">
            <view>
              <t-image src="/static/images/bookService/detail/collect.png" wx:if="{{!bookDetail.isFavourite}}"></t-image>
              <t-image src="/static/images/bookService/detail/collecting.png" wx:if="{{bookDetail.isFavourite}}"></t-image>
              <t-image
                src="/static/images/bookService/detail/collect.png"
                wx:if="{{!bookDetail.isFavourite}}"
              ></t-image>
              <t-image
                src="/static/images/bookService/detail/collecting.png"
                wx:if="{{bookDetail.isFavourite}}"
              ></t-image>
            </view>
            <view class="use-title">收藏</view>
          </view>
          <view class="suggest" bind:tap="suggestBtn">
            <view>
              <t-image src="/static/images/bookService/detail/suggest.png"></t-image>
              <t-image
                src="/static/images/bookService/detail/suggest.png"
              ></t-image>
            </view>
            <view class="use-title">我要建议</view>
          </view>
@@ -48,15 +67,24 @@
            <view class="li-content">{{bookDetail.isbn}}</view>
          </view>
          <view class="message-li">
            <view class="li-title" wx:if="{{bookDetail.publicationDate}}">出版时间:</view>
            <view class="li-title" wx:if="{{bookDetail.publicationDate}}"
              >出版时间:</view
            >
            <view class="li-content">{{bookDetail.publicationDate}}</view>
          </view>
          <view class="message-li" wx:if="{{bookDetail.class}}" style="height: 80rpx">
          <view
            class="message-li"
            wx:if="{{bookDetail.class}}"
            style="height: 80rpx"
          >
            <view class="li-title">图书分类:</view>
            <view class="class-name showTow">{{bookDetail.class}}</view>
          </view>
        </view>
        <t-image src="/static/images/bookService/detail/square.png" class="right-background"></t-image>
        <t-image
          src="/static/images/bookService/detail/square.png"
          class="right-background"
        ></t-image>
      </view>
    </view>
    <!-- 销售信息 -->
@@ -65,11 +93,16 @@
        <!-- 电子书售价 -->
        <view class="electron-price">
          <view>
            <t-image src="/static/images/bookService/detail/electon-price.png"></t-image>
            <t-image
              src="/static/images/bookService/detail/electon-price.png"
            ></t-image>
          </view>
          <view class="price">
            <view class="price-text">¥{{bookDetail.price == '0.00' ? '免费' :bookDetail.price}}</view>
            <view class="price-old" wx:if="{{bookDetail.oldPrice != '0.00'}}">¥{{bookDetail.oldPrice}} <view class="line"></view>
            <view class="price-text"
              >¥{{bookDetail.price == '0.00' ? '免费' :bookDetail.price}}</view
            >
            <view class="price-old" wx:if="{{bookDetail.oldPrice != '0.00'}}"
              >¥{{bookDetail.oldPrice}} <view class="line"></view>
            </view>
          </view>
          <view> </view>
@@ -77,61 +110,151 @@
        <!-- 纸质书售价 -->
        <view class="paper-price">
          <view>
            <t-image src="/static/images/bookService/detail/paper-price.png"></t-image>
            <t-image
              src="/static/images/bookService/detail/paper-price.png"
            ></t-image>
          </view>
          <view class="price">¥{{bookDetail.paperPrice == '0.00' ? '免费' :
            bookDetail.paperPrice}}</view>
          <view class="price"
            >¥{{bookDetail.paperPrice == '0.00' ? '免费' :
            bookDetail.paperPrice}}</view
          >
        </view>
      </view>
      <!-- 网店 -->
      <view class="book-web">
        <t-image src="/static/images/bookService/detail/jd.png" wx:if="{{bookDetail.JDLink}}" bind:tap="goShop" data-link="{{bookDetail.JDLink}}" data-type="jd"></t-image>
        <t-image src="/static/images/bookService/detail/tmall.png" width="32" height="22" bind:tap="goShop" data-link="{{bookDetail.tmallLink}}" wx:if="{{bookDetail.tmallLink}}"></t-image>
        <t-image src="/static/images/bookService/detail/dangdang.png" bind:tap="goShop" data-link="{{bookDetail.dangdangLink}}" wx:if="{{bookDetail.dangdangLink}}"></t-image>
        <t-image src="/static/images/bookService/detail/jd.png" bind:tap="goShop" data-link="{{bookDetail.weidianLink}}" wx:if="{{bookDetail.weidianLink}}"></t-image>
        <t-image
          src="/static/images/bookService/detail/jd.png"
          wx:if="{{bookDetail.JDLink}}"
          bind:tap="goShop"
          data-link="{{bookDetail.JDLink}}"
          data-type="jd"
        ></t-image>
        <t-image
          src="/static/images/bookService/detail/tmall.png"
          width="32"
          height="22"
          bind:tap="goShop"
          data-link="{{bookDetail.tmallLink}}"
          wx:if="{{bookDetail.tmallLink}}"
        ></t-image>
        <t-image
          src="/static/images/bookService/detail/dangdang.png"
          bind:tap="goShop"
          data-link="{{bookDetail.dangdangLink}}"
          wx:if="{{bookDetail.dangdangLink}}"
        ></t-image>
        <t-image
          src="/static/images/bookService/detail/jd.png"
          bind:tap="goShop"
          data-link="{{bookDetail.weidianLink}}"
          wx:if="{{bookDetail.weidianLink}}"
        ></t-image>
      </view>
    </view>
  </view>
  <view class="book-resource">
    <t-tabs defaultValue="{{tabValue}}" bind:change="onTabsChange" t-class="custom-tabs" t-class-content="custom-panel" class="tab-class">
    <t-tabs
      defaultValue="{{tabValue}}"
      bind:change="onTabsChange"
      t-class="custom-tabs"
      t-class-content="custom-panel"
      class="tab-class"
    >
      <t-tab-panel label="图书简介" value="brief" style="{{tabPanelstyle}}">
        <book-brief content="{{bookDetail.content}}" authorIntroduction="{{bookDetail.authorIntroduction}}" wx:if="{{bookDetail.content && bookDetail.authorIntroduction}}"></book-brief>
        <view wx:if="{{!bookDetail.content && !bookDetail.authorIntroduction}}" class="noData">
        <book-brief
          content="{{bookDetail.content}}"
          authorIntroduction="{{bookDetail.authorIntroduction}}"
          wx:if="{{bookDetail.content || bookDetail.authorIntroduction}}"
        ></book-brief>
        <view
          wx:if="{{!bookDetail.content && !bookDetail.authorIntroduction}}"
          class="noData"
        >
          <t-empty icon="folder-open" description="暂无数据" />
        </view>
      </t-tab-panel>
      <t-tab-panel label="电子书" value="1" style="{{tabPanelstyle}}">
        电子书
      </t-tab-panel>
      <t-tab-panel label="教学资源" value="jsek_teachingResources" class="{{loading ? 'loading': ''}}">
      <t-tab-panel
        label="教学资源"
        value="jsek_teachingResources"
        class="{{loading ? 'loading': ''}}"
      >
        <view wx:if="{{!loading && teach.length && !noResources}}">
          <teach-resource applyState="{{applyState}}" rejectCause="{{rejectCause}}" bind:applyResource="applyResource" applyResourceLoading="{{applyResourceLoading}}"></teach-resource>
          <tree bookInfo="{{bookDetail}}" treeList="{{teach}}" tab="{{tabValue}}" applyState="{{applyState}}" bind:downloadTeach="downloadTeach" openTeachids="{{openTeachids}}" wx:if="{{teach.length}}"></tree>
          <teach-resource
            applyState="{{applyState}}"
            rejectCause="{{rejectCause}}"
            bind:applyResource="applyResource"
            applyResourceLoading="{{applyResourceLoading}}"
          ></teach-resource>
          <tree
            bookInfo="{{bookDetail}}"
            treeList="{{teach}}"
            tab="{{tabValue}}"
            applyState="{{applyState}}"
            bind:downloadTeach="downloadTeach"
            openTeachids="{{openTeachids}}"
            wx:if="{{teach.length}}"
          ></tree>
        </view>
        <t-loading theme="circular" size="60rpx" class="loading" loading="{{loading}}" />
        <t-loading
          theme="circular"
          size="60rpx"
          class="loading"
          loading="{{loading}}"
        />
        <view wx:if="{{noResources}}" class="noData">
          <t-empty icon="folder-open" description="暂无数据" />
        </view>
      </t-tab-panel>
      <t-tab-panel label="云学习" value="jsek_cloudLearning" style="{{tabPanelstyle}}">
      <t-tab-panel
        label="云学习"
        value="jsek_cloudLearning"
        style="{{tabPanelstyle}}"
      >
        <view wx:if="{{!loading && learn.length}}">
          <learn-resource bind:getFreeResource="getFreeResource" bind:allAddShoppiingCar="allAddShoppiingCar" id="learn-resource"></learn-resource>
          <tree id="tree" bookInfo="{{bookDetail}}" tab="{{tabValue}}" treeList="{{learn}}" buyIds="{{buyIdList}}" openLearnids="{{openLearnids}}"></tree>
          <learn-resource
            bind:getFreeResource="getFreeResource"
            bind:allAddShoppiingCar="allAddShoppiingCar"
            id="learn-resource"
          ></learn-resource>
          <tree
            id="tree"
            bookInfo="{{bookDetail}}"
            tab="{{tabValue}}"
            treeList="{{learn}}"
            buyIds="{{buyIdList}}"
            openLearnids="{{openLearnids}}"
          ></tree>
        </view>
        <view wx:if="{{noResources}}" class="noData">
          <t-empty icon="folder-open" description="暂无数据" />
        </view>
      </t-tab-panel>
      <t-tab-panel label="云测试" value="questionBank" style="{{tabPanelstyle}}">
      <t-tab-panel
        label="云测试"
        value="questionBank"
        style="{{tabPanelstyle}}"
      >
        <view wx:if="{{!loading && test.length}}">
          <test-resource list="{{test}}" bookInfo="{{bookDetail}}" mockData="{{mockData}}"></test-resource>
          <test-resource
            list="{{test}}"
            bookInfo="{{bookDetail}}"
            mockData="{{mockData}}"
          ></test-resource>
        </view>
        <view wx:if="{{noResources}}" class="noData">
          <t-empty icon="folder-open" description="暂无数据" />
        </view>
      </t-tab-panel>
      <t-tab-panel label="云笔记" value="jesk_note" style="{{tabPanelstyle}}">
        <note bookInfo="{{bookDetail}}" id="note" class="note-list" bind:changeLoaidng="changeLoaidng"></note>
        <note
          bookInfo="{{bookDetail}}"
          id="note"
          class="note-list"
          bind:changeLoaidng="changeLoaidng"
        ></note>
      </t-tab-panel>
    </t-tabs>
  </view>
@@ -145,22 +268,48 @@
    </view>
    <view class="bottom-btn" bind:tap="appplyPaperBook">
      <view>
        <t-image src="/static/images/bookService/detail/paper-book.png"></t-image>
        <t-image
          src="/static/images/bookService/detail/paper-book.png"
        ></t-image>
      </view>
      <view class="btn-text">纸质样书申请</view>
    </view>
    <view class="shopCar {{(tabValue == 'jsek_teachingResources' || tabValue == 'jesk_note') ? 'disabledColor' : 'shopCarColor' }}" bind:tap="addBookShopcCar">加入购物车</view>
    <view class="buy  {{(tabValue == 'jsek_teachingResources' || tabValue == 'jesk_note') ? 'disabledColor' : 'buyColor' }}" bind:tap="buyBtn">立即购买</view>
    <view
      class="shopCar {{(tabValue == 'jsek_teachingResources' || tabValue == 'jesk_note') ? 'disabledColor' : 'shopCarColor' }}"
      bind:tap="addBookShopcCar"
      >加入购物车</view
    >
    <view
      class="buy  {{(tabValue == 'jsek_teachingResources' || tabValue == 'jesk_note') ? 'disabledColor' : 'buyColor' }}"
      bind:tap="buyBtn"
      >立即购买</view
    >
  </view>
</scroll-view>
<!-- 我要建议弹窗 -->
<suggest class="suggest-component" id="suggest-component" bookIcon="{{bookDetail.icon}}" bookName="{{bookDetail.name}}"></suggest>
<suggest
  class="suggest-component"
  id="suggest-component"
  bookIcon="{{bookDetail.icon}}"
  bookName="{{bookDetail.name}}"
></suggest>
<!-- 教学资源下载提示弹窗 -->
<t-dialog class="teachDownloadDialog" visible="{{isShowTeachDownload}}" title="提示" content="请前往PC端下载" confirm-btn="{{ confirmBtn }}" bind:confirm="closeTeachDownload" />
<t-dialog
  class="teachDownloadDialog"
  visible="{{isShowTeachDownload}}"
  title="提示"
  content="请前往PC端下载"
  confirm-btn="{{ confirmBtn }}"
  bind:confirm="closeTeachDownload"
/>
<view class="applyBox" bindtap="goApply">
  <view class="box">
    <t-image src="/static/images/home/yangshuForm.png" mode="heightFix" class="img" />
    <t-image
      src="/static/images/home/yangshuForm.png"
      mode="heightFix"
      class="img"
    />
    <view class="num" wx:if="{{num > 0}}">{{num}}</view>
  </view>
</view>
</view>
packageBookService/pages/bookServices/detail/index.wxss
@@ -281,7 +281,9 @@
.tab-class {
  --td-loading-color: #ff6c00
  --td-loading-color: #ff6c00;
  --td-tab-nav-bg-color: #fff;
  --td-tab-track-color: #ff6c00
}
.loading {
packageBookService/pages/bookServices/examination/examination.js
@@ -258,8 +258,18 @@
        item.isUserAnswer = this.isHaveAnswer(radioChecked)
      }
    })
    const cardListUpdata = this.data.cardList
    cardListUpdata.forEach(item => {
      item.infoList.forEach(citem => {
        if (citem.id == id) {
          citem.userAnswer = radioChecked
          citem.isUserAnswer = this.isHaveAnswer(radioChecked)
        }
      })
    })
    this.setData({
      questionDataList: questionList
      questionDataList: questionList,
      cardList: cardListUpdata
    })
    if (this.data.answerType == 'mock') {
      this.setData({
@@ -271,16 +281,27 @@
  onChangeInput(e) {
    const inputData = e.detail.value.detail.value
    const id = e.detail.value.currentTarget.dataset.id
    const index = e.detail.value.currentTarget.dataset.index
    const index = Number(e.detail.value.currentTarget.dataset.index)
    console.log(index);
    const questionList = this.data.questionDataList
    questionList.forEach(item => {
      if (item.id == id) {
        item.userAnswer[index] = inputData,
          item.isUserAnswer = this.isHaveAnswer(item.userAnswer)
        item.userAnswer[index] = inputData
        return item.isUserAnswer = this.isHaveAnswer(inputData)
      }
    })
    const cardListUpdata = this.data.cardList
    cardListUpdata.forEach(item => {
      item.infoList.forEach(citem => {
        if (citem.id == id) {
          citem.userAnswer[index] = inputData
          return citem.isUserAnswer = this.isHaveAnswer(inputData)
        }
      })
    })
    this.setData({
      questionDataList: questionList
      questionDataList: questionList,
      cardList: cardListUpdata,
    })
    if (this.data.answerType == 'mock') {
      this.setData({
@@ -563,19 +584,19 @@
            errorList: JSON.parse(res[0].value)
          })
        } catch (error) {
        }
      })
  },
  // 获取题库题目
  getQuestionList(oldData) {
  async getQuestionList(oldData) {
    // 清空正确题数记录
    this.setData({
      cardList: [],
      correctNum: 0,
    })
    let flag = 0
    this.data.idPathList.forEach((pathitem) => {
    for (let index = 0; index < this.data.idPathList.length; index++) {
      const pathitem = this.data.idPathList[index];
      const pathList = this.data.cardList
      pathList.push({
        path: pathitem.productLinkPath,
@@ -608,7 +629,7 @@
          size: 999
        }
      }
      app.MG.store.getProductDetail(query).then((res) => {
      await app.MG.store.getProductDetail(query).then((res) => {
        this.setData({
          total: res.datas.cmsDatas[0].datas.length
        })
@@ -738,13 +759,13 @@
          })
          this.setData({
            questionDataList: questionList,
            cardList: cardUpdatedList
            cardList: cardUpdatedList,
          })
        })
      })
    })
    }
    this.setData({
      loading: false,
      loading: false
    })
  },
  // 批改题目 (练习,我的错题,我的收藏,,组卷)
@@ -1368,6 +1389,140 @@
  // 获取组卷题目列表
  async getMockDataList(questionList, oldList) {
    const questionDataList = this.data.questionDataList
    // for (let pathindex = 0; pathindex < questionList.length; pathindex++) {
    //   const pathitem = questionList[pathindex];
    //   let itemIds = []
    //   pathitem.infoList.forEach(item => {
    //     itemIds.push(item.id + '')
    //   })
    //   let query = {
    //     path: '*',
    //     cmsPath: this.data.rootCmsItemId,
    //     cmsType: '*',
    //     productId: this.data.bookId,
    //     queryType: '*',
    //     itemIds,
    //     itemFields: {
    //       Embedded_QuestionBank_Stem: [],
    //       Embedded_QuestionBank_AnalysisCon: [],
    //       Embedded_QuestionBank_Answer: [],
    //       Embedded_QuestionBank_Option: [],
    //       Embedded_QuestionBank_QuestionType: [],
    //       Embedded_QuestionBank_StemStyle: [],
    //       Embedded_QuestionBank_OptionStyle: [],
    //       Embedded_QuestionBank_KnowledgePoint: [],
    //       Embedded_QuestionBank_Difficulty: []
    //     }
    //   }
    //   await app.MG.store.getProductDetail(query).then((res) => {
    //     res.datas.cmsDatas[0].datas.forEach((item, index) => {
    //       // 循环questionList,给每题赋值分数
    //       let oldObj
    //       if (oldList) oldObj = oldList.find((oldItem) => oldItem.id == item.id)
    //       let questionObj = {
    //         // number: pathitem.infoList.find(infoItem => infoItem.itemId == item.id).number,
    //         id: item.id,
    //         score: pathitem.infoList.find(infoItem => infoItem.id == item.id).score,
    //         stem:
    //           item.Embedded_QuestionBank_QuestionType == 'completion'
    //             ? JSON.parse(item.Embedded_QuestionBank_Stem)
    //               .stemTxt.replaceAll('<vacancy>', ',input,')
    //               .split(',')
    //             : JSON.parse(item.Embedded_QuestionBank_Stem), // 题干
    //         answer: item.Embedded_QuestionBank_Answer, // 答案
    //         option: item.Embedded_QuestionBank_Option
    //           ? JSON.parse(item.Embedded_QuestionBank_Option)
    //           : '', // 选择题选项
    //         analysisCon: item.Embedded_QuestionBank_AnalysisCon, // 解析
    //         questionType: item.Embedded_QuestionBank_QuestionType, // 题型
    //         optionStyle: item.Embedded_QuestionBank_OptionStyle, // 选项显示类型
    //         stemStyle: item.Embedded_QuestionBank_StemStyle, // 题干显示类型
    //         difficulty: item.Embedded_QuestionBank_Difficulty
    //           ? 4 - item.Embedded_QuestionBank_Difficulty
    //           : 0, // 难度等级
    //         userAnswer: oldObj
    //           ? oldObj.answer
    //           : item.Embedded_QuestionBank_QuestionType == 'completion' ||
    //             item.Embedded_QuestionBank_QuestionType == 'multipleChoice'
    //             ? []
    //             : '',
    //         isUserAnswer: oldObj ? this.isHaveAnswer(oldObj.userAnswer) : false,
    //         isRight: oldObj ? oldObj.isRight : null,
    //         // isComplete: oldObj ? oldObj.isComplete : false,
    //         isComplete: this.data.mockData.state == '3' ? true : oldObj ? this.isHaveAnswer(oldObj.answer) : false,
    //         isCollect: this.data.collectList.indexOf(item.id) > -1 ? true : false,
    //         isUnfold: '' // 控制解析的折叠面板是否展开
    //       }
    //       // 多选和填空答案肯为数组,要转换JSON格式
    //       if (
    //         questionObj.questionType == 'completion' ||
    //         questionObj.questionType == 'multipleChoice'
    //       ) {
    //         try {
    //           questionObj.answer = JSON.parse(questionObj.answer)
    //         } catch (error) {
    //           questionObj.answer = item.Embedded_QuestionBank_Answer
    //         }
    //       }
    //       // 填空题改造
    //       if (questionObj.questionType == 'completion') {
    //         let index = 0
    //         for (let i = 0; i < questionObj.stem.length; i++) {
    //           const item = questionObj.stem[i]
    //           if (item == 'input') {
    //             questionObj.stem[i] = {
    //               num: index,
    //               data: 'input'
    //             }
    //             if (!oldObj) questionObj.userAnswer[index] = ''
    //             index++
    //           }
    //         }
    //       }
    //       // 获取图片
    //       if (questionObj.stemStyle == 'Image' || questionObj.stemStyle == 'TxtAndImage') {
    //         questionObj.stem.stemImage = getPublicImage(questionObj.stem.stemImage, 150)
    //       }
    //       if (questionObj.optionStyle == 'Image' || questionObj.optionStyle == 'TxtAndImage') {
    //         questionObj.option.forEach(optionItem => {
    //           if (optionItem.img) optionItem.img = getPublicImage(optionItem.img, 150)
    //         })
    //       }
    //       if (oldObj && oldObj.isRight) {
    //         this.setData({
    //           correctNum: this.data.correctNum + 1
    //         })
    //       }
    //       if (item.questionType != 'shortAnswer' && item.isComplete) {
    //         this.setData({
    //           subjectiveTotal: this.data.subjectiveTotal + 1
    //         })
    //       }
    //       // if (oldObj && isHaveAnswer(oldObj.answer)) countDownRef.value.changeAlready()
    //       // cardList赋值
    //       let cardIndex = this.data.cardList.findIndex((item) => item.catalogName == pathitem.catalogName)
    //       debugger
    //       let infoIndex = this.data.cardList[cardIndex].infoList.findIndex(infoItem => infoItem.id == item.id)
    //       this.setData({
    //         [`cardList[${cardIndex}].infoList[${infoIndex}]`]: questionObj
    //       })
    //       let questionList = []
    //       const cardUpdatedList = this.data.cardList
    //       cardUpdatedList.forEach(aitem => {
    //         aitem.infoList.forEach((bitem, bindex) => {
    //           questionList.push(bitem)
    //           bitem.number = bindex + 1
    //         })
    //       })
    //       this.setData({
    //         questionDataList: questionList,
    //         cardList: cardUpdatedList
    //       })
    //       console.log('组卷题目列表', this.data.questionDataList);
    //     })
    //   })
    // }
    questionList.forEach(async (pathitem, pathindex) => {
      let itemIds = []
      pathitem.infoList.forEach(item => {
@@ -1500,7 +1655,6 @@
      })
    })
    this.setData({
      // questionDataList: questionDataList,
      loading: false
    })
  },
packageBookService/pages/bookServices/examination/examination.wxml
@@ -32,6 +32,8 @@
    currentIndex="{{currentIndex}}"
    questionList="{{questionDataList}}"
    submitStatus="{{submitStatus}}"
    subjectiveGrade="{{subjectiveGrade}}"
    subjectiveNum="{{subjectiveNum}}"
  ></question-schedule>
  <question-list
    wx:if="{{!loading}}"
packageBookService/pages/bookServices/examination/questionList/index.js
@@ -16,13 +16,18 @@
      type: Number,
      value: 1
    },
    isNight:{
      type:Boolean,
      value:false
    isNight: {
      type: Boolean,
      value: false
    },
    answerType:{
      type:Boolean,
      value:''
    answerType: {
      type: String,
      value: ''
    }
  },
  observers: {
    'questionList': function (newValue) {
      console.log(newValue);
    }
  },
  created() {
@@ -33,6 +38,7 @@
   */
  data: {
    inputstyle: 'border: 2rpx solid rgba(220,220,220,1);border-radius: 12rpx;',
    shortAnswer: 'font-size: 28rpx',
    placeholderstyle: "font-size:28rpx",
    current: 2,
    autoplay: true,
packageBookService/pages/bookServices/examination/questionList/index.wxml
@@ -1,35 +1,75 @@
<!--pages/bookServices/examination/questionList/index.wxml-->
<view class="question-list" style="background-color:{{isNight ? '#000' : '#fff'}}">
<view
  class="question-list"
  style="background-color:{{isNight ? '#000' : '#fff'}}"
>
  <!-- 题型title -->
  <view class="question-title" wx:if="{{questionList[showIndex].type}}" style="background-color:{{isNight ? '#000' : '#fff'}}">
    <text class="title-name">{{questionList[showIndex].type}}</text><text class="title-score" style="color: {{isNight ? '#fff' : '#000'}};">(每题{{questionList[showIndex].score}}分)</text>
  <view
    class="question-title"
    wx:if="{{questionList[showIndex].type}}"
    style="background-color:{{isNight ? '#000' : '#fff'}}"
  >
    <text class="title-name">{{questionList[showIndex].type}}</text
    ><text class="title-score" style="color: {{isNight ? '#fff' : '#000'}};"
      >(每题{{questionList[showIndex].score}}分)</text
    >
  </view>
  <!-- 题目列表 -->
  <swiper class="swiper" bind:change="changeSwiper" current="{{currentIndex}}">
    <swiper-item wx:for="{{questionList}}" wx:key="{{id}}">
      <!-- 题干 -->
      <view class="question-stem title-score" style="color: {{isNight ? '#fff' : '#000'}};">
      <view
        class="question-stem title-score"
        style="color: {{isNight ? '#fff' : '#000'}};"
      >
        <!-- 题号 -->
        <text>{{item.number}}.</text>
        <!-- 仅文字 -->
        <view wx:if="{{item.stemStyle == 'Txt' && item.questionType != 'completion'}}">{{item.stem.stemTxt}}</view>
        <view
          wx:if="{{item.stemStyle == 'Txt' && item.questionType != 'completion'}}"
          >{{item.stem.stemTxt}}</view
        >
        <!-- 仅图片 -->
        <view wx:elif="{{item.stemStyle == 'Image'}}">
          <t-image src="{{item.stem.stemImage}}" />
        </view>
        <!-- 图片加文字 -->
        <view wx:elif="{{item.stemStyle == 'TxtAndImage'}}" class="title-TxtAndImage">
        <view
          wx:elif="{{item.stemStyle == 'TxtAndImage'}}"
          class="title-TxtAndImage"
        >
          <text>{{item.stem.stemTxt}}</text>
          <t-image src="{{item.stem.stemImage}}"></t-image>
        </view>
        <!-- 富文本 -->
        <view wx:elif="{{item.stemStyle == 'RichText'}} " class="title-RichText">
        <view
          wx:elif="{{item.stemStyle == 'RichText'}} "
          class="title-RichText"
        >
          <rich-text nodes="{{item.stem.stemTxt}}"></rich-text>
        </view>
        <!-- 填空题 -->
        <view wx:if="{{item.questionType == 'completion'}}">
          <view class="completion-box" wx:for="{{item.stem}}" wx:for-item="inputItem" wx:for-index="inputIndex" wx:key="inputIndex">
            <t-input disabled="{{item.isComplete}}" bind:change="onChangeInput" data-value="{{item.option}}" data-id="{{item.id}}" data-index="{{inputItem.num}}" class="title-input" style="{{inputstyle}}" placeholder-style="{{placeholderstyle}}" wx:if="{{inputItem.data == 'input'}}" placeholder="请输入文字" value="{{item.userAnswer[inputItem.num]}}"></t-input>
          <view
            class="completion-box"
            wx:for="{{item.stem}}"
            wx:for-item="inputItem"
            wx:for-index="inputIndex"
            wx:key="inputIndex"
          >
            <t-input
              disabled="{{item.isComplete}}"
              bind:change="onChangeInput"
              data-value="{{item.option}}"
              data-id="{{item.id}}"
              data-index="{{inputItem.num}}"
              class="title-input"
              style="{{inputstyle}}"
              placeholder-style="{{placeholderstyle}}"
              wx:if="{{inputItem.data == 'input'}}"
              placeholder="请输入文字"
              value="{{item.userAnswer[inputItem.num]}}"
            ></t-input>
            <text wx:else>{{inputItem}}</text>
          </view>
        </view>
@@ -37,19 +77,44 @@
      <!-- 答题区域 -->
      <view class="question-answer">
        <!-- 单选题 -->
        <t-radio-group wx:if="{{item.questionType == 'singleChoice' || item.questionType == 'judge'}}" defaultValue="{{item.userAnswer}}" disabled="{{item.isComplete}}" bind:change="onChangeRadio" class="radio-group" data-value="{{item.option}}" data-id="{{item.id}}">
          <view wx:for="{{item.option}}" wx:for-item="contentItem" wx:for-index="contentIndex" wx:key="contentIndex">
            <t-radio value="{{contentItem.value}}" icon="none" placement="right" borderless>
              <view class="radio-item {{item.userAnswer == contentItem.value ? 'radio-active' : ''}} {{(answerType == 'collectQuestion' || answerType == 'errorQuestion') && (item.answer == contentItem.value && item.answer == item.userAnswer  ? 'radio-correct' : item.userAnswer == contentItem.value && item.userAnswer != item.answer ?'radio-error' :'')}}">
        <t-radio-group
          wx:if="{{item.questionType == 'singleChoice' || item.questionType == 'judge'}}"
          defaultValue="{{item.userAnswer}}"
          disabled="{{item.isComplete}}"
          bind:change="onChangeRadio"
          class="radio-group"
          data-value="{{item.option}}"
          data-id="{{item.id}}"
        >
          <view
            wx:for="{{item.option}}"
            wx:for-item="contentItem"
            wx:for-index="contentIndex"
            wx:key="contentIndex"
          >
            <t-radio
              value="{{contentItem.value}}"
              icon="none"
              placement="right"
              borderless
            >
              <view
                class="radio-item {{(answerType == 'option' || answerType == 'mock' ) && !submitStatus && item.userAnswer == contentItem.value ? 'radio-active' : ''}} {{ (item.answer == contentItem.value && item.answer == item.userAnswer &&  submitStatus) ? 'radio-correct' :  (item.userAnswer == contentItem.value && item.userAnswer != item.answer && submitStatus) ?'radio-error' :'' }}"
              >
                <!-- 仅文字 -->
                <text wx:if="{{item.optionStyle == 'Txt'}}">{{contentItem.value}}、{{contentItem.txt}}</text>
                <text wx:if="{{item.optionStyle == 'Txt'}}"
                  >{{contentItem.value}}、{{contentItem.txt}}</text
                >
                <!-- 仅图片 -->
                <view wx:if="{{item.optionStyle == 'Image'}}" class="fl-center">
                  <text>{{contentItem.value}}、</text>
                  <t-image src="{{contentItem.img}}"></t-image>
                </view>
                <!-- 文字加图片 -->
                <view wx:if="{{item.optionStyle == 'TxtAndImage'}}" class="fl-center">
                <view
                  wx:if="{{item.optionStyle == 'TxtAndImage'}}"
                  class="fl-center"
                >
                  <text>{{contentItem.value}}、</text>
                  <text>{{contentItem.txt}}</text>
                  <t-image src="{{contentItem.img}}"></t-image>
@@ -59,25 +124,51 @@
                  <text>{{contentItem.value}}、</text>
                  <rich-text nodes="{{contentItem.txt}}"></rich-text>
                </view>
                <text wx:if="{{(answerType == 'collectQuestion' || answerType == 'errorQuestion') && (item.answer == contentItem.value && item.answer == item.userAnswer)}}">对</text>
                <text wx:if="{{(answerType == 'collectQuestion' || answerType == 'errorQuestion') && (item.userAnswer == contentItem.value && item.userAnswer != item.answer)}}">错</text>
                <text
                  wx:if="{{submitStatus && (item.answer == contentItem.value && item.answer == item.userAnswer)}}"
                  >对</text
                >
                <text
                  wx:if="{{ submitStatus && (item.userAnswer == contentItem.value && item.userAnswer != item.answer)}}"
                  >错</text
                >
              </view>
            </t-radio>
          </view>
        </t-radio-group>
        <!-- 多选题 -->
        <t-checkbox-group disabled="{{item.isComplete}}" class="checkbox-group" wx:elif="{{item.questionType == 'multipleChoice'}}" t-class="box" borderless bind:change="onChangeRadio" data-value="{{item.option}}" data-id="{{item.id}}" defaultValue="{{item.userAnswer}}">
          <view wx:for="{{item.option}}" wx:for-item="contentItem" wx:for-index="contentIndex" wx:key="contentIndex">
        <t-checkbox-group
          disabled="{{item.isComplete}}"
          class="checkbox-group"
          wx:elif="{{item.questionType == 'multipleChoice'}}"
          t-class="box"
          borderless
          bind:change="onChangeRadio"
          data-value="{{item.option}}"
          data-id="{{item.id}}"
          defaultValue="{{item.userAnswer}}"
        >
          <view
            wx:for="{{item.option}}"
            wx:for-item="contentItem"
            wx:for-index="contentIndex"
            wx:key="contentIndex"
          >
            <t-checkbox block="{{false}}" value="{{contentItem.value}}">
              <!-- 仅文字 -->
              <text wx:if="{{item.optionStyle == 'Txt'}}">{{contentItem.value}}、{{contentItem.txt}}</text>
              <text wx:if="{{item.optionStyle == 'Txt'}}"
                >{{contentItem.value}}、{{contentItem.txt}}</text
              >
              <!-- 仅图片 -->
              <view wx:if="{{item.optionStyle == 'Image'}}" class="fl-center">
                <text>{{contentItem.value}}、</text>
                <t-image src="{{contentItem.img}}"></t-image>
              </view>
              <!-- 文字加图片 -->
              <view wx:if="{{item.optionStyle == 'TxtAndImage'}}" class="fl-center">
              <view
                wx:if="{{item.optionStyle == 'TxtAndImage'}}"
                class="fl-center"
              >
                <text>{{contentItem.value}}、</text>
                <text>{{contentItem.txt}}</text>
                <t-image src="{{contentItem.img}}"></t-image>
@@ -91,26 +182,110 @@
          </view>
        </t-checkbox-group>
        <!-- 简答 翻译 -->
        <t-textarea disabled="{{item.isComplete}}" value="{{item.userAnswer}}" bind:change="onChangeRadio" data-value="{{item.option}}" data-id="{{item.id}}" class="option-textarea" wx:elif="{{item.questionType == 'shortAnswer'}}" t-class="external-class" placeholder="请输入文字" bordered maxlength="500" disableDefaultPadding="{{true}}" indicator style="{{style}}" />
        <t-textarea
          disabled="{{item.isComplete}}"
          value="{{item.userAnswer}}"
          bind:change="onChangeRadio"
          data-value="{{item.option}}"
          data-id="{{item.id}}"
          class="option-textarea"
          wx:elif="{{item.questionType == 'shortAnswer'}}"
          t-class="external-class"
          placeholder="请输入文字"
          bordered
          maxlength="500"
          disableDefaultPadding="{{true}}"
          indicator
          style="{{style}}"
        />
      </view>
      <!-- 解析 -->
      <view class="analysis" wx:if="{{item.isComplete}}">
      <!-- 单选、多选解析 -->
      <view
        class="analysis"
        wx:if="{{item.isComplete && (item.questionType == 'singleChoice' || item.questionType == 'judge' || item.questionType == 'multipleChoice')}}"
      >
        <view class="analysis-answer">
          <view class="answer-correct answer-center">
            <text class="analysis-title-box">正确答案:</text>
            <rich-text nodes="{{item.answer}}" style="font-size: 40rpx"></rich-text>
            <rich-text
              nodes="{{item.answer}}"
              style="font-size: 40rpx"
            ></rich-text>
          </view>
          <view class="answer-center marginL {{item.isRight ? 'answer-correct' : 'answer-error'}}" wx:if="{{item.questionType !== 'shortAnswer'}}">
            <text class="analysis-title-box">您的答案:</text><text class="answer-text">{{item.userAnswer}}</text>
          <view
            class="answer-center marginL {{item.isRight ? 'answer-correct' : 'answer-error'}}"
            wx:if="{{item.questionType !== 'shortAnswer'}}"
          >
            <text class="analysis-title-box">您的答案:</text
            ><text class="answer-text">{{item.userAnswer}}</text>
          </view>
        </view>
        <view class="analysis-text" wx:if="{{item.analysisCon}}" style="color: {{isNight ? '#fff' : '#000'}};">
          答案解析:<rich-text nodes="{{item.analysisCon}}" class="analysis-content"></rich-text>
        <view
          class="analysis-text"
          wx:if="{{item.analysisCon}}"
          style="color: {{isNight ? '#fff' : '#000'}};"
        >
          答案解析:<rich-text
            nodes="{{item.analysisCon}}"
            class="analysis-content"
          ></rich-text>
        </view>
      </view>
      <!-- 填空、简答解析 -->
      <view
        class="analysis"
        wx:if="{{(item.questionType == 'shortAnswer' || item.questionType == 'completion') && item.isComplete}}"
      >
        <view
          style="display: {{item.questionType == 'completion' ? 'flex' : 'block'}}"
        >
          <text
            wx:if="{{item.questionType == 'completion'}}"
            class="short-answer-fz answer-correct"
            >正确答案:</text
          >
          <text
            wx:if="{{item.questionType == 'shortAnswer'}}"
            class="short-answer-fz"
          >
            参考答案:
          </text>
          <rich-text
            wx:if="{{item.questionType == 'shortAnswer'}}"
            nodes="{{item.answer}}"
            style="font-size: 28rpx; color:{{item.questionType == 'completion' ? '#1FBC1F' : '#000'}}"
          ></rich-text>
          <view
            wx:if="{{item.questionType == 'completion'}}"
            class="short-answer-fz answer-correct"
            >{{item.answer}}</view
          >
        </view>
        <view
          wx:if="{{item.questionType == 'completion'}}"
          class="short-answer-mr"
          style="display: {{item.questionType == 'completion' ? 'flex' : 'block'}}"
        >
          <text
            class="short-answer-fz {{item.isRight ? 'answer-correct' : 'answer-error'}}"
            >您的答案:</text
          >
          <view
            class="short-answer-fz {{item.isRight ? 'answer-correct' : 'answer-error'}}"
            >{{item.userAnswer}}</view
          >
        </view>
        <view class="short-answer-mr">
          <text class="short-answer-fz">答案解析:</text>
          <rich-text
            nodes="{{item.analysisCon}}"
            style="font-size: 28rpx"
          ></rich-text>
        </view>
      </view>
    </swiper-item>
    <swiper-item>
    <swiper-item wx:if="{{answerType !== 'collectQuestion'}}">
      <text>没有更多了。。。</text>
    </swiper-item>
  </swiper>
</view>
</view>
packageBookService/pages/bookServices/examination/questionList/index.wxss
@@ -32,8 +32,8 @@
}
.swiper {
  min-height: 900rpx;
  /* min-height: 900rpx; */
  height: 100%;
}
/* 单选题 */
@@ -52,7 +52,7 @@
}
.radio-active {
  background-color: #ff6c00;
  background-color: #fff0e6;
}
.radio-correct {
@@ -110,7 +110,7 @@
  width: 97%;
}
/* 解析 */
/* 单选 、多选 解析 */
.analysis {
  margin-top: 40rpx;
}
@@ -122,6 +122,7 @@
.answer-correct {
  color: #1FBC1F;
}
.answer-error {
@@ -160,4 +161,15 @@
  color: #333333;
  font-size: 28rpx;
  margin-top: 20rpx;
}
/* 简单、翻译解析 */
.short-answer-fz {
  font-size: 28rpx;
}
.short-answer-mr {
  margin-top:
    40rpx;
}
packageBookService/pages/bookServices/examination/questionOptions/index.js
@@ -224,6 +224,9 @@
    },
    // 底部提交按钮
    submitBtn() {
      this.setData({
        noReady: 0
      })
      // 我的错题和收藏  直接走提交逻辑
      if (this.properties.answerType == 'collectQuestion' || this.properties.answerType == 'errorQuestion') {
        this.submitPaper()
packageBookService/pages/bookServices/examination/questionOptions/index.wxml
@@ -1,30 +1,64 @@
<!--pages/bookServices/examination/questionOptions/index.wxml-->
<view class="page-bottom" style="color: {{isNight ? '#fff' : '#000'}}; background-color:{{isNight ? '#000' : '#fff'}}">
  <view class="li-option" bind:tap="setCollect" style="color: {{isNight ? '#fff' : '#000'}};">
    <t-image src="{{ questionDataList[currentIndex].isCollect ? '/static/images/bookService/detail/collecting.png' : '/static/images/bookService/examination/collect.png'}}">
<view
  class="page-bottom"
  style="color: {{isNight ? '#fff' : '#000'}}; background-color:{{isNight ? '#000' : '#fff'}}"
>
  <view
    class="li-option"
    bind:tap="setCollect"
    style="color: {{isNight ? '#fff' : '#000'}};"
  >
    <t-image
      src="{{ questionDataList[currentIndex].isCollect ? '/static/images/bookService/detail/collecting.png' : '/static/images/bookService/examination/collect.png'}}"
    >
    </t-image>
    收藏
  </view>
  <view class="li-option" bind:tap="handlePopup" style="color: {{isNight ? '#fff' : '#000'}};">
    <t-image src="/static/images/bookService/examination/questionCard.png"></t-image>
  <view
    class="li-option"
    bind:tap="handlePopup"
    style="color: {{isNight ? '#fff' : '#000'}};"
  >
    <t-image
      src="/static/images/bookService/examination/questionCard.png"
    ></t-image>
    答题卡
  </view>
  <view class="li-option" bind:tap="setUpBtn" style="color: {{isNight ? '#fff' : '#000'}};">
  <view
    class="li-option"
    bind:tap="setUpBtn"
    style="color: {{isNight ? '#fff' : '#000'}};"
  >
    <t-image src="/static/images/bookService/examination/setting.png"></t-image>
    设置
  </view>
  <view class="li-option" bind:tap="resterBtn" wx:if="{{answerType == 'option' || (answerType == 'mock' && !submitStatus)}}" style="color: {{isNight ? '#fff' : '#000'}};">
  <view
    class="li-option"
    bind:tap="resterBtn"
    wx:if="{{answerType == 'option' || (answerType == 'mock' && !submitStatus)}}"
    style="color: {{isNight ? '#fff' : '#000'}};"
  >
    <t-image src="/static/images/bookService/examination/reset.png"></t-image>
    重做
  </view>
  <view class="bottom-submit">
    <t-button theme="primary" size="large" style="{{btnStyle}}" bind:tap="submitBtn">{{(answerType == 'option' || answerType == 'mock') && !submitStatus ? '提交' :
      '退出'}}</t-button>
    <t-button
      theme="primary"
      size="large"
      style="{{btnStyle}}"
      bind:tap="submitBtn"
      >{{(answerType == 'option' || answerType == 'mock') && !submitStatus ?
      '提交' : '退出'}}</t-button
    >
  </view>
</view>
<!-- 答题卡 -->
<t-popup visible="{{questionCardState}}" bind:visible-change="onVisibleChange" placement="bottom">
<t-popup
  visible="{{questionCardState}}"
  bind:visible-change="onVisibleChange"
  placement="bottom"
>
  <view class="popup-block">
    <view class="popup-header">
      <view class="popup-title">答题卡</view>
@@ -47,7 +81,15 @@
          <text class="title-text">{{item.catalogName}}</text>
        </view>
        <view class="question-list">
          <view bind:tap="goQuestion" data-id="{{citem.id}}" wx:for="{{item.infoList}}" wx:for-item="citem" wx:for-index="cindex" class="question-box {{citem.isUserAnswer ? 'answered' : 'un-answered'}}">
          <view
            bind:tap="goQuestion"
            data-id="{{citem.id}}"
            wx:for="{{item.infoList}}"
            wx:for-item="citem"
            wx:for-index="cindex"
            wx:key="cindex"
            class="question-box {{citem.isUserAnswer ? 'answered' : 'un-answered'}}"
          >
            {{citem.number}}
          </view>
        </view>
@@ -57,7 +99,11 @@
</t-popup>
<!-- 设置 -->
<t-popup visible="{{setUpPopup}}" bind:visible-change="onSetUpChange" placement="bottom">
<t-popup
  visible="{{setUpPopup}}"
  bind:visible-change="onSetUpChange"
  placement="bottom"
>
  <view class="popup-block set-up-popup">
    <view class="popup-header">
      <view class="popup-title">设置</view>
@@ -66,27 +112,46 @@
    <view class="brightness">
      <text>A-</text>
      <view class="brightness-slider">
        <t-slider value="{{sliderValue}}" theme="capsule" step="{{10}}" bind:change="onChangeSlider" />
        <t-slider
          value="{{sliderValue}}"
          theme="capsule"
          step="{{10}}"
          bind:change="onChangeSlider"
        />
      </view>
      <text>A+</text>
    </view>
    <!-- 模式 -->
    <view>
      <t-radio-group class="test-radio" t-class="horizontal-box" value="{{radioItem}}" bind:change="onRadioChange" style="margin: 0px">
      <t-radio-group
        class="test-radio"
        t-class="horizontal-box"
        value="{{radioItem}}"
        bind:change="onRadioChange"
        style="margin: 0px"
      >
        <view class="card {{radioItem == 'daytime' ? 'card--active' : ''}}">
          <t-radio value="daytime" icon="none" borderless>
            <view class="radio-content" slot="content">
              <t-image src="{{ radioItem == 'daytime' ? '/static/images/bookService/examination/rijian.png' : '/static/images/bookService/detail/notest.png'}}"></t-image>
              <text style="color: {{radioItem == 'daytime' ? '#fff':''}};">日间模式</text>
              <t-image
                src="{{ radioItem == 'daytime' ? '/static/images/bookService/examination/rijian.png' : '/static/images/bookService/detail/notest.png'}}"
              ></t-image>
              <text style="color: {{radioItem == 'daytime' ? '#fff':''}};"
                >日间模式</text
              >
            </view>
          </t-radio>
        </view>
        <view class="card {{radioItem == 'night' ? 'card--active' : ''}}">
          <t-radio value="night" icon="none" borderless>
            <view class="radio-content" slot="content">
              <t-image src="{{ radioItem == 'night' ? '/static/images/bookService/detail/practice-icon.png' : '/static/images/bookService/examination/yejian.png'}}"></t-image>
              <text style="color: {{radioItem == 'night' ? '#fff':''}};">夜间模式</text>
              <t-image
                src="{{ radioItem == 'night' ? '/static/images/bookService/detail/practice-icon.png' : '/static/images/bookService/examination/yejian.png'}}"
              ></t-image>
              <text style="color: {{radioItem == 'night' ? '#fff':''}};"
                >夜间模式</text
              >
            </view>
          </t-radio>
        </view>
@@ -97,7 +162,15 @@
<!-- 测试报告 -->
<t-dialog class="test-report" visible="{{testReportState}}" cancel-btn="{{null}}" confirm-btn="{{null}}" close-btn="{{true}}" title="测试报告" bind:close="closeTestReportDialog">
<t-dialog
  class="test-report"
  visible="{{testReportState}}"
  cancel-btn="{{null}}"
  confirm-btn="{{null}}"
  close-btn="{{true}}"
  title="测试报告"
  bind:close="closeTestReportDialog"
>
  <view slot="content" class="test-report">
    <view class="report-content-top">
      <view class="report-li">
@@ -110,24 +183,34 @@
      </view>
      <view class="report-li">
        <view class="report-li-left">其中客观题:</view>
        <view class="report-li-right">{{subjectiveTotal}}道,分值{{subjectiveGrade}}分</view>
        <view class="report-li-right"
          >{{subjectiveTotal}}道,分值{{subjectiveGrade}}分</view
        >
      </view>
      <view class="report-li">
        <view class="report-li-left">答对:</view>
        <view class="report-li-right"><text class="correct-color">{{correctNum}}</text> 道</view>
        <view class="report-li-right"
          ><text class="correct-color">{{correctNum}}</text> 道</view
        >
      </view>
      <view class="report-li">
        <view class="report-li-left">答错:</view>
        <view class="report-li-right"><text class="error-color">{{subjectiveTotal - correctNum}}</text>
          道</view>
        <view class="report-li-right"
          ><text class="error-color">{{subjectiveTotal - correctNum}}</text>
          道</view
        >
      </view>
      <view class="report-li">
        <view class="report-li-left">客观题得分:</view>
        <view class="report-li-right"><text class="score-color">{{subjectiveNum}}</text> 分</view>
        <view class="report-li-right"
          ><text class="score-color">{{subjectiveNum}}</text> 分</view
        >
      </view>
    </view>
    <view class="report-content-bottom">
      <t-button theme="primary" bind:tap="viewAnswer" style="width: 560rpx">查看答案与解析</t-button>
      <t-button theme="primary" bind:tap="viewAnswer" style="width: 560rpx"
        >查看答案与解析</t-button
      >
    </view>
  </view>
</t-dialog>
</t-dialog>
packageBookService/pages/bookServices/examination/questionSchedule/index.js
@@ -28,7 +28,16 @@
    isNight: {
      type: Boolean,
      value: false
    },
    subjectiveGrade: {
      type: Number,
      value: 0
    },
    subjectiveNum: {
      type: Number,
      value: 0
    }
  },
  created(
packageBookService/pages/bookServices/examination/questionSchedule/index.wxml
@@ -1,12 +1,40 @@
<!--pages/bookServices/examination/questionSchedule/questionSchedule.wxml-->
<view class="schedule" id="schedule" style="background-color:{{isNight ? '#000' : '#fff'}}">
<view
  wx:if="{{((answerType == 'option' || answerType == 'mock') && !submitStatus) || answerType == 'collectQuestion' || answerType =='errorQuestion'}}"
  class="schedule"
  id="schedule"
  style="background-color:{{isNight ? '#000' : '#fff'}}"
>
  <view class="schedule-top">
    <view class="question-schedule" style="color: {{isNight ? '#fff' : '#000'}};">答题进度<text class="parimary-color question-num">{{ready}}</text>
    <!-- 答题进度 -->
    <view
      class="question-schedule"
      style="color: {{isNight ? '#fff' : '#000'}};"
      >{{(answerType == 'option' || answerType == 'mock') ? '答题进度' :
      answerType == 'collectQuestion' ? '收藏数量' : '错题数量' }}<text
        class="parimary-color question-num"
        >{{ready}}</text
      >
      <text>/{{questionList.length}}</text>
    </view>
    <view class="remainder" wx:if="{{!submitStatus && (answerType == 'option' || answerType == 'mock')}}" style="color:  {{isNight ? '#fff' : '#000'}};">剩余时间 <text class="parimary-color">{{showTime}}</text></view>
    <view
      class="remainder"
      wx:if="{{!submitStatus && (answerType == 'option' || answerType == 'mock')}}"
      style="color:  {{isNight ? '#fff' : '#000'}};"
      >剩余时间 <text class="parimary-color">{{showTime}}</text></view
    >
  </view>
  <!-- 进度条 -->
  <view class="schedule-progress">
    <t-progress percentage="{{percentage}}" color="#ff6c00" label="" />
  </view>
</view>
</view>
<!--  练习、组卷 提交后 -->
<view wx:else class="schedule submit-message">
  <view>
    客观题得分:<text class="parimary-color">{{subjectiveNum}}分</text> /
    {{subjectiveGrade}}分
  </view>
  <view> {{ready}} /{{questionList.length}} </view>
</view>
packageBookService/pages/bookServices/examination/questionSchedule/index.wxss
@@ -29,4 +29,13 @@
.question-num {
  margin-left: 10rpx;
}
.submit-message {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 40rpx 20rpx;
  color: #000;
  font-size: 28rpx;
}
packageBookService/pages/bookServices/list/index.wxml
@@ -19,10 +19,10 @@
    </scroll-view>
    <view class="header-sort" bind:tap="sortClick">
      <view class="sort-name">排序</view>
      <view class="sort-icon">
        <t-icon name="swap-left" size="24rpx" class="icon-right" color="{{sort == 'Asc' ? '#ff6c00' : ''}}" />
        <t-icon name="swap-left" size="24rpx" class="icon-left" color="{{sort == 'Desc' ? '#ff6c00' : ''}}" />
      </view>
      <!-- <view class="sort-icon"> -->
      <t-icon name="swap-left" size="28rpx" class="icon-right" color="{{sort == 'Asc' ? '#ff6c00' : ''}}" />
      <t-icon name="swap-left" size="28rpx" class="icon-left" color="{{sort == 'Desc' ? '#ff6c00' : ''}}" />
      <!-- </view> -->
    </view>
  </view>
  <t-pull-down-refresh value="{{enable}}" loadingProps="{{loadingProps}}" loadingTexts="{{['下拉刷新', '松手刷新', '正在刷新', '刷新完成']}}" bind:refresh="onRefresh" class="down-refresh">
packageBookService/pages/bookServices/list/index.wxss
@@ -15,31 +15,51 @@
}
.header-sort {
  position: relative;
  background-color: #fff;
  line-height: 96rpx;
  width: 150rpx;
  line-height: 90rpx;
  height: 94rpx;
  width: 15vw;
  font-size: 28rpx;
  color: #999;
  display: flex;
  border-bottom: 1px solid #ededed;
}
.sort-name {
  padding: 4rpx 0 0 10rpx;
}
.header-scroll {
  width: 80vw;
  height: 96rpx;
  width: 85vw;
}
.sort-icon {
.icon-left {
  position: absolute;
  top: 38rpx;
  right: 26rpx;
  transform: rotate(270deg);
}
.icon-right {
  position: absolute;
  top: 38rpx;
  right: 10rpx;
  transform: rotate(90deg);
}
/* .sort-icon {
  transform: rotate(90deg);
  position: relative;
}
.sort-icon .icon-left {
  transform: rotate(180deg);
}
} */
.list-container {
  height: 80vh;
  margin-top: 20rpx;
  /* background-color: #fff; */
}
.assort-title {