zhuf 9 mesi fa
parent
commit
074325d118

+ 24 - 0
auto-imports.d.ts

@@ -33,6 +33,7 @@ declare global {
   const definePage: typeof import('unplugin-vue-router/runtime')['definePage']
   const deleteEbook: typeof import('./src/composables/ebook')['deleteEbook']
   const deletedoc: typeof import('./src/composables/doc')['deletedoc']
+  const discussList: typeof import('./src/composables/discuss')['discussList']
   const docDialogVisible: typeof import('./src/composables/doc')['docDialogVisible']
   const docList: typeof import('./src/composables/doc')['docList']
   const docListLoading: typeof import('./src/composables/doc')['docListLoading']
@@ -49,6 +50,7 @@ declare global {
   const getCurrentScope: typeof import('vue')['getCurrentScope']
   const getFileType: typeof import('./src/composables/index')['getFileType']
   const h: typeof import('vue')['h']
+  const handleClickPractice: typeof import('./src/composables/practice')['handleClickPractice']
   const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch']
   const inDebug: typeof import('./src/composables/index')['inDebug']
   const inject: typeof import('vue')['inject']
@@ -82,6 +84,9 @@ declare global {
   const onUnmounted: typeof import('vue')['onUnmounted']
   const onUpdated: typeof import('vue')['onUpdated']
   const pausableWatch: typeof import('@vueuse/core')['pausableWatch']
+  const practiceDialogList: typeof import('./src/composables/practice')['practiceDialogList']
+  const practiceDialogVisible: typeof import('./src/composables/practice')['practiceDialogVisible']
+  const practiceList: typeof import('./src/composables/practice')['practiceList']
   const provide: typeof import('vue')['provide']
   const provideLocal: typeof import('@vueuse/core')['provideLocal']
   const reactify: typeof import('@vueuse/core')['reactify']
@@ -97,14 +102,17 @@ declare global {
   const refDefault: typeof import('@vueuse/core')['refDefault']
   const refThrottled: typeof import('@vueuse/core')['refThrottled']
   const refWithControl: typeof import('@vueuse/core')['refWithControl']
+  const requestDiscussList: typeof import('./src/composables/discuss')['requestDiscussList']
   const requestDocList: typeof import('./src/composables/doc')['requestDocList']
   const requestEbookList: typeof import('./src/composables/ebook')['requestEbookList']
+  const requestPracticeList: typeof import('./src/composables/practice')['requestPracticeList']
   const requestWorkList: typeof import('./src/composables/work')['requestWorkList']
   const requestdocList: typeof import('./src/composables/doc')['requestdocList']
   const resolveComponent: typeof import('vue')['resolveComponent']
   const resolveRef: typeof import('@vueuse/core')['resolveRef']
   const resolveUnref: typeof import('@vueuse/core')['resolveUnref']
   const sendDoc: typeof import('./src/composables/doc')['sendDoc']
+  const sendPractice: typeof import('./src/composables/practice')['sendPractice']
   const sendWork: typeof import('./src/composables/work')['sendWork']
   const senddoc: typeof import('./src/composables/doc')['senddoc']
   const shallowReactive: typeof import('vue')['shallowReactive']
@@ -349,6 +357,7 @@ declare module 'vue' {
     readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
     readonly definePage: UnwrapRef<typeof import('unplugin-vue-router/runtime')['definePage']>
     readonly deleteEbook: UnwrapRef<typeof import('./src/composables/ebook')['deleteEbook']>
+    readonly discussList: UnwrapRef<typeof import('./src/composables/discuss')['discussList']>
     readonly docDialogVisible: UnwrapRef<typeof import('./src/composables/doc')['docDialogVisible']>
     readonly docList: UnwrapRef<typeof import('./src/composables/doc')['docList']>
     readonly docListLoading: UnwrapRef<typeof import('./src/composables/doc')['docListLoading']>
@@ -365,6 +374,7 @@ declare module 'vue' {
     readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
     readonly getFileType: UnwrapRef<typeof import('./src/composables/index')['getFileType']>
     readonly h: UnwrapRef<typeof import('vue')['h']>
+    readonly handleClickPractice: UnwrapRef<typeof import('./src/composables/practice')['handleClickPractice']>
     readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']>
     readonly inDebug: UnwrapRef<typeof import('./src/composables/index')['inDebug']>
     readonly inject: UnwrapRef<typeof import('vue')['inject']>
@@ -397,6 +407,9 @@ declare module 'vue' {
     readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
     readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
     readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']>
+    readonly practiceDialogList: UnwrapRef<typeof import('./src/composables/practice')['practiceDialogList']>
+    readonly practiceDialogVisible: UnwrapRef<typeof import('./src/composables/practice')['practiceDialogVisible']>
+    readonly practiceList: UnwrapRef<typeof import('./src/composables/practice')['practiceList']>
     readonly provide: UnwrapRef<typeof import('vue')['provide']>
     readonly provideLocal: UnwrapRef<typeof import('@vueuse/core')['provideLocal']>
     readonly reactify: UnwrapRef<typeof import('@vueuse/core')['reactify']>
@@ -412,13 +425,16 @@ declare module 'vue' {
     readonly refDefault: UnwrapRef<typeof import('@vueuse/core')['refDefault']>
     readonly refThrottled: UnwrapRef<typeof import('@vueuse/core')['refThrottled']>
     readonly refWithControl: UnwrapRef<typeof import('@vueuse/core')['refWithControl']>
+    readonly requestDiscussList: UnwrapRef<typeof import('./src/composables/discuss')['requestDiscussList']>
     readonly requestDocList: UnwrapRef<typeof import('./src/composables/doc')['requestDocList']>
     readonly requestEbookList: UnwrapRef<typeof import('./src/composables/ebook')['requestEbookList']>
+    readonly requestPracticeList: UnwrapRef<typeof import('./src/composables/practice')['requestPracticeList']>
     readonly requestWorkList: UnwrapRef<typeof import('./src/composables/work')['requestWorkList']>
     readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
     readonly resolveRef: UnwrapRef<typeof import('@vueuse/core')['resolveRef']>
     readonly resolveUnref: UnwrapRef<typeof import('@vueuse/core')['resolveUnref']>
     readonly sendDoc: UnwrapRef<typeof import('./src/composables/doc')['sendDoc']>
+    readonly sendPractice: UnwrapRef<typeof import('./src/composables/practice')['sendPractice']>
     readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
     readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
     readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>
@@ -652,6 +668,7 @@ declare module '@vue/runtime-core' {
     readonly defineComponent: UnwrapRef<typeof import('vue')['defineComponent']>
     readonly definePage: UnwrapRef<typeof import('unplugin-vue-router/runtime')['definePage']>
     readonly deleteEbook: UnwrapRef<typeof import('./src/composables/ebook')['deleteEbook']>
+    readonly discussList: UnwrapRef<typeof import('./src/composables/discuss')['discussList']>
     readonly docDialogVisible: UnwrapRef<typeof import('./src/composables/doc')['docDialogVisible']>
     readonly docList: UnwrapRef<typeof import('./src/composables/doc')['docList']>
     readonly docListLoading: UnwrapRef<typeof import('./src/composables/doc')['docListLoading']>
@@ -668,6 +685,7 @@ declare module '@vue/runtime-core' {
     readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
     readonly getFileType: UnwrapRef<typeof import('./src/composables/index')['getFileType']>
     readonly h: UnwrapRef<typeof import('vue')['h']>
+    readonly handleClickPractice: UnwrapRef<typeof import('./src/composables/practice')['handleClickPractice']>
     readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']>
     readonly inDebug: UnwrapRef<typeof import('./src/composables/index')['inDebug']>
     readonly inject: UnwrapRef<typeof import('vue')['inject']>
@@ -700,6 +718,9 @@ declare module '@vue/runtime-core' {
     readonly onUnmounted: UnwrapRef<typeof import('vue')['onUnmounted']>
     readonly onUpdated: UnwrapRef<typeof import('vue')['onUpdated']>
     readonly pausableWatch: UnwrapRef<typeof import('@vueuse/core')['pausableWatch']>
+    readonly practiceDialogList: UnwrapRef<typeof import('./src/composables/practice')['practiceDialogList']>
+    readonly practiceDialogVisible: UnwrapRef<typeof import('./src/composables/practice')['practiceDialogVisible']>
+    readonly practiceList: UnwrapRef<typeof import('./src/composables/practice')['practiceList']>
     readonly provide: UnwrapRef<typeof import('vue')['provide']>
     readonly provideLocal: UnwrapRef<typeof import('@vueuse/core')['provideLocal']>
     readonly reactify: UnwrapRef<typeof import('@vueuse/core')['reactify']>
@@ -715,13 +736,16 @@ declare module '@vue/runtime-core' {
     readonly refDefault: UnwrapRef<typeof import('@vueuse/core')['refDefault']>
     readonly refThrottled: UnwrapRef<typeof import('@vueuse/core')['refThrottled']>
     readonly refWithControl: UnwrapRef<typeof import('@vueuse/core')['refWithControl']>
+    readonly requestDiscussList: UnwrapRef<typeof import('./src/composables/discuss')['requestDiscussList']>
     readonly requestDocList: UnwrapRef<typeof import('./src/composables/doc')['requestDocList']>
     readonly requestEbookList: UnwrapRef<typeof import('./src/composables/ebook')['requestEbookList']>
+    readonly requestPracticeList: UnwrapRef<typeof import('./src/composables/practice')['requestPracticeList']>
     readonly requestWorkList: UnwrapRef<typeof import('./src/composables/work')['requestWorkList']>
     readonly resolveComponent: UnwrapRef<typeof import('vue')['resolveComponent']>
     readonly resolveRef: UnwrapRef<typeof import('@vueuse/core')['resolveRef']>
     readonly resolveUnref: UnwrapRef<typeof import('@vueuse/core')['resolveUnref']>
     readonly sendDoc: UnwrapRef<typeof import('./src/composables/doc')['sendDoc']>
+    readonly sendPractice: UnwrapRef<typeof import('./src/composables/practice')['sendPractice']>
     readonly shallowReactive: UnwrapRef<typeof import('vue')['shallowReactive']>
     readonly shallowReadonly: UnwrapRef<typeof import('vue')['shallowReadonly']>
     readonly shallowRef: UnwrapRef<typeof import('vue')['shallowRef']>

+ 1 - 1
src/components/collapse-bar.vue

@@ -70,7 +70,7 @@ onMounted(() => {
         class="flex justify-center items-center px-6 bg-hex-16271F text-white space-x-1 rounded-t-12px overflow-hidden h-96px"
         v-show="!collapsed">
         <!-- <slot /> -->
-        <collapse-item ref="CollapseItemRefs" v-for="({ title, icon }, idx) in CollapseItemList" :title="title"
+        <collapse-item ref="CollapseItemRefs" v-for="({ title, icon }, idx) in CollapseItemList" :title="idx+title"
           :icon="icon" @click="handleClickCollapseItem(idx)"></collapse-item>
       </div>
     </Transition>

+ 1 - 1
src/components/collapse-nav.vue

@@ -61,7 +61,7 @@ onMounted(() => {
       <div
         class="flex flex-col justify-center items-center py-6 bg-hex-16271F text-white space-y-1 rounded-l-12px overflow-hidden w-96px"
         v-show="!collapsed">
-        <collapse-item ref="CollapseItemRefs" v-for="({ title,icon }, idx) in CollapseItemList" :title="title" :icon="icon"
+        <collapse-item ref="CollapseItemRefs" v-for="({ title,icon }, idx) in CollapseItemList" :title="idx+title" :icon="icon"
           @click="handleClickCollapseItem(idx)"></collapse-item>
       </div>
     </Transition>

+ 31 - 0
src/composables/discuss.ts

@@ -0,0 +1,31 @@
+import request from "~/request/request"
+
+export const discussList = ref([])
+
+let isCalled = false;
+export function requestDiscussList(d: any = {}) {
+  if (isCalled) {
+    return;
+  }
+  isCalled = true;
+
+  return request({
+    url: '/ybk/hdd/index',
+    data: {
+      limit: 1000,
+      hdd_type: 3,
+      ...d,
+    }
+  }).then((res) => {
+    if (res.code === '1') {
+      discussList.value = res.data.page_data
+      return res.data.page_data
+    }
+    return []
+  }).catch((error) => {
+    console.error(error)
+    return []
+  })
+}
+
+

+ 42 - 0
src/composables/practice.ts

@@ -0,0 +1,42 @@
+import request from "~/request/request"
+
+export const practiceList = ref([])
+
+let isCalled = false;
+export function requestPracticeList(d: any = {}) {
+  if (isCalled) {
+    return;
+  }
+  isCalled = true;
+
+  return request({
+    url: '/ybk/hdd/index',
+    data: {
+      limit: 1000,
+      hdd_type: 2,
+      ...d,
+    }
+  }).then((res) => {
+    if (res.code === '1') {
+      practiceList.value = res.data.page_data
+      return res.data.page_data
+    }
+    return []
+  }).catch((error) => {
+    console.error(error)
+    return []
+  })
+}
+
+export const practiceDialogVisible = ref(false)
+export const practiceDialogList = ref([])
+
+export function handleClickPractice(hdd_content: any) {
+  practiceDialogList.value = JSON.parse(hdd_content)
+  console.log('practiceDialogList.value : ', practiceDialogList.value)
+  practiceDialogVisible.value = true
+}
+
+export function sendPractice() {
+  // TODO: 发送练习 ws
+}

+ 0 - 2
src/composables/work.ts

@@ -1,7 +1,5 @@
 import request from "~/request/request"
 
-import { user } from "~/store/user"
-
 export const workDialogVisible = ref(false)
 
 export const workListLoading = ref(true)

+ 1 - 0
src/main.ts

@@ -11,3 +11,4 @@ const router = createRouter({
 })
 app.use(router)
 app.mount('#app')
+

+ 58 - 11
src/pages/index.vue

@@ -1,19 +1,24 @@
 <script setup lang="ts" generic="T extends any, O extends any">
+// import request from "~/request/request"
+
 import { Plus, Minus } from '@element-plus/icons-vue'
 import { ebookDialogVisible, requestEbookList, ebookSelectedList, ebookList } from '~/composables/ebook'
 import { docDialogVisible, requestDocList, docList, docSelectedList } from '~/composables/doc'
 import { workDialogVisible, requestWorkList, workList } from '~/composables/work'
-// import request from "~/request/request"
+import { discussList, requestDiscussList } from '~/composables/discuss'
+import { practiceList, requestPracticeList, practiceDialogVisible, sendPractice } from '~/composables/practice'
+
 
 
 // const router = useRouter()
 
-const yj_id = 33951
+const yj_id = 33952
 
 // request({
 //   url: '/ybk/hdd/index',
 //   params: {
-//     yj_id
+//     yj_id,
+//     hdd_type: 2
 //   }
 // }).then(res => {
 //   console.log('res : ', res)
@@ -90,7 +95,7 @@ onMounted(() => {
   })
 })
 
-function handleBarSelect(idx: number) {
+async function handleBarSelect(idx: number) {
   console.log('handleBarSelect : ', idx)
 
   if (idx === useMode.value && idx === 1) {
@@ -112,8 +117,20 @@ function handleBarSelect(idx: number) {
     case 2:
       timerDialogVisible.value = true
       break;
+    case 3:
+      break;
+    case 4:
+      break;
+    case 5:
+      await requestDiscussList({ yj_id })
+      barRef.value?.setSubcollapsed()
+      break;
+    case 6:
+      await requestPracticeList({ yj_id })
+      barRef.value?.setSubcollapsed()
+      break;
     case 7:
-      requestWorkList()
+      await requestWorkList()
       workDialogVisible.value = true
       break;
     default:
@@ -288,14 +305,38 @@ const BoardMap: Record<T_title, {
     <canvas ref="boardRef" class="absolute z-10"></canvas>
     <collapse-nav @select="handleNavSelect"></collapse-nav>
     <collapse-bar ref="barRef" @select="handleBarSelect">
-      <div class=" flex flex-col items-center justify-around  h-72px b-r b-r-dark-50 pr-12px">
-        <div class="h-26px w-120px">
-          <el-slider v-model="PenConfig.eraserLineWidth" :step="1" :min="1" :max="40" />
+      <div flex v-show="useMode === 1">
+        <div class=" flex flex-col items-center justify-around  h-72px b-r b-r-dark-50 pr-12px mr-4px">
+          <div class="h-26px w-120px">
+            <el-slider v-model="PenConfig.eraserLineWidth" :step="1" :min="1" :max="40" />
+          </div>
+          <div class="text-xs tracking-wider">板擦大小</div>
         </div>
-        <div class="text-xs tracking-wider">板擦大小</div>
+        <collapse-item title="撤销" icon="/mipmap/sc_erase_undo.png" @click="undo" />
+        <collapse-item title="清空" icon="/mipmap/sc_erase_clear.png" @click="reset" />
       </div>
-      <collapse-item title="撤销" icon="/mipmap/sc_erase_undo.png" @click="undo" />
-      <collapse-item title="清空" icon="/mipmap/sc_erase_clear.png" @click="reset" />
+      <div flex v-show="useMode === 5">
+        <collapse-item v-for="({ yhd_name }) in discussList" :title="yhd_name" icon="/mipmap/sc_bottom_discuss.png" />
+      </div>
+      <div flex v-show="useMode === 6">
+        <collapse-item v-for="({ yhd_name, hdd_content }) in practiceList" :title="yhd_name"
+          icon="/mipmap/sc_bottom_practice.png" @click="handleClickPractice(hdd_content)" />
+      </div>
+
+      <el-dialog v-model="practiceDialogVisible" title="随堂小练" fullscreen>
+        <div class="h-92vh flex flex-col">
+          <div class="flex-auto overflow-y-auto">
+            <div class="mb-20px flex html_block" v-for="({ hq_content }, idx) in practiceDialogList">
+              <span mr-2>{{ idx + 1 }}.</span>
+              <div v-html="hq_content"></div>
+            </div>
+          </div>
+          <div class="px-16 pt-10 flex justify-end items-end">
+            <el-button type="primary" @click="sendPractice" size="large">发送</el-button>
+          </div>
+        </div>
+      </el-dialog>
+
     </collapse-bar>
   </div>
 
@@ -401,6 +442,12 @@ const BoardMap: Record<T_title, {
 
 </template>
 
+<style>
+.html_block img {
+  display: inline-block !important;
+}
+</style>
+
 <style scoped>
 :deep(.el-radio) {
   height: auto