1
litian
7 天以前 2cf96b01c381604fa6711cb0d9891b19cb269c26
src/views/readerPages/webHome.vue
@@ -585,8 +585,15 @@
        </div>
        <!-- 题库底部收藏夹和错题集 -->
        <ul class="question-bottom" v-if="activeMenu == '题库'">
          <li @click="selectExercisesType('collection')">收藏夹</li>
          <li @click="selectExercisesType('wrong')">错题本</li>
          <li @click="selectExercisesType('collection')" v-if="bookConfig.textbookComponents.indexOf('A434F2C0') > -1">
            <div><img :src="shouCang"  class="hover" /></div>
            <div>收藏夹</div>
          </li>
          <li @click="selectExercisesType('wrong')" v-if="bookConfig.textbookComponents.indexOf('AFC1A288') > -1">
            <div><img :src="cuoTi"  class="hover" /></div>
            <div>错题本</div>
          </li>
        </ul>
        <!-- 菜单内容收起 -->
        <div class="menuStateBox" v-if="menuState.open">
@@ -648,6 +655,18 @@
            <!-- 画笔画布 -->
            <div class="canvas-box" v-show="canvasShow">
              <canvas id="canvasRef" :width="canvasWith" :height="canvasheight"></canvas>
            </div>
            <!-- 番茄闹钟组件 -->
            <div
              class="watch-box"
              v-if="pomodoroRef && pomodoroRef.isShow"
              :style="{ top:position.x + 'px', left:position.y + 'px'}"
            >
              <p @mousedown.native="mouseDown">{{ formatTime(pomodoroRef.pageData.currentTime) }}</p>
              <span @click="()=> pomodoroRef.isRuning ? pomodoroRef.pauseFun() : pomodoroRef.startFun()">{{pomodoroRef.isRuning ? '暂停': '开始'}}</span>
              <span @click="pomodoroRef.resetFun" >重置</span>
              <span @click="pomodoroRef.handleRestFun(false)">长休息</span>
              <span @click="pomodoroRef.handleRestFun(true)">短休息</span>
            </div>
          </div>
        </div>
@@ -1252,11 +1271,11 @@
    title="AI智能问答"
    align-center
    v-model="wendaVisible"
    width="60%"
    width="80%"
    class="myAnserDialogs"
  >
    <div class="wendabox">
      <iframe src="https://yiyan.baidu.com/" frameborder="0"></iframe>
      <iframe :src="aiQuestion" frameborder="0"></iframe>
    </div>
  </el-dialog>
  <el-dialog title="词典" align-center v-model="cidianVisible" width="60%" class="myAnserDialogs">
@@ -1325,14 +1344,19 @@
    <!-- <calculatorNew></calculatorNew> -->
    <iframe src="https://www.geogebra.org/scientific" frameborder="0" class="iframe-box"></iframe>
  </el-dialog>
  <!-- 番茄闹钟 -->
  <!-- <pomodoro ref="pomodoroRef" /> -->
</template>
<script setup lang="ts">
import examination from '@/views/examination/index.vue'
import pomodoro from '@/views/components/pomodoro.vue'
import { ref, reactive, watch, onMounted, onBeforeMount, onBeforeUnmount, inject } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import { ElMessage, ElMessageBox, valueEquals } from 'element-plus'
import { useFormatData } from '@/hooks/public'
import useClipboard from 'vue-clipboard3'
const { toClipboard } = useClipboard()
const { formatTime } = useFormatData()
const MG: any = inject('MG')
const toolClass = inject('toolClass')
//获取路由器
@@ -1430,6 +1454,9 @@
import shanchu from '@/assets/images/operation/delete.png'
import bianji from '@/assets/images/operation/bianji.png'
import video from '@/assets/images/content/resource.png'
import shouCang from '@/assets/images/menu/shouCang.svg'
import cuoTi from '@/assets/images/menu/cuoTi.svg'
//引入VueOfficeDocx组件
import VueOfficeDocx from '@vue-office/docx'
//引入相关样式
@@ -1443,7 +1470,8 @@
import { loadMicroApp } from 'qiankun'
import { microApps } from '@/child.ts'
import { open } from 'fs'
let token = localStorage.getItem('token')
import { digitalTextbooks, tokenKey} from '@/assets/js/config.ts'
let token = localStorage.getItem(tokenKey)
const canvasWith = ref(800)
const canvasheight = ref(3000)
const screenWidth = ref(
@@ -1618,7 +1646,7 @@
const getBookInfo = () => {
  const obj = {
    storeInfo: 'jsek_digitalTextbooks',
    storeInfo: digitalTextbooks,
    path: '*',
    queryType: '*',
    coverSize: {
@@ -1641,14 +1669,17 @@
    }
  }
  MG.store.getProductList(obj).then((res) => {
    console.log(res.datas, '图书信息')
    bookInfo.value = res.datas[0]
    if (res.datas[0].purchasedSaleMethodIdList.indexOf(res.datas[0].defaultSaleMethodId) > -1) {
      isBuy.value = true
    } else {
      isBuy.value = false
    if(res.datas.length > 0){
      bookInfo.value = res.datas[0]
      if (res.datas[0].purchasedSaleMethodIdList.indexOf(res.datas[0].defaultSaleMethodId) > -1) {
        isBuy.value = true
      } else {
        isBuy.value = false
      }
      tryPageCount.value = Number(res.datas[0].probationPage)
    }else{
      tryPageCount.value = 0
    }
    tryPageCount.value = Number(res.datas[0].probationPage)
  })
}
@@ -1815,6 +1846,11 @@
      icon: fanqiezhong,
      isShow: bookConfig.value.textbookComponents.indexOf('E4DC9777') > -1
    }
    // {
    //   name: '番茄闹钟',
    //   icon: fanqiezhong,
    //   isShow: true
    // }
  ]
  floatingToolBox = [
    {
@@ -1931,7 +1967,7 @@
}
const handleNodeClick = (data) => {
  if (!isBuy.value) {
  if (!isBuy.value && tryPageCount.value > 0) {
    if (data.start < tryPageCount.value) {
      headerData.process = data.start
      if (window.qiankunState && window.qiankunState.gotoPage)
@@ -1988,11 +2024,11 @@
              item.icon = ''
            }
            if (resourceType.value == 'default') {
              if (item.isTeacherResource == '否') {
              if (item.isDefaultResource == '是') {
                defaultResourceList.value.push(item)
              }
            } else {
              if (item.isTeacherResource == '是') {
              if (item.isTeacherResource == '是' && item.isDefaultResource == '否') {
                teacherResourceList.value.push(item)
              }
            }
@@ -2065,9 +2101,9 @@
              })
            }
            if (!activeClassify.value) {
              activeClassify.value = classifySelectList.value[0].key
              activeClassify.value = classifySelectList.value[0]?.key
              defaultResourceList.value.forEach((resItem1) => {
                if (resItem1.resourceType == classifySelectList.value[0].title) {
                if (resItem1.resourceType == classifySelectList.value[0]?.title) {
                  resourceDataList.value.push(resItem1)
                }
                if (activeClassify.value == 'other') {
@@ -2148,9 +2184,9 @@
              })
            }
            if (!activeClassify.value) {
              activeClassify.value = classifySelectList.value[0].key
              activeClassify.value = classifySelectList.value[0]?.key
              teacherResourceList.value.forEach((resItem1) => {
                if (resItem1.resourceType == classifySelectList.value[0].title) {
                if (resItem1.resourceType == classifySelectList.value[0]?.title) {
                  resourceDataList.value.push(resItem1)
                }
                if (activeClassify.value == 'other') {
@@ -2217,7 +2253,6 @@
  } else if (data.resourceType == '模型') {
    console.log(data, 222)
    let file = bookConfig.value.requestCtx + '/file/api/ApiDownload?md5=' + data.md5
    console.log(file.exd, 777)
    const ctx = 'https://jsek.bnuic.com'
    if (data.md5) {
      sceneUrl.value =
@@ -2237,7 +2272,7 @@
    // } else if (data.resourcePath) {
    //   window.open(bookConfig.value.resourceUrl + '/' + data.resourcePath)
    // }
  } else if (data.resourceType == 'PPT' || data.resourceType == 'PDF') {
  } else if (data.resourceType == 'PPT' || data.resourceType == 'PDF' || data.resourceType == 'WORD') {
    let md5 = data.md5
    let dataList = []
    MG.file
@@ -2804,6 +2839,7 @@
    case '检索':
      allSearchReault.value = []
      if (window.qiankunState && window.qiankunState.searchBookByKeyword) {
        console.log(window.qiankunState.searchBookByKeyword)
        let searchReault = window.qiankunState.searchBookByKeyword(searchText.value)
        if (searchReault.length > 0) {
          listLoading.value = true
@@ -2921,7 +2957,7 @@
      break
  }
}
type pomodoroType = InstanceType<typeof Pomodoro>
const baiduVisible = ref(false)
const wendaVisible = ref(false)
const cidianVisible = ref(false)
@@ -2931,18 +2967,21 @@
const modelTool = ref(false)
const shengciVisble = ref(false)
const calculatorVisble = ref(false)
const pomodoroRef = ref<pomodoroType>()
const activeTool = ref(0)
const toolState = reactive({
  open: true
})
const resourceUrl = ref('')
const selectTeachTools = (item) => {
const aiQuestion = ref("")
const selectTeachTools = (item: any) => {
  if (token) {
    activeTool.value = item.name
    switch (item.name) {
      case 'AI智能问答':
        aiQuestion.value = ""
        wendaVisible.value = true
        aiQuestion.value = bookConfig.value.aiQuestion ? bookConfig.value.aiQuestion : "https://yiyan.baidu.com/"
        break
      case 'GGB函数工具':
        functionVisible.value = true
@@ -2962,6 +3001,8 @@
        break
      case '计算器':
        calculatorVisble.value = true
      case '番茄闹钟':
        pomodoroRef.value.setDialogVisable(true)
        break
    }
  } else {
@@ -4464,6 +4505,29 @@
const openFormulaDialog = () => {
  formulaDialog.value = true
}
// 番茄钟移动
const isMove = ref<boolean>(false)
const position = reactive({x:100,y:100})
const dragOffset = reactive({x:0,y:0})
const mouseDown = (e: MouseEvent) => {
  isMove.value = true
  dragOffset.x = e.clientX - position.x
  dragOffset.y = e.clientY - position.y
  document.addEventListener('mousemove', mouseMove)
  document.addEventListener('mouseup', mouseUp)
}
const mouseUp = (e: MouseEvent) => {
  isMove.value = false
  document.removeEventListener('mousemove', mouseMove)
  document.removeEventListener('mouseup', mouseUp)
}
const mouseMove = (e: MouseEvent) => {
  if (isMove.value) {
    position.x = e.clientX - dragOffset.x
    position.y = e.clientY - dragOffset.y
  }
}
</script>
<style lang="less">
@@ -5080,9 +5144,15 @@
          border: 1px solid #cfcfcf;
          border-radius: 10px;
          background-color: #f9f9f9;
          display: flex;
          justify-content: center;
          align-items: center;
          text-align: center;
          padding-top:10px;
          // display: flex;
          // justify-content: center;
          // align-items: center;
          img{
            width:20px;
            height:20px;
          }
        }
      }
    }
@@ -5213,6 +5283,33 @@
          left: 0;
          z-index: 96;
          background: rgba(255, 255, 255, 0.2);
        }
        .watch-box {
          display: flex;
          align-items: center;
          position: absolute;
          background-color: #555;
          color: #fff;
          padding: 10px;
          border-radius: 5px;
          width: max-content;
          p {
            cursor: move;
            padding: 0 8px;
            font-size: 18px;
            border-radius: 4px;
            margin-right: 10px;
            background-color: #666;
          }
          span {
            cursor: pointer;
            border-right: 1px solid #fff;
            padding: 0 4px;
            font-size: 14px;
            &:last-child {
              border-right: none;
            }
          }
        }
      }
    }
@@ -5680,7 +5777,7 @@
}
.myAnserDialogs {
  width: 700px;
  width: 80%;
  height: 90vh;
}